@cnamts/synapse 1.0.21 → 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-uN8OURoP.js → DateFilter-B5n-ZkLi.js} +29 -24
- package/dist/{NumberFilter-sm1dQNQi.js → NumberFilter-CtiZ9uj8.js} +1 -1
- package/dist/{PeriodFilter-Cklsxnh9.js → PeriodFilter-DzqiMb-b.js} +1 -1
- package/dist/{SelectFilter-CWefj27Z.js → SelectFilter-BOYlF7rX.js} +1 -1
- package/dist/{TextFilter-Ddyj885L.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 +41 -39
- package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +921 -801
- 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 +907 -795
- 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/DialogBox/DialogBox.d.ts +482 -416
- package/dist/components/DownloadBtn/config.d.ts +1 -1
- package/dist/components/ErrorPage/ErrorPage.d.ts +4 -0
- package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
- package/dist/components/FileUpload/FileUpload.d.ts +4 -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/NirField/NirField.d.ts +1659 -1371
- package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
- 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 +12 -1
- 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 +24 -1211
- package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/types.d.ts +2 -0
- package/dist/design-system-v3.js +70 -69
- package/dist/design-system-v3.umd.cjs +265 -265
- 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/vuetifyConfig.d.ts +14 -14
- package/package.json +13 -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/CookieBanner/CookieBanner.stories.ts +10 -0
- package/src/components/CookieBanner/CookieBanner.vue +15 -5
- package/src/components/CookieBanner/accessibilite/Accessibility.mdx +9 -0
- package/src/components/CookieBanner/tests/CookieBanner.spec.ts +10 -2
- 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/SyCheckbox/SyCheckbox.vue +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 +53 -0
- package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
- 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 +20 -8
- package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +34 -0
- package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -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/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.stories.ts +82 -47
- package/src/components/ErrorPage/ErrorPage.vue +6 -0
- package/src/components/ErrorPage/accessibilite/Accessibility.mdx +15 -0
- package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +2 -0
- 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 +60 -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 +298 -34
- package/src/components/FooterBar/FooterBar.vue +67 -9
- package/src/components/FooterBar/config.ts +2 -2
- 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.vue +33 -6
- package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +3 -1
- package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +3 -2
- package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +18 -0
- package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +2 -0
- package/src/components/NotFoundPage/NotFoundPage.stories.ts +1 -1
- package/src/components/NotFoundPage/NotFoundPage.vue +16 -5
- package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +2 -0
- package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +49 -0
- package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +25 -2
- package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +2 -0
- package/src/components/PageContainer/PageContainer.stories.ts +47 -0
- package/src/components/PageContainer/PageContainer.vue +4 -2
- package/src/components/PageContainer/accessibilite/Accessibility.mdx +31 -17
- 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 +73 -35
- 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 +47 -0
- 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/SocialMediaLinks.vue +1 -1
- package/src/components/StatusPage/StatusPage.mdx +10 -1
- package/src/components/StatusPage/StatusPage.stories.ts +43 -0
- package/src/components/StatusPage/StatusPage.vue +26 -4
- package/src/components/StatusPage/accessibilite/Accessibility.mdx +24 -5
- package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +1 -0
- package/src/components/StatusPage/tests/StatusPage.spec.ts +3 -0
- package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +2 -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/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -30
- 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.stories.ts +11 -11
- package/src/components/UploadWorkflow/UploadWorkflow.vue +30 -13
- 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 +7 -25
- package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +144 -121
- 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 +1 -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/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/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/dist/main-CWniLr0s.js +0 -36919
|
@@ -15,8 +15,17 @@ import * as StatusPageStories from './StatusPage.stories'
|
|
|
15
15
|
|
|
16
16
|
<Controls of={StatusPageStories.Default} />
|
|
17
17
|
|
|
18
|
+
## Rôle et identifiant ARIA
|
|
19
|
+
|
|
20
|
+
Les props `role` et `unique-id` permettent de préciser le rôle sémantique du composant et de lier le titre au conteneur via `aria-labelledby`.
|
|
21
|
+
|
|
22
|
+
Lorsque `role` est défini, l'attribut `aria-labelledby` est automatiquement appliqué sur le `PageContainer` en pointant vers le `h1`.
|
|
23
|
+
|
|
24
|
+
<Canvas of={StatusPageStories.WithRole} />
|
|
25
|
+
|
|
18
26
|
## Lien de retour
|
|
19
27
|
|
|
20
|
-
Vous pouvez mettre un lien vers une autre page avec les props `btn-text` et `btn-link` ou `btn-href
|
|
28
|
+
Vous pouvez mettre un lien vers une autre page avec les props `btn-text` et `btn-link` ou `btn-href`.<br/>
|
|
29
|
+
L'événement `btn-click` est émis lorsque l'utilisateur clique sur le bouton.
|
|
21
30
|
|
|
22
31
|
<Canvas of={StatusPageStories.WithLink} />
|
|
@@ -8,6 +8,10 @@ const meta = {
|
|
|
8
8
|
layout: 'fullscreen',
|
|
9
9
|
},
|
|
10
10
|
argTypes: {
|
|
11
|
+
'headingLevel': {
|
|
12
|
+
control: { type: 'select' },
|
|
13
|
+
options: [1, 2, 3, 4, 5, 6],
|
|
14
|
+
},
|
|
11
15
|
'code': {
|
|
12
16
|
description: 'Code d\'erreur affiché en premier plan',
|
|
13
17
|
},
|
|
@@ -58,6 +62,7 @@ type Story = StoryObj<typeof StatusPage>
|
|
|
58
62
|
|
|
59
63
|
export const Default: Story = {
|
|
60
64
|
args: {
|
|
65
|
+
headingLevel: 1,
|
|
61
66
|
pageTitle: 'une erreur est survenue',
|
|
62
67
|
code: '500',
|
|
63
68
|
message: 'Une erreur est survenue de notre côté, veuillez réessayer plus tard. Si le problème persiste veuillez nous contacter par téléphone au 3646',
|
|
@@ -96,6 +101,7 @@ export const Default: Story = {
|
|
|
96
101
|
export const WithLink: Story = {
|
|
97
102
|
args: {
|
|
98
103
|
...Default.args,
|
|
104
|
+
headingLevel: 1,
|
|
99
105
|
btnHref: '/',
|
|
100
106
|
btnText: 'Retour à l\'accueil',
|
|
101
107
|
},
|
|
@@ -137,6 +143,7 @@ export const CustomIllustration: Story = {
|
|
|
137
143
|
...Default.args,
|
|
138
144
|
btnHref: '/',
|
|
139
145
|
btnText: 'Retour à l\'accueil',
|
|
146
|
+
headingLevel: 1,
|
|
140
147
|
},
|
|
141
148
|
parameters: {
|
|
142
149
|
sourceCode: [
|
|
@@ -191,3 +198,39 @@ export const CustomIllustration: Story = {
|
|
|
191
198
|
`,
|
|
192
199
|
}),
|
|
193
200
|
}
|
|
201
|
+
|
|
202
|
+
export const WithRole: Story = {
|
|
203
|
+
args: {
|
|
204
|
+
pageTitle: 'Une erreur est survenue',
|
|
205
|
+
message: 'Veuillez réessayer ultérieurement.',
|
|
206
|
+
code: '500',
|
|
207
|
+
role: 'main',
|
|
208
|
+
uniqueId: 'status-page-main',
|
|
209
|
+
},
|
|
210
|
+
parameters: {
|
|
211
|
+
sourceCode: [
|
|
212
|
+
{
|
|
213
|
+
name: 'Template',
|
|
214
|
+
code: `
|
|
215
|
+
<template>
|
|
216
|
+
<StatusPage
|
|
217
|
+
page-title="Une erreur est survenue"
|
|
218
|
+
message="Veuillez réessayer ultérieurement."
|
|
219
|
+
code="500"
|
|
220
|
+
role="main"
|
|
221
|
+
unique-id="status-page-main"
|
|
222
|
+
/>
|
|
223
|
+
</template>
|
|
224
|
+
`,
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'Script',
|
|
228
|
+
code: `
|
|
229
|
+
<script setup lang="ts">
|
|
230
|
+
import { StatusPage } from '@cnamts/synapse'
|
|
231
|
+
</script>
|
|
232
|
+
`,
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { RouteRecordRaw } from 'vue-router'
|
|
3
3
|
import PageContainer from '../PageContainer/PageContainer.vue'
|
|
4
|
+
import { useId } from 'vue'
|
|
5
|
+
import type { PageAriaRole } from '../types'
|
|
6
|
+
import SyHeading from '../SyHeading/SyHeading.vue'
|
|
4
7
|
|
|
5
8
|
type MessagePart =
|
|
6
9
|
| { type: 'text', value: string }
|
|
@@ -52,6 +55,9 @@
|
|
|
52
55
|
btnHref?: string
|
|
53
56
|
btnLink?: RouteRecordRaw | string
|
|
54
57
|
hideBtn?: boolean
|
|
58
|
+
uniqueId?: string
|
|
59
|
+
role?: PageAriaRole
|
|
60
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
|
|
55
61
|
}>(), {
|
|
56
62
|
pageTitle: undefined,
|
|
57
63
|
message: undefined,
|
|
@@ -61,11 +67,24 @@
|
|
|
61
67
|
btnLink: '/',
|
|
62
68
|
btnHref: undefined,
|
|
63
69
|
hideBtn: false,
|
|
70
|
+
uniqueId: useId(),
|
|
71
|
+
role: undefined,
|
|
72
|
+
headingLevel: 1,
|
|
64
73
|
})
|
|
74
|
+
|
|
75
|
+
const emit = defineEmits(['btn-click'])
|
|
76
|
+
const emitClickEvent = (): void => {
|
|
77
|
+
emit('btn-click')
|
|
78
|
+
}
|
|
65
79
|
</script>
|
|
66
80
|
|
|
67
81
|
<template>
|
|
68
|
-
<PageContainer
|
|
82
|
+
<PageContainer
|
|
83
|
+
size="md"
|
|
84
|
+
:unique-id="uniqueId"
|
|
85
|
+
:role="role"
|
|
86
|
+
:aria-labelledby="role ? `${uniqueId}-title` : undefined"
|
|
87
|
+
>
|
|
69
88
|
<VCard
|
|
70
89
|
:elevation="0"
|
|
71
90
|
class="pa-6 pa-sm-16"
|
|
@@ -84,12 +103,14 @@
|
|
|
84
103
|
{{ code }}
|
|
85
104
|
</div>
|
|
86
105
|
|
|
87
|
-
<
|
|
106
|
+
<SyHeading
|
|
88
107
|
v-if="pageTitle"
|
|
89
|
-
|
|
108
|
+
:id="role ? `${uniqueId}-title` : undefined"
|
|
109
|
+
:class="headingLevel === 1 ? 'mb-2 font-weight-bold text-h5 mb-4' : 'mb-2 font-weight-bold mb-4'"
|
|
110
|
+
:level="headingLevel"
|
|
90
111
|
>
|
|
91
112
|
{{ pageTitle }}
|
|
92
|
-
</
|
|
113
|
+
</SyHeading>
|
|
93
114
|
|
|
94
115
|
<p v-if="message">
|
|
95
116
|
<template
|
|
@@ -117,6 +138,7 @@
|
|
|
117
138
|
:href="btnHref"
|
|
118
139
|
color="primary"
|
|
119
140
|
class="mt-6"
|
|
141
|
+
@click="emitClickEvent"
|
|
120
142
|
>
|
|
121
143
|
{{ btnText }}
|
|
122
144
|
</VBtn>
|
|
@@ -18,14 +18,19 @@ import {
|
|
|
18
18
|
>
|
|
19
19
|
|
|
20
20
|
<CriteriaSection>
|
|
21
|
+
<CriteriaCard icon="🧩" title="Niveau de titre configurable via la prop headingLevel">
|
|
22
|
+
<ul>
|
|
23
|
+
<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 h1, défini dans l’implémentation du composant.</li>
|
|
24
|
+
<code><StatusPage
|
|
25
|
+
:heading-level="1" /> </code>
|
|
26
|
+
|
|
27
|
+
<li><strong>Accessibilité</strong> : Permet que la hiérarchie entre les titres soit pertinente (critère 9.1.1 RGAA) </li>
|
|
28
|
+
</ul>
|
|
29
|
+
</CriteriaCard>
|
|
21
30
|
<CriteriaCard icon="🔍" title="Structure sémantique">
|
|
22
31
|
<ul>
|
|
23
|
-
<li><strong>Titre de page</strong> : le titre est rendu dans une balise <code>h1</code>, unique et descriptif</li>
|
|
32
|
+
<li><strong>Titre de page</strong> : le titre est rendu dans une balise <code>h1</code>, unique et descriptif — lié au conteneur via <code>aria-labelledby</code> lorsque <code>role</code> est défini</li>
|
|
24
33
|
<li><strong>Code d'erreur</strong> : le code (ex. <code>500</code>, <code>404</code>) est précédé du texte masqué visuellement <code>codeErrorText</code> (par défaut <em>"Code d'erreur : "</em>) pour les lecteurs d'écran</li>
|
|
25
|
-
<li><strong>Rôles ARIA hérités</strong> via <code>PageContainer</code> :</li>
|
|
26
|
-
<ul>
|
|
27
|
-
<li>exemple : <code>role="main"</code> représente le contenu principal de la page</li>
|
|
28
|
-
</ul>
|
|
29
34
|
</ul>
|
|
30
35
|
</CriteriaCard>
|
|
31
36
|
|
|
@@ -52,12 +57,24 @@ import {
|
|
|
52
57
|
<li><strong>Slot <code>action</code></strong> : permet d'ajouter des actions supplémentaires accessibles au clavier</li>
|
|
53
58
|
</ul>
|
|
54
59
|
</CriteriaCard>
|
|
60
|
+
|
|
61
|
+
<CriteriaCard icon="🏷️" title="Rôle et identifiant ARIA">
|
|
62
|
+
<ul>
|
|
63
|
+
<li><strong>Prop <code>role</code></strong> : deux valeurs acceptées: <code>main</code> ou <code>region</code> — propagé au <code>PageContainer</code></li>
|
|
64
|
+
<li><strong>Prop <code>uniqueId</code></strong> : identifiant unique du conteneur, généré automatiquement via <code>useId()</code> si non fourni — utilisé pour lier le <code>h1</code> au conteneur via <code>aria-labelledby</code> lorsque <code>role</code> est défini</li>
|
|
65
|
+
<li><strong>Liaison automatique</strong> : quand <code>role</code> est défini, <code>aria-labelledby</code> est automatiquement appliqué sur le <code>PageContainer</code> et l'<code>id</code> correspondant sur le <code>h1</code></li>
|
|
66
|
+
</ul>
|
|
67
|
+
</CriteriaCard>
|
|
55
68
|
</CriteriaSection>
|
|
56
69
|
|
|
57
70
|
<DemoSection title="Avec illustration personnalisée" componentName="StatusPage">
|
|
58
71
|
<Story of={StatusPageStories.CustomIllustration} />
|
|
59
72
|
</DemoSection>
|
|
60
73
|
|
|
74
|
+
<DemoSection title="Avec rôle défini" componentName="StatusPage">
|
|
75
|
+
<Story of={StatusPageStories.WithRole} />
|
|
76
|
+
</DemoSection>
|
|
77
|
+
|
|
61
78
|
<BestPracticesSection>
|
|
62
79
|
<ul>
|
|
63
80
|
<li>Toujours renseigner <code>page-title</code> avec un titre clair et unique décrivant l'erreur</li>
|
|
@@ -66,6 +83,8 @@ import {
|
|
|
66
83
|
<li>Ne pas masquer le bouton (<code>hide-btn</code>) sans proposer une alternative de navigation claire</li>
|
|
67
84
|
<li>Les illustrations doivent toujours être décoratives (<code>aria-hidden="true"</code>) — ne jamais y placer d'information essentielle</li>
|
|
68
85
|
<li>Le contenu dans <code>additional-content</code> doit être lisible par les lecteurs d'écran : éviter le contenu purement visuel</li>
|
|
86
|
+
<li>Utiliser la prop <code>role</code> pour définir le rôle ARIA approprié au contexte</li>
|
|
87
|
+
<li>Fournir un <code>uniqueId</code> explicite si nécessaire pour garantir une liaison correcte entre le conteneur et le titre</li>
|
|
69
88
|
</ul>
|
|
70
89
|
</BestPracticesSection>
|
|
71
90
|
|
|
@@ -13,6 +13,7 @@ describe('StatusPage – accessibility (axe)', () => {
|
|
|
13
13
|
it('has no obvious axe violations with title, message and action button', async () => {
|
|
14
14
|
const wrapper = mount(StatusPage, {
|
|
15
15
|
props: {
|
|
16
|
+
headingLevel: 1,
|
|
16
17
|
pageTitle: 'Une erreur est survenue',
|
|
17
18
|
message: 'Un problème technique est survenu. Merci de réessayer plus tard.',
|
|
18
19
|
code: '500',
|
|
@@ -6,6 +6,7 @@ describe('StatusPage', () => {
|
|
|
6
6
|
it('renders correctly', () => {
|
|
7
7
|
const wrapper = mount(StatusPage, {
|
|
8
8
|
props: {
|
|
9
|
+
headingLevel: 1,
|
|
9
10
|
pageTitle: 'Something went wrong',
|
|
10
11
|
message: 'Error message',
|
|
11
12
|
},
|
|
@@ -19,6 +20,7 @@ describe('StatusPage', () => {
|
|
|
19
20
|
it('renders correctly with undefined route', () => {
|
|
20
21
|
const wrapper = mount(StatusPage, {
|
|
21
22
|
props: {
|
|
23
|
+
headingLevel: 1,
|
|
22
24
|
code: '501',
|
|
23
25
|
pageTitle: 'Error',
|
|
24
26
|
message: 'Error message',
|
|
@@ -34,6 +36,7 @@ describe('StatusPage', () => {
|
|
|
34
36
|
it('uses href without router navigation when only btnHref is provided', () => {
|
|
35
37
|
const wrapper = mount(StatusPage, {
|
|
36
38
|
props: {
|
|
39
|
+
headingLevel: 1,
|
|
37
40
|
code: '401',
|
|
38
41
|
pageTitle: 'Auth error',
|
|
39
42
|
message: 'You are not authorized',
|
|
@@ -98,6 +98,7 @@ exports[`StatusPage > renders correctly 1`] = `
|
|
|
98
98
|
font-weight-bold
|
|
99
99
|
mb-2
|
|
100
100
|
mb-4
|
|
101
|
+
sy-heading
|
|
101
102
|
text-h5
|
|
102
103
|
">
|
|
103
104
|
Something went wrong
|
|
@@ -226,6 +227,7 @@ exports[`StatusPage > renders correctly with undefined route 1`] = `
|
|
|
226
227
|
font-weight-bold
|
|
227
228
|
mb-2
|
|
228
229
|
mb-4
|
|
230
|
+
sy-heading
|
|
229
231
|
text-h5
|
|
230
232
|
">
|
|
231
233
|
Error
|
|
@@ -11,6 +11,10 @@ const meta = {
|
|
|
11
11
|
layout: 'fullscreen',
|
|
12
12
|
},
|
|
13
13
|
argTypes: {
|
|
14
|
+
'headingLevel': {
|
|
15
|
+
control: { type: 'select' },
|
|
16
|
+
options: [1, 2, 3, 4, 5, 6],
|
|
17
|
+
},
|
|
14
18
|
'hideBackBtn': {
|
|
15
19
|
type: 'boolean',
|
|
16
20
|
control: { type: 'boolean' },
|
|
@@ -160,6 +164,7 @@ export const Default: Story = {
|
|
|
160
164
|
],
|
|
161
165
|
},
|
|
162
166
|
args: {
|
|
167
|
+
'headingLevel': 2,
|
|
163
168
|
'backBtnText': 'Retour',
|
|
164
169
|
'hideBackBtn': false,
|
|
165
170
|
'titleText': 'Paul Dupont',
|
|
@@ -222,6 +227,7 @@ export const BackgroundCustom: Story = {
|
|
|
222
227
|
],
|
|
223
228
|
},
|
|
224
229
|
args: {
|
|
230
|
+
headingLevel: 2,
|
|
225
231
|
backBtnText: 'Retour',
|
|
226
232
|
hideBackBtn: false,
|
|
227
233
|
titleText: 'Paul Dupont',
|
|
@@ -303,6 +309,7 @@ export const DataList: Story = {
|
|
|
303
309
|
],
|
|
304
310
|
},
|
|
305
311
|
args: {
|
|
312
|
+
headingLevel: 2,
|
|
306
313
|
backBtnText: 'Retour',
|
|
307
314
|
hideBackBtn: false,
|
|
308
315
|
titleText: 'Paul Dupont',
|
|
@@ -399,6 +406,7 @@ export const DataListFixedHeight: Story = {
|
|
|
399
406
|
],
|
|
400
407
|
},
|
|
401
408
|
args: {
|
|
409
|
+
headingLevel: 2,
|
|
402
410
|
backBtnText: 'Retour',
|
|
403
411
|
hideBackBtn: false,
|
|
404
412
|
titleText: 'Paul Dupont',
|
|
@@ -503,6 +511,7 @@ export const ActionBtn: Story = {
|
|
|
503
511
|
],
|
|
504
512
|
},
|
|
505
513
|
args: {
|
|
514
|
+
headingLevel: 2,
|
|
506
515
|
backBtnText: 'Retour',
|
|
507
516
|
hideBackBtn: false,
|
|
508
517
|
titleText: 'Paul Dupont',
|
|
@@ -718,6 +727,7 @@ export const Loading: Story = {
|
|
|
718
727
|
],
|
|
719
728
|
},
|
|
720
729
|
args: {
|
|
730
|
+
headingLevel: 2,
|
|
721
731
|
backBtnText: 'Retour',
|
|
722
732
|
hideBackBtn: false,
|
|
723
733
|
titleText: 'Paul Dupont',
|
|
@@ -803,6 +813,7 @@ export const SlotAdditionalInformations: Story = {
|
|
|
803
813
|
],
|
|
804
814
|
},
|
|
805
815
|
args: {
|
|
816
|
+
'headingLevel': 2,
|
|
806
817
|
'backBtnText': 'Retour',
|
|
807
818
|
'hideBackBtn': false,
|
|
808
819
|
'titleText': 'Paul Dupont',
|
|
@@ -898,6 +909,7 @@ export const SlotBackBtn: Story = {
|
|
|
898
909
|
'subTitleText': '1 69 08 75 125 456 75',
|
|
899
910
|
'subTitleAccessibleName': 'Numéro de sécurité sociale de Paul Dupont : 1 69 08 75 125 456 75',
|
|
900
911
|
'loading': false,
|
|
912
|
+
'headingLevel': 2,
|
|
901
913
|
'back-btn': `<template #back-btn>
|
|
902
914
|
<VBtn
|
|
903
915
|
color="white"
|
|
@@ -970,6 +982,7 @@ export const SlotBackBtnIcon: Story = {
|
|
|
970
982
|
],
|
|
971
983
|
},
|
|
972
984
|
args: {
|
|
985
|
+
'headingLevel': 2,
|
|
973
986
|
'backBtnText': 'Retour',
|
|
974
987
|
'hideBackBtn': false,
|
|
975
988
|
'titleText': 'Paul Dupont',
|
|
@@ -1037,6 +1050,7 @@ export const SlotTitle: Story = {
|
|
|
1037
1050
|
],
|
|
1038
1051
|
},
|
|
1039
1052
|
args: {
|
|
1053
|
+
headingLevel: 2,
|
|
1040
1054
|
backBtnText: 'Retour',
|
|
1041
1055
|
hideBackBtn: false,
|
|
1042
1056
|
titleText: 'Paul Dupont',
|
|
@@ -1102,6 +1116,7 @@ export const SlotSubTitle: Story = {
|
|
|
1102
1116
|
],
|
|
1103
1117
|
},
|
|
1104
1118
|
args: {
|
|
1119
|
+
'headingLevel': 2,
|
|
1105
1120
|
'backBtnText': 'Retour',
|
|
1106
1121
|
'hideBackBtn': false,
|
|
1107
1122
|
'titleText': 'Paul Dupont',
|
|
@@ -1171,6 +1186,7 @@ export const SlotRightContent: Story = {
|
|
|
1171
1186
|
],
|
|
1172
1187
|
},
|
|
1173
1188
|
args: {
|
|
1189
|
+
'headingLevel': 2,
|
|
1174
1190
|
'backBtnText': 'Retour',
|
|
1175
1191
|
'hideBackBtn': false,
|
|
1176
1192
|
'titleText': 'Paul Dupont',
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import HeaderLoading from '../HeaderLoading/HeaderLoading.vue'
|
|
14
14
|
import type { DataListActionEvent, DataListGroupItems } from '../DataListGroup/types'
|
|
15
15
|
import { VThemeProvider } from 'vuetify/components'
|
|
16
|
+
import SyHeading from '@/components/SyHeading/SyHeading.vue'
|
|
16
17
|
|
|
17
18
|
const props = withDefaults(defineProps<CustomizableOptions & Widthable & {
|
|
18
19
|
hideBackBtn?: boolean
|
|
@@ -25,6 +26,7 @@
|
|
|
25
26
|
dataListGroupItems?: DataListGroupItems | undefined
|
|
26
27
|
loading?: boolean
|
|
27
28
|
renderFixedHeight?: boolean
|
|
29
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
|
|
28
30
|
}>(), {
|
|
29
31
|
hideBackBtn: false,
|
|
30
32
|
backBtnText: locales.backBtnText,
|
|
@@ -36,6 +38,7 @@
|
|
|
36
38
|
dataListGroupItems: undefined,
|
|
37
39
|
loading: false,
|
|
38
40
|
renderFixedHeight: false,
|
|
41
|
+
headingLevel: 1,
|
|
39
42
|
})
|
|
40
43
|
|
|
41
44
|
const options = useCustomizableOptions(config, props)
|
|
@@ -118,13 +121,14 @@
|
|
|
118
121
|
theme="dark"
|
|
119
122
|
height="2rem"
|
|
120
123
|
/>
|
|
121
|
-
<
|
|
124
|
+
<SyHeading
|
|
122
125
|
v-else-if="titleText"
|
|
123
126
|
class="text-h5 font-weight-bold"
|
|
124
127
|
:aria-label="titleAccessibleName"
|
|
128
|
+
:level="headingLevel"
|
|
125
129
|
>
|
|
126
130
|
{{ titleText }}
|
|
127
|
-
</
|
|
131
|
+
</SyHeading>
|
|
128
132
|
</VFadeTransition>
|
|
129
133
|
</slot>
|
|
130
134
|
|
|
@@ -230,5 +234,4 @@
|
|
|
230
234
|
background-color: #e6e6e6 !important;
|
|
231
235
|
}
|
|
232
236
|
}
|
|
233
|
-
|
|
234
237
|
</style>
|
|
@@ -1,15 +1,36 @@
|
|
|
1
1
|
import { Meta, Story } from '@storybook/addon-docs';
|
|
2
2
|
import * as SubHeaderStories from '../SubHeader.stories.ts';
|
|
3
3
|
import '@/stories/styles/shared.css';
|
|
4
|
+
import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
|
|
5
|
+
import {
|
|
6
|
+
AccessibilityGuideLayout,
|
|
7
|
+
CriteriaSection,
|
|
8
|
+
CriteriaCard,
|
|
9
|
+
DemoSection,
|
|
10
|
+
BestPracticesSection,
|
|
11
|
+
ResourcesSection,
|
|
12
|
+
} from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
|
|
4
13
|
|
|
5
14
|
<Meta of={SubHeaderStories} />
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
<AccessibilityGuideLayout
|
|
16
|
+
componentName="SubHeader"
|
|
17
|
+
iconSrc={AccessibilityIcon}
|
|
18
|
+
>
|
|
12
19
|
<div class="mt-2">
|
|
13
20
|
<p>Rapport d’audit manuel : <a href="/audits/SubHeader.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
|
|
14
21
|
<p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/942" target="_blank" style={{color:'#0C41BD'}}>issue #942</a>)</p>
|
|
15
22
|
</div>
|
|
23
|
+
<CriteriaSection>
|
|
24
|
+
<CriteriaCard icon="🧩" title="Niveau de titre configurable via la prop headingLevel">
|
|
25
|
+
<ul>
|
|
26
|
+
<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 h4, défini dans l’implémentation du composant.</li>
|
|
27
|
+
<code><SubHeader :heading-level="4" /> </code>
|
|
28
|
+
|
|
29
|
+
<li><strong>Accessibilité</strong> : Permet que la hiérarchie entre les titres soit pertinente (critère 9.1.1 RGAA) </li>
|
|
30
|
+
</ul>
|
|
31
|
+
</CriteriaCard>
|
|
32
|
+
</CriteriaSection>
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
</AccessibilityGuideLayout>
|
|
@@ -119,6 +119,7 @@
|
|
|
119
119
|
|
|
120
120
|
<style lang="scss" scoped>
|
|
121
121
|
@use '@/assets/tokens';
|
|
122
|
+
@use '@/assets/apTokens';
|
|
122
123
|
@use 'sass:map';
|
|
123
124
|
|
|
124
125
|
.sy-alert {
|
|
@@ -256,41 +257,41 @@
|
|
|
256
257
|
@include redesign(
|
|
257
258
|
'warning',
|
|
258
259
|
(
|
|
259
|
-
'background':
|
|
260
|
-
'accent':
|
|
261
|
-
'border':
|
|
262
|
-
'icon':
|
|
263
|
-
'icon-bg':
|
|
260
|
+
'background': var(--alert-warning-background),
|
|
261
|
+
'accent': var(--alert-warning-accent),
|
|
262
|
+
'border': var(--alert-warning-border),
|
|
263
|
+
'icon':var(--alert-warning-icon),
|
|
264
|
+
'icon-bg': var(--alert-warning-icon-bg),
|
|
264
265
|
)
|
|
265
266
|
);
|
|
266
267
|
@include redesign(
|
|
267
268
|
'success',
|
|
268
269
|
(
|
|
269
|
-
'background':
|
|
270
|
-
'accent':
|
|
271
|
-
'border':
|
|
272
|
-
'icon':
|
|
273
|
-
'icon-bg':
|
|
270
|
+
'background': var(--alert-success-background),
|
|
271
|
+
'accent': var(--alert-success-accent),
|
|
272
|
+
'border': var(--alert-success-border),
|
|
273
|
+
'icon':var(--alert-success-icon),
|
|
274
|
+
'icon-bg': var(--alert-success-icon-bg),
|
|
274
275
|
)
|
|
275
276
|
);
|
|
276
277
|
@include redesign(
|
|
277
278
|
'error',
|
|
278
279
|
(
|
|
279
|
-
'background':
|
|
280
|
-
'accent':
|
|
281
|
-
'border':
|
|
282
|
-
'icon':
|
|
283
|
-
'icon-bg':
|
|
280
|
+
'background': var(--alert-error-background),
|
|
281
|
+
'accent': var(--alert-error-accent),
|
|
282
|
+
'border': var(--alert-error-border),
|
|
283
|
+
'icon':var(--alert-error-icon),
|
|
284
|
+
'icon-bg': var(--alert-error-icon-bg),
|
|
284
285
|
)
|
|
285
286
|
);
|
|
286
287
|
@include redesign(
|
|
287
288
|
'info',
|
|
288
289
|
(
|
|
289
|
-
'background':
|
|
290
|
-
'accent':
|
|
291
|
-
'border':
|
|
292
|
-
'icon':
|
|
293
|
-
'icon-bg':
|
|
290
|
+
'background': var(--alert-info-background),
|
|
291
|
+
'accent': var(--alert-info-accent),
|
|
292
|
+
'border': var(--alert-info-border),
|
|
293
|
+
'icon':var(--alert-info-icon),
|
|
294
|
+
'icon-bg': var(--alert-info-icon-bg),
|
|
294
295
|
)
|
|
295
296
|
);
|
|
296
297
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { ref, watch, computed, onMounted, useSlots, type PropType, nextTick } from 'vue'
|
|
3
3
|
import { useDisplay } from 'vuetify'
|
|
4
4
|
import slugify from 'slugify'
|
|
5
|
+
import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
|
|
5
6
|
|
|
6
7
|
type Item = string | Record<string, unknown>
|
|
7
8
|
|
|
@@ -34,6 +35,10 @@
|
|
|
34
35
|
type: String,
|
|
35
36
|
default: 'value',
|
|
36
37
|
},
|
|
38
|
+
iconKey: {
|
|
39
|
+
type: String,
|
|
40
|
+
default: 'icon',
|
|
41
|
+
},
|
|
37
42
|
primaryInfo: {
|
|
38
43
|
type: String,
|
|
39
44
|
default: 'Information principale',
|
|
@@ -217,28 +222,35 @@
|
|
|
217
222
|
:aria-labelledby="generatedId"
|
|
218
223
|
:aria-activedescendant="getSelectedValue() ? `item-${slugify(getSelectedValue()!)}` : undefined"
|
|
219
224
|
>
|
|
220
|
-
<
|
|
225
|
+
<VListItem
|
|
221
226
|
v-for="(item, index) in formattedItems"
|
|
222
227
|
:id="`item-${slugify(item[props.textKey] as string)}`"
|
|
223
228
|
:key="index"
|
|
229
|
+
tag="li"
|
|
230
|
+
:class="`text-${props?.options['list']?.textColor}`"
|
|
231
|
+
v-bind="props.options['list']"
|
|
232
|
+
:href="item.link"
|
|
233
|
+
:to="item.to"
|
|
234
|
+
:tabindex="0"
|
|
235
|
+
role="menuitem"
|
|
236
|
+
:aria-current="selectedItem === item ? 'page' : undefined"
|
|
237
|
+
@click="selectItem(item)"
|
|
224
238
|
>
|
|
225
|
-
<
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
:href="item.link"
|
|
229
|
-
:to="item.to"
|
|
230
|
-
:tabindex="0"
|
|
231
|
-
role="menuitem"
|
|
232
|
-
:aria-current="selectedItem === item ? 'page' : undefined"
|
|
233
|
-
@click="selectItem(item)"
|
|
239
|
+
<template
|
|
240
|
+
v-if="item[props.iconKey]"
|
|
241
|
+
#prepend
|
|
234
242
|
>
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
243
|
+
<SyIcon
|
|
244
|
+
:icon="item[props.iconKey] as string"
|
|
245
|
+
decorative
|
|
246
|
+
/>
|
|
247
|
+
</template>
|
|
248
|
+
<VListItemTitle
|
|
249
|
+
class="item-title"
|
|
250
|
+
>
|
|
251
|
+
{{ item[props.textKey] }}
|
|
252
|
+
</VListItemTitle>
|
|
253
|
+
</VListItem>
|
|
242
254
|
<slot />
|
|
243
255
|
<slot name="footer-list-item" />
|
|
244
256
|
</VList>
|
|
@@ -312,4 +324,8 @@
|
|
|
312
324
|
.item-title {
|
|
313
325
|
white-space: wrap;
|
|
314
326
|
}
|
|
327
|
+
|
|
328
|
+
:deep(.v-list-item__prepend) {
|
|
329
|
+
display: unset !important;
|
|
330
|
+
}
|
|
315
331
|
</style>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { describe, it } from 'vitest'
|
|
4
|
+
import { mount } from '@vue/test-utils'
|
|
5
|
+
import { axe } from 'vitest-axe'
|
|
6
|
+
import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
|
|
7
|
+
import SyBtnMenu from '../SyBtnMenu.vue'
|
|
8
|
+
|
|
9
|
+
// Scénario d’accessibilité : menu utilisateur desktop avec une option et déploiement du menu.
|
|
10
|
+
|
|
11
|
+
describe('SyBtnMenu – accessibility (axe)', () => {
|
|
12
|
+
it('has no obvious axe violations with menu open', async () => {
|
|
13
|
+
const wrapper = mount(SyBtnMenu, {
|
|
14
|
+
props: {
|
|
15
|
+
primaryInfo: 'John Doe',
|
|
16
|
+
secondaryInfo: 'Additional Info',
|
|
17
|
+
menuItems: [
|
|
18
|
+
{ text: 'Profil', value: 'profile' },
|
|
19
|
+
],
|
|
20
|
+
isMobileView: false,
|
|
21
|
+
},
|
|
22
|
+
attachTo: document.body,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
// Ouvrir le menu pour inclure la liste dans l’analyse axe
|
|
26
|
+
const activator = wrapper.find('.sy-user-menu-btn')
|
|
27
|
+
if (activator.exists()) {
|
|
28
|
+
await activator.trigger('click')
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const results = await axe(document.body)
|
|
32
|
+
assertNoA11yViolations(results, 'SyBtnMenu – menu open', {
|
|
33
|
+
ignoreRules: ['region'],
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
wrapper.unmount()
|
|
37
|
+
})
|
|
38
|
+
})
|