@cnamts/synapse 1.0.20 → 1.0.22
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/{DateFilter-XURUmpMl.js → DateFilter-B5n-ZkLi.js} +29 -24
- package/dist/{NumberFilter-BZc0O8wV.js → NumberFilter-CtiZ9uj8.js} +1 -1
- package/dist/{PeriodFilter-ZNdXcl3p.js → PeriodFilter-DzqiMb-b.js} +1 -1
- package/dist/{SelectFilter-DshYU5OK.js → SelectFilter-BOYlF7rX.js} +1 -1
- package/dist/{TextFilter-D_c5dRPl.js → TextFilter-BOFRNfcX.js} +1 -1
- package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7399 -5967
- package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
- package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +8 -8
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +3 -3
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +16 -20
- package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1610 -1354
- package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +2411 -2027
- package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8889 -7327
- package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
- package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -6
- package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +8888 -7334
- package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +951 -839
- package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1613 -1357
- package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +223 -203
- package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +3 -3
- package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +3 -7
- package/dist/components/CollapsibleList/CollapsibleList.d.ts +4 -1
- package/dist/components/CookieBanner/CookieBanner.d.ts +303 -273
- package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +1297 -1156
- package/dist/components/CookiesSelection/CookiesSelection.d.ts +404 -377
- package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +1 -1
- package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +1088 -847
- package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
- package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +515 -321
- package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +162 -0
- package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
- package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1668 -5
- package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
- package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
- package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1609 -4
- package/dist/components/Customs/SyTextField/SyTextField.d.ts +1629 -1365
- package/dist/components/DataList/DataList.d.ts +1 -1
- package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3868 -3123
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1946 -1562
- package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +833 -687
- package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
- package/dist/components/DialogBox/DialogBox.d.ts +482 -416
- package/dist/components/DownloadBtn/config.d.ts +1 -1
- package/dist/components/ErrorPage/ErrorPage.d.ts +5 -12
- package/dist/components/ErrorPage/locales.d.ts +18 -3
- package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
- package/dist/components/FileUpload/FileUpload.d.ts +6 -4
- package/dist/components/FileUpload/locales.d.ts +1 -0
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +418 -366
- package/dist/components/FooterBar/FooterBar.d.ts +13 -1
- package/dist/components/FooterBar/locales.d.ts +1 -0
- package/dist/components/FooterBar/types.d.ts +1 -0
- package/dist/components/HeaderBar/HeaderBar.d.ts +1 -0
- package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -0
- package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +3 -6
- package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +1031 -643
- package/dist/components/LangBtn/LangBtn.d.ts +277 -239
- package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +4 -0
- package/dist/components/MaintenancePage/MaintenancePage.d.ts +16 -1
- package/dist/components/MaintenancePage/locales.d.ts +18 -2
- package/dist/components/NirField/NirField.d.ts +1659 -1371
- package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
- package/dist/components/NotFoundPage/locales.d.ts +20 -4
- package/dist/components/PageContainer/PageContainer.d.ts +3 -1
- package/dist/components/PasswordField/PasswordField.d.ts +1 -1
- package/dist/components/PeriodField/PeriodField.d.ts +7712 -6216
- package/dist/components/PhoneField/PhoneField.d.ts +831 -687
- package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
- package/dist/components/StatusPage/StatusPage.d.ts +50 -0
- package/dist/components/SubHeader/SubHeader.d.ts +2 -0
- package/dist/components/SyAlert/SyAlert.d.ts +74 -70
- package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +10 -1
- package/dist/components/SyHeading/SyHeading.d.ts +20 -0
- package/dist/components/SyTextArea/SyTextArea.d.ts +476 -420
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
- package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
- package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
- package/dist/components/Tables/common/SyTablePagination.d.ts +269 -170
- package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
- package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
- package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
- package/dist/components/Tables/common/types.d.ts +2 -0
- package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +35 -1212
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/types.d.ts +2 -0
- package/dist/design-system-v3.js +131 -127
- package/dist/design-system-v3.umd.cjs +274 -274
- package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
- package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
- package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
- package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
- package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
- package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
- package/dist/main-CEl4J8_T.js +37241 -0
- package/dist/style.css +1 -1
- package/dist/utils/theme/index.d.ts +6 -0
- package/dist/vuetifyConfig.d.ts +14 -14
- package/package.json +16 -7
- package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
- package/src/assets/apTokens.scss +53 -17
- package/src/assets/overrides/_icons.scss +12 -2
- package/src/assets/overrides/_tooltips.scss +5 -6
- package/src/assets/overrides/_typography.scss +17 -2
- package/src/assets/overrides/_utilities.scss +49 -3
- package/src/assets/tokens.scss +53 -17
- package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
- package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
- package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
- package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
- package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
- package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
- package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
- package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
- package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
- package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
- package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
- package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
- package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
- package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
- package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
- package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
- package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
- package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
- package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
- package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
- package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
- package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
- package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
- package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
- package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
- package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
- package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
- package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
- package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
- package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
- package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
- package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
- package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
- package/src/components/BackBtn/BackBtn.vue +1 -1
- package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +36 -18
- package/src/components/ChipList/ChipList.vue +4 -2
- package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
- package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
- package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
- package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
- package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
- package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
- package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +67 -11
- package/src/components/CookieBanner/CookieBanner.stories.ts +21 -20
- package/src/components/CookieBanner/CookieBanner.vue +35 -10
- package/src/components/CookieBanner/accessibilite/Accessibility.mdx +76 -11
- package/src/components/CookieBanner/tests/CookieBanner.spec.ts +56 -4
- package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
- package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
- package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
- package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
- package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
- package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
- package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
- package/src/components/CopyBtn/CopyBtn.vue +6 -4
- package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
- package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
- package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
- package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
- package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
- package/src/components/Customs/Selects/SySelect/SySelect.vue +17 -0
- package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
- package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
- package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
- package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
- package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
- package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
- package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
- package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
- package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
- package/src/components/Customs/SyCheckbox/SyCheckbox.vue +17 -28
- package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +1 -1
- package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
- package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
- package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
- package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
- package/src/components/Customs/SyPagination/SyPagination.vue +20 -5
- package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
- package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +38 -12
- package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
- package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
- package/src/components/Customs/SyTextField/SyTextField.vue +39 -5
- package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
- package/src/components/DatePicker/CalendarMode/DatePicker.vue +55 -19
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +44 -3
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +9 -1
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
- package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
- package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
- package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
- package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
- package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
- package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
- package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
- package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
- package/src/components/DialogBox/DialogBox.stories.ts +13 -0
- package/src/components/DialogBox/DialogBox.vue +12 -5
- package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
- package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
- package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
- package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
- package/src/components/DownloadBtn/config.ts +1 -1
- package/src/components/ErrorPage/ErrorPage.mdx +6 -16
- package/src/components/ErrorPage/ErrorPage.stories.ts +90 -126
- package/src/components/ErrorPage/ErrorPage.vue +44 -125
- package/src/components/ErrorPage/accessibilite/Accessibility.mdx +83 -6
- package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
- package/src/components/ErrorPage/locales.ts +21 -3
- package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
- package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +10 -266
- package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
- package/src/components/FileList/FileList.stories.ts +4 -0
- package/src/components/FileList/UploadItem/UploadItem.vue +8 -3
- package/src/components/FileList/UploadItem/locales.ts +10 -0
- package/src/components/FileList/accessibilite/Accessibility.mdx +55 -7
- package/src/components/FileUpload/FileUpload.vue +65 -37
- package/src/components/FileUpload/FileUploadContent.vue +1 -1
- package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
- package/src/components/FileUpload/locales.ts +1 -0
- package/src/components/FileUpload/tests/FileUpload.spec.ts +14 -14
- package/src/components/FilterInline/FilterInline.stories.ts +0 -15
- package/src/components/FilterInline/FilterInline.vue +1 -0
- package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
- package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
- package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
- package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
- package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
- package/src/components/FooterBar/FooterBar.stories.ts +316 -48
- package/src/components/FooterBar/FooterBar.vue +67 -9
- package/src/components/FooterBar/config.ts +2 -2
- package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
- package/src/components/FooterBar/locales.ts +1 -0
- package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
- package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
- package/src/components/FooterBar/types.d.ts +1 -0
- package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
- package/src/components/HeaderBar/HeaderBar.vue +4 -0
- package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +7 -2
- package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
- package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
- package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
- package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
- package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -0
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
- package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
- package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
- package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
- package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
- package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
- package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
- package/src/components/MaintenancePage/MaintenancePage.vue +42 -7
- package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +63 -6
- package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
- package/src/components/MaintenancePage/locales.ts +24 -3
- package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +76 -3
- package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +60 -2
- package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +5 -2
- package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
- package/src/components/NotFoundPage/NotFoundPage.stories.ts +4 -4
- package/src/components/NotFoundPage/NotFoundPage.vue +30 -14
- package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +80 -6
- package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
- package/src/components/NotFoundPage/locales.ts +24 -4
- package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +217 -4
- package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +123 -12
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -2
- package/src/components/NotificationBar/NotificationBar.mdx +2 -2
- package/src/components/NotificationBar/accessibilite/Accessibility.mdx +68 -8
- package/src/components/PageContainer/PageContainer.stories.ts +47 -0
- package/src/components/PageContainer/PageContainer.vue +4 -2
- package/src/components/PageContainer/accessibilite/Accessibility.mdx +67 -0
- package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
- package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
- package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
- package/src/components/PeriodField/PeriodField.vue +4 -0
- package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
- package/src/components/PhoneField/PhoneField.stories.ts +115 -69
- package/src/components/PhoneField/PhoneField.vue +152 -83
- package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
- package/src/components/PhoneField/indicatifs.ts +2 -2
- package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +22 -9
- package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
- package/src/components/SearchListField/SearchListField.vue +1 -1
- package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
- package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
- package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
- package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
- package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
- package/src/components/SocialMediaLinks/SocialMediaLinks.vue +10 -2
- package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +63 -11
- package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
- package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
- package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
- package/src/components/StatusPage/StatusPage.mdx +31 -0
- package/src/components/StatusPage/StatusPage.stories.ts +236 -0
- package/src/components/StatusPage/StatusPage.vue +167 -0
- package/src/components/StatusPage/accessibilite/Accessibility.mdx +100 -0
- package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +30 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +53 -0
- package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +272 -0
- package/src/components/SubHeader/SubHeader.stories.ts +16 -0
- package/src/components/SubHeader/SubHeader.vue +6 -3
- package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
- package/src/components/SyAlert/SyAlert.vue +21 -20
- package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
- package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
- package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
- package/src/components/SyHeading/SyHeading.vue +18 -0
- package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
- package/src/components/TableToolbar/TableToolbar.vue +1 -1
- package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -35
- package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
- package/src/components/Tables/SyTable/SyTable.vue +2 -0
- package/src/components/Tables/common/SyTablePagination.vue +16 -10
- package/src/components/Tables/common/filters/DateFilter.vue +5 -0
- package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
- package/src/components/Tables/common/types.ts +3 -0
- package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
- package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +118 -14
- package/src/components/UploadWorkflow/UploadWorkflow.vue +59 -31
- package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
- package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
- package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +37 -7
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +139 -112
- package/src/components/UploadWorkflow/useFileList.ts +7 -0
- package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
- package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
- package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
- package/src/components/index.ts +4 -0
- package/src/components/types.ts +4 -0
- package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
- package/src/composables/date/useDateInitializationDayjs.ts +4 -7
- package/src/composables/date/useDatePickerAccessibility.ts +2 -3
- package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
- package/src/composables/rules/useFieldValidation.ts +24 -9
- package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
- package/src/composables/useFilterable/useFilterable.ts +7 -1
- package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
- package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
- package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
- package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
- package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
- package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
- package/src/directives/rgaaSvgFix.ts +2 -7
- package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
- package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
- package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
- package/src/stories/Accessibilite/Introduction.mdx +22 -3
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
- package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
- package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
- package/src/stories/DesignTokens/Colors.mdx +8 -59
- package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
- package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
- package/src/utils/theme/index.ts +19 -0
- package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
- package/dist/components/MaintenancePage/index.d.ts +0 -2
- package/dist/main-CuI6xaPq.js +0 -36396
- package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
- package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
- package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
- package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
- package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
- package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
- package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
- package/src/components/MaintenancePage/index.ts +0 -3
- package/src/components/PageContainer/Accessibilite/Accessibility.mdx +0 -53
- package/src/components/PageContainer/Accessibilite/AccessibilityGuide.mdx +0 -0
- package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
- /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import SyCheckBoxGroup from '../SyCheckBoxGroup.vue'
|
|
2
|
+
import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
|
|
3
|
+
import { mount } from '@vue/test-utils'
|
|
4
|
+
import { describe, it, expect } from 'vitest'
|
|
5
|
+
import { nextTick } from 'vue'
|
|
6
|
+
|
|
7
|
+
describe('SyCheckBoxGroup', () => {
|
|
8
|
+
it('should render correctly', () => {
|
|
9
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
10
|
+
props: {
|
|
11
|
+
label: 'Test checkbox group',
|
|
12
|
+
options: [
|
|
13
|
+
{ label: 'A', value: 'A', id: 'opt-a' },
|
|
14
|
+
{ label: 'B', value: 'B', id: 'opt-b' },
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
expect(wrapper.find('.sy-checkbox-group').exists()).toBe(true)
|
|
20
|
+
expect(wrapper.text()).toContain('Test checkbox group')
|
|
21
|
+
expect(wrapper.findAll('input[type="checkbox"]').length).toBe(2)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('should handle v-model correctly (single)', async () => {
|
|
25
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
26
|
+
props: {
|
|
27
|
+
'modelValue': null,
|
|
28
|
+
'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
|
|
29
|
+
'options': [
|
|
30
|
+
{ label: 'Option A', value: 'A', id: 'opt-a' },
|
|
31
|
+
{ label: 'Option B', value: 'B', id: 'opt-b' },
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
const checkboxes = wrapper.findAllComponents(SyCheckbox)
|
|
37
|
+
expect(checkboxes.length).toBe(2)
|
|
38
|
+
|
|
39
|
+
await checkboxes[0]?.find('input').setValue(true)
|
|
40
|
+
|
|
41
|
+
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(['A'])
|
|
42
|
+
expect(wrapper.emitted('change')?.[0]).toEqual(['A'])
|
|
43
|
+
|
|
44
|
+
// Uncheck
|
|
45
|
+
await checkboxes[0]?.find('input').setValue(false)
|
|
46
|
+
expect(wrapper.emitted('update:modelValue')?.[1]).toEqual([null])
|
|
47
|
+
expect(wrapper.emitted('change')?.[1]).toEqual([null])
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it('should handle v-model correctly (multiple)', async () => {
|
|
51
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
52
|
+
props: {
|
|
53
|
+
'multiple': true,
|
|
54
|
+
'modelValue': [],
|
|
55
|
+
'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
|
|
56
|
+
'options': [
|
|
57
|
+
{ label: 'Option A', value: 'A', id: 'opt-a' },
|
|
58
|
+
{ label: 'Option B', value: 'B', id: 'opt-b' },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const checkboxes = wrapper.findAllComponents(SyCheckbox)
|
|
64
|
+
expect(checkboxes.length).toBe(2)
|
|
65
|
+
|
|
66
|
+
await checkboxes[0]?.find('input').setValue(true)
|
|
67
|
+
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([['A']])
|
|
68
|
+
|
|
69
|
+
await checkboxes[1]?.find('input').setValue(true)
|
|
70
|
+
expect(wrapper.emitted('update:modelValue')?.[1]).toEqual([['A', 'B']])
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it('should handle validation correctly (required)', async () => {
|
|
74
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
75
|
+
props: {
|
|
76
|
+
'modelValue': null,
|
|
77
|
+
'label': 'Required CheckBoxGroup',
|
|
78
|
+
'required': true,
|
|
79
|
+
'isValidateOnBlur': false,
|
|
80
|
+
'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
|
|
81
|
+
'options': [{ label: 'X', value: 'X', id: 'opt-x' }],
|
|
82
|
+
},
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
await wrapper.vm.validateOnSubmit()
|
|
86
|
+
await nextTick()
|
|
87
|
+
expect(wrapper.vm.validation.hasError.value).toBe(true)
|
|
88
|
+
expect(wrapper.vm.validation.errors.value[0]).toContain('est requis')
|
|
89
|
+
|
|
90
|
+
await wrapper.find('input').setValue(true)
|
|
91
|
+
|
|
92
|
+
await wrapper.vm.validateOnSubmit()
|
|
93
|
+
await nextTick()
|
|
94
|
+
|
|
95
|
+
expect(wrapper.vm.validation.hasError.value).toBe(false)
|
|
96
|
+
expect(wrapper.props('modelValue')).toBe('X')
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
it('should handle readonly and disabled states', async () => {
|
|
100
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
101
|
+
props: {
|
|
102
|
+
modelValue: null,
|
|
103
|
+
readonly: true,
|
|
104
|
+
options: [{ label: 'X', value: 'X', id: 'opt-x' }],
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
wrapper.findComponent(SyCheckbox).vm.$emit('update:modelValue', true)
|
|
109
|
+
await nextTick()
|
|
110
|
+
expect(wrapper.emitted('update:modelValue')).toBeFalsy()
|
|
111
|
+
|
|
112
|
+
await wrapper.setProps({ readonly: false, disabled: true })
|
|
113
|
+
wrapper.findComponent(SyCheckbox).vm.$emit('update:modelValue', true)
|
|
114
|
+
await nextTick()
|
|
115
|
+
expect(wrapper.emitted('update:modelValue')).toBeFalsy()
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it('should handle custom validation rules', async () => {
|
|
119
|
+
const customRule = {
|
|
120
|
+
type: 'custom',
|
|
121
|
+
options: {
|
|
122
|
+
validate: (value: unknown) => value === 'OK',
|
|
123
|
+
message: 'Vous devez sélectionner une option.',
|
|
124
|
+
fieldIdentifier: 'Custom CheckBoxGroup',
|
|
125
|
+
},
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const wrapper = mount(SyCheckBoxGroup, {
|
|
129
|
+
props: {
|
|
130
|
+
'modelValue': null,
|
|
131
|
+
'required': true,
|
|
132
|
+
'customRules': [customRule],
|
|
133
|
+
'isValidateOnBlur': false,
|
|
134
|
+
'options': [
|
|
135
|
+
{ label: 'Non', value: 'NO', id: 'opt-no' },
|
|
136
|
+
{ label: 'Oui', value: 'OK', id: 'opt-ok' },
|
|
137
|
+
],
|
|
138
|
+
'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
|
|
139
|
+
},
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
const isValidInitial = await wrapper.vm.validateOnSubmit()
|
|
143
|
+
expect(isValidInitial).toBe(false)
|
|
144
|
+
expect(wrapper.vm.validation.errors.value).toContain('Vous devez sélectionner une option.')
|
|
145
|
+
|
|
146
|
+
await wrapper.setProps({ modelValue: 'OK' })
|
|
147
|
+
|
|
148
|
+
const isValidCorrect = await wrapper.vm.validateOnSubmit()
|
|
149
|
+
expect(isValidCorrect).toBe(true)
|
|
150
|
+
expect(wrapper.vm.validation.errors.value).toHaveLength(0)
|
|
151
|
+
})
|
|
152
|
+
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { computed, ref, watch, onMounted, nextTick } from 'vue'
|
|
2
|
+
import { computed, ref, watch, onMounted, onUpdated, nextTick } from 'vue'
|
|
3
|
+
import type { VCheckbox } from 'vuetify/components'
|
|
3
4
|
import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
|
|
4
5
|
import { useValidatable } from '@/composables/validation/useValidatable'
|
|
5
6
|
import { locales } from './locales'
|
|
@@ -70,6 +71,8 @@
|
|
|
70
71
|
|
|
71
72
|
const emit = defineEmits(['update:modelValue', 'update:indeterminate', 'change'])
|
|
72
73
|
|
|
74
|
+
const checkboxRef = ref<VCheckbox | null>(null)
|
|
75
|
+
|
|
73
76
|
const internalIndeterminate = ref(props.indeterminate)
|
|
74
77
|
|
|
75
78
|
const generatedLabel = computed(() => {
|
|
@@ -203,7 +206,7 @@
|
|
|
203
206
|
|
|
204
207
|
const ariaChecked = computed(() => {
|
|
205
208
|
if (internalIndeterminate.value) return 'mixed'
|
|
206
|
-
return model.value ? 'true' :
|
|
209
|
+
return model.value ? 'true' : undefined
|
|
207
210
|
})
|
|
208
211
|
|
|
209
212
|
const labelColor = computed(() => {
|
|
@@ -239,39 +242,24 @@
|
|
|
239
242
|
// Fonction pour supprimer les attributs ARIA non désirés des éléments input
|
|
240
243
|
const removeAriaAttributes = () => {
|
|
241
244
|
nextTick(() => {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Configurer un MutationObserver pour surveiller les changements futurs
|
|
250
|
-
const observer = new MutationObserver((mutations) => {
|
|
251
|
-
mutations.forEach(() => {
|
|
252
|
-
// Pour aria-disabled
|
|
253
|
-
const newCheckboxInputsDisabled = document.querySelectorAll('input[type="checkbox"][aria-disabled="false"]')
|
|
254
|
-
newCheckboxInputsDisabled.forEach((input) => {
|
|
255
|
-
input.removeAttribute('aria-disabled')
|
|
256
|
-
})
|
|
257
|
-
})
|
|
258
|
-
})
|
|
259
|
-
|
|
260
|
-
// Observer le document pour les changements
|
|
261
|
-
observer.observe(document.body, {
|
|
262
|
-
subtree: true,
|
|
263
|
-
childList: true,
|
|
264
|
-
attributes: true,
|
|
265
|
-
attributeFilter: ['aria-disabled'],
|
|
266
|
-
})
|
|
245
|
+
if (checkboxRef.value) {
|
|
246
|
+
const checkboxInput = checkboxRef.value.$el.querySelector('input[type="checkbox"][aria-disabled="false"]')
|
|
247
|
+
if (checkboxInput) {
|
|
248
|
+
checkboxInput.removeAttribute('aria-disabled')
|
|
249
|
+
}
|
|
250
|
+
}
|
|
267
251
|
})
|
|
268
252
|
}
|
|
269
253
|
|
|
270
|
-
// Appliquer la correction lors du montage du composant
|
|
254
|
+
// Appliquer la correction lors du montage et de la mise à jour du composant
|
|
271
255
|
onMounted(() => {
|
|
272
256
|
removeAriaAttributes()
|
|
273
257
|
})
|
|
274
258
|
|
|
259
|
+
onUpdated(() => {
|
|
260
|
+
removeAriaAttributes()
|
|
261
|
+
})
|
|
262
|
+
|
|
275
263
|
// Intégration avec le système de validation du formulaire
|
|
276
264
|
useValidatable(validateOnSubmit)
|
|
277
265
|
|
|
@@ -317,6 +305,7 @@
|
|
|
317
305
|
<div>
|
|
318
306
|
<VCheckbox
|
|
319
307
|
:id="props.id"
|
|
308
|
+
ref="checkboxRef"
|
|
320
309
|
v-model="model"
|
|
321
310
|
:name="props.name"
|
|
322
311
|
:label="generatedLabel"
|
|
@@ -3,7 +3,7 @@ import * as SyCheckboxStories from '../SyCheckbox.stories';
|
|
|
3
3
|
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
4
4
|
import '@/stories/styles/shared.css';
|
|
5
5
|
|
|
6
|
-
<Meta of={SyCheckboxStories} />
|
|
6
|
+
<Meta of={SyCheckboxStories} name="Accessibility" />
|
|
7
7
|
|
|
8
8
|
<div className="accessibility-guide">
|
|
9
9
|
<div className="header">
|
|
@@ -4,7 +4,7 @@ import { describe, it } from 'vitest'
|
|
|
4
4
|
import { mount } from '@vue/test-utils'
|
|
5
5
|
import { axe } from 'vitest-axe'
|
|
6
6
|
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
|
-
import SyForm from '
|
|
7
|
+
import SyForm from './SyForm.vue'
|
|
8
8
|
|
|
9
9
|
// Scénario d’accessibilité : formulaire contenant un champ et un bouton de soumission.
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @vitest-environment jsdom
|
|
2
2
|
|
|
3
|
-
import { describe, it } from 'vitest'
|
|
3
|
+
import { describe, it, expect } from 'vitest'
|
|
4
4
|
import { mount } from '@vue/test-utils'
|
|
5
5
|
import { axe } from 'vitest-axe'
|
|
6
6
|
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
@@ -19,7 +19,7 @@ describe('SyIcon – accessibility (axe)', () => {
|
|
|
19
19
|
global: {
|
|
20
20
|
stubs: {
|
|
21
21
|
'v-icon': {
|
|
22
|
-
template: '<span class="v-icon" role="
|
|
22
|
+
template: '<span class="v-icon" :role="role" :aria-label="ariaLabel" :aria-hidden="ariaHidden"><svg><slot></slot></svg></span>',
|
|
23
23
|
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
|
|
24
24
|
},
|
|
25
25
|
},
|
|
@@ -34,4 +34,33 @@ describe('SyIcon – accessibility (axe)', () => {
|
|
|
34
34
|
ignoreRules: ['region'],
|
|
35
35
|
})
|
|
36
36
|
})
|
|
37
|
+
|
|
38
|
+
it('hides decorative icons from assistive tech (aria-hidden)', async () => {
|
|
39
|
+
const wrapper = mount(SyIcon, {
|
|
40
|
+
props: {
|
|
41
|
+
icon: 'mdi-star',
|
|
42
|
+
decorative: true,
|
|
43
|
+
},
|
|
44
|
+
global: {
|
|
45
|
+
stubs: {
|
|
46
|
+
'v-icon': {
|
|
47
|
+
template: '<span class="v-icon" :role="role" :aria-label="ariaLabel" :aria-hidden="ariaHidden"><svg><slot></slot></svg></span>',
|
|
48
|
+
props: ['color', 'size', 'role', 'aria-hidden', 'aria-label'],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
directives: {
|
|
52
|
+
'rgaa-svg-fix': () => {},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
const iconEl = wrapper.find('.v-icon')
|
|
58
|
+
expect(iconEl.attributes('aria-hidden')).toBe('true')
|
|
59
|
+
|
|
60
|
+
// Axe should not report a visible control with missing label since it is hidden
|
|
61
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
62
|
+
assertNoA11yViolations(results, 'SyIcon – decorative icon hidden from AT', {
|
|
63
|
+
ignoreRules: ['region'],
|
|
64
|
+
})
|
|
65
|
+
})
|
|
37
66
|
})
|
|
@@ -34,10 +34,12 @@
|
|
|
34
34
|
size?: string
|
|
35
35
|
}>()
|
|
36
36
|
|
|
37
|
+
const resolvedDecorative = computed(() => props.decorative ?? true)
|
|
38
|
+
|
|
37
39
|
// Configuration pour la directive rgaaSvgFix
|
|
38
40
|
const rgaaSvgFixConfig = computed(() => {
|
|
39
41
|
return {
|
|
40
|
-
isDecorative:
|
|
42
|
+
isDecorative: resolvedDecorative.value,
|
|
41
43
|
role: props.role,
|
|
42
44
|
autoDetectButton: props.autoDetectButton,
|
|
43
45
|
}
|
|
@@ -45,16 +47,16 @@
|
|
|
45
47
|
|
|
46
48
|
// Vérification à l'initialisation du composant
|
|
47
49
|
onMounted(() => {
|
|
48
|
-
checkAccessibility(props.icon,
|
|
50
|
+
checkAccessibility(props.icon, resolvedDecorative.value, props.label)
|
|
49
51
|
})
|
|
50
52
|
|
|
51
53
|
// Vérification à chaque changement des props concernées
|
|
52
54
|
watch(
|
|
53
55
|
[() => props.decorative, () => props.label, () => props.icon],
|
|
54
|
-
([
|
|
56
|
+
([, label, icon]) => {
|
|
55
57
|
checkAccessibility(
|
|
56
58
|
icon as string,
|
|
57
|
-
|
|
59
|
+
resolvedDecorative.value,
|
|
58
60
|
label as string | undefined,
|
|
59
61
|
)
|
|
60
62
|
},
|
|
@@ -66,7 +68,9 @@
|
|
|
66
68
|
v-rgaa-svg-fix="rgaaSvgFixConfig"
|
|
67
69
|
:color="props.color"
|
|
68
70
|
:size="props.size"
|
|
69
|
-
:
|
|
71
|
+
:role="props.role"
|
|
72
|
+
:aria-label="resolvedDecorative ? undefined : props.label"
|
|
73
|
+
:aria-hidden="resolvedDecorative ? 'true' : undefined"
|
|
70
74
|
>
|
|
71
75
|
{{ icon }}
|
|
72
76
|
</v-icon>
|
|
@@ -41,6 +41,10 @@ const meta: Meta<typeof SyPagination> = {
|
|
|
41
41
|
'append': {
|
|
42
42
|
description: 'Slot pour ajouter du contenu après la pagination',
|
|
43
43
|
},
|
|
44
|
+
'headingLevel': {
|
|
45
|
+
control: { type: 'select' },
|
|
46
|
+
options: [1, 2, 3, 4, 5, 6],
|
|
47
|
+
},
|
|
44
48
|
},
|
|
45
49
|
} as Meta<typeof SyPagination>
|
|
46
50
|
|
|
@@ -57,6 +61,7 @@ export const Default: Story = {
|
|
|
57
61
|
},
|
|
58
62
|
},
|
|
59
63
|
args: {
|
|
64
|
+
'headingLevel': 2,
|
|
60
65
|
'modelValue': 1,
|
|
61
66
|
'pages': 5,
|
|
62
67
|
'visible': 5,
|
|
@@ -74,6 +79,7 @@ export const Default: Story = {
|
|
|
74
79
|
<SyPagination
|
|
75
80
|
v-model="currentPage"
|
|
76
81
|
:pages="args.pages"
|
|
82
|
+
:headingLevel="args.headingLevel"
|
|
77
83
|
:visible="args.visible"
|
|
78
84
|
:label="args.label"
|
|
79
85
|
@update:model-value="args['onUpdate:modelValue']"
|
|
@@ -92,6 +98,7 @@ export const ManyPages: Story = {
|
|
|
92
98
|
},
|
|
93
99
|
},
|
|
94
100
|
args: {
|
|
101
|
+
'headingLevel': 2,
|
|
95
102
|
'modelValue': 5,
|
|
96
103
|
'pages': 20,
|
|
97
104
|
'visible': 5,
|
|
@@ -111,6 +118,7 @@ export const ManyPages: Story = {
|
|
|
111
118
|
:pages="args.pages"
|
|
112
119
|
:visible="args.visible"
|
|
113
120
|
:label="args.label"
|
|
121
|
+
:headingLevel="args.headingLevel"
|
|
114
122
|
@update:model-value="args['onUpdate:modelValue']"
|
|
115
123
|
/>
|
|
116
124
|
</div>
|
|
@@ -127,6 +135,7 @@ export const CustomButtons: Story = {
|
|
|
127
135
|
},
|
|
128
136
|
},
|
|
129
137
|
args: {
|
|
138
|
+
'headingLevel': 2,
|
|
130
139
|
'modelValue': 5,
|
|
131
140
|
'pages': 20,
|
|
132
141
|
'visible': 5,
|
|
@@ -145,6 +154,7 @@ export const CustomButtons: Story = {
|
|
|
145
154
|
v-model="currentPage"
|
|
146
155
|
:pages="args.pages"
|
|
147
156
|
:visible="args.visible"
|
|
157
|
+
:headingLevel="args.headingLevel"
|
|
148
158
|
:label="args.label"
|
|
149
159
|
@update:model-value="args['onUpdate:modelValue']"
|
|
150
160
|
>
|
|
@@ -175,6 +185,7 @@ export const Slots: Story = {
|
|
|
175
185
|
},
|
|
176
186
|
},
|
|
177
187
|
args: {
|
|
188
|
+
'headingLevel': 2,
|
|
178
189
|
'modelValue': 3,
|
|
179
190
|
'pages': 10,
|
|
180
191
|
'visible': 5,
|
|
@@ -186,11 +197,11 @@ export const Slots: Story = {
|
|
|
186
197
|
const currentPage = ref(args.modelValue)
|
|
187
198
|
const itemsPerPage = 10
|
|
188
199
|
const totalItems = 100
|
|
189
|
-
|
|
200
|
+
const headingLevel = 2
|
|
190
201
|
const startItem = computed(() => (currentPage.value - 1) * itemsPerPage + 1)
|
|
191
202
|
const endItem = computed(() => Math.min(currentPage.value * itemsPerPage, totalItems))
|
|
192
203
|
|
|
193
|
-
return { args, currentPage, totalItems, startItem, endItem }
|
|
204
|
+
return { args, currentPage, totalItems, startItem, endItem, headingLevel }
|
|
194
205
|
},
|
|
195
206
|
template: `
|
|
196
207
|
<div>
|
|
@@ -199,6 +210,7 @@ export const Slots: Story = {
|
|
|
199
210
|
:pages="args.pages"
|
|
200
211
|
:visible="args.visible"
|
|
201
212
|
:label="args.label"
|
|
213
|
+
:headingLevel="args.headingLevel"
|
|
202
214
|
@update:model-value="args['onUpdate:modelValue']"
|
|
203
215
|
>
|
|
204
216
|
<template #prepend>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { computed, ref } from 'vue'
|
|
3
|
+
import SyHeading from '@/components/SyHeading/SyHeading.vue'
|
|
3
4
|
|
|
4
5
|
// Props definition
|
|
5
|
-
const props = defineProps<{
|
|
6
|
+
const props = withDefaults(defineProps<{
|
|
6
7
|
/**
|
|
7
8
|
* Current page number
|
|
8
9
|
*/
|
|
@@ -23,7 +24,18 @@
|
|
|
23
24
|
* ID of the element controlled by this pagination
|
|
24
25
|
*/
|
|
25
26
|
ariaControls?: string
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Heading level for the pagination label (for accessibility)
|
|
29
|
+
*/
|
|
30
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
|
|
31
|
+
|
|
32
|
+
}>(), {
|
|
33
|
+
pages: undefined,
|
|
34
|
+
visible: undefined,
|
|
35
|
+
label: undefined,
|
|
36
|
+
ariaControls: undefined,
|
|
37
|
+
headingLevel: 2,
|
|
38
|
+
})
|
|
27
39
|
|
|
28
40
|
// Default values for optional props
|
|
29
41
|
const visiblePages = computed(() => props.visible || 5)
|
|
@@ -187,12 +199,13 @@
|
|
|
187
199
|
:aria-labelledby="uniqueId"
|
|
188
200
|
:aria-controls="ariaControls"
|
|
189
201
|
>
|
|
190
|
-
<
|
|
202
|
+
<SyHeading
|
|
191
203
|
:id="uniqueId"
|
|
192
204
|
class="d-sr-only"
|
|
205
|
+
:level="headingLevel"
|
|
193
206
|
>
|
|
194
207
|
{{ `${label}` }}
|
|
195
|
-
</
|
|
208
|
+
</SyHeading>
|
|
196
209
|
<ul class="list">
|
|
197
210
|
<!-- First page button (optional) -->
|
|
198
211
|
<li v-if="$slots['first-page']">
|
|
@@ -390,7 +403,9 @@
|
|
|
390
403
|
}
|
|
391
404
|
|
|
392
405
|
&.disabled {
|
|
393
|
-
color: rgb(0 0 0 / 60%);
|
|
406
|
+
color: rgb(0 0 0 / 60%);
|
|
407
|
+
|
|
408
|
+
/* Increased from 40% to 60% for better contrast */
|
|
394
409
|
border-color: rgb(0 0 0 / 20%);
|
|
395
410
|
pointer-events: none;
|
|
396
411
|
}
|
|
@@ -1,10 +1,81 @@
|
|
|
1
|
-
import { Meta,
|
|
2
|
-
import * as
|
|
3
|
-
import '@/
|
|
1
|
+
import { Meta, Primary } from '@storybook/blocks';
|
|
2
|
+
import * as SyPaginationStories from '../SyPagination.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
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
12
|
|
|
5
|
-
<Meta of={
|
|
13
|
+
<Meta of={SyPaginationStories} />
|
|
6
14
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
15
|
+
<AccessibilityGuideLayout
|
|
16
|
+
componentName="SyPagination"
|
|
17
|
+
iconSrc={AccessibilityIcon}
|
|
18
|
+
>
|
|
19
|
+
<CriteriaSection>
|
|
20
|
+
<CriteriaCard icon="🧩" title="Niveau de titre configurable via la prop headingLevel">
|
|
21
|
+
<ul>
|
|
22
|
+
<li>Le niveau du titre (h1 à h6) est défini grâce à la propriété <strong>headingLevel</strong> déclarée dans le composant. Si aucune valeur n’est fournie, le composant applique par défaut un titre de niveau h2, défini dans l’implémentation du composant.</li>
|
|
23
|
+
<code><SyPagination
|
|
24
|
+
:heading-level="2" /> </code>
|
|
25
|
+
|
|
26
|
+
<li><strong>Accessibilité</strong> : Permet que la hiérarchie entre les titres soit pertinente (critère 9.1.1 RGAA) </li>
|
|
27
|
+
</ul>
|
|
28
|
+
</CriteriaCard>
|
|
29
|
+
<CriteriaCard icon="🔍" title="Structure sémantique">
|
|
30
|
+
<ul>
|
|
31
|
+
<li><strong>Zone de navigation</strong> : utilisation de <code><nav></code> et <code><ul></code> pour structurer la pagination.</li>
|
|
32
|
+
<li><strong>Nom accessible</strong> : titre <code><h2></code> caché (classe <code>d-sr-only</code>) relié au <code>nav</code> via <code>aria-labelledby</code>; libellé personnalisable avec la prop <code>label</code> (par défaut « Pagination »).</li>
|
|
33
|
+
<li><strong>Association au contenu</strong> : prise en charge de <code>aria-controls</code> pour relier la pagination à la zone paginée.</li>
|
|
34
|
+
<li><strong>Page active</strong> : l’attribut <code>aria-current="page"</code> est appliqué au lien de la page courante.</li>
|
|
35
|
+
</ul>
|
|
36
|
+
</CriteriaCard>
|
|
37
|
+
|
|
38
|
+
<CriteriaCard icon="⌨️" title="Navigation clavier">
|
|
39
|
+
<ul>
|
|
40
|
+
<li><strong>Tabulation</strong> : l’ordre de tab suit la séquence logique (Précédent → numéros → Suivant).</li>
|
|
41
|
+
<li><strong>Activation</strong> : les liens de pagination se déclenchent à l’Entrée (ou Espace selon le navigateur).</li>
|
|
42
|
+
<li><strong>Focus visible</strong> : le focus natif reste apparent sur les liens (<code><a></code>).</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</CriteriaCard>
|
|
45
|
+
|
|
46
|
+
<CriteriaCard icon="📱" title="États et retours d’information">
|
|
47
|
+
<ul>
|
|
48
|
+
<li><strong>Boutons indisponibles</strong> : <code>aria-disabled="true"</code> est ajouté sur « Précédent » / « Suivant » / premières/dernières pages lorsque non actionnables.</li>
|
|
49
|
+
<li><strong>Ellipses non interactives</strong> : les séparateurs « … » sont rendus non cliquables pour éviter la confusion.</li>
|
|
50
|
+
</ul>
|
|
51
|
+
</CriteriaCard>
|
|
52
|
+
|
|
53
|
+
<CriteriaCard icon="🎨" title="Personnalisation accessible">
|
|
54
|
+
<ul>
|
|
55
|
+
<li>Slots pour <code>first-page</code>, <code>previous</code>, <code>next</code>, <code>last-page</code> et <code>page-number</code> afin d’adapter les libellés ou ajouter des icônes.</li>
|
|
56
|
+
<li>Possibilité d’ajouter du contexte via <code>prepend</code> / <code>append</code> (ex. compteur « Éléments 21-40 sur 200 »).</li>
|
|
57
|
+
</ul>
|
|
58
|
+
</CriteriaCard>
|
|
59
|
+
</CriteriaSection>
|
|
60
|
+
|
|
61
|
+
<DemoSection componentName="SyPagination">
|
|
62
|
+
<Primary />
|
|
63
|
+
</DemoSection>
|
|
64
|
+
|
|
65
|
+
<BestPracticesSection>
|
|
66
|
+
<ul>
|
|
67
|
+
<li>Renseigner un <strong>label</strong> explicite (ex. « Pagination des résultats de recherche ») pour nommer la navigation.</li>
|
|
68
|
+
<li>Relier la pagination à la zone de contenu avec <code>aria-controls</code> et un <code>id</code> stable sur le conteneur paginé.</li>
|
|
69
|
+
<li>Conserver des libellés textuels même si des icônes sont utilisées dans les slots (ou ajouter du texte masqué).</li>
|
|
70
|
+
<li>S’assurer d’un <strong>contraste suffisant</strong> et d’une taille de cible d’au moins 44px pour les liens.</li>
|
|
71
|
+
<li>Limiter le nombre de pages affichées en choisissant un <code>visible</code> adapté et en gardant des libellés courts.</li>
|
|
72
|
+
</ul>
|
|
73
|
+
</BestPracticesSection>
|
|
74
|
+
|
|
75
|
+
<ResourcesSection>
|
|
76
|
+
<ul>
|
|
77
|
+
<li><a href="https://www.w3.org/TR/wai-aria-1.2/#navigation" target="_blank" rel="noopener noreferrer">Rôle ARIA « navigation »</a></li>
|
|
78
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/#navigation-mechanisms-headings-and-labels" target="_blank" rel="noopener noreferrer">WCAG 2.4 - Mécanismes de navigation</a></li>
|
|
79
|
+
</ul>
|
|
80
|
+
</ResourcesSection>
|
|
81
|
+
</AccessibilityGuideLayout>
|
|
@@ -1,27 +1,53 @@
|
|
|
1
1
|
// @vitest-environment jsdom
|
|
2
2
|
|
|
3
|
-
import { describe, it } from 'vitest'
|
|
3
|
+
import { afterEach, beforeEach, describe, it } from 'vitest'
|
|
4
4
|
import { mount } from '@vue/test-utils'
|
|
5
5
|
import { axe } from 'vitest-axe'
|
|
6
6
|
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
7
|
import SyPagination from '../SyPagination.vue'
|
|
8
8
|
|
|
9
|
-
// Scénario d’accessibilité : pagination avec libellé, aria-controls et page active.
|
|
10
|
-
|
|
11
9
|
describe('SyPagination – accessibility (axe)', () => {
|
|
12
|
-
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
const content = document.createElement('div')
|
|
12
|
+
content.id = 'paginated-content'
|
|
13
|
+
document.body.appendChild(content)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
document.body.innerHTML = ''
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const baseProps = {
|
|
21
|
+
modelValue: 1,
|
|
22
|
+
pages: 5,
|
|
23
|
+
visible: 5,
|
|
24
|
+
ariaControls: 'paginated-content',
|
|
25
|
+
label: 'Pagination des résultats',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
it('has no obvious axe violations on default pagination', async () => {
|
|
29
|
+
const wrapper = mount(SyPagination, {
|
|
30
|
+
props: baseProps,
|
|
31
|
+
attachTo: document.body,
|
|
32
|
+
})
|
|
33
|
+
const results = await axe(document.body)
|
|
34
|
+
assertNoA11yViolations(results, 'SyPagination – default')
|
|
35
|
+
wrapper.unmount()
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('has no obvious axe violations with ellipses and disabled controls', async () => {
|
|
13
39
|
const wrapper = mount(SyPagination, {
|
|
14
40
|
props: {
|
|
15
|
-
modelValue:
|
|
41
|
+
modelValue: 1,
|
|
16
42
|
pages: 10,
|
|
17
|
-
|
|
18
|
-
ariaControls: '
|
|
43
|
+
visible: 3,
|
|
44
|
+
ariaControls: 'paginated-content',
|
|
45
|
+
label: 'Pagination ellipses',
|
|
19
46
|
},
|
|
47
|
+
attachTo: document.body,
|
|
20
48
|
})
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
ignoreRules: ['region'],
|
|
25
|
-
})
|
|
49
|
+
const results = await axe(document.body)
|
|
50
|
+
assertNoA11yViolations(results, 'SyPagination – ellipsis variant')
|
|
51
|
+
wrapper.unmount()
|
|
26
52
|
})
|
|
27
53
|
})
|