@portnet/ui 5.0.28 → 6.0.0
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 +524 -0
- package/README.md +101 -38
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +174 -203
- package/dist/index.js.map +1 -0
- package/dist/v2/__tests__/MobileRowCard.test.js +337 -0
- package/dist/v2/__tests__/MobileRowCard.test.js.map +1 -0
- package/dist/v2/__tests__/apiError.test.js +182 -0
- package/dist/v2/__tests__/apiError.test.js.map +1 -0
- package/dist/v2/__tests__/banned-patterns.test.js +272 -0
- package/dist/v2/__tests__/banned-patterns.test.js.map +1 -0
- package/dist/v2/__tests__/contrast-palette.test.js +225 -0
- package/dist/v2/__tests__/contrast-palette.test.js.map +1 -0
- package/dist/v2/__tests__/cssVariables.test.js +158 -0
- package/dist/v2/__tests__/cssVariables.test.js.map +1 -0
- package/dist/v2/__tests__/labels-merge.test.js +153 -0
- package/dist/v2/__tests__/labels-merge.test.js.map +1 -0
- package/dist/v2/__tests__/locale-fallback.test.js +111 -0
- package/dist/v2/__tests__/locale-fallback.test.js.map +1 -0
- package/dist/v2/__tests__/useFocusTrap.test.js +517 -0
- package/dist/v2/__tests__/useFocusTrap.test.js.map +1 -0
- package/dist/v2/components/Accordion.d.ts +56 -0
- package/dist/v2/components/Accordion.d.ts.map +1 -0
- package/dist/v2/components/Accordion.js +238 -0
- package/dist/v2/components/Accordion.js.map +1 -0
- package/dist/v2/components/ActionStrip.d.ts +67 -0
- package/dist/v2/components/ActionStrip.d.ts.map +1 -0
- package/dist/v2/components/ActionStrip.js +154 -0
- package/dist/v2/components/ActionStrip.js.map +1 -0
- package/dist/v2/components/Banner.d.ts +49 -0
- package/dist/v2/components/Banner.d.ts.map +1 -0
- package/dist/v2/components/Banner.js +183 -0
- package/dist/v2/components/Banner.js.map +1 -0
- package/dist/v2/components/Busy.d.ts +18 -0
- package/dist/v2/components/Busy.d.ts.map +1 -0
- package/dist/v2/components/Busy.js +104 -0
- package/dist/v2/components/Busy.js.map +1 -0
- package/dist/v2/components/Button.d.ts +36 -0
- package/dist/v2/components/Button.d.ts.map +1 -0
- package/dist/v2/components/Button.js +122 -0
- package/dist/v2/components/Button.js.map +1 -0
- package/dist/v2/components/CategoryTag.d.ts +45 -0
- package/dist/v2/components/CategoryTag.d.ts.map +1 -0
- package/dist/v2/components/CategoryTag.js +89 -0
- package/dist/v2/components/CategoryTag.js.map +1 -0
- package/dist/v2/components/Checkbox.d.ts +59 -0
- package/dist/v2/components/Checkbox.d.ts.map +1 -0
- package/dist/v2/components/Checkbox.js +134 -0
- package/dist/v2/components/Checkbox.js.map +1 -0
- package/dist/v2/components/Chip.d.ts +48 -0
- package/dist/v2/components/Chip.d.ts.map +1 -0
- package/dist/v2/components/Chip.js +131 -0
- package/dist/v2/components/Chip.js.map +1 -0
- package/dist/v2/components/Combobox.d.ts +134 -0
- package/dist/v2/components/Combobox.d.ts.map +1 -0
- package/dist/v2/components/Combobox.js +399 -0
- package/dist/v2/components/Combobox.js.map +1 -0
- package/dist/v2/components/CommandPalette.d.ts +36 -0
- package/dist/v2/components/CommandPalette.d.ts.map +1 -0
- package/dist/v2/components/CommandPalette.js +672 -0
- package/dist/v2/components/CommandPalette.js.map +1 -0
- package/dist/v2/components/ConfirmDialog.d.ts +23 -0
- package/dist/v2/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/v2/components/ConfirmDialog.js +150 -0
- package/dist/v2/components/ConfirmDialog.js.map +1 -0
- package/dist/v2/components/DatePicker.d.ts +21 -0
- package/dist/v2/components/DatePicker.d.ts.map +1 -0
- package/dist/v2/components/DatePicker.js +207 -0
- package/dist/v2/components/DatePicker.js.map +1 -0
- package/dist/v2/components/DateRangePicker.d.ts +81 -0
- package/dist/v2/components/DateRangePicker.d.ts.map +1 -0
- package/dist/v2/components/DateRangePicker.js +295 -0
- package/dist/v2/components/DateRangePicker.js.map +1 -0
- package/dist/v2/components/DateTimePicker.d.ts +21 -0
- package/dist/v2/components/DateTimePicker.d.ts.map +1 -0
- package/dist/v2/components/DateTimePicker.js +189 -0
- package/dist/v2/components/DateTimePicker.js.map +1 -0
- package/dist/v2/components/Drawer.d.ts +34 -0
- package/dist/v2/components/Drawer.d.ts.map +1 -0
- package/dist/v2/components/Drawer.js +339 -0
- package/dist/v2/components/Drawer.js.map +1 -0
- package/dist/v2/components/Dropzone.d.ts +150 -0
- package/dist/v2/components/Dropzone.d.ts.map +1 -0
- package/dist/v2/components/Dropzone.js +539 -0
- package/dist/v2/components/Dropzone.js.map +1 -0
- package/dist/v2/components/EmptyState.d.ts +36 -0
- package/dist/v2/components/EmptyState.d.ts.map +1 -0
- package/dist/v2/components/EmptyState.js +112 -0
- package/dist/v2/components/EmptyState.js.map +1 -0
- package/dist/v2/components/FavoriteToggle.d.ts +22 -0
- package/dist/v2/components/FavoriteToggle.d.ts.map +1 -0
- package/dist/v2/components/FavoriteToggle.js +134 -0
- package/dist/v2/components/FavoriteToggle.js.map +1 -0
- package/dist/v2/components/Field.d.ts +58 -0
- package/dist/v2/components/Field.d.ts.map +1 -0
- package/dist/v2/components/Field.js +186 -0
- package/dist/v2/components/Field.js.map +1 -0
- package/dist/v2/components/FieldHelp.d.ts +54 -0
- package/dist/v2/components/FieldHelp.d.ts.map +1 -0
- package/dist/v2/components/FieldHelp.js +209 -0
- package/dist/v2/components/FieldHelp.js.map +1 -0
- package/dist/v2/components/FilterTab.d.ts +35 -0
- package/dist/v2/components/FilterTab.d.ts.map +1 -0
- package/dist/v2/components/FilterTab.js +144 -0
- package/dist/v2/components/FilterTab.js.map +1 -0
- package/dist/v2/components/ForbiddenPage.d.ts +40 -0
- package/dist/v2/components/ForbiddenPage.d.ts.map +1 -0
- package/dist/v2/components/ForbiddenPage.js +81 -0
- package/dist/v2/components/ForbiddenPage.js.map +1 -0
- package/dist/v2/components/FormGrid.d.ts +76 -0
- package/dist/v2/components/FormGrid.d.ts.map +1 -0
- package/dist/v2/components/FormGrid.js +177 -0
- package/dist/v2/components/FormGrid.js.map +1 -0
- package/dist/v2/components/FormikDisplay.d.ts +38 -0
- package/dist/v2/components/FormikDisplay.d.ts.map +1 -0
- package/dist/v2/components/FormikDisplay.js +125 -0
- package/dist/v2/components/FormikDisplay.js.map +1 -0
- package/dist/v2/components/Input.d.ts +62 -0
- package/dist/v2/components/Input.d.ts.map +1 -0
- package/dist/v2/components/Input.js +115 -0
- package/dist/v2/components/Input.js.map +1 -0
- package/dist/v2/components/KPICard.d.ts +22 -0
- package/dist/v2/components/KPICard.d.ts.map +1 -0
- package/dist/v2/components/KPICard.js +205 -0
- package/dist/v2/components/KPICard.js.map +1 -0
- package/dist/v2/components/KV.d.ts +25 -0
- package/dist/v2/components/KV.d.ts.map +1 -0
- package/dist/v2/components/KV.js +82 -0
- package/dist/v2/components/KV.js.map +1 -0
- package/dist/v2/components/KVGrid.d.ts +44 -0
- package/dist/v2/components/KVGrid.d.ts.map +1 -0
- package/dist/v2/components/KVGrid.js +73 -0
- package/dist/v2/components/KVGrid.js.map +1 -0
- package/dist/v2/components/Layout.d.ts +78 -0
- package/dist/v2/components/Layout.d.ts.map +1 -0
- package/dist/v2/components/Layout.js +284 -0
- package/dist/v2/components/Layout.js.map +1 -0
- package/dist/v2/components/MobileRowCard.d.ts +63 -0
- package/dist/v2/components/MobileRowCard.d.ts.map +1 -0
- package/dist/v2/components/MobileRowCard.js +321 -0
- package/dist/v2/components/MobileRowCard.js.map +1 -0
- package/dist/v2/components/Modal.d.ts +21 -0
- package/dist/v2/components/Modal.d.ts.map +1 -0
- package/dist/v2/components/Modal.js +281 -0
- package/dist/v2/components/Modal.js.map +1 -0
- package/dist/v2/components/NetworkErrorPage.d.ts +11 -0
- package/dist/v2/components/NetworkErrorPage.d.ts.map +1 -0
- package/dist/v2/components/NetworkErrorPage.js +86 -0
- package/dist/v2/components/NetworkErrorPage.js.map +1 -0
- package/dist/v2/components/NotFoundPage.d.ts +9 -0
- package/dist/v2/components/NotFoundPage.d.ts.map +1 -0
- package/dist/v2/components/NotFoundPage.js +66 -0
- package/dist/v2/components/NotFoundPage.js.map +1 -0
- package/dist/v2/components/NumberInput.d.ts +83 -0
- package/dist/v2/components/NumberInput.d.ts.map +1 -0
- package/dist/v2/components/NumberInput.js +316 -0
- package/dist/v2/components/NumberInput.js.map +1 -0
- package/dist/v2/components/OverflowMenu.d.ts +55 -0
- package/dist/v2/components/OverflowMenu.d.ts.map +1 -0
- package/dist/v2/components/OverflowMenu.js +196 -0
- package/dist/v2/components/OverflowMenu.js.map +1 -0
- package/dist/v2/components/PdfViewer.d.ts +56 -0
- package/dist/v2/components/PdfViewer.d.ts.map +1 -0
- package/dist/v2/components/PdfViewer.js +132 -0
- package/dist/v2/components/PdfViewer.js.map +1 -0
- package/dist/v2/components/ProgressBar.d.ts +53 -0
- package/dist/v2/components/ProgressBar.d.ts.map +1 -0
- package/dist/v2/components/ProgressBar.js +209 -0
- package/dist/v2/components/ProgressBar.js.map +1 -0
- package/dist/v2/components/Radio.d.ts +78 -0
- package/dist/v2/components/Radio.d.ts.map +1 -0
- package/dist/v2/components/Radio.js +238 -0
- package/dist/v2/components/Radio.js.map +1 -0
- package/dist/v2/components/SectionHeader.d.ts +53 -0
- package/dist/v2/components/SectionHeader.d.ts.map +1 -0
- package/dist/v2/components/SectionHeader.js +140 -0
- package/dist/v2/components/SectionHeader.js.map +1 -0
- package/dist/v2/components/Segmented.d.ts +61 -0
- package/dist/v2/components/Segmented.d.ts.map +1 -0
- package/dist/v2/components/Segmented.js +261 -0
- package/dist/v2/components/Segmented.js.map +1 -0
- package/dist/v2/components/Select.d.ts +72 -0
- package/dist/v2/components/Select.d.ts.map +1 -0
- package/dist/v2/components/Select.js +382 -0
- package/dist/v2/components/Select.js.map +1 -0
- package/dist/v2/components/ServerErrorPage.d.ts +11 -0
- package/dist/v2/components/ServerErrorPage.d.ts.map +1 -0
- package/dist/v2/components/ServerErrorPage.js +82 -0
- package/dist/v2/components/ServerErrorPage.js.map +1 -0
- package/dist/v2/components/Skeleton.d.ts +56 -0
- package/dist/v2/components/Skeleton.d.ts.map +1 -0
- package/dist/v2/components/Skeleton.js +281 -0
- package/dist/v2/components/Skeleton.js.map +1 -0
- package/dist/v2/components/SkipLink.d.ts +30 -0
- package/dist/v2/components/SkipLink.d.ts.map +1 -0
- package/dist/v2/components/SkipLink.js +58 -0
- package/dist/v2/components/SkipLink.js.map +1 -0
- package/dist/v2/components/Spinner.d.ts +40 -0
- package/dist/v2/components/Spinner.d.ts.map +1 -0
- package/dist/v2/components/Spinner.js +76 -0
- package/dist/v2/components/Spinner.js.map +1 -0
- package/dist/v2/components/Status.d.ts +42 -0
- package/dist/v2/components/Status.d.ts.map +1 -0
- package/dist/v2/components/Status.js +71 -0
- package/dist/v2/components/Status.js.map +1 -0
- package/dist/v2/components/Stepper.d.ts +136 -0
- package/dist/v2/components/Stepper.d.ts.map +1 -0
- package/dist/v2/components/Stepper.js +415 -0
- package/dist/v2/components/Stepper.js.map +1 -0
- package/dist/v2/components/Switch.d.ts +30 -0
- package/dist/v2/components/Switch.d.ts.map +1 -0
- package/dist/v2/components/Switch.js +136 -0
- package/dist/v2/components/Switch.js.map +1 -0
- package/dist/v2/components/Tabs.d.ts +49 -0
- package/dist/v2/components/Tabs.d.ts.map +1 -0
- package/dist/v2/components/Tabs.js +160 -0
- package/dist/v2/components/Tabs.js.map +1 -0
- package/dist/v2/components/TelInput.d.ts +33 -0
- package/dist/v2/components/TelInput.d.ts.map +1 -0
- package/dist/v2/components/TelInput.js +282 -0
- package/dist/v2/components/TelInput.js.map +1 -0
- package/dist/v2/components/Textarea.d.ts +23 -0
- package/dist/v2/components/Textarea.d.ts.map +1 -0
- package/dist/v2/components/Textarea.js +80 -0
- package/dist/v2/components/Textarea.js.map +1 -0
- package/dist/v2/components/TimePicker.d.ts +21 -0
- package/dist/v2/components/TimePicker.d.ts.map +1 -0
- package/dist/v2/components/TimePicker.js +141 -0
- package/dist/v2/components/TimePicker.js.map +1 -0
- package/dist/v2/components/Toast.d.ts +32 -0
- package/dist/v2/components/Toast.d.ts.map +1 -0
- package/dist/v2/components/Toast.js +384 -0
- package/dist/v2/components/Toast.js.map +1 -0
- package/dist/v2/components/Tooltip.d.ts +9 -0
- package/dist/v2/components/Tooltip.d.ts.map +1 -0
- package/dist/v2/components/Tooltip.js +169 -0
- package/dist/v2/components/Tooltip.js.map +1 -0
- package/dist/v2/components/_ErrorPageBody.d.ts +48 -0
- package/dist/v2/components/_ErrorPageBody.d.ts.map +1 -0
- package/dist/v2/components/_ErrorPageBody.js +96 -0
- package/dist/v2/components/_ErrorPageBody.js.map +1 -0
- package/dist/v2/components/_pickerShared.d.ts +47 -0
- package/dist/v2/components/_pickerShared.d.ts.map +1 -0
- package/dist/v2/components/_pickerShared.js +68 -0
- package/dist/v2/components/_pickerShared.js.map +1 -0
- package/dist/v2/components/index.d.ts +83 -0
- package/dist/v2/components/index.d.ts.map +1 -0
- package/dist/v2/components/index.js +477 -0
- package/dist/v2/components/index.js.map +1 -0
- package/dist/v2/hooks/index.d.ts +11 -0
- package/dist/v2/hooks/index.d.ts.map +1 -0
- package/dist/v2/hooks/index.js +85 -0
- package/dist/v2/hooks/index.js.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.d.ts +22 -0
- package/dist/v2/hooks/useDelayedFlag.d.ts.map +1 -0
- package/dist/v2/hooks/useDelayedFlag.js +60 -0
- package/dist/v2/hooks/useDelayedFlag.js.map +1 -0
- package/dist/v2/hooks/useDensity.d.ts +23 -0
- package/dist/v2/hooks/useDensity.d.ts.map +1 -0
- package/dist/v2/hooks/useDensity.js +124 -0
- package/dist/v2/hooks/useDensity.js.map +1 -0
- package/dist/v2/hooks/useFocusFirstError.d.ts +121 -0
- package/dist/v2/hooks/useFocusFirstError.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusFirstError.js +203 -0
- package/dist/v2/hooks/useFocusFirstError.js.map +1 -0
- package/dist/v2/hooks/useFocusTrap.d.ts +3 -0
- package/dist/v2/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/v2/hooks/useFocusTrap.js +207 -0
- package/dist/v2/hooks/useFocusTrap.js.map +1 -0
- package/dist/v2/hooks/useFormAutoSave.d.ts +42 -0
- package/dist/v2/hooks/useFormAutoSave.d.ts.map +1 -0
- package/dist/v2/hooks/useFormAutoSave.js +186 -0
- package/dist/v2/hooks/useFormAutoSave.js.map +1 -0
- package/dist/v2/hooks/useFormCompletionProgress.d.ts +52 -0
- package/dist/v2/hooks/useFormCompletionProgress.d.ts.map +1 -0
- package/dist/v2/hooks/useFormCompletionProgress.js +136 -0
- package/dist/v2/hooks/useFormCompletionProgress.js.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.d.ts +31 -0
- package/dist/v2/hooks/useResolvedDensity.d.ts.map +1 -0
- package/dist/v2/hooks/useResolvedDensity.js +50 -0
- package/dist/v2/hooks/useResolvedDensity.js.map +1 -0
- package/dist/v2/hooks/useSortedRows.d.ts +25 -0
- package/dist/v2/hooks/useSortedRows.d.ts.map +1 -0
- package/dist/v2/hooks/useSortedRows.js +38 -0
- package/dist/v2/hooks/useSortedRows.js.map +1 -0
- package/dist/v2/hooks/useTabLoading.d.ts +39 -0
- package/dist/v2/hooks/useTabLoading.d.ts.map +1 -0
- package/dist/v2/hooks/useTabLoading.js +85 -0
- package/dist/v2/hooks/useTabLoading.js.map +1 -0
- package/dist/v2/index.d.ts +115 -0
- package/dist/v2/index.d.ts.map +1 -0
- package/dist/v2/index.js +1127 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/modalContext.d.ts +96 -0
- package/dist/v2/modalContext.d.ts.map +1 -0
- package/dist/v2/modalContext.js +113 -0
- package/dist/v2/modalContext.js.map +1 -0
- package/dist/v2/models/favorite.d.ts +14 -0
- package/dist/v2/models/favorite.d.ts.map +1 -0
- package/dist/v2/models/favorite.js +6 -0
- package/dist/v2/models/favorite.js.map +1 -0
- package/dist/v2/models/index.d.ts +11 -0
- package/dist/v2/models/index.d.ts.map +1 -0
- package/dist/v2/models/index.js +50 -0
- package/dist/v2/models/index.js.map +1 -0
- package/dist/v2/models/personalization.d.ts +65 -0
- package/dist/v2/models/personalization.d.ts.map +1 -0
- package/dist/v2/models/personalization.js +6 -0
- package/dist/v2/models/personalization.js.map +1 -0
- package/dist/v2/models/referentiel.d.ts +67 -0
- package/dist/v2/models/referentiel.d.ts.map +1 -0
- package/dist/v2/models/referentiel.js +6 -0
- package/dist/v2/models/referentiel.js.map +1 -0
- package/dist/v2/models/savedFilter.d.ts +22 -0
- package/dist/v2/models/savedFilter.d.ts.map +1 -0
- package/dist/v2/models/savedFilter.js +6 -0
- package/dist/v2/models/savedFilter.js.map +1 -0
- package/dist/v2/patterns/ActionBar.d.ts +137 -0
- package/dist/v2/patterns/ActionBar.d.ts.map +1 -0
- package/dist/v2/patterns/ActionBar.js +601 -0
- package/dist/v2/patterns/ActionBar.js.map +1 -0
- package/dist/v2/patterns/BulkActionBar.d.ts +63 -0
- package/dist/v2/patterns/BulkActionBar.d.ts.map +1 -0
- package/dist/v2/patterns/BulkActionBar.js +153 -0
- package/dist/v2/patterns/BulkActionBar.js.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts +62 -0
- package/dist/v2/patterns/CollapsibleDataGrid.d.ts.map +1 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js +306 -0
- package/dist/v2/patterns/CollapsibleDataGrid.js.map +1 -0
- package/dist/v2/patterns/ColumnsToggle.d.ts +55 -0
- package/dist/v2/patterns/ColumnsToggle.d.ts.map +1 -0
- package/dist/v2/patterns/ColumnsToggle.js +314 -0
- package/dist/v2/patterns/ColumnsToggle.js.map +1 -0
- package/dist/v2/patterns/DataGrid.d.ts +7 -0
- package/dist/v2/patterns/DataGrid.d.ts.map +1 -0
- package/dist/v2/patterns/DataGrid.js +834 -0
- package/dist/v2/patterns/DataGrid.js.map +1 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts +68 -0
- package/dist/v2/patterns/DataGridSettingsMenu.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridSettingsMenu.js +381 -0
- package/dist/v2/patterns/DataGridSettingsMenu.js.map +1 -0
- package/dist/v2/patterns/DataGridToolbar.d.ts +81 -0
- package/dist/v2/patterns/DataGridToolbar.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridToolbar.js +255 -0
- package/dist/v2/patterns/DataGridToolbar.js.map +1 -0
- package/dist/v2/patterns/DataGridVirtualized.d.ts +76 -0
- package/dist/v2/patterns/DataGridVirtualized.d.ts.map +1 -0
- package/dist/v2/patterns/DataGridVirtualized.js +528 -0
- package/dist/v2/patterns/DataGridVirtualized.js.map +1 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts +46 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.d.ts.map +1 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js +77 -0
- package/dist/v2/patterns/DeleteResourceConfirmDialog.js.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts +72 -0
- package/dist/v2/patterns/FavoriteColumn.d.ts.map +1 -0
- package/dist/v2/patterns/FavoriteColumn.js +171 -0
- package/dist/v2/patterns/FavoriteColumn.js.map +1 -0
- package/dist/v2/patterns/FavoritesFilter.d.ts +51 -0
- package/dist/v2/patterns/FavoritesFilter.d.ts.map +1 -0
- package/dist/v2/patterns/FavoritesFilter.js +97 -0
- package/dist/v2/patterns/FavoritesFilter.js.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.d.ts +39 -0
- package/dist/v2/patterns/FormErrorSummary.d.ts.map +1 -0
- package/dist/v2/patterns/FormErrorSummary.js +111 -0
- package/dist/v2/patterns/FormErrorSummary.js.map +1 -0
- package/dist/v2/patterns/FormPageShell.d.ts +55 -0
- package/dist/v2/patterns/FormPageShell.d.ts.map +1 -0
- package/dist/v2/patterns/FormPageShell.js +133 -0
- package/dist/v2/patterns/FormPageShell.js.map +1 -0
- package/dist/v2/patterns/FormSection.d.ts +53 -0
- package/dist/v2/patterns/FormSection.d.ts.map +1 -0
- package/dist/v2/patterns/FormSection.js +162 -0
- package/dist/v2/patterns/FormSection.js.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts +51 -0
- package/dist/v2/patterns/FormikCheckboxGroup.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCheckboxGroup.js +117 -0
- package/dist/v2/patterns/FormikCheckboxGroup.js.map +1 -0
- package/dist/v2/patterns/FormikCombobox.d.ts +43 -0
- package/dist/v2/patterns/FormikCombobox.d.ts.map +1 -0
- package/dist/v2/patterns/FormikCombobox.js +121 -0
- package/dist/v2/patterns/FormikCombobox.js.map +1 -0
- package/dist/v2/patterns/FormikDatePicker.d.ts +87 -0
- package/dist/v2/patterns/FormikDatePicker.d.ts.map +1 -0
- package/dist/v2/patterns/FormikDatePicker.js +177 -0
- package/dist/v2/patterns/FormikDatePicker.js.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.d.ts +59 -0
- package/dist/v2/patterns/FormikErrorFocus.d.ts.map +1 -0
- package/dist/v2/patterns/FormikErrorFocus.js +83 -0
- package/dist/v2/patterns/FormikErrorFocus.js.map +1 -0
- package/dist/v2/patterns/FormikFile.d.ts +43 -0
- package/dist/v2/patterns/FormikFile.d.ts.map +1 -0
- package/dist/v2/patterns/FormikFile.js +156 -0
- package/dist/v2/patterns/FormikFile.js.map +1 -0
- package/dist/v2/patterns/FormikInput.d.ts +37 -0
- package/dist/v2/patterns/FormikInput.d.ts.map +1 -0
- package/dist/v2/patterns/FormikInput.js +87 -0
- package/dist/v2/patterns/FormikInput.js.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts +33 -0
- package/dist/v2/patterns/FormikReferentielField.d.ts.map +1 -0
- package/dist/v2/patterns/FormikReferentielField.js +124 -0
- package/dist/v2/patterns/FormikReferentielField.js.map +1 -0
- package/dist/v2/patterns/FormikSelect.d.ts +40 -0
- package/dist/v2/patterns/FormikSelect.d.ts.map +1 -0
- package/dist/v2/patterns/FormikSelect.js +139 -0
- package/dist/v2/patterns/FormikSelect.js.map +1 -0
- package/dist/v2/patterns/FormikTextarea.d.ts +31 -0
- package/dist/v2/patterns/FormikTextarea.d.ts.map +1 -0
- package/dist/v2/patterns/FormikTextarea.js +84 -0
- package/dist/v2/patterns/FormikTextarea.js.map +1 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts +44 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.d.ts.map +1 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.js +207 -0
- package/dist/v2/patterns/KeyboardShortcutsHelp.js.map +1 -0
- package/dist/v2/patterns/NetworkErrorBanner.d.ts +26 -0
- package/dist/v2/patterns/NetworkErrorBanner.d.ts.map +1 -0
- package/dist/v2/patterns/NetworkErrorBanner.js +82 -0
- package/dist/v2/patterns/NetworkErrorBanner.js.map +1 -0
- package/dist/v2/patterns/PageContent.d.ts +40 -0
- package/dist/v2/patterns/PageContent.d.ts.map +1 -0
- package/dist/v2/patterns/PageContent.js +69 -0
- package/dist/v2/patterns/PageContent.js.map +1 -0
- package/dist/v2/patterns/ReferentielField.d.ts +118 -0
- package/dist/v2/patterns/ReferentielField.d.ts.map +1 -0
- package/dist/v2/patterns/ReferentielField.js +617 -0
- package/dist/v2/patterns/ReferentielField.js.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.d.ts +68 -0
- package/dist/v2/patterns/SaveFilterDialog.d.ts.map +1 -0
- package/dist/v2/patterns/SaveFilterDialog.js +203 -0
- package/dist/v2/patterns/SaveFilterDialog.js.map +1 -0
- package/dist/v2/patterns/SavedFiltersMenu.d.ts +74 -0
- package/dist/v2/patterns/SavedFiltersMenu.d.ts.map +1 -0
- package/dist/v2/patterns/SavedFiltersMenu.js +412 -0
- package/dist/v2/patterns/SavedFiltersMenu.js.map +1 -0
- package/dist/v2/patterns/SkeletonPageShell.d.ts +76 -0
- package/dist/v2/patterns/SkeletonPageShell.d.ts.map +1 -0
- package/dist/v2/patterns/SkeletonPageShell.js +347 -0
- package/dist/v2/patterns/SkeletonPageShell.js.map +1 -0
- package/dist/v2/patterns/SortableHeader.d.ts +47 -0
- package/dist/v2/patterns/SortableHeader.d.ts.map +1 -0
- package/dist/v2/patterns/SortableHeader.js +193 -0
- package/dist/v2/patterns/SortableHeader.js.map +1 -0
- package/dist/v2/patterns/Tour.d.ts +55 -0
- package/dist/v2/patterns/Tour.d.ts.map +1 -0
- package/dist/v2/patterns/Tour.js +473 -0
- package/dist/v2/patterns/Tour.js.map +1 -0
- package/dist/v2/patterns/_dataGridShared.d.ts +125 -0
- package/dist/v2/patterns/_dataGridShared.d.ts.map +1 -0
- package/dist/v2/patterns/_dataGridShared.js +406 -0
- package/dist/v2/patterns/_dataGridShared.js.map +1 -0
- package/dist/v2/patterns/_sort.d.ts +22 -0
- package/dist/v2/patterns/_sort.d.ts.map +1 -0
- package/dist/v2/patterns/_sort.js +118 -0
- package/dist/v2/patterns/_sort.js.map +1 -0
- package/dist/v2/patterns/_useColumnReorder.d.ts +69 -0
- package/dist/v2/patterns/_useColumnReorder.d.ts.map +1 -0
- package/dist/v2/patterns/_useColumnReorder.js +264 -0
- package/dist/v2/patterns/_useColumnReorder.js.map +1 -0
- package/dist/v2/patterns/_useColumnResize.d.ts +49 -0
- package/dist/v2/patterns/_useColumnResize.d.ts.map +1 -0
- package/dist/v2/patterns/_useColumnResize.js +198 -0
- package/dist/v2/patterns/_useColumnResize.js.map +1 -0
- package/dist/v2/patterns/index.d.ts +62 -0
- package/dist/v2/patterns/index.d.ts.map +1 -0
- package/dist/v2/patterns/index.js +246 -0
- package/dist/v2/patterns/index.js.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts +80 -0
- package/dist/v2/personalization/PersonalizationProvider.d.ts.map +1 -0
- package/dist/v2/personalization/PersonalizationProvider.js +177 -0
- package/dist/v2/personalization/PersonalizationProvider.js.map +1 -0
- package/dist/v2/personalization/adapters/_storageKey.d.ts +35 -0
- package/dist/v2/personalization/adapters/_storageKey.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/_storageKey.js +69 -0
- package/dist/v2/personalization/adapters/_storageKey.js.map +1 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts +31 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js +128 -0
- package/dist/v2/personalization/adapters/createLocalStorageAdapter.js.map +1 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts +25 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.js +76 -0
- package/dist/v2/personalization/adapters/createMemoryAdapter.js.map +1 -0
- package/dist/v2/personalization/adapters/index.d.ts +10 -0
- package/dist/v2/personalization/adapters/index.d.ts.map +1 -0
- package/dist/v2/personalization/adapters/index.js +21 -0
- package/dist/v2/personalization/adapters/index.js.map +1 -0
- package/dist/v2/personalization/capabilities/favorites.d.ts +53 -0
- package/dist/v2/personalization/capabilities/favorites.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/favorites.js +223 -0
- package/dist/v2/personalization/capabilities/favorites.js.map +1 -0
- package/dist/v2/personalization/capabilities/favoritesView.d.ts +58 -0
- package/dist/v2/personalization/capabilities/favoritesView.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/favoritesView.js +121 -0
- package/dist/v2/personalization/capabilities/favoritesView.js.map +1 -0
- package/dist/v2/personalization/capabilities/index.d.ts +16 -0
- package/dist/v2/personalization/capabilities/index.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/index.js +69 -0
- package/dist/v2/personalization/capabilities/index.js.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.d.ts +61 -0
- package/dist/v2/personalization/capabilities/savedFilters.d.ts.map +1 -0
- package/dist/v2/personalization/capabilities/savedFilters.js +297 -0
- package/dist/v2/personalization/capabilities/savedFilters.js.map +1 -0
- package/dist/v2/personalization/createPersonalizationStore.d.ts +76 -0
- package/dist/v2/personalization/createPersonalizationStore.d.ts.map +1 -0
- package/dist/v2/personalization/createPersonalizationStore.js +475 -0
- package/dist/v2/personalization/createPersonalizationStore.js.map +1 -0
- package/dist/v2/personalization/index.d.ts +33 -0
- package/dist/v2/personalization/index.d.ts.map +1 -0
- package/dist/v2/personalization/index.js +111 -0
- package/dist/v2/personalization/index.js.map +1 -0
- package/dist/v2/personalization/personalizationContext.d.ts +78 -0
- package/dist/v2/personalization/personalizationContext.d.ts.map +1 -0
- package/dist/v2/personalization/personalizationContext.js +121 -0
- package/dist/v2/personalization/personalizationContext.js.map +1 -0
- package/dist/v2/personalization/schema.d.ts +60 -0
- package/dist/v2/personalization/schema.d.ts.map +1 -0
- package/dist/v2/personalization/schema.js +102 -0
- package/dist/v2/personalization/schema.js.map +1 -0
- package/dist/v2/personalization/types.d.ts +81 -0
- package/dist/v2/personalization/types.d.ts.map +1 -0
- package/dist/v2/personalization/types.js +6 -0
- package/dist/v2/personalization/types.js.map +1 -0
- package/dist/v2/referentiel/ReferentielProvider.d.ts +53 -0
- package/dist/v2/referentiel/ReferentielProvider.d.ts.map +1 -0
- package/dist/v2/referentiel/ReferentielProvider.js +94 -0
- package/dist/v2/referentiel/ReferentielProvider.js.map +1 -0
- package/dist/v2/referentiel/index.d.ts +18 -0
- package/dist/v2/referentiel/index.d.ts.map +1 -0
- package/dist/v2/referentiel/index.js +44 -0
- package/dist/v2/referentiel/index.js.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.d.ts +15 -0
- package/dist/v2/referentiel/useReferentielClient.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielClient.js +46 -0
- package/dist/v2/referentiel/useReferentielClient.js.map +1 -0
- package/dist/v2/referentiel/useReferentielOptions.d.ts +40 -0
- package/dist/v2/referentiel/useReferentielOptions.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielOptions.js +177 -0
- package/dist/v2/referentiel/useReferentielOptions.js.map +1 -0
- package/dist/v2/referentiel/useReferentielSearch.d.ts +76 -0
- package/dist/v2/referentiel/useReferentielSearch.d.ts.map +1 -0
- package/dist/v2/referentiel/useReferentielSearch.js +140 -0
- package/dist/v2/referentiel/useReferentielSearch.js.map +1 -0
- package/dist/v2/styles/base.css +425 -0
- package/dist/v2/styles/css.d.ts +10 -0
- package/dist/v2/styles/index.d.ts +12 -0
- package/dist/v2/styles/index.d.ts.map +1 -0
- package/dist/v2/styles/index.js +4 -0
- package/dist/v2/styles/index.js.map +1 -0
- package/dist/v2/theme/_brand.d.ts +29 -0
- package/dist/v2/theme/_brand.d.ts.map +1 -0
- package/dist/v2/theme/_brand.js +69 -0
- package/dist/v2/theme/_brand.js.map +1 -0
- package/dist/v2/theme/_brandSecondary.d.ts +26 -0
- package/dist/v2/theme/_brandSecondary.d.ts.map +1 -0
- package/dist/v2/theme/_brandSecondary.js +65 -0
- package/dist/v2/theme/_brandSecondary.js.map +1 -0
- package/dist/v2/theme/createPortnetTheme.d.ts +50 -0
- package/dist/v2/theme/createPortnetTheme.d.ts.map +1 -0
- package/dist/v2/theme/createPortnetTheme.js +529 -0
- package/dist/v2/theme/createPortnetTheme.js.map +1 -0
- package/dist/v2/theme/cssVariables.d.ts +41 -0
- package/dist/v2/theme/cssVariables.d.ts.map +1 -0
- package/dist/v2/theme/cssVariables.js +205 -0
- package/dist/v2/theme/cssVariables.js.map +1 -0
- package/dist/v2/theme/index.d.ts +33 -0
- package/dist/v2/theme/index.d.ts.map +1 -0
- package/dist/v2/theme/index.js +60 -0
- package/dist/v2/theme/index.js.map +1 -0
- package/dist/v2/tokens/breakpoints.d.ts +74 -0
- package/dist/v2/tokens/breakpoints.d.ts.map +1 -0
- package/dist/v2/tokens/breakpoints.js +114 -0
- package/dist/v2/tokens/breakpoints.js.map +1 -0
- package/dist/v2/tokens/colors.d.ts +228 -0
- package/dist/v2/tokens/colors.d.ts.map +1 -0
- package/dist/v2/tokens/colors.js +225 -0
- package/dist/v2/tokens/colors.js.map +1 -0
- package/dist/v2/tokens/density.d.ts +142 -0
- package/dist/v2/tokens/density.d.ts.map +1 -0
- package/dist/v2/tokens/density.js +111 -0
- package/dist/v2/tokens/density.js.map +1 -0
- package/dist/v2/tokens/index.d.ts +556 -0
- package/dist/v2/tokens/index.d.ts.map +1 -0
- package/dist/v2/tokens/index.js +313 -0
- package/dist/v2/tokens/index.js.map +1 -0
- package/dist/v2/tokens/motion.d.ts +85 -0
- package/dist/v2/tokens/motion.d.ts.map +1 -0
- package/dist/v2/tokens/motion.js +94 -0
- package/dist/v2/tokens/motion.js.map +1 -0
- package/dist/v2/tokens/radius.d.ts +18 -0
- package/dist/v2/tokens/radius.d.ts.map +1 -0
- package/dist/v2/tokens/radius.js +28 -0
- package/dist/v2/tokens/radius.js.map +1 -0
- package/dist/v2/tokens/shadows.d.ts +25 -0
- package/dist/v2/tokens/shadows.d.ts.map +1 -0
- package/dist/v2/tokens/shadows.js +46 -0
- package/dist/v2/tokens/shadows.js.map +1 -0
- package/dist/v2/tokens/spacing.d.ts +38 -0
- package/dist/v2/tokens/spacing.d.ts.map +1 -0
- package/dist/v2/tokens/spacing.js +57 -0
- package/dist/v2/tokens/spacing.js.map +1 -0
- package/dist/v2/tokens/state.d.ts +40 -0
- package/dist/v2/tokens/state.d.ts.map +1 -0
- package/dist/v2/tokens/state.js +47 -0
- package/dist/v2/tokens/state.js.map +1 -0
- package/dist/v2/tokens/statusPalette.d.ts +54 -0
- package/dist/v2/tokens/statusPalette.d.ts.map +1 -0
- package/dist/v2/tokens/statusPalette.js +72 -0
- package/dist/v2/tokens/statusPalette.js.map +1 -0
- package/dist/v2/tokens/tokens.json +153 -0
- package/dist/v2/tokens/typography.d.ts +206 -0
- package/dist/v2/tokens/typography.d.ts.map +1 -0
- package/dist/v2/tokens/typography.js +155 -0
- package/dist/v2/tokens/typography.js.map +1 -0
- package/dist/v2/tokens/zIndex.d.ts +33 -0
- package/dist/v2/tokens/zIndex.d.ts.map +1 -0
- package/dist/v2/tokens/zIndex.js +50 -0
- package/dist/v2/tokens/zIndex.js.map +1 -0
- package/dist/v2/types/common.d.ts +24 -0
- package/dist/v2/types/common.d.ts.map +1 -0
- package/dist/v2/types/common.js +6 -0
- package/dist/v2/types/common.js.map +1 -0
- package/dist/v2/types/datagrid.d.ts +131 -0
- package/dist/v2/types/datagrid.d.ts.map +1 -0
- package/dist/v2/types/datagrid.js +6 -0
- package/dist/v2/types/datagrid.js.map +1 -0
- package/dist/v2/types/index.d.ts +11 -0
- package/dist/v2/types/index.d.ts.map +1 -0
- package/dist/v2/types/index.js +28 -0
- package/dist/v2/types/index.js.map +1 -0
- package/dist/v2/utils/apiError.d.ts +90 -0
- package/dist/v2/utils/apiError.d.ts.map +1 -0
- package/dist/v2/utils/apiError.js +227 -0
- package/dist/v2/utils/apiError.js.map +1 -0
- package/dist/v2/utils/contrast.d.ts +68 -0
- package/dist/v2/utils/contrast.d.ts.map +1 -0
- package/dist/v2/utils/contrast.js +167 -0
- package/dist/v2/utils/contrast.js.map +1 -0
- package/dist/v2/utils/cx.d.ts +9 -0
- package/dist/v2/utils/cx.d.ts.map +1 -0
- package/dist/v2/utils/cx.js +45 -0
- package/dist/v2/utils/cx.js.map +1 -0
- package/dist/v2/utils/fileDownload.d.ts +94 -0
- package/dist/v2/utils/fileDownload.d.ts.map +1 -0
- package/dist/v2/utils/fileDownload.js +236 -0
- package/dist/v2/utils/fileDownload.js.map +1 -0
- package/dist/v2/utils/fmtMoney.d.ts +28 -0
- package/dist/v2/utils/fmtMoney.d.ts.map +1 -0
- package/dist/v2/utils/fmtMoney.js +84 -0
- package/dist/v2/utils/fmtMoney.js.map +1 -0
- package/dist/v2/utils/index.d.ts +8 -0
- package/dist/v2/utils/index.d.ts.map +1 -0
- package/dist/v2/utils/index.js +90 -0
- package/dist/v2/utils/index.js.map +1 -0
- package/dist/v2/utils/networkStatus.d.ts +88 -0
- package/dist/v2/utils/networkStatus.d.ts.map +1 -0
- package/dist/v2/utils/networkStatus.js +121 -0
- package/dist/v2/utils/networkStatus.js.map +1 -0
- package/package.json +191 -76
- package/dist/api/guideApi.js +0 -12
- package/dist/api/guideImageService.js +0 -119
- package/dist/api/reclamationApi.js +0 -102
- package/dist/assets/guides/FAQ.json +0 -118
- package/dist/assets/guides/index.js +0 -11
- package/dist/assets/images/tijariaLogo.ico +0 -0
- package/dist/components/buttons/PuiButton.js +0 -217
- package/dist/components/buttons/PuiIconButton.js +0 -98
- package/dist/components/common/PuiAlertContext.js +0 -12
- package/dist/components/common/PuiHelpWidgetContext.js +0 -17
- package/dist/components/common/StyledMuiButton.js +0 -48
- package/dist/components/common/StyledMuiTextField.js +0 -180
- package/dist/components/inputs/PuiAutocomplete.js +0 -352
- package/dist/components/inputs/PuiCheckbox.js +0 -308
- package/dist/components/inputs/PuiCheckboxGroup.js +0 -215
- package/dist/components/inputs/PuiCheckboxItem.js +0 -162
- package/dist/components/inputs/PuiDateField.js +0 -280
- package/dist/components/inputs/PuiDateTimeField.js +0 -276
- package/dist/components/inputs/PuiFileField.js +0 -265
- package/dist/components/inputs/PuiRadioGroup.js +0 -197
- package/dist/components/inputs/PuiRadioItem.js +0 -100
- package/dist/components/inputs/PuiSelect.js +0 -427
- package/dist/components/inputs/PuiTextField.js +0 -263
- package/dist/components/others/PuiBadge.js +0 -58
- package/dist/components/others/PuiChip.js +0 -150
- package/dist/components/others/PuiDialog.js +0 -102
- package/dist/components/others/PuiFormikForm.js +0 -70
- package/dist/components/others/PuiGrid.js +0 -23
- package/dist/components/others/PuiIcon.js +0 -92
- package/dist/components/others/PuiLoadingBackdrop.js +0 -32
- package/dist/components/others/PuiMainContainer.js +0 -41
- package/dist/components/others/PuiNavigation.js +0 -68
- package/dist/components/others/PuiSection.js +0 -187
- package/dist/components/others/PuiTooltip.js +0 -86
- package/dist/components/providers/PuiAlertProvider.js +0 -134
- package/dist/components/providers/PuiHelpWidgetProvider.js +0 -91
- package/dist/components/providers/PuiLocalizationProvider.js +0 -34
- package/dist/components/referentiel/common/ReferetielContext.js +0 -12
- package/dist/components/referentiel/common/constants/specificReferentielsApis.js +0 -22
- package/dist/components/referentiel/common/constants/specificReferentielsBaseColumns.js +0 -691
- package/dist/components/referentiel/common/constants/specificReferentielsBaseFilters.js +0 -598
- package/dist/components/referentiel/common/constants/specificReferentielsInitialValues.js +0 -80
- package/dist/components/referentiel/common/constants/specificReferentielsKeys.js +0 -18
- package/dist/components/referentiel/common/constants/specificReferentielsTitles.js +0 -22
- package/dist/components/referentiel/common/constants/specificReferentielsValidationSchemas.js +0 -85
- package/dist/components/referentiel/components/PuiBasePopupReferentielField.js +0 -356
- package/dist/components/referentiel/components/PuiCustomPopupReferentielField.js +0 -181
- package/dist/components/referentiel/components/PuiSimplePopupReferentielField.js +0 -325
- package/dist/components/referentiel/components/PuiSimpleReferentielField.js +0 -203
- package/dist/components/referentiel/components/PuiSpecificReferentielField.js +0 -352
- package/dist/components/referentiel/providers/PuiReferentielProvider.js +0 -66
- package/dist/components/tab/PuiTab.js +0 -25
- package/dist/components/tab/PuiTabs.js +0 -148
- package/dist/components/table/PuiTable.js +0 -643
- package/dist/components/table/PuiTableAction.js +0 -75
- package/dist/components/typography/PuiDefinition.js +0 -42
- package/dist/components/typography/PuiIndication.js +0 -80
- package/dist/components/typography/PuiMainTitle.js +0 -144
- package/dist/components/ui/dialogs/PuiSearchDialog.js +0 -106
- package/dist/components/ui/pages/errors/PuiErrorBasePage.js +0 -73
- package/dist/components/ui/pages/errors/PuiForbiddenErrorPage.js +0 -36
- package/dist/components/ui/pages/errors/PuiNetworkErrorPage.js +0 -36
- package/dist/components/ui/pages/errors/PuiNotFoundErrorPage.js +0 -30
- package/dist/components/ui/pages/errors/PuiServerErrorPage.js +0 -37
- package/dist/components/ui/pages/general/PuiDefaultPage.js +0 -68
- package/dist/components/ui/pages/general/PuiSearchPage.js +0 -203
- package/dist/components/widgets/GuideImage.js +0 -251
- package/dist/components/widgets/PuiHelpWidget.js +0 -4167
- package/dist/config/apperance.js +0 -26
- package/dist/config/mapping.js +0 -26
- package/dist/config/referentiel.js +0 -10
- package/dist/general/yupValidationErrors.js +0 -8
- package/dist/hooks/useAlert.js +0 -19
- package/dist/hooks/useAxios.js +0 -23
- package/dist/hooks/useQuery.js +0 -21
- package/dist/hooks/useReclamation.js +0 -100
- package/dist/styles/ReclamationFormModal.css +0 -629
- package/dist/styles/help-widget.css +0 -621
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
var fs = _interopRequireWildcard(require("fs"));
|
|
5
|
+
var path = _interopRequireWildcard(require("path"));
|
|
6
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
7
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
8
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
|
|
9
|
+
var _marked = /*#__PURE__*/_regeneratorRuntime().mark(walk);
|
|
10
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
11
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } /* eslint-env node */
|
|
13
|
+
/**
|
|
14
|
+
* Static-analysis tests guarding against re-introduction of banned
|
|
15
|
+
* patterns in src/lib/v2/. Pure filesystem scan; no React, no jsdom.
|
|
16
|
+
*
|
|
17
|
+
* Each banned pattern has a unique regression history documented in
|
|
18
|
+
* the per-test comment so future readers know WHY the rule exists,
|
|
19
|
+
* not just what it forbids.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
var V2_ROOT = path.resolve(__dirname, "..");
|
|
23
|
+
/**
|
|
24
|
+
* Recursively walk a directory, yielding paths of source files that
|
|
25
|
+
* are eligible for scanning. Excludes nested __tests__ folders so
|
|
26
|
+
* test fixtures referencing banned strings as test data don't trigger
|
|
27
|
+
* the rule. Scans .js/.jsx/.ts/.tsx/.css (ambient .d.ts excluded — no
|
|
28
|
+
* runtime style/breakpoint literals live there).
|
|
29
|
+
*/
|
|
30
|
+
function walk(dir) {
|
|
31
|
+
var _iterator, _step, entry, p;
|
|
32
|
+
return _regeneratorRuntime().wrap(function walk$(_context) {
|
|
33
|
+
while (1) {
|
|
34
|
+
switch (_context.prev = _context.next) {
|
|
35
|
+
case 0:
|
|
36
|
+
_iterator = _createForOfIteratorHelper(fs.readdirSync(dir, {
|
|
37
|
+
withFileTypes: true
|
|
38
|
+
}));
|
|
39
|
+
_context.prev = 1;
|
|
40
|
+
_iterator.s();
|
|
41
|
+
case 3:
|
|
42
|
+
if ((_step = _iterator.n()).done) {
|
|
43
|
+
_context.next = 17;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
entry = _step.value;
|
|
47
|
+
p = path.join(dir, entry.name);
|
|
48
|
+
if (!entry.isDirectory()) {
|
|
49
|
+
_context.next = 12;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (!(entry.name === "__tests__" || entry.name === "node_modules")) {
|
|
53
|
+
_context.next = 9;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
return _context.abrupt("continue", 15);
|
|
57
|
+
case 9:
|
|
58
|
+
return _context.delegateYield(walk(p), "t0", 10);
|
|
59
|
+
case 10:
|
|
60
|
+
_context.next = 15;
|
|
61
|
+
break;
|
|
62
|
+
case 12:
|
|
63
|
+
if (!(entry.isFile() && /\.(?:jsx?|tsx?|css)$/.test(entry.name) && !entry.name.endsWith(".d.ts"))) {
|
|
64
|
+
_context.next = 15;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
_context.next = 15;
|
|
68
|
+
return p;
|
|
69
|
+
case 15:
|
|
70
|
+
_context.next = 3;
|
|
71
|
+
break;
|
|
72
|
+
case 17:
|
|
73
|
+
_context.next = 22;
|
|
74
|
+
break;
|
|
75
|
+
case 19:
|
|
76
|
+
_context.prev = 19;
|
|
77
|
+
_context.t1 = _context["catch"](1);
|
|
78
|
+
_iterator.e(_context.t1);
|
|
79
|
+
case 22:
|
|
80
|
+
_context.prev = 22;
|
|
81
|
+
_iterator.f();
|
|
82
|
+
return _context.finish(22);
|
|
83
|
+
case 25:
|
|
84
|
+
case "end":
|
|
85
|
+
return _context.stop();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, _marked, null, [[1, 19, 22, 25]]);
|
|
89
|
+
}
|
|
90
|
+
function readAllSourceFiles() {
|
|
91
|
+
var files = [];
|
|
92
|
+
var _iterator2 = _createForOfIteratorHelper(walk(V2_ROOT)),
|
|
93
|
+
_step2;
|
|
94
|
+
try {
|
|
95
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
96
|
+
var file = _step2.value;
|
|
97
|
+
files.push({
|
|
98
|
+
path: file,
|
|
99
|
+
content: fs.readFileSync(file, "utf8")
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
} catch (err) {
|
|
103
|
+
_iterator2.e(err);
|
|
104
|
+
} finally {
|
|
105
|
+
_iterator2.f();
|
|
106
|
+
}
|
|
107
|
+
return files;
|
|
108
|
+
}
|
|
109
|
+
function findOffenders(files, predicate) {
|
|
110
|
+
return files.filter(function (f) {
|
|
111
|
+
return predicate(f.content);
|
|
112
|
+
}).map(function (f) {
|
|
113
|
+
return path.relative(V2_ROOT, f.path);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
describe("Banned patterns in src/lib/v2/ (regression guard)", function () {
|
|
117
|
+
var files;
|
|
118
|
+
beforeAll(function () {
|
|
119
|
+
files = readAllSourceFiles();
|
|
120
|
+
// Sanity check — make sure the walker actually found source.
|
|
121
|
+
// A misconfigured path would silently make every test pass with
|
|
122
|
+
// an empty input set; this prevents that false-positive.
|
|
123
|
+
expect(files.length).toBeGreaterThan(20);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* --fw-black ghost token
|
|
128
|
+
* History: Batch 1 removed fontWeight.black from the typography
|
|
129
|
+
* tokens; Batch 2 dropped the matching `--fw-black` line from the
|
|
130
|
+
* cssVariables emitter. Two regression sites detected later
|
|
131
|
+
* (KPICard in Batch 6, FormSection in Batch 7) — both silently
|
|
132
|
+
* lost their bold weight at runtime. The CSS variable was
|
|
133
|
+
* referenced but resolved to undefined.
|
|
134
|
+
*
|
|
135
|
+
* ⚠ THE SCAN IS RAW AND COMMENT-BLIND. DO NOT "FIX" THAT.
|
|
136
|
+
*
|
|
137
|
+
* `findOffenders` matches the banned literal anywhere in the file, including
|
|
138
|
+
* inside comments. That is deliberate: a guard that parses code can be fooled
|
|
139
|
+
* by anything its parser mishandles, whereas a text scan cannot. The cost is
|
|
140
|
+
* that DOCUMENTING the banned token — even to record its removal — trips the
|
|
141
|
+
* rule.
|
|
142
|
+
*
|
|
143
|
+
* That is exactly what happened during the procuration-portnet-fe audit: both
|
|
144
|
+
* `--fw-black` tests failed, and the "offenders" turned out to be explanatory
|
|
145
|
+
* comments in `KPICard.tsx` and `theme/cssVariables.ts` describing the very
|
|
146
|
+
* fix this rule enforces. The code was correct; both files already used
|
|
147
|
+
* `var(--fw-bold)`. The comments were reworded to refer to the token
|
|
148
|
+
* descriptively instead.
|
|
149
|
+
*
|
|
150
|
+
* So: if this fails, read the offending lines BEFORE assuming a regression.
|
|
151
|
+
* The correct remedy is to reword the prose, never to add comment-stripping
|
|
152
|
+
* here — that would weaken every rule in this file to fix a documentation
|
|
153
|
+
* nit.
|
|
154
|
+
*
|
|
155
|
+
* `__tests__` is excluded from `walk`, which is why this docstring may name
|
|
156
|
+
* the token freely.
|
|
157
|
+
*/
|
|
158
|
+
test("no `--fw-black` references anywhere in src/lib/v2/", function () {
|
|
159
|
+
var offenders = findOffenders(files, function (c) {
|
|
160
|
+
return c.includes("--fw-black");
|
|
161
|
+
});
|
|
162
|
+
expect(offenders).toEqual([]);
|
|
163
|
+
});
|
|
164
|
+
test("no `var(--fw-black)` consumption (paranoid duplicate of the above)", function () {
|
|
165
|
+
var offenders = findOffenders(files, function (c) {
|
|
166
|
+
return c.includes("var(--fw-black)");
|
|
167
|
+
});
|
|
168
|
+
expect(offenders).toEqual([]);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* fontWeight: 650
|
|
173
|
+
* History: Banned by Batch 1 typography refactor — 650 is a
|
|
174
|
+
* non-standard CSS weight not supported by non-variable fallback
|
|
175
|
+
* fonts. Re-introduced twice in Batch 6 (Stepper HStepper +
|
|
176
|
+
* FilterTab). Each time it took a careful read to spot, since
|
|
177
|
+
* 650 looks "close enough" to semibold (600).
|
|
178
|
+
*/
|
|
179
|
+
test("no `fontWeight: 650` literal in component sx / inline style", function () {
|
|
180
|
+
// Match `fontWeight: 650` and `fontWeight:650` (with or without space).
|
|
181
|
+
// Word boundary on the right so we don't false-match 6500.
|
|
182
|
+
var re = /fontWeight\s*:\s*650\b/;
|
|
183
|
+
var offenders = findOffenders(files, function (c) {
|
|
184
|
+
return re.test(c);
|
|
185
|
+
});
|
|
186
|
+
expect(offenders).toEqual([]);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Plain CSS form `font-weight: 650`
|
|
191
|
+
* Same rationale as above but for the kebab-case form used inside
|
|
192
|
+
* .css files (base.css and friends).
|
|
193
|
+
*/
|
|
194
|
+
test("no `font-weight: 650` in CSS files", function () {
|
|
195
|
+
var re = /font-weight\s*:\s*650\b/;
|
|
196
|
+
var offenders = findOffenders(files, function (c) {
|
|
197
|
+
return re.test(c);
|
|
198
|
+
});
|
|
199
|
+
expect(offenders).toEqual([]);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Hardcoded breakpoint — raw px-width @media query
|
|
204
|
+
* History: Batch 1 (mobile & responsive certification). The
|
|
205
|
+
* breakpoint scale is single-sourced in tokens/breakpoints and
|
|
206
|
+
* wired into BOTH the MUI theme (theme.breakpoints) and the `mq`
|
|
207
|
+
* string helpers. A raw `@media (min-width:600px)` (or any literal
|
|
208
|
+
* px width) bypasses that single source and silently re-introduces
|
|
209
|
+
* the MUI-default divergence (sm:600 / md:900 / lg:1200) the token
|
|
210
|
+
* wiring was added to eliminate.
|
|
211
|
+
*
|
|
212
|
+
* Token-derived queries are produced via mq.up()/down() as
|
|
213
|
+
* interpolated `${...}px` strings — no digit follows `width:`, so
|
|
214
|
+
* they never match. Feature queries (prefers-reduced-motion,
|
|
215
|
+
* pointer, print) carry no width literal and are unaffected.
|
|
216
|
+
*/
|
|
217
|
+
test("no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)", function () {
|
|
218
|
+
var re = /@media[^{]*\b(?:min|max)-width\s*:\s*\d/;
|
|
219
|
+
var offenders = findOffenders(files, function (c) {
|
|
220
|
+
return re.test(c);
|
|
221
|
+
});
|
|
222
|
+
expect(offenders).toEqual([]);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Hardcoded breakpoint — useMediaQuery() with a literal px string
|
|
227
|
+
* History: Batch 1. `useMediaQuery("(max-width: 600px)")` hardcodes a
|
|
228
|
+
* breakpoint outside the token scale. The sanctioned form passes a
|
|
229
|
+
* theme callback — `useMediaQuery(theme.breakpoints.down("sm"))` — so
|
|
230
|
+
* the query resolves against the wired token values. This rule flags
|
|
231
|
+
* only the string-literal form: the theme-callback form has no quote
|
|
232
|
+
* immediately after the opening paren and is unaffected.
|
|
233
|
+
*/
|
|
234
|
+
test("no useMediaQuery() with a literal px breakpoint string", function () {
|
|
235
|
+
var re = /useMediaQuery\(\s*["'`][^)]*\d+\s*px/;
|
|
236
|
+
var offenders = findOffenders(files, function (c) {
|
|
237
|
+
return re.test(c);
|
|
238
|
+
});
|
|
239
|
+
expect(offenders).toEqual([]);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Hardcoded px floor in a CSS-grid minmax() track
|
|
244
|
+
* History: Batch 2 (KVGrid + components/FormGrid) and Batch 9
|
|
245
|
+
* (patterns/FormGrid) — the mobile & responsive certification. An
|
|
246
|
+
* auto-fill grid written as `minmax(<N>px, 1fr)` uses the px value as
|
|
247
|
+
* a HARD track minimum: when that floor exceeds the available
|
|
248
|
+
* container width (a large N, or the grid nested inside a narrow
|
|
249
|
+
* column / Drawer at the sm tier) the track cannot shrink and
|
|
250
|
+
* overflows its container, producing horizontal scroll on tablet /
|
|
251
|
+
* phone viewports (WCAG 1.4.10 Reflow).
|
|
252
|
+
*
|
|
253
|
+
* The sanctioned forms never match this rule:
|
|
254
|
+
* - `minmax(0, 1fr)` → 0 floor, no px
|
|
255
|
+
* - `minmax(min(${w}px, 100%), 1fr)` → starts with `min(` (not a
|
|
256
|
+
* digit) and the px floor is
|
|
257
|
+
* clamped to the container
|
|
258
|
+
* Only a LITERAL leading-digit px floor — `minmax(240px, …)` — trips
|
|
259
|
+
* the rule, which is exactly the un-clamped, un-tokenised regression
|
|
260
|
+
* the responsive audit forbids. Verified green against every
|
|
261
|
+
* display:grid site in the v2 surface (KVGrid, components/FormGrid,
|
|
262
|
+
* patterns/FormGrid, FormGrid.Item, KeyboardShortcutsHelp).
|
|
263
|
+
*/
|
|
264
|
+
test("no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))", function () {
|
|
265
|
+
var re = /minmax\(\s*\d+(?:\.\d+)?\s*px/i;
|
|
266
|
+
var offenders = findOffenders(files, function (c) {
|
|
267
|
+
return re.test(c);
|
|
268
|
+
});
|
|
269
|
+
expect(offenders).toEqual([]);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
//# sourceMappingURL=banned-patterns.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banned-patterns.test.js","names":["fs","_interopRequireWildcard","require","path","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_regeneratorRuntime","exports","Op","hasOwn","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_marked","walk","_createForOfIteratorHelper","o","allowArrayLike","it","Array","isArray","_unsupportedIterableToArray","F","s","n","e","_e","f","normalCompletion","didErr","step","_e2","minLen","_arrayLikeToArray","toString","from","test","arr","len","arr2","V2_ROOT","__dirname","dir","_iterator","_step","p","walk$","_context","readdirSync","withFileTypes","join","isDirectory","isFile","endsWith","t1","readAllSourceFiles","files","_iterator2","_step2","file","content","readFileSync","findOffenders","predicate","filter","map","relative","describe","beforeAll","expect","toBeGreaterThan","offenders","c","includes","toEqual","re"],"sources":["../../../src/lib/v2/__tests__/banned-patterns.test.ts"],"sourcesContent":["/* eslint-env node */\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\n\r\n/**\r\n * Static-analysis tests guarding against re-introduction of banned\r\n * patterns in src/lib/v2/. Pure filesystem scan; no React, no jsdom.\r\n *\r\n * Each banned pattern has a unique regression history documented in\r\n * the per-test comment so future readers know WHY the rule exists,\r\n * not just what it forbids.\r\n */\r\n\r\nconst V2_ROOT: string = path.resolve(__dirname, \"..\");\r\n\r\ninterface SourceFile {\r\n path: string;\r\n content: string;\r\n}\r\n\r\n/**\r\n * Recursively walk a directory, yielding paths of source files that\r\n * are eligible for scanning. Excludes nested __tests__ folders so\r\n * test fixtures referencing banned strings as test data don't trigger\r\n * the rule. Scans .js/.jsx/.ts/.tsx/.css (ambient .d.ts excluded — no\r\n * runtime style/breakpoint literals live there).\r\n */\r\nfunction* walk(dir: string): Generator<string> {\r\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\r\n const p = path.join(dir, entry.name);\r\n if (entry.isDirectory()) {\r\n if (entry.name === \"__tests__\" || entry.name === \"node_modules\") continue;\r\n yield* walk(p);\r\n } else if (\r\n entry.isFile() &&\r\n /\\.(?:jsx?|tsx?|css)$/.test(entry.name) &&\r\n !entry.name.endsWith(\".d.ts\")\r\n ) {\r\n yield p;\r\n }\r\n }\r\n}\r\n\r\nfunction readAllSourceFiles(): SourceFile[] {\r\n const files: SourceFile[] = [];\r\n for (const file of walk(V2_ROOT)) {\r\n files.push({ path: file, content: fs.readFileSync(file, \"utf8\") });\r\n }\r\n return files;\r\n}\r\n\r\nfunction findOffenders(\r\n files: SourceFile[],\r\n predicate: (content: string) => boolean\r\n): string[] {\r\n return files\r\n .filter((f) => predicate(f.content))\r\n .map((f) => path.relative(V2_ROOT, f.path));\r\n}\r\n\r\ndescribe(\"Banned patterns in src/lib/v2/ (regression guard)\", () => {\r\n let files: SourceFile[];\r\n\r\n beforeAll(() => {\r\n files = readAllSourceFiles();\r\n // Sanity check — make sure the walker actually found source.\r\n // A misconfigured path would silently make every test pass with\r\n // an empty input set; this prevents that false-positive.\r\n expect(files.length).toBeGreaterThan(20);\r\n });\r\n\r\n /**\r\n * --fw-black ghost token\r\n * History: Batch 1 removed fontWeight.black from the typography\r\n * tokens; Batch 2 dropped the matching `--fw-black` line from the\r\n * cssVariables emitter. Two regression sites detected later\r\n * (KPICard in Batch 6, FormSection in Batch 7) — both silently\r\n * lost their bold weight at runtime. The CSS variable was\r\n * referenced but resolved to undefined.\r\n *\r\n * ⚠ THE SCAN IS RAW AND COMMENT-BLIND. DO NOT \"FIX\" THAT.\r\n *\r\n * `findOffenders` matches the banned literal anywhere in the file, including\r\n * inside comments. That is deliberate: a guard that parses code can be fooled\r\n * by anything its parser mishandles, whereas a text scan cannot. The cost is\r\n * that DOCUMENTING the banned token — even to record its removal — trips the\r\n * rule.\r\n *\r\n * That is exactly what happened during the procuration-portnet-fe audit: both\r\n * `--fw-black` tests failed, and the \"offenders\" turned out to be explanatory\r\n * comments in `KPICard.tsx` and `theme/cssVariables.ts` describing the very\r\n * fix this rule enforces. The code was correct; both files already used\r\n * `var(--fw-bold)`. The comments were reworded to refer to the token\r\n * descriptively instead.\r\n *\r\n * So: if this fails, read the offending lines BEFORE assuming a regression.\r\n * The correct remedy is to reword the prose, never to add comment-stripping\r\n * here — that would weaken every rule in this file to fix a documentation\r\n * nit.\r\n *\r\n * `__tests__` is excluded from `walk`, which is why this docstring may name\r\n * the token freely.\r\n */\r\n test(\"no `--fw-black` references anywhere in src/lib/v2/\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"--fw-black\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n test(\"no `var(--fw-black)` consumption (paranoid duplicate of the above)\", () => {\r\n const offenders = findOffenders(files, (c) => c.includes(\"var(--fw-black)\"));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * fontWeight: 650\r\n * History: Banned by Batch 1 typography refactor — 650 is a\r\n * non-standard CSS weight not supported by non-variable fallback\r\n * fonts. Re-introduced twice in Batch 6 (Stepper HStepper +\r\n * FilterTab). Each time it took a careful read to spot, since\r\n * 650 looks \"close enough\" to semibold (600).\r\n */\r\n test(\"no `fontWeight: 650` literal in component sx / inline style\", () => {\r\n // Match `fontWeight: 650` and `fontWeight:650` (with or without space).\r\n // Word boundary on the right so we don't false-match 6500.\r\n const re = /fontWeight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Plain CSS form `font-weight: 650`\r\n * Same rationale as above but for the kebab-case form used inside\r\n * .css files (base.css and friends).\r\n */\r\n test(\"no `font-weight: 650` in CSS files\", () => {\r\n const re = /font-weight\\s*:\\s*650\\b/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — raw px-width @media query\r\n * History: Batch 1 (mobile & responsive certification). The\r\n * breakpoint scale is single-sourced in tokens/breakpoints and\r\n * wired into BOTH the MUI theme (theme.breakpoints) and the `mq`\r\n * string helpers. A raw `@media (min-width:600px)` (or any literal\r\n * px width) bypasses that single source and silently re-introduces\r\n * the MUI-default divergence (sm:600 / md:900 / lg:1200) the token\r\n * wiring was added to eliminate.\r\n *\r\n * Token-derived queries are produced via mq.up()/down() as\r\n * interpolated `${...}px` strings — no digit follows `width:`, so\r\n * they never match. Feature queries (prefers-reduced-motion,\r\n * pointer, print) carry no width literal and are unaffected.\r\n */\r\n test(\"no hardcoded px-width @media query (use mq.up/down or theme.breakpoints)\", () => {\r\n const re = /@media[^{]*\\b(?:min|max)-width\\s*:\\s*\\d/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded breakpoint — useMediaQuery() with a literal px string\r\n * History: Batch 1. `useMediaQuery(\"(max-width: 600px)\")` hardcodes a\r\n * breakpoint outside the token scale. The sanctioned form passes a\r\n * theme callback — `useMediaQuery(theme.breakpoints.down(\"sm\"))` — so\r\n * the query resolves against the wired token values. This rule flags\r\n * only the string-literal form: the theme-callback form has no quote\r\n * immediately after the opening paren and is unaffected.\r\n */\r\n test(\"no useMediaQuery() with a literal px breakpoint string\", () => {\r\n const re = /useMediaQuery\\(\\s*[\"'`][^)]*\\d+\\s*px/;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n\r\n /**\r\n * Hardcoded px floor in a CSS-grid minmax() track\r\n * History: Batch 2 (KVGrid + components/FormGrid) and Batch 9\r\n * (patterns/FormGrid) — the mobile & responsive certification. An\r\n * auto-fill grid written as `minmax(<N>px, 1fr)` uses the px value as\r\n * a HARD track minimum: when that floor exceeds the available\r\n * container width (a large N, or the grid nested inside a narrow\r\n * column / Drawer at the sm tier) the track cannot shrink and\r\n * overflows its container, producing horizontal scroll on tablet /\r\n * phone viewports (WCAG 1.4.10 Reflow).\r\n *\r\n * The sanctioned forms never match this rule:\r\n * - `minmax(0, 1fr)` → 0 floor, no px\r\n * - `minmax(min(${w}px, 100%), 1fr)` → starts with `min(` (not a\r\n * digit) and the px floor is\r\n * clamped to the container\r\n * Only a LITERAL leading-digit px floor — `minmax(240px, …)` — trips\r\n * the rule, which is exactly the un-clamped, un-tokenised regression\r\n * the responsive audit forbids. Verified green against every\r\n * display:grid site in the v2 surface (KVGrid, components/FormGrid,\r\n * patterns/FormGrid, FormGrid.Item, KeyboardShortcutsHelp).\r\n */\r\n test(\"no hardcoded px floor in a CSS-grid minmax() track (clamp with min(…,100%))\", () => {\r\n const re = /minmax\\(\\s*\\d+(?:\\.\\d+)?\\s*px/i;\r\n const offenders = findOffenders(files, (c) => re.test(c));\r\n expect(offenders).toEqual([]);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _contrast = require("../utils/contrast");
|
|
4
|
+
var _tokens = require("../tokens");
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) { ; } } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
/**
|
|
12
|
+
* Token-palette contrast certification (Charter §05.1 / WCAG 2.1 AA).
|
|
13
|
+
*
|
|
14
|
+
* WHY THIS FILE EXISTS
|
|
15
|
+
* --------------------
|
|
16
|
+
* R-C.1 / R-C.2 / R-C.3 are MUST rules, and until now nothing verified them.
|
|
17
|
+
* `utils/contrast.ts` shipped a correct WCAG ratio implementation and had no
|
|
18
|
+
* test asserting the palette it exists to check; the ratios in `colors.ts` were
|
|
19
|
+
* hand-written COMMENTS, unenforced — exactly the class of claim that drifts
|
|
20
|
+
* silently when a hue is nudged.
|
|
21
|
+
*
|
|
22
|
+
* Contrast is one of the few a11y rules that is fully computable without a
|
|
23
|
+
* browser, so it belongs in CI rather than in a manual audit pass.
|
|
24
|
+
*
|
|
25
|
+
* Found by writing it: `fgSubtle` on `bgSubtle` is ~4.32:1 — BELOW AA. See the
|
|
26
|
+
* documented-failure block at the bottom; that is a real finding, not a test
|
|
27
|
+
* artefact.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/** Every light-mode surface that body text can land on. */
|
|
31
|
+
var LIGHT_SURFACES = [["surface", _tokens.surface.surface], ["bgElev", _tokens.surface.bgElev], ["bg", _tokens.surface.bg], ["bgSubtle", _tokens.surface.bgSubtle]];
|
|
32
|
+
describe("Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)", function () {
|
|
33
|
+
describe("ink on light surfaces — normal text ≥ 4.5:1", function () {
|
|
34
|
+
var _loop = function _loop() {
|
|
35
|
+
var _LIGHT_SURFACES$_i = _slicedToArray(_LIGHT_SURFACES[_i], 2),
|
|
36
|
+
name = _LIGHT_SURFACES$_i[0],
|
|
37
|
+
bg = _LIGHT_SURFACES$_i[1];
|
|
38
|
+
test("fg on ".concat(name), function () {
|
|
39
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fg, bg), "normal")).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
test("fgMuted on ".concat(name), function () {
|
|
42
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fgMuted, bg), "normal")).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
for (var _i = 0, _LIGHT_SURFACES = LIGHT_SURFACES; _i < _LIGHT_SURFACES.length; _i++) {
|
|
46
|
+
_loop();
|
|
47
|
+
}
|
|
48
|
+
test("fgInverse on the darkest dark surface", function () {
|
|
49
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fgInverse, _tokens.dark.bg), "normal")).toBe(true);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("semantic fg — readable on white AND on its own soft fill", function () {
|
|
53
|
+
var pairs = [["success", _tokens.semantic.successFg, _tokens.semantic.successSoft], ["warning", _tokens.semantic.warningFg, _tokens.semantic.warningSoft], ["danger", _tokens.semantic.dangerFg, _tokens.semantic.dangerSoft], ["info", _tokens.semantic.infoFg, _tokens.semantic.infoSoft]];
|
|
54
|
+
var _loop2 = function _loop2() {
|
|
55
|
+
var _pairs$_i = _slicedToArray(_pairs[_i2], 3),
|
|
56
|
+
name = _pairs$_i[0],
|
|
57
|
+
fg = _pairs$_i[1],
|
|
58
|
+
soft = _pairs$_i[2];
|
|
59
|
+
test("".concat(name, "Fg on white"), function () {
|
|
60
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, "#FFFFFF"), "normal")).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
test("".concat(name, "Fg on ").concat(name, "Soft"), function () {
|
|
63
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, soft), "normal")).toBe(true);
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
for (var _i2 = 0, _pairs = pairs; _i2 < _pairs.length; _i2++) {
|
|
67
|
+
_loop2();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The Charter's promise in §02.1: "Combinaison background -soft +
|
|
73
|
+
* foreground -fg = AA garanti." This is that promise, enforced.
|
|
74
|
+
*/
|
|
75
|
+
describe("status palette — every -fg on its own -soft is AA (§02.1)", function () {
|
|
76
|
+
var _loop3 = function _loop3() {
|
|
77
|
+
var key = _arr2[_i3];
|
|
78
|
+
test("status.".concat(key), function () {
|
|
79
|
+
var _status$key = _tokens.status[key],
|
|
80
|
+
soft = _status$key.soft,
|
|
81
|
+
fg = _status$key.fg;
|
|
82
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(fg, soft), "normal")).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
test("status.".concat(key, " fg on white"), function () {
|
|
85
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.status[key].fg, "#FFFFFF"), "normal")).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
for (var _i3 = 0, _arr2 = Object.keys(_tokens.status); _i3 < _arr2.length; _i3++) {
|
|
89
|
+
_loop3();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
describe("non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)", function () {
|
|
93
|
+
var saturated = [["success", _tokens.semantic.success], ["warning", _tokens.semantic.warning], ["danger", _tokens.semantic.danger], ["info", _tokens.semantic.info]];
|
|
94
|
+
var _loop4 = function _loop4() {
|
|
95
|
+
var _saturated$_i = _slicedToArray(_saturated[_i4], 2),
|
|
96
|
+
name = _saturated$_i[0],
|
|
97
|
+
colour = _saturated$_i[1];
|
|
98
|
+
test("".concat(name, " (icon / border grade) on white"), function () {
|
|
99
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(colour, "#FFFFFF"), "ui")).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
for (var _i4 = 0, _saturated = saturated; _i4 < _saturated.length; _i4++) {
|
|
103
|
+
_loop4();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
describe("brand", function () {
|
|
107
|
+
test("accent on white is AA for normal text", function () {
|
|
108
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accent, "#FFFFFF"), "normal")).toBe(true);
|
|
109
|
+
});
|
|
110
|
+
test("accentFg on accent — the primary-button pair", function () {
|
|
111
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accentFg, _tokens.brand.accent), "normal")).toBe(true);
|
|
112
|
+
});
|
|
113
|
+
test("accentHover keeps AA against accentFg (pressed state stays readable)", function () {
|
|
114
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.brand.accentFg, _tokens.brand.accentHover), "normal")).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("dark mode", function () {
|
|
118
|
+
test("dark.fg on dark.surface", function () {
|
|
119
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.fg, _tokens.dark.surface), "normal")).toBe(true);
|
|
120
|
+
});
|
|
121
|
+
test("dark.fgMuted on dark.surface", function () {
|
|
122
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.fgMuted, _tokens.dark.surface), "normal")).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
var _loop5 = function _loop5() {
|
|
125
|
+
var key = _arr3[_i5];
|
|
126
|
+
test("dark status.".concat(key, ".fg on dark.surface"), function () {
|
|
127
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.dark.status[key].fg, _tokens.dark.surface), "normal")).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
for (var _i5 = 0, _arr3 = Object.keys(_tokens.dark.status); _i5 < _arr3.length; _i5++) {
|
|
131
|
+
_loop5();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
/* ══════════════════════════════════════════════════════════════════
|
|
136
|
+
* DOCUMENTED FAILURES — asserted at their MEASURED value, not at the
|
|
137
|
+
* threshold, so the suite stays green while the breach stays visible and
|
|
138
|
+
* any drift shows up as a diff. Both need a palette decision, not a
|
|
139
|
+
* test change.
|
|
140
|
+
* ══════════════════════════════════════════════════════════════════ */
|
|
141
|
+
describe("KNOWN AA FAILURES (documented, pending decision)", function () {
|
|
142
|
+
/**
|
|
143
|
+
* A9-01 — `fgSubtle` on `bgSubtle` ≈ 4.32:1, below the 4.5 floor.
|
|
144
|
+
*
|
|
145
|
+
* `colors.ts` documents fgSubtle as "AA · 4.81:1 on white — incidental
|
|
146
|
+
* text only (WCAG 1.4.6)". On white that holds. On `bgSubtle` it does not,
|
|
147
|
+
* and the exemption does not rescue it, because fgSubtle is NOT used only
|
|
148
|
+
* for incidental text — it colours KV eyebrow labels, section captions and
|
|
149
|
+
* hero stat labels, all of which name the value beside them.
|
|
150
|
+
*
|
|
151
|
+
* LIVE BREACH: both preview drawers put `--fg-subtle` labels on a
|
|
152
|
+
* `--bg-subtle` hero panel (dfd `GestionDFDPreviewDrawer` HERO_BOX_STYLE +
|
|
153
|
+
* HERO_LABEL_STYLE, ti `GestionTIPreviewDrawer` HERO_STAT_LABEL_STYLE), at
|
|
154
|
+
* `--text-xs` (12px) — too small to qualify as large text, so the 4.5
|
|
155
|
+
* floor applies.
|
|
156
|
+
*
|
|
157
|
+
* FIX OPTIONS: darken fgSubtle (affects the muted/subtle hierarchy
|
|
158
|
+
* fleet-wide), or switch those labels to `--fg-muted` (AAA, 7.5:1 on
|
|
159
|
+
* bgSubtle) which is what every other label surface already uses.
|
|
160
|
+
*/
|
|
161
|
+
test("fgSubtle on bgSubtle is BELOW AA — ~4.32:1", function () {
|
|
162
|
+
var ratio = (0, _contrast.contrastRatio)(_tokens.ink.fgSubtle, _tokens.surface.bgSubtle);
|
|
163
|
+
expect(ratio).not.toBeNull();
|
|
164
|
+
expect(ratio).toBeLessThan(_contrast.WCAG_AA_NORMAL);
|
|
165
|
+
expect(ratio).toBeGreaterThan(4.2);
|
|
166
|
+
// It DOES pass on white — the failure is surface-specific.
|
|
167
|
+
expect((0, _contrast.passesContrast)((0, _contrast.contrastRatio)(_tokens.ink.fgSubtle, "#FFFFFF"), "normal")).toBe(true);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* A9-02 — `borderStrong` ≈ 2.87:1 on white. BELOW the 3:1 non-text floor.
|
|
172
|
+
*
|
|
173
|
+
* ⚠️ The token's own comment in `colors.ts` reads:
|
|
174
|
+
* borderStrong: "#9099AA", // WCAG 1.4.11 · ≥ 3:1 against white
|
|
175
|
+
* That claim is FALSE. This is precisely the drift this file exists to
|
|
176
|
+
* catch — an unenforced hand-written ratio that nobody re-derived.
|
|
177
|
+
*
|
|
178
|
+
* IMPACT depends on usage. `--border-strong` currently colours the
|
|
179
|
+
* scrollbar thumb (`base.css`) and the `kbd` bottom edge in
|
|
180
|
+
* KeyboardShortcutsHelp. If it is ever used for an INPUT border or any
|
|
181
|
+
* other control boundary, 1.4.11 applies and the breach is live — audit
|
|
182
|
+
* usage before deciding severity.
|
|
183
|
+
*
|
|
184
|
+
* FIX: darken to relative luminance ≤ 0.30 (currently 0.316). Roughly
|
|
185
|
+
* #868FA3 / #8A92A5; change the token and this assertion flips to the
|
|
186
|
+
* `passesContrast(..., "ui")` form.
|
|
187
|
+
*/
|
|
188
|
+
test("borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)", function () {
|
|
189
|
+
var ratio = (0, _contrast.contrastRatio)(_tokens.border.borderStrong, "#FFFFFF");
|
|
190
|
+
expect(ratio).not.toBeNull();
|
|
191
|
+
expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
|
|
192
|
+
expect(ratio).toBeGreaterThan(2.8);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* A9-03 — `dark.borderStrong` ≈ 2.28:1 on `dark.surface`. Worse than the
|
|
197
|
+
* light-mode equivalent, and the same 1.4.11 floor applies in dark mode.
|
|
198
|
+
*
|
|
199
|
+
* FIX: lighten to relative luminance ≥ 0.119 (currently 0.078) — roughly
|
|
200
|
+
* #5C6478 or lighter. Note dark mode is currently UNREACHABLE in both
|
|
201
|
+
* consuming modules (neither sets `[data-theme="dark"]` on <html>), which
|
|
202
|
+
* is why nobody has seen it — see the RGESN R-9.5 note in the handover.
|
|
203
|
+
*/
|
|
204
|
+
test("dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1", function () {
|
|
205
|
+
var ratio = (0, _contrast.contrastRatio)(_tokens.dark.borderStrong, _tokens.dark.surface);
|
|
206
|
+
expect(ratio).not.toBeNull();
|
|
207
|
+
expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
|
|
208
|
+
expect(ratio).toBeGreaterThan(2.2);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Already flagged in colors.ts itself: secondaryFg (#FFFFFF) on
|
|
213
|
+
* secondary (#4FB8CF) ≈ 1.96:1. The token comment restricts it to
|
|
214
|
+
* chip/badge surfaces and non-text accent fills. Asserted here so the
|
|
215
|
+
* restriction is machine-checked rather than comment-only: it fails BOTH
|
|
216
|
+
* the text floor and the 3:1 non-text floor.
|
|
217
|
+
*/
|
|
218
|
+
test("brandSecondary text pair is BELOW AA and below 3:1 — fills only", function () {
|
|
219
|
+
var ratio = (0, _contrast.contrastRatio)(_tokens.brandSecondary.secondaryFg, _tokens.brandSecondary.secondary);
|
|
220
|
+
expect(ratio).not.toBeNull();
|
|
221
|
+
expect(ratio).toBeLessThan(_contrast.WCAG_AA_UI_NON_TEXT);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=contrast-palette.test.js.map
|