@portnet/ui 6.0.2 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +652 -0
- package/dist/esm/index.js +72 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/v2/__tests__/AppMain.test.js +130 -0
- package/dist/esm/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js +180 -0
- package/dist/esm/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js +150 -0
- package/dist/esm/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js +93 -0
- package/dist/esm/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldError.test.js +71 -38
- package/dist/esm/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FieldNaming.test.js +160 -0
- package/dist/esm/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FieldWidth.test.js +11 -11
- package/dist/esm/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FileCard.test.js +18 -17
- package/dist/esm/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js +87 -179
- package/dist/esm/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js +32 -44
- package/dist/esm/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js +101 -0
- package/dist/esm/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js +118 -199
- package/dist/esm/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/esm/v2/__tests__/MobileRowCard.test.js +44 -42
- package/dist/esm/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js +165 -0
- package/dist/esm/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js +156 -0
- package/dist/esm/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js +37 -52
- package/dist/esm/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/esm/v2/__tests__/apiError.test.js +50 -69
- package/dist/esm/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/esm/v2/__tests__/banned-patterns.test.js +41 -122
- package/dist/esm/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/esm/v2/__tests__/chart-palette.test.js +204 -0
- package/dist/esm/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/esm/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/esm/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/esm/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/esm/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/esm/v2/__tests__/fileValidation.test.js +134 -0
- package/dist/esm/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js +321 -0
- package/dist/esm/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js +68 -0
- package/dist/esm/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js +218 -0
- package/dist/esm/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/esm/v2/__tests__/labels-merge.test.js +17 -21
- package/dist/esm/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/esm/v2/__tests__/locale-fallback.test.js +35 -40
- package/dist/esm/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js +143 -0
- package/dist/esm/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/esm/v2/__tests__/rowActions.test.js +182 -0
- package/dist/esm/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js +155 -0
- package/dist/esm/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/esm/v2/__tests__/useFocusTrap.test.js +266 -402
- package/dist/esm/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js +120 -0
- package/dist/esm/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/esm/v2/components/Accordion.js +48 -70
- package/dist/esm/v2/components/Accordion.js.map +1 -1
- package/dist/esm/v2/components/ActionStrip.js +31 -43
- package/dist/esm/v2/components/ActionStrip.js.map +1 -1
- package/dist/esm/v2/components/Banner.js +25 -22
- package/dist/esm/v2/components/Banner.js.map +1 -1
- package/dist/esm/v2/components/Busy.js +14 -19
- package/dist/esm/v2/components/Busy.js.map +1 -1
- package/dist/esm/v2/components/Button.js +34 -45
- package/dist/esm/v2/components/Button.js.map +1 -1
- package/dist/esm/v2/components/CategoryTag.js +44 -27
- package/dist/esm/v2/components/CategoryTag.js.map +1 -1
- package/dist/esm/v2/components/Checkbox.js +32 -38
- package/dist/esm/v2/components/Checkbox.js.map +1 -1
- package/dist/esm/v2/components/Chip.js +23 -36
- package/dist/esm/v2/components/Chip.js.map +1 -1
- package/dist/esm/v2/components/Combobox.js +112 -136
- package/dist/esm/v2/components/Combobox.js.map +1 -1
- package/dist/esm/v2/components/CommandPalette.js +113 -198
- package/dist/esm/v2/components/CommandPalette.js.map +1 -1
- package/dist/esm/v2/components/ConfirmDialog.js +36 -45
- package/dist/esm/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/esm/v2/components/DatePicker.js +78 -81
- package/dist/esm/v2/components/DatePicker.js.map +1 -1
- package/dist/esm/v2/components/DateRangePicker.js +63 -74
- package/dist/esm/v2/components/DateRangePicker.js.map +1 -1
- package/dist/esm/v2/components/DateTimePicker.js +81 -86
- package/dist/esm/v2/components/DateTimePicker.js.map +1 -1
- package/dist/esm/v2/components/Drawer.js +71 -65
- package/dist/esm/v2/components/Drawer.js.map +1 -1
- package/dist/esm/v2/components/Dropzone.js +130 -177
- package/dist/esm/v2/components/Dropzone.js.map +1 -1
- package/dist/esm/v2/components/EmptyState.js +9 -9
- package/dist/esm/v2/components/EmptyState.js.map +1 -1
- package/dist/esm/v2/components/FavoriteToggle.js +24 -33
- package/dist/esm/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/esm/v2/components/Field.js +155 -59
- package/dist/esm/v2/components/Field.js.map +1 -1
- package/dist/esm/v2/components/FieldError.js +9 -13
- package/dist/esm/v2/components/FieldError.js.map +1 -1
- package/dist/esm/v2/components/FieldHelp.js +28 -49
- package/dist/esm/v2/components/FieldHelp.js.map +1 -1
- package/dist/esm/v2/components/FileCard.js +14 -19
- package/dist/esm/v2/components/FileCard.js.map +1 -1
- package/dist/esm/v2/components/FilterTab.js +22 -31
- package/dist/esm/v2/components/FilterTab.js.map +1 -1
- package/dist/esm/v2/components/ForbiddenPage.js +28 -8
- package/dist/esm/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/esm/v2/components/FormGrid.js +48 -54
- package/dist/esm/v2/components/FormGrid.js.map +1 -1
- package/dist/esm/v2/components/FormikDisplay.js +98 -24
- package/dist/esm/v2/components/FormikDisplay.js.map +1 -1
- package/dist/esm/v2/components/Input.js +75 -34
- package/dist/esm/v2/components/Input.js.map +1 -1
- package/dist/esm/v2/components/KPICard.js +42 -51
- package/dist/esm/v2/components/KPICard.js.map +1 -1
- package/dist/esm/v2/components/KPIStrip.js +9 -15
- package/dist/esm/v2/components/KPIStrip.js.map +1 -1
- package/dist/esm/v2/components/KV.js +16 -23
- package/dist/esm/v2/components/KV.js.map +1 -1
- package/dist/esm/v2/components/KVGrid.js +15 -23
- package/dist/esm/v2/components/KVGrid.js.map +1 -1
- package/dist/esm/v2/components/Layout.js +81 -117
- package/dist/esm/v2/components/Layout.js.map +1 -1
- package/dist/esm/v2/components/MobileRowCard.js +64 -75
- package/dist/esm/v2/components/MobileRowCard.js.map +1 -1
- package/dist/esm/v2/components/Modal.js +44 -53
- package/dist/esm/v2/components/Modal.js.map +1 -1
- package/dist/esm/v2/components/NetworkErrorPage.js +28 -11
- package/dist/esm/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/esm/v2/components/NotFoundPage.js +28 -9
- package/dist/esm/v2/components/NotFoundPage.js.map +1 -1
- package/dist/esm/v2/components/NumberInput.js +77 -107
- package/dist/esm/v2/components/NumberInput.js.map +1 -1
- package/dist/esm/v2/components/OverflowMenu.js +24 -42
- package/dist/esm/v2/components/OverflowMenu.js.map +1 -1
- package/dist/esm/v2/components/PdfViewer.js +24 -33
- package/dist/esm/v2/components/PdfViewer.js.map +1 -1
- package/dist/esm/v2/components/ProgressBar.js +28 -36
- package/dist/esm/v2/components/ProgressBar.js.map +1 -1
- package/dist/esm/v2/components/Radio.js +49 -57
- package/dist/esm/v2/components/Radio.js.map +1 -1
- package/dist/esm/v2/components/SectionErrorBoundary.js +84 -130
- package/dist/esm/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/esm/v2/components/SectionHeader.js +24 -31
- package/dist/esm/v2/components/SectionHeader.js.map +1 -1
- package/dist/esm/v2/components/Segmented.js +59 -84
- package/dist/esm/v2/components/Segmented.js.map +1 -1
- package/dist/esm/v2/components/Select.js +100 -138
- package/dist/esm/v2/components/Select.js.map +1 -1
- package/dist/esm/v2/components/ServerErrorPage.js +27 -10
- package/dist/esm/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/esm/v2/components/Skeleton.js +81 -96
- package/dist/esm/v2/components/Skeleton.js.map +1 -1
- package/dist/esm/v2/components/SkipLink.js +6 -7
- package/dist/esm/v2/components/SkipLink.js.map +1 -1
- package/dist/esm/v2/components/Spinner.js +13 -22
- package/dist/esm/v2/components/Spinner.js.map +1 -1
- package/dist/esm/v2/components/Status.js +14 -25
- package/dist/esm/v2/components/Status.js.map +1 -1
- package/dist/esm/v2/components/Stepper.js +68 -71
- package/dist/esm/v2/components/Stepper.js.map +1 -1
- package/dist/esm/v2/components/Surface.js +25 -44
- package/dist/esm/v2/components/Surface.js.map +1 -1
- package/dist/esm/v2/components/Switch.js +21 -29
- package/dist/esm/v2/components/Switch.js.map +1 -1
- package/dist/esm/v2/components/TabPanel.js +84 -0
- package/dist/esm/v2/components/TabPanel.js.map +1 -0
- package/dist/esm/v2/components/Tabs.js +43 -19
- package/dist/esm/v2/components/Tabs.js.map +1 -1
- package/dist/esm/v2/components/TelInput.js +75 -108
- package/dist/esm/v2/components/TelInput.js.map +1 -1
- package/dist/esm/v2/components/Textarea.js +21 -30
- package/dist/esm/v2/components/Textarea.js.map +1 -1
- package/dist/esm/v2/components/TimePicker.js +59 -69
- package/dist/esm/v2/components/TimePicker.js.map +1 -1
- package/dist/esm/v2/components/Toast.js +109 -163
- package/dist/esm/v2/components/Toast.js.map +1 -1
- package/dist/esm/v2/components/Tooltip.js +18 -31
- package/dist/esm/v2/components/Tooltip.js.map +1 -1
- package/dist/esm/v2/components/_ErrorPageBody.js +6 -5
- package/dist/esm/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/esm/v2/components/_pickerShared.js +2 -2
- package/dist/esm/v2/components/_pickerShared.js.map +1 -1
- package/dist/esm/v2/components/index.js +37 -0
- package/dist/esm/v2/components/index.js.map +1 -1
- package/dist/esm/v2/hooks/index.js +62 -0
- package/dist/esm/v2/hooks/index.js.map +1 -1
- package/dist/esm/v2/hooks/useAppliedFilters.js +112 -0
- package/dist/esm/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js +82 -0
- package/dist/esm/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/esm/v2/hooks/useDelayedFlag.js +5 -19
- package/dist/esm/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/esm/v2/hooks/useDensity.js +13 -17
- package/dist/esm/v2/hooks/useDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusFirstError.js +25 -33
- package/dist/esm/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js +81 -0
- package/dist/esm/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/esm/v2/hooks/useFocusTrap.js +19 -23
- package/dist/esm/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/esm/v2/hooks/useFormAutoSave.js +38 -53
- package/dist/esm/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/esm/v2/hooks/useFormCompletionProgress.js +32 -51
- package/dist/esm/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js +125 -0
- package/dist/esm/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js +99 -0
- package/dist/esm/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/esm/v2/hooks/useResolvedDensity.js +2 -10
- package/dist/esm/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/esm/v2/hooks/useSortedRows.js +3 -5
- package/dist/esm/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/esm/v2/hooks/useTabLoading.js +6 -21
- package/dist/esm/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/esm/v2/index.js +2 -3
- package/dist/esm/v2/index.js.map +1 -1
- package/dist/esm/v2/modalContext.js +2 -2
- package/dist/esm/v2/modalContext.js.map +1 -1
- package/dist/esm/v2/models/favorite.js.map +1 -1
- package/dist/esm/v2/models/personalization.js.map +1 -1
- package/dist/esm/v2/models/referentiel.js.map +1 -1
- package/dist/esm/v2/models/savedFilter.js.map +1 -1
- package/dist/esm/v2/patterns/ActionBar.js +115 -159
- package/dist/esm/v2/patterns/ActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/AppMain.js +108 -0
- package/dist/esm/v2/patterns/AppMain.js.map +1 -0
- package/dist/esm/v2/patterns/BulkActionBar.js +31 -34
- package/dist/esm/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/esm/v2/patterns/ChartFigure.js +151 -0
- package/dist/esm/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js +111 -152
- package/dist/esm/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/ColumnsToggle.js +43 -77
- package/dist/esm/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/esm/v2/patterns/DataGrid.js +221 -255
- package/dist/esm/v2/patterns/DataGrid.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js +76 -94
- package/dist/esm/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridToolbar.js +85 -89
- package/dist/esm/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/esm/v2/patterns/DataGridVirtualized.js +141 -182
- package/dist/esm/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js +26 -30
- package/dist/esm/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/esm/v2/patterns/DetailSplit.js +108 -0
- package/dist/esm/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/esm/v2/patterns/FavoriteColumn.js +15 -17
- package/dist/esm/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/esm/v2/patterns/FavoritesFilter.js +30 -39
- package/dist/esm/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/esm/v2/patterns/FilterTabBar.js +112 -0
- package/dist/esm/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/esm/v2/patterns/FormErrorSummary.js +12 -13
- package/dist/esm/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/esm/v2/patterns/FormPageShell.js +43 -41
- package/dist/esm/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/FormSection.js +30 -38
- package/dist/esm/v2/patterns/FormSection.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckbox.js +29 -39
- package/dist/esm/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js +56 -60
- package/dist/esm/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikCombobox.js +51 -69
- package/dist/esm/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDatePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikDateTimePicker.js +44 -58
- package/dist/esm/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorFocus.js +22 -23
- package/dist/esm/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/esm/v2/patterns/FormikErrorSummary.js +89 -0
- package/dist/esm/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/esm/v2/patterns/FormikFile.js +94 -78
- package/dist/esm/v2/patterns/FormikFile.js.map +1 -1
- package/dist/esm/v2/patterns/FormikInput.js +40 -53
- package/dist/esm/v2/patterns/FormikInput.js.map +1 -1
- package/dist/esm/v2/patterns/FormikRadioGroup.js +39 -51
- package/dist/esm/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/esm/v2/patterns/FormikReferentielField.js +49 -59
- package/dist/esm/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/FormikSelect.js +64 -87
- package/dist/esm/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/esm/v2/patterns/FormikTextarea.js +30 -46
- package/dist/esm/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js +53 -71
- package/dist/esm/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/esm/v2/patterns/NetworkErrorBanner.js +6 -7
- package/dist/esm/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/esm/v2/patterns/PageContent.js +10 -14
- package/dist/esm/v2/patterns/PageContent.js.map +1 -1
- package/dist/esm/v2/patterns/PreviewDrawer.js +153 -0
- package/dist/esm/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/esm/v2/patterns/ReferentielField.js +327 -312
- package/dist/esm/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/esm/v2/patterns/RowFavoriteToggle.js +27 -22
- package/dist/esm/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/esm/v2/patterns/SaveFilterDialog.js +38 -66
- package/dist/esm/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/esm/v2/patterns/SavedFiltersMenu.js +62 -81
- package/dist/esm/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/esm/v2/patterns/SkeletonPageShell.js +106 -129
- package/dist/esm/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/esm/v2/patterns/SortableHeader.js +22 -45
- package/dist/esm/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/esm/v2/patterns/Tour.js +94 -120
- package/dist/esm/v2/patterns/Tour.js.map +1 -1
- package/dist/esm/v2/patterns/_dataGridShared.js +107 -128
- package/dist/esm/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/esm/v2/patterns/_pickerSerialisation.js +6 -8
- package/dist/esm/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/esm/v2/patterns/_sort.js +17 -33
- package/dist/esm/v2/patterns/_sort.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnReorder.js +122 -160
- package/dist/esm/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/esm/v2/patterns/_useColumnResize.js +78 -96
- package/dist/esm/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/esm/v2/patterns/filterCriteria.js +102 -0
- package/dist/esm/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/esm/v2/patterns/index.js +152 -0
- package/dist/esm/v2/patterns/index.js.map +1 -1
- package/dist/esm/v2/patterns/rowActions.js +223 -0
- package/dist/esm/v2/patterns/rowActions.js.map +1 -0
- package/dist/esm/v2/personalization/PersonalizationProvider.js +50 -47
- package/dist/esm/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/esm/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js +22 -23
- package/dist/esm/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js +13 -13
- package/dist/esm/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favorites.js +36 -60
- package/dist/esm/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/favoritesView.js +22 -34
- package/dist/esm/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js +28 -34
- package/dist/esm/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js +119 -0
- package/dist/esm/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/esm/v2/personalization/capabilities/savedFilters.js +90 -98
- package/dist/esm/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/esm/v2/personalization/createPersonalizationStore.js +78 -181
- package/dist/esm/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/esm/v2/personalization/index.js +17 -0
- package/dist/esm/v2/personalization/index.js.map +1 -1
- package/dist/esm/v2/personalization/personalizationContext.js +9 -9
- package/dist/esm/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/esm/v2/personalization/schema.js +8 -9
- package/dist/esm/v2/personalization/schema.js.map +1 -1
- package/dist/esm/v2/referentiel/ReferentielProvider.js +27 -42
- package/dist/esm/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/esm/v2/referentiel/types.js +2 -0
- package/dist/esm/v2/referentiel/types.js.map +1 -0
- package/dist/esm/v2/referentiel/useReferentielClient.js +10 -11
- package/dist/esm/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielOptions.js +60 -117
- package/dist/esm/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/esm/v2/referentiel/useReferentielSearch.js +37 -91
- package/dist/esm/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/esm/v2/theme/_brand.js +8 -24
- package/dist/esm/v2/theme/_brand.js.map +1 -1
- package/dist/esm/v2/theme/_brandSecondary.js +8 -24
- package/dist/esm/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/esm/v2/theme/createPortnetTheme.js +51 -61
- package/dist/esm/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/esm/v2/theme/cssVariables.js +62 -69
- package/dist/esm/v2/theme/cssVariables.js.map +1 -1
- package/dist/esm/v2/theme/index.js +5 -5
- package/dist/esm/v2/theme/index.js.map +1 -1
- package/dist/esm/v2/tokens/breakpoints.js +14 -14
- package/dist/esm/v2/tokens/breakpoints.js.map +1 -1
- package/dist/esm/v2/tokens/chart.js +261 -0
- package/dist/esm/v2/tokens/chart.js.map +1 -0
- package/dist/esm/v2/tokens/colors.js +22 -22
- package/dist/esm/v2/tokens/colors.js.map +1 -1
- package/dist/esm/v2/tokens/density.js +62 -7
- package/dist/esm/v2/tokens/density.js.map +1 -1
- package/dist/esm/v2/tokens/index.js +49 -34
- package/dist/esm/v2/tokens/index.js.map +1 -1
- package/dist/esm/v2/tokens/motion.js +12 -20
- package/dist/esm/v2/tokens/motion.js.map +1 -1
- package/dist/esm/v2/tokens/radius.js +1 -1
- package/dist/esm/v2/tokens/radius.js.map +1 -1
- package/dist/esm/v2/tokens/shadows.js +6 -6
- package/dist/esm/v2/tokens/shadows.js.map +1 -1
- package/dist/esm/v2/tokens/spacing.js +2 -2
- package/dist/esm/v2/tokens/spacing.js.map +1 -1
- package/dist/esm/v2/tokens/state.js +1 -1
- package/dist/esm/v2/tokens/state.js.map +1 -1
- package/dist/esm/v2/tokens/statusPalette.js +17 -21
- package/dist/esm/v2/tokens/statusPalette.js.map +1 -1
- package/dist/esm/v2/tokens/tokens.json +6 -1
- package/dist/esm/v2/tokens/typography.js +13 -13
- package/dist/esm/v2/tokens/typography.js.map +1 -1
- package/dist/esm/v2/tokens/zIndex.js +1 -1
- package/dist/esm/v2/tokens/zIndex.js.map +1 -1
- package/dist/esm/v2/types/datagrid.js.map +1 -1
- package/dist/esm/v2/utils/apiError.js +16 -37
- package/dist/esm/v2/utils/apiError.js.map +1 -1
- package/dist/esm/v2/utils/contrast.js +31 -32
- package/dist/esm/v2/utils/contrast.js.map +1 -1
- package/dist/esm/v2/utils/cx.js +5 -25
- package/dist/esm/v2/utils/cx.js.map +1 -1
- package/dist/esm/v2/utils/fileDownload.js +23 -26
- package/dist/esm/v2/utils/fileDownload.js.map +1 -1
- package/dist/esm/v2/utils/fileValidation.js +209 -0
- package/dist/esm/v2/utils/fileValidation.js.map +1 -0
- package/dist/esm/v2/utils/fmtDate.js +111 -0
- package/dist/esm/v2/utils/fmtDate.js.map +1 -0
- package/dist/esm/v2/utils/fmtMoney.js +8 -10
- package/dist/esm/v2/utils/fmtMoney.js.map +1 -1
- package/dist/esm/v2/utils/formikErrors.js +78 -0
- package/dist/esm/v2/utils/formikErrors.js.map +1 -0
- package/dist/esm/v2/utils/index.js +35 -2
- package/dist/esm/v2/utils/index.js.map +1 -1
- package/dist/esm/v2/utils/mergeLabels.js +7 -12
- package/dist/esm/v2/utils/mergeLabels.js.map +1 -1
- package/dist/esm/v2/utils/networkStatus.js +12 -12
- package/dist/esm/v2/utils/networkStatus.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +110 -49
- package/dist/index.js.map +1 -1
- package/dist/v2/__tests__/AppMain.test.js +133 -0
- package/dist/v2/__tests__/AppMain.test.js.map +1 -0
- package/dist/v2/__tests__/ChartFigure.test.js +183 -0
- package/dist/v2/__tests__/ChartFigure.test.js.map +1 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js +153 -0
- package/dist/v2/__tests__/DataGridRowActionsPropagation.test.js.map +1 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js +94 -0
- package/dist/v2/__tests__/DrawerTactileTargets.test.js.map +1 -0
- package/dist/v2/__tests__/FieldError.test.js +82 -49
- package/dist/v2/__tests__/FieldError.test.js.map +1 -1
- package/dist/v2/__tests__/FieldNaming.test.js +161 -0
- package/dist/v2/__tests__/FieldNaming.test.js.map +1 -0
- package/dist/v2/__tests__/FieldWidth.test.js +23 -25
- package/dist/v2/__tests__/FieldWidth.test.js.map +1 -1
- package/dist/v2/__tests__/FileCard.test.js +29 -28
- package/dist/v2/__tests__/FileCard.test.js.map +1 -1
- package/dist/v2/__tests__/FormikCheckbox.test.js +90 -183
- package/dist/v2/__tests__/FormikCheckbox.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDateTimePicker.test.js +38 -48
- package/dist/v2/__tests__/FormikDateTimePicker.test.js.map +1 -1
- package/dist/v2/__tests__/FormikDisplayWidth.test.js +102 -0
- package/dist/v2/__tests__/FormikDisplayWidth.test.js.map +1 -0
- package/dist/v2/__tests__/FormikRadioGroup.test.js +123 -204
- package/dist/v2/__tests__/FormikRadioGroup.test.js.map +1 -1
- package/dist/v2/__tests__/MobileRowCard.test.js +63 -61
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -1
- package/dist/v2/__tests__/PreviewDrawer.test.js +169 -0
- package/dist/v2/__tests__/PreviewDrawer.test.js.map +1 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js +159 -0
- package/dist/v2/__tests__/ReferentielFieldContainer.test.js.map +1 -0
- package/dist/v2/__tests__/SectionErrorBoundary.test.js +53 -68
- package/dist/v2/__tests__/SectionErrorBoundary.test.js.map +1 -1
- package/dist/v2/__tests__/apiError.test.js +50 -69
- package/dist/v2/__tests__/apiError.test.js.map +1 -1
- package/dist/v2/__tests__/banned-patterns.test.js +42 -123
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -1
- package/dist/v2/__tests__/chart-palette.test.js +205 -0
- package/dist/v2/__tests__/chart-palette.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +42 -74
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -1
- package/dist/v2/__tests__/cssVariables.test.js +44 -51
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -1
- package/dist/v2/__tests__/fileValidation.test.js +136 -0
- package/dist/v2/__tests__/fileValidation.test.js.map +1 -0
- package/dist/v2/__tests__/filterCriteria.test.js +324 -0
- package/dist/v2/__tests__/filterCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/fmtDate.test.js +69 -0
- package/dist/v2/__tests__/fmtDate.test.js.map +1 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js +221 -0
- package/dist/v2/__tests__/gap-leakage-refonte.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +23 -27
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -1
- package/dist/v2/__tests__/locale-fallback.test.js +47 -52
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -1
- package/dist/v2/__tests__/reviveSavedCriteria.test.js +144 -0
- package/dist/v2/__tests__/reviveSavedCriteria.test.js.map +1 -0
- package/dist/v2/__tests__/rowActions.test.js +186 -0
- package/dist/v2/__tests__/rowActions.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js +156 -0
- package/dist/v2/__tests__/useFocusOnRouteChange.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +270 -407
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -1
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js +123 -0
- package/dist/v2/__tests__/usePrefersReducedMotion.test.js.map +1 -0
- package/dist/v2/components/Accordion.js +60 -82
- package/dist/v2/components/Accordion.js.map +1 -1
- package/dist/v2/components/ActionStrip.js +40 -52
- package/dist/v2/components/ActionStrip.js.map +1 -1
- package/dist/v2/components/Banner.js +42 -41
- package/dist/v2/components/Banner.js.map +1 -1
- package/dist/v2/components/Busy.js +22 -27
- package/dist/v2/components/Busy.js.map +1 -1
- package/dist/v2/components/Button.js +39 -50
- package/dist/v2/components/Button.js.map +1 -1
- package/dist/v2/components/CategoryTag.d.ts.map +1 -1
- package/dist/v2/components/CategoryTag.js +49 -32
- package/dist/v2/components/CategoryTag.js.map +1 -1
- package/dist/v2/components/Checkbox.js +39 -45
- package/dist/v2/components/Checkbox.js.map +1 -1
- package/dist/v2/components/Chip.js +29 -42
- package/dist/v2/components/Chip.js.map +1 -1
- package/dist/v2/components/Combobox.js +122 -144
- package/dist/v2/components/Combobox.js.map +1 -1
- package/dist/v2/components/CommandPalette.js +138 -225
- package/dist/v2/components/CommandPalette.js.map +1 -1
- package/dist/v2/components/ConfirmDialog.js +46 -56
- package/dist/v2/components/ConfirmDialog.js.map +1 -1
- package/dist/v2/components/DatePicker.js +81 -86
- package/dist/v2/components/DatePicker.js.map +1 -1
- package/dist/v2/components/DateRangePicker.js +77 -87
- package/dist/v2/components/DateRangePicker.js.map +1 -1
- package/dist/v2/components/DateTimePicker.js +84 -91
- package/dist/v2/components/DateTimePicker.js.map +1 -1
- package/dist/v2/components/Drawer.d.ts.map +1 -1
- package/dist/v2/components/Drawer.js +93 -88
- package/dist/v2/components/Drawer.js.map +1 -1
- package/dist/v2/components/Dropzone.js +150 -196
- package/dist/v2/components/Dropzone.js.map +1 -1
- package/dist/v2/components/EmptyState.js +18 -20
- package/dist/v2/components/EmptyState.js.map +1 -1
- package/dist/v2/components/FavoriteToggle.js +28 -39
- package/dist/v2/components/FavoriteToggle.js.map +1 -1
- package/dist/v2/components/Field.d.ts +62 -4
- package/dist/v2/components/Field.d.ts.map +1 -1
- package/dist/v2/components/Field.js +169 -70
- package/dist/v2/components/Field.js.map +1 -1
- package/dist/v2/components/FieldError.js +18 -21
- package/dist/v2/components/FieldError.js.map +1 -1
- package/dist/v2/components/FieldHelp.js +40 -60
- package/dist/v2/components/FieldHelp.js.map +1 -1
- package/dist/v2/components/FileCard.js +27 -31
- package/dist/v2/components/FileCard.js.map +1 -1
- package/dist/v2/components/FilterTab.js +30 -38
- package/dist/v2/components/FilterTab.js.map +1 -1
- package/dist/v2/components/ForbiddenPage.d.ts +25 -1
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -1
- package/dist/v2/components/ForbiddenPage.js +37 -17
- package/dist/v2/components/ForbiddenPage.js.map +1 -1
- package/dist/v2/components/FormGrid.js +53 -59
- package/dist/v2/components/FormGrid.js.map +1 -1
- package/dist/v2/components/FormikDisplay.d.ts +50 -1
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -1
- package/dist/v2/components/FormikDisplay.js +108 -33
- package/dist/v2/components/FormikDisplay.js.map +1 -1
- package/dist/v2/components/Input.d.ts +40 -0
- package/dist/v2/components/Input.d.ts.map +1 -1
- package/dist/v2/components/Input.js +81 -41
- package/dist/v2/components/Input.js.map +1 -1
- package/dist/v2/components/KPICard.js +57 -67
- package/dist/v2/components/KPICard.js.map +1 -1
- package/dist/v2/components/KPIStrip.js +16 -22
- package/dist/v2/components/KPIStrip.js.map +1 -1
- package/dist/v2/components/KV.js +25 -31
- package/dist/v2/components/KV.js.map +1 -1
- package/dist/v2/components/KVGrid.js +19 -26
- package/dist/v2/components/KVGrid.js.map +1 -1
- package/dist/v2/components/Layout.js +91 -120
- package/dist/v2/components/Layout.js.map +1 -1
- package/dist/v2/components/MobileRowCard.js +79 -91
- package/dist/v2/components/MobileRowCard.js.map +1 -1
- package/dist/v2/components/Modal.js +61 -69
- package/dist/v2/components/Modal.js.map +1 -1
- package/dist/v2/components/NetworkErrorPage.d.ts +19 -1
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -1
- package/dist/v2/components/NetworkErrorPage.js +38 -21
- package/dist/v2/components/NetworkErrorPage.js.map +1 -1
- package/dist/v2/components/NotFoundPage.d.ts +17 -1
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -1
- package/dist/v2/components/NotFoundPage.js +37 -18
- package/dist/v2/components/NotFoundPage.js.map +1 -1
- package/dist/v2/components/NumberInput.js +88 -118
- package/dist/v2/components/NumberInput.js.map +1 -1
- package/dist/v2/components/OverflowMenu.js +38 -56
- package/dist/v2/components/OverflowMenu.js.map +1 -1
- package/dist/v2/components/PdfViewer.js +34 -45
- package/dist/v2/components/PdfViewer.js.map +1 -1
- package/dist/v2/components/ProgressBar.js +42 -49
- package/dist/v2/components/ProgressBar.js.map +1 -1
- package/dist/v2/components/Radio.js +59 -67
- package/dist/v2/components/Radio.js.map +1 -1
- package/dist/v2/components/SectionErrorBoundary.js +90 -135
- package/dist/v2/components/SectionErrorBoundary.js.map +1 -1
- package/dist/v2/components/SectionHeader.js +34 -41
- package/dist/v2/components/SectionHeader.js.map +1 -1
- package/dist/v2/components/Segmented.js +69 -93
- package/dist/v2/components/Segmented.js.map +1 -1
- package/dist/v2/components/Select.d.ts +26 -2
- package/dist/v2/components/Select.d.ts.map +1 -1
- package/dist/v2/components/Select.js +120 -155
- package/dist/v2/components/Select.js.map +1 -1
- package/dist/v2/components/ServerErrorPage.d.ts +27 -1
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -1
- package/dist/v2/components/ServerErrorPage.js +37 -20
- package/dist/v2/components/ServerErrorPage.js.map +1 -1
- package/dist/v2/components/Skeleton.js +86 -100
- package/dist/v2/components/Skeleton.js.map +1 -1
- package/dist/v2/components/SkipLink.js +9 -12
- package/dist/v2/components/SkipLink.js.map +1 -1
- package/dist/v2/components/Spinner.js +16 -25
- package/dist/v2/components/Spinner.js.map +1 -1
- package/dist/v2/components/Status.js +18 -29
- package/dist/v2/components/Status.js.map +1 -1
- package/dist/v2/components/Stepper.js +80 -82
- package/dist/v2/components/Stepper.js.map +1 -1
- package/dist/v2/components/Surface.js +34 -49
- package/dist/v2/components/Surface.js.map +1 -1
- package/dist/v2/components/Switch.js +29 -37
- package/dist/v2/components/Switch.js.map +1 -1
- package/dist/v2/components/TabPanel.d.ts +17 -0
- package/dist/v2/components/TabPanel.d.ts.map +1 -0
- package/dist/v2/components/TabPanel.js +90 -0
- package/dist/v2/components/TabPanel.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +25 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -1
- package/dist/v2/components/Tabs.js +53 -29
- package/dist/v2/components/Tabs.js.map +1 -1
- package/dist/v2/components/TelInput.js +80 -115
- package/dist/v2/components/TelInput.js.map +1 -1
- package/dist/v2/components/Textarea.js +26 -35
- package/dist/v2/components/Textarea.js.map +1 -1
- package/dist/v2/components/TimePicker.js +62 -74
- package/dist/v2/components/TimePicker.js.map +1 -1
- package/dist/v2/components/Toast.js +119 -174
- package/dist/v2/components/Toast.js.map +1 -1
- package/dist/v2/components/Tooltip.js +23 -38
- package/dist/v2/components/Tooltip.js.map +1 -1
- package/dist/v2/components/_ErrorPageBody.js +15 -16
- package/dist/v2/components/_ErrorPageBody.js.map +1 -1
- package/dist/v2/components/_pickerShared.js +5 -5
- package/dist/v2/components/_pickerShared.js.map +1 -1
- package/dist/v2/components/index.d.ts +40 -1
- package/dist/v2/components/index.d.ts.map +1 -1
- package/dist/v2/components/index.js +153 -136
- package/dist/v2/components/index.js.map +1 -1
- package/dist/v2/hooks/index.d.ts +65 -0
- package/dist/v2/hooks/index.d.ts.map +1 -1
- package/dist/v2/hooks/index.js +63 -24
- package/dist/v2/hooks/index.js.map +1 -1
- package/dist/v2/hooks/useAppliedFilters.d.ts +102 -0
- package/dist/v2/hooks/useAppliedFilters.d.ts.map +1 -0
- package/dist/v2/hooks/useAppliedFilters.js +117 -0
- package/dist/v2/hooks/useAppliedFilters.js.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts +64 -0
- package/dist/v2/hooks/useDebouncedCallback.d.ts.map +1 -0
- package/dist/v2/hooks/useDebouncedCallback.js +87 -0
- package/dist/v2/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +6 -20
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -1
- package/dist/v2/hooks/useDensity.d.ts.map +1 -1
- package/dist/v2/hooks/useDensity.js +14 -18
- package/dist/v2/hooks/useDensity.js.map +1 -1
- package/dist/v2/hooks/useFocusFirstError.js +26 -34
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -1
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts +65 -0
- package/dist/v2/hooks/useFocusOnRouteChange.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js +88 -0
- package/dist/v2/hooks/useFocusOnRouteChange.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +20 -24
- package/dist/v2/hooks/useFocusTrap.js.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.d.ts +4 -4
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -1
- package/dist/v2/hooks/useFormAutoSave.js +39 -54
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -1
- package/dist/v2/hooks/useFormCompletionProgress.js +33 -52
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -1
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts +25 -0
- package/dist/v2/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js +132 -0
- package/dist/v2/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts +56 -0
- package/dist/v2/hooks/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js +105 -0
- package/dist/v2/hooks/usePrefersReducedMotion.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +5 -13
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -1
- package/dist/v2/hooks/useSortedRows.js +4 -6
- package/dist/v2/hooks/useSortedRows.js.map +1 -1
- package/dist/v2/hooks/useTabLoading.js +7 -22
- package/dist/v2/hooks/useTabLoading.js.map +1 -1
- package/dist/v2/index.js +143 -145
- package/dist/v2/index.js.map +1 -1
- package/dist/v2/modalContext.js +2 -2
- package/dist/v2/modalContext.js.map +1 -1
- package/dist/v2/models/favorite.d.ts +8 -9
- package/dist/v2/models/favorite.d.ts.map +1 -1
- package/dist/v2/models/favorite.js.map +1 -1
- package/dist/v2/models/index.js +4 -4
- package/dist/v2/models/index.js.map +1 -1
- package/dist/v2/models/personalization.d.ts +44 -48
- package/dist/v2/models/personalization.d.ts.map +1 -1
- package/dist/v2/models/personalization.js.map +1 -1
- package/dist/v2/models/referentiel.d.ts +32 -50
- package/dist/v2/models/referentiel.d.ts.map +1 -1
- package/dist/v2/models/referentiel.js.map +1 -1
- package/dist/v2/models/savedFilter.d.ts +8 -17
- package/dist/v2/models/savedFilter.d.ts.map +1 -1
- package/dist/v2/models/savedFilter.js.map +1 -1
- package/dist/v2/patterns/ActionBar.js +152 -187
- package/dist/v2/patterns/ActionBar.js.map +1 -1
- package/dist/v2/patterns/AppMain.d.ts +109 -0
- package/dist/v2/patterns/AppMain.d.ts.map +1 -0
- package/dist/v2/patterns/AppMain.js +115 -0
- package/dist/v2/patterns/AppMain.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +40 -42
- package/dist/v2/patterns/BulkActionBar.js.map +1 -1
- package/dist/v2/patterns/ChartFigure.d.ts +124 -0
- package/dist/v2/patterns/ChartFigure.d.ts.map +1 -0
- package/dist/v2/patterns/ChartFigure.js +159 -0
- package/dist/v2/patterns/ChartFigure.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +138 -174
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -1
- package/dist/v2/patterns/ColumnsToggle.js +60 -94
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -1
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -1
- package/dist/v2/patterns/DataGrid.js +262 -297
- package/dist/v2/patterns/DataGrid.js.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +12 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -1
- package/dist/v2/patterns/DataGridSettingsMenu.js +104 -121
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -1
- package/dist/v2/patterns/DataGridToolbar.js +103 -106
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -1
- package/dist/v2/patterns/DataGridVirtualized.js +179 -217
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -1
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +32 -35
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -1
- package/dist/v2/patterns/DetailSplit.d.ts +87 -0
- package/dist/v2/patterns/DetailSplit.d.ts.map +1 -0
- package/dist/v2/patterns/DetailSplit.js +116 -0
- package/dist/v2/patterns/DetailSplit.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.js +22 -23
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -1
- package/dist/v2/patterns/FavoritesFilter.js +36 -44
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -1
- package/dist/v2/patterns/FilterTabBar.d.ts +28 -0
- package/dist/v2/patterns/FilterTabBar.d.ts.map +1 -0
- package/dist/v2/patterns/FilterTabBar.js +120 -0
- package/dist/v2/patterns/FilterTabBar.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +20 -23
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -1
- package/dist/v2/patterns/FormPageShell.js +53 -50
- package/dist/v2/patterns/FormPageShell.js.map +1 -1
- package/dist/v2/patterns/FormSection.d.ts +8 -3
- package/dist/v2/patterns/FormSection.d.ts.map +1 -1
- package/dist/v2/patterns/FormSection.js +44 -51
- package/dist/v2/patterns/FormSection.js.map +1 -1
- package/dist/v2/patterns/FormikCheckbox.js +36 -45
- package/dist/v2/patterns/FormikCheckbox.js.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +17 -1
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -1
- package/dist/v2/patterns/FormikCheckboxGroup.js +62 -65
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -1
- package/dist/v2/patterns/FormikCombobox.js +55 -72
- package/dist/v2/patterns/FormikCombobox.js.map +1 -1
- package/dist/v2/patterns/FormikDatePicker.js +50 -64
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -1
- package/dist/v2/patterns/FormikDateTimePicker.js +50 -64
- package/dist/v2/patterns/FormikDateTimePicker.js.map +1 -1
- package/dist/v2/patterns/FormikErrorFocus.js +25 -26
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -1
- package/dist/v2/patterns/FormikErrorSummary.d.ts +74 -0
- package/dist/v2/patterns/FormikErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorSummary.js +97 -0
- package/dist/v2/patterns/FormikErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +14 -1
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -1
- package/dist/v2/patterns/FormikFile.js +99 -83
- package/dist/v2/patterns/FormikFile.js.map +1 -1
- package/dist/v2/patterns/FormikInput.js +45 -58
- package/dist/v2/patterns/FormikInput.js.map +1 -1
- package/dist/v2/patterns/FormikRadioGroup.js +45 -56
- package/dist/v2/patterns/FormikRadioGroup.js.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts +12 -1
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/FormikReferentielField.js +54 -64
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -1
- package/dist/v2/patterns/FormikSelect.js +70 -92
- package/dist/v2/patterns/FormikSelect.js.map +1 -1
- package/dist/v2/patterns/FormikTextarea.js +35 -51
- package/dist/v2/patterns/FormikTextarea.js.map +1 -1
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +60 -80
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -1
- package/dist/v2/patterns/NetworkErrorBanner.js +13 -16
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -1
- package/dist/v2/patterns/PageContent.js +17 -20
- package/dist/v2/patterns/PageContent.js.map +1 -1
- package/dist/v2/patterns/PreviewDrawer.d.ts +49 -0
- package/dist/v2/patterns/PreviewDrawer.d.ts.map +1 -0
- package/dist/v2/patterns/PreviewDrawer.js +159 -0
- package/dist/v2/patterns/PreviewDrawer.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +86 -2
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -1
- package/dist/v2/patterns/ReferentielField.js +347 -327
- package/dist/v2/patterns/ReferentielField.js.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.d.ts +6 -0
- package/dist/v2/patterns/RowFavoriteToggle.d.ts.map +1 -1
- package/dist/v2/patterns/RowFavoriteToggle.js +38 -30
- package/dist/v2/patterns/RowFavoriteToggle.js.map +1 -1
- package/dist/v2/patterns/SaveFilterDialog.js +50 -77
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -1
- package/dist/v2/patterns/SavedFiltersMenu.js +89 -107
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -1
- package/dist/v2/patterns/SkeletonPageShell.js +122 -143
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -1
- package/dist/v2/patterns/SortableHeader.js +35 -57
- package/dist/v2/patterns/SortableHeader.js.map +1 -1
- package/dist/v2/patterns/Tour.js +121 -142
- package/dist/v2/patterns/Tour.js.map +1 -1
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -1
- package/dist/v2/patterns/_dataGridShared.js +131 -147
- package/dist/v2/patterns/_dataGridShared.js.map +1 -1
- package/dist/v2/patterns/_pickerSerialisation.js +9 -10
- package/dist/v2/patterns/_pickerSerialisation.js.map +1 -1
- package/dist/v2/patterns/_sort.js +17 -33
- package/dist/v2/patterns/_sort.js.map +1 -1
- package/dist/v2/patterns/_useColumnReorder.js +124 -163
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -1
- package/dist/v2/patterns/_useColumnResize.js +80 -99
- package/dist/v2/patterns/_useColumnResize.js.map +1 -1
- package/dist/v2/patterns/filterCriteria.d.ts +78 -0
- package/dist/v2/patterns/filterCriteria.d.ts.map +1 -0
- package/dist/v2/patterns/filterCriteria.js +110 -0
- package/dist/v2/patterns/filterCriteria.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +160 -0
- package/dist/v2/patterns/index.d.ts.map +1 -1
- package/dist/v2/patterns/index.js +157 -79
- package/dist/v2/patterns/index.js.map +1 -1
- package/dist/v2/patterns/rowActions.d.ts +150 -0
- package/dist/v2/patterns/rowActions.d.ts.map +1 -0
- package/dist/v2/patterns/rowActions.js +232 -0
- package/dist/v2/patterns/rowActions.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -1
- package/dist/v2/personalization/PersonalizationProvider.js +57 -53
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -1
- package/dist/v2/personalization/adapters/_storageKey.js +5 -5
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -1
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +25 -24
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +14 -14
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -1
- package/dist/v2/personalization/adapters/index.js +5 -5
- package/dist/v2/personalization/adapters/index.js.map +1 -1
- package/dist/v2/personalization/capabilities/favorites.js +39 -62
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -1
- package/dist/v2/personalization/capabilities/favoritesView.js +25 -37
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -1
- package/dist/v2/personalization/capabilities/gridPreferences.js +31 -36
- package/dist/v2/personalization/capabilities/gridPreferences.js.map +1 -1
- package/dist/v2/personalization/capabilities/index.js +12 -12
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts +88 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js +126 -0
- package/dist/v2/personalization/capabilities/reviveSavedCriteria.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +93 -100
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -1
- package/dist/v2/personalization/createPersonalizationStore.js +81 -182
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -1
- package/dist/v2/personalization/index.d.ts +16 -0
- package/dist/v2/personalization/index.d.ts.map +1 -1
- package/dist/v2/personalization/index.js +30 -23
- package/dist/v2/personalization/index.js.map +1 -1
- package/dist/v2/personalization/personalizationContext.js +10 -12
- package/dist/v2/personalization/personalizationContext.js.map +1 -1
- package/dist/v2/personalization/schema.js +8 -9
- package/dist/v2/personalization/schema.js.map +1 -1
- package/dist/v2/referentiel/ReferentielProvider.js +31 -45
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -1
- package/dist/v2/referentiel/index.js +11 -13
- package/dist/v2/referentiel/index.js.map +1 -1
- package/dist/v2/referentiel/types.d.ts +105 -0
- package/dist/v2/referentiel/types.d.ts.map +1 -0
- package/dist/v2/referentiel/types.js +6 -0
- package/dist/v2/referentiel/types.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +13 -16
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.d.ts +7 -17
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielOptions.js +63 -120
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.d.ts +7 -48
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -1
- package/dist/v2/referentiel/useReferentielSearch.js +40 -95
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -1
- package/dist/v2/theme/_brand.js +12 -26
- package/dist/v2/theme/_brand.js.map +1 -1
- package/dist/v2/theme/_brandSecondary.js +12 -26
- package/dist/v2/theme/_brandSecondary.js.map +1 -1
- package/dist/v2/theme/createPortnetTheme.js +41 -49
- package/dist/v2/theme/createPortnetTheme.js.map +1 -1
- package/dist/v2/theme/cssVariables.d.ts +3 -3
- package/dist/v2/theme/cssVariables.d.ts.map +1 -1
- package/dist/v2/theme/cssVariables.js +65 -70
- package/dist/v2/theme/cssVariables.js.map +1 -1
- package/dist/v2/theme/index.js +10 -10
- package/dist/v2/theme/index.js.map +1 -1
- package/dist/v2/tokens/breakpoints.js +16 -16
- package/dist/v2/tokens/breakpoints.js.map +1 -1
- package/dist/v2/tokens/chart.d.ts +103 -0
- package/dist/v2/tokens/chart.d.ts.map +1 -0
- package/dist/v2/tokens/chart.js +270 -0
- package/dist/v2/tokens/chart.js.map +1 -0
- package/dist/v2/tokens/colors.js +24 -24
- package/dist/v2/tokens/colors.js.map +1 -1
- package/dist/v2/tokens/density.d.ts +104 -0
- package/dist/v2/tokens/density.d.ts.map +1 -1
- package/dist/v2/tokens/density.js +67 -12
- package/dist/v2/tokens/density.js.map +1 -1
- package/dist/v2/tokens/index.d.ts +50 -1
- package/dist/v2/tokens/index.d.ts.map +1 -1
- package/dist/v2/tokens/index.js +116 -68
- package/dist/v2/tokens/index.js.map +1 -1
- package/dist/v2/tokens/motion.js +16 -22
- package/dist/v2/tokens/motion.js.map +1 -1
- package/dist/v2/tokens/radius.js +3 -3
- package/dist/v2/tokens/radius.js.map +1 -1
- package/dist/v2/tokens/shadows.js +8 -8
- package/dist/v2/tokens/shadows.js.map +1 -1
- package/dist/v2/tokens/spacing.js +4 -4
- package/dist/v2/tokens/spacing.js.map +1 -1
- package/dist/v2/tokens/state.js +3 -3
- package/dist/v2/tokens/state.js.map +1 -1
- package/dist/v2/tokens/statusPalette.js +21 -23
- package/dist/v2/tokens/statusPalette.js.map +1 -1
- package/dist/v2/tokens/tokens.json +6 -1
- package/dist/v2/tokens/typography.js +15 -15
- package/dist/v2/tokens/typography.js.map +1 -1
- package/dist/v2/tokens/zIndex.js +3 -3
- package/dist/v2/tokens/zIndex.js.map +1 -1
- package/dist/v2/types/datagrid.d.ts +9 -1
- package/dist/v2/types/datagrid.d.ts.map +1 -1
- package/dist/v2/types/datagrid.js.map +1 -1
- package/dist/v2/types/index.js +2 -2
- package/dist/v2/types/index.js.map +1 -1
- package/dist/v2/utils/apiError.js +16 -37
- package/dist/v2/utils/apiError.js.map +1 -1
- package/dist/v2/utils/contrast.js +31 -32
- package/dist/v2/utils/contrast.js.map +1 -1
- package/dist/v2/utils/cx.js +7 -27
- package/dist/v2/utils/cx.js.map +1 -1
- package/dist/v2/utils/fileDownload.js +25 -28
- package/dist/v2/utils/fileDownload.js.map +1 -1
- package/dist/v2/utils/fileValidation.d.ts +116 -0
- package/dist/v2/utils/fileValidation.d.ts.map +1 -0
- package/dist/v2/utils/fileValidation.js +220 -0
- package/dist/v2/utils/fileValidation.js.map +1 -0
- package/dist/v2/utils/fmtDate.d.ts +103 -0
- package/dist/v2/utils/fmtDate.d.ts.map +1 -0
- package/dist/v2/utils/fmtDate.js +119 -0
- package/dist/v2/utils/fmtDate.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +3 -3
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -1
- package/dist/v2/utils/fmtMoney.js +9 -11
- package/dist/v2/utils/fmtMoney.js.map +1 -1
- package/dist/v2/utils/formikErrors.d.ts +67 -0
- package/dist/v2/utils/formikErrors.d.ts.map +1 -0
- package/dist/v2/utils/formikErrors.js +85 -0
- package/dist/v2/utils/formikErrors.js.map +1 -0
- package/dist/v2/utils/index.d.ts +5 -0
- package/dist/v2/utils/index.d.ts.map +1 -1
- package/dist/v2/utils/index.js +67 -18
- package/dist/v2/utils/index.js.map +1 -1
- package/dist/v2/utils/mergeLabels.js +9 -14
- package/dist/v2/utils/mergeLabels.js.map +1 -1
- package/dist/v2/utils/networkStatus.js +14 -14
- package/dist/v2/utils/networkStatus.js.map +1 -1
- package/package.json +26 -9
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Categorical chart palette — Portnet UI v2
|
|
3
|
+
*
|
|
4
|
+
* A cyclable sequence of visually distinct fills for CATEGORY series in
|
|
5
|
+
* charts (pie slices, stacked bars, multi-series lines). Charter §02.
|
|
6
|
+
*
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* WHY THIS BELONGS IN THE LIBRARY (capability gap G-37)
|
|
9
|
+
*
|
|
10
|
+
* R-2.3 MUST: "aucune valeur magique : tout px/color/font-size passe par un
|
|
11
|
+
* token". R-AI.1 MUST repeats it for generated UI. Yet the library shipped only
|
|
12
|
+
* SEMANTIC colour: brand, ink, surface, border, the four severities and the six
|
|
13
|
+
* workflow statuses. None of them answers "give me N colours that a reader can
|
|
14
|
+
* tell apart", so every charting screen wrote its own list of hex literals.
|
|
15
|
+
*
|
|
16
|
+
* Observed in `refonte-frontend` (Area 4): THIRTY-TWO literals across two
|
|
17
|
+
* files — a 30-entry palette in `GraphiqueCamembert` (itself already
|
|
18
|
+
* de-duplicated from two copies) plus two more in
|
|
19
|
+
* `ChartBilanDPCIParDelegation`. The file carried a comment explaining, quite
|
|
20
|
+
* correctly, why it could not be fixed locally: mapping categories onto the
|
|
21
|
+
* SEMANTIC tones would make "red" mean *a category of measuring instrument*
|
|
22
|
+
* rather than *an error*, which R-2.2 exists to prevent. So the module was
|
|
23
|
+
* stuck between two MUST rules, and the only way out was here.
|
|
24
|
+
*
|
|
25
|
+
* >>> THE ARGUMENT FOR OWNING IT IS THE VERIFICATION, NOT THE STORAGE. Moving
|
|
26
|
+
* >>> thirty hex codes from a module to a library would only relocate them. The
|
|
27
|
+
* >>> reason they belong here is that a categorical palette carries three
|
|
28
|
+
* >>> claims no host can check for itself, and that this repository already has
|
|
29
|
+
* >>> the tooling for: each fill must clear the 3:1 non-text floor (WCAG
|
|
30
|
+
* >>> 1.4.11 / R-C.3) against the surface it sits on, the entries must stay
|
|
31
|
+
* >>> apart from each other, and they must stay apart under colour-vision
|
|
32
|
+
* >>> deficiency — a pie chart encodes its data in hue alone, so a palette that
|
|
33
|
+
* >>> collapses under deuteranopia loses the data, not just the styling. The
|
|
34
|
+
* >>> module's 30 literals had NONE of the three verified. See
|
|
35
|
+
* >>> __tests__/chart-palette.test.ts, which asserts all three. <<<
|
|
36
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
37
|
+
*
|
|
38
|
+
* HOW THESE VALUES WERE DERIVED
|
|
39
|
+
*
|
|
40
|
+
* Hue-balanced, then constrained — not picked by eye:
|
|
41
|
+
*
|
|
42
|
+
* 1. Twelve hues, the first eight evenly spaced around the wheel, so the
|
|
43
|
+
* sequence reads as intentional rather than arbitrary.
|
|
44
|
+
* 2. Lightness solved numerically per entry so that relative luminance lands
|
|
45
|
+
* inside the window where a fill clears 3:1 against BOTH the light surface
|
|
46
|
+
* (#FFFFFF) and the dark-mode surface. That window is roughly
|
|
47
|
+
* L ∈ [0.119, 0.300] and it is why ONE array serves both themes — unlike
|
|
48
|
+
* `status`, which needs a `dark.status` override. Entries alternate
|
|
49
|
+
* between the two ends of the window, which adds a lightness difference to
|
|
50
|
+
* the hue difference between neighbours.
|
|
51
|
+
* 3. Entries 9 to 12 were then chosen by maximising the minimum separation
|
|
52
|
+
* against the first eight, measured as the WORST of three distances:
|
|
53
|
+
* normal vision, deuteranopia and protanopia (Viénot simulation, CIE76).
|
|
54
|
+
*
|
|
55
|
+
* Measured properties (all pinned in the test):
|
|
56
|
+
* · every entry ≥ 3.06:1 on #FFFFFF and ≥ 3.37:1 on the dark surface;
|
|
57
|
+
* · minimum pairwise separation ≥ 12 ΔE under normal vision AND under both
|
|
58
|
+
* simulated dichromacies — the closest pair is entry 1 (red) against
|
|
59
|
+
* entry 3 (olive), at ~12.4.
|
|
60
|
+
*
|
|
61
|
+
* USE THE FIRST EIGHT WHERE YOU CAN. Entries 1-8 are the hue-balanced core;
|
|
62
|
+
* 9-12 extend it for larger sets. Past twelve, `chartColor` CYCLES, and two
|
|
63
|
+
* slices then share a colour — which is a defect in the chart, not in the
|
|
64
|
+
* palette. A series with more than a dozen categories should aggregate its
|
|
65
|
+
* tail into a single "Autres" slice: R-3.1 / R-3.2 cap what one screen may
|
|
66
|
+
* show at once for the same reason.
|
|
67
|
+
*
|
|
68
|
+
* COLOUR IS NEVER THE ONLY CHANNEL (WCAG 1.4.1). This palette makes slices
|
|
69
|
+
* distinguishable; it does not make a chart accessible. Every consumer still
|
|
70
|
+
* owes a legend with text labels, and a text equivalent of the data — 1.1.1
|
|
71
|
+
* for the chart as a whole.
|
|
72
|
+
*
|
|
73
|
+
* Usage — prefer the JS token in a chart library, since SVG presentation
|
|
74
|
+
* attributes given a `var()` are not reliably resolved by every renderer:
|
|
75
|
+
*
|
|
76
|
+
* import { chartColor } from "@portnet/ui/tokens";
|
|
77
|
+
* <Cell fill={chartColor(index)} />
|
|
78
|
+
*
|
|
79
|
+
* In CSS or `sx`, the same values are emitted as `--chart-1` … `--chart-12`
|
|
80
|
+
* (see theme/cssVariables).
|
|
81
|
+
*
|
|
82
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
83
|
+
* TEXT *ON* A SLICE IS A SECOND CONTRAST PROBLEM — see `chartColorOn`.
|
|
84
|
+
*
|
|
85
|
+
* The 3:1 floor above covers the FILL against the page. A percentage printed
|
|
86
|
+
* inside the slice is text on that fill, and owes 4.5:1 (WCAG 1.4.3). The
|
|
87
|
+
* palette deliberately spans two lightness tiers, so no single label colour
|
|
88
|
+
* works for all twelve: `refonte-frontend` printed `fill="white"` on all six
|
|
89
|
+
* of its pies, which was ~3:1 on half of them.
|
|
90
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
*/
|
|
92
|
+
import { contrastRatio, WCAG_AA_NORMAL } from "../utils/contrast";
|
|
93
|
+
import { ink } from "./colors";
|
|
94
|
+
import { fontFamily, fontSize, fontWeight } from "./typography";
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The palette, in display order. Entries 1-8 (indices 0-7) are the
|
|
98
|
+
* hue-balanced, CVD-verified core; 9-12 extend it.
|
|
99
|
+
*/
|
|
100
|
+
export const chartCategorical = Object.freeze(["#C92E1D",
|
|
101
|
+
// 1 red
|
|
102
|
+
"#A89318",
|
|
103
|
+
// 2 amber / olive-gold
|
|
104
|
+
"#3B7911",
|
|
105
|
+
// 3 olive green
|
|
106
|
+
"#18A84B",
|
|
107
|
+
// 4 green
|
|
108
|
+
"#127681",
|
|
109
|
+
// 5 teal
|
|
110
|
+
"#7A8CEC",
|
|
111
|
+
// 6 periwinkle
|
|
112
|
+
"#9B30E1",
|
|
113
|
+
// 7 violet
|
|
114
|
+
"#E860B8",
|
|
115
|
+
// 8 pink
|
|
116
|
+
"#119870",
|
|
117
|
+
// 9 jade
|
|
118
|
+
"#B915B0",
|
|
119
|
+
// 10 magenta
|
|
120
|
+
"#9A0DF9",
|
|
121
|
+
// 11 blue-violet
|
|
122
|
+
"#965848" // 12 brown
|
|
123
|
+
]);
|
|
124
|
+
|
|
125
|
+
/** Size of the hue-balanced core. Beyond it, separation is still verified but the sequence stops being evenly spaced. */
|
|
126
|
+
export const CHART_CATEGORICAL_CORE = 8;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Colour for the n-th category, cycling past the end of the palette.
|
|
130
|
+
*
|
|
131
|
+
* Non-finite or negative indices resolve to the first entry rather than
|
|
132
|
+
* throwing: a chart is a read-only view, and a bad index should not blank a
|
|
133
|
+
* page. In development an out-of-range index also warns, because CYCLING IS
|
|
134
|
+
* SILENT — two slices sharing a colour looks like a design choice, not like the
|
|
135
|
+
* data-loss it is.
|
|
136
|
+
*/
|
|
137
|
+
export function chartColor(index) {
|
|
138
|
+
const total = chartCategorical.length;
|
|
139
|
+
if (!Number.isFinite(index) || index < 0) {
|
|
140
|
+
return chartCategorical[0];
|
|
141
|
+
}
|
|
142
|
+
const i = Math.floor(index);
|
|
143
|
+
if (i >= total && process.env["NODE_ENV"] !== "production") {
|
|
144
|
+
// eslint-disable-next-line no-console
|
|
145
|
+
console.warn(`[@portnet/ui] chartColor(${i}): the palette holds ${total} colours, so ` + `this category reuses the colour of category ${i % total}. Aggregate ` + `the tail of the series instead (R-3.2).`);
|
|
146
|
+
}
|
|
147
|
+
return chartCategorical[i % total];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Label colour for text drawn ON a slice — `#FFFFFF` or `ink.fg`, whichever
|
|
152
|
+
* clears WCAG 1.4.3 AA against that fill.
|
|
153
|
+
*
|
|
154
|
+
* DERIVED, NOT TABULATED, and that is the whole point: a parallel array of
|
|
155
|
+
* twelve label colours would be a second list to keep in step with the first,
|
|
156
|
+
* and the failure mode of letting them drift is silent — unreadable text, at
|
|
157
|
+
* the exact spot where the chart states its numbers. Computed here with this
|
|
158
|
+
* library's own `contrastRatio`, so nudging a hue re-derives its label colour
|
|
159
|
+
* in the same breath.
|
|
160
|
+
*
|
|
161
|
+
* Measured: every entry pairs at ≥ 4.98:1, so the AA floor holds with margin
|
|
162
|
+
* on all twelve. The dev warning below is for a future hue that lands in the
|
|
163
|
+
* band where NEITHER candidate reaches 4.5:1 — possible in principle, since the
|
|
164
|
+
* fill constraint only bounds luminance to [0.119, 0.300].
|
|
165
|
+
*/
|
|
166
|
+
const LABEL_CANDIDATES = Object.freeze(["#FFFFFF", ink.fg]);
|
|
167
|
+
function pickLabelColour(fill) {
|
|
168
|
+
let best = LABEL_CANDIDATES[0];
|
|
169
|
+
let bestRatio = 0;
|
|
170
|
+
for (const candidate of LABEL_CANDIDATES) {
|
|
171
|
+
const ratio = contrastRatio(candidate, fill) ?? 0;
|
|
172
|
+
if (ratio > bestRatio) {
|
|
173
|
+
bestRatio = ratio;
|
|
174
|
+
best = candidate;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (bestRatio < WCAG_AA_NORMAL && process.env["NODE_ENV"] !== "production") {
|
|
178
|
+
// eslint-disable-next-line no-console
|
|
179
|
+
console.warn(`[@portnet/ui] chart fill ${fill} has no AA-compliant label colour ` + `(best ${bestRatio.toFixed(2)}:1). Draw the label outside the slice, or ` + `re-solve the fill's lightness.`);
|
|
180
|
+
}
|
|
181
|
+
return best;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Label colours, index-aligned with `chartCategorical`. */
|
|
185
|
+
export const chartCategoricalOn = Object.freeze(chartCategorical.map(pickLabelColour));
|
|
186
|
+
|
|
187
|
+
/** AA-safe colour for text drawn on top of `chartColor(index)`. Cycles identically. */
|
|
188
|
+
export function chartColorOn(index) {
|
|
189
|
+
const total = chartCategoricalOn.length;
|
|
190
|
+
if (!Number.isFinite(index) || index < 0) {
|
|
191
|
+
return chartCategoricalOn[0];
|
|
192
|
+
}
|
|
193
|
+
return chartCategoricalOn[Math.floor(index) % total];
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Non-data chart furniture — title, labels, canvas (capability gap G-54).
|
|
198
|
+
*
|
|
199
|
+
* ────────────────────────────────────────────────────────────────────────────────
|
|
200
|
+
* THIS IS A ROLE→TOKEN MAPPING, NOT A STORE OF VALUES, and the distinction is
|
|
201
|
+
* the justification. Every value below already exists in this library, and a
|
|
202
|
+
* module reading `ink.fgMuted` for its axis labels is already compliant with
|
|
203
|
+
* R-2.3. What no module can get right alone is WHICH token plays WHICH role:
|
|
204
|
+
* is a chart title an `h2` or an `h3`? are axis labels `xs` or `sm`? is the
|
|
205
|
+
* canvas `surface` or transparent?
|
|
206
|
+
*
|
|
207
|
+
* Left unanswered, each screen answers it again. Observed in
|
|
208
|
+
* `autorisation-admis-pour-conforme-fe` (Area 5): three bilan screens, five
|
|
209
|
+
* chart definitions, the same five-line block of title / label / canvas styling
|
|
210
|
+
* copied into each — agreeing only because they were copied from one another.
|
|
211
|
+
* The next module starts from a blank chart and picks `h2`, and nothing in code
|
|
212
|
+
* review can call that wrong, because the platform never said.
|
|
213
|
+
*
|
|
214
|
+
* So this is the answer, once: a chart title reads as a card title (`h3`,
|
|
215
|
+
* semibold, full-strength ink), its labels as hints (`xs`, muted ink), and its
|
|
216
|
+
* canvas is TRANSPARENT — the chart sits on whatever `Surface` holds it, and a
|
|
217
|
+
* hard-coded white canvas is exactly what breaks a chart in dark mode.
|
|
218
|
+
* ────────────────────────────────────────────────────────────────────────────────
|
|
219
|
+
*
|
|
220
|
+
* LIBRARY-AGNOSTIC BY CONSTRUCTION. Plain strings, no chart library imported,
|
|
221
|
+
* no option shape assumed: Highcharts, Recharts, Chart.js and a hand-written
|
|
222
|
+
* SVG all take these. A consumer maps them to its renderer's option names,
|
|
223
|
+
* which is a binding — and a binding holding no design values is not a
|
|
224
|
+
* duplication of this.
|
|
225
|
+
*
|
|
226
|
+
* FONT SIZES ARE STRINGS WITH UNITS, unlike `fontSize.*`, which are integers.
|
|
227
|
+
* Chart libraries pass their style objects to SVG attributes rather than to
|
|
228
|
+
* React's style prop, so they never get a unit appended for free — a bare `16`
|
|
229
|
+
* is silently ignored by some renderers and read as `16px` by others.
|
|
230
|
+
*
|
|
231
|
+
* WHAT THIS DOES NOT MAKE ACCESSIBLE. Nothing here supplies the text
|
|
232
|
+
* equivalent WCAG 1.1.1 requires of a chart, or the non-colour channel of
|
|
233
|
+
* 1.4.1. See the `ChartFigure` pattern, which carries the caption, and the note
|
|
234
|
+
* at the head of this file.
|
|
235
|
+
*/
|
|
236
|
+
export const chartChrome = Object.freeze({
|
|
237
|
+
/** Canvas fill. Transparent so the holding `Surface` shows through, light or dark. */
|
|
238
|
+
background: "transparent",
|
|
239
|
+
/** One family for every text in the chart — §02.2 UI stack. */
|
|
240
|
+
fontFamily: fontFamily.sans,
|
|
241
|
+
/** Chart title: reads as a card title (§02.2 `h3`). */
|
|
242
|
+
title: Object.freeze({
|
|
243
|
+
color: ink.fg,
|
|
244
|
+
fontSize: `${fontSize.h3}px`,
|
|
245
|
+
fontWeight: String(fontWeight.semibold)
|
|
246
|
+
}),
|
|
247
|
+
/** Axis labels, legend items, data labels drawn OUTSIDE a slice: hints. */
|
|
248
|
+
label: Object.freeze({
|
|
249
|
+
color: ink.fgMuted,
|
|
250
|
+
fontSize: `${fontSize.xs}px`
|
|
251
|
+
})
|
|
252
|
+
});
|
|
253
|
+
const chart = {
|
|
254
|
+
chartCategorical,
|
|
255
|
+
chartColor,
|
|
256
|
+
chartColorOn,
|
|
257
|
+
chartChrome,
|
|
258
|
+
CHART_CATEGORICAL_CORE
|
|
259
|
+
};
|
|
260
|
+
export default chart;
|
|
261
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","names":["contrastRatio","WCAG_AA_NORMAL","ink","fontFamily","fontSize","fontWeight","chartCategorical","Object","freeze","CHART_CATEGORICAL_CORE","chartColor","index","total","length","Number","isFinite","i","Math","floor","process","env","console","warn","LABEL_CANDIDATES","fg","pickLabelColour","fill","best","bestRatio","candidate","ratio","toFixed","chartCategoricalOn","map","chartColorOn","chartChrome","background","sans","title","color","h3","String","semibold","label","fgMuted","xs","chart"],"sources":["../../../../src/lib/v2/tokens/chart.ts"],"sourcesContent":["/**\r\n * Categorical chart palette — Portnet UI v2\r\n *\r\n * A cyclable sequence of visually distinct fills for CATEGORY series in\r\n * charts (pie slices, stacked bars, multi-series lines). Charter §02.\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * WHY THIS BELONGS IN THE LIBRARY (capability gap G-37)\r\n *\r\n * R-2.3 MUST: \"aucune valeur magique : tout px/color/font-size passe par un\r\n * token\". R-AI.1 MUST repeats it for generated UI. Yet the library shipped only\r\n * SEMANTIC colour: brand, ink, surface, border, the four severities and the six\r\n * workflow statuses. None of them answers \"give me N colours that a reader can\r\n * tell apart\", so every charting screen wrote its own list of hex literals.\r\n *\r\n * Observed in `refonte-frontend` (Area 4): THIRTY-TWO literals across two\r\n * files — a 30-entry palette in `GraphiqueCamembert` (itself already\r\n * de-duplicated from two copies) plus two more in\r\n * `ChartBilanDPCIParDelegation`. The file carried a comment explaining, quite\r\n * correctly, why it could not be fixed locally: mapping categories onto the\r\n * SEMANTIC tones would make \"red\" mean *a category of measuring instrument*\r\n * rather than *an error*, which R-2.2 exists to prevent. So the module was\r\n * stuck between two MUST rules, and the only way out was here.\r\n *\r\n * >>> THE ARGUMENT FOR OWNING IT IS THE VERIFICATION, NOT THE STORAGE. Moving\r\n * >>> thirty hex codes from a module to a library would only relocate them. The\r\n * >>> reason they belong here is that a categorical palette carries three\r\n * >>> claims no host can check for itself, and that this repository already has\r\n * >>> the tooling for: each fill must clear the 3:1 non-text floor (WCAG\r\n * >>> 1.4.11 / R-C.3) against the surface it sits on, the entries must stay\r\n * >>> apart from each other, and they must stay apart under colour-vision\r\n * >>> deficiency — a pie chart encodes its data in hue alone, so a palette that\r\n * >>> collapses under deuteranopia loses the data, not just the styling. The\r\n * >>> module's 30 literals had NONE of the three verified. See\r\n * >>> __tests__/chart-palette.test.ts, which asserts all three. <<<\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n *\r\n * HOW THESE VALUES WERE DERIVED\r\n *\r\n * Hue-balanced, then constrained — not picked by eye:\r\n *\r\n * 1. Twelve hues, the first eight evenly spaced around the wheel, so the\r\n * sequence reads as intentional rather than arbitrary.\r\n * 2. Lightness solved numerically per entry so that relative luminance lands\r\n * inside the window where a fill clears 3:1 against BOTH the light surface\r\n * (#FFFFFF) and the dark-mode surface. That window is roughly\r\n * L ∈ [0.119, 0.300] and it is why ONE array serves both themes — unlike\r\n * `status`, which needs a `dark.status` override. Entries alternate\r\n * between the two ends of the window, which adds a lightness difference to\r\n * the hue difference between neighbours.\r\n * 3. Entries 9 to 12 were then chosen by maximising the minimum separation\r\n * against the first eight, measured as the WORST of three distances:\r\n * normal vision, deuteranopia and protanopia (Viénot simulation, CIE76).\r\n *\r\n * Measured properties (all pinned in the test):\r\n * · every entry ≥ 3.06:1 on #FFFFFF and ≥ 3.37:1 on the dark surface;\r\n * · minimum pairwise separation ≥ 12 ΔE under normal vision AND under both\r\n * simulated dichromacies — the closest pair is entry 1 (red) against\r\n * entry 3 (olive), at ~12.4.\r\n *\r\n * USE THE FIRST EIGHT WHERE YOU CAN. Entries 1-8 are the hue-balanced core;\r\n * 9-12 extend it for larger sets. Past twelve, `chartColor` CYCLES, and two\r\n * slices then share a colour — which is a defect in the chart, not in the\r\n * palette. A series with more than a dozen categories should aggregate its\r\n * tail into a single \"Autres\" slice: R-3.1 / R-3.2 cap what one screen may\r\n * show at once for the same reason.\r\n *\r\n * COLOUR IS NEVER THE ONLY CHANNEL (WCAG 1.4.1). This palette makes slices\r\n * distinguishable; it does not make a chart accessible. Every consumer still\r\n * owes a legend with text labels, and a text equivalent of the data — 1.1.1\r\n * for the chart as a whole.\r\n *\r\n * Usage — prefer the JS token in a chart library, since SVG presentation\r\n * attributes given a `var()` are not reliably resolved by every renderer:\r\n *\r\n * import { chartColor } from \"@portnet/ui/tokens\";\r\n * <Cell fill={chartColor(index)} />\r\n *\r\n * In CSS or `sx`, the same values are emitted as `--chart-1` … `--chart-12`\r\n * (see theme/cssVariables).\r\n *\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n * TEXT *ON* A SLICE IS A SECOND CONTRAST PROBLEM — see `chartColorOn`.\r\n *\r\n * The 3:1 floor above covers the FILL against the page. A percentage printed\r\n * inside the slice is text on that fill, and owes 4.5:1 (WCAG 1.4.3). The\r\n * palette deliberately spans two lightness tiers, so no single label colour\r\n * works for all twelve: `refonte-frontend` printed `fill=\"white\"` on all six\r\n * of its pies, which was ~3:1 on half of them.\r\n * ─────────────────────────────────────────────────────────────────────────────\r\n */\r\nimport { contrastRatio, WCAG_AA_NORMAL } from \"../utils/contrast\";\r\nimport { ink } from \"./colors\";\r\nimport { fontFamily, fontSize, fontWeight } from \"./typography\";\r\n\r\n/**\r\n * The palette, in display order. Entries 1-8 (indices 0-7) are the\r\n * hue-balanced, CVD-verified core; 9-12 extend it.\r\n */\r\nexport const chartCategorical = Object.freeze([\r\n \"#C92E1D\", // 1 red\r\n \"#A89318\", // 2 amber / olive-gold\r\n \"#3B7911\", // 3 olive green\r\n \"#18A84B\", // 4 green\r\n \"#127681\", // 5 teal\r\n \"#7A8CEC\", // 6 periwinkle\r\n \"#9B30E1\", // 7 violet\r\n \"#E860B8\", // 8 pink\r\n \"#119870\", // 9 jade\r\n \"#B915B0\", // 10 magenta\r\n \"#9A0DF9\", // 11 blue-violet\r\n \"#965848\", // 12 brown\r\n] as const);\r\n\r\n/** Size of the hue-balanced core. Beyond it, separation is still verified but the sequence stops being evenly spaced. */\r\nexport const CHART_CATEGORICAL_CORE = 8;\r\n\r\n/**\r\n * Colour for the n-th category, cycling past the end of the palette.\r\n *\r\n * Non-finite or negative indices resolve to the first entry rather than\r\n * throwing: a chart is a read-only view, and a bad index should not blank a\r\n * page. In development an out-of-range index also warns, because CYCLING IS\r\n * SILENT — two slices sharing a colour looks like a design choice, not like the\r\n * data-loss it is.\r\n */\r\nexport function chartColor(index: number): string {\r\n const total = chartCategorical.length;\r\n if (!Number.isFinite(index) || index < 0) {\r\n return chartCategorical[0] as string;\r\n }\r\n const i = Math.floor(index);\r\n if (i >= total && process.env[\"NODE_ENV\"] !== \"production\") {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[@portnet/ui] chartColor(${i}): the palette holds ${total} colours, so ` +\r\n `this category reuses the colour of category ${i % total}. Aggregate ` +\r\n `the tail of the series instead (R-3.2).`\r\n );\r\n }\r\n return chartCategorical[i % total] as string;\r\n}\r\n\r\n/**\r\n * Label colour for text drawn ON a slice — `#FFFFFF` or `ink.fg`, whichever\r\n * clears WCAG 1.4.3 AA against that fill.\r\n *\r\n * DERIVED, NOT TABULATED, and that is the whole point: a parallel array of\r\n * twelve label colours would be a second list to keep in step with the first,\r\n * and the failure mode of letting them drift is silent — unreadable text, at\r\n * the exact spot where the chart states its numbers. Computed here with this\r\n * library's own `contrastRatio`, so nudging a hue re-derives its label colour\r\n * in the same breath.\r\n *\r\n * Measured: every entry pairs at ≥ 4.98:1, so the AA floor holds with margin\r\n * on all twelve. The dev warning below is for a future hue that lands in the\r\n * band where NEITHER candidate reaches 4.5:1 — possible in principle, since the\r\n * fill constraint only bounds luminance to [0.119, 0.300].\r\n */\r\nconst LABEL_CANDIDATES: readonly string[] = Object.freeze([\"#FFFFFF\", ink.fg]);\r\n\r\nfunction pickLabelColour(fill: string): string {\r\n let best = LABEL_CANDIDATES[0] as string;\r\n let bestRatio = 0;\r\n for (const candidate of LABEL_CANDIDATES) {\r\n const ratio = contrastRatio(candidate, fill) ?? 0;\r\n if (ratio > bestRatio) {\r\n bestRatio = ratio;\r\n best = candidate;\r\n }\r\n }\r\n if (bestRatio < WCAG_AA_NORMAL && process.env[\"NODE_ENV\"] !== \"production\") {\r\n // eslint-disable-next-line no-console\r\n console.warn(\r\n `[@portnet/ui] chart fill ${fill} has no AA-compliant label colour ` +\r\n `(best ${bestRatio.toFixed(2)}:1). Draw the label outside the slice, or ` +\r\n `re-solve the fill's lightness.`\r\n );\r\n }\r\n return best;\r\n}\r\n\r\n/** Label colours, index-aligned with `chartCategorical`. */\r\nexport const chartCategoricalOn = Object.freeze(\r\n chartCategorical.map(pickLabelColour)\r\n);\r\n\r\n/** AA-safe colour for text drawn on top of `chartColor(index)`. Cycles identically. */\r\nexport function chartColorOn(index: number): string {\r\n const total = chartCategoricalOn.length;\r\n if (!Number.isFinite(index) || index < 0) {\r\n return chartCategoricalOn[0] as string;\r\n }\r\n return chartCategoricalOn[Math.floor(index) % total] as string;\r\n}\r\n\r\n/**\r\n * Non-data chart furniture — title, labels, canvas (capability gap G-54).\r\n *\r\n * ────────────────────────────────────────────────────────────────────────────────\r\n * THIS IS A ROLE→TOKEN MAPPING, NOT A STORE OF VALUES, and the distinction is\r\n * the justification. Every value below already exists in this library, and a\r\n * module reading `ink.fgMuted` for its axis labels is already compliant with\r\n * R-2.3. What no module can get right alone is WHICH token plays WHICH role:\r\n * is a chart title an `h2` or an `h3`? are axis labels `xs` or `sm`? is the\r\n * canvas `surface` or transparent?\r\n *\r\n * Left unanswered, each screen answers it again. Observed in\r\n * `autorisation-admis-pour-conforme-fe` (Area 5): three bilan screens, five\r\n * chart definitions, the same five-line block of title / label / canvas styling\r\n * copied into each — agreeing only because they were copied from one another.\r\n * The next module starts from a blank chart and picks `h2`, and nothing in code\r\n * review can call that wrong, because the platform never said.\r\n *\r\n * So this is the answer, once: a chart title reads as a card title (`h3`,\r\n * semibold, full-strength ink), its labels as hints (`xs`, muted ink), and its\r\n * canvas is TRANSPARENT — the chart sits on whatever `Surface` holds it, and a\r\n * hard-coded white canvas is exactly what breaks a chart in dark mode.\r\n * ────────────────────────────────────────────────────────────────────────────────\r\n *\r\n * LIBRARY-AGNOSTIC BY CONSTRUCTION. Plain strings, no chart library imported,\r\n * no option shape assumed: Highcharts, Recharts, Chart.js and a hand-written\r\n * SVG all take these. A consumer maps them to its renderer's option names,\r\n * which is a binding — and a binding holding no design values is not a\r\n * duplication of this.\r\n *\r\n * FONT SIZES ARE STRINGS WITH UNITS, unlike `fontSize.*`, which are integers.\r\n * Chart libraries pass their style objects to SVG attributes rather than to\r\n * React's style prop, so they never get a unit appended for free — a bare `16`\r\n * is silently ignored by some renderers and read as `16px` by others.\r\n *\r\n * WHAT THIS DOES NOT MAKE ACCESSIBLE. Nothing here supplies the text\r\n * equivalent WCAG 1.1.1 requires of a chart, or the non-colour channel of\r\n * 1.4.1. See the `ChartFigure` pattern, which carries the caption, and the note\r\n * at the head of this file.\r\n */\r\nexport const chartChrome = Object.freeze({\r\n /** Canvas fill. Transparent so the holding `Surface` shows through, light or dark. */\r\n background: \"transparent\",\r\n /** One family for every text in the chart — §02.2 UI stack. */\r\n fontFamily: fontFamily.sans,\r\n /** Chart title: reads as a card title (§02.2 `h3`). */\r\n title: Object.freeze({\r\n color: ink.fg,\r\n fontSize: `${fontSize.h3}px`,\r\n fontWeight: String(fontWeight.semibold),\r\n }),\r\n /** Axis labels, legend items, data labels drawn OUTSIDE a slice: hints. */\r\n label: Object.freeze({\r\n color: ink.fgMuted,\r\n fontSize: `${fontSize.xs}px`,\r\n }),\r\n});\r\n\r\nconst chart = {\r\n chartCategorical,\r\n chartColor,\r\n chartColorOn,\r\n chartChrome,\r\n CHART_CATEGORICAL_CORE,\r\n};\r\nexport default chart;\r\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,cAAc,QAAQ,mBAAmB;AACjE,SAASC,GAAG,QAAQ,UAAU;AAC9B,SAASC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,QAAQ,cAAc;;AAE/D;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,MAAM,CAAC,CAC5C,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS;AAAE;AACX,SAAS,CAAE;AAAA,CACH,CAAC;;AAEX;AACA,OAAO,MAAMC,sBAAsB,GAAG,CAAC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,KAAa,EAAU;EAChD,MAAMC,KAAK,GAAGN,gBAAgB,CAACO,MAAM;EACrC,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACJ,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;IACxC,OAAOL,gBAAgB,CAAC,CAAC,CAAC;EAC5B;EACA,MAAMU,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACP,KAAK,CAAC;EAC3B,IAAIK,CAAC,IAAIJ,KAAK,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","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* Each hue ships {soft, fg}. `soft` is the tinted background, `fg` is
|
|
16
16
|
* the darker text-grade colour, AA-verified on both white AND its soft.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
const _hues = {
|
|
19
19
|
green: {
|
|
20
20
|
soft: "#E7F7EF",
|
|
21
21
|
fg: "#0A6E44"
|
|
@@ -48,7 +48,7 @@ var _hues = {
|
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
/* ---------- Brand --------------------------------------------------- */
|
|
51
|
-
export
|
|
51
|
+
export const brand = {
|
|
52
52
|
accent: "#232F66",
|
|
53
53
|
// Portnet navy — AAA · ~12.6:1 on white
|
|
54
54
|
accentHover: "#1A2452",
|
|
@@ -73,7 +73,7 @@ export var brand = {
|
|
|
73
73
|
* (e.g. ink.fg) MUST be chosen before this token is used for text-
|
|
74
74
|
* bearing buttons or alerts.
|
|
75
75
|
*/
|
|
76
|
-
export
|
|
76
|
+
export const brandSecondary = {
|
|
77
77
|
secondary: "#4FB8CF",
|
|
78
78
|
secondaryFg: "#FFFFFF"
|
|
79
79
|
};
|
|
@@ -96,7 +96,7 @@ export var brandSecondary = {
|
|
|
96
96
|
* preserve the muted/subtle hierarchy.
|
|
97
97
|
* fgInverse white on dark surfaces (always paired with dark bgs).
|
|
98
98
|
*/
|
|
99
|
-
export
|
|
99
|
+
export const ink = {
|
|
100
100
|
fg: "#0F1525",
|
|
101
101
|
// AAA · 17.40:1 on white
|
|
102
102
|
fgMuted: "#474C5A",
|
|
@@ -107,7 +107,7 @@ export var ink = {
|
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
/* ---------- Surfaces ------------------------------------------------ */
|
|
110
|
-
export
|
|
110
|
+
export const surface = {
|
|
111
111
|
bg: "#F7F8FA",
|
|
112
112
|
bgElev: "#FFFFFF",
|
|
113
113
|
bgSubtle: "#F1F2F5",
|
|
@@ -116,7 +116,7 @@ export var surface = {
|
|
|
116
116
|
};
|
|
117
117
|
|
|
118
118
|
/* ---------- Borders ------------------------------------------------- */
|
|
119
|
-
export
|
|
119
|
+
export const border = {
|
|
120
120
|
border: "#E4E6EB",
|
|
121
121
|
borderStrong: "#9099AA" // WCAG 1.4.11 · ≥ 3:1 against white
|
|
122
122
|
};
|
|
@@ -126,7 +126,7 @@ export var border = {
|
|
|
126
126
|
* `<name>Soft` tinted background.
|
|
127
127
|
* `<name>Fg` darker text-grade (≥ 4.5:1 on white AND `<name>Soft`).
|
|
128
128
|
*/
|
|
129
|
-
export
|
|
129
|
+
export const semantic = {
|
|
130
130
|
success: "#10A968",
|
|
131
131
|
successSoft: _hues.green.soft,
|
|
132
132
|
successFg: _hues.green.fg,
|
|
@@ -146,8 +146,8 @@ export var semantic = {
|
|
|
146
146
|
* (R-2.2). New chips with custom colours require a charter amendment.
|
|
147
147
|
* Charter §02.1 + V2_ARCHITECTURE.md §5.
|
|
148
148
|
*/
|
|
149
|
-
export
|
|
150
|
-
|
|
149
|
+
export const status = {
|
|
150
|
+
new: _hues.indigo,
|
|
151
151
|
sent: _hues.blue,
|
|
152
152
|
pending: _hues.amber,
|
|
153
153
|
approved: _hues.green,
|
|
@@ -160,7 +160,7 @@ export var status = {
|
|
|
160
160
|
* static-context fallbacks when CSS custom properties aren't
|
|
161
161
|
* resolvable (server-rendered emails, raw inline style, etc.).
|
|
162
162
|
*/
|
|
163
|
-
export
|
|
163
|
+
export const focus = {
|
|
164
164
|
ring: "0 0 0 3px rgba(35, 47, 102, 0.22)",
|
|
165
165
|
ringDanger: "0 0 0 3px rgba(217, 54, 68, 0.22)",
|
|
166
166
|
ringSuccess: "0 0 0 3px rgba(16, 169, 104, 0.22)"
|
|
@@ -170,7 +170,7 @@ export var focus = {
|
|
|
170
170
|
* Applied when `[data-theme="dark"]` on `<html>`. OLED-optimised
|
|
171
171
|
* backgrounds (RGESN R-9.5).
|
|
172
172
|
*/
|
|
173
|
-
export
|
|
173
|
+
export const dark = {
|
|
174
174
|
bg: "#0A0A0F",
|
|
175
175
|
bgElev: "#111218",
|
|
176
176
|
bgSubtle: "#181C26",
|
|
@@ -184,7 +184,7 @@ export var dark = {
|
|
|
184
184
|
fgInverse: "#0A0A0F",
|
|
185
185
|
accentSoft: "#1A2340",
|
|
186
186
|
status: {
|
|
187
|
-
|
|
187
|
+
new: {
|
|
188
188
|
fg: "#7EA2FF"
|
|
189
189
|
},
|
|
190
190
|
sent: {
|
|
@@ -204,16 +204,16 @@ export var dark = {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
};
|
|
207
|
-
|
|
208
|
-
brand
|
|
209
|
-
brandSecondary
|
|
210
|
-
ink
|
|
211
|
-
surface
|
|
212
|
-
border
|
|
213
|
-
semantic
|
|
214
|
-
status
|
|
215
|
-
focus
|
|
216
|
-
dark
|
|
207
|
+
const colors = {
|
|
208
|
+
brand,
|
|
209
|
+
brandSecondary,
|
|
210
|
+
ink,
|
|
211
|
+
surface,
|
|
212
|
+
border,
|
|
213
|
+
semantic,
|
|
214
|
+
status,
|
|
215
|
+
focus,
|
|
216
|
+
dark
|
|
217
217
|
};
|
|
218
218
|
export default colors;
|
|
219
219
|
//# sourceMappingURL=colors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","names":["_hues","green","soft","fg","amber","red","blue","indigo","slate","brand","accent","accentHover","accentSoft","accentFg","brandSecondary","secondary","secondaryFg","ink","fgMuted","fgSubtle","fgInverse","surface","bg","bgElev","bgSubtle","bgHover","border","borderStrong","semantic","success","successSoft","successFg","warning","warningSoft","warningFg","danger","dangerSoft","dangerFg","info","infoSoft","infoFg","status","sent","pending","approved","rejected","neutral","focus","ring","ringDanger","ringSuccess","dark","colors"],"sources":["../../../../src/lib/v2/tokens/colors.ts"],"sourcesContent":["/**\r\n * Color tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.1.\r\n *\r\n * Single source of truth for every colour value used in the library.\r\n * Charter R-2.3 / R-AI.1 — magic colours are forbidden outside this file.\r\n *\r\n * Hue swatches are defined ONCE in `_hues` and reused by both the\r\n * semantic palette (success / warning / danger / info) and the workflow\r\n * status palette (status.*). This eliminates the previous duplication\r\n * where the same hex was hard-coded in two distinct places.\r\n */\r\n\r\n/* ---------- Internal hue swatches ----------------------------------\r\n * Each hue ships {soft, fg}. `soft` is the tinted background, `fg` is\r\n * the darker text-grade colour, AA-verified on both white AND its soft.\r\n */\r\nconst _hues = {\r\n green: { soft: \"#E7F7EF\", fg: \"#0A6E44\" }, // ~6.3:1 / ~5.7:1\r\n amber: { soft: \"#FDF4E0\", fg: \"#7A5200\" }, // ~7.0:1 / ~6.4:1\r\n red: { soft: \"#FBEBED\", fg: \"#9B1F2B\" }, // ~7.95:1 / ~5.6:1\r\n blue: { soft: \"#E0F2FE\", fg: \"#075985\" }, // ~7.6:1 / ~6.6:1\r\n indigo: { soft: \"#EEF3FF\", fg: \"#1A3EA8\" }, // ~7.8:1 / ~6.4:1\r\n slate: { soft: \"#F1F2F5\", fg: \"#3A3F4A\" }, // ~9.5:1 / ~8.6:1\r\n};\r\n\r\n/* ---------- Brand --------------------------------------------------- */\r\nexport const brand = {\r\n accent: \"#232F66\", // Portnet navy — AAA · ~12.6:1 on white\r\n accentHover: \"#1A2452\", // pressed / hover (darker)\r\n accentSoft: \"#E9ECF4\", // pale tint for soft backgrounds\r\n accentFg: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Brand secondary -----------------------------------------\r\n * PORTNET teal — used for secondary CTAs / accent layers.\r\n *\r\n * Promoted from gu-modules/addpe/addpe-fe (was a module-local\r\n * constant `PORTNET_TEAL = \"#4fb8cf\"` in src/common/utils/appearance.js\r\n * that overlaid createTheme to inject palette.secondary). Lifted here\r\n * as the canonical PORTNET brand secondary so every host inherits it\r\n * via createPortnetTheme without re-overlaying.\r\n *\r\n * Audit note (R-T.2 follow-up): secondaryFg = #FFFFFF on #4FB8CF\r\n * is ~1.96:1, which FAILS WCAG AA for body text. Acceptable for\r\n * chip/badge surfaces and non-text accent fills, but a darker fg\r\n * (e.g. ink.fg) MUST be chosen before this token is used for text-\r\n * bearing buttons or alerts.\r\n */\r\nexport const brandSecondary = {\r\n secondary: \"#4FB8CF\",\r\n secondaryFg: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Ink (text) ---------------------------------------------\r\n *\r\n * Contrast tiers (all ratios computed against the lib's light surfaces\r\n * via WCAG relative-luminance — see colors.js commit log for the math):\r\n *\r\n * fg AAA · 17.40:1 primary body text + headings\r\n * fgMuted AAA · 8.43:1 labels, subtitles, chip text, table\r\n * headers, pagination — every \"essential\r\n * muted text\" surface. Elevated to AAA\r\n * so the bump propagates fleet-wide to\r\n * every consumer of @portnet/ui.\r\n * fgSubtle AA · 4.81:1 placeholders, helper text, captions,\r\n * breadcrumb trail. AA-only by design —\r\n * \"incidental text\" per WCAG 1.4.6\r\n * footnote 4, intentionally lighter to\r\n * preserve the muted/subtle hierarchy.\r\n * fgInverse white on dark surfaces (always paired with dark bgs).\r\n */\r\nexport const ink = {\r\n fg: \"#0F1525\", // AAA · 17.40:1 on white\r\n fgMuted: \"#474C5A\", // AAA · 8.43:1 on white, 7.94:1 on bg, 7.52:1 on bg-subtle\r\n fgSubtle: \"#6B7280\", // AA · 4.81:1 on white — incidental text only (WCAG 1.4.6)\r\n fgInverse: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Surfaces ------------------------------------------------ */\r\nexport const surface = {\r\n bg: \"#F7F8FA\",\r\n bgElev: \"#FFFFFF\",\r\n bgSubtle: \"#F1F2F5\",\r\n bgHover: \"#EAECF0\",\r\n surface: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Borders ------------------------------------------------- */\r\nexport const border = {\r\n border: \"#E4E6EB\",\r\n borderStrong: \"#9099AA\", // WCAG 1.4.11 · ≥ 3:1 against white\r\n};\r\n\r\n/* ---------- Semantic ------------------------------------------------\r\n * `<name>` saturated, used for fills / icons / borders (≥ 3:1).\r\n * `<name>Soft` tinted background.\r\n * `<name>Fg` darker text-grade (≥ 4.5:1 on white AND `<name>Soft`).\r\n */\r\nexport const semantic = {\r\n success: \"#10A968\",\r\n successSoft: _hues.green.soft,\r\n successFg: _hues.green.fg,\r\n warning: \"#C78400\",\r\n warningSoft: _hues.amber.soft,\r\n warningFg: _hues.amber.fg,\r\n danger: \"#D93644\",\r\n dangerSoft: _hues.red.soft,\r\n dangerFg: _hues.red.fg,\r\n info: \"#1A7FB8\",\r\n infoSoft: _hues.blue.soft,\r\n infoFg: _hues.blue.fg,\r\n};\r\n\r\n/* ---------- Workflow status ----------------------------------------\r\n * Six and only six. Any new business status MUST map onto one of these\r\n * (R-2.2). New chips with custom colours require a charter amendment.\r\n * Charter §02.1 + V2_ARCHITECTURE.md §5.\r\n */\r\nexport const status = {\r\n new: _hues.indigo,\r\n sent: _hues.blue,\r\n pending: _hues.amber,\r\n approved: _hues.green,\r\n rejected: _hues.red,\r\n neutral: _hues.slate,\r\n};\r\n\r\n/* ---------- Focus ring (static fallback) ---------------------------\r\n * `shadows.focus` references --accent via CSS var. Use these as\r\n * static-context fallbacks when CSS custom properties aren't\r\n * resolvable (server-rendered emails, raw inline style, etc.).\r\n */\r\nexport const focus = {\r\n ring: \"0 0 0 3px rgba(35, 47, 102, 0.22)\",\r\n ringDanger: \"0 0 0 3px rgba(217, 54, 68, 0.22)\",\r\n ringSuccess: \"0 0 0 3px rgba(16, 169, 104, 0.22)\",\r\n};\r\n\r\n/* ---------- Dark mode ----------------------------------------------\r\n * Applied when `[data-theme=\"dark\"]` on `<html>`. OLED-optimised\r\n * backgrounds (RGESN R-9.5).\r\n */\r\nexport const dark = {\r\n bg: \"#0A0A0F\",\r\n bgElev: \"#111218\",\r\n bgSubtle: \"#181C26\",\r\n bgHover: \"#1E2230\",\r\n surface: \"#111218\",\r\n border: \"#262B36\",\r\n borderStrong: \"#484F60\",\r\n fg: \"#E8EAEE\",\r\n fgMuted: \"#9BA1AD\",\r\n fgSubtle: \"#9CA3AF\",\r\n fgInverse: \"#0A0A0F\",\r\n accentSoft: \"#1A2340\",\r\n status: {\r\n new: { fg: \"#7EA2FF\" },\r\n sent: { fg: \"#5FB5E0\" },\r\n pending: { fg: \"#E5B04A\" },\r\n approved: { fg: \"#4FD49A\" },\r\n rejected: { fg: \"#EF5A68\" },\r\n neutral: { fg: \"#A0A6B0\" },\r\n },\r\n};\r\n\r\nconst colors = { brand, brandSecondary, ink, surface, border, semantic, status, focus, dark };\r\nexport default colors;\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"colors.js","names":["_hues","green","soft","fg","amber","red","blue","indigo","slate","brand","accent","accentHover","accentSoft","accentFg","brandSecondary","secondary","secondaryFg","ink","fgMuted","fgSubtle","fgInverse","surface","bg","bgElev","bgSubtle","bgHover","border","borderStrong","semantic","success","successSoft","successFg","warning","warningSoft","warningFg","danger","dangerSoft","dangerFg","info","infoSoft","infoFg","status","new","sent","pending","approved","rejected","neutral","focus","ring","ringDanger","ringSuccess","dark","colors"],"sources":["../../../../src/lib/v2/tokens/colors.ts"],"sourcesContent":["/**\r\n * Color tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.1.\r\n *\r\n * Single source of truth for every colour value used in the library.\r\n * Charter R-2.3 / R-AI.1 — magic colours are forbidden outside this file.\r\n *\r\n * Hue swatches are defined ONCE in `_hues` and reused by both the\r\n * semantic palette (success / warning / danger / info) and the workflow\r\n * status palette (status.*). This eliminates the previous duplication\r\n * where the same hex was hard-coded in two distinct places.\r\n */\r\n\r\n/* ---------- Internal hue swatches ----------------------------------\r\n * Each hue ships {soft, fg}. `soft` is the tinted background, `fg` is\r\n * the darker text-grade colour, AA-verified on both white AND its soft.\r\n */\r\nconst _hues = {\r\n green: { soft: \"#E7F7EF\", fg: \"#0A6E44\" }, // ~6.3:1 / ~5.7:1\r\n amber: { soft: \"#FDF4E0\", fg: \"#7A5200\" }, // ~7.0:1 / ~6.4:1\r\n red: { soft: \"#FBEBED\", fg: \"#9B1F2B\" }, // ~7.95:1 / ~5.6:1\r\n blue: { soft: \"#E0F2FE\", fg: \"#075985\" }, // ~7.6:1 / ~6.6:1\r\n indigo: { soft: \"#EEF3FF\", fg: \"#1A3EA8\" }, // ~7.8:1 / ~6.4:1\r\n slate: { soft: \"#F1F2F5\", fg: \"#3A3F4A\" }, // ~9.5:1 / ~8.6:1\r\n};\r\n\r\n/* ---------- Brand --------------------------------------------------- */\r\nexport const brand = {\r\n accent: \"#232F66\", // Portnet navy — AAA · ~12.6:1 on white\r\n accentHover: \"#1A2452\", // pressed / hover (darker)\r\n accentSoft: \"#E9ECF4\", // pale tint for soft backgrounds\r\n accentFg: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Brand secondary -----------------------------------------\r\n * PORTNET teal — used for secondary CTAs / accent layers.\r\n *\r\n * Promoted from gu-modules/addpe/addpe-fe (was a module-local\r\n * constant `PORTNET_TEAL = \"#4fb8cf\"` in src/common/utils/appearance.js\r\n * that overlaid createTheme to inject palette.secondary). Lifted here\r\n * as the canonical PORTNET brand secondary so every host inherits it\r\n * via createPortnetTheme without re-overlaying.\r\n *\r\n * Audit note (R-T.2 follow-up): secondaryFg = #FFFFFF on #4FB8CF\r\n * is ~1.96:1, which FAILS WCAG AA for body text. Acceptable for\r\n * chip/badge surfaces and non-text accent fills, but a darker fg\r\n * (e.g. ink.fg) MUST be chosen before this token is used for text-\r\n * bearing buttons or alerts.\r\n */\r\nexport const brandSecondary = {\r\n secondary: \"#4FB8CF\",\r\n secondaryFg: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Ink (text) ---------------------------------------------\r\n *\r\n * Contrast tiers (all ratios computed against the lib's light surfaces\r\n * via WCAG relative-luminance — see colors.js commit log for the math):\r\n *\r\n * fg AAA · 17.40:1 primary body text + headings\r\n * fgMuted AAA · 8.43:1 labels, subtitles, chip text, table\r\n * headers, pagination — every \"essential\r\n * muted text\" surface. Elevated to AAA\r\n * so the bump propagates fleet-wide to\r\n * every consumer of @portnet/ui.\r\n * fgSubtle AA · 4.81:1 placeholders, helper text, captions,\r\n * breadcrumb trail. AA-only by design —\r\n * \"incidental text\" per WCAG 1.4.6\r\n * footnote 4, intentionally lighter to\r\n * preserve the muted/subtle hierarchy.\r\n * fgInverse white on dark surfaces (always paired with dark bgs).\r\n */\r\nexport const ink = {\r\n fg: \"#0F1525\", // AAA · 17.40:1 on white\r\n fgMuted: \"#474C5A\", // AAA · 8.43:1 on white, 7.94:1 on bg, 7.52:1 on bg-subtle\r\n fgSubtle: \"#6B7280\", // AA · 4.81:1 on white — incidental text only (WCAG 1.4.6)\r\n fgInverse: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Surfaces ------------------------------------------------ */\r\nexport const surface = {\r\n bg: \"#F7F8FA\",\r\n bgElev: \"#FFFFFF\",\r\n bgSubtle: \"#F1F2F5\",\r\n bgHover: \"#EAECF0\",\r\n surface: \"#FFFFFF\",\r\n};\r\n\r\n/* ---------- Borders ------------------------------------------------- */\r\nexport const border = {\r\n border: \"#E4E6EB\",\r\n borderStrong: \"#9099AA\", // WCAG 1.4.11 · ≥ 3:1 against white\r\n};\r\n\r\n/* ---------- Semantic ------------------------------------------------\r\n * `<name>` saturated, used for fills / icons / borders (≥ 3:1).\r\n * `<name>Soft` tinted background.\r\n * `<name>Fg` darker text-grade (≥ 4.5:1 on white AND `<name>Soft`).\r\n */\r\nexport const semantic = {\r\n success: \"#10A968\",\r\n successSoft: _hues.green.soft,\r\n successFg: _hues.green.fg,\r\n warning: \"#C78400\",\r\n warningSoft: _hues.amber.soft,\r\n warningFg: _hues.amber.fg,\r\n danger: \"#D93644\",\r\n dangerSoft: _hues.red.soft,\r\n dangerFg: _hues.red.fg,\r\n info: \"#1A7FB8\",\r\n infoSoft: _hues.blue.soft,\r\n infoFg: _hues.blue.fg,\r\n};\r\n\r\n/* ---------- Workflow status ----------------------------------------\r\n * Six and only six. Any new business status MUST map onto one of these\r\n * (R-2.2). New chips with custom colours require a charter amendment.\r\n * Charter §02.1 + V2_ARCHITECTURE.md §5.\r\n */\r\nexport const status = {\r\n new: _hues.indigo,\r\n sent: _hues.blue,\r\n pending: _hues.amber,\r\n approved: _hues.green,\r\n rejected: _hues.red,\r\n neutral: _hues.slate,\r\n};\r\n\r\n/* ---------- Focus ring (static fallback) ---------------------------\r\n * `shadows.focus` references --accent via CSS var. Use these as\r\n * static-context fallbacks when CSS custom properties aren't\r\n * resolvable (server-rendered emails, raw inline style, etc.).\r\n */\r\nexport const focus = {\r\n ring: \"0 0 0 3px rgba(35, 47, 102, 0.22)\",\r\n ringDanger: \"0 0 0 3px rgba(217, 54, 68, 0.22)\",\r\n ringSuccess: \"0 0 0 3px rgba(16, 169, 104, 0.22)\",\r\n};\r\n\r\n/* ---------- Dark mode ----------------------------------------------\r\n * Applied when `[data-theme=\"dark\"]` on `<html>`. OLED-optimised\r\n * backgrounds (RGESN R-9.5).\r\n */\r\nexport const dark = {\r\n bg: \"#0A0A0F\",\r\n bgElev: \"#111218\",\r\n bgSubtle: \"#181C26\",\r\n bgHover: \"#1E2230\",\r\n surface: \"#111218\",\r\n border: \"#262B36\",\r\n borderStrong: \"#484F60\",\r\n fg: \"#E8EAEE\",\r\n fgMuted: \"#9BA1AD\",\r\n fgSubtle: \"#9CA3AF\",\r\n fgInverse: \"#0A0A0F\",\r\n accentSoft: \"#1A2340\",\r\n status: {\r\n new: { fg: \"#7EA2FF\" },\r\n sent: { fg: \"#5FB5E0\" },\r\n pending: { fg: \"#E5B04A\" },\r\n approved: { fg: \"#4FD49A\" },\r\n rejected: { fg: \"#EF5A68\" },\r\n neutral: { fg: \"#A0A6B0\" },\r\n },\r\n};\r\n\r\nconst colors = { brand, brandSecondary, ink, surface, border, semantic, status, focus, dark };\r\nexport default colors;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
import breakpoints from "./breakpoints";
|
|
34
|
-
export
|
|
34
|
+
export const density = {
|
|
35
35
|
spacious: {
|
|
36
36
|
row: 56,
|
|
37
37
|
input: 44,
|
|
@@ -57,7 +57,7 @@ export var density = {
|
|
|
57
57
|
fontSize: 12
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
|
-
export
|
|
60
|
+
export const layout = {
|
|
61
61
|
sidebar: 248,
|
|
62
62
|
sidebarMin: 64,
|
|
63
63
|
// collapsed icons-only
|
|
@@ -69,6 +69,36 @@ export var layout = {
|
|
|
69
69
|
tactileMin: 44,
|
|
70
70
|
// WCAG 2.5.5 — hard floor for any tactile target
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Gabarits de largeur de champ (G-H) — section « Form Field Width & Layout
|
|
74
|
+
* Standards » des Platform Mandatory UX Patterns.
|
|
75
|
+
*
|
|
76
|
+
* Ces quatre valeurs ÉTAIENT déjà la décision de design, mais elles vivaient
|
|
77
|
+
* en dur dans `Field.FIELD_MAX_WIDTH`, uniquement comme REPLIS de variables
|
|
78
|
+
* CSS que l'émetteur ne produisait pas. Le docblock de `Field` annonçait
|
|
79
|
+
* qu'elles étaient « exposées en variables CSS pour être revues sans toucher
|
|
80
|
+
* au code » : c'était faux, et c'est précisément la révision que ce même
|
|
81
|
+
* docblock demande à l'équipe design. Les valeurs sont donc promues ici, et
|
|
82
|
+
* `cssVariables` les émet.
|
|
83
|
+
*
|
|
84
|
+
* Le standard donne des FOURCHETTES (« ~80px to 120px max ») ; c'est le HAUT
|
|
85
|
+
* de chaque fourchette qui est retenu, ces largeurs étant des plafonds —
|
|
86
|
+
* prendre le bas tronquerait des valeurs qui tiennent dans la contrainte de
|
|
87
|
+
* caractères annoncée.
|
|
88
|
+
*
|
|
89
|
+
* `xl` n'y figure pas, et ce n'est pas un oubli : le gabarit XL vaut `100%`,
|
|
90
|
+
* une largeur relative et non une valeur de la grille. En faire un token en
|
|
91
|
+
* px inviterait à lui donner un plafond qu'il ne doit pas avoir.
|
|
92
|
+
*/
|
|
93
|
+
fieldWidth: {
|
|
94
|
+
xs: 120,
|
|
95
|
+
// 1 a 5 caracteres — code postal, CVV, age
|
|
96
|
+
s: 200,
|
|
97
|
+
// 6 a 15 — telephone, montant, date
|
|
98
|
+
m: 400,
|
|
99
|
+
// 16 a 60 — nom, courriel, ville
|
|
100
|
+
l: 600 // 61 a 256 — adresse, recherche complexe
|
|
101
|
+
},
|
|
72
102
|
/**
|
|
73
103
|
* Modal max-widths (§03 Modal). MUI-bounded dialogs aligned with
|
|
74
104
|
* the charter spacing system.
|
|
@@ -83,16 +113,41 @@ export var layout = {
|
|
|
83
113
|
* Drawer default width (§03 Drawer). Hosts may override per usage,
|
|
84
114
|
* but should pull from this scale rather than invent new values.
|
|
85
115
|
*/
|
|
86
|
-
drawer: 560
|
|
116
|
+
drawer: 560,
|
|
117
|
+
/**
|
|
118
|
+
* Detail-page split (§07 R-L.7 + §Detail / Vertical Progress).
|
|
119
|
+
*
|
|
120
|
+
* The charter's detail skeleton is "content on the left, progression
|
|
121
|
+
* rail on the right", and the rail is a MUST on every consultation
|
|
122
|
+
* page. Hosts were writing that geometry by hand — `refonte-frontend`
|
|
123
|
+
* carried `flex: "1 1 560px"` / `flex: "0 1 300px"` / `minWidth: 260`
|
|
124
|
+
* twice (Area 4), which is three magic values per copy and no shared
|
|
125
|
+
* definition to keep the two screens agreeing.
|
|
126
|
+
*
|
|
127
|
+
* mainMin — flex-basis of the content column. Below the sum of the
|
|
128
|
+
* two bases the rail wraps UNDER the content, which is how
|
|
129
|
+
* the layout reflows without a media query (WCAG 1.4.10).
|
|
130
|
+
* aside — flex-basis of the rail (shrinkable, never grows).
|
|
131
|
+
* asideMin — hard floor: a `VStepper` label stops being readable
|
|
132
|
+
* below this, so the rail wraps instead of compressing.
|
|
133
|
+
*
|
|
134
|
+
* Consumed by `DetailSplit`; hosts should adopt that pattern rather
|
|
135
|
+
* than re-deriving these widths.
|
|
136
|
+
*/
|
|
137
|
+
detail: {
|
|
138
|
+
mainMin: 560,
|
|
139
|
+
aside: 300,
|
|
140
|
+
asideMin: 260
|
|
141
|
+
}
|
|
87
142
|
};
|
|
88
143
|
|
|
89
144
|
/* Re-export the canonical breakpoint scale (now owned by ./breakpoints)
|
|
90
145
|
* so existing consumers and the densityLayout default keep working. */
|
|
91
146
|
export { breakpoints };
|
|
92
|
-
|
|
93
|
-
density
|
|
94
|
-
layout
|
|
95
|
-
breakpoints
|
|
147
|
+
const densityLayout = {
|
|
148
|
+
density,
|
|
149
|
+
layout,
|
|
150
|
+
breakpoints
|
|
96
151
|
};
|
|
97
152
|
export default densityLayout;
|
|
98
153
|
//# sourceMappingURL=density.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"density.js","names":["breakpoints","density","spacious","row","input","btn","fontSize","comfortable","compact","ultraCompact","layout","sidebar","sidebarMin","topbar","contentMax","formMax","tactileMin","modal","sm","md","lg","xl","drawer","densityLayout"],"sources":["../../../../src/lib/v2/tokens/density.ts"],"sourcesContent":["/**\r\n * Density & layout tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.7 + §07.\r\n *\r\n * R-DG.11 — Density togglable, preference persisted.\r\n * R-7.4 — Tactile targets ≥ 44 × 44 px (WCAG 2.5.5).\r\n *\r\n * IMPORTANT: in any density tier, the visual button height\r\n * (`density.<tier>.btn`) may be below `layout.tactileMin` (44).\r\n * Components MUST extend the hit area to 44 via padding or a\r\n * pseudo-element (the FieldHelp / Button pattern), so R-7.4 is\r\n * satisfied without altering the visual size.\r\n * Icon-only buttons MUST set min-width/min-height to `tactileMin`.\r\n *\r\n * Tier picker (host opt-in via the `data-density` attribute):\r\n * - default → comfortable\r\n * - data-density=\"spacious\" → spacious (kiosk / TV / a11y-large)\r\n * - data-density=\"compact\" → compact (dense workflows)\r\n * - data-density=\"ultra-compact\" → ultraCompact (audit ledgers, dense lists)\r\n *\r\n * The kebab-case attribute is the public contract; the camelCase\r\n * key on this object is the JS-side identifier. Don't rename\r\n * either without coordinating cssVariables.js.\r\n *\r\n * NOTE (Batch 1 — responsive certification): the breakpoint scale used\r\n * to be declared here. It now lives in the dedicated ./breakpoints\r\n * module (single source shared by the MUI theme, the mq() helpers and\r\n * the --bp-* CSS variables) and is re-exported below so that every\r\n * `import { breakpoints } from \"@portnet/ui/v2/tokens\"` and the\r\n * densityLayout default shape are unchanged.\r\n */\r\n\r\nimport breakpoints from \"./breakpoints\";\r\n\r\nexport const density = {\r\n spacious: { row: 56, input: 44, btn: 44, fontSize: 15 },\r\n comfortable: { row: 44, input: 40, btn: 40, fontSize: 14 },\r\n compact: { row: 36, input: 32, btn: 32, fontSize: 13 },\r\n ultraCompact: { row: 28, input: 28, btn: 28, fontSize: 12 },\r\n};\r\n\r\nexport const layout = {\r\n sidebar: 248,\r\n sidebarMin: 64, // collapsed icons-only\r\n topbar: 56,\r\n contentMax: 1440, // wide table layouts\r\n formMax: 720, // mono-column form\r\n tactileMin: 44, // WCAG 2.5.5 — hard floor for any tactile target\r\n\r\n /**\r\n * Modal max-widths (§03 Modal). MUI-bounded dialogs aligned with\r\n * the charter spacing system.\r\n */\r\n modal: {\r\n sm: 440,\r\n md: 640,\r\n lg: 840,\r\n xl: 1000,\r\n },\r\n\r\n /**\r\n * Drawer default width (§03 Drawer). Hosts may override per usage,\r\n * but should pull from this scale rather than invent new values.\r\n */\r\n drawer: 560,\r\n};\r\n\r\n/* Re-export the canonical breakpoint scale (now owned by ./breakpoints)\r\n * so existing consumers and the densityLayout default keep working. */\r\nexport { breakpoints };\r\n\r\nconst densityLayout = { density, layout, breakpoints };\r\nexport default densityLayout;\r\n"],"mappings":"AAAA;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;;AAEA,OAAOA,WAAW,MAAM,eAAe;AAEvC,OAAO,
|
|
1
|
+
{"version":3,"file":"density.js","names":["breakpoints","density","spacious","row","input","btn","fontSize","comfortable","compact","ultraCompact","layout","sidebar","sidebarMin","topbar","contentMax","formMax","tactileMin","fieldWidth","xs","s","m","l","modal","sm","md","lg","xl","drawer","detail","mainMin","aside","asideMin","densityLayout"],"sources":["../../../../src/lib/v2/tokens/density.ts"],"sourcesContent":["/**\r\n * Density & layout tokens — Portnet UI v2\r\n * Aligned with Design System v1.0 §02.7 + §07.\r\n *\r\n * R-DG.11 — Density togglable, preference persisted.\r\n * R-7.4 — Tactile targets ≥ 44 × 44 px (WCAG 2.5.5).\r\n *\r\n * IMPORTANT: in any density tier, the visual button height\r\n * (`density.<tier>.btn`) may be below `layout.tactileMin` (44).\r\n * Components MUST extend the hit area to 44 via padding or a\r\n * pseudo-element (the FieldHelp / Button pattern), so R-7.4 is\r\n * satisfied without altering the visual size.\r\n * Icon-only buttons MUST set min-width/min-height to `tactileMin`.\r\n *\r\n * Tier picker (host opt-in via the `data-density` attribute):\r\n * - default → comfortable\r\n * - data-density=\"spacious\" → spacious (kiosk / TV / a11y-large)\r\n * - data-density=\"compact\" → compact (dense workflows)\r\n * - data-density=\"ultra-compact\" → ultraCompact (audit ledgers, dense lists)\r\n *\r\n * The kebab-case attribute is the public contract; the camelCase\r\n * key on this object is the JS-side identifier. Don't rename\r\n * either without coordinating cssVariables.js.\r\n *\r\n * NOTE (Batch 1 — responsive certification): the breakpoint scale used\r\n * to be declared here. It now lives in the dedicated ./breakpoints\r\n * module (single source shared by the MUI theme, the mq() helpers and\r\n * the --bp-* CSS variables) and is re-exported below so that every\r\n * `import { breakpoints } from \"@portnet/ui/v2/tokens\"` and the\r\n * densityLayout default shape are unchanged.\r\n */\r\n\r\nimport breakpoints from \"./breakpoints\";\r\n\r\nexport const density = {\r\n spacious: { row: 56, input: 44, btn: 44, fontSize: 15 },\r\n comfortable: { row: 44, input: 40, btn: 40, fontSize: 14 },\r\n compact: { row: 36, input: 32, btn: 32, fontSize: 13 },\r\n ultraCompact: { row: 28, input: 28, btn: 28, fontSize: 12 },\r\n};\r\n\r\nexport const layout = {\r\n sidebar: 248,\r\n sidebarMin: 64, // collapsed icons-only\r\n topbar: 56,\r\n contentMax: 1440, // wide table layouts\r\n formMax: 720, // mono-column form\r\n tactileMin: 44, // WCAG 2.5.5 — hard floor for any tactile target\r\n\r\n /**\r\n * Gabarits de largeur de champ (G-H) — section « Form Field Width & Layout\r\n * Standards » des Platform Mandatory UX Patterns.\r\n *\r\n * Ces quatre valeurs ÉTAIENT déjà la décision de design, mais elles vivaient\r\n * en dur dans `Field.FIELD_MAX_WIDTH`, uniquement comme REPLIS de variables\r\n * CSS que l'émetteur ne produisait pas. Le docblock de `Field` annonçait\r\n * qu'elles étaient « exposées en variables CSS pour être revues sans toucher\r\n * au code » : c'était faux, et c'est précisément la révision que ce même\r\n * docblock demande à l'équipe design. Les valeurs sont donc promues ici, et\r\n * `cssVariables` les émet.\r\n *\r\n * Le standard donne des FOURCHETTES (« ~80px to 120px max ») ; c'est le HAUT\r\n * de chaque fourchette qui est retenu, ces largeurs étant des plafonds —\r\n * prendre le bas tronquerait des valeurs qui tiennent dans la contrainte de\r\n * caractères annoncée.\r\n *\r\n * `xl` n'y figure pas, et ce n'est pas un oubli : le gabarit XL vaut `100%`,\r\n * une largeur relative et non une valeur de la grille. En faire un token en\r\n * px inviterait à lui donner un plafond qu'il ne doit pas avoir.\r\n */\r\n fieldWidth: {\r\n xs: 120, // 1 a 5 caracteres — code postal, CVV, age\r\n s: 200, // 6 a 15 — telephone, montant, date\r\n m: 400, // 16 a 60 — nom, courriel, ville\r\n l: 600, // 61 a 256 — adresse, recherche complexe\r\n },\r\n\r\n /**\r\n * Modal max-widths (§03 Modal). MUI-bounded dialogs aligned with\r\n * the charter spacing system.\r\n */\r\n modal: {\r\n sm: 440,\r\n md: 640,\r\n lg: 840,\r\n xl: 1000,\r\n },\r\n\r\n /**\r\n * Drawer default width (§03 Drawer). Hosts may override per usage,\r\n * but should pull from this scale rather than invent new values.\r\n */\r\n drawer: 560,\r\n\r\n /**\r\n * Detail-page split (§07 R-L.7 + §Detail / Vertical Progress).\r\n *\r\n * The charter's detail skeleton is \"content on the left, progression\r\n * rail on the right\", and the rail is a MUST on every consultation\r\n * page. Hosts were writing that geometry by hand — `refonte-frontend`\r\n * carried `flex: \"1 1 560px\"` / `flex: \"0 1 300px\"` / `minWidth: 260`\r\n * twice (Area 4), which is three magic values per copy and no shared\r\n * definition to keep the two screens agreeing.\r\n *\r\n * mainMin — flex-basis of the content column. Below the sum of the\r\n * two bases the rail wraps UNDER the content, which is how\r\n * the layout reflows without a media query (WCAG 1.4.10).\r\n * aside — flex-basis of the rail (shrinkable, never grows).\r\n * asideMin — hard floor: a `VStepper` label stops being readable\r\n * below this, so the rail wraps instead of compressing.\r\n *\r\n * Consumed by `DetailSplit`; hosts should adopt that pattern rather\r\n * than re-deriving these widths.\r\n */\r\n detail: {\r\n mainMin: 560,\r\n aside: 300,\r\n asideMin: 260,\r\n },\r\n};\r\n\r\n/* Re-export the canonical breakpoint scale (now owned by ./breakpoints)\r\n * so existing consumers and the densityLayout default keep working. */\r\nexport { breakpoints };\r\n\r\nconst densityLayout = { density, layout, breakpoints };\r\nexport default densityLayout;\r\n"],"mappings":"AAAA;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;;AAEA,OAAOA,WAAW,MAAM,eAAe;AAEvC,OAAO,MAAMC,OAAO,GAAG;EACrBC,QAAQ,EAAM;IAAEC,GAAG,EAAE,EAAE;IAAEC,KAAK,EAAE,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG,CAAC;EAC3DC,WAAW,EAAG;IAAEJ,GAAG,EAAE,EAAE;IAAEC,KAAK,EAAE,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG,CAAC;EAC3DE,OAAO,EAAO;IAAEL,GAAG,EAAE,EAAE;IAAEC,KAAK,EAAE,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG,CAAC;EAC3DG,YAAY,EAAE;IAAEN,GAAG,EAAE,EAAE;IAAEC,KAAK,EAAE,EAAE;IAAEC,GAAG,EAAE,EAAE;IAAEC,QAAQ,EAAE;EAAG;AAC5D,CAAC;AAED,OAAO,MAAMI,MAAM,GAAG;EACpBC,OAAO,EAAK,GAAG;EACfC,UAAU,EAAG,EAAE;EAAK;EACpBC,MAAM,EAAO,EAAE;EACfC,UAAU,EAAE,IAAI;EAAI;EACpBC,OAAO,EAAM,GAAG;EAAI;EACpBC,UAAU,EAAG,EAAE;EAAK;;EAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAAU,EAAE;IACVC,EAAE,EAAE,GAAG;IAAI;IACXC,CAAC,EAAG,GAAG;IAAI;IACXC,CAAC,EAAG,GAAG;IAAI;IACXC,CAAC,EAAG,GAAG,CAAI;EACb,CAAC;EAED;AACF;AACA;AACA;EACEC,KAAK,EAAE;IACLC,EAAE,EAAG,GAAG;IACRC,EAAE,EAAG,GAAG;IACRC,EAAE,EAAG,GAAG;IACRC,EAAE,EAAE;EACN,CAAC;EAED;AACF;AACA;AACA;EACEC,MAAM,EAAE,GAAG;EAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,MAAM,EAAE;IACNC,OAAO,EAAG,GAAG;IACbC,KAAK,EAAK,GAAG;IACbC,QAAQ,EAAE;EACZ;AACF,CAAC;;AAED;AACA;AACA,SAAS/B,WAAW;AAEpB,MAAMgC,aAAa,GAAG;EAAE/B,OAAO;EAAES,MAAM;EAAEV;AAAY,CAAC;AACtD,eAAegC,aAAa","ignoreList":[]}
|