@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
@@ -5,6 +5,20 @@ const meta = {
5
5
  title: 'Composants/Données/LogoBrandSection',
6
6
  component: LogoBrandSection,
7
7
  argTypes: {
8
+ 'headingLevelTitle': {
9
+ control: {
10
+ type: 'select',
11
+ },
12
+ options: [1, 2, 3, 4, 5, 6],
13
+ description: 'Le niveau de titre pour le serviceTitle.',
14
+ },
15
+ 'headingLevelSubtitle': {
16
+ control: {
17
+ type: 'select',
18
+ },
19
+ options: [1, 2, 3, 4, 5, 6],
20
+ description: 'Le niveau de titre pour le serviceSubTitle.',
21
+ },
8
22
  'theme': {
9
23
  description: 'Applique un preset de style à la section.',
10
24
  control: {
@@ -72,6 +86,8 @@ const meta = {
72
86
  },
73
87
  args: {
74
88
  theme: 'default',
89
+ headingLevelSubtitle: 2,
90
+ headingLevelTitle: 1,
75
91
  },
76
92
  } satisfies Meta<typeof LogoBrandSection>
77
93
 
@@ -81,6 +97,8 @@ type Story = StoryObj<typeof LogoBrandSection>
81
97
 
82
98
  export const Default: Story = {
83
99
  args: {
100
+ headingLevelSubtitle: 2,
101
+ headingLevelTitle: 1,
84
102
  serviceTitle: 'Synapse',
85
103
  serviceSubTitle: 'Documentation du Design System',
86
104
  },
@@ -91,6 +109,8 @@ export const Default: Story = {
91
109
  code: `
92
110
  <template>
93
111
  <LogoBrandSection
112
+ :heading-level-title="headingLevelTitle"
113
+ :heading-level-subtitle="headingLevelSubtitle"
94
114
  service-title="Synapse"
95
115
  service-sub-title="Documentation du Design System"
96
116
  />
@@ -113,6 +133,8 @@ export const WithBrand: Story = {
113
133
  args: {
114
134
  serviceTitle: 'Synapse',
115
135
  serviceSubTitle: ' Documentation du Design System',
136
+ headingLevelTitle: 1,
137
+ headingLevelSubtitle: 2,
116
138
  },
117
139
  render: (args) => {
118
140
  return {
@@ -8,6 +8,7 @@
8
8
  import { locales } from './locales'
9
9
  import { secondaryLogoMapping } from './secondaryLogoMapping'
10
10
  import type { Theme } from './types'
11
+ import SyHeading from '@/components/SyHeading/SyHeading.vue'
11
12
 
12
13
  const props = withDefaults(
13
14
  defineProps<{
@@ -21,12 +22,16 @@
21
22
  to?: RouteLocationRaw
22
23
  href?: string
23
24
  }
25
+ headingLevelTitle?: 1 | 2 | 3 | 4 | 5 | 6
26
+ headingLevelSubtitle?: 1 | 2 | 3 | 4
24
27
  }>(), {
25
28
  theme: 'default',
26
29
  serviceTitle: undefined,
27
30
  serviceSubTitle: undefined,
28
31
  mobileVersion: false,
29
32
  reduceLogo: false,
33
+ headingLevelTitle: 1,
34
+ headingLevelSubtitle: 2,
30
35
  homeLink: () => ({
31
36
  href: '/',
32
37
  }),
@@ -246,12 +251,14 @@
246
251
  class="vd-title-container d-flex justify-center flex-column text-primary"
247
252
  >
248
253
  <slot name="brand-content">
249
- <h1
254
+ <SyHeading
250
255
  v-if="service.title"
251
256
  :class="{
252
257
  'vd-compte-entreprise-title': isCompteEntreprise,
258
+ 'vd-title text-caption text-md-subtitle-1 font-weight-medium': headingLevelTitle === 1,
259
+ 'vd-title text-caption font-weight-medium': headingLevelTitle !== 1,
253
260
  }"
254
- class="vd-title text-caption text-md-subtitle-1 font-weight-medium"
261
+ :level="headingLevelTitle"
255
262
  >
256
263
  <template v-if="typeof service.title === 'string'">
257
264
  <span>
@@ -267,14 +274,15 @@
267
274
  {{ service.title.highlight }}
268
275
  </span>
269
276
  </template>
270
- </h1>
277
+ </SyHeading>
271
278
 
272
- <h2
279
+ <SyHeading
273
280
  v-if="showServiceSubTitle"
274
281
  class="vd-title text-caption"
282
+ :level="headingLevelSubtitle"
275
283
  >
276
284
  {{ service.subTitle }}
277
- </h2>
285
+ </SyHeading>
278
286
  </slot>
279
287
  </div>
280
288
  </slot>
@@ -17,6 +17,8 @@ describe('LogoBrandSection – accessibility (axe)', () => {
17
17
  },
18
18
  },
19
19
  props: {
20
+ headingLevelTitle: 1,
21
+ headingLevelSubtitle: 2,
20
22
  theme: 'default',
21
23
  serviceTitle: 'Service Title',
22
24
  serviceSubTitle: 'Service Sub Title',
@@ -9,6 +9,8 @@ describe('LogoBrandSection', () => {
9
9
  global: {
10
10
  stubs: ['RouterLink', 'Logo'] },
11
11
  props: {
12
+ headingLevelTitle: 1,
13
+ headingLevelSubtitle: 2,
12
14
  theme: 'default',
13
15
  serviceTitle: 'Service Title',
14
16
  serviceSubTitle: 'Service Sub Title',
@@ -28,6 +30,8 @@ describe('LogoBrandSection', () => {
28
30
  global: {
29
31
  stubs: ['RouterLink', 'Logo'] },
30
32
  props: {
33
+ headingLevelTitle: 1,
34
+ headingLevelSubtitle: 2,
31
35
  theme: 'default',
32
36
  serviceTitle: 'Service Title',
33
37
  serviceSubTitle: 'Service Sub Title',
@@ -42,6 +46,8 @@ describe('LogoBrandSection', () => {
42
46
  global: {
43
47
  stubs: ['RouterLink', 'Logo'] },
44
48
  props: {
49
+ headingLevelTitle: 1,
50
+ headingLevelSubtitle: 2,
45
51
  theme: 'compte-entreprise',
46
52
  },
47
53
  })
@@ -54,6 +60,8 @@ describe('LogoBrandSection', () => {
54
60
  global: {
55
61
  stubs: ['RouterLink', 'Logo'] },
56
62
  props: {
63
+ headingLevelTitle: 1,
64
+ headingLevelSubtitle: 2,
57
65
  theme: 'default',
58
66
  serviceTitle: 'Service Title',
59
67
  serviceSubTitle: 'Service Sub Title',
@@ -74,6 +82,8 @@ describe('LogoBrandSection', () => {
74
82
  global: {
75
83
  stubs: ['RouterLink', 'Logo'] },
76
84
  props: {
85
+ headingLevelTitle: 1,
86
+ headingLevelSubtitle: 2,
77
87
  theme: 'default',
78
88
  serviceTitle: 'Service Title',
79
89
  serviceSubTitle: 'Service Sub Title',
@@ -88,6 +98,8 @@ describe('LogoBrandSection', () => {
88
98
  global: {
89
99
  stubs: ['RouterLink', 'Logo'] },
90
100
  props: {
101
+ headingLevelTitle: 1,
102
+ headingLevelSubtitle: 2,
91
103
  theme: 'default',
92
104
  serviceTitle: 'Service Title',
93
105
  serviceSubTitle: '',
@@ -102,6 +114,8 @@ describe('LogoBrandSection', () => {
102
114
  global: {
103
115
  stubs: ['RouterLink', 'Logo'] },
104
116
  props: {
117
+ headingLevelTitle: 1,
118
+ headingLevelSubtitle: 2,
105
119
  serviceTitle: 'Service Title',
106
120
  serviceSubTitle: 'Service Sub Title',
107
121
  },
@@ -116,6 +130,8 @@ describe('LogoBrandSection', () => {
116
130
  global: {
117
131
  stubs: ['RouterLink', 'Logo'] },
118
132
  props: {
133
+ headingLevelTitle: 1,
134
+ headingLevelSubtitle: 2,
119
135
  theme: 'cnam',
120
136
  serviceTitle: 'Service Title',
121
137
  serviceSubTitle: 'Service Sub Title',
@@ -131,6 +147,8 @@ describe('LogoBrandSection', () => {
131
147
  global: {
132
148
  stubs: ['RouterLink', 'Logo'] },
133
149
  props: {
150
+ headingLevelTitle: 1,
151
+ headingLevelSubtitle: 2,
134
152
  theme: 'compte-entreprise',
135
153
  serviceTitle: 'Service Title',
136
154
  serviceSubTitle: 'Service Sub Title',
@@ -146,6 +164,8 @@ describe('LogoBrandSection', () => {
146
164
  global: {
147
165
  stubs: ['RouterLink', 'Logo'] },
148
166
  props: {
167
+ headingLevelTitle: 1,
168
+ headingLevelSubtitle: 2,
149
169
  theme: 'risque-pro',
150
170
  reduceLogo: false,
151
171
  },
@@ -160,6 +180,8 @@ describe('LogoBrandSection', () => {
160
180
  global: {
161
181
  stubs: ['RouterLink', 'Logo'] },
162
182
  props: {
183
+ headingLevelTitle: 1,
184
+ headingLevelSubtitle: 2,
163
185
  theme: 'risque-pro',
164
186
  reduceLogo: true,
165
187
  },
@@ -173,6 +195,8 @@ describe('LogoBrandSection', () => {
173
195
  global: {
174
196
  stubs: ['RouterLink', 'Logo'] },
175
197
  props: {
198
+ headingLevelTitle: 1,
199
+ headingLevelSubtitle: 2,
176
200
  theme: 'compte-entreprise',
177
201
  },
178
202
  })
@@ -185,6 +209,8 @@ describe('LogoBrandSection', () => {
185
209
  global: {
186
210
  stubs: ['RouterLink', 'Logo'] },
187
211
  props: {
212
+ headingLevelTitle: 1,
213
+ headingLevelSubtitle: 2,
188
214
  theme: 'compte-ameli',
189
215
  mobileVersion: true,
190
216
  },
@@ -199,6 +225,8 @@ describe('LogoBrandSection', () => {
199
225
  global: {
200
226
  stubs: ['RouterLink', 'Logo'] },
201
227
  props: {
228
+ headingLevelTitle: 1,
229
+ headingLevelSubtitle: 2,
202
230
  theme: 'default',
203
231
  reduceLogo: true,
204
232
  },
@@ -212,6 +240,8 @@ describe('LogoBrandSection', () => {
212
240
  global: {
213
241
  stubs: ['RouterLink', 'Logo'] },
214
242
  props: {
243
+ headingLevelTitle: 1,
244
+ headingLevelSubtitle: 2,
215
245
  theme: 'default',
216
246
  reduceLogo: false,
217
247
  },
@@ -225,6 +255,8 @@ describe('LogoBrandSection', () => {
225
255
  global: {
226
256
  stubs: ['RouterLink', 'Logo'] },
227
257
  props: {
258
+ headingLevelTitle: 1,
259
+ headingLevelSubtitle: 2,
228
260
  theme: 'compte-ameli',
229
261
  },
230
262
  })
@@ -237,6 +269,8 @@ describe('LogoBrandSection', () => {
237
269
  global: {
238
270
  stubs: ['RouterLink', 'Logo'] },
239
271
  props: {
272
+ headingLevelTitle: 1,
273
+ headingLevelSubtitle: 2,
240
274
  theme: 'default',
241
275
  homeLink: {
242
276
  href: '#',
@@ -252,6 +286,8 @@ describe('LogoBrandSection', () => {
252
286
  global: {
253
287
  stubs: ['RouterLink', 'Logo'] },
254
288
  props: {
289
+ headingLevelTitle: 1,
290
+ headingLevelSubtitle: 2,
255
291
  theme: 'default',
256
292
  homeLink: {
257
293
  to: '/',
@@ -267,6 +303,8 @@ describe('LogoBrandSection', () => {
267
303
  global: {
268
304
  stubs: ['RouterLink', 'Logo'] },
269
305
  props: {
306
+ headingLevelTitle: 1,
307
+ headingLevelSubtitle: 2,
270
308
  theme: 'default',
271
309
  homeLink: {
272
310
  href: undefined,
@@ -283,6 +321,8 @@ describe('LogoBrandSection', () => {
283
321
  global: {
284
322
  stubs: ['RouterLink', 'Logo'] },
285
323
  props: {
324
+ headingLevelTitle: 1,
325
+ headingLevelSubtitle: 2,
286
326
  theme: 'default',
287
327
  },
288
328
  })
@@ -295,6 +335,8 @@ describe('LogoBrandSection', () => {
295
335
  global: {
296
336
  stubs: ['RouterLink', 'Logo'] },
297
337
  props: {
338
+ headingLevelTitle: 1,
339
+ headingLevelSubtitle: 2,
298
340
  theme: 'ameli-pro',
299
341
  },
300
342
  })
@@ -307,6 +349,8 @@ describe('LogoBrandSection', () => {
307
349
  global: {
308
350
  stubs: ['RouterLink', 'Logo'] },
309
351
  props: {
352
+ headingLevelTitle: 1,
353
+ headingLevelSubtitle: 2,
310
354
  theme: 'ameli',
311
355
  homeLink: {
312
356
  href: undefined,
@@ -44,6 +44,7 @@ exports[`LogoBrandSection > renders correctly 1`] = `
44
44
  ">
45
45
  <h1 class="
46
46
  font-weight-medium
47
+ sy-heading
47
48
  text-caption
48
49
  text-md-subtitle-1
49
50
  vd-title
@@ -53,6 +54,7 @@ exports[`LogoBrandSection > renders correctly 1`] = `
53
54
  </span>
54
55
  </h1>
55
56
  <h2 class="
57
+ sy-heading
56
58
  text-caption
57
59
  vd-title
58
60
  ">
@@ -1,26 +1,53 @@
1
1
  <script setup lang="ts">
2
+ import { computed } from 'vue'
2
3
  import StatusPage from '../StatusPage/StatusPage.vue'
3
4
  import { locales } from './locales'
4
5
  import { useThemeLocales } from '@/utils/theme'
5
6
 
6
7
  const { themeLocales } = useThemeLocales(locales)
8
+
9
+ interface Props {
10
+ pageTitle?: string
11
+ message?: string
12
+ code?: string
13
+ src?: string
14
+ uniqueId?: string
15
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
16
+ }
17
+
18
+ const props = withDefaults(defineProps<Props>(), {
19
+ pageTitle: undefined,
20
+ message: undefined,
21
+ code: undefined,
22
+ src: undefined,
23
+ uniqueId: undefined,
24
+ headingLevel: 1,
25
+ })
26
+
27
+ // Utiliser les props de l'utilisateur en priorité, sinon les locales du thème
28
+ const pageTitle = computed(() => props.pageTitle || themeLocales.value.pageTitle)
29
+ const message = computed(() => props.message || themeLocales.value.message)
30
+ const code = computed(() => props.code || themeLocales.value.code)
31
+ const src = computed(() => props.src || themeLocales.value.src)
7
32
  </script>
8
33
 
9
34
  <template>
10
35
  <StatusPage
11
- :page-title="themeLocales.pageTitle"
12
- :message="themeLocales.message"
13
- :code="themeLocales.code"
36
+ :heading-level="headingLevel"
37
+ :unique-id="props.uniqueId"
38
+ :page-title="pageTitle"
39
+ :message="message"
40
+ :code="code"
14
41
  :hide-btn="true"
15
42
  >
16
43
  <template
17
- v-if="themeLocales.src || $slots.illustration"
44
+ v-if="src || $slots.illustration"
18
45
  #illustration
19
46
  >
20
47
  <slot name="illustration">
21
48
  <img
22
- v-if="themeLocales.src"
23
- :src="themeLocales.src"
49
+ v-if="src"
50
+ :src="src"
24
51
  alt=""
25
52
  aria-hidden="true"
26
53
  >
@@ -28,7 +28,9 @@ import {
28
28
  <ul>
29
29
  <li><strong>Titre de page</strong> : rendu dans une balise <code>h1</code> via <code>StatusPage</code>, sa valeur provient des locales du thème via <code>useThemeLocales</code></li>
30
30
  <li><strong>Code d'erreur</strong> : le 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>
31
- <li><strong>Valeurs par défaut</strong> : <code>pageTitle</code>, <code>message</code> et <code>code</code> proviennent des locales du thème via <code>useThemeLocales</code></li>
31
+ <li><strong>Valeurs par défaut</strong> : <code>pageTitle</code>, <code>message</code> <code>src</code> et <code>code</code> proviennent des locales du thème via <code>useThemeLocales</code></li>
32
+ <li><strong>Prop <code>uniqueId</code></strong> : permet de définir un identifiant unique sur le conteneur, facilitant le ciblage par <code>aria-labelledby</code> ou <code>aria-describedby</code> depuis d'autres éléments</li>
33
+ <li><strong>Prop <code>role</code></strong> : aucune prop <code>role</code> n'est exposée sur ce composant — la page de maintenance est une page statique d'information, sa structure sémantique (<code>h1</code>, paragraphe) suffit à en exprimer le rôle sans qu'un attribut ARIA <code>role</code> supplémentaire soit nécessaire ; l'exposer risquerait d'introduire de mauvaises utilisations (ex. <code>role="alert"</code> inapproprié) pouvant nuire à l'expérience des utilisateurs de lecteurs d'écran</li>
32
34
  </ul>
33
35
  </CriteriaCard>
34
36
 
@@ -1,6 +1,7 @@
1
1
  // @vitest-environment jsdom
2
2
 
3
3
  import { describe, it, expect, vi, afterEach } from 'vitest'
4
+ import { ref } from 'vue'
4
5
  import { mount } from '@vue/test-utils'
5
6
  import { axe } from 'vitest-axe'
6
7
  import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
@@ -8,14 +9,14 @@ import StatusPage from '../../StatusPage/StatusPage.vue'
8
9
 
9
10
  const themeLocales = {
10
11
  pageTitle: 'Maintenance en cours',
11
- message: 'Lapplication nest pas disponible pour le moment.',
12
+ message: 'L\'application n\'est pas disponible pour le moment.',
12
13
  code: '503',
13
14
  src: '/img/maintenance.svg',
14
15
  }
15
16
 
16
17
  vi.mock('@/utils/theme', () => ({
17
18
  useThemeLocales: () => ({
18
- themeLocales,
19
+ themeLocales: ref(themeLocales),
19
20
  }),
20
21
  }))
21
22
 
@@ -26,6 +26,24 @@ describe('MaintenancePage', () => {
26
26
  expect(statusPage.props('code')).toBeDefined()
27
27
  })
28
28
 
29
+ it('passes a uniqueId prop to StatusPage', () => {
30
+ const wrapper = shallowMount(MaintenancePage)
31
+ const statusPage = wrapper.findComponent(StatusPage)
32
+
33
+ expect(statusPage.props('uniqueId')).toBeDefined()
34
+ })
35
+
36
+ it('passes a custom uniqueId prop to StatusPage', () => {
37
+ const wrapper = shallowMount(MaintenancePage, {
38
+ props: {
39
+ uniqueId: 'custom-id',
40
+ },
41
+ })
42
+ const statusPage = wrapper.findComponent(StatusPage)
43
+
44
+ expect(statusPage.props('uniqueId')).toBe('custom-id')
45
+ })
46
+
29
47
  it('renders default illustration when no slot is provided', () => {
30
48
  const wrapper = shallowMount(MaintenancePage)
31
49
 
@@ -5,8 +5,10 @@ exports[`MaintenancePage > renders correctly 1`] = `
5
5
  btnlink="/"
6
6
  code=""
7
7
  codeerrortext="Code d'erreur : "
8
+ headinglevel="1"
8
9
  hidebtn="true"
9
10
  message="L’application n’est pas disponible pour le moment, veuillez nous excuser pour la gêne occasionnée."
10
11
  pagetitle="Maintenance en cours"
12
+ uniqueid=""
11
13
  ></status-page-stub>
12
14
  `;
@@ -1,7 +1,7 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import NotFoundPage from './NotFoundPage.vue'
3
3
 
4
- const meta = {
4
+ const meta: Meta<typeof NotFoundPage> = {
5
5
  title: 'Templates/NotFoundPage',
6
6
  component: NotFoundPage,
7
7
  parameters: {
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { onMounted, ref } from 'vue'
2
+ import { computed, onMounted, ref } from 'vue'
3
3
  import StatusPage from '../StatusPage/StatusPage.vue'
4
4
  import { locales, SUPPORT_ID_PARAM_NAME, supportIdMessage } from './locales'
5
5
  import type { RouteRecordRaw } from 'vue-router'
@@ -9,16 +9,23 @@
9
9
 
10
10
  const supportId = ref<string | undefined>()
11
11
 
12
- withDefaults(defineProps<{
12
+ interface Props {
13
13
  btnText?: string
14
14
  btnHref?: string
15
15
  btnLink?: RouteRecordRaw | string
16
16
  hideBtn?: boolean
17
- }>(), {
17
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
18
+ src?: string
19
+ uniqueId?: string
20
+ }
21
+ const props = withDefaults(defineProps<Props>(), {
18
22
  btnText: undefined,
19
23
  btnLink: '/',
20
24
  btnHref: undefined,
21
25
  hideBtn: false,
26
+ headingLevel: 1,
27
+ src: undefined,
28
+ uniqueId: undefined,
22
29
  })
23
30
 
24
31
  onMounted(() => {
@@ -31,17 +38,20 @@
31
38
 
32
39
  supportId.value = supportIdParam.trim().match(/.{1,4}/g)?.join(' ')
33
40
  })
41
+ const src = computed(() => props.src || themeLocales.value.src)
34
42
  </script>
35
43
 
36
44
  <template>
37
45
  <StatusPage
38
46
  :page-title="themeLocales.pageTitle"
47
+ :heading-level="headingLevel"
39
48
  :message="themeLocales.message"
40
49
  :code="themeLocales.code"
41
50
  :btn-text="btnText"
42
51
  :btn-href="btnHref"
43
52
  :btn-link="btnLink"
44
53
  :hide-btn="hideBtn"
54
+ :unique-id="uniqueId"
45
55
  >
46
56
  <template
47
57
  v-if="supportId"
@@ -56,12 +66,13 @@
56
66
  </template>
57
67
 
58
68
  <template
59
- v-if="themeLocales.src || $slots.illustration"
69
+ v-if="src || $slots.illustration"
60
70
  #illustration
61
71
  >
62
72
  <slot name="illustration">
63
73
  <img
64
- :src="themeLocales.src"
74
+ v-if="src"
75
+ :src="src"
65
76
  alt=""
66
77
  aria-hidden="true"
67
78
  >
@@ -29,6 +29,8 @@ import {
29
29
  <li><strong>Titre de page</strong> : rendu dans une balise <code>h1</code> via <code>StatusPage</code>, sa valeur provient des locales du thème via <code>useThemeLocales</code></li>
30
30
  <li><strong>Code d'erreur</strong> : le code <em>404</em> 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>
31
31
  <li><strong>Identifiant de support</strong> : si le paramètre <code>support_id</code> est présent dans l'URL, il est affiché dans le slot <code>#additional-content</code> avec un formatage espacé par groupes de 4 caractères pour faciliter la lecture</li>
32
+ <li><strong>Prop <code>uniqueId</code></strong> : permet de définir un identifiant unique sur le conteneur, facilitant le ciblage par <code>aria-labelledby</code> ou <code>aria-describedby</code> depuis d'autres éléments</li>
33
+ <li><strong>Prop <code>role</code></strong> : aucune prop <code>role</code> n'est exposée sur ce composant — la <code>NotFoundPage</code> est une page statique d'information, sa structure sémantique (<code>h1</code>, paragraphe) suffit à en exprimer le rôle sans qu'un attribut ARIA <code>role</code> supplémentaire soit nécessaire ; l'exposer risquerait d'introduire de mauvaises utilisations pouvant nuire à l'expérience des utilisateurs de lecteurs d'écran</li>
32
34
  </ul>
33
35
  </CriteriaCard>
34
36
 
@@ -192,4 +192,53 @@ describe('NotFoundPage – accessibility (axe)', () => {
192
192
  ignoreRules: ['region'],
193
193
  })
194
194
  })
195
+
196
+ it('has no obvious axe violations with a custom uniqueId', async () => {
197
+ const wrapper = mount(NotFoundPage, {
198
+ props: {
199
+ uniqueId: 'custom-not-found-id',
200
+ },
201
+ })
202
+ await flushPromises()
203
+ await wrapper.vm.$nextTick()
204
+
205
+ const results = await axe(wrapper.element as HTMLElement)
206
+ assertNoA11yViolations(results, 'NotFoundPage – custom uniqueId', {
207
+ ignoreRules: ['region'],
208
+ })
209
+ })
210
+
211
+ it('has a single h1 heading', async () => {
212
+ const wrapper = mount(NotFoundPage)
213
+ await flushPromises()
214
+ await wrapper.vm.$nextTick()
215
+
216
+ const headings = wrapper.findAll('h1')
217
+ if (headings.length !== 1) {
218
+ throw new Error(`Expected exactly 1 h1 heading, found ${headings.length}`)
219
+ }
220
+
221
+ const results = await axe(wrapper.element as HTMLElement)
222
+ assertNoA11yViolations(results, 'NotFoundPage – single h1', {
223
+ ignoreRules: ['region'],
224
+ })
225
+ })
226
+
227
+ it('has no obvious axe violations with all props provided', async () => {
228
+ const wrapper = mount(NotFoundPage, {
229
+ props: {
230
+ uniqueId: 'full-props-id',
231
+ btnText: 'Retour à l\'accueil',
232
+ btnHref: 'https://example.com',
233
+ hideBtn: false,
234
+ },
235
+ })
236
+ await flushPromises()
237
+ await wrapper.vm.$nextTick()
238
+
239
+ const results = await axe(wrapper.element as HTMLElement)
240
+ assertNoA11yViolations(results, 'NotFoundPage – all props', {
241
+ ignoreRules: ['region'],
242
+ })
243
+ })
195
244
  })
@@ -1,16 +1,17 @@
1
1
  import { describe, it, expect, vi, beforeEach } from 'vitest'
2
+ import { ref } from 'vue'
2
3
  import { mount, flushPromises } from '@vue/test-utils'
3
4
  import NotFoundPage from '../NotFoundPage.vue'
4
5
  import StatusPage from '../../StatusPage/StatusPage.vue'
5
6
 
6
7
  vi.mock('@/utils/theme', () => ({
7
8
  useThemeLocales: () => ({
8
- themeLocales: {
9
+ themeLocales: ref({
9
10
  code: '404',
10
11
  pageTitle: 'Page non trouvée',
11
12
  message: 'Cette page n\'existe pas ou a été déplacée.',
12
13
  src: '/src/components/NotFoundPage/assets/not-found.svg',
13
- },
14
+ }),
14
15
  }),
15
16
  }))
16
17
 
@@ -113,4 +114,26 @@ describe('NotFoundPage', () => {
113
114
  expect(img.exists()).toBe(true)
114
115
  expect(img.attributes('src')).toBe('/custom.svg')
115
116
  })
117
+
118
+ it('passes a uniqueId prop to StatusPage', async () => {
119
+ const wrapper = mount(NotFoundPage)
120
+ await flushPromises()
121
+ await wrapper.vm.$nextTick()
122
+
123
+ const statusPage = wrapper.findComponent(StatusPage)
124
+ expect(statusPage.props('uniqueId')).toBeDefined()
125
+ })
126
+
127
+ it('passes a custom uniqueId prop to StatusPage', async () => {
128
+ const wrapper = mount(NotFoundPage, {
129
+ props: {
130
+ uniqueId: 'custom-id',
131
+ },
132
+ })
133
+ await flushPromises()
134
+ await wrapper.vm.$nextTick()
135
+
136
+ const statusPage = wrapper.findComponent(StatusPage)
137
+ expect(statusPage.props('uniqueId')).toBe('custom-id')
138
+ })
116
139
  })
@@ -107,6 +107,7 @@ exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
107
107
  font-weight-bold
108
108
  mb-2
109
109
  mb-4
110
+ sy-heading
110
111
  text-h5
111
112
  ">
112
113
  Page non trouvée
@@ -254,6 +255,7 @@ exports[`NotFoundPage > renders correctly 1`] = `
254
255
  font-weight-bold
255
256
  mb-2
256
257
  mb-4
258
+ sy-heading
257
259
  text-h5
258
260
  ">
259
261
  Page non trouvée