@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.
Files changed (341) hide show
  1. package/dist/{DateFilter-uN8OURoP.js → DateFilter-B5n-ZkLi.js} +29 -24
  2. package/dist/{NumberFilter-sm1dQNQi.js → NumberFilter-CtiZ9uj8.js} +1 -1
  3. package/dist/{PeriodFilter-Cklsxnh9.js → PeriodFilter-DzqiMb-b.js} +1 -1
  4. package/dist/{SelectFilter-CWefj27Z.js → SelectFilter-BOYlF7rX.js} +1 -1
  5. package/dist/{TextFilter-Ddyj885L.js → TextFilter-BOFRNfcX.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7399 -5967
  7. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
  8. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
  9. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
  10. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
  12. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
  14. package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +1 -1
  15. package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +8 -8
  17. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +3 -3
  18. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +1 -1
  19. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +1 -1
  20. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +16 -20
  22. package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +1 -1
  23. package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +1 -1
  24. package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1610 -1354
  26. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +2411 -2027
  27. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8889 -7327
  28. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  29. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -6
  30. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +8888 -7334
  31. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +951 -839
  32. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1613 -1357
  33. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +223 -203
  34. package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +3 -3
  35. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +3 -7
  36. package/dist/components/CollapsibleList/CollapsibleList.d.ts +4 -1
  37. package/dist/components/CookieBanner/CookieBanner.d.ts +303 -273
  38. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +1297 -1156
  39. package/dist/components/CookiesSelection/CookiesSelection.d.ts +404 -377
  40. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +1 -1
  41. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +1088 -847
  42. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +515 -321
  44. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +41 -39
  45. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +921 -801
  46. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  47. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  48. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +907 -795
  49. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1629 -1365
  50. package/dist/components/DataList/DataList.d.ts +1 -1
  51. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3868 -3123
  52. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1946 -1562
  53. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +833 -687
  54. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  55. package/dist/components/DownloadBtn/config.d.ts +1 -1
  56. package/dist/components/ErrorPage/ErrorPage.d.ts +4 -0
  57. package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
  58. package/dist/components/FileUpload/FileUpload.d.ts +4 -4
  59. package/dist/components/FileUpload/locales.d.ts +1 -0
  60. package/dist/components/FilterSideBar/FilterSideBar.d.ts +418 -366
  61. package/dist/components/FooterBar/FooterBar.d.ts +13 -1
  62. package/dist/components/FooterBar/locales.d.ts +1 -0
  63. package/dist/components/FooterBar/types.d.ts +1 -0
  64. package/dist/components/HeaderBar/HeaderBar.d.ts +1 -0
  65. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -0
  66. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +3 -6
  67. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +1031 -643
  68. package/dist/components/LangBtn/LangBtn.d.ts +277 -239
  69. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +4 -0
  70. package/dist/components/MaintenancePage/MaintenancePage.d.ts +16 -1
  71. package/dist/components/NirField/NirField.d.ts +1659 -1371
  72. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  73. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  74. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  75. package/dist/components/PeriodField/PeriodField.d.ts +7712 -6216
  76. package/dist/components/PhoneField/PhoneField.d.ts +831 -687
  77. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  78. package/dist/components/StatusPage/StatusPage.d.ts +12 -1
  79. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  80. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  81. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +10 -1
  82. package/dist/components/SyHeading/SyHeading.d.ts +20 -0
  83. package/dist/components/SyTextArea/SyTextArea.d.ts +476 -420
  84. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  85. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  86. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  87. package/dist/components/Tables/common/SyTablePagination.d.ts +269 -170
  88. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  89. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  90. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  91. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  92. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  93. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  94. package/dist/components/Tables/common/types.d.ts +2 -0
  95. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +24 -1211
  96. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  97. package/dist/components/index.d.ts +1 -0
  98. package/dist/components/types.d.ts +2 -0
  99. package/dist/design-system-v3.js +70 -69
  100. package/dist/design-system-v3.umd.cjs +265 -265
  101. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  102. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  103. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  104. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  105. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  106. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  107. package/dist/main-CEl4J8_T.js +37241 -0
  108. package/dist/style.css +1 -1
  109. package/dist/vuetifyConfig.d.ts +14 -14
  110. package/package.json +13 -7
  111. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  112. package/src/assets/apTokens.scss +53 -17
  113. package/src/assets/overrides/_icons.scss +12 -2
  114. package/src/assets/overrides/_tooltips.scss +5 -6
  115. package/src/assets/overrides/_typography.scss +17 -2
  116. package/src/assets/overrides/_utilities.scss +49 -3
  117. package/src/assets/tokens.scss +53 -17
  118. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  119. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  120. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  121. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  122. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  123. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  124. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  125. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  126. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  127. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  128. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  129. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  130. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  131. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  132. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  133. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  134. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  135. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  136. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  137. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  138. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  139. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  140. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  141. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  142. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  143. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  144. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  145. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  146. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  147. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  148. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  149. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  150. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  151. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  152. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  153. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  154. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  155. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  156. package/src/components/BackBtn/BackBtn.vue +1 -1
  157. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +36 -18
  158. package/src/components/ChipList/ChipList.vue +4 -2
  159. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  160. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  161. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  162. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  163. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  164. package/src/components/CookieBanner/CookieBanner.stories.ts +10 -0
  165. package/src/components/CookieBanner/CookieBanner.vue +15 -5
  166. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +9 -0
  167. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +10 -2
  168. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  169. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  170. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  171. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  172. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  173. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  174. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  175. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  176. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  177. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  178. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  179. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  180. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  181. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  182. package/src/components/Customs/Selects/SySelect/SySelect.vue +17 -0
  183. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  184. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  185. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  186. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +1 -1
  187. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  188. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  189. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  190. package/src/components/Customs/SyPagination/SyPagination.vue +20 -5
  191. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  192. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +53 -0
  193. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  194. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  195. package/src/components/Customs/SyTextField/SyTextField.vue +39 -5
  196. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  197. package/src/components/DatePicker/CalendarMode/DatePicker.vue +20 -8
  198. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  199. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  200. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  201. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +34 -0
  202. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -0
  203. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  204. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  205. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  206. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  207. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  208. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  209. package/src/components/DialogBox/DialogBox.vue +12 -5
  210. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  211. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  212. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  213. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  214. package/src/components/DownloadBtn/config.ts +1 -1
  215. package/src/components/ErrorPage/ErrorPage.stories.ts +82 -47
  216. package/src/components/ErrorPage/ErrorPage.vue +6 -0
  217. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +15 -0
  218. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +2 -0
  219. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  220. package/src/components/FileList/FileList.stories.ts +4 -0
  221. package/src/components/FileList/UploadItem/UploadItem.vue +8 -3
  222. package/src/components/FileList/UploadItem/locales.ts +10 -0
  223. package/src/components/FileList/accessibilite/Accessibility.mdx +55 -7
  224. package/src/components/FileUpload/FileUpload.vue +60 -37
  225. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  226. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  227. package/src/components/FileUpload/locales.ts +1 -0
  228. package/src/components/FileUpload/tests/FileUpload.spec.ts +14 -14
  229. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  230. package/src/components/FilterInline/FilterInline.vue +1 -0
  231. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  232. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  233. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  234. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  235. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  236. package/src/components/FooterBar/FooterBar.stories.ts +298 -34
  237. package/src/components/FooterBar/FooterBar.vue +67 -9
  238. package/src/components/FooterBar/config.ts +2 -2
  239. package/src/components/FooterBar/locales.ts +1 -0
  240. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  241. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  242. package/src/components/FooterBar/types.d.ts +1 -0
  243. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  244. package/src/components/HeaderBar/HeaderBar.vue +4 -0
  245. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +7 -2
  246. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  247. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  248. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  249. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  250. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  251. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -0
  252. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  253. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  254. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  255. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  256. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  257. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  258. package/src/components/MaintenancePage/MaintenancePage.vue +33 -6
  259. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +3 -1
  260. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +3 -2
  261. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +18 -0
  262. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +2 -0
  263. package/src/components/NotFoundPage/NotFoundPage.stories.ts +1 -1
  264. package/src/components/NotFoundPage/NotFoundPage.vue +16 -5
  265. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +2 -0
  266. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +49 -0
  267. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +25 -2
  268. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +2 -0
  269. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  270. package/src/components/PageContainer/PageContainer.vue +4 -2
  271. package/src/components/PageContainer/accessibilite/Accessibility.mdx +31 -17
  272. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  273. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  274. package/src/components/PeriodField/PeriodField.vue +4 -0
  275. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  276. package/src/components/PhoneField/PhoneField.stories.ts +73 -35
  277. package/src/components/PhoneField/PhoneField.vue +152 -83
  278. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  279. package/src/components/PhoneField/indicatifs.ts +2 -2
  280. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +47 -0
  281. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  282. package/src/components/SearchListField/SearchListField.vue +1 -1
  283. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  284. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  285. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +1 -1
  286. package/src/components/StatusPage/StatusPage.mdx +10 -1
  287. package/src/components/StatusPage/StatusPage.stories.ts +43 -0
  288. package/src/components/StatusPage/StatusPage.vue +26 -4
  289. package/src/components/StatusPage/accessibilite/Accessibility.mdx +24 -5
  290. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +1 -0
  291. package/src/components/StatusPage/tests/StatusPage.spec.ts +3 -0
  292. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +2 -0
  293. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  294. package/src/components/SubHeader/SubHeader.vue +6 -3
  295. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  296. package/src/components/SyAlert/SyAlert.vue +21 -20
  297. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  298. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  299. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  300. package/src/components/SyHeading/SyHeading.vue +18 -0
  301. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -30
  302. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  303. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  304. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  305. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  306. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  307. package/src/components/Tables/common/types.ts +3 -0
  308. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +11 -11
  309. package/src/components/UploadWorkflow/UploadWorkflow.vue +30 -13
  310. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  311. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  312. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +7 -25
  313. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +144 -121
  314. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  315. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  316. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  317. package/src/components/index.ts +1 -0
  318. package/src/components/types.ts +4 -0
  319. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  320. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  321. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  322. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  323. package/src/composables/useFilterable/useFilterable.ts +7 -1
  324. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  325. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  326. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  327. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  328. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  329. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  330. package/src/directives/rgaaSvgFix.ts +2 -7
  331. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  332. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  333. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  334. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  335. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  336. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  337. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  338. package/src/stories/DesignTokens/Colors.mdx +8 -59
  339. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  340. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  341. 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 size="md">
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
- <h1
106
+ <SyHeading
88
107
  v-if="pageTitle"
89
- class="mb-2 font-weight-bold text-h5 mb-4"
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
- </h1>
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>&lt;StatusPage
25
+ :heading-level="1" /&gt; </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
- <h2
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
- </h2>
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
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- </div>
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>&lt;SubHeader :heading-level="4" /&gt; </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': tokens.$colors-background-warning,
260
- 'accent': tokens.$colors-border-warning,
261
- 'border': tokens.$colors-border-warning,
262
- 'icon':tokens.$colors-icon-warning,
263
- 'icon-bg': tokens.$colors-background-warning-subdued,
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': tokens.$colors-background-success,
270
- 'accent': tokens.$colors-border-success,
271
- 'border': tokens.$colors-border-success,
272
- 'icon':tokens.$colors-icon-success,
273
- 'icon-bg': tokens.$colors-background-success-subdued,
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': tokens.$colors-background-error,
280
- 'accent': tokens.$colors-border-error,
281
- 'border': tokens.$colors-border-error,
282
- 'icon':tokens.$colors-icon-error,
283
- 'icon-bg': tokens.$colors-background-error-subdued,
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': tokens.$colors-background-info,
290
- 'accent': tokens.$colors-border-info,
291
- 'border': tokens.$colors-border-info,
292
- 'icon':tokens.$colors-icon-info,
293
- 'icon-bg': tokens.$colors-background-info-subdued,
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
- <li
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
- <VListItem
226
- :class="`text-${props?.options['list']?.textColor}`"
227
- v-bind="props.options['list']"
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
- <VListItemTitle
236
- class="item-title"
237
- >
238
- {{ item[props.textKey] }}
239
- </VListItemTitle>
240
- </VListItem>
241
- </li>
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
+ })