@cnamts/synapse 1.0.22 → 1.0.24
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/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
- package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
- package/dist/{DateFilter-B5n-ZkLi.js → DateFilter-BpwFexzi.js} +1 -1
- package/dist/DateFilter-DTUl8hb1.cjs +1 -0
- package/dist/{NumberFilter-CtiZ9uj8.js → NumberFilter-Bz_NTdX9.js} +3 -3
- package/dist/NumberFilter-MAEojdk0.cjs +1 -0
- package/dist/PeriodFilter-CC4WgIhl.cjs +1 -0
- package/dist/{PeriodFilter-DzqiMb-b.js → PeriodFilter-DX_wy9g-.js} +1 -1
- package/dist/SelectFilter-BR3fvl-a.cjs +1 -0
- package/dist/SelectFilter-xqiPtPgX.js +135 -0
- package/dist/{TextFilter-BOFRNfcX.js → TextFilter-BBl3JFqK.js} +7 -7
- package/dist/TextFilter-CCfYFl5F.cjs +1 -0
- package/dist/apLightTheme-CFSRrjv2.cjs +1 -0
- package/dist/apLightTheme-D1P4jcD0.js +1231 -0
- package/dist/components/Accordion/Accordion.d.ts +13 -2
- package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +61 -61
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
- package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7506 -10100
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +22 -22
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +42 -42
- package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +130 -147
- package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
- package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +6 -6
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +13 -17
- package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +9 -9
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +29 -507
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +29 -507
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +64 -81
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +640 -780
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +322 -407
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +114 -156
- package/dist/components/DatePicker/composables/index.d.ts +1 -0
- package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
- package/dist/components/ErrorPage/ErrorPage.d.ts +3 -1
- package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
- package/dist/components/FileList/UploadItem/locales.d.ts +1 -4
- package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
- package/dist/components/FileUpload/validateFiles.d.ts +2 -1
- package/dist/components/HeaderBar/HeaderBar.d.ts +2 -1
- package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -1
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +6 -5
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
- package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
- package/dist/components/MonthPicker/MonthPicker.d.ts +1903 -0
- package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1863 -0
- package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
- package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
- package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
- package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
- package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
- package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
- package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
- package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
- package/dist/components/MonthPicker/locales.d.ts +12 -0
- package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
- package/dist/components/NirField/NirField.d.ts +209 -271
- package/dist/components/NirField/locales.d.ts +10 -10
- package/dist/components/NirField/useNirValidation.d.ts +64 -0
- package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
- package/dist/components/PasswordField/PasswordField.d.ts +9 -10
- package/dist/components/PeriodField/PeriodField.d.ts +1379 -1659
- package/dist/components/PhoneField/PhoneField.d.ts +90 -125
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
- package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +1 -1
- package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
- package/dist/components/SyHeading/SyHeading.d.ts +4 -2
- package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +35 -15
- package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +11 -8
- package/dist/components/Tables/SyTable/SyTable.d.ts +11 -8
- package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
- package/dist/components/Tables/common/SyTablePagination.d.ts +21 -23
- package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/locales.d.ts +0 -1
- package/dist/components/Tables/common/types.d.ts +19 -3
- package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
- package/dist/components/Tables/common/usePagination.d.ts +3 -1
- package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
- package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
- package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
- package/dist/components/index.d.ts +1 -0
- package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
- package/dist/composables/rules/useFieldValidation.d.ts +4 -4
- package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
- package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
- package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
- package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
- package/dist/composables/validation/useFormValidation.d.ts +11 -2
- package/dist/composables/validation/useValidation.d.ts +15 -9
- package/dist/design-system-v3.d.ts +2 -0
- package/dist/design-system-v3.js +196 -194
- package/dist/design-system-v3.umd.cjs +1 -1066
- package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
- package/dist/{main-CEl4J8_T.js → main-BtTqyn4z.js} +16983 -15576
- package/dist/main-C1e3eoxd.cjs +1067 -0
- package/dist/synapse.css +1 -0
- package/dist/tooth-11-D3sLWv2n.cjs +1 -0
- package/dist/tooth-12-CXrLuH03.cjs +1 -0
- package/dist/tooth-13-BSfo5fpT.cjs +1 -0
- package/dist/tooth-14-DMzulx0h.cjs +1 -0
- package/dist/tooth-15-BKRFVi-9.cjs +1 -0
- package/dist/tooth-16-CpuxAbuM.cjs +1 -0
- package/dist/tooth-17-BPoahUdg.cjs +1 -0
- package/dist/tooth-18-DhHJz8sy.cjs +1 -0
- package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
- package/dist/tooth-22-C2Tn19sB.cjs +1 -0
- package/dist/tooth-23-C9uaaSGb.cjs +1 -0
- package/dist/tooth-24-BrK9UGpf.cjs +1 -0
- package/dist/tooth-25-CE_EfGNp.cjs +1 -0
- package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
- package/dist/tooth-27-C5J7JkWM.cjs +1 -0
- package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
- package/dist/tooth-31-BrYqmkTi.cjs +1 -0
- package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
- package/dist/tooth-33-DuxvqO2J.cjs +1 -0
- package/dist/tooth-34-BCSCXMB6.cjs +1 -0
- package/dist/tooth-35-BLUXkX88.cjs +1 -0
- package/dist/tooth-36-IrKHYqlA.cjs +1 -0
- package/dist/tooth-37-BYqpdMwo.cjs +1 -0
- package/dist/tooth-38-B_eNXXdu.cjs +1 -0
- package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
- package/dist/tooth-42-szcDqlM0.cjs +1 -0
- package/dist/tooth-43-B3ka6rQm.cjs +1 -0
- package/dist/tooth-44-CazyQucj.cjs +1 -0
- package/dist/tooth-45-B4HQtc8n.cjs +1 -0
- package/dist/tooth-46-BPM40gbG.cjs +1 -0
- package/dist/tooth-47-Dvr20dlh.cjs +1 -0
- package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
- package/dist/tooth-51-OBpwCOF3.cjs +1 -0
- package/dist/tooth-52-aKxyHcmq.cjs +1 -0
- package/dist/tooth-53-vCwJjTOc.cjs +1 -0
- package/dist/tooth-54-DsWu2iFy.cjs +1 -0
- package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
- package/dist/tooth-61-BbLvxMQi.cjs +1 -0
- package/dist/tooth-62-CmTkWczP.cjs +1 -0
- package/dist/tooth-63-DI7l_2qI.cjs +1 -0
- package/dist/tooth-64-B21sOsJh.cjs +1 -0
- package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
- package/dist/tooth-71-D473PPO5.cjs +1 -0
- package/dist/tooth-72-Drh1wnNu.cjs +1 -0
- package/dist/tooth-73-DzlwYI23.cjs +1 -0
- package/dist/tooth-74-8aGvcZPg.cjs +1 -0
- package/dist/tooth-75-BFK7At_r.cjs +1 -0
- package/dist/tooth-81-BZmR-I0M.cjs +1 -0
- package/dist/tooth-82-euVfUUZV.cjs +1 -0
- package/dist/tooth-83-KV010j64.cjs +1 -0
- package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
- package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
- package/dist/vuetifyConfig.js +561 -0
- package/dist/vuetifyConfig.umd.cjs +1 -0
- package/package.json +18 -6
- package/src/assets/apTokens.scss +2 -2
- package/src/assets/overrides/_btns.scss +2 -0
- package/src/assets/overrides/_forms.scss +9 -0
- package/src/assets/overrides/_icons.scss +41 -4
- package/src/assets/overrides/_tables.scss +19 -0
- package/src/assets/overrides/_typography.scss +0 -10
- package/src/components/Accordion/Accordion.mdx +23 -9
- package/src/components/Accordion/Accordion.stories.ts +153 -3
- package/src/components/Accordion/Accordion.vue +7 -6
- package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
- package/src/components/Accordion/composables/useAccordionState.ts +3 -4
- package/src/components/Accordion/tests/accordion.spec.ts +131 -19
- package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
- package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
- package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
- package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
- package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
- package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
- package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
- package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
- package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
- package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +14 -122
- package/src/components/ChipList/ChipList.stories.ts +0 -15
- package/src/components/ChipList/ChipList.vue +5 -1
- package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
- package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
- package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +124 -10
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
- package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +162 -84
- package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
- package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
- package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
- package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +377 -9
- package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +27 -13
- package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
- package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.vue +60 -14
- package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
- package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
- package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
- package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
- package/src/components/Customs/SyIcon/SyIcon.vue +1 -1
- package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
- package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
- package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
- package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
- package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
- package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
- package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
- package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
- package/src/components/Customs/SyPagination/SyPagination.vue +5 -5
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
- package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
- package/src/components/Customs/SyTextField/SyTextField.vue +174 -159
- package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
- package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +47 -0
- package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +155 -10
- package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
- package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
- package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
- package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
- package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
- package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
- package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
- package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
- package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
- package/src/components/DatePicker/composables/index.ts +1 -0
- package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
- package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
- package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
- package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
- package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
- package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
- package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
- package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
- package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
- package/src/components/ErrorPage/ErrorPage.stories.ts +113 -19
- package/src/components/ErrorPage/ErrorPage.vue +17 -2
- package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
- package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +0 -1
- package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
- package/src/components/FileList/FileList.stories.ts +51 -1
- package/src/components/FileList/UploadItem/UploadItem.vue +13 -6
- package/src/components/FileList/UploadItem/locales.ts +3 -12
- package/src/components/FileList/accessibilite/Accessibility.mdx +3 -0
- package/src/components/FileUpload/FileUpload.vue +2 -1
- package/src/components/FileUpload/FileUploadContent.vue +2 -1
- package/src/components/FileUpload/tests/FileUpload.spec.ts +47 -0
- package/src/components/FileUpload/validateFiles.ts +5 -2
- package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
- package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
- package/src/components/HeaderBar/HeaderBar.vue +2 -1
- package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -1
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
- package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
- package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
- package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
- package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
- package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
- package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
- package/src/components/MaintenancePage/MaintenancePage.vue +1 -1
- package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +4 -5
- package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +0 -1
- package/src/components/MonthPicker/MonthPicker.mdx +35 -0
- package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
- package/src/components/MonthPicker/MonthPicker.vue +79 -0
- package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
- package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
- package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
- package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
- package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
- package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
- package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
- package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
- package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
- package/src/components/MonthPicker/locales.ts +12 -0
- package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
- package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1249 -0
- package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
- package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
- package/src/components/NirField/NirField.mdx +1 -2
- package/src/components/NirField/NirField.stories.ts +70 -6
- package/src/components/NirField/NirField.vue +64 -260
- package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
- package/src/components/NirField/locales.ts +1 -1
- package/src/components/NirField/tests/NirField.spec.ts +6 -0
- package/src/components/NirField/useNirValidation.ts +271 -0
- package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +2 -3
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +22 -14
- package/src/components/NotificationBar/Notification/Notification.vue +3 -1
- package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
- package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
- package/src/components/PasswordField/PasswordField.stories.ts +4 -4
- package/src/components/PasswordField/PasswordField.vue +18 -24
- package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
- package/src/components/PeriodField/PeriodField.stories.ts +4 -4
- package/src/components/PeriodField/PeriodField.vue +57 -57
- package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
- package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
- package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
- package/src/components/PhoneField/PhoneField.vue +5 -6
- package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
- package/src/components/RangeField/RangeField.vue +6 -0
- package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
- package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
- package/src/components/StatusPage/StatusPage.stories.ts +118 -0
- package/src/components/StatusPage/StatusPage.vue +5 -3
- package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +22 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +22 -0
- package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +22 -14
- package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
- package/src/components/SyAlert/SyAlert.vue +1 -0
- package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
- package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
- package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
- package/src/components/SyHeading/SyHeading.test.ts +115 -0
- package/src/components/SyHeading/SyHeading.vue +5 -3
- package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
- package/src/components/SyTextArea/SyTextArea.vue +53 -23
- package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
- package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
- package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
- package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
- package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
- package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
- package/src/components/Tables/SyTable/SyTable.mdx +25 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
- package/src/components/Tables/SyTable/SyTable.vue +130 -56
- package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
- package/src/components/Tables/common/SyTableFilter.vue +22 -2
- package/src/components/Tables/common/TableHeader.vue +5 -1
- package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
- package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
- package/src/components/Tables/common/filters/TextFilter.vue +1 -1
- package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
- package/src/components/Tables/common/filters/locales.ts +0 -1
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
- package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
- package/src/components/Tables/common/tableFilterUtils.ts +3 -0
- package/src/components/Tables/common/tableStyles.scss +48 -4
- package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
- package/src/components/Tables/common/types.ts +13 -4
- package/src/components/Tables/common/useClickableTableRow.ts +103 -0
- package/src/components/Tables/common/usePagination.ts +13 -0
- package/src/components/Tables/common/usePinnedColumns.ts +237 -0
- package/src/components/Tables/common/useTableHeaders.ts +3 -3
- package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
- package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +2 -2
- package/src/components/index.ts +1 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
- package/src/composables/date/useDatePickerAccessibility.ts +42 -207
- package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
- package/src/composables/rules/useFieldValidation.ts +34 -17
- package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
- package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
- package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
- package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
- package/src/composables/unifyValidation/useValidation.ts +190 -0
- package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
- package/src/composables/useFormFieldErrorHandling.ts +15 -9
- package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
- package/src/composables/validation/tests/useValidation.spec.ts +116 -21
- package/src/composables/validation/useFormValidation.ts +20 -13
- package/src/composables/validation/useValidatable.ts +8 -1
- package/src/composables/validation/useValidation.ts +135 -99
- package/src/composantsVuetify/Introduction.mdx +48 -0
- package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
- package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
- package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
- package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
- package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
- package/src/stories/Components/Components.stories.ts +74 -9
- package/src/stories/Demarrer/Accueil.stories.ts +3 -3
- package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
- package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
- package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
- package/dist/SelectFilter-BOYlF7rX.js +0 -136
- package/dist/style.css +0 -1
- package/src/components/DatePicker/Accessibilite.mdx +0 -14
|
@@ -29,7 +29,7 @@ export const useDateValidation = (options: {
|
|
|
29
29
|
// Fonctions de validation
|
|
30
30
|
clearValidation: () => void
|
|
31
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles personnalisées
|
|
32
|
-
validateField: (value: any, rules?: any[], warningRules?: any[]) => ValidationResult
|
|
32
|
+
validateField: (value: any, rules?: any[], warningRules?: any[]) => ValidationResult | Promise<ValidationResult>
|
|
33
33
|
|
|
34
34
|
// Références aux messages
|
|
35
35
|
errors: Ref<string[]>
|
|
@@ -60,7 +60,7 @@ export const useDateValidation = (options: {
|
|
|
60
60
|
* @param forceValidation - Force la validation même si isUpdatingFromInternal est vrai
|
|
61
61
|
* @returns Résultat de la validation
|
|
62
62
|
*/
|
|
63
|
-
const validateDates = (forceValidation = false): ValidationResult => {
|
|
63
|
+
const validateDates = (forceValidation = false): ValidationResult | Promise<ValidationResult> => {
|
|
64
64
|
const currentCustomRules = unref(customRules)
|
|
65
65
|
const currentCustomWarningRules = unref(customWarningRules)
|
|
66
66
|
|
|
@@ -152,64 +152,65 @@ export const useDateValidation = (options: {
|
|
|
152
152
|
? selectedDates.value.filter(Boolean) // Filtrer les valeurs null
|
|
153
153
|
: [selectedDates.value]
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// Valider chaque date
|
|
158
|
-
if (shouldDisplayErrors) {
|
|
159
|
-
datesToValidate.forEach((date) => {
|
|
160
|
-
if (!date) return // Ignorer les dates null
|
|
161
|
-
|
|
162
|
-
const result = validateField(
|
|
163
|
-
date,
|
|
164
|
-
currentCustomRules,
|
|
165
|
-
currentCustomWarningRules,
|
|
166
|
-
)
|
|
167
|
-
if (result.hasError) {
|
|
168
|
-
isValid = false
|
|
169
|
-
}
|
|
170
|
-
})
|
|
155
|
+
const finalizeValidation = (isValid: boolean): ValidationResult => {
|
|
156
|
+
let finalIsValid = isValid
|
|
171
157
|
|
|
172
158
|
// Vérifier la validité de la plage de dates si en mode plage
|
|
173
159
|
if (displayRange && Array.isArray(selectedDates.value) && selectedDates.value.length >= 2) {
|
|
174
|
-
// Récupérer les dates de début et de fin
|
|
175
160
|
const startDate = selectedDates.value[0]
|
|
176
161
|
const endDate = selectedDates.value[selectedDates.value.length - 1]
|
|
177
162
|
|
|
178
|
-
// Vérifier si les deux dates sont présentes et si la plage est valide
|
|
179
163
|
if (startDate && endDate && startDate.getTime() > endDate.getTime()) {
|
|
180
|
-
// La date de fin est antérieure à la date de début
|
|
181
164
|
const rangeError = DATE_PICKER_MESSAGES.ERROR_END_BEFORE_START
|
|
182
165
|
if (!errors.value.includes(rangeError)) {
|
|
183
166
|
errors.value.push(rangeError)
|
|
184
|
-
|
|
167
|
+
finalIsValid = false
|
|
185
168
|
}
|
|
186
169
|
}
|
|
187
|
-
// Utiliser également la validation du composable useDateRangeValidation
|
|
188
170
|
else if (!currentRangeIsValid.value) {
|
|
189
171
|
const rangeError = getRangeValidationError.value
|
|
190
172
|
if (rangeError && !errors.value.includes(rangeError)) {
|
|
191
173
|
errors.value.push(rangeError)
|
|
192
|
-
|
|
174
|
+
finalIsValid = false
|
|
193
175
|
}
|
|
194
176
|
}
|
|
195
177
|
}
|
|
196
178
|
|
|
197
|
-
// Dédoublonner les messages (au cas où plusieurs dates auraient les mêmes messages)
|
|
198
179
|
errors.value = [...new Set(errors.value)]
|
|
199
180
|
warnings.value = [...new Set(warnings.value)]
|
|
200
181
|
successes.value = [...new Set(successes.value)]
|
|
182
|
+
|
|
183
|
+
return {
|
|
184
|
+
hasError: !finalIsValid,
|
|
185
|
+
hasWarning: warnings.value.length > 0,
|
|
186
|
+
hasSuccess: successes.value.length > 0 && finalIsValid && warnings.value.length === 0,
|
|
187
|
+
state: {
|
|
188
|
+
errors: errors.value,
|
|
189
|
+
warnings: warnings.value,
|
|
190
|
+
successes: successes.value,
|
|
191
|
+
},
|
|
192
|
+
}
|
|
201
193
|
}
|
|
202
194
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
hasWarning: warnings.value.length > 0,
|
|
206
|
-
hasSuccess: successes.value.length > 0 && isValid && warnings.value.length === 0,
|
|
207
|
-
state: {
|
|
208
|
-
errors: errors.value,
|
|
209
|
-
warnings: warnings.value,
|
|
210
|
-
successes: successes.value,
|
|
211
|
-
},
|
|
195
|
+
if (!shouldDisplayErrors) {
|
|
196
|
+
return finalizeValidation(true)
|
|
212
197
|
}
|
|
198
|
+
|
|
199
|
+
const validationResults = datesToValidate
|
|
200
|
+
.filter(Boolean)
|
|
201
|
+
.map(date => validateField(date, currentCustomRules, currentCustomWarningRules))
|
|
202
|
+
|
|
203
|
+
if (validationResults.some(result => result instanceof Promise)) {
|
|
204
|
+
return Promise
|
|
205
|
+
.all(validationResults.map(result => Promise.resolve(result)))
|
|
206
|
+
.then((resolvedResults) => {
|
|
207
|
+
const hasError = resolvedResults.some(result => result.hasError)
|
|
208
|
+
return finalizeValidation(!hasError)
|
|
209
|
+
})
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const hasError = (validationResults as ValidationResult[]).some(result => result.hasError)
|
|
213
|
+
return finalizeValidation(!hasError)
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
/**
|
|
@@ -217,7 +218,7 @@ export const useDateValidation = (options: {
|
|
|
217
218
|
*
|
|
218
219
|
* @returns Résultat de la validation
|
|
219
220
|
*/
|
|
220
|
-
const validateOnSubmit = (): ValidationResult => {
|
|
221
|
+
const validateOnSubmit = (): ValidationResult | Promise<ValidationResult> => {
|
|
221
222
|
return validateDates(true)
|
|
222
223
|
}
|
|
223
224
|
|
|
@@ -28,7 +28,7 @@ export const useInputBlurHandler = (options: {
|
|
|
28
28
|
parseDate: (dateStr: string, format: string) => Date | null
|
|
29
29
|
formatDate: (date: Date, format: string) => string
|
|
30
30
|
updateModel: (value: DateValue) => void
|
|
31
|
-
validateManualInput: (value: string) => boolean
|
|
31
|
+
validateManualInput: (value: string) => boolean | Promise<boolean>
|
|
32
32
|
|
|
33
33
|
// Émetteurs d'événements
|
|
34
34
|
emitBlur: () => void
|
|
@@ -54,7 +54,7 @@ export const useInputBlurHandler = (options: {
|
|
|
54
54
|
/**
|
|
55
55
|
* Gère la perte de focus du champ de saisie de date
|
|
56
56
|
*/
|
|
57
|
-
const handleInputBlur = () => {
|
|
57
|
+
const handleInputBlur = async () => {
|
|
58
58
|
// Émettre l'événement blur
|
|
59
59
|
emitBlur()
|
|
60
60
|
|
|
@@ -155,7 +155,7 @@ export const useInputBlurHandler = (options: {
|
|
|
155
155
|
// Note: La vérification du type string a déjà été faite plus haut
|
|
156
156
|
// et on retourne si ce n'est pas une chaîne, donc ici displayFormattedDate.value est forcément une chaîne
|
|
157
157
|
if (displayFormattedDate.value) {
|
|
158
|
-
validateManualInput(displayFormattedDate.value || '')
|
|
158
|
+
await Promise.resolve(validateManualInput(displayFormattedDate.value || ''))
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
@@ -31,7 +31,7 @@ export const useManualDateValidation = (options: {
|
|
|
31
31
|
validateDateFormat: (dateStr: string) => { isValid: boolean, message: string }
|
|
32
32
|
isDateComplete: (value: string) => boolean
|
|
33
33
|
parseDate: (dateStr: string, format: string) => Date | null
|
|
34
|
-
validateField: (value: unknown, rules?: CustomRule[], warningRules?: CustomRule[]) => ValidationResult
|
|
34
|
+
validateField: (value: unknown, rules?: CustomRule[], warningRules?: CustomRule[]) => ValidationResult | Promise<ValidationResult>
|
|
35
35
|
}) => {
|
|
36
36
|
const {
|
|
37
37
|
format,
|
|
@@ -57,7 +57,7 @@ export const useManualDateValidation = (options: {
|
|
|
57
57
|
* @param value - Chaîne de date à valider
|
|
58
58
|
* @returns Booléen indiquant si la saisie est valide
|
|
59
59
|
*/
|
|
60
|
-
const validateManualInput = (value: string): boolean => {
|
|
60
|
+
const validateManualInput = (value: string): boolean | Promise<boolean> => {
|
|
61
61
|
// Réinitialiser la validation
|
|
62
62
|
clearValidation()
|
|
63
63
|
|
|
@@ -129,6 +129,10 @@ export const useManualDateValidation = (options: {
|
|
|
129
129
|
safeWarningRules,
|
|
130
130
|
)
|
|
131
131
|
|
|
132
|
+
if (result instanceof Promise) {
|
|
133
|
+
return result.then(resolvedResult => !resolvedResult.hasError)
|
|
134
|
+
}
|
|
135
|
+
|
|
132
136
|
return !result.hasError
|
|
133
137
|
}
|
|
134
138
|
|
|
@@ -1,10 +1,78 @@
|
|
|
1
|
-
import { Meta, Story } from '@storybook/
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Story } from '@storybook/blocks';
|
|
2
|
+
import * as DiacriticPickerStories from '../DiacriticPicker.stories';
|
|
3
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
|
+
import {
|
|
5
|
+
AccessibilityGuideLayout,
|
|
6
|
+
CriteriaSection,
|
|
7
|
+
CriteriaCard,
|
|
8
|
+
DemoSection,
|
|
9
|
+
BestPracticesSection,
|
|
10
|
+
ResourcesSection,
|
|
11
|
+
AuditSection,
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
13
|
|
|
5
|
-
<Meta of={
|
|
14
|
+
<Meta of={DiacriticPickerStories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="DiacriticPicker"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/"
|
|
20
|
+
>
|
|
21
|
+
<CriteriaSection>
|
|
22
|
+
<CriteriaCard icon="🔍" title="Structure sémantique et rôles ARIA">
|
|
23
|
+
<ul>
|
|
24
|
+
<li><strong>Bouton déclencheur</strong> : Utilise <code>aria-controls</code> et <code>aria-haspopup="dialog"</code> pour indiquer la relation avec le dialogue.</li>
|
|
25
|
+
<li><strong>État du dialogue</strong> : <code>aria-expanded</code> reflète l'état d'ouverture/fermeture du dialogue.</li>
|
|
26
|
+
<li><strong>Rôle du dialogue</strong> : <code>role="dialog"</code> et <code>aria-modal="true"</code> sur le VDialog.</li>
|
|
27
|
+
<li><strong>Labellisation</strong> : <code>aria-labelledby</code> lie le dialogue au bouton déclencheur.</li>
|
|
28
|
+
<li><strong>Groupes de caractères</strong> : Utilisation de <code>role="group"</code> avec <code>aria-label</code> pour organiser les caractères minuscules et majuscules.</li>
|
|
29
|
+
</ul>
|
|
30
|
+
</CriteriaCard>
|
|
31
|
+
|
|
32
|
+
<CriteriaCard icon="⌨️" title="Navigation clavier et focus">
|
|
33
|
+
<ul>
|
|
34
|
+
<li><strong>Gestion du focus</strong> : Le focus retourne automatiquement au champ après insertion d'un caractère.</li>
|
|
35
|
+
<li><strong>Position du curseur</strong> : Maintien et restauration précise de la position du curseur après insertion.</li>
|
|
36
|
+
<li><strong>Focus trap</strong> : <code>retain-focus="false"</code> sur le VDialog.</li>
|
|
37
|
+
</ul>
|
|
38
|
+
</CriteriaCard>
|
|
39
|
+
|
|
40
|
+
<CriteriaCard icon="🎨" title="Styles et contrastes">
|
|
41
|
+
<ul>
|
|
42
|
+
<li><strong>Dialogue</strong> : Fond <code>grey-lighten-2</code> sur le VCard.</li>
|
|
43
|
+
<li><strong>Boutons du dialogue</strong> : Taille "small" avec classe <code>ma-1</code>.</li>
|
|
44
|
+
</ul>
|
|
45
|
+
</CriteriaCard>
|
|
46
|
+
|
|
47
|
+
<CriteriaCard icon="🔧" title="Accessibilité du champ associé">
|
|
48
|
+
<ul>
|
|
49
|
+
<li><strong>Labellisation automatique</strong> : Ajout de <code>aria-label</code> si le champ n'a ni <code>aria-label</code> ni <code>aria-labelledby</code>.</li>
|
|
50
|
+
<li><strong>Détection du champ</strong> : Recherche automatique des inputs/textarea dans le slot via <code>getNativeInput()</code>.</li>
|
|
51
|
+
<li><strong>Wrapper</strong> : Conteneur avec <code>role="textbox"</code> et <code>tabindex="0"</code>.</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</CriteriaCard>
|
|
54
|
+
</CriteriaSection>
|
|
55
|
+
|
|
56
|
+
<DemoSection componentName="DiacriticPicker">
|
|
57
|
+
<Story of={DiacriticPickerStories.Default} />
|
|
58
|
+
</DemoSection>
|
|
59
|
+
|
|
60
|
+
<BestPracticesSection>
|
|
61
|
+
<ul>
|
|
62
|
+
<li>Fournissez un <code>inputAriaLabel</code> descriptif si le champ n'a pas de label visible.</li>
|
|
63
|
+
<li>Personnalisez <code>btnTitle</code> pour refléter les caractères utilisés.</li>
|
|
64
|
+
<li>Adaptez la liste des <code>diacritics</code> selon les besoins linguistiques.</li>
|
|
65
|
+
<li>Vérifiez que les caractères affichés dans <code>btnTitle</code> sont inclus dans la liste <code>diacritics</code>.</li>
|
|
66
|
+
</ul>
|
|
67
|
+
</BestPracticesSection>
|
|
68
|
+
|
|
69
|
+
<ResourcesSection>
|
|
70
|
+
<ul>
|
|
71
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Dialogues modaux</a></li>
|
|
72
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/keyboard-operation.html" target="_blank" rel="noopener noreferrer">WCAG : Opération au clavier</a></li>
|
|
73
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#7.1" target="_blank" rel="noopener noreferrer">RGAA : Consultation par navigation clavier</a></li>
|
|
74
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#11.9" target="_blank" rel="noopener noreferrer">RGAA : Structuration de l'information</a></li>
|
|
75
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/button/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Boutons</a></li>
|
|
76
|
+
</ul>
|
|
77
|
+
</ResourcesSection>
|
|
78
|
+
</AccessibilityGuideLayout>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { describe, it } from 'vitest'
|
|
4
|
+
import { mount } from '@vue/test-utils'
|
|
5
|
+
import { axe } from 'vitest-axe'
|
|
6
|
+
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
|
+
import DownloadBtn from '../DownloadBtn.vue'
|
|
8
|
+
|
|
9
|
+
describe('DownloadBtn – accessibility (axe)', () => {
|
|
10
|
+
it('has no obvious axe violations', async () => {
|
|
11
|
+
const wrapper = mount(DownloadBtn, {
|
|
12
|
+
props: {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- deso
|
|
14
|
+
filePromise: () => Promise.resolve({ data: new Blob(), status: 200, statusText: 'OK', headers: {}, config: {} as any }),
|
|
15
|
+
fallbackFilename: 'file.pdf',
|
|
16
|
+
},
|
|
17
|
+
slots: {
|
|
18
|
+
default: 'Télécharger',
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
23
|
+
assertNoA11yViolations(results, 'DownloadBtn – default state')
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -75,12 +75,53 @@ export const WithLink: Story = {
|
|
|
75
75
|
},
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
export const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
export const CustomIllustration: Story = {
|
|
79
|
+
decorators: [
|
|
80
|
+
() => ({ template: '<div style="padding: 20px; background: rgb(231, 236, 245)"><story /></div>' }),
|
|
81
|
+
],
|
|
82
|
+
parameters: {
|
|
83
|
+
sourceCode: [
|
|
84
|
+
{
|
|
85
|
+
name: 'Template',
|
|
86
|
+
code: `
|
|
87
|
+
<template>
|
|
88
|
+
<div style="padding: 20px; background: rgb(231, 236, 245)">
|
|
89
|
+
<ErrorPage>
|
|
90
|
+
<template #illustration>
|
|
91
|
+
<div style="width: 260px; height: 200px; display: grid; place-items: center; border-radius: 12px; background: white; border: 2px dashed #0D419A;">
|
|
92
|
+
<span style="font-weight: 700; color: #0D419A;">Illustration</span>
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
95
|
+
</ErrorPage>
|
|
96
|
+
</div>
|
|
97
|
+
</template>
|
|
98
|
+
`,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'Script',
|
|
102
|
+
code: `
|
|
103
|
+
<script setup lang="ts">
|
|
104
|
+
import { ErrorPage } from '@cnamts/synapse'
|
|
105
|
+
</script>
|
|
106
|
+
`,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
83
109
|
},
|
|
110
|
+
render: () => ({
|
|
111
|
+
components: { ErrorPage },
|
|
112
|
+
template: `
|
|
113
|
+
<ErrorPage>
|
|
114
|
+
<template #illustration>
|
|
115
|
+
<div style="width: 260px; height: 200px; display: grid; place-items: center; border-radius: 12px; background: white; border: 2px dashed #0D419A;">
|
|
116
|
+
<span style="font-weight: 700; color: #0D419A;">Illustration</span>
|
|
117
|
+
</div>
|
|
118
|
+
</template>
|
|
119
|
+
</ErrorPage>
|
|
120
|
+
`,
|
|
121
|
+
}),
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export const SlotAction: Story = {
|
|
84
125
|
decorators: [
|
|
85
126
|
() => ({ template: '<div style="padding: 20px; background: rgb(231, 236, 245)"><story /></div>' }),
|
|
86
127
|
],
|
|
@@ -91,14 +132,19 @@ export const WithRole: Story = {
|
|
|
91
132
|
code: `
|
|
92
133
|
<template>
|
|
93
134
|
<div style="padding: 20px; background: rgb(231, 236, 245)">
|
|
94
|
-
<ErrorPage
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
135
|
+
<ErrorPage :hide-btn="true">
|
|
136
|
+
<template #action>
|
|
137
|
+
<div style="display: flex; gap: 8px; margin-top: 16px;">
|
|
138
|
+
<VBtn href="/" color="primary">Retour à l'accueil</VBtn>
|
|
139
|
+
<VBtn variant="outlined" color="primary">Déconnexion</VBtn>
|
|
140
|
+
</div>
|
|
141
|
+
</template>
|
|
142
|
+
</ErrorPage>
|
|
98
143
|
</div>
|
|
99
144
|
</template>
|
|
100
145
|
`,
|
|
101
|
-
},
|
|
146
|
+
},
|
|
147
|
+
{
|
|
102
148
|
name: 'Script',
|
|
103
149
|
code: `
|
|
104
150
|
<script setup lang="ts">
|
|
@@ -108,9 +154,22 @@ export const WithRole: Story = {
|
|
|
108
154
|
},
|
|
109
155
|
],
|
|
110
156
|
},
|
|
157
|
+
render: () => ({
|
|
158
|
+
components: { ErrorPage },
|
|
159
|
+
template: `
|
|
160
|
+
<ErrorPage :hide-btn="true">
|
|
161
|
+
<template #action>
|
|
162
|
+
<div style="display: flex; gap: 8px; margin-top: 16px;">
|
|
163
|
+
<VBtn href="/" color="primary">Retour à l'accueil</VBtn>
|
|
164
|
+
<VBtn variant="outlined" color="primary">Déconnexion</VBtn>
|
|
165
|
+
</div>
|
|
166
|
+
</template>
|
|
167
|
+
</ErrorPage>
|
|
168
|
+
`,
|
|
169
|
+
}),
|
|
111
170
|
}
|
|
112
171
|
|
|
113
|
-
export const
|
|
172
|
+
export const SlotAdditionalContent: Story = {
|
|
114
173
|
decorators: [
|
|
115
174
|
() => ({ template: '<div style="padding: 20px; background: rgb(231, 236, 245)"><story /></div>' }),
|
|
116
175
|
],
|
|
@@ -122,10 +181,10 @@ export const CustomIllustration: Story = {
|
|
|
122
181
|
<template>
|
|
123
182
|
<div style="padding: 20px; background: rgb(231, 236, 245)">
|
|
124
183
|
<ErrorPage>
|
|
125
|
-
<template #
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
</
|
|
184
|
+
<template #additional-content>
|
|
185
|
+
<p style="text-align: center; color: #555;">
|
|
186
|
+
Si le problème persiste, veuillez contacter le support technique.
|
|
187
|
+
</p>
|
|
129
188
|
</template>
|
|
130
189
|
</ErrorPage>
|
|
131
190
|
</div>
|
|
@@ -146,12 +205,47 @@ export const CustomIllustration: Story = {
|
|
|
146
205
|
components: { ErrorPage },
|
|
147
206
|
template: `
|
|
148
207
|
<ErrorPage>
|
|
149
|
-
<template #
|
|
150
|
-
<
|
|
151
|
-
|
|
152
|
-
</
|
|
208
|
+
<template #additional-content>
|
|
209
|
+
<p style="text-align: center; color: #555;">
|
|
210
|
+
Si le problème persiste, veuillez contacter le support technique.
|
|
211
|
+
</p>
|
|
153
212
|
</template>
|
|
154
213
|
</ErrorPage>
|
|
155
214
|
`,
|
|
156
215
|
}),
|
|
157
216
|
}
|
|
217
|
+
|
|
218
|
+
export const WithRole: Story = {
|
|
219
|
+
args: {
|
|
220
|
+
...Default.args,
|
|
221
|
+
role: 'region',
|
|
222
|
+
uniqueId: 'error-page-region',
|
|
223
|
+
},
|
|
224
|
+
decorators: [
|
|
225
|
+
() => ({ template: '<div style="padding: 20px; background: rgb(231, 236, 245)"><story /></div>' }),
|
|
226
|
+
],
|
|
227
|
+
parameters: {
|
|
228
|
+
sourceCode: [
|
|
229
|
+
{
|
|
230
|
+
name: 'Template',
|
|
231
|
+
code: `
|
|
232
|
+
<template>
|
|
233
|
+
<div style="padding: 20px; background: rgb(231, 236, 245)">
|
|
234
|
+
<ErrorPage
|
|
235
|
+
role="region"
|
|
236
|
+
unique-id="error-page-region"
|
|
237
|
+
/>
|
|
238
|
+
</div>
|
|
239
|
+
</template>
|
|
240
|
+
`,
|
|
241
|
+
}, {
|
|
242
|
+
name: 'Script',
|
|
243
|
+
code: `
|
|
244
|
+
<script setup lang="ts">
|
|
245
|
+
import { ErrorPage } from '@cnamts/synapse'
|
|
246
|
+
</script>
|
|
247
|
+
`,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
btnHref?: string
|
|
16
16
|
btnLink?: RouteRecordRaw | string
|
|
17
17
|
hideBtn?: boolean
|
|
18
|
-
headingLevel
|
|
18
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
|
|
19
19
|
uniqueId?: string
|
|
20
20
|
role?: PageAriaRole
|
|
21
21
|
}>()
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
:btn-href="props.btnHref"
|
|
40
40
|
:btn-link="props.btnLink"
|
|
41
41
|
:hide-btn="props.hideBtn"
|
|
42
|
-
:unique-id="props.uniqueId"
|
|
42
|
+
:unique-id="props.uniqueId ?? undefined"
|
|
43
|
+
:heading-level="props.headingLevel"
|
|
43
44
|
:role="props.role"
|
|
44
45
|
>
|
|
45
46
|
<template
|
|
@@ -55,6 +56,20 @@
|
|
|
55
56
|
>
|
|
56
57
|
</slot>
|
|
57
58
|
</template>
|
|
59
|
+
|
|
60
|
+
<template
|
|
61
|
+
v-if="$slots.action"
|
|
62
|
+
#action
|
|
63
|
+
>
|
|
64
|
+
<slot name="action" />
|
|
65
|
+
</template>
|
|
66
|
+
|
|
67
|
+
<template
|
|
68
|
+
v-if="$slots['additional-content']"
|
|
69
|
+
#additional-content
|
|
70
|
+
>
|
|
71
|
+
<slot name="additional-content" />
|
|
72
|
+
</template>
|
|
58
73
|
</StatusPage>
|
|
59
74
|
</template>
|
|
60
75
|
|
|
@@ -18,4 +18,21 @@ describe('ErrorPage – accessibility (axe)', () => {
|
|
|
18
18
|
ignoreRules: ['region'],
|
|
19
19
|
})
|
|
20
20
|
})
|
|
21
|
+
|
|
22
|
+
it('has no obvious axe violations with #action slot', async () => {
|
|
23
|
+
const wrapper = mount(ErrorPage, {
|
|
24
|
+
attachTo: document.body,
|
|
25
|
+
props: { headingLevel: 1, hideBtn: true },
|
|
26
|
+
slots: {
|
|
27
|
+
action: '<button>Retour à l\'accueil</button>',
|
|
28
|
+
},
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const results = await axe(document.body)
|
|
32
|
+
assertNoA11yViolations(results, 'ErrorPage – action slot', {
|
|
33
|
+
ignoreRules: ['region'],
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
wrapper.unmount()
|
|
37
|
+
})
|
|
21
38
|
})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { shallowMount } from '@vue/test-utils'
|
|
2
|
+
import { mount, shallowMount } from '@vue/test-utils'
|
|
3
3
|
import ErrorPage from '../ErrorPage.vue'
|
|
4
4
|
|
|
5
5
|
describe('ErrorPage', () => {
|
|
@@ -8,4 +8,24 @@ describe('ErrorPage', () => {
|
|
|
8
8
|
|
|
9
9
|
expect(wrapper.html()).toMatchSnapshot()
|
|
10
10
|
})
|
|
11
|
+
|
|
12
|
+
it('renders #action slot content', () => {
|
|
13
|
+
const wrapper = mount(ErrorPage, {
|
|
14
|
+
slots: {
|
|
15
|
+
action: '<button>Retour à l\'accueil</button>',
|
|
16
|
+
},
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
expect(wrapper.html()).toContain('Retour à l\'accueil')
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
it('renders #additional-content slot content', () => {
|
|
23
|
+
const wrapper = mount(ErrorPage, {
|
|
24
|
+
slots: {
|
|
25
|
+
'additional-content': '<p>Contenu additionnel</p>',
|
|
26
|
+
},
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
expect(wrapper.html()).toContain('Contenu additionnel')
|
|
30
|
+
})
|
|
11
31
|
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { describe, it } from 'vitest'
|
|
4
|
+
import { mount } from '@vue/test-utils'
|
|
5
|
+
import { axe } from 'vitest-axe'
|
|
6
|
+
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
|
+
import ExternalLinks from '../ExternalLinks.vue'
|
|
8
|
+
|
|
9
|
+
describe('ExternalLinks – accessibility (axe)', () => {
|
|
10
|
+
it('has no obvious axe violations', async () => {
|
|
11
|
+
const wrapper = mount(ExternalLinks, {
|
|
12
|
+
props: {
|
|
13
|
+
items: [
|
|
14
|
+
{ text: 'ameli.fr', href: 'https://ameli.fr' },
|
|
15
|
+
{ text: 'Legifrance', href: 'https://legifrance.gouv.fr' },
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
21
|
+
assertNoA11yViolations(results, 'ExternalLinks – default state')
|
|
22
|
+
})
|
|
23
|
+
})
|