@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
|
@@ -24,4 +24,51 @@ describe('SyTextField – accessibility (axe)', () => {
|
|
|
24
24
|
ignoreRules: ['region'],
|
|
25
25
|
})
|
|
26
26
|
})
|
|
27
|
+
|
|
28
|
+
it('has no obvious axe violations when loading is true', async () => {
|
|
29
|
+
const wrapper = mount(SyTextField, {
|
|
30
|
+
props: {
|
|
31
|
+
label: 'Nom',
|
|
32
|
+
modelValue: '',
|
|
33
|
+
loading: true,
|
|
34
|
+
},
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
38
|
+
assertNoA11yViolations(results, 'SyTextField – loading state', {
|
|
39
|
+
ignoreRules: ['region'],
|
|
40
|
+
})
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('has no obvious axe violations for number input', async () => {
|
|
44
|
+
const wrapper = mount(SyTextField, {
|
|
45
|
+
props: {
|
|
46
|
+
label: 'Montant',
|
|
47
|
+
modelValue: '12.5',
|
|
48
|
+
type: 'number',
|
|
49
|
+
helpText: 'Saisissez un montant numerique',
|
|
50
|
+
},
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
54
|
+
assertNoA11yViolations(results, 'SyTextField – number input', {
|
|
55
|
+
ignoreRules: ['region'],
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('has no obvious axe violations for tel input', async () => {
|
|
60
|
+
const wrapper = mount(SyTextField, {
|
|
61
|
+
props: {
|
|
62
|
+
label: 'Telephone',
|
|
63
|
+
modelValue: '+33 1 23 45 67 89',
|
|
64
|
+
type: 'tel',
|
|
65
|
+
helpText: 'Saisissez un numero de telephone',
|
|
66
|
+
},
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
70
|
+
assertNoA11yViolations(results, 'SyTextField – tel input', {
|
|
71
|
+
ignoreRules: ['region'],
|
|
72
|
+
})
|
|
73
|
+
})
|
|
27
74
|
})
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
|
2
|
-
import { mount } from '@vue/test-utils'
|
|
2
|
+
import { mount, flushPromises } from '@vue/test-utils'
|
|
3
3
|
import { VIcon } from 'vuetify/components'
|
|
4
4
|
|
|
5
5
|
import SyTextField from '../SyTextField.vue'
|
|
@@ -15,6 +15,7 @@ describe('SyTextField', () => {
|
|
|
15
15
|
required: true,
|
|
16
16
|
showSuccessMessages: true,
|
|
17
17
|
outlined: true,
|
|
18
|
+
label: 'Test Field',
|
|
18
19
|
},
|
|
19
20
|
})
|
|
20
21
|
})
|
|
@@ -26,7 +27,7 @@ describe('SyTextField', () => {
|
|
|
26
27
|
|
|
27
28
|
it('applies the correct variant style', () => {
|
|
28
29
|
wrapper = mount(SyTextField, {
|
|
29
|
-
props: { variantStyle: 'filled' },
|
|
30
|
+
props: { variantStyle: 'filled', label: 'Test Field' },
|
|
30
31
|
})
|
|
31
32
|
const textField = wrapper.findComponent({ name: 'VTextField' })
|
|
32
33
|
expect(textField.props('variant')).toBe('filled')
|
|
@@ -34,6 +35,7 @@ describe('SyTextField', () => {
|
|
|
34
35
|
|
|
35
36
|
it('renders default slots correctly', () => {
|
|
36
37
|
wrapper = mount(SyTextField, {
|
|
38
|
+
props: { label: 'Test Field' },
|
|
37
39
|
slots: {
|
|
38
40
|
prepend: '<div data-testid="prepend-slot">Prepend Slot Content</div>',
|
|
39
41
|
append: '<div data-testid="append-slot">Append Slot Content</div>',
|
|
@@ -49,6 +51,7 @@ describe('SyTextField', () => {
|
|
|
49
51
|
|
|
50
52
|
it('renders inner slots correctly', () => {
|
|
51
53
|
wrapper = mount(SyTextField, {
|
|
54
|
+
props: { label: 'Test Field' },
|
|
52
55
|
slots: {
|
|
53
56
|
'prepend-inner': '<div data-testid="prepend-inner-slot">Prepend Inner Slot Content</div>',
|
|
54
57
|
'append-inner': '<div data-testid="append-inner-slot">Append Inner Slot Content</div>',
|
|
@@ -66,35 +69,35 @@ describe('SyTextField', () => {
|
|
|
66
69
|
|
|
67
70
|
it('should update icon when validation state changes', async () => {
|
|
68
71
|
wrapper = mount(SyTextField, {
|
|
69
|
-
props: { appendInnerIcon: 'success' as IconType },
|
|
72
|
+
props: { appendInnerIcon: 'success' as IconType, label: 'Test Field' },
|
|
70
73
|
})
|
|
71
74
|
expect(wrapper.props('appendInnerIcon')).toBe('success')
|
|
72
75
|
})
|
|
73
76
|
|
|
74
77
|
it('should update icon when validation state changes with warning', async () => {
|
|
75
78
|
wrapper = mount(SyTextField, {
|
|
76
|
-
props: { appendInnerIcon: 'warning' as IconType },
|
|
79
|
+
props: { appendInnerIcon: 'warning' as IconType, label: 'Test Field' },
|
|
77
80
|
})
|
|
78
81
|
expect(wrapper.props('appendInnerIcon')).toBe('warning')
|
|
79
82
|
})
|
|
80
83
|
|
|
81
84
|
it('should update icon when validation state changes with error', async () => {
|
|
82
85
|
wrapper = mount(SyTextField, {
|
|
83
|
-
props: { appendInnerIcon: 'error' as IconType },
|
|
86
|
+
props: { appendInnerIcon: 'error' as IconType, label: 'Test Field' },
|
|
84
87
|
})
|
|
85
88
|
expect(wrapper.props('appendInnerIcon')).toBe('error')
|
|
86
89
|
})
|
|
87
90
|
|
|
88
91
|
it('should update icon when validation state changes with success', async () => {
|
|
89
92
|
wrapper = mount(SyTextField, {
|
|
90
|
-
props: { appendInnerIcon: 'success' as IconType },
|
|
93
|
+
props: { appendInnerIcon: 'success' as IconType, label: 'Test Field' },
|
|
91
94
|
})
|
|
92
95
|
expect(wrapper.props('appendInnerIcon')).toBe('success')
|
|
93
96
|
})
|
|
94
97
|
|
|
95
98
|
it('emits prepend-icon-click event when prepend icon is clicked', async () => {
|
|
96
99
|
const wrapper = mount(SyTextField, {
|
|
97
|
-
props: { prependIcon: 'info' as IconType },
|
|
100
|
+
props: { prependIcon: 'info' as IconType, label: 'Test Field' },
|
|
98
101
|
})
|
|
99
102
|
|
|
100
103
|
await wrapper.vm.$nextTick()
|
|
@@ -107,7 +110,7 @@ describe('SyTextField', () => {
|
|
|
107
110
|
|
|
108
111
|
it('emits append-icon-click event when append icon is clicked', async () => {
|
|
109
112
|
const wrapper = mount(SyTextField, {
|
|
110
|
-
props: { appendIcon: 'info' as IconType },
|
|
113
|
+
props: { appendIcon: 'info' as IconType, label: 'Test Field' },
|
|
111
114
|
})
|
|
112
115
|
|
|
113
116
|
await wrapper.vm.$nextTick()
|
|
@@ -155,8 +158,13 @@ describe('SyTextField', () => {
|
|
|
155
158
|
label: 'Test Field',
|
|
156
159
|
},
|
|
157
160
|
})
|
|
161
|
+
await wrapper.find('input').trigger('focus')
|
|
162
|
+
await wrapper.vm.$nextTick()
|
|
158
163
|
await wrapper.find('input').trigger('blur')
|
|
159
164
|
await wrapper.vm.$nextTick()
|
|
165
|
+
await flushPromises()
|
|
166
|
+
await wrapper.vm.$nextTick()
|
|
167
|
+
|
|
160
168
|
expect(wrapper.find('.v-messages').text()).toContain('Le champ Test Field est requis')
|
|
161
169
|
})
|
|
162
170
|
|
|
@@ -170,12 +178,16 @@ describe('SyTextField', () => {
|
|
|
170
178
|
}
|
|
171
179
|
|
|
172
180
|
wrapper = mount(SyTextField, {
|
|
173
|
-
props: { customRules: [customRule] },
|
|
181
|
+
props: { customRules: [customRule], label: 'Test Field' },
|
|
174
182
|
})
|
|
175
183
|
|
|
176
184
|
await wrapper.setProps({ modelValue: 'ab' })
|
|
185
|
+
await wrapper.find('input').trigger('focus')
|
|
186
|
+
await wrapper.vm.$nextTick()
|
|
177
187
|
await wrapper.find('input').trigger('blur')
|
|
178
188
|
await wrapper.vm.$nextTick()
|
|
189
|
+
await flushPromises()
|
|
190
|
+
await wrapper.vm.$nextTick()
|
|
179
191
|
|
|
180
192
|
const messages = wrapper.find('.v-messages')
|
|
181
193
|
expect(messages.text()).toContain('Test error message')
|
|
@@ -200,23 +212,140 @@ describe('SyTextField', () => {
|
|
|
200
212
|
},
|
|
201
213
|
})
|
|
202
214
|
|
|
215
|
+
await wrapper.find('input').trigger('focus')
|
|
203
216
|
await wrapper.vm.$nextTick()
|
|
204
217
|
await wrapper.find('input').trigger('blur')
|
|
205
218
|
await wrapper.vm.$nextTick()
|
|
219
|
+
await flushPromises()
|
|
220
|
+
await wrapper.vm.$nextTick()
|
|
206
221
|
|
|
207
222
|
const messages = wrapper.find('.v-messages')
|
|
208
223
|
expect(messages.exists()).toBe(true)
|
|
209
224
|
expect(messages.text()).toContain('Attention : Test Field peut contenir une erreur')
|
|
210
225
|
})
|
|
211
226
|
|
|
227
|
+
describe('loading', () => {
|
|
228
|
+
it('shows progress bar when loading is true', async () => {
|
|
229
|
+
wrapper = mount(SyTextField, {
|
|
230
|
+
props: { loading: true, label: 'Nom' },
|
|
231
|
+
})
|
|
232
|
+
await wrapper.vm.$nextTick()
|
|
233
|
+
expect(wrapper.find('.v-progress-linear').exists()).toBe(true)
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
it('does not show progress bar when loading is false', async () => {
|
|
237
|
+
wrapper = mount(SyTextField, {
|
|
238
|
+
props: { loading: false, label: 'Nom' },
|
|
239
|
+
})
|
|
240
|
+
await wrapper.vm.$nextTick()
|
|
241
|
+
expect(wrapper.find('.v-progress-linear').exists()).toBe(false)
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
it('sets aria-label with field label when loading', async () => {
|
|
245
|
+
wrapper = mount(SyTextField, {
|
|
246
|
+
props: { loading: true, label: 'Nom' },
|
|
247
|
+
})
|
|
248
|
+
await wrapper.vm.$nextTick()
|
|
249
|
+
const bar = wrapper.find('.v-progress-linear')
|
|
250
|
+
expect(bar.attributes('aria-label')).toBe('Chargement de Nom')
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
it('sets generic aria-label when no label and loading', async () => {
|
|
254
|
+
wrapper = mount(SyTextField, {
|
|
255
|
+
props: { loading: true, label: '' },
|
|
256
|
+
})
|
|
257
|
+
await wrapper.vm.$nextTick()
|
|
258
|
+
const bar = wrapper.find('.v-progress-linear')
|
|
259
|
+
expect(bar.attributes('aria-label')).toBe('Chargement en cours')
|
|
260
|
+
})
|
|
261
|
+
})
|
|
262
|
+
|
|
212
263
|
it('maintains input value without validation rules', async () => {
|
|
213
|
-
wrapper = mount(SyTextField
|
|
264
|
+
wrapper = mount(SyTextField, {
|
|
265
|
+
props: { label: 'Test Field' },
|
|
266
|
+
})
|
|
214
267
|
const input = wrapper.find('input')
|
|
215
268
|
|
|
216
269
|
await input.setValue('test value')
|
|
217
270
|
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(['test value'])
|
|
218
271
|
})
|
|
219
272
|
|
|
273
|
+
it('filters alphabetic characters when type is number', async () => {
|
|
274
|
+
wrapper = mount(SyTextField, {
|
|
275
|
+
props: {
|
|
276
|
+
label: 'Test Field',
|
|
277
|
+
type: 'number',
|
|
278
|
+
},
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
const input = wrapper.find('input')
|
|
282
|
+
const inputElement = input.element as HTMLInputElement
|
|
283
|
+
inputElement.value = '12ab.3e-4'
|
|
284
|
+
|
|
285
|
+
await input.trigger('input')
|
|
286
|
+
|
|
287
|
+
expect(inputElement.value).toBe('12.3e-4')
|
|
288
|
+
expect(wrapper.emitted('update:modelValue')?.at(-1)).toEqual(['12.3e-4'])
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
it('prevents invalid beforeinput data when type is number', async () => {
|
|
292
|
+
wrapper = mount(SyTextField, {
|
|
293
|
+
props: {
|
|
294
|
+
label: 'Test Field',
|
|
295
|
+
type: 'number',
|
|
296
|
+
},
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
const input = wrapper.find('input')
|
|
300
|
+
const event = new InputEvent('beforeinput', {
|
|
301
|
+
data: 'a',
|
|
302
|
+
cancelable: true,
|
|
303
|
+
bubbles: true,
|
|
304
|
+
})
|
|
305
|
+
|
|
306
|
+
input.element.dispatchEvent(event)
|
|
307
|
+
|
|
308
|
+
expect(event.defaultPrevented).toBe(true)
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
it('filters alphabetic characters when type is tel', async () => {
|
|
312
|
+
wrapper = mount(SyTextField, {
|
|
313
|
+
props: {
|
|
314
|
+
label: 'Telephone',
|
|
315
|
+
type: 'tel',
|
|
316
|
+
},
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
const input = wrapper.find('input')
|
|
320
|
+
const inputElement = input.element as HTMLInputElement
|
|
321
|
+
inputElement.value = '+33 ab(0)1-23.45'
|
|
322
|
+
|
|
323
|
+
await input.trigger('input')
|
|
324
|
+
|
|
325
|
+
expect(inputElement.value).toBe('+33 (0)1-23.45')
|
|
326
|
+
expect(wrapper.emitted('update:modelValue')?.at(-1)).toEqual(['+33 (0)1-23.45'])
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
it('prevents invalid beforeinput data when type is tel', async () => {
|
|
330
|
+
wrapper = mount(SyTextField, {
|
|
331
|
+
props: {
|
|
332
|
+
label: 'Telephone',
|
|
333
|
+
type: 'tel',
|
|
334
|
+
},
|
|
335
|
+
})
|
|
336
|
+
|
|
337
|
+
const input = wrapper.find('input')
|
|
338
|
+
const event = new InputEvent('beforeinput', {
|
|
339
|
+
data: 'a',
|
|
340
|
+
cancelable: true,
|
|
341
|
+
bubbles: true,
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
input.element.dispatchEvent(event)
|
|
345
|
+
|
|
346
|
+
expect(event.defaultPrevented).toBe(true)
|
|
347
|
+
})
|
|
348
|
+
|
|
220
349
|
it('validates field immediately when isValidateOnBlur is false', async () => {
|
|
221
350
|
const customRule = {
|
|
222
351
|
type: 'custom',
|
|
@@ -228,6 +357,8 @@ describe('SyTextField', () => {
|
|
|
228
357
|
|
|
229
358
|
wrapper = mount(SyTextField, {
|
|
230
359
|
props: {
|
|
360
|
+
modelValue: '',
|
|
361
|
+
label: 'Test Field',
|
|
231
362
|
customRules: [customRule],
|
|
232
363
|
isValidateOnBlur: false,
|
|
233
364
|
},
|
|
@@ -236,6 +367,12 @@ describe('SyTextField', () => {
|
|
|
236
367
|
await wrapper.setProps({ modelValue: 'ab' })
|
|
237
368
|
await wrapper.vm.$nextTick()
|
|
238
369
|
|
|
370
|
+
// settle all pending promises to ensure validation has completed
|
|
371
|
+
await vi.waitUntil(() => {
|
|
372
|
+
const messages = wrapper.find('.v-messages')
|
|
373
|
+
return messages.text().includes('Test error message')
|
|
374
|
+
})
|
|
375
|
+
|
|
239
376
|
const messages = wrapper.find('.v-messages')
|
|
240
377
|
expect(messages.text()).toContain('Test error message')
|
|
241
378
|
|
|
@@ -243,6 +380,14 @@ describe('SyTextField', () => {
|
|
|
243
380
|
await wrapper.setProps({ modelValue: 'abc' })
|
|
244
381
|
await wrapper.vm.$nextTick()
|
|
245
382
|
|
|
383
|
+
// the async validation should have updated the error messages, so we wait for the next tick before checking the messages again
|
|
384
|
+
await wrapper.vm.$nextTick()
|
|
385
|
+
|
|
386
|
+
await vi.waitUntil(() => {
|
|
387
|
+
const messages = wrapper.find('.v-messages')
|
|
388
|
+
return !messages.text().includes('Test error message')
|
|
389
|
+
})
|
|
390
|
+
|
|
246
391
|
expect(messages.text()).not.toContain('Test error message')
|
|
247
392
|
})
|
|
248
393
|
})
|
|
@@ -1,15 +1,83 @@
|
|
|
1
|
-
import { Meta,
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Primary } from '@storybook/blocks';
|
|
2
|
+
import * as DataListStories from '../DataList.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
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
12
|
|
|
5
|
-
<Meta of={
|
|
13
|
+
<Meta of={DataListStories}/>
|
|
6
14
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
15
|
+
<AccessibilityGuideLayout
|
|
16
|
+
componentName="DataList"
|
|
17
|
+
iconSrc={AccessibilityIcon}
|
|
18
|
+
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
|
|
19
|
+
>
|
|
20
|
+
<div class="mt-8">
|
|
21
|
+
<p>Rapport d'audit manuel : <a href="/audits/DataList.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
22
|
+
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/4030" target="_blank" style={{color:'#0C41BD'}}>issue #4030</a>)</p>
|
|
23
|
+
</div>
|
|
10
24
|
|
|
25
|
+
<CriteriaSection>
|
|
26
|
+
<CriteriaCard icon="🔍" title="Structure sémantique des listes">
|
|
27
|
+
<ul>
|
|
28
|
+
<li><strong>Élément dl/dt/dd</strong> : Utilisation native des balises de liste de définitions pour une sémantique correcte</li>
|
|
29
|
+
<li><strong>Section avec titre</strong> : Conteneur <code><section></code> avec <code>aria-labelledby</code> lorsque <code>listTitle</code> est fourni</li>
|
|
30
|
+
<li><strong>Titre personnalisable</strong> : Tag de titre configurable (<code>titleTag</code>) avec ID unique pour l'association ARIA</li>
|
|
31
|
+
</ul>
|
|
32
|
+
</CriteriaCard>
|
|
11
33
|
|
|
12
|
-
<
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
<CriteriaCard icon="⌨️" title="Navigation et interaction">
|
|
35
|
+
<ul>
|
|
36
|
+
<li><strong>Boutons d'action</strong> : Utilisation de <code>VBtn</code> natif pour les actions avec focus clavier correct</li>
|
|
37
|
+
<li><strong>Focus visible</strong> : Style <code>:focus-visible::after</code> pour une indication claire de navigation</li>
|
|
38
|
+
<li><strong>Événements accessibles</strong> : Émission d'événements <code>click:item-action</code> pour les interactions</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</CriteriaCard>
|
|
41
|
+
|
|
42
|
+
<CriteriaCard icon="🎨" title="Icônes et éléments visuels">
|
|
43
|
+
<ul>
|
|
44
|
+
<li><strong>Icônes décoratives</strong> : Icônes avec <code>decorative="true"</code> pour masquer aux lecteurs d'écran</li>
|
|
45
|
+
<li><strong>Contrastes adaptatifs</strong> : Couleurs de label adaptées au thème clair/sombre</li>
|
|
46
|
+
<li><strong>Chips accessibles</strong> : Utilisation de <code>VChip</code> pour les valeurs avec contraste approprié</li>
|
|
47
|
+
</ul>
|
|
48
|
+
</CriteriaCard>
|
|
49
|
+
|
|
50
|
+
<CriteriaCard icon="📱" title="Flexibilité et responsive">
|
|
51
|
+
<ul>
|
|
52
|
+
<li><strong>Layout adaptable</strong> : Mode <code>row</code> pour les affichages horizontaux avec flexbox</li>
|
|
53
|
+
<li><strong>Widthable</strong> : Gestion des dimensions via <code>useWidthable</code> pour le responsive</li>
|
|
54
|
+
<li><strong>Slots personnalisables</strong> : Slots <code>value</code>, <code>action</code>, <code>icon</code> pour une flexibilité maximale</li>
|
|
55
|
+
</ul>
|
|
56
|
+
</CriteriaCard>
|
|
57
|
+
</CriteriaSection>
|
|
58
|
+
|
|
59
|
+
<DemoSection componentName="DataList">
|
|
60
|
+
<Primary />
|
|
61
|
+
</DemoSection>
|
|
62
|
+
|
|
63
|
+
<BestPracticesSection>
|
|
64
|
+
<ul>
|
|
65
|
+
<li><strong>Titres descriptifs</strong> : Utilisez toujours <code>listTitle</code> pour fournir un contexte aux listes importantes</li>
|
|
66
|
+
<li><strong>Labels clairs</strong> : Assurez-vous que les <code>key</code> (labels) sont concis et descriptifs</li>
|
|
67
|
+
<li><strong>Actions explicites</strong> : Utilisez des verbes d'action clairs pour les boutons ("Modifier", "Supprimer", "Voir")</li>
|
|
68
|
+
<li><strong>Ordre logique</strong> : Maintenez un ordre cohérent des paires label/valeur dans toute l'application</li>
|
|
69
|
+
<li><strong>Slots sécurisés</strong> : Préférez le slot <code>value</code> à <code>renderHtmlValue</code> pour le contenu HTML</li>
|
|
70
|
+
<li><strong>États de chargement</strong> : Utilisez <code>loading</code> avec <code>DataListLoading</code> pour les données asynchrones</li>
|
|
71
|
+
</ul>
|
|
72
|
+
</BestPracticesSection>
|
|
73
|
+
|
|
74
|
+
<ResourcesSection>
|
|
75
|
+
<ul>
|
|
76
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Listbox</a></li>
|
|
77
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
|
|
78
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#11.10" target="_blank" rel="noopener noreferrer">RGAA Critère 11.10 : Listes de définitions</a></li>
|
|
79
|
+
<li><a href="https://developer.mozilla.org/fr/docs/Web/HTML/Element/dl" target="_blank" rel="noopener noreferrer">MDN : Élément dl - Liste de définitions</a></li>
|
|
80
|
+
</ul>
|
|
81
|
+
</ResourcesSection>
|
|
82
|
+
|
|
83
|
+
</AccessibilityGuideLayout>
|
|
@@ -1,14 +1,83 @@
|
|
|
1
|
-
import { Meta,
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Primary } from '@storybook/blocks';
|
|
2
|
+
import * as DataListGroupStories from '../DataListGroup.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
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
12
|
|
|
5
|
-
<Meta of={
|
|
13
|
+
<Meta of={DataListGroupStories}/>
|
|
6
14
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<
|
|
15
|
+
<AccessibilityGuideLayout
|
|
16
|
+
componentName="DataListGroup"
|
|
17
|
+
iconSrc={AccessibilityIcon}
|
|
18
|
+
apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
|
|
19
|
+
>
|
|
20
|
+
<div class="mt-8">
|
|
21
|
+
<p>Rapport d'audit manuel : <a href="/audits/DataListGroup.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
13
22
|
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/651" target="_blank" style={{color:'#0C41BD'}}>issue #651</a>)</p>
|
|
14
|
-
</div>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<CriteriaSection>
|
|
26
|
+
<CriteriaCard icon="🔍" title="Structure sémantique des groupes">
|
|
27
|
+
<ul>
|
|
28
|
+
<li><strong>Élément ul/li</strong> : Utilisation native de liste non ordonnée pour regrouper les DataList</li>
|
|
29
|
+
<li><strong>Composition sémantique</strong> : Chaque élément contient un DataList avec structure dl/dt/dd héritée</li>
|
|
30
|
+
<li><strong>Titres hiérarchiques</strong> : Tags de titre configurables (<code>titlesTag</code>) pour chaque sous-liste</li>
|
|
31
|
+
</ul>
|
|
32
|
+
</CriteriaCard>
|
|
33
|
+
|
|
34
|
+
<CriteriaCard icon="⌨️" title="Navigation et interactions">
|
|
35
|
+
<ul>
|
|
36
|
+
<li><strong>Focus séquentiel</strong> : Navigation logique entre les différents groupes et leurs éléments</li>
|
|
37
|
+
<li><strong>Actions contextualisées</strong> : Événements <code>click:list-item</code> avec indices doubles (dataListIndex, itemIndex)</li>
|
|
38
|
+
<li><strong>Boutons accessibles</strong> : Actions héritées des DataList avec focus clavier correct</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</CriteriaCard>
|
|
41
|
+
|
|
42
|
+
<CriteriaCard icon="🎨" title="Mise en page et responsive">
|
|
43
|
+
<ul>
|
|
44
|
+
<li><strong>Layout flexbox</strong> : Utilisation de <code>d-flex</code> pour l'affichage horizontal des groupes</li>
|
|
45
|
+
<li><strong>Largeurs configurables</strong> : <code>itemWidth</code> pour contrôler la taille de chaque groupe</li>
|
|
46
|
+
<li><strong>Marges négatives</strong> : <code>ma-n4</code> sur le conteneur avec <code>ma-4</code> sur les éléments pour un espacement optimal</li>
|
|
47
|
+
</ul>
|
|
48
|
+
</CriteriaCard>
|
|
49
|
+
|
|
50
|
+
<CriteriaCard icon="📱" title="États et chargement">
|
|
51
|
+
<ul>
|
|
52
|
+
<li><strong>États de chargement</strong> : Propagation de <code>loading</code> à tous les DataList enfants</li>
|
|
53
|
+
<li><strong>Slots avancés</strong> : Slot <code>item</code> avec contexte enrichi (dataListIndex inclus)</li>
|
|
54
|
+
<li><strong>Gestion HTML</strong> : Support de <code>renderHtmlValue</code> avec avertissement de dépréciation</li>
|
|
55
|
+
</ul>
|
|
56
|
+
</CriteriaCard>
|
|
57
|
+
</CriteriaSection>
|
|
58
|
+
|
|
59
|
+
<DemoSection componentName="DataListGroup">
|
|
60
|
+
<Primary />
|
|
61
|
+
</DemoSection>
|
|
62
|
+
|
|
63
|
+
<BestPracticesSection>
|
|
64
|
+
<ul>
|
|
65
|
+
<li><strong>Groupes cohérents</strong> : Organisez les DataList par thématiques logiques (informations personnelles, coordonnées, etc.)</li>
|
|
66
|
+
<li><strong>Titres distinctifs</strong> : Utilisez des <code>title</code> uniques et descriptifs pour chaque groupe</li>
|
|
67
|
+
<li><strong>Largeurs adaptées</strong> : Choisissez <code>itemWidth</code> en fonction du contenu (plus large pour les textes longs)</li>
|
|
68
|
+
<li><strong>Actions groupées</strong> : Maintenez la cohérence des actions entre les différents groupes</li>
|
|
69
|
+
<li><strong>États synchronisés</strong> : Utilisez <code>loading</code> au niveau du groupe pour des chargements coordonnés</li>
|
|
70
|
+
<li><strong>Slots contextuels</strong> : Exploitez le <code>data-list-index</code> dans les slots pour des personnalisations avancées</li>
|
|
71
|
+
</ul>
|
|
72
|
+
</BestPracticesSection>
|
|
73
|
+
|
|
74
|
+
<ResourcesSection>
|
|
75
|
+
<ul>
|
|
76
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Listbox</a></li>
|
|
77
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
|
|
78
|
+
<li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#11.10" target="_blank" rel="noopener noreferrer">RGAA Critère 11.10 : Listes de définitions</a></li>
|
|
79
|
+
<li><a href="https://developer.mozilla.org/fr/docs/Web/HTML/Element/ul" target="_blank" rel="noopener noreferrer">MDN : Élément ul - Liste non ordonnée</a></li>
|
|
80
|
+
</ul>
|
|
81
|
+
</ResourcesSection>
|
|
82
|
+
|
|
83
|
+
</AccessibilityGuideLayout>
|