@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 @@
|
|
|
1
|
+
{"version":3,"file":"contrast-palette.test.js","names":["_contrast","require","_tokens","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","len","length","arr2","_i","Symbol","iterator","_s","_e","_x","_r","_arr","_n","_d","next","done","push","value","err","isArray","LIGHT_SURFACES","surface","bgElev","bg","bgSubtle","describe","_loop","_LIGHT_SURFACES$_i","_LIGHT_SURFACES","concat","expect","passesContrast","contrastRatio","ink","fg","toBe","fgMuted","fgInverse","dark","pairs","semantic","successFg","successSoft","warningFg","warningSoft","dangerFg","dangerSoft","infoFg","infoSoft","_loop2","_pairs$_i","_pairs","_i2","soft","_loop3","key","_arr2","_i3","_status$key","status","keys","saturated","success","warning","danger","info","_loop4","_saturated$_i","_saturated","_i4","colour","brand","accent","accentFg","accentHover","_loop5","_arr3","_i5","ratio","fgSubtle","not","toBeNull","toBeLessThan","WCAG_AA_NORMAL","toBeGreaterThan","border","borderStrong","WCAG_AA_UI_NON_TEXT","brandSecondary","secondaryFg","secondary"],"sources":["../../../src/lib/v2/__tests__/contrast-palette.test.ts"],"sourcesContent":["import {\r\n contrastRatio,\r\n passesContrast,\r\n WCAG_AA_NORMAL,\r\n WCAG_AA_UI_NON_TEXT,\r\n} from \"../utils/contrast\";\r\nimport { ink, surface, border, semantic, status, brand, brandSecondary, dark } from \"../tokens\";\r\n\r\n/**\r\n * Token-palette contrast certification (Charter §05.1 / WCAG 2.1 AA).\r\n *\r\n * WHY THIS FILE EXISTS\r\n * --------------------\r\n * R-C.1 / R-C.2 / R-C.3 are MUST rules, and until now nothing verified them.\r\n * `utils/contrast.ts` shipped a correct WCAG ratio implementation and had no\r\n * test asserting the palette it exists to check; the ratios in `colors.ts` were\r\n * hand-written COMMENTS, unenforced — exactly the class of claim that drifts\r\n * silently when a hue is nudged.\r\n *\r\n * Contrast is one of the few a11y rules that is fully computable without a\r\n * browser, so it belongs in CI rather than in a manual audit pass.\r\n *\r\n * Found by writing it: `fgSubtle` on `bgSubtle` is ~4.32:1 — BELOW AA. See the\r\n * documented-failure block at the bottom; that is a real finding, not a test\r\n * artefact.\r\n */\r\n\r\n/** Every light-mode surface that body text can land on. */\r\nconst LIGHT_SURFACES: Array<[string, string]> = [\r\n [\"surface\", surface.surface],\r\n [\"bgElev\", surface.bgElev],\r\n [\"bg\", surface.bg],\r\n [\"bgSubtle\", surface.bgSubtle],\r\n];\r\n\r\ndescribe(\"Token palette — WCAG AA contrast (R-C.1 / R-C.2 / R-C.3)\", () => {\r\n describe(\"ink on light surfaces — normal text ≥ 4.5:1\", () => {\r\n for (const [name, bg] of LIGHT_SURFACES) {\r\n test(`fg on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fg, bg), \"normal\")).toBe(true);\r\n });\r\n test(`fgMuted on ${name}`, () => {\r\n expect(passesContrast(contrastRatio(ink.fgMuted, bg), \"normal\")).toBe(true);\r\n });\r\n }\r\n\r\n test(\"fgInverse on the darkest dark surface\", () => {\r\n expect(passesContrast(contrastRatio(ink.fgInverse, dark.bg), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"semantic fg — readable on white AND on its own soft fill\", () => {\r\n const pairs: Array<[string, string, string]> = [\r\n [\"success\", semantic.successFg, semantic.successSoft],\r\n [\"warning\", semantic.warningFg, semantic.warningSoft],\r\n [\"danger\", semantic.dangerFg, semantic.dangerSoft],\r\n [\"info\", semantic.infoFg, semantic.infoSoft],\r\n ];\r\n for (const [name, fg, soft] of pairs) {\r\n test(`${name}Fg on white`, () => {\r\n expect(passesContrast(contrastRatio(fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(`${name}Fg on ${name}Soft`, () => {\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /**\r\n * The Charter's promise in §02.1: \"Combinaison background -soft +\r\n * foreground -fg = AA garanti.\" This is that promise, enforced.\r\n */\r\n describe(\"status palette — every -fg on its own -soft is AA (§02.1)\", () => {\r\n for (const key of Object.keys(status) as Array<keyof typeof status>) {\r\n test(`status.${key}`, () => {\r\n const { soft, fg } = status[key];\r\n expect(passesContrast(contrastRatio(fg, soft), \"normal\")).toBe(true);\r\n });\r\n test(`status.${key} fg on white`, () => {\r\n expect(passesContrast(contrastRatio(status[key].fg, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"non-text UI ≥ 3:1 (WCAG 1.4.11 / R-C.3)\", () => {\r\n const saturated: Array<[string, string]> = [\r\n [\"success\", semantic.success],\r\n [\"warning\", semantic.warning],\r\n [\"danger\", semantic.danger],\r\n [\"info\", semantic.info],\r\n ];\r\n for (const [name, colour] of saturated) {\r\n test(`${name} (icon / border grade) on white`, () => {\r\n expect(passesContrast(contrastRatio(colour, \"#FFFFFF\"), \"ui\")).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n describe(\"brand\", () => {\r\n test(\"accent on white is AA for normal text\", () => {\r\n expect(passesContrast(contrastRatio(brand.accent, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n test(\"accentFg on accent — the primary-button pair\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accent), \"normal\")).toBe(true);\r\n });\r\n test(\"accentHover keeps AA against accentFg (pressed state stays readable)\", () => {\r\n expect(passesContrast(contrastRatio(brand.accentFg, brand.accentHover), \"normal\")).toBe(true);\r\n });\r\n });\r\n\r\n describe(\"dark mode\", () => {\r\n test(\"dark.fg on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fg, dark.surface), \"normal\")).toBe(true);\r\n });\r\n test(\"dark.fgMuted on dark.surface\", () => {\r\n expect(passesContrast(contrastRatio(dark.fgMuted, dark.surface), \"normal\")).toBe(true);\r\n });\r\n for (const key of Object.keys(dark.status) as Array<keyof typeof dark.status>) {\r\n test(`dark status.${key}.fg on dark.surface`, () => {\r\n expect(\r\n passesContrast(contrastRatio(dark.status[key].fg, dark.surface), \"normal\")\r\n ).toBe(true);\r\n });\r\n }\r\n });\r\n\r\n /* ══════════════════════════════════════════════════════════════════\r\n * DOCUMENTED FAILURES — asserted at their MEASURED value, not at the\r\n * threshold, so the suite stays green while the breach stays visible and\r\n * any drift shows up as a diff. Both need a palette decision, not a\r\n * test change.\r\n * ══════════════════════════════════════════════════════════════════ */\r\n describe(\"KNOWN AA FAILURES (documented, pending decision)\", () => {\r\n /**\r\n * A9-01 — `fgSubtle` on `bgSubtle` ≈ 4.32:1, below the 4.5 floor.\r\n *\r\n * `colors.ts` documents fgSubtle as \"AA · 4.81:1 on white — incidental\r\n * text only (WCAG 1.4.6)\". On white that holds. On `bgSubtle` it does not,\r\n * and the exemption does not rescue it, because fgSubtle is NOT used only\r\n * for incidental text — it colours KV eyebrow labels, section captions and\r\n * hero stat labels, all of which name the value beside them.\r\n *\r\n * LIVE BREACH: both preview drawers put `--fg-subtle` labels on a\r\n * `--bg-subtle` hero panel (dfd `GestionDFDPreviewDrawer` HERO_BOX_STYLE +\r\n * HERO_LABEL_STYLE, ti `GestionTIPreviewDrawer` HERO_STAT_LABEL_STYLE), at\r\n * `--text-xs` (12px) — too small to qualify as large text, so the 4.5\r\n * floor applies.\r\n *\r\n * FIX OPTIONS: darken fgSubtle (affects the muted/subtle hierarchy\r\n * fleet-wide), or switch those labels to `--fg-muted` (AAA, 7.5:1 on\r\n * bgSubtle) which is what every other label surface already uses.\r\n */\r\n test(\"fgSubtle on bgSubtle is BELOW AA — ~4.32:1\", () => {\r\n const ratio = contrastRatio(ink.fgSubtle, surface.bgSubtle);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_NORMAL);\r\n expect(ratio as number).toBeGreaterThan(4.2);\r\n // It DOES pass on white — the failure is surface-specific.\r\n expect(passesContrast(contrastRatio(ink.fgSubtle, \"#FFFFFF\"), \"normal\")).toBe(true);\r\n });\r\n\r\n /**\r\n * A9-02 — `borderStrong` ≈ 2.87:1 on white. BELOW the 3:1 non-text floor.\r\n *\r\n * ⚠️ The token's own comment in `colors.ts` reads:\r\n * borderStrong: \"#9099AA\", // WCAG 1.4.11 · ≥ 3:1 against white\r\n * That claim is FALSE. This is precisely the drift this file exists to\r\n * catch — an unenforced hand-written ratio that nobody re-derived.\r\n *\r\n * IMPACT depends on usage. `--border-strong` currently colours the\r\n * scrollbar thumb (`base.css`) and the `kbd` bottom edge in\r\n * KeyboardShortcutsHelp. If it is ever used for an INPUT border or any\r\n * other control boundary, 1.4.11 applies and the breach is live — audit\r\n * usage before deciding severity.\r\n *\r\n * FIX: darken to relative luminance ≤ 0.30 (currently 0.316). Roughly\r\n * #868FA3 / #8A92A5; change the token and this assertion flips to the\r\n * `passesContrast(..., \"ui\")` form.\r\n */\r\n test(\"borderStrong on white is BELOW 3:1 — ~2.87:1 (comment in colors.ts is wrong)\", () => {\r\n const ratio = contrastRatio(border.borderStrong, \"#FFFFFF\");\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.8);\r\n });\r\n\r\n /**\r\n * A9-03 — `dark.borderStrong` ≈ 2.28:1 on `dark.surface`. Worse than the\r\n * light-mode equivalent, and the same 1.4.11 floor applies in dark mode.\r\n *\r\n * FIX: lighten to relative luminance ≥ 0.119 (currently 0.078) — roughly\r\n * #5C6478 or lighter. Note dark mode is currently UNREACHABLE in both\r\n * consuming modules (neither sets `[data-theme=\"dark\"]` on <html>), which\r\n * is why nobody has seen it — see the RGESN R-9.5 note in the handover.\r\n */\r\n test(\"dark.borderStrong on dark.surface is BELOW 3:1 — ~2.28:1\", () => {\r\n const ratio = contrastRatio(dark.borderStrong, dark.surface);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n expect(ratio as number).toBeGreaterThan(2.2);\r\n });\r\n\r\n /**\r\n * Already flagged in colors.ts itself: secondaryFg (#FFFFFF) on\r\n * secondary (#4FB8CF) ≈ 1.96:1. The token comment restricts it to\r\n * chip/badge surfaces and non-text accent fills. Asserted here so the\r\n * restriction is machine-checked rather than comment-only: it fails BOTH\r\n * the text floor and the 3:1 non-text floor.\r\n */\r\n test(\"brandSecondary text pair is BELOW AA and below 3:1 — fills only\", () => {\r\n const ratio = contrastRatio(brandSecondary.secondaryFg, brandSecondary.secondary);\r\n expect(ratio).not.toBeNull();\r\n expect(ratio as number).toBeLessThan(WCAG_AA_UI_NON_TEXT);\r\n });\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _cssVariables = require("../theme/cssVariables");
|
|
4
|
+
/**
|
|
5
|
+
* Regression coverage for the v2 CSS variable emission.
|
|
6
|
+
*
|
|
7
|
+
* These invariants are established by Batch 1 (token refactor) and
|
|
8
|
+
* Batch 2 (cssVariables refactor). A failure here means a future
|
|
9
|
+
* change has either:
|
|
10
|
+
* - re-introduced a deleted token (e.g. --fw-black),
|
|
11
|
+
* - emitted an undefined value (the silent bug class that broke
|
|
12
|
+
* KPICard and FormSection visually before Batch 6+7 caught it),
|
|
13
|
+
* - dropped a critical variable downstream consumers rely on, or
|
|
14
|
+
* - leaked an alias name (--md / --lg) into the global namespace.
|
|
15
|
+
*/
|
|
16
|
+
describe("getCssVariables() — Batch 1 + 2 invariants", function () {
|
|
17
|
+
var css;
|
|
18
|
+
beforeAll(function () {
|
|
19
|
+
css = (0, _cssVariables.getCssVariables)();
|
|
20
|
+
});
|
|
21
|
+
test("emits a :root block", function () {
|
|
22
|
+
expect(css).toMatch(/:root\s*\{/);
|
|
23
|
+
});
|
|
24
|
+
test("never emits ': undefined' values (the ghost-token bug class)", function () {
|
|
25
|
+
// Match `--anything: undefined;` with optional whitespace.
|
|
26
|
+
// This catches the regression that produced --fw-black resolving
|
|
27
|
+
// to undefined in :root after Batch 1 removed fontWeight.black.
|
|
28
|
+
var matches = css.match(/--[\w-]+\s*:\s*undefined\b/g);
|
|
29
|
+
expect(matches).toBeNull();
|
|
30
|
+
});
|
|
31
|
+
test("does NOT emit --fw-black (Batch 1 removed fontWeight.black)", function () {
|
|
32
|
+
expect(css).not.toMatch(/--fw-black/);
|
|
33
|
+
});
|
|
34
|
+
test("emits all critical brand + ink + surface variables", function () {
|
|
35
|
+
var required = ["--accent", "--accent-soft", "--accent-hover", "--accent-fg", "--fg", "--fg-muted", "--fg-subtle", "--fg-inverse", "--bg", "--bg-elev", "--bg-subtle", "--bg-hover", "--surface", "--border", "--border-strong"];
|
|
36
|
+
for (var _i = 0, _required = required; _i < _required.length; _i++) {
|
|
37
|
+
var v = _required[_i];
|
|
38
|
+
expect(css).toContain("".concat(v, ":"));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
test("emits all semantic + status palette variables", function () {
|
|
42
|
+
var required = ["--success", "--success-fg", "--success-soft", "--danger", "--danger-fg", "--danger-soft", "--warning", "--warning-fg", "--warning-soft", "--info", "--info-fg", "--info-soft", "--status-new-soft", "--status-new-fg", "--status-sent-soft", "--status-sent-fg", "--status-pending-soft", "--status-pending-fg", "--status-approved-soft", "--status-approved-fg", "--status-rejected-soft", "--status-rejected-fg", "--status-neutral-soft", "--status-neutral-fg"];
|
|
43
|
+
for (var _i2 = 0, _required2 = required; _i2 < _required2.length; _i2++) {
|
|
44
|
+
var v = _required2[_i2];
|
|
45
|
+
expect(css).toContain("".concat(v, ":"));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
test("emits the typography variables", function () {
|
|
49
|
+
var required = ["--font-sans", "--font-mono", "--text-display", "--text-h2", "--text-h3", "--text-h4", "--text-body", "--text-sm", "--text-xs", "--fw-regular", "--fw-medium", "--fw-semibold", "--fw-bold", "--lh-tight", "--lh-snug", "--lh-normal", "--lh-loose",
|
|
50
|
+
// A7-02 — letter-spacing scale.
|
|
51
|
+
"--ls-tight", "--ls-normal", "--ls-wide"];
|
|
52
|
+
for (var _i3 = 0, _required3 = required; _i3 < _required3.length; _i3++) {
|
|
53
|
+
var v = _required3[_i3];
|
|
54
|
+
expect(css).toContain("".concat(v, ":"));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A7-02 regression guard — the PHANTOM TOKEN class.
|
|
60
|
+
*
|
|
61
|
+
* The ms-dfd-fe Area 7 audit found six token names referenced across two
|
|
62
|
+
* certified modules that this emitter never emitted: --ls-tight, --ls-wide,
|
|
63
|
+
* --border-subtle, --r-xs, --icon-sm, --icon-xl. Because every consumer wrote
|
|
64
|
+
* `var(--x, <literal>)`, the literal was the ONLY thing that ever rendered —
|
|
65
|
+
* a hard-coded magic value wearing a token's name, invisible to review and
|
|
66
|
+
* undetectable by tsc (R-2.3 / R-AI.1).
|
|
67
|
+
*
|
|
68
|
+
* The two letter-spacing names had a real platform basis and are now emitted
|
|
69
|
+
* (asserted above). The other four were local inventions with no basis in the
|
|
70
|
+
* Charter's token tables; asserting their ABSENCE here stops someone
|
|
71
|
+
* "resolving" a phantom reference by inventing the token instead of fixing the
|
|
72
|
+
* call site. Adding any of them is a Charter §02 amendment and must arrive
|
|
73
|
+
* with its table entry, not via a failing consumer.
|
|
74
|
+
*/
|
|
75
|
+
test("does NOT emit the four rejected phantom tokens (A7-02)", function () {
|
|
76
|
+
for (var _i4 = 0, _arr = ["--border-subtle", "--r-xs", "--icon-sm", "--icon-xl"]; _i4 < _arr.length; _i4++) {
|
|
77
|
+
var v = _arr[_i4];
|
|
78
|
+
expect(css).not.toContain("".concat(v, ":"));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
test("emits the spacing grid (--s-1 through --s-10)", function () {
|
|
82
|
+
for (var i = 1; i <= 10; i += 1) {
|
|
83
|
+
expect(css).toContain("--s-".concat(i, ":"));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
test("emits the spacing aliases under --space-* prefix", function () {
|
|
87
|
+
var aliases = ["xs", "sm", "md", "lg", "xl", "xxl"];
|
|
88
|
+
for (var _i5 = 0, _aliases = aliases; _i5 < _aliases.length; _i5++) {
|
|
89
|
+
var a = _aliases[_i5];
|
|
90
|
+
expect(css).toContain("--space-".concat(a, ":"));
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
test("does NOT emit unprefixed alias names that would pollute the global CSS namespace", function () {
|
|
94
|
+
// Bare --md / --lg / --xl would collide with consumer stylesheets.
|
|
95
|
+
// Batch 2 explicitly partitioned spacing into numeric grid (--s-N)
|
|
96
|
+
// and semantic aliases (--space-X) to prevent this.
|
|
97
|
+
// Use word boundaries so we don't false-match --r-md, --space-md, etc.
|
|
98
|
+
var polluters = [/[^\w-]--xs\s*:/, /[^\w-]--sm\s*:/, /[^\w-]--md\s*:/, /[^\w-]--lg\s*:/, /[^\w-]--xl\s*:/, /[^\w-]--xxl\s*:/];
|
|
99
|
+
for (var _i6 = 0, _polluters = polluters; _i6 < _polluters.length; _i6++) {
|
|
100
|
+
var re = _polluters[_i6];
|
|
101
|
+
expect(css).not.toMatch(re);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
test("emits radius, shadow, motion, easing, layout, density", function () {
|
|
105
|
+
var required = ["--r-sm", "--r-md", "--r-lg", "--r-xl", "--r-full", "--r-none", "--shadow-xs", "--shadow-sm", "--shadow-md", "--shadow-lg", "--shadow-focus", "--duration-fast", "--duration-base", "--duration-slow", "--easing-out", "--easing-in", "--easing-soft", "--sidebar-w", "--topbar-h", "--content-max", "--form-max", "--tactile-min", "--row-h", "--input-h", "--btn-h", "--text-fs"];
|
|
106
|
+
for (var _i7 = 0, _required4 = required; _i7 < _required4.length; _i7++) {
|
|
107
|
+
var v = _required4[_i7];
|
|
108
|
+
expect(css).toContain("".concat(v, ":"));
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
test("emits z-index variables", function () {
|
|
112
|
+
// Iterates the full zIndex object in cssVariables, so any
|
|
113
|
+
// future zIndex slot (popover, snackbar, tooltip from Batch 1)
|
|
114
|
+
// surfaces here without code change.
|
|
115
|
+
expect(css).toMatch(/--z-modal\s*:/);
|
|
116
|
+
expect(css).toMatch(/--z-sticky\s*:/);
|
|
117
|
+
});
|
|
118
|
+
test("emits the dark-mode override block with derived soft variants", function () {
|
|
119
|
+
expect(css).toContain('[data-theme="dark"]');
|
|
120
|
+
// Soft semantic fills are color-mix-derived in dark, not static hex
|
|
121
|
+
// (Batch 2 contrast fix for WCAG 1.4.11 non-text on dark surfaces).
|
|
122
|
+
expect(css).toMatch(/--success-soft:\s*color-mix/);
|
|
123
|
+
expect(css).toMatch(/--danger-soft:\s*color-mix/);
|
|
124
|
+
expect(css).toMatch(/--warning-soft:\s*color-mix/);
|
|
125
|
+
expect(css).toMatch(/--info-soft:\s*color-mix/);
|
|
126
|
+
});
|
|
127
|
+
test("emits the compact density override block", function () {
|
|
128
|
+
expect(css).toContain('[data-density="compact"]');
|
|
129
|
+
// Compact override shrinks the row/input/btn heights.
|
|
130
|
+
expect(css).toMatch(/\[data-density="compact"\][\s\S]*--btn-h:/);
|
|
131
|
+
});
|
|
132
|
+
test("emits the collapsed-sidebar override", function () {
|
|
133
|
+
expect(css).toContain('[data-nav-collapsed="true"]');
|
|
134
|
+
});
|
|
135
|
+
test("brand override propagates through resolveBrand", function () {
|
|
136
|
+
var customCss = (0, _cssVariables.getCssVariables)({
|
|
137
|
+
brand: {
|
|
138
|
+
accent: "#FF0000"
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
expect(customCss).toContain("--accent: #FF0000;");
|
|
142
|
+
// Default also still emits its accent
|
|
143
|
+
expect(css).toMatch(/--accent:\s*#[0-9a-fA-F]{3,8}/);
|
|
144
|
+
});
|
|
145
|
+
test("brand override does NOT pollute other brand fields when omitted", function () {
|
|
146
|
+
// Partial brand override — accentSoft should fall back to default,
|
|
147
|
+
// not to undefined or an empty string.
|
|
148
|
+
var customCss = (0, _cssVariables.getCssVariables)({
|
|
149
|
+
brand: {
|
|
150
|
+
accent: "#FF0000"
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
expect(customCss).not.toMatch(/--accent-soft:\s*undefined/);
|
|
154
|
+
expect(customCss).not.toMatch(/--accent-soft:\s*;/);
|
|
155
|
+
expect(customCss).toMatch(/--accent-soft:\s*\S+/);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=cssVariables.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cssVariables.test.js","names":["_cssVariables","require","describe","css","beforeAll","getCssVariables","test","expect","toMatch","matches","match","toBeNull","not","required","_i","_required","length","v","toContain","concat","_i2","_required2","_i3","_required3","_i4","_arr","i","aliases","_i5","_aliases","a","polluters","_i6","_polluters","re","_i7","_required4","customCss","brand","accent"],"sources":["../../../src/lib/v2/__tests__/cssVariables.test.ts"],"sourcesContent":["import { getCssVariables } from \"../theme/cssVariables\";\r\n\r\n/**\r\n * Regression coverage for the v2 CSS variable emission.\r\n *\r\n * These invariants are established by Batch 1 (token refactor) and\r\n * Batch 2 (cssVariables refactor). A failure here means a future\r\n * change has either:\r\n * - re-introduced a deleted token (e.g. --fw-black),\r\n * - emitted an undefined value (the silent bug class that broke\r\n * KPICard and FormSection visually before Batch 6+7 caught it),\r\n * - dropped a critical variable downstream consumers rely on, or\r\n * - leaked an alias name (--md / --lg) into the global namespace.\r\n */\r\ndescribe(\"getCssVariables() — Batch 1 + 2 invariants\", () => {\r\n let css: string;\r\n beforeAll(() => {\r\n css = getCssVariables();\r\n });\r\n\r\n test(\"emits a :root block\", () => {\r\n expect(css).toMatch(/:root\\s*\\{/);\r\n });\r\n\r\n test(\"never emits ': undefined' values (the ghost-token bug class)\", () => {\r\n // Match `--anything: undefined;` with optional whitespace.\r\n // This catches the regression that produced --fw-black resolving\r\n // to undefined in :root after Batch 1 removed fontWeight.black.\r\n const matches = css.match(/--[\\w-]+\\s*:\\s*undefined\\b/g);\r\n expect(matches).toBeNull();\r\n });\r\n\r\n test(\"does NOT emit --fw-black (Batch 1 removed fontWeight.black)\", () => {\r\n expect(css).not.toMatch(/--fw-black/);\r\n });\r\n\r\n test(\"emits all critical brand + ink + surface variables\", () => {\r\n const required = [\r\n \"--accent\", \"--accent-soft\", \"--accent-hover\", \"--accent-fg\",\r\n \"--fg\", \"--fg-muted\", \"--fg-subtle\", \"--fg-inverse\",\r\n \"--bg\", \"--bg-elev\", \"--bg-subtle\", \"--bg-hover\", \"--surface\",\r\n \"--border\", \"--border-strong\",\r\n ];\r\n for (const v of required) {\r\n expect(css).toContain(`${v}:`);\r\n }\r\n });\r\n\r\n test(\"emits all semantic + status palette variables\", () => {\r\n const required = [\r\n \"--success\", \"--success-fg\", \"--success-soft\",\r\n \"--danger\", \"--danger-fg\", \"--danger-soft\",\r\n \"--warning\", \"--warning-fg\", \"--warning-soft\",\r\n \"--info\", \"--info-fg\", \"--info-soft\",\r\n \"--status-new-soft\", \"--status-new-fg\",\r\n \"--status-sent-soft\", \"--status-sent-fg\",\r\n \"--status-pending-soft\", \"--status-pending-fg\",\r\n \"--status-approved-soft\", \"--status-approved-fg\",\r\n \"--status-rejected-soft\", \"--status-rejected-fg\",\r\n \"--status-neutral-soft\", \"--status-neutral-fg\",\r\n ];\r\n for (const v of required) {\r\n expect(css).toContain(`${v}:`);\r\n }\r\n });\r\n\r\n test(\"emits the typography variables\", () => {\r\n const required = [\r\n \"--font-sans\", \"--font-mono\",\r\n \"--text-display\", \"--text-h2\", \"--text-h3\", \"--text-h4\",\r\n \"--text-body\", \"--text-sm\", \"--text-xs\",\r\n \"--fw-regular\", \"--fw-medium\", \"--fw-semibold\", \"--fw-bold\",\r\n \"--lh-tight\", \"--lh-snug\", \"--lh-normal\", \"--lh-loose\",\r\n // A7-02 — letter-spacing scale.\r\n \"--ls-tight\", \"--ls-normal\", \"--ls-wide\",\r\n ];\r\n for (const v of required) {\r\n expect(css).toContain(`${v}:`);\r\n }\r\n });\r\n\r\n /**\r\n * A7-02 regression guard — the PHANTOM TOKEN class.\r\n *\r\n * The ms-dfd-fe Area 7 audit found six token names referenced across two\r\n * certified modules that this emitter never emitted: --ls-tight, --ls-wide,\r\n * --border-subtle, --r-xs, --icon-sm, --icon-xl. Because every consumer wrote\r\n * `var(--x, <literal>)`, the literal was the ONLY thing that ever rendered —\r\n * a hard-coded magic value wearing a token's name, invisible to review and\r\n * undetectable by tsc (R-2.3 / R-AI.1).\r\n *\r\n * The two letter-spacing names had a real platform basis and are now emitted\r\n * (asserted above). The other four were local inventions with no basis in the\r\n * Charter's token tables; asserting their ABSENCE here stops someone\r\n * \"resolving\" a phantom reference by inventing the token instead of fixing the\r\n * call site. Adding any of them is a Charter §02 amendment and must arrive\r\n * with its table entry, not via a failing consumer.\r\n */\r\n test(\"does NOT emit the four rejected phantom tokens (A7-02)\", () => {\r\n for (const v of [\"--border-subtle\", \"--r-xs\", \"--icon-sm\", \"--icon-xl\"]) {\r\n expect(css).not.toContain(`${v}:`);\r\n }\r\n });\r\n\r\n test(\"emits the spacing grid (--s-1 through --s-10)\", () => {\r\n for (let i = 1; i <= 10; i += 1) {\r\n expect(css).toContain(`--s-${i}:`);\r\n }\r\n });\r\n\r\n test(\"emits the spacing aliases under --space-* prefix\", () => {\r\n const aliases = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\r\n for (const a of aliases) {\r\n expect(css).toContain(`--space-${a}:`);\r\n }\r\n });\r\n\r\n test(\"does NOT emit unprefixed alias names that would pollute the global CSS namespace\", () => {\r\n // Bare --md / --lg / --xl would collide with consumer stylesheets.\r\n // Batch 2 explicitly partitioned spacing into numeric grid (--s-N)\r\n // and semantic aliases (--space-X) to prevent this.\r\n // Use word boundaries so we don't false-match --r-md, --space-md, etc.\r\n const polluters = [\r\n /[^\\w-]--xs\\s*:/,\r\n /[^\\w-]--sm\\s*:/,\r\n /[^\\w-]--md\\s*:/,\r\n /[^\\w-]--lg\\s*:/,\r\n /[^\\w-]--xl\\s*:/,\r\n /[^\\w-]--xxl\\s*:/,\r\n ];\r\n for (const re of polluters) {\r\n expect(css).not.toMatch(re);\r\n }\r\n });\r\n\r\n test(\"emits radius, shadow, motion, easing, layout, density\", () => {\r\n const required = [\r\n \"--r-sm\", \"--r-md\", \"--r-lg\", \"--r-xl\", \"--r-full\", \"--r-none\",\r\n \"--shadow-xs\", \"--shadow-sm\", \"--shadow-md\", \"--shadow-lg\", \"--shadow-focus\",\r\n \"--duration-fast\", \"--duration-base\", \"--duration-slow\",\r\n \"--easing-out\", \"--easing-in\", \"--easing-soft\",\r\n \"--sidebar-w\", \"--topbar-h\", \"--content-max\", \"--form-max\", \"--tactile-min\",\r\n \"--row-h\", \"--input-h\", \"--btn-h\", \"--text-fs\",\r\n ];\r\n for (const v of required) {\r\n expect(css).toContain(`${v}:`);\r\n }\r\n });\r\n\r\n test(\"emits z-index variables\", () => {\r\n // Iterates the full zIndex object in cssVariables, so any\r\n // future zIndex slot (popover, snackbar, tooltip from Batch 1)\r\n // surfaces here without code change.\r\n expect(css).toMatch(/--z-modal\\s*:/);\r\n expect(css).toMatch(/--z-sticky\\s*:/);\r\n });\r\n\r\n test(\"emits the dark-mode override block with derived soft variants\", () => {\r\n expect(css).toContain('[data-theme=\"dark\"]');\r\n // Soft semantic fills are color-mix-derived in dark, not static hex\r\n // (Batch 2 contrast fix for WCAG 1.4.11 non-text on dark surfaces).\r\n expect(css).toMatch(/--success-soft:\\s*color-mix/);\r\n expect(css).toMatch(/--danger-soft:\\s*color-mix/);\r\n expect(css).toMatch(/--warning-soft:\\s*color-mix/);\r\n expect(css).toMatch(/--info-soft:\\s*color-mix/);\r\n });\r\n\r\n test(\"emits the compact density override block\", () => {\r\n expect(css).toContain('[data-density=\"compact\"]');\r\n // Compact override shrinks the row/input/btn heights.\r\n expect(css).toMatch(/\\[data-density=\"compact\"\\][\\s\\S]*--btn-h:/);\r\n });\r\n\r\n test(\"emits the collapsed-sidebar override\", () => {\r\n expect(css).toContain('[data-nav-collapsed=\"true\"]');\r\n });\r\n\r\n test(\"brand override propagates through resolveBrand\", () => {\r\n const customCss = getCssVariables({ brand: { accent: \"#FF0000\" } });\r\n expect(customCss).toContain(\"--accent: #FF0000;\");\r\n // Default also still emits its accent\r\n expect(css).toMatch(/--accent:\\s*#[0-9a-fA-F]{3,8}/);\r\n });\r\n\r\n test(\"brand override does NOT pollute other brand fields when omitted\", () => {\r\n // Partial brand override — accentSoft should fall back to default,\r\n // not to undefined or an empty string.\r\n const customCss = getCssVariables({ brand: { accent: \"#FF0000\" } });\r\n expect(customCss).not.toMatch(/--accent-soft:\\s*undefined/);\r\n expect(customCss).not.toMatch(/--accent-soft:\\s*;/);\r\n expect(customCss).toMatch(/--accent-soft:\\s*\\S+/);\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
require("@testing-library/jest-dom");
|
|
5
|
+
var React = _interopRequireWildcard(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _DataGrid = _interopRequireDefault(require("../patterns/DataGrid"));
|
|
8
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
10
|
+
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); }
|
|
11
|
+
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; }
|
|
12
|
+
/**
|
|
13
|
+
* Verifies the deep-merge contract for the `labels` prop pattern
|
|
14
|
+
* shared by 17 components / patterns in v2 (Batches 4-7).
|
|
15
|
+
*
|
|
16
|
+
* DataGrid is the canonical test subject because it has the deepest
|
|
17
|
+
* label surface (top-level keys + nested `pagination.*`). The
|
|
18
|
+
* Object.freeze on DEFAULT_LABELS protects against accidental
|
|
19
|
+
* mutation; the mergeLabels helper must spread the nested object,
|
|
20
|
+
* not replace it.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
describe("DataGrid — labels deep-merge contract", function () {
|
|
24
|
+
var baseRows = Array.from({
|
|
25
|
+
length: 10
|
|
26
|
+
}, function (_, i) {
|
|
27
|
+
return {
|
|
28
|
+
id: i + 1
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
test("with no labels prop, all defaults render in French", function () {
|
|
32
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid["default"], {
|
|
33
|
+
rows: baseRows,
|
|
34
|
+
columns: [{
|
|
35
|
+
key: "id",
|
|
36
|
+
header: "ID"
|
|
37
|
+
}],
|
|
38
|
+
pagination: {
|
|
39
|
+
page: 1,
|
|
40
|
+
pageSize: 25,
|
|
41
|
+
total: 100,
|
|
42
|
+
onPageChange: function onPageChange() {}
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
|
+
|
|
46
|
+
// Pagination FR defaults
|
|
47
|
+
expect(_react2.screen.getByLabelText("Première page")).toBeInTheDocument();
|
|
48
|
+
expect(_react2.screen.getByLabelText("Page précédente")).toBeInTheDocument();
|
|
49
|
+
expect(_react2.screen.getByLabelText("Page suivante")).toBeInTheDocument();
|
|
50
|
+
expect(_react2.screen.getByLabelText("Dernière page")).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
test("partial labels.pagination merges onto FR defaults — overridden keys win", function () {
|
|
53
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid["default"], {
|
|
54
|
+
rows: baseRows,
|
|
55
|
+
columns: [{
|
|
56
|
+
key: "id",
|
|
57
|
+
header: "ID"
|
|
58
|
+
}],
|
|
59
|
+
pagination: {
|
|
60
|
+
page: 1,
|
|
61
|
+
pageSize: 25,
|
|
62
|
+
total: 100,
|
|
63
|
+
onPageChange: function onPageChange() {}
|
|
64
|
+
},
|
|
65
|
+
labels: {
|
|
66
|
+
pagination: {
|
|
67
|
+
firstPage: "First!"
|
|
68
|
+
// lastPage, previousPage, nextPage, loading, rowsPerPage,
|
|
69
|
+
// rangeOf NOT provided — must fall back to FR defaults.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}));
|
|
73
|
+
|
|
74
|
+
// Custom override applied
|
|
75
|
+
expect(_react2.screen.getByLabelText("First!")).toBeInTheDocument();
|
|
76
|
+
|
|
77
|
+
// FR defaults preserved (the regression class this test guards)
|
|
78
|
+
expect(_react2.screen.getByLabelText("Page précédente")).toBeInTheDocument();
|
|
79
|
+
expect(_react2.screen.getByLabelText("Page suivante")).toBeInTheDocument();
|
|
80
|
+
expect(_react2.screen.getByLabelText("Dernière page")).toBeInTheDocument();
|
|
81
|
+
});
|
|
82
|
+
test("partial top-level labels merge onto FR defaults", function () {
|
|
83
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid["default"], {
|
|
84
|
+
rows: baseRows,
|
|
85
|
+
columns: [{
|
|
86
|
+
key: "id",
|
|
87
|
+
header: "ID"
|
|
88
|
+
}],
|
|
89
|
+
pagination: {
|
|
90
|
+
page: 1,
|
|
91
|
+
pageSize: 25,
|
|
92
|
+
total: 100,
|
|
93
|
+
onPageChange: function onPageChange() {}
|
|
94
|
+
},
|
|
95
|
+
onSelectionChange: function onSelectionChange() {},
|
|
96
|
+
labels: {
|
|
97
|
+
tableAria: "My table"
|
|
98
|
+
// selectAll, selectRow, pagination NOT provided — defaults stand.
|
|
99
|
+
}
|
|
100
|
+
}));
|
|
101
|
+
expect(_react2.screen.getByLabelText("My table")).toBeInTheDocument();
|
|
102
|
+
// Default selectAll FR survives
|
|
103
|
+
expect(_react2.screen.getByLabelText("Tout sélectionner")).toBeInTheDocument();
|
|
104
|
+
// Default pagination FR survives
|
|
105
|
+
expect(_react2.screen.getByLabelText("Première page")).toBeInTheDocument();
|
|
106
|
+
});
|
|
107
|
+
test("legacy ariaLabel prop wins over labels.tableAria (back-compat contract)", function () {
|
|
108
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid["default"], {
|
|
109
|
+
rows: baseRows,
|
|
110
|
+
columns: [{
|
|
111
|
+
key: "id",
|
|
112
|
+
header: "ID"
|
|
113
|
+
}],
|
|
114
|
+
pagination: {
|
|
115
|
+
page: 1,
|
|
116
|
+
pageSize: 25,
|
|
117
|
+
total: 100,
|
|
118
|
+
onPageChange: function onPageChange() {}
|
|
119
|
+
},
|
|
120
|
+
ariaLabel: "Legacy wins",
|
|
121
|
+
labels: {
|
|
122
|
+
tableAria: "New label"
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
expect(_react2.screen.getByLabelText("Legacy wins")).toBeInTheDocument();
|
|
126
|
+
// The labels.tableAria value should NOT appear
|
|
127
|
+
expect(_react2.screen.queryByLabelText("New label")).not.toBeInTheDocument();
|
|
128
|
+
});
|
|
129
|
+
test("rangeOf custom function reaches the rendered range text", function () {
|
|
130
|
+
(0, _react2.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_DataGrid["default"], {
|
|
131
|
+
rows: baseRows,
|
|
132
|
+
columns: [{
|
|
133
|
+
key: "id",
|
|
134
|
+
header: "ID"
|
|
135
|
+
}],
|
|
136
|
+
pagination: {
|
|
137
|
+
page: 1,
|
|
138
|
+
pageSize: 25,
|
|
139
|
+
total: 100,
|
|
140
|
+
onPageChange: function onPageChange() {}
|
|
141
|
+
},
|
|
142
|
+
labels: {
|
|
143
|
+
pagination: {
|
|
144
|
+
rangeOf: function rangeOf(from, to, total) {
|
|
145
|
+
return "Showing ".concat(from, " to ").concat(to, " of ").concat(total);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
expect(_react2.screen.getByText(/Showing 1 to 25 of 100/)).toBeInTheDocument();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=labels-merge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels-merge.test.js","names":["require","React","_interopRequireWildcard","_react2","_DataGrid","_interopRequireDefault","_jsxRuntime","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","describe","baseRows","Array","from","length","_","i","id","test","render","jsx","rows","columns","header","pagination","page","pageSize","total","onPageChange","expect","screen","getByLabelText","toBeInTheDocument","labels","firstPage","onSelectionChange","tableAria","ariaLabel","queryByLabelText","not","rangeOf","to","concat","getByText"],"sources":["../../../src/lib/v2/__tests__/labels-merge.test.tsx"],"sourcesContent":["import \"@testing-library/jest-dom\";\r\nimport * as React from \"react\";\r\nimport { render, screen } from \"@testing-library/react\";\r\nimport DataGrid from \"../patterns/DataGrid\";\r\n\r\n/**\r\n * Verifies the deep-merge contract for the `labels` prop pattern\r\n * shared by 17 components / patterns in v2 (Batches 4-7).\r\n *\r\n * DataGrid is the canonical test subject because it has the deepest\r\n * label surface (top-level keys + nested `pagination.*`). The\r\n * Object.freeze on DEFAULT_LABELS protects against accidental\r\n * mutation; the mergeLabels helper must spread the nested object,\r\n * not replace it.\r\n */\r\ninterface Row {\r\n id: number;\r\n}\r\n\r\ndescribe(\"DataGrid — labels deep-merge contract\", () => {\r\n const baseRows: Row[] = Array.from({ length: 10 }, (_, i): Row => ({\r\n id: i + 1,\r\n }));\r\n\r\n test(\"with no labels prop, all defaults render in French\", () => {\r\n render(\r\n <DataGrid\r\n rows={baseRows}\r\n columns={[{ key: \"id\", header: \"ID\" }]}\r\n pagination={{ page: 1, pageSize: 25, total: 100, onPageChange: () => {} }}\r\n />\r\n );\r\n\r\n // Pagination FR defaults\r\n expect(screen.getByLabelText(\"Première page\")).toBeInTheDocument();\r\n expect(screen.getByLabelText(\"Page précédente\")).toBeInTheDocument();\r\n expect(screen.getByLabelText(\"Page suivante\")).toBeInTheDocument();\r\n expect(screen.getByLabelText(\"Dernière page\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"partial labels.pagination merges onto FR defaults — overridden keys win\", () => {\r\n render(\r\n <DataGrid\r\n rows={baseRows}\r\n columns={[{ key: \"id\", header: \"ID\" }]}\r\n pagination={{ page: 1, pageSize: 25, total: 100, onPageChange: () => {} }}\r\n labels={{\r\n pagination: {\r\n firstPage: \"First!\",\r\n // lastPage, previousPage, nextPage, loading, rowsPerPage,\r\n // rangeOf NOT provided — must fall back to FR defaults.\r\n },\r\n }}\r\n />\r\n );\r\n\r\n // Custom override applied\r\n expect(screen.getByLabelText(\"First!\")).toBeInTheDocument();\r\n\r\n // FR defaults preserved (the regression class this test guards)\r\n expect(screen.getByLabelText(\"Page précédente\")).toBeInTheDocument();\r\n expect(screen.getByLabelText(\"Page suivante\")).toBeInTheDocument();\r\n expect(screen.getByLabelText(\"Dernière page\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"partial top-level labels merge onto FR defaults\", () => {\r\n render(\r\n <DataGrid\r\n rows={baseRows}\r\n columns={[{ key: \"id\", header: \"ID\" }]}\r\n pagination={{ page: 1, pageSize: 25, total: 100, onPageChange: () => {} }}\r\n onSelectionChange={() => {}}\r\n labels={{\r\n tableAria: \"My table\",\r\n // selectAll, selectRow, pagination NOT provided — defaults stand.\r\n }}\r\n />\r\n );\r\n\r\n expect(screen.getByLabelText(\"My table\")).toBeInTheDocument();\r\n // Default selectAll FR survives\r\n expect(screen.getByLabelText(\"Tout sélectionner\")).toBeInTheDocument();\r\n // Default pagination FR survives\r\n expect(screen.getByLabelText(\"Première page\")).toBeInTheDocument();\r\n });\r\n\r\n test(\"legacy ariaLabel prop wins over labels.tableAria (back-compat contract)\", () => {\r\n render(\r\n <DataGrid\r\n rows={baseRows}\r\n columns={[{ key: \"id\", header: \"ID\" }]}\r\n pagination={{ page: 1, pageSize: 25, total: 100, onPageChange: () => {} }}\r\n ariaLabel=\"Legacy wins\"\r\n labels={{ tableAria: \"New label\" }}\r\n />\r\n );\r\n\r\n expect(screen.getByLabelText(\"Legacy wins\")).toBeInTheDocument();\r\n // The labels.tableAria value should NOT appear\r\n expect(screen.queryByLabelText(\"New label\")).not.toBeInTheDocument();\r\n });\r\n\r\n test(\"rangeOf custom function reaches the rendered range text\", () => {\r\n render(\r\n <DataGrid\r\n rows={baseRows}\r\n columns={[{ key: \"id\", header: \"ID\" }]}\r\n pagination={{ page: 1, pageSize: 25, total: 100, onPageChange: () => {} }}\r\n labels={{\r\n pagination: {\r\n rangeOf: (from, to, total) => `Showing ${from} to ${to} of ${total}`,\r\n },\r\n }}\r\n />\r\n );\r\n\r\n expect(screen.getByText(/Showing 1 to 25 of 100/)).toBeInTheDocument();\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _fmtMoney = _interopRequireDefault(require("../utils/fmtMoney"));
|
|
4
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
5
|
+
/**
|
|
6
|
+
* Contract tests for fmtMoney — the canonical v2 money formatter.
|
|
7
|
+
*
|
|
8
|
+
* The graceful-display contract (returns "—" for bad input, never
|
|
9
|
+
* throws on bad locale) underpins TradeDirect dashboard cells.
|
|
10
|
+
* Removing it would let a malformed amount or a typo'd locale crash
|
|
11
|
+
* an entire row of a DataGrid.
|
|
12
|
+
*/
|
|
13
|
+
describe("fmtMoney — contract", function () {
|
|
14
|
+
describe("graceful empty-cell fallback", function () {
|
|
15
|
+
test("returns '—' for null", function () {
|
|
16
|
+
expect((0, _fmtMoney["default"])(null)).toBe("—");
|
|
17
|
+
});
|
|
18
|
+
test("returns '—' for undefined", function () {
|
|
19
|
+
expect((0, _fmtMoney["default"])(undefined)).toBe("—");
|
|
20
|
+
});
|
|
21
|
+
test("returns '—' for empty string", function () {
|
|
22
|
+
expect((0, _fmtMoney["default"])("")).toBe("—");
|
|
23
|
+
});
|
|
24
|
+
test("returns '—' for NaN", function () {
|
|
25
|
+
expect((0, _fmtMoney["default"])(NaN)).toBe("—");
|
|
26
|
+
});
|
|
27
|
+
test("returns '—' for Infinity", function () {
|
|
28
|
+
expect((0, _fmtMoney["default"])(Infinity)).toBe("—");
|
|
29
|
+
expect((0, _fmtMoney["default"])(-Infinity)).toBe("—");
|
|
30
|
+
});
|
|
31
|
+
test("returns '—' for non-numeric string", function () {
|
|
32
|
+
expect((0, _fmtMoney["default"])("abc")).toBe("—");
|
|
33
|
+
});
|
|
34
|
+
test("coerces numeric strings to numbers", function () {
|
|
35
|
+
// "1234.5" should format identically to 1234.5
|
|
36
|
+
expect((0, _fmtMoney["default"])("1234.5")).toBe((0, _fmtMoney["default"])(1234.5));
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("locale-aware formatting", function () {
|
|
40
|
+
test("formats with the default fr-FR locale", function () {
|
|
41
|
+
var out = (0, _fmtMoney["default"])(1234.5);
|
|
42
|
+
// FR uses comma as decimal separator. Thousand separator is a
|
|
43
|
+
// non-breaking space (U+00A0) or narrow non-breaking space
|
|
44
|
+
// (U+202F) depending on the runtime — accept either.
|
|
45
|
+
expect(out).toMatch(/1[\u00A0\u202F\s]234,5/);
|
|
46
|
+
});
|
|
47
|
+
test("formats under en-US when explicitly passed", function () {
|
|
48
|
+
var out = (0, _fmtMoney["default"])(1234.5, "USD", {
|
|
49
|
+
locale: "en-US"
|
|
50
|
+
});
|
|
51
|
+
expect(out).toContain("1,234.5");
|
|
52
|
+
expect(out).toContain("USD");
|
|
53
|
+
});
|
|
54
|
+
test("respects minimumFractionDigits", function () {
|
|
55
|
+
var out = (0, _fmtMoney["default"])(1234, "EUR", {
|
|
56
|
+
minimumFractionDigits: 2
|
|
57
|
+
});
|
|
58
|
+
// Default fr-FR locale; 2 fraction digits → trailing ",00"
|
|
59
|
+
expect(out).toMatch(/1[\u00A0\u202F\s]234,00/);
|
|
60
|
+
});
|
|
61
|
+
test("respects maximumFractionDigits", function () {
|
|
62
|
+
var out = (0, _fmtMoney["default"])(1.23456, "", {
|
|
63
|
+
maximumFractionDigits: 2
|
|
64
|
+
});
|
|
65
|
+
// Should round to 2 fraction digits in fr-FR (",23")
|
|
66
|
+
expect(out).toMatch(/1,23\b/);
|
|
67
|
+
});
|
|
68
|
+
test("appends the currency suffix when supplied", function () {
|
|
69
|
+
expect((0, _fmtMoney["default"])(100, "EUR")).toContain("EUR");
|
|
70
|
+
expect((0, _fmtMoney["default"])(100, "MAD")).toContain("MAD");
|
|
71
|
+
expect((0, _fmtMoney["default"])(100, "USD")).toContain("USD");
|
|
72
|
+
});
|
|
73
|
+
test("omits the currency suffix when blank", function () {
|
|
74
|
+
var out = (0, _fmtMoney["default"])(100, "");
|
|
75
|
+
expect(out).not.toMatch(/[A-Z]{3}/);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("locale fallback (the regression-class guard)", function () {
|
|
79
|
+
test("does not throw on an invalid BCP-47 tag", function () {
|
|
80
|
+
expect(function () {
|
|
81
|
+
return (0, _fmtMoney["default"])(100, "EUR", {
|
|
82
|
+
locale: "not-a-real-locale"
|
|
83
|
+
});
|
|
84
|
+
}).not.toThrow();
|
|
85
|
+
});
|
|
86
|
+
test("falls back to fr-FR formatting on invalid locale", function () {
|
|
87
|
+
var out = (0, _fmtMoney["default"])(1234.5, "EUR", {
|
|
88
|
+
locale: "not-a-real-locale"
|
|
89
|
+
});
|
|
90
|
+
// Should produce the FR comma-decimal form, not crash and
|
|
91
|
+
// not return undefined.
|
|
92
|
+
expect(out).toMatch(/1[\u00A0\u202F\s]234,5/);
|
|
93
|
+
expect(out).toContain("EUR");
|
|
94
|
+
});
|
|
95
|
+
test("does not throw on garbage object (defensive)", function () {
|
|
96
|
+
// fmtMoney's opts.locale is typed `string | undefined`, but real hosts
|
|
97
|
+
// occasionally pass a wrong runtime value. The @ts-expect-error documents
|
|
98
|
+
// that this input is intentionally ill-typed and asserts the runtime
|
|
99
|
+
// guard (catch → fr-FR fallback) handles any value, not just RangeError.
|
|
100
|
+
expect(function () {
|
|
101
|
+
return (
|
|
102
|
+
// @ts-expect-error — intentional invalid locale type (runtime robustness)
|
|
103
|
+
(0, _fmtMoney["default"])(100, "EUR", {
|
|
104
|
+
locale: 12345
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
}).not.toThrow();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=locale-fallback.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-fallback.test.js","names":["_fmtMoney","_interopRequireDefault","require","obj","__esModule","describe","test","expect","fmtMoney","toBe","undefined","NaN","Infinity","out","toMatch","locale","toContain","minimumFractionDigits","maximumFractionDigits","not","toThrow"],"sources":["../../../src/lib/v2/__tests__/locale-fallback.test.ts"],"sourcesContent":["import fmtMoney from \"../utils/fmtMoney\";\r\n\r\n/**\r\n * Contract tests for fmtMoney — the canonical v2 money formatter.\r\n *\r\n * The graceful-display contract (returns \"—\" for bad input, never\r\n * throws on bad locale) underpins TradeDirect dashboard cells.\r\n * Removing it would let a malformed amount or a typo'd locale crash\r\n * an entire row of a DataGrid.\r\n */\r\ndescribe(\"fmtMoney — contract\", () => {\r\n describe(\"graceful empty-cell fallback\", () => {\r\n test(\"returns '—' for null\", () => {\r\n expect(fmtMoney(null)).toBe(\"—\");\r\n });\r\n\r\n test(\"returns '—' for undefined\", () => {\r\n expect(fmtMoney(undefined)).toBe(\"—\");\r\n });\r\n\r\n test(\"returns '—' for empty string\", () => {\r\n expect(fmtMoney(\"\")).toBe(\"—\");\r\n });\r\n\r\n test(\"returns '—' for NaN\", () => {\r\n expect(fmtMoney(NaN)).toBe(\"—\");\r\n });\r\n\r\n test(\"returns '—' for Infinity\", () => {\r\n expect(fmtMoney(Infinity)).toBe(\"—\");\r\n expect(fmtMoney(-Infinity)).toBe(\"—\");\r\n });\r\n\r\n test(\"returns '—' for non-numeric string\", () => {\r\n expect(fmtMoney(\"abc\")).toBe(\"—\");\r\n });\r\n\r\n test(\"coerces numeric strings to numbers\", () => {\r\n // \"1234.5\" should format identically to 1234.5\r\n expect(fmtMoney(\"1234.5\")).toBe(fmtMoney(1234.5));\r\n });\r\n });\r\n\r\n describe(\"locale-aware formatting\", () => {\r\n test(\"formats with the default fr-FR locale\", () => {\r\n const out = fmtMoney(1234.5);\r\n // FR uses comma as decimal separator. Thousand separator is a\r\n // non-breaking space (U+00A0) or narrow non-breaking space\r\n // (U+202F) depending on the runtime — accept either.\r\n expect(out).toMatch(/1[\\u00A0\\u202F\\s]234,5/);\r\n });\r\n\r\n test(\"formats under en-US when explicitly passed\", () => {\r\n const out = fmtMoney(1234.5, \"USD\", { locale: \"en-US\" });\r\n expect(out).toContain(\"1,234.5\");\r\n expect(out).toContain(\"USD\");\r\n });\r\n\r\n test(\"respects minimumFractionDigits\", () => {\r\n const out = fmtMoney(1234, \"EUR\", { minimumFractionDigits: 2 });\r\n // Default fr-FR locale; 2 fraction digits → trailing \",00\"\r\n expect(out).toMatch(/1[\\u00A0\\u202F\\s]234,00/);\r\n });\r\n\r\n test(\"respects maximumFractionDigits\", () => {\r\n const out = fmtMoney(1.23456, \"\", { maximumFractionDigits: 2 });\r\n // Should round to 2 fraction digits in fr-FR (\",23\")\r\n expect(out).toMatch(/1,23\\b/);\r\n });\r\n\r\n test(\"appends the currency suffix when supplied\", () => {\r\n expect(fmtMoney(100, \"EUR\")).toContain(\"EUR\");\r\n expect(fmtMoney(100, \"MAD\")).toContain(\"MAD\");\r\n expect(fmtMoney(100, \"USD\")).toContain(\"USD\");\r\n });\r\n\r\n test(\"omits the currency suffix when blank\", () => {\r\n const out = fmtMoney(100, \"\");\r\n expect(out).not.toMatch(/[A-Z]{3}/);\r\n });\r\n });\r\n\r\n describe(\"locale fallback (the regression-class guard)\", () => {\r\n test(\"does not throw on an invalid BCP-47 tag\", () => {\r\n expect(() =>\r\n fmtMoney(100, \"EUR\", { locale: \"not-a-real-locale\" })\r\n ).not.toThrow();\r\n });\r\n\r\n test(\"falls back to fr-FR formatting on invalid locale\", () => {\r\n const out = fmtMoney(1234.5, \"EUR\", { locale: \"not-a-real-locale\" });\r\n // Should produce the FR comma-decimal form, not crash and\r\n // not return undefined.\r\n expect(out).toMatch(/1[\\u00A0\\u202F\\s]234,5/);\r\n expect(out).toContain(\"EUR\");\r\n });\r\n\r\n test(\"does not throw on garbage object (defensive)\", () => {\r\n // fmtMoney's opts.locale is typed `string | undefined`, but real hosts\r\n // occasionally pass a wrong runtime value. The @ts-expect-error documents\r\n // that this input is intentionally ill-typed and asserts the runtime\r\n // guard (catch → fr-FR fallback) handles any value, not just RangeError.\r\n expect(() =>\r\n // @ts-expect-error — intentional invalid locale type (runtime robustness)\r\n fmtMoney(100, \"EUR\", { locale: 12345 })\r\n ).not.toThrow();\r\n });\r\n });\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|