@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
|
@@ -1,6 +1,26 @@
|
|
|
1
|
+
import imgUrlAp from './assets/not-found-ap.svg'
|
|
2
|
+
import imgUrlCnam from './assets/not-found-cnam.svg'
|
|
3
|
+
|
|
4
|
+
export const SUPPORT_ID_PARAM_NAME = 'support_id'
|
|
5
|
+
export const supportIdMessage = 'Votre identifiant de support est'
|
|
6
|
+
|
|
1
7
|
export const locales = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
default: {
|
|
9
|
+
code: '404',
|
|
10
|
+
pageTitle: 'Page non trouvée',
|
|
11
|
+
message: 'Cette page n’existe pas ou a été déplacée.',
|
|
12
|
+
src: imgUrlCnam,
|
|
13
|
+
},
|
|
14
|
+
cnam: {
|
|
15
|
+
code: '404',
|
|
16
|
+
pageTitle: 'Page non trouvée',
|
|
17
|
+
message: 'Cette page n’existe pas ou a été déplacée.',
|
|
18
|
+
src: imgUrlCnam,
|
|
19
|
+
},
|
|
20
|
+
ap: {
|
|
21
|
+
code: '404',
|
|
22
|
+
pageTitle: 'Page non trouvée ou inexistante - Erreur 404',
|
|
23
|
+
message: 'La page que vous essayez d’afficher n’existe plus ou a été déplacée.',
|
|
24
|
+
src: imgUrlAp,
|
|
25
|
+
},
|
|
6
26
|
}
|
|
@@ -1,31 +1,244 @@
|
|
|
1
1
|
// @vitest-environment jsdom
|
|
2
2
|
|
|
3
3
|
import { describe, it } from 'vitest'
|
|
4
|
-
import { mount } from '@vue/test-utils'
|
|
4
|
+
import { mount, flushPromises } from '@vue/test-utils'
|
|
5
5
|
import { axe } from 'vitest-axe'
|
|
6
6
|
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
7
|
import NotFoundPage from '../NotFoundPage.vue'
|
|
8
8
|
import { locales } from '../locales'
|
|
9
9
|
|
|
10
|
-
// Scénario d
|
|
10
|
+
// Scénario d'accessibilité : page 404 avec code, message et identifiant de support.
|
|
11
11
|
|
|
12
12
|
describe('NotFoundPage – accessibility (axe)', () => {
|
|
13
|
+
it('has no obvious axe violations in default state', async () => {
|
|
14
|
+
const wrapper = mount(NotFoundPage)
|
|
15
|
+
await flushPromises()
|
|
16
|
+
await wrapper.vm.$nextTick()
|
|
17
|
+
|
|
18
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
19
|
+
assertNoA11yViolations(results, 'NotFoundPage – default state', {
|
|
20
|
+
ignoreRules: ['region'],
|
|
21
|
+
})
|
|
22
|
+
})
|
|
23
|
+
|
|
13
24
|
it('has no obvious axe violations with support ID in URL', async () => {
|
|
14
25
|
// Simuler une URL contenant un identifiant de support
|
|
15
26
|
history.replaceState({}, '', `/not-found?support_id=1234567890123456789`)
|
|
16
27
|
|
|
17
28
|
const wrapper = mount(NotFoundPage)
|
|
29
|
+
await flushPromises()
|
|
18
30
|
await wrapper.vm.$nextTick()
|
|
19
31
|
|
|
20
|
-
// S
|
|
32
|
+
// S'assurer que le contenu principal est bien rendu
|
|
21
33
|
const text = wrapper.text()
|
|
22
|
-
if (!text.includes(locales.code) || !text.includes(locales.message)) {
|
|
34
|
+
if (!text.includes(locales.default.code) || !text.includes(locales.default.message)) {
|
|
23
35
|
throw new Error('NotFoundPage main content not rendered as expected')
|
|
24
36
|
}
|
|
25
37
|
|
|
38
|
+
// Vérifier que le support ID est affiché avec un formatage espacé
|
|
39
|
+
if (!text.includes('1234 5678 9012 3456 789')) {
|
|
40
|
+
throw new Error('Support ID not formatted correctly')
|
|
41
|
+
}
|
|
42
|
+
|
|
26
43
|
const results = await axe(wrapper.element as HTMLElement)
|
|
27
44
|
assertNoA11yViolations(results, 'NotFoundPage – with support ID', {
|
|
28
45
|
ignoreRules: ['region'],
|
|
29
46
|
})
|
|
30
47
|
})
|
|
48
|
+
|
|
49
|
+
it('has no obvious axe violations with custom button text and href', async () => {
|
|
50
|
+
const wrapper = mount(NotFoundPage, {
|
|
51
|
+
props: {
|
|
52
|
+
btnText: 'Retour à l\'accueil',
|
|
53
|
+
btnHref: 'https://example.com',
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
await flushPromises()
|
|
57
|
+
await wrapper.vm.$nextTick()
|
|
58
|
+
|
|
59
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
60
|
+
assertNoA11yViolations(results, 'NotFoundPage – with custom button props', {
|
|
61
|
+
ignoreRules: ['region'],
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('has no obvious axe violations when button is hidden', async () => {
|
|
66
|
+
const wrapper = mount(NotFoundPage, {
|
|
67
|
+
props: {
|
|
68
|
+
hideBtn: true,
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
await flushPromises()
|
|
72
|
+
await wrapper.vm.$nextTick()
|
|
73
|
+
|
|
74
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
75
|
+
assertNoA11yViolations(results, 'NotFoundPage – button hidden', {
|
|
76
|
+
ignoreRules: ['region'],
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('has no obvious axe violations with router link navigation', async () => {
|
|
81
|
+
const wrapper = mount(NotFoundPage, {
|
|
82
|
+
props: {
|
|
83
|
+
btnText: 'Retour',
|
|
84
|
+
btnLink: '/home',
|
|
85
|
+
},
|
|
86
|
+
global: {
|
|
87
|
+
stubs: {
|
|
88
|
+
RouterLink: true,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
})
|
|
92
|
+
await flushPromises()
|
|
93
|
+
await wrapper.vm.$nextTick()
|
|
94
|
+
|
|
95
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
96
|
+
assertNoA11yViolations(results, 'NotFoundPage – with router link', {
|
|
97
|
+
ignoreRules: ['region'],
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
it('has proper semantic structure for 404 error page', async () => {
|
|
102
|
+
const wrapper = mount(NotFoundPage)
|
|
103
|
+
await flushPromises()
|
|
104
|
+
await wrapper.vm.$nextTick()
|
|
105
|
+
|
|
106
|
+
const text = wrapper.text()
|
|
107
|
+
// Vérifier que le code 404 est présent
|
|
108
|
+
if (!text.includes('404')) {
|
|
109
|
+
throw new Error('404 code not found in page content')
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Vérifier que le message est présent
|
|
113
|
+
if (!text.includes('Page non trouvée')) {
|
|
114
|
+
throw new Error('Page title not found in page content')
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
118
|
+
assertNoA11yViolations(results, 'NotFoundPage – semantic structure', {
|
|
119
|
+
ignoreRules: ['region'],
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
it('has no obvious axe violations with illustration slot', async () => {
|
|
124
|
+
const wrapper = mount(NotFoundPage, {
|
|
125
|
+
slots: {
|
|
126
|
+
illustration: '<img src="/custom-404.svg" alt="" aria-hidden="true" />',
|
|
127
|
+
},
|
|
128
|
+
})
|
|
129
|
+
await flushPromises()
|
|
130
|
+
await wrapper.vm.$nextTick()
|
|
131
|
+
|
|
132
|
+
const img = wrapper.find('img')
|
|
133
|
+
if (img.exists() && img.attributes('alt') !== '') {
|
|
134
|
+
throw new Error('Illustration image should have empty alt for decorative purpose')
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
138
|
+
assertNoA11yViolations(results, 'NotFoundPage – custom illustration', {
|
|
139
|
+
ignoreRules: ['region'],
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
it('has correct ARIA attributes on illustration image', async () => {
|
|
144
|
+
const wrapper = mount(NotFoundPage)
|
|
145
|
+
await flushPromises()
|
|
146
|
+
await wrapper.vm.$nextTick()
|
|
147
|
+
|
|
148
|
+
const img = wrapper.find('img')
|
|
149
|
+
if (img.exists()) {
|
|
150
|
+
// L'image illustrative doit être marquée comme décoration
|
|
151
|
+
if (img.attributes('aria-hidden') !== 'true') {
|
|
152
|
+
throw new Error('Illustration should have aria-hidden="true"')
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// L'alt doit être vide pour les images décoratives
|
|
156
|
+
if (img.attributes('alt') !== '') {
|
|
157
|
+
throw new Error('Decorative image should have empty alt text')
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
162
|
+
assertNoA11yViolations(results, 'NotFoundPage – ARIA attributes on image', {
|
|
163
|
+
ignoreRules: ['region'],
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
it('has no obvious axe violations with support ID containing spaces already', async () => {
|
|
168
|
+
// Tester avec un ID qui contient déjà des espacements
|
|
169
|
+
history.replaceState({}, '', `/not-found?support_id= ABCD EFGH IJKL `)
|
|
170
|
+
|
|
171
|
+
const wrapper = mount(NotFoundPage)
|
|
172
|
+
await flushPromises()
|
|
173
|
+
await wrapper.vm.$nextTick()
|
|
174
|
+
|
|
175
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
176
|
+
assertNoA11yViolations(results, 'NotFoundPage – support ID with spaces', {
|
|
177
|
+
ignoreRules: ['region'],
|
|
178
|
+
})
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
it('has no obvious axe violations with long support ID', async () => {
|
|
182
|
+
// Tester avec un ID très long
|
|
183
|
+
const longId = '12345678901234567890123456789012'
|
|
184
|
+
history.replaceState({}, '', `/not-found?support_id=${longId}`)
|
|
185
|
+
|
|
186
|
+
const wrapper = mount(NotFoundPage)
|
|
187
|
+
await flushPromises()
|
|
188
|
+
await wrapper.vm.$nextTick()
|
|
189
|
+
|
|
190
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
191
|
+
assertNoA11yViolations(results, 'NotFoundPage – long support ID', {
|
|
192
|
+
ignoreRules: ['region'],
|
|
193
|
+
})
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
it('has no obvious axe violations with a custom uniqueId', async () => {
|
|
197
|
+
const wrapper = mount(NotFoundPage, {
|
|
198
|
+
props: {
|
|
199
|
+
uniqueId: 'custom-not-found-id',
|
|
200
|
+
},
|
|
201
|
+
})
|
|
202
|
+
await flushPromises()
|
|
203
|
+
await wrapper.vm.$nextTick()
|
|
204
|
+
|
|
205
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
206
|
+
assertNoA11yViolations(results, 'NotFoundPage – custom uniqueId', {
|
|
207
|
+
ignoreRules: ['region'],
|
|
208
|
+
})
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
it('has a single h1 heading', async () => {
|
|
212
|
+
const wrapper = mount(NotFoundPage)
|
|
213
|
+
await flushPromises()
|
|
214
|
+
await wrapper.vm.$nextTick()
|
|
215
|
+
|
|
216
|
+
const headings = wrapper.findAll('h1')
|
|
217
|
+
if (headings.length !== 1) {
|
|
218
|
+
throw new Error(`Expected exactly 1 h1 heading, found ${headings.length}`)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
222
|
+
assertNoA11yViolations(results, 'NotFoundPage – single h1', {
|
|
223
|
+
ignoreRules: ['region'],
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
it('has no obvious axe violations with all props provided', async () => {
|
|
228
|
+
const wrapper = mount(NotFoundPage, {
|
|
229
|
+
props: {
|
|
230
|
+
uniqueId: 'full-props-id',
|
|
231
|
+
btnText: 'Retour à l\'accueil',
|
|
232
|
+
btnHref: 'https://example.com',
|
|
233
|
+
hideBtn: false,
|
|
234
|
+
},
|
|
235
|
+
})
|
|
236
|
+
await flushPromises()
|
|
237
|
+
await wrapper.vm.$nextTick()
|
|
238
|
+
|
|
239
|
+
const results = await axe(wrapper.element as HTMLElement)
|
|
240
|
+
assertNoA11yViolations(results, 'NotFoundPage – all props', {
|
|
241
|
+
ignoreRules: ['region'],
|
|
242
|
+
})
|
|
243
|
+
})
|
|
31
244
|
})
|
|
@@ -1,28 +1,139 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import { mount, flushPromises } from '@vue/test-utils'
|
|
4
4
|
import NotFoundPage from '../NotFoundPage.vue'
|
|
5
|
+
import StatusPage from '../../StatusPage/StatusPage.vue'
|
|
6
|
+
|
|
7
|
+
vi.mock('@/utils/theme', () => ({
|
|
8
|
+
useThemeLocales: () => ({
|
|
9
|
+
themeLocales: ref({
|
|
10
|
+
code: '404',
|
|
11
|
+
pageTitle: 'Page non trouvée',
|
|
12
|
+
message: 'Cette page n\'existe pas ou a été déplacée.',
|
|
13
|
+
src: '/src/components/NotFoundPage/assets/not-found.svg',
|
|
14
|
+
}),
|
|
15
|
+
}),
|
|
16
|
+
}))
|
|
5
17
|
|
|
6
18
|
describe('NotFoundPage', () => {
|
|
7
|
-
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
history.replaceState({}, '', '/')
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('renders correctly', async () => {
|
|
8
24
|
const wrapper = mount(NotFoundPage)
|
|
25
|
+
await flushPromises()
|
|
26
|
+
await wrapper.vm.$nextTick()
|
|
9
27
|
|
|
10
|
-
expect(wrapper.
|
|
11
|
-
expect(wrapper.text()).toContain(
|
|
28
|
+
expect(wrapper.findComponent(StatusPage).exists()).toBe(true)
|
|
29
|
+
expect(wrapper.text()).toContain('404')
|
|
30
|
+
expect(wrapper.text()).toContain('Page non trouvée')
|
|
12
31
|
expect(wrapper.html()).toMatchSnapshot()
|
|
13
32
|
})
|
|
14
33
|
|
|
15
34
|
it('display the support ID if provided in the url', async () => {
|
|
16
|
-
history.replaceState(
|
|
17
|
-
{},
|
|
18
|
-
'',
|
|
19
|
-
'/not-found?support_id=1234567890123456789',
|
|
20
|
-
)
|
|
21
|
-
const wrapper = mount(NotFoundPage)
|
|
35
|
+
history.replaceState({}, '', '/not-found?support_id=1234567890123456789')
|
|
22
36
|
|
|
37
|
+
const wrapper = mount(NotFoundPage)
|
|
38
|
+
await flushPromises()
|
|
23
39
|
await wrapper.vm.$nextTick()
|
|
24
40
|
|
|
41
|
+
expect(wrapper.text()).toContain('Votre identifiant de support est')
|
|
25
42
|
expect(wrapper.text()).toContain('1234 5678 9012 3456 789')
|
|
26
43
|
expect(wrapper.html()).toMatchSnapshot()
|
|
27
44
|
})
|
|
45
|
+
|
|
46
|
+
it('does not display support ID section when no support_id in url', async () => {
|
|
47
|
+
const wrapper = mount(NotFoundPage)
|
|
48
|
+
await flushPromises()
|
|
49
|
+
await wrapper.vm.$nextTick()
|
|
50
|
+
|
|
51
|
+
expect(wrapper.text()).not.toContain('Votre identifiant de support est')
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('renders StatusPage with correct props', async () => {
|
|
55
|
+
const wrapper = mount(NotFoundPage)
|
|
56
|
+
await flushPromises()
|
|
57
|
+
await wrapper.vm.$nextTick()
|
|
58
|
+
|
|
59
|
+
const statusPage = wrapper.findComponent(StatusPage)
|
|
60
|
+
expect(statusPage.props('code')).toBe('404')
|
|
61
|
+
expect(statusPage.props('pageTitle')).toBe('Page non trouvée')
|
|
62
|
+
expect(statusPage.props('message')).toBe('Cette page n\'existe pas ou a été déplacée.')
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('renders with custom button props', async () => {
|
|
66
|
+
const wrapper = mount(NotFoundPage, {
|
|
67
|
+
props: {
|
|
68
|
+
btnText: 'Retour à l\'accueil',
|
|
69
|
+
btnHref: '/',
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
await flushPromises()
|
|
73
|
+
await wrapper.vm.$nextTick()
|
|
74
|
+
|
|
75
|
+
const statusPage = wrapper.findComponent(StatusPage)
|
|
76
|
+
expect(statusPage.props('btnText')).toBe('Retour à l\'accueil')
|
|
77
|
+
expect(statusPage.props('btnHref')).toBe('/')
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('hides button when hideBtn prop is true', async () => {
|
|
81
|
+
const wrapper = mount(NotFoundPage, {
|
|
82
|
+
props: {
|
|
83
|
+
hideBtn: true,
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
await flushPromises()
|
|
87
|
+
await wrapper.vm.$nextTick()
|
|
88
|
+
|
|
89
|
+
expect(wrapper.findComponent(StatusPage).props('hideBtn')).toBe(true)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('renders illustration with correct accessibility attributes', async () => {
|
|
93
|
+
const wrapper = mount(NotFoundPage)
|
|
94
|
+
await flushPromises()
|
|
95
|
+
await wrapper.vm.$nextTick()
|
|
96
|
+
|
|
97
|
+
const img = wrapper.find('img')
|
|
98
|
+
expect(img.exists()).toBe(true)
|
|
99
|
+
expect(img.attributes('src')).toBe('/src/components/NotFoundPage/assets/not-found.svg')
|
|
100
|
+
expect(img.attributes('alt')).toBe('')
|
|
101
|
+
expect(img.attributes('aria-hidden')).toBe('true')
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
it('renders custom illustration slot', async () => {
|
|
105
|
+
const wrapper = mount(NotFoundPage, {
|
|
106
|
+
slots: {
|
|
107
|
+
illustration: '<img src="/custom.svg" alt="" aria-hidden="true" />',
|
|
108
|
+
},
|
|
109
|
+
})
|
|
110
|
+
await flushPromises()
|
|
111
|
+
await wrapper.vm.$nextTick()
|
|
112
|
+
|
|
113
|
+
const img = wrapper.find('img')
|
|
114
|
+
expect(img.exists()).toBe(true)
|
|
115
|
+
expect(img.attributes('src')).toBe('/custom.svg')
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
it('passes a uniqueId prop to StatusPage', async () => {
|
|
119
|
+
const wrapper = mount(NotFoundPage)
|
|
120
|
+
await flushPromises()
|
|
121
|
+
await wrapper.vm.$nextTick()
|
|
122
|
+
|
|
123
|
+
const statusPage = wrapper.findComponent(StatusPage)
|
|
124
|
+
expect(statusPage.props('uniqueId')).toBeDefined()
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
it('passes a custom uniqueId prop to StatusPage', async () => {
|
|
128
|
+
const wrapper = mount(NotFoundPage, {
|
|
129
|
+
props: {
|
|
130
|
+
uniqueId: 'custom-id',
|
|
131
|
+
},
|
|
132
|
+
})
|
|
133
|
+
await flushPromises()
|
|
134
|
+
await wrapper.vm.$nextTick()
|
|
135
|
+
|
|
136
|
+
const statusPage = wrapper.findComponent(StatusPage)
|
|
137
|
+
expect(statusPage.props('uniqueId')).toBe('custom-id')
|
|
138
|
+
})
|
|
28
139
|
})
|
|
@@ -107,13 +107,14 @@ exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
|
|
|
107
107
|
font-weight-bold
|
|
108
108
|
mb-2
|
|
109
109
|
mb-4
|
|
110
|
+
sy-heading
|
|
110
111
|
text-h5
|
|
111
112
|
">
|
|
112
113
|
Page non trouvée
|
|
113
114
|
</h1>
|
|
114
115
|
<p>
|
|
115
116
|
<span>
|
|
116
|
-
Cette page n
|
|
117
|
+
Cette page n'existe pas ou a été déplacée.
|
|
117
118
|
</span>
|
|
118
119
|
</p>
|
|
119
120
|
<p class="mt-4">
|
|
@@ -254,13 +255,14 @@ exports[`NotFoundPage > renders correctly 1`] = `
|
|
|
254
255
|
font-weight-bold
|
|
255
256
|
mb-2
|
|
256
257
|
mb-4
|
|
258
|
+
sy-heading
|
|
257
259
|
text-h5
|
|
258
260
|
">
|
|
259
261
|
Page non trouvée
|
|
260
262
|
</h1>
|
|
261
263
|
<p>
|
|
262
264
|
<span>
|
|
263
|
-
Cette page n
|
|
265
|
+
Cette page n'existe pas ou a été déplacée.
|
|
264
266
|
</span>
|
|
265
267
|
</p>
|
|
266
268
|
<!-- v-if -->
|
|
@@ -5,8 +5,8 @@ import * as NotificationBarStories from './NotificationBar.stories';
|
|
|
5
5
|
<Meta of={NotificationBarStories} />
|
|
6
6
|
|
|
7
7
|
<div className="header">
|
|
8
|
-
<h1>Accessibilité du composant
|
|
9
|
-
<p>Le composant `
|
|
8
|
+
<h1>Accessibilité du composant NotificationBar </h1>
|
|
9
|
+
<p>Le composant `NotificationBar` est un wrapper autour du composant `v-icon` de Vuetify qui ajoute une gestion automatique de l'accessibilité selon les normes RGAA.</p>
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
##### Les NotificationsBar servent à notifier l’utilisateur soit d’un retour d’action.
|
|
@@ -1,15 +1,75 @@
|
|
|
1
|
-
import { Meta,
|
|
1
|
+
import { Meta, Primary } from '@storybook/blocks';
|
|
2
2
|
import * as NotificationBarStories from '../NotificationBar.stories.ts';
|
|
3
|
-
import '@/
|
|
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
13
|
<Meta of={NotificationBarStories} />
|
|
6
14
|
|
|
7
|
-
<div className="header">
|
|
8
|
-
<h1>Accessibilité</h1>
|
|
9
|
-
</div>
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
<AccessibilityGuideLayout
|
|
17
|
+
componentName="NotificationBar"
|
|
18
|
+
iconSrc={AccessibilityIcon}
|
|
19
|
+
>
|
|
20
|
+
<div class="mt-8">
|
|
21
|
+
<p>Rapport d’audit manuel : <a href="/audits/NotificationBar.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
14
22
|
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/4029" target="_blank" style={{color:'#0C41BD'}}>issue #4029</a>)</p>
|
|
15
23
|
</div>
|
|
24
|
+
<CriteriaSection>
|
|
25
|
+
<CriteriaCard icon="🔔" title="Annonce et rôles adaptés">
|
|
26
|
+
<ul>
|
|
27
|
+
<li><strong>Rôle dynamique</strong> : <code>role="status"</code> pour les notifications neutres et <code>role="alert"</code> pour les erreurs afin d’informer immédiatement les lecteurs d’écran.</li>
|
|
28
|
+
<li><strong>Icônes décoratives</strong> : les pictogrammes sont marqués comme décoratifs pour ne pas être annoncés inutilement.</li>
|
|
29
|
+
</ul>
|
|
30
|
+
</CriteriaCard>
|
|
31
|
+
|
|
32
|
+
<CriteriaCard icon="⌨️" title="Navigation clavier complète">
|
|
33
|
+
<ul>
|
|
34
|
+
<li><strong>Fermeture clavier</strong> : le bouton « Fermer » est focalisable, activable au clavier et accessible avec <kbd>Échap</kbd>.</li>
|
|
35
|
+
<li><strong>Focus visible</strong> : styles d’outline renforcés sur le bouton de fermeture pour chaque état de contraste.</li>
|
|
36
|
+
</ul>
|
|
37
|
+
</CriteriaCard>
|
|
38
|
+
|
|
39
|
+
<CriteriaCard icon="🕒" title="Temps de lecture maîtrisé">
|
|
40
|
+
<ul>
|
|
41
|
+
<li><strong>Pas d’expiration forcée</strong> : par défaut <code>timeout=-1</code> pour laisser le temps de lecture ; la temporisation reste configurable.</li>
|
|
42
|
+
<li><strong>File ou liste</strong> : <code>show-all</code> permet d’afficher toutes les notifications simultanément pour éviter la perte d’information.</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</CriteriaCard>
|
|
45
|
+
|
|
46
|
+
<CriteriaCard icon="🖼️" title="Lisibilité et contraste">
|
|
47
|
+
<ul>
|
|
48
|
+
<li><strong>Contrastes définis</strong> : couleurs d’arrière‑plan et de texte prévues pour chaque type (info, success, warning, error).</li>
|
|
49
|
+
<li><strong>Adaptation mobile</strong> : réorganisation verticale automatique lorsque le message est long sur petits écrans.</li>
|
|
50
|
+
</ul>
|
|
51
|
+
</CriteriaCard>
|
|
52
|
+
</CriteriaSection>
|
|
53
|
+
|
|
54
|
+
<DemoSection componentName="NotificationBar">
|
|
55
|
+
<Primary />
|
|
56
|
+
</DemoSection>
|
|
57
|
+
|
|
58
|
+
<BestPracticesSection>
|
|
59
|
+
<ul>
|
|
60
|
+
<li>Privilégiez l’option <code>timeout=-1</code> pour laisser le temps de lecture, surtout pour les messages critiques.</li>
|
|
61
|
+
<li>Utilisez <code>type="error"</code> uniquement pour les situations bloquantes afin d’éviter la surcharge d’alertes.</li>
|
|
62
|
+
<li>Ajoutez un libellé explicite au bouton d’action (slot <code>action</code>) et assurez-vous qu’il soit atteignable au clavier.</li>
|
|
63
|
+
<li>Évitez d’empiler trop de notifications : activez <code>show-all</code> en cas de rafale pour limiter la perte contextuelle.</li>
|
|
64
|
+
<li>Ne déplacez pas le focus automatiquement sur la notification : laissez l’utilisateur garder son contexte d’interaction.</li>
|
|
65
|
+
</ul>
|
|
66
|
+
</BestPracticesSection>
|
|
67
|
+
|
|
68
|
+
<ResourcesSection>
|
|
69
|
+
<ul>
|
|
70
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/alert/" target="_blank" rel="noopener noreferrer">WAI-ARIA Authoring Practices – Alert</a></li>
|
|
71
|
+
<li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/status/" target="_blank" rel="noopener noreferrer">WAI-ARIA Authoring Practices – Status</a></li>
|
|
72
|
+
<li><a href="https://www.w3.org/WAI/WCAG21/quickref/#timing-adjustable" target="_blank" rel="noopener noreferrer">WCAG 2.1 – Timing Adjustable</a></li>
|
|
73
|
+
</ul>
|
|
74
|
+
</ResourcesSection>
|
|
75
|
+
</AccessibilityGuideLayout>
|
|
@@ -207,3 +207,50 @@ export const Card: Story = {
|
|
|
207
207
|
}
|
|
208
208
|
},
|
|
209
209
|
}
|
|
210
|
+
|
|
211
|
+
export const WithAriaRole: Story = {
|
|
212
|
+
parameters: {
|
|
213
|
+
sourceCode: [
|
|
214
|
+
{
|
|
215
|
+
name: 'Template',
|
|
216
|
+
code: `<template>
|
|
217
|
+
<PageContainer
|
|
218
|
+
role="region"
|
|
219
|
+
unique-id="main-content"
|
|
220
|
+
aria-labelledby="main-content-title"
|
|
221
|
+
>
|
|
222
|
+
<h2 id="main-content-title">Contenu principal</h2>
|
|
223
|
+
Contenu de la page
|
|
224
|
+
</PageContainer>
|
|
225
|
+
</template>
|
|
226
|
+
`,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'Script',
|
|
230
|
+
code: `<script setup lang="ts">
|
|
231
|
+
import { PageContainer } from '@cnamts/synapse'
|
|
232
|
+
</script>
|
|
233
|
+
`,
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
args: {
|
|
238
|
+
role: 'region',
|
|
239
|
+
uniqueId: 'main-content',
|
|
240
|
+
ariaLabelledby: 'main-content-title',
|
|
241
|
+
},
|
|
242
|
+
render: (args) => {
|
|
243
|
+
return {
|
|
244
|
+
components: { PageContainer },
|
|
245
|
+
setup() {
|
|
246
|
+
return { args }
|
|
247
|
+
},
|
|
248
|
+
template: `
|
|
249
|
+
<PageContainer :role="args.role" :unique-id="args.uniqueId" :aria-labelledby="args.ariaLabelledby">
|
|
250
|
+
<h2 id="main-content-title" class="pa-4">Contenu principal</h2>
|
|
251
|
+
<p class="pa-4">Contenu de la page</p>
|
|
252
|
+
</PageContainer>
|
|
253
|
+
`,
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { computed } from 'vue'
|
|
3
3
|
import { useDisplay } from 'vuetify'
|
|
4
|
-
|
|
5
|
-
type AriaRole = 'main' | 'region' | 'navigation' | 'contentinfo' | 'banner'
|
|
4
|
+
import type { AriaRole } from '../types'
|
|
6
5
|
|
|
7
6
|
const props = withDefaults(defineProps<{
|
|
8
7
|
size?: 'xl' | 'lg' | 'md' | 'sm' | 'xs'
|
|
@@ -10,12 +9,14 @@
|
|
|
10
9
|
color?: string
|
|
11
10
|
uniqueId?: string
|
|
12
11
|
role?: AriaRole
|
|
12
|
+
ariaLabelledby?: string
|
|
13
13
|
}>(), {
|
|
14
14
|
size: undefined,
|
|
15
15
|
spacing: undefined,
|
|
16
16
|
color: 'transparent',
|
|
17
17
|
uniqueId: undefined,
|
|
18
18
|
role: undefined,
|
|
19
|
+
ariaLabelledby: undefined,
|
|
19
20
|
})
|
|
20
21
|
|
|
21
22
|
const display = useDisplay()
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
:id="uniqueId ? `${uniqueId}-container` : undefined"
|
|
64
65
|
:class="[spacingClass, 'vd-page-container d-flex justify-center']"
|
|
65
66
|
:role="role"
|
|
67
|
+
:aria-labelledby="ariaLabelledby"
|
|
66
68
|
>
|
|
67
69
|
<VSheet
|
|
68
70
|
:id="uniqueId ? `${uniqueId}-content` : undefined"
|