@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
|
@@ -1,10 +1,88 @@
|
|
|
1
|
-
import { Meta, Story } from '@storybook/
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Story } from '@storybook/blocks';
|
|
2
|
+
import * as CaptchaStories from '../Captcha.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={CaptchaStories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="Captcha"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
>
|
|
20
|
+
|
|
21
|
+
<CriteriaSection>
|
|
22
|
+
<CriteriaCard icon="🖼️" title="Images et alternatives textuelles">
|
|
23
|
+
<ul>
|
|
24
|
+
<li><strong>Image captcha</strong> : Attribut <code>alt</code> avec <code>locales.captchaImgAlt</code> ("Le captcha à saisir").</li>
|
|
25
|
+
<li><strong>Skeleton loader</strong> : <code>aria-label</code> avec <code>locales.captchaImgLoading</code> pendant le chargement.</li>
|
|
26
|
+
<li><strong>Gestion des erreurs</strong> : Émission de l'événement <code>imageError</code> en cas d'échec de chargement.</li>
|
|
27
|
+
</ul>
|
|
28
|
+
</CriteriaCard>
|
|
29
|
+
|
|
30
|
+
<CriteriaCard icon="🎵" title="Captcha audio et contrôles">
|
|
31
|
+
<ul>
|
|
32
|
+
<li><strong>Bouton audio</strong> : <code>aria-label</code> dynamique avec <code>locales.audio.loading</code> pendant le chargement.</li>
|
|
33
|
+
<li><strong>Icônes décoratives</strong> : <code>aria-hidden="true"</code> sur les icônes volume-up et SyIcon décoratives.</li>
|
|
34
|
+
<li><strong>États lecture/pause</strong> : Texte alternatif avec <code>locales.pause</code> et <code>locales.play</code>.</li>
|
|
35
|
+
</ul>
|
|
36
|
+
</CriteriaCard>
|
|
37
|
+
|
|
38
|
+
<CriteriaCard icon="📝" title="Formulaires et champs de saisie">
|
|
39
|
+
<ul>
|
|
40
|
+
<li><strong>Champ de saisie</strong> : Utilise <code>SyTextField</code> avec label descriptif selon le type (image/audio).</li>
|
|
41
|
+
<li><strong>Validation</strong> : Règle personnalisée avec message <code>locales.required</code>.</li>
|
|
42
|
+
<li><strong>États du champ</strong> : Désactivé si rejeté, readonly si succès, messages d'erreur.</li>
|
|
43
|
+
<li><strong>Labellisation</strong> : Labels spécifiques avec <code>locales.image.textfieldLabel</code> et <code>locales.audio.textfieldLabel</code>.</li>
|
|
44
|
+
</ul>
|
|
45
|
+
</CriteriaCard>
|
|
46
|
+
|
|
47
|
+
<CriteriaCard icon="🔄" title="Boutons d'action et navigation">
|
|
48
|
+
<ul>
|
|
49
|
+
<li><strong>Texte masqué</strong> : <code><p class="d-sr-only"></code> avec <code>locales.renew</code> pour le bouton de renouvellement.</li>
|
|
50
|
+
<li><strong>Icônes décoratives</strong> : Attribut <code>decorative</code> sur les SyIcon pour ne pas polluer les lecteurs d'écran.</li>
|
|
51
|
+
<li><strong>Boutons configurables</strong> : Utilisation de <code>CaptchaBtn</code> avec icônes et textes appropriés.</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</CriteriaCard>
|
|
54
|
+
|
|
55
|
+
<CriteriaCard icon="⚠️" title="Alertes et messages d'erreur">
|
|
56
|
+
<ul>
|
|
57
|
+
<li><strong>Composant d'alerte</strong> : Utilise <code>VAlert</code> avec couleur "error" et variant "text".</li>
|
|
58
|
+
<li><strong>Icône d'erreur</strong> : SyIcon décoratif avec <code>mdiAlertCircleOutline</code>.</li>
|
|
59
|
+
<li><strong>Cliquabilité</strong> : L'alerte est cliquable pour renouveler le captcha.</li>
|
|
60
|
+
</ul>
|
|
61
|
+
</CriteriaCard>
|
|
62
|
+
</CriteriaSection>
|
|
63
|
+
|
|
64
|
+
<DemoSection componentName="Captcha">
|
|
65
|
+
<Story of={CaptchaStories.Default} />
|
|
66
|
+
</DemoSection>
|
|
67
|
+
|
|
68
|
+
<BestPracticesSection>
|
|
69
|
+
<ul>
|
|
70
|
+
<li>Fournissez toujours les URLs requises (<code>urlCreate</code>, <code>urlGetImage</code>, <code>urlGetAudio</code>).</li>
|
|
71
|
+
<li>Personnalisez les <code>locales</code> pour adapter les messages à votre langue.</li>
|
|
72
|
+
<li>Configurez un <code>helpDesk</code> approprié pour les utilisateurs en difficulté.</li>
|
|
73
|
+
<li>Utilisez <code>tagTitle</code> pour un niveau de titre cohérent avec votre page.</li>
|
|
74
|
+
<li>Gérez les erreurs avec <code>errorMessage</code> pour un feedback clair.</li>
|
|
75
|
+
<li>Testez les deux modes (image et audio) pour une accessibilité complète.</li>
|
|
76
|
+
</ul>
|
|
77
|
+
</BestPracticesSection>
|
|
78
|
+
|
|
79
|
+
<ResourcesSection>
|
|
80
|
+
<ul>
|
|
81
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html" target="_blank" rel="noopener noreferrer">WCAG : Contenu non textuel</a></li>
|
|
82
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/error-identification.html" target="_blank" rel="noopener noreferrer">WCAG : Identification des erreurs</a></li>
|
|
83
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/alert/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Alertes</a></li>
|
|
84
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.4" target="_blank" rel="noopener noreferrer">RGAA : Captchas</a></li>
|
|
85
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.5" target="_blank" rel="noopener noreferrer">RGAA : Solution d’accès alternatif</a></li>
|
|
86
|
+
</ul>
|
|
87
|
+
</ResourcesSection>
|
|
88
|
+
</AccessibilityGuideLayout>
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi, afterEach } from 'vitest'
|
|
2
2
|
import { mount } from '@vue/test-utils'
|
|
3
|
-
|
|
4
3
|
import Captcha from '../Captcha.vue'
|
|
5
|
-
import { vuetify } from '@tests/unit/setup'
|
|
6
4
|
|
|
7
5
|
describe('Captcha', () => {
|
|
8
6
|
afterEach(() => {
|
|
@@ -18,9 +16,6 @@ describe('Captcha', () => {
|
|
|
18
16
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
19
17
|
|
|
20
18
|
const wrapper = mount(Captcha, {
|
|
21
|
-
global: {
|
|
22
|
-
plugins: [vuetify],
|
|
23
|
-
},
|
|
24
19
|
props: {
|
|
25
20
|
urlCreate: '/captcha/captcha.json',
|
|
26
21
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -60,9 +55,6 @@ describe('Captcha', () => {
|
|
|
60
55
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
61
56
|
|
|
62
57
|
const wrapper = mount(Captcha, {
|
|
63
|
-
global: {
|
|
64
|
-
plugins: [vuetify],
|
|
65
|
-
},
|
|
66
58
|
props: {
|
|
67
59
|
urlCreate: '/captcha/captcha.json',
|
|
68
60
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -101,9 +93,6 @@ describe('Captcha', () => {
|
|
|
101
93
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
102
94
|
|
|
103
95
|
const wrapper = mount(Captcha, {
|
|
104
|
-
global: {
|
|
105
|
-
plugins: [vuetify],
|
|
106
|
-
},
|
|
107
96
|
props: {
|
|
108
97
|
urlCreate: '/captcha/captcha.json',
|
|
109
98
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -124,9 +113,6 @@ describe('Captcha', () => {
|
|
|
124
113
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
125
114
|
|
|
126
115
|
const wrapper = mount(Captcha, {
|
|
127
|
-
global: {
|
|
128
|
-
plugins: [vuetify],
|
|
129
|
-
},
|
|
130
116
|
props: {
|
|
131
117
|
urlCreate: '/captcha/captcha.json',
|
|
132
118
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -163,9 +149,6 @@ describe('Captcha', () => {
|
|
|
163
149
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
164
150
|
|
|
165
151
|
const wrapper = mount(Captcha, {
|
|
166
|
-
global: {
|
|
167
|
-
plugins: [vuetify],
|
|
168
|
-
},
|
|
169
152
|
props: {
|
|
170
153
|
urlCreate: '/captcha/captcha.json',
|
|
171
154
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -193,9 +176,6 @@ describe('Captcha', () => {
|
|
|
193
176
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
194
177
|
|
|
195
178
|
const wrapper = mount(Captcha, {
|
|
196
|
-
global: {
|
|
197
|
-
plugins: [vuetify],
|
|
198
|
-
},
|
|
199
179
|
props: {
|
|
200
180
|
urlCreate: '/captcha/captcha.json',
|
|
201
181
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -221,9 +201,6 @@ describe('Captcha', () => {
|
|
|
221
201
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
222
202
|
|
|
223
203
|
const wrapper = mount(Captcha, {
|
|
224
|
-
global: {
|
|
225
|
-
plugins: [vuetify],
|
|
226
|
-
},
|
|
227
204
|
props: {
|
|
228
205
|
urlCreate: '/captcha/captcha.json',
|
|
229
206
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -251,9 +228,6 @@ describe('Captcha', () => {
|
|
|
251
228
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
252
229
|
|
|
253
230
|
const wrapper = mount(Captcha, {
|
|
254
|
-
global: {
|
|
255
|
-
plugins: [vuetify],
|
|
256
|
-
},
|
|
257
231
|
props: {
|
|
258
232
|
urlCreate: '/captcha/captcha.json',
|
|
259
233
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -278,9 +252,6 @@ describe('Captcha', () => {
|
|
|
278
252
|
vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
|
|
279
253
|
|
|
280
254
|
const wrapper = mount(Captcha, {
|
|
281
|
-
global: {
|
|
282
|
-
plugins: [vuetify],
|
|
283
|
-
},
|
|
284
255
|
props: {
|
|
285
256
|
urlCreate: '/captcha/captcha.json',
|
|
286
257
|
urlGetImage: '/captcha/captcha.png',
|
|
@@ -100,61 +100,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
|
|
|
100
100
|
">
|
|
101
101
|
<div class="v-field__overlay"></div>
|
|
102
102
|
<div class="v-field__loader">
|
|
103
|
-
|
|
104
|
-
aria-hidden="true"
|
|
105
|
-
aria-valuemax="100"
|
|
106
|
-
aria-valuemin="0"
|
|
107
|
-
class="
|
|
108
|
-
v-locale--is-ltr
|
|
109
|
-
v-progress-linear
|
|
110
|
-
v-theme--light
|
|
111
|
-
"
|
|
112
|
-
role="progressbar"
|
|
113
|
-
style="
|
|
114
|
-
top: 0px;
|
|
115
|
-
height: 0px;
|
|
116
|
-
--v-progress-linear-height: 2px;
|
|
117
|
-
"
|
|
118
|
-
>
|
|
119
|
-
<!---->
|
|
120
|
-
<div
|
|
121
|
-
class="
|
|
122
|
-
bg-primary
|
|
123
|
-
v-progress-linear__background
|
|
124
|
-
"
|
|
125
|
-
style="opacity: NaN;"
|
|
126
|
-
></div>
|
|
127
|
-
<div
|
|
128
|
-
class="
|
|
129
|
-
bg-primary
|
|
130
|
-
v-progress-linear__buffer
|
|
131
|
-
"
|
|
132
|
-
style="
|
|
133
|
-
opacity: NaN;
|
|
134
|
-
width: 0%;
|
|
135
|
-
"
|
|
136
|
-
></div>
|
|
137
|
-
<transition-stub
|
|
138
|
-
appear="false"
|
|
139
|
-
css="true"
|
|
140
|
-
name="fade-transition"
|
|
141
|
-
persisted="false"
|
|
142
|
-
>
|
|
143
|
-
<div class="v-progress-linear__indeterminate">
|
|
144
|
-
<div class="
|
|
145
|
-
bg-primary
|
|
146
|
-
long
|
|
147
|
-
v-progress-linear__indeterminate
|
|
148
|
-
"></div>
|
|
149
|
-
<div class="
|
|
150
|
-
bg-primary
|
|
151
|
-
short
|
|
152
|
-
v-progress-linear__indeterminate
|
|
153
|
-
"></div>
|
|
154
|
-
</div>
|
|
155
|
-
</transition-stub>
|
|
156
|
-
<!---->
|
|
157
|
-
</div>
|
|
103
|
+
<!-- v-if -->
|
|
158
104
|
</div>
|
|
159
105
|
<div class="v-field__prepend-inner">
|
|
160
106
|
<!-- v-if -->
|
|
@@ -171,21 +117,21 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
|
|
|
171
117
|
v-field-label
|
|
172
118
|
v-label
|
|
173
119
|
"
|
|
174
|
-
for="input-v-
|
|
175
|
-
id="input-v-
|
|
120
|
+
for="input-v-3"
|
|
121
|
+
id="input-v-3-label"
|
|
176
122
|
>
|
|
177
123
|
<!---->
|
|
178
124
|
Caractères de l’audio
|
|
179
125
|
</label>
|
|
180
126
|
<!---->
|
|
181
127
|
<input
|
|
182
|
-
aria-describedby="input-v-
|
|
128
|
+
aria-describedby="input-v-3-messages"
|
|
183
129
|
aria-label="Caractères de l’audio"
|
|
184
|
-
aria-labelledby="input-v-
|
|
130
|
+
aria-labelledby="input-v-3-label"
|
|
185
131
|
autocomplete="off"
|
|
186
132
|
class="v-field__input"
|
|
187
133
|
direction="horizontal"
|
|
188
|
-
id="input-v-
|
|
134
|
+
id="input-v-3"
|
|
189
135
|
title="Caractères de l’audio"
|
|
190
136
|
type="text"
|
|
191
137
|
/>
|
|
@@ -224,7 +170,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
|
|
|
224
170
|
appear="false"
|
|
225
171
|
class="v-messages"
|
|
226
172
|
css="true"
|
|
227
|
-
id="input-v-
|
|
173
|
+
id="input-v-3-messages"
|
|
228
174
|
name="slide-y-transition"
|
|
229
175
|
persisted="false"
|
|
230
176
|
tag="div"
|
|
@@ -496,61 +442,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
|
|
|
496
442
|
">
|
|
497
443
|
<div class="v-field__overlay"></div>
|
|
498
444
|
<div class="v-field__loader">
|
|
499
|
-
|
|
500
|
-
aria-hidden="true"
|
|
501
|
-
aria-valuemax="100"
|
|
502
|
-
aria-valuemin="0"
|
|
503
|
-
class="
|
|
504
|
-
v-locale--is-ltr
|
|
505
|
-
v-progress-linear
|
|
506
|
-
v-theme--light
|
|
507
|
-
"
|
|
508
|
-
role="progressbar"
|
|
509
|
-
style="
|
|
510
|
-
top: 0px;
|
|
511
|
-
height: 0px;
|
|
512
|
-
--v-progress-linear-height: 2px;
|
|
513
|
-
"
|
|
514
|
-
>
|
|
515
|
-
<!---->
|
|
516
|
-
<div
|
|
517
|
-
class="
|
|
518
|
-
bg-primary
|
|
519
|
-
v-progress-linear__background
|
|
520
|
-
"
|
|
521
|
-
style="opacity: NaN;"
|
|
522
|
-
></div>
|
|
523
|
-
<div
|
|
524
|
-
class="
|
|
525
|
-
bg-primary
|
|
526
|
-
v-progress-linear__buffer
|
|
527
|
-
"
|
|
528
|
-
style="
|
|
529
|
-
opacity: NaN;
|
|
530
|
-
width: 0%;
|
|
531
|
-
"
|
|
532
|
-
></div>
|
|
533
|
-
<transition-stub
|
|
534
|
-
appear="false"
|
|
535
|
-
css="true"
|
|
536
|
-
name="fade-transition"
|
|
537
|
-
persisted="false"
|
|
538
|
-
>
|
|
539
|
-
<div class="v-progress-linear__indeterminate">
|
|
540
|
-
<div class="
|
|
541
|
-
bg-primary
|
|
542
|
-
long
|
|
543
|
-
v-progress-linear__indeterminate
|
|
544
|
-
"></div>
|
|
545
|
-
<div class="
|
|
546
|
-
bg-primary
|
|
547
|
-
short
|
|
548
|
-
v-progress-linear__indeterminate
|
|
549
|
-
"></div>
|
|
550
|
-
</div>
|
|
551
|
-
</transition-stub>
|
|
552
|
-
<!---->
|
|
553
|
-
</div>
|
|
445
|
+
<!-- v-if -->
|
|
554
446
|
</div>
|
|
555
447
|
<div class="v-field__prepend-inner">
|
|
556
448
|
<!-- v-if -->
|
|
@@ -567,21 +459,21 @@ exports[`Captcha > renders correctly in image mode 1`] = `
|
|
|
567
459
|
v-field-label
|
|
568
460
|
v-label
|
|
569
461
|
"
|
|
570
|
-
for="input-v-
|
|
571
|
-
id="input-v-
|
|
462
|
+
for="input-v-2"
|
|
463
|
+
id="input-v-2-label"
|
|
572
464
|
>
|
|
573
465
|
<!---->
|
|
574
466
|
Caractères de l’image
|
|
575
467
|
</label>
|
|
576
468
|
<!---->
|
|
577
469
|
<input
|
|
578
|
-
aria-describedby="input-v-
|
|
470
|
+
aria-describedby="input-v-2-messages"
|
|
579
471
|
aria-label="Caractères de l’image"
|
|
580
|
-
aria-labelledby="input-v-
|
|
472
|
+
aria-labelledby="input-v-2-label"
|
|
581
473
|
autocomplete="off"
|
|
582
474
|
class="v-field__input"
|
|
583
475
|
direction="horizontal"
|
|
584
|
-
id="input-v-
|
|
476
|
+
id="input-v-2"
|
|
585
477
|
title="Caractères de l’image"
|
|
586
478
|
type="text"
|
|
587
479
|
/>
|
|
@@ -620,7 +512,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
|
|
|
620
512
|
appear="false"
|
|
621
513
|
class="v-messages"
|
|
622
514
|
css="true"
|
|
623
|
-
id="input-v-
|
|
515
|
+
id="input-v-2-messages"
|
|
624
516
|
name="slide-y-transition"
|
|
625
517
|
persisted="false"
|
|
626
518
|
tag="div"
|
|
@@ -713,9 +713,6 @@ export const CustomResetText: Story = {
|
|
|
713
713
|
|
|
714
714
|
export const WithOverflow: Story = {
|
|
715
715
|
parameters: {
|
|
716
|
-
a11y: {
|
|
717
|
-
disable: true,
|
|
718
|
-
},
|
|
719
716
|
sourceCode: [
|
|
720
717
|
{
|
|
721
718
|
name: 'Template',
|
|
@@ -809,9 +806,6 @@ export const WithOverflow: Story = {
|
|
|
809
806
|
|
|
810
807
|
export const WithEvents: Story = {
|
|
811
808
|
parameters: {
|
|
812
|
-
a11y: {
|
|
813
|
-
disable: true,
|
|
814
|
-
},
|
|
815
809
|
sourceCode: [
|
|
816
810
|
{
|
|
817
811
|
name: 'Template',
|
|
@@ -923,9 +917,6 @@ const handleReset = () => {
|
|
|
923
917
|
|
|
924
918
|
export const WithPrependStateIcon: Story = {
|
|
925
919
|
parameters: {
|
|
926
|
-
a11y: {
|
|
927
|
-
disable: true,
|
|
928
|
-
},
|
|
929
920
|
sourceCode: [
|
|
930
921
|
{
|
|
931
922
|
name: 'Template',
|
|
@@ -1004,9 +995,6 @@ const items: ChipItem[] = [
|
|
|
1004
995
|
|
|
1005
996
|
export const WithAppendStateIcon: Story = {
|
|
1006
997
|
parameters: {
|
|
1007
|
-
a11y: {
|
|
1008
|
-
disable: true,
|
|
1009
|
-
},
|
|
1010
998
|
sourceCode: [
|
|
1011
999
|
{
|
|
1012
1000
|
name: 'Template',
|
|
@@ -1085,9 +1073,6 @@ const items: ChipItem[] = [
|
|
|
1085
1073
|
|
|
1086
1074
|
export const WithCustomIcon: Story = {
|
|
1087
1075
|
parameters: {
|
|
1088
|
-
a11y: {
|
|
1089
|
-
disable: true,
|
|
1090
|
-
},
|
|
1091
1076
|
sourceCode: [
|
|
1092
1077
|
{
|
|
1093
1078
|
name: 'Template',
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
<SyIcon
|
|
246
246
|
v-bind="options.icon"
|
|
247
247
|
:icon="deleteIcon"
|
|
248
|
-
:color="item.state"
|
|
248
|
+
:color="item.state || 'white'"
|
|
249
249
|
decorative
|
|
250
250
|
/>
|
|
251
251
|
</VBtn>
|
|
@@ -260,7 +260,11 @@
|
|
|
260
260
|
v-bind="options.chip"
|
|
261
261
|
class="overflow-chip text-cyan-darken-40 ma-1"
|
|
262
262
|
:aria-label="overflowAriaLabel"
|
|
263
|
+
role="button"
|
|
264
|
+
tabindex="0"
|
|
263
265
|
@click="toggleShowAllItems"
|
|
266
|
+
@keydown.enter.prevent="toggleShowAllItems"
|
|
267
|
+
@keydown.space.prevent="toggleShowAllItems"
|
|
264
268
|
>
|
|
265
269
|
{{ overflowText }}
|
|
266
270
|
</VChip>
|
|
@@ -1,15 +1,88 @@
|
|
|
1
1
|
import { Meta, Story } from '@storybook/addon-docs';
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
2
|
+
import * as ChipListStories from '../ChipList.stories.ts';
|
|
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={ChipListStories} />
|
|
6
15
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="ChipList"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
|
|
20
|
+
>
|
|
21
|
+
<AuditSection>
|
|
22
|
+
<div class="mt-2">
|
|
23
|
+
<p>Rapport d'audit manuel : <a href="/audits/ChipList.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
24
|
+
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" style={{color:'#0C41BD'}}>issue #814</a>)</p>
|
|
25
|
+
</div>
|
|
26
|
+
</AuditSection>
|
|
27
|
+
<CriteriaSection>
|
|
28
|
+
<CriteriaCard icon="🏷️" title="Structure sémantique de liste">
|
|
29
|
+
<ul>
|
|
30
|
+
<li><strong>Liste native</strong> : Utilisation de <code><ul></code> et <code><li></code> pour la structure principale</li>
|
|
31
|
+
<li><strong>Étiquetage</strong> : <code>aria-label</code> ou <code>aria-labelledby</code> pour la liste via les props <strong>listAriaLabel</strong> et <strong>listAriaLabelledby</strong></li>
|
|
32
|
+
<li><strong>Contenu des chips</strong> : <code><span></code> avec <code>role="status"</code> et <code>aria-live="polite"</code> pour le texte des chips</li>
|
|
33
|
+
<li><strong>Accessibilité</strong> : Permet une navigation sémantique correcte (critères 9.1.1, 9.2.1 RGAA)</li>
|
|
34
|
+
</ul>
|
|
35
|
+
</CriteriaCard>
|
|
10
36
|
|
|
37
|
+
<CriteriaCard icon="🎯" title="Chips interactifs et débordement">
|
|
38
|
+
<ul>
|
|
39
|
+
<li><strong>Chips supprimables</strong> : Boutons avec <code>aria-label</code> descriptif pour chaque action de suppression</li>
|
|
40
|
+
<li><strong>Chip de débordement</strong> : <code>role="button"</code>, <code>tabindex="0"</code>, et <code>aria-label</code> décrivant les éléments masqués</li>
|
|
41
|
+
<li><strong>Navigation clavier</strong> : Support des touches Entrée et Espace pour le chip de débordement</li>
|
|
42
|
+
<li><strong>Focus visible</strong> : Indicateurs de focus sur tous les éléments interactifs</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</CriteriaCard>
|
|
11
45
|
|
|
12
|
-
<
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
</
|
|
46
|
+
<CriteriaCard icon="⌨️" title="Navigation et interaction clavier">
|
|
47
|
+
<ul>
|
|
48
|
+
<li><strong>Navigation Tab</strong> : Parcours logique des éléments interactifs (chips → bouton débordement → boutons reset)</li>
|
|
49
|
+
<li><strong>Suppression de chips</strong> : Touches Entrée/Espace sur les boutons de suppression</li>
|
|
50
|
+
<li><strong>Débordement</strong> : Touches Entrée/Espace pour afficher/masquer les éléments supplémentaires</li>
|
|
51
|
+
<li><strong>Réinitialisation</strong> : Bouton reset accessible avec navigation standard</li>
|
|
52
|
+
</ul>
|
|
53
|
+
</CriteriaCard>
|
|
54
|
+
|
|
55
|
+
<CriteriaCard icon="🎨" title="États et feedback visuel">
|
|
56
|
+
<ul>
|
|
57
|
+
<li><strong>États des chips</strong> : Couleurs et icônes différentes pour success, info, warning, error</li>
|
|
58
|
+
<li><strong>Icônes d'état</strong> : Option <strong>displayPrependStateIcon</strong> et <strong>displayAppendStateIcon</strong> avec icônes décoratives</li>
|
|
59
|
+
<li><strong>Contraste</strong> : Styles CSS spécifiques pour garantir le contraste des bordures de focus selon l'état</li>
|
|
60
|
+
<li><strong>Feedback</strong> : <code>aria-live="polite"</code> pour les changements de contenu</li>
|
|
61
|
+
</ul>
|
|
62
|
+
</CriteriaCard>
|
|
63
|
+
</CriteriaSection>
|
|
64
|
+
|
|
65
|
+
<DemoSection componentName="ChipList">
|
|
66
|
+
<Story of={ChipListStories.WithOverflow} />
|
|
67
|
+
</DemoSection>
|
|
68
|
+
|
|
69
|
+
<BestPracticesSection>
|
|
70
|
+
<ul>
|
|
71
|
+
<li>Utilisez des libellés descriptifs pour la liste via <code>listAriaLabel</code></li>
|
|
72
|
+
<li>Limitez le nombre de chips visibles avec <code>overflowLimit</code> pour éviter la surcharge visuelle</li>
|
|
73
|
+
<li>Assurez-vous que les textes des chips sont concis mais explicites</li>
|
|
74
|
+
<li>Utilisez les états visuels (success, info, warning, error) de manière cohérente</li>
|
|
75
|
+
<li>Fournissez une alternative de réinitialisation lorsque les chips sont nombreux</li>
|
|
76
|
+
<li>Testez la navigation au clavier sans la souris</li>
|
|
77
|
+
</ul>
|
|
78
|
+
</BestPracticesSection>
|
|
79
|
+
|
|
80
|
+
<ResourcesSection>
|
|
81
|
+
<ul>
|
|
82
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques d'auteur WAI-ARIA pour les listes</a></li>
|
|
83
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
|
|
84
|
+
<li><a href="https://inclusive-components.design/tag-buttons/" target="_blank" rel="noopener noreferrer">Inclusive Components: Tag Buttons</a></li>
|
|
85
|
+
<li><a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" rel="noopener noreferrer">Issue #814 - Corrections d'accessibilité ChipList</a></li>
|
|
86
|
+
</ul>
|
|
87
|
+
</ResourcesSection>
|
|
88
|
+
</AccessibilityGuideLayout>
|
|
@@ -25,6 +25,47 @@ describe('ChipList – accessibility (axe)', () => {
|
|
|
25
25
|
},
|
|
26
26
|
]
|
|
27
27
|
|
|
28
|
+
it('has no obvious axe violations with overflow chip', async () => {
|
|
29
|
+
const overflowItems: ChipItem[] = [
|
|
30
|
+
{
|
|
31
|
+
text: 'Email',
|
|
32
|
+
value: 'email',
|
|
33
|
+
state: 'success' as ChipState,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
text: 'SMS',
|
|
37
|
+
value: 'sms',
|
|
38
|
+
state: 'info' as ChipState,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
text: 'Téléphone',
|
|
42
|
+
value: 'telephone',
|
|
43
|
+
state: 'warning' as ChipState,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
text: 'Courrier',
|
|
47
|
+
value: 'courrier',
|
|
48
|
+
state: 'error' as ChipState,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
text: 'Notification',
|
|
52
|
+
value: 'notification',
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
const wrapper = mount(ChipList, {
|
|
57
|
+
props: {
|
|
58
|
+
items: overflowItems,
|
|
59
|
+
overflowLimit: 3,
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
64
|
+
assertNoA11yViolations(results, 'ChipList – overflow chip', {
|
|
65
|
+
ignoreRules: ['region'],
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
|
|
28
69
|
it('has no obvious axe violations with default items', async () => {
|
|
29
70
|
const wrapper = mount(ChipList, {
|
|
30
71
|
props: {
|