@cnamts/synapse 1.0.20 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/dist/{DateFilter-XURUmpMl.js → DateFilter-B5n-ZkLi.js} +29 -24
  2. package/dist/{NumberFilter-BZc0O8wV.js → NumberFilter-CtiZ9uj8.js} +1 -1
  3. package/dist/{PeriodFilter-ZNdXcl3p.js → PeriodFilter-DzqiMb-b.js} +1 -1
  4. package/dist/{SelectFilter-DshYU5OK.js → SelectFilter-BOYlF7rX.js} +1 -1
  5. package/dist/{TextFilter-D_c5dRPl.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 +162 -0
  45. package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
  46. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
  47. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1668 -5
  48. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  49. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  50. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1609 -4
  51. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1629 -1365
  52. package/dist/components/DataList/DataList.d.ts +1 -1
  53. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3868 -3123
  54. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1946 -1562
  55. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +833 -687
  56. package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
  57. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  58. package/dist/components/DownloadBtn/config.d.ts +1 -1
  59. package/dist/components/ErrorPage/ErrorPage.d.ts +5 -12
  60. package/dist/components/ErrorPage/locales.d.ts +18 -3
  61. package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
  62. package/dist/components/FileUpload/FileUpload.d.ts +6 -4
  63. package/dist/components/FileUpload/locales.d.ts +1 -0
  64. package/dist/components/FilterSideBar/FilterSideBar.d.ts +418 -366
  65. package/dist/components/FooterBar/FooterBar.d.ts +13 -1
  66. package/dist/components/FooterBar/locales.d.ts +1 -0
  67. package/dist/components/FooterBar/types.d.ts +1 -0
  68. package/dist/components/HeaderBar/HeaderBar.d.ts +1 -0
  69. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -0
  70. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +3 -6
  71. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +1031 -643
  72. package/dist/components/LangBtn/LangBtn.d.ts +277 -239
  73. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +4 -0
  74. package/dist/components/MaintenancePage/MaintenancePage.d.ts +16 -1
  75. package/dist/components/MaintenancePage/locales.d.ts +18 -2
  76. package/dist/components/NirField/NirField.d.ts +1659 -1371
  77. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  78. package/dist/components/NotFoundPage/locales.d.ts +20 -4
  79. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  80. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  81. package/dist/components/PeriodField/PeriodField.d.ts +7712 -6216
  82. package/dist/components/PhoneField/PhoneField.d.ts +831 -687
  83. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  84. package/dist/components/StatusPage/StatusPage.d.ts +50 -0
  85. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  86. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  87. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +10 -1
  88. package/dist/components/SyHeading/SyHeading.d.ts +20 -0
  89. package/dist/components/SyTextArea/SyTextArea.d.ts +476 -420
  90. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  91. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  92. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  93. package/dist/components/Tables/common/SyTablePagination.d.ts +269 -170
  94. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  95. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  96. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  97. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  98. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  99. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  100. package/dist/components/Tables/common/types.d.ts +2 -0
  101. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +35 -1212
  102. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  103. package/dist/components/index.d.ts +4 -0
  104. package/dist/components/types.d.ts +2 -0
  105. package/dist/design-system-v3.js +131 -127
  106. package/dist/design-system-v3.umd.cjs +274 -274
  107. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  108. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  109. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  110. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  111. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  112. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  113. package/dist/main-CEl4J8_T.js +37241 -0
  114. package/dist/style.css +1 -1
  115. package/dist/utils/theme/index.d.ts +6 -0
  116. package/dist/vuetifyConfig.d.ts +14 -14
  117. package/package.json +16 -7
  118. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  119. package/src/assets/apTokens.scss +53 -17
  120. package/src/assets/overrides/_icons.scss +12 -2
  121. package/src/assets/overrides/_tooltips.scss +5 -6
  122. package/src/assets/overrides/_typography.scss +17 -2
  123. package/src/assets/overrides/_utilities.scss +49 -3
  124. package/src/assets/tokens.scss +53 -17
  125. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  126. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  127. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  128. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  129. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  130. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  131. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  132. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  133. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  134. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  135. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  136. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  137. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  138. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  139. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  140. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  141. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  142. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  143. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  144. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  145. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  146. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  147. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  148. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  149. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  150. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  151. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  152. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  153. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  154. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  155. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  156. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  157. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  158. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  159. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  160. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  161. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  162. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  163. package/src/components/BackBtn/BackBtn.vue +1 -1
  164. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +36 -18
  165. package/src/components/ChipList/ChipList.vue +4 -2
  166. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  167. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  168. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  169. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  170. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  171. package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
  172. package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +67 -11
  173. package/src/components/CookieBanner/CookieBanner.stories.ts +21 -20
  174. package/src/components/CookieBanner/CookieBanner.vue +35 -10
  175. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +76 -11
  176. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +56 -4
  177. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  178. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  179. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  180. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  181. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  182. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  183. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  184. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  185. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  186. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  187. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  188. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  189. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  190. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  191. package/src/components/Customs/Selects/SySelect/SySelect.vue +17 -0
  192. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  193. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  194. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  195. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
  196. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
  197. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
  198. package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
  199. package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
  200. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
  201. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
  202. package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
  203. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +17 -28
  204. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +1 -1
  205. package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
  206. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  207. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  208. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  209. package/src/components/Customs/SyPagination/SyPagination.vue +20 -5
  210. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  211. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +38 -12
  212. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  213. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
  214. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  215. package/src/components/Customs/SyTextField/SyTextField.vue +39 -5
  216. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  217. package/src/components/DatePicker/CalendarMode/DatePicker.vue +55 -19
  218. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  219. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +44 -3
  220. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  221. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +9 -1
  222. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
  223. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
  224. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  225. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  226. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  227. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  228. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  229. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
  230. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
  231. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
  232. package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
  233. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
  234. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
  235. package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
  236. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  237. package/src/components/DialogBox/DialogBox.vue +12 -5
  238. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  239. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  240. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  241. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  242. package/src/components/DownloadBtn/config.ts +1 -1
  243. package/src/components/ErrorPage/ErrorPage.mdx +6 -16
  244. package/src/components/ErrorPage/ErrorPage.stories.ts +90 -126
  245. package/src/components/ErrorPage/ErrorPage.vue +44 -125
  246. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +83 -6
  247. package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
  248. package/src/components/ErrorPage/locales.ts +21 -3
  249. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
  250. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
  251. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +10 -266
  252. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  253. package/src/components/FileList/FileList.stories.ts +4 -0
  254. package/src/components/FileList/UploadItem/UploadItem.vue +8 -3
  255. package/src/components/FileList/UploadItem/locales.ts +10 -0
  256. package/src/components/FileList/accessibilite/Accessibility.mdx +55 -7
  257. package/src/components/FileUpload/FileUpload.vue +65 -37
  258. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  259. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  260. package/src/components/FileUpload/locales.ts +1 -0
  261. package/src/components/FileUpload/tests/FileUpload.spec.ts +14 -14
  262. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  263. package/src/components/FilterInline/FilterInline.vue +1 -0
  264. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  265. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  266. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  267. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  268. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  269. package/src/components/FooterBar/FooterBar.stories.ts +316 -48
  270. package/src/components/FooterBar/FooterBar.vue +67 -9
  271. package/src/components/FooterBar/config.ts +2 -2
  272. package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
  273. package/src/components/FooterBar/locales.ts +1 -0
  274. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  275. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  276. package/src/components/FooterBar/types.d.ts +1 -0
  277. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  278. package/src/components/HeaderBar/HeaderBar.vue +4 -0
  279. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +7 -2
  280. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  281. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  282. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  283. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  284. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  285. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -0
  286. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  287. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  288. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  289. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  290. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  291. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  292. package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
  293. package/src/components/MaintenancePage/MaintenancePage.vue +42 -7
  294. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +63 -6
  295. package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
  296. package/src/components/MaintenancePage/locales.ts +24 -3
  297. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +76 -3
  298. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +60 -2
  299. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +5 -2
  300. package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
  301. package/src/components/NotFoundPage/NotFoundPage.stories.ts +4 -4
  302. package/src/components/NotFoundPage/NotFoundPage.vue +30 -14
  303. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +80 -6
  304. package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
  305. package/src/components/NotFoundPage/locales.ts +24 -4
  306. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +217 -4
  307. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +123 -12
  308. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -2
  309. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  310. package/src/components/NotificationBar/accessibilite/Accessibility.mdx +68 -8
  311. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  312. package/src/components/PageContainer/PageContainer.vue +4 -2
  313. package/src/components/PageContainer/accessibilite/Accessibility.mdx +67 -0
  314. package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
  315. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  316. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  317. package/src/components/PeriodField/PeriodField.vue +4 -0
  318. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  319. package/src/components/PhoneField/PhoneField.stories.ts +115 -69
  320. package/src/components/PhoneField/PhoneField.vue +152 -83
  321. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  322. package/src/components/PhoneField/indicatifs.ts +2 -2
  323. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +22 -9
  324. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  325. package/src/components/SearchListField/SearchListField.vue +1 -1
  326. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  327. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  328. package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
  329. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
  330. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
  331. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +10 -2
  332. package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +63 -11
  333. package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
  334. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
  335. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
  336. package/src/components/StatusPage/StatusPage.mdx +31 -0
  337. package/src/components/StatusPage/StatusPage.stories.ts +236 -0
  338. package/src/components/StatusPage/StatusPage.vue +167 -0
  339. package/src/components/StatusPage/accessibilite/Accessibility.mdx +100 -0
  340. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +30 -0
  341. package/src/components/StatusPage/tests/StatusPage.spec.ts +53 -0
  342. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +272 -0
  343. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  344. package/src/components/SubHeader/SubHeader.vue +6 -3
  345. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  346. package/src/components/SyAlert/SyAlert.vue +21 -20
  347. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  348. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  349. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  350. package/src/components/SyHeading/SyHeading.vue +18 -0
  351. package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
  352. package/src/components/TableToolbar/TableToolbar.vue +1 -1
  353. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -35
  354. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  355. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  356. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  357. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  358. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  359. package/src/components/Tables/common/types.ts +3 -0
  360. package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
  361. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +118 -14
  362. package/src/components/UploadWorkflow/UploadWorkflow.vue +59 -31
  363. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  364. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  365. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +37 -7
  366. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +139 -112
  367. package/src/components/UploadWorkflow/useFileList.ts +7 -0
  368. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  369. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  370. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  371. package/src/components/index.ts +4 -0
  372. package/src/components/types.ts +4 -0
  373. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  374. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  375. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  376. package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
  377. package/src/composables/rules/useFieldValidation.ts +24 -9
  378. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  379. package/src/composables/useFilterable/useFilterable.ts +7 -1
  380. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  381. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  382. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  383. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  384. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  385. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  386. package/src/directives/rgaaSvgFix.ts +2 -7
  387. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  388. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  389. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  390. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  392. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
  393. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  394. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  395. package/src/stories/DesignTokens/Colors.mdx +8 -59
  396. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  397. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  398. package/src/utils/theme/index.ts +19 -0
  399. package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
  400. package/dist/components/MaintenancePage/index.d.ts +0 -2
  401. package/dist/main-CuI6xaPq.js +0 -36396
  402. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
  403. package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
  404. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
  405. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
  406. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
  407. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
  408. package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
  409. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
  410. package/src/components/MaintenancePage/index.ts +0 -3
  411. package/src/components/PageContainer/Accessibilite/Accessibility.mdx +0 -53
  412. package/src/components/PageContainer/Accessibilite/AccessibilityGuide.mdx +0 -0
  413. package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
  414. /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
@@ -1,6 +1,26 @@
1
+ import imgUrlAp from './assets/not-found-ap.svg'
2
+ import imgUrlCnam from './assets/not-found-cnam.svg'
3
+
4
+ export const SUPPORT_ID_PARAM_NAME = 'support_id'
5
+ export const supportIdMessage = 'Votre identifiant de support est'
6
+
1
7
  export const locales = {
2
- code: '404',
3
- pageTitle: 'Page non trouvée',
4
- message: 'Cette page n’existe pas ou a été déplacée.',
5
- supportIdMessage: 'Votre identifiant de support est',
8
+ default: {
9
+ code: '404',
10
+ pageTitle: 'Page non trouvée',
11
+ message: 'Cette page n’existe pas ou a été déplacée.',
12
+ src: imgUrlCnam,
13
+ },
14
+ cnam: {
15
+ code: '404',
16
+ pageTitle: 'Page non trouvée',
17
+ message: 'Cette page n’existe pas ou a été déplacée.',
18
+ src: imgUrlCnam,
19
+ },
20
+ ap: {
21
+ code: '404',
22
+ pageTitle: 'Page non trouvée ou inexistante - Erreur 404',
23
+ message: 'La page que vous essayez d’afficher n’existe plus ou a été déplacée.',
24
+ src: imgUrlAp,
25
+ },
6
26
  }
@@ -1,31 +1,244 @@
1
1
  // @vitest-environment jsdom
2
2
 
3
3
  import { describe, it } from 'vitest'
4
- import { mount } from '@vue/test-utils'
4
+ import { mount, flushPromises } from '@vue/test-utils'
5
5
  import { axe } from 'vitest-axe'
6
6
  import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
7
7
  import NotFoundPage from '../NotFoundPage.vue'
8
8
  import { locales } from '../locales'
9
9
 
10
- // Scénario daccessibilité : page 404 avec code, message et identifiant de support.
10
+ // Scénario d'accessibilité : page 404 avec code, message et identifiant de support.
11
11
 
12
12
  describe('NotFoundPage – accessibility (axe)', () => {
13
+ it('has no obvious axe violations in default state', async () => {
14
+ const wrapper = mount(NotFoundPage)
15
+ await flushPromises()
16
+ await wrapper.vm.$nextTick()
17
+
18
+ const results = await axe(wrapper.element as HTMLElement)
19
+ assertNoA11yViolations(results, 'NotFoundPage – default state', {
20
+ ignoreRules: ['region'],
21
+ })
22
+ })
23
+
13
24
  it('has no obvious axe violations with support ID in URL', async () => {
14
25
  // Simuler une URL contenant un identifiant de support
15
26
  history.replaceState({}, '', `/not-found?support_id=1234567890123456789`)
16
27
 
17
28
  const wrapper = mount(NotFoundPage)
29
+ await flushPromises()
18
30
  await wrapper.vm.$nextTick()
19
31
 
20
- // Sassurer que le contenu principal est bien rendu
32
+ // S'assurer que le contenu principal est bien rendu
21
33
  const text = wrapper.text()
22
- if (!text.includes(locales.code) || !text.includes(locales.message)) {
34
+ if (!text.includes(locales.default.code) || !text.includes(locales.default.message)) {
23
35
  throw new Error('NotFoundPage main content not rendered as expected')
24
36
  }
25
37
 
38
+ // Vérifier que le support ID est affiché avec un formatage espacé
39
+ if (!text.includes('1234 5678 9012 3456 789')) {
40
+ throw new Error('Support ID not formatted correctly')
41
+ }
42
+
26
43
  const results = await axe(wrapper.element as HTMLElement)
27
44
  assertNoA11yViolations(results, 'NotFoundPage – with support ID', {
28
45
  ignoreRules: ['region'],
29
46
  })
30
47
  })
48
+
49
+ it('has no obvious axe violations with custom button text and href', async () => {
50
+ const wrapper = mount(NotFoundPage, {
51
+ props: {
52
+ btnText: 'Retour à l\'accueil',
53
+ btnHref: 'https://example.com',
54
+ },
55
+ })
56
+ await flushPromises()
57
+ await wrapper.vm.$nextTick()
58
+
59
+ const results = await axe(wrapper.element as HTMLElement)
60
+ assertNoA11yViolations(results, 'NotFoundPage – with custom button props', {
61
+ ignoreRules: ['region'],
62
+ })
63
+ })
64
+
65
+ it('has no obvious axe violations when button is hidden', async () => {
66
+ const wrapper = mount(NotFoundPage, {
67
+ props: {
68
+ hideBtn: true,
69
+ },
70
+ })
71
+ await flushPromises()
72
+ await wrapper.vm.$nextTick()
73
+
74
+ const results = await axe(wrapper.element as HTMLElement)
75
+ assertNoA11yViolations(results, 'NotFoundPage – button hidden', {
76
+ ignoreRules: ['region'],
77
+ })
78
+ })
79
+
80
+ it('has no obvious axe violations with router link navigation', async () => {
81
+ const wrapper = mount(NotFoundPage, {
82
+ props: {
83
+ btnText: 'Retour',
84
+ btnLink: '/home',
85
+ },
86
+ global: {
87
+ stubs: {
88
+ RouterLink: true,
89
+ },
90
+ },
91
+ })
92
+ await flushPromises()
93
+ await wrapper.vm.$nextTick()
94
+
95
+ const results = await axe(wrapper.element as HTMLElement)
96
+ assertNoA11yViolations(results, 'NotFoundPage – with router link', {
97
+ ignoreRules: ['region'],
98
+ })
99
+ })
100
+
101
+ it('has proper semantic structure for 404 error page', async () => {
102
+ const wrapper = mount(NotFoundPage)
103
+ await flushPromises()
104
+ await wrapper.vm.$nextTick()
105
+
106
+ const text = wrapper.text()
107
+ // Vérifier que le code 404 est présent
108
+ if (!text.includes('404')) {
109
+ throw new Error('404 code not found in page content')
110
+ }
111
+
112
+ // Vérifier que le message est présent
113
+ if (!text.includes('Page non trouvée')) {
114
+ throw new Error('Page title not found in page content')
115
+ }
116
+
117
+ const results = await axe(wrapper.element as HTMLElement)
118
+ assertNoA11yViolations(results, 'NotFoundPage – semantic structure', {
119
+ ignoreRules: ['region'],
120
+ })
121
+ })
122
+
123
+ it('has no obvious axe violations with illustration slot', async () => {
124
+ const wrapper = mount(NotFoundPage, {
125
+ slots: {
126
+ illustration: '<img src="/custom-404.svg" alt="" aria-hidden="true" />',
127
+ },
128
+ })
129
+ await flushPromises()
130
+ await wrapper.vm.$nextTick()
131
+
132
+ const img = wrapper.find('img')
133
+ if (img.exists() && img.attributes('alt') !== '') {
134
+ throw new Error('Illustration image should have empty alt for decorative purpose')
135
+ }
136
+
137
+ const results = await axe(wrapper.element as HTMLElement)
138
+ assertNoA11yViolations(results, 'NotFoundPage – custom illustration', {
139
+ ignoreRules: ['region'],
140
+ })
141
+ })
142
+
143
+ it('has correct ARIA attributes on illustration image', async () => {
144
+ const wrapper = mount(NotFoundPage)
145
+ await flushPromises()
146
+ await wrapper.vm.$nextTick()
147
+
148
+ const img = wrapper.find('img')
149
+ if (img.exists()) {
150
+ // L'image illustrative doit être marquée comme décoration
151
+ if (img.attributes('aria-hidden') !== 'true') {
152
+ throw new Error('Illustration should have aria-hidden="true"')
153
+ }
154
+
155
+ // L'alt doit être vide pour les images décoratives
156
+ if (img.attributes('alt') !== '') {
157
+ throw new Error('Decorative image should have empty alt text')
158
+ }
159
+ }
160
+
161
+ const results = await axe(wrapper.element as HTMLElement)
162
+ assertNoA11yViolations(results, 'NotFoundPage – ARIA attributes on image', {
163
+ ignoreRules: ['region'],
164
+ })
165
+ })
166
+
167
+ it('has no obvious axe violations with support ID containing spaces already', async () => {
168
+ // Tester avec un ID qui contient déjà des espacements
169
+ history.replaceState({}, '', `/not-found?support_id= ABCD EFGH IJKL `)
170
+
171
+ const wrapper = mount(NotFoundPage)
172
+ await flushPromises()
173
+ await wrapper.vm.$nextTick()
174
+
175
+ const results = await axe(wrapper.element as HTMLElement)
176
+ assertNoA11yViolations(results, 'NotFoundPage – support ID with spaces', {
177
+ ignoreRules: ['region'],
178
+ })
179
+ })
180
+
181
+ it('has no obvious axe violations with long support ID', async () => {
182
+ // Tester avec un ID très long
183
+ const longId = '12345678901234567890123456789012'
184
+ history.replaceState({}, '', `/not-found?support_id=${longId}`)
185
+
186
+ const wrapper = mount(NotFoundPage)
187
+ await flushPromises()
188
+ await wrapper.vm.$nextTick()
189
+
190
+ const results = await axe(wrapper.element as HTMLElement)
191
+ assertNoA11yViolations(results, 'NotFoundPage – long support ID', {
192
+ ignoreRules: ['region'],
193
+ })
194
+ })
195
+
196
+ it('has no obvious axe violations with a custom uniqueId', async () => {
197
+ const wrapper = mount(NotFoundPage, {
198
+ props: {
199
+ uniqueId: 'custom-not-found-id',
200
+ },
201
+ })
202
+ await flushPromises()
203
+ await wrapper.vm.$nextTick()
204
+
205
+ const results = await axe(wrapper.element as HTMLElement)
206
+ assertNoA11yViolations(results, 'NotFoundPage – custom uniqueId', {
207
+ ignoreRules: ['region'],
208
+ })
209
+ })
210
+
211
+ it('has a single h1 heading', async () => {
212
+ const wrapper = mount(NotFoundPage)
213
+ await flushPromises()
214
+ await wrapper.vm.$nextTick()
215
+
216
+ const headings = wrapper.findAll('h1')
217
+ if (headings.length !== 1) {
218
+ throw new Error(`Expected exactly 1 h1 heading, found ${headings.length}`)
219
+ }
220
+
221
+ const results = await axe(wrapper.element as HTMLElement)
222
+ assertNoA11yViolations(results, 'NotFoundPage – single h1', {
223
+ ignoreRules: ['region'],
224
+ })
225
+ })
226
+
227
+ it('has no obvious axe violations with all props provided', async () => {
228
+ const wrapper = mount(NotFoundPage, {
229
+ props: {
230
+ uniqueId: 'full-props-id',
231
+ btnText: 'Retour à l\'accueil',
232
+ btnHref: 'https://example.com',
233
+ hideBtn: false,
234
+ },
235
+ })
236
+ await flushPromises()
237
+ await wrapper.vm.$nextTick()
238
+
239
+ const results = await axe(wrapper.element as HTMLElement)
240
+ assertNoA11yViolations(results, 'NotFoundPage – all props', {
241
+ ignoreRules: ['region'],
242
+ })
243
+ })
31
244
  })
@@ -1,28 +1,139 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { mount } from '@vue/test-utils'
3
- import { locales } from '../locales'
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest'
2
+ import { ref } from 'vue'
3
+ import { mount, flushPromises } from '@vue/test-utils'
4
4
  import NotFoundPage from '../NotFoundPage.vue'
5
+ import StatusPage from '../../StatusPage/StatusPage.vue'
6
+
7
+ vi.mock('@/utils/theme', () => ({
8
+ useThemeLocales: () => ({
9
+ themeLocales: ref({
10
+ code: '404',
11
+ pageTitle: 'Page non trouvée',
12
+ message: 'Cette page n\'existe pas ou a été déplacée.',
13
+ src: '/src/components/NotFoundPage/assets/not-found.svg',
14
+ }),
15
+ }),
16
+ }))
5
17
 
6
18
  describe('NotFoundPage', () => {
7
- it('renders correctly', () => {
19
+ beforeEach(() => {
20
+ history.replaceState({}, '', '/')
21
+ })
22
+
23
+ it('renders correctly', async () => {
8
24
  const wrapper = mount(NotFoundPage)
25
+ await flushPromises()
26
+ await wrapper.vm.$nextTick()
9
27
 
10
- expect(wrapper.text()).toContain(locales.code)
11
- expect(wrapper.text()).toContain(locales.message)
28
+ expect(wrapper.findComponent(StatusPage).exists()).toBe(true)
29
+ expect(wrapper.text()).toContain('404')
30
+ expect(wrapper.text()).toContain('Page non trouvée')
12
31
  expect(wrapper.html()).toMatchSnapshot()
13
32
  })
14
33
 
15
34
  it('display the support ID if provided in the url', async () => {
16
- history.replaceState(
17
- {},
18
- '',
19
- '/not-found?support_id=1234567890123456789',
20
- )
21
- const wrapper = mount(NotFoundPage)
35
+ history.replaceState({}, '', '/not-found?support_id=1234567890123456789')
22
36
 
37
+ const wrapper = mount(NotFoundPage)
38
+ await flushPromises()
23
39
  await wrapper.vm.$nextTick()
24
40
 
41
+ expect(wrapper.text()).toContain('Votre identifiant de support est')
25
42
  expect(wrapper.text()).toContain('1234 5678 9012 3456 789')
26
43
  expect(wrapper.html()).toMatchSnapshot()
27
44
  })
45
+
46
+ it('does not display support ID section when no support_id in url', async () => {
47
+ const wrapper = mount(NotFoundPage)
48
+ await flushPromises()
49
+ await wrapper.vm.$nextTick()
50
+
51
+ expect(wrapper.text()).not.toContain('Votre identifiant de support est')
52
+ })
53
+
54
+ it('renders StatusPage with correct props', async () => {
55
+ const wrapper = mount(NotFoundPage)
56
+ await flushPromises()
57
+ await wrapper.vm.$nextTick()
58
+
59
+ const statusPage = wrapper.findComponent(StatusPage)
60
+ expect(statusPage.props('code')).toBe('404')
61
+ expect(statusPage.props('pageTitle')).toBe('Page non trouvée')
62
+ expect(statusPage.props('message')).toBe('Cette page n\'existe pas ou a été déplacée.')
63
+ })
64
+
65
+ it('renders with custom button props', async () => {
66
+ const wrapper = mount(NotFoundPage, {
67
+ props: {
68
+ btnText: 'Retour à l\'accueil',
69
+ btnHref: '/',
70
+ },
71
+ })
72
+ await flushPromises()
73
+ await wrapper.vm.$nextTick()
74
+
75
+ const statusPage = wrapper.findComponent(StatusPage)
76
+ expect(statusPage.props('btnText')).toBe('Retour à l\'accueil')
77
+ expect(statusPage.props('btnHref')).toBe('/')
78
+ })
79
+
80
+ it('hides button when hideBtn prop is true', async () => {
81
+ const wrapper = mount(NotFoundPage, {
82
+ props: {
83
+ hideBtn: true,
84
+ },
85
+ })
86
+ await flushPromises()
87
+ await wrapper.vm.$nextTick()
88
+
89
+ expect(wrapper.findComponent(StatusPage).props('hideBtn')).toBe(true)
90
+ })
91
+
92
+ it('renders illustration with correct accessibility attributes', async () => {
93
+ const wrapper = mount(NotFoundPage)
94
+ await flushPromises()
95
+ await wrapper.vm.$nextTick()
96
+
97
+ const img = wrapper.find('img')
98
+ expect(img.exists()).toBe(true)
99
+ expect(img.attributes('src')).toBe('/src/components/NotFoundPage/assets/not-found.svg')
100
+ expect(img.attributes('alt')).toBe('')
101
+ expect(img.attributes('aria-hidden')).toBe('true')
102
+ })
103
+
104
+ it('renders custom illustration slot', async () => {
105
+ const wrapper = mount(NotFoundPage, {
106
+ slots: {
107
+ illustration: '<img src="/custom.svg" alt="" aria-hidden="true" />',
108
+ },
109
+ })
110
+ await flushPromises()
111
+ await wrapper.vm.$nextTick()
112
+
113
+ const img = wrapper.find('img')
114
+ expect(img.exists()).toBe(true)
115
+ expect(img.attributes('src')).toBe('/custom.svg')
116
+ })
117
+
118
+ it('passes a uniqueId prop to StatusPage', async () => {
119
+ const wrapper = mount(NotFoundPage)
120
+ await flushPromises()
121
+ await wrapper.vm.$nextTick()
122
+
123
+ const statusPage = wrapper.findComponent(StatusPage)
124
+ expect(statusPage.props('uniqueId')).toBeDefined()
125
+ })
126
+
127
+ it('passes a custom uniqueId prop to StatusPage', async () => {
128
+ const wrapper = mount(NotFoundPage, {
129
+ props: {
130
+ uniqueId: 'custom-id',
131
+ },
132
+ })
133
+ await flushPromises()
134
+ await wrapper.vm.$nextTick()
135
+
136
+ const statusPage = wrapper.findComponent(StatusPage)
137
+ expect(statusPage.props('uniqueId')).toBe('custom-id')
138
+ })
28
139
  })
@@ -107,13 +107,14 @@ exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
107
107
  font-weight-bold
108
108
  mb-2
109
109
  mb-4
110
+ sy-heading
110
111
  text-h5
111
112
  ">
112
113
  Page non trouvée
113
114
  </h1>
114
115
  <p>
115
116
  <span>
116
- Cette page nexiste pas ou a été déplacée.
117
+ Cette page n'existe pas ou a été déplacée.
117
118
  </span>
118
119
  </p>
119
120
  <p class="mt-4">
@@ -254,13 +255,14 @@ exports[`NotFoundPage > renders correctly 1`] = `
254
255
  font-weight-bold
255
256
  mb-2
256
257
  mb-4
258
+ sy-heading
257
259
  text-h5
258
260
  ">
259
261
  Page non trouvée
260
262
  </h1>
261
263
  <p>
262
264
  <span>
263
- Cette page nexiste pas ou a été déplacée.
265
+ Cette page n'existe pas ou a été déplacée.
264
266
  </span>
265
267
  </p>
266
268
  <!-- v-if -->
@@ -5,8 +5,8 @@ import * as NotificationBarStories from './NotificationBar.stories';
5
5
  <Meta of={NotificationBarStories} />
6
6
 
7
7
  <div className="header">
8
- <h1>Accessibilité du composant SyIcon</h1>
9
- <p>Le composant `SyIcon` est un wrapper autour du composant `v-icon` de Vuetify qui ajoute une gestion automatique de l'accessibilité selon les normes RGAA.</p>
8
+ <h1>Accessibilité du composant NotificationBar </h1>
9
+ <p>Le composant `NotificationBar` est un wrapper autour du composant `v-icon` de Vuetify qui ajoute une gestion automatique de l'accessibilité selon les normes RGAA.</p>
10
10
  </div>
11
11
 
12
12
  ##### Les NotificationsBar servent à notifier l’utilisateur soit d’un retour d’action.
@@ -1,15 +1,75 @@
1
- import { Meta, Story } from '@storybook/addon-docs';
1
+ import { Meta, Primary } from '@storybook/blocks';
2
2
  import * as NotificationBarStories from '../NotificationBar.stories.ts';
3
- import '@/stories/styles/shared.css';
3
+ import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
4
+ import {
5
+ AccessibilityGuideLayout,
6
+ CriteriaSection,
7
+ CriteriaCard,
8
+ DemoSection,
9
+ BestPracticesSection,
10
+ ResourcesSection,
11
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
4
12
 
5
13
  <Meta of={NotificationBarStories} />
6
14
 
7
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- </div>
10
15
 
11
-
12
- <div class="mt-2">
13
- <p>Rapport d’audit manuel : <a href="/audits/NotificationBar.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
16
+ <AccessibilityGuideLayout
17
+ componentName="NotificationBar"
18
+ iconSrc={AccessibilityIcon}
19
+ >
20
+ <div class="mt-8">
21
+ <p>Rapport d’audit manuel : <a href="/audits/NotificationBar.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
14
22
  <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/4029" target="_blank" style={{color:'#0C41BD'}}>issue #4029</a>)</p>
15
23
  </div>
24
+ <CriteriaSection>
25
+ <CriteriaCard icon="🔔" title="Annonce et rôles adaptés">
26
+ <ul>
27
+ <li><strong>Rôle dynamique</strong> : <code>role="status"</code> pour les notifications neutres et <code>role="alert"</code> pour les erreurs afin d’informer immédiatement les lecteurs d’écran.</li>
28
+ <li><strong>Icônes décoratives</strong> : les pictogrammes sont marqués comme décoratifs pour ne pas être annoncés inutilement.</li>
29
+ </ul>
30
+ </CriteriaCard>
31
+
32
+ <CriteriaCard icon="⌨️" title="Navigation clavier complète">
33
+ <ul>
34
+ <li><strong>Fermeture clavier</strong> : le bouton « Fermer » est focalisable, activable au clavier et accessible avec <kbd>Échap</kbd>.</li>
35
+ <li><strong>Focus visible</strong> : styles d’outline renforcés sur le bouton de fermeture pour chaque état de contraste.</li>
36
+ </ul>
37
+ </CriteriaCard>
38
+
39
+ <CriteriaCard icon="🕒" title="Temps de lecture maîtrisé">
40
+ <ul>
41
+ <li><strong>Pas d’expiration forcée</strong> : par défaut <code>timeout=-1</code> pour laisser le temps de lecture ; la temporisation reste configurable.</li>
42
+ <li><strong>File ou liste</strong> : <code>show-all</code> permet d’afficher toutes les notifications simultanément pour éviter la perte d’information.</li>
43
+ </ul>
44
+ </CriteriaCard>
45
+
46
+ <CriteriaCard icon="🖼️" title="Lisibilité et contraste">
47
+ <ul>
48
+ <li><strong>Contrastes définis</strong> : couleurs d’arrière‑plan et de texte prévues pour chaque type (info, success, warning, error).</li>
49
+ <li><strong>Adaptation mobile</strong> : réorganisation verticale automatique lorsque le message est long sur petits écrans.</li>
50
+ </ul>
51
+ </CriteriaCard>
52
+ </CriteriaSection>
53
+
54
+ <DemoSection componentName="NotificationBar">
55
+ <Primary />
56
+ </DemoSection>
57
+
58
+ <BestPracticesSection>
59
+ <ul>
60
+ <li>Privilégiez l’option <code>timeout=-1</code> pour laisser le temps de lecture, surtout pour les messages critiques.</li>
61
+ <li>Utilisez <code>type="error"</code> uniquement pour les situations bloquantes afin d’éviter la surcharge d’alertes.</li>
62
+ <li>Ajoutez un libellé explicite au bouton d’action (slot <code>action</code>) et assurez-vous qu’il soit atteignable au clavier.</li>
63
+ <li>Évitez d’empiler trop de notifications : activez <code>show-all</code> en cas de rafale pour limiter la perte contextuelle.</li>
64
+ <li>Ne déplacez pas le focus automatiquement sur la notification : laissez l’utilisateur garder son contexte d’interaction.</li>
65
+ </ul>
66
+ </BestPracticesSection>
67
+
68
+ <ResourcesSection>
69
+ <ul>
70
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/alert/" target="_blank" rel="noopener noreferrer">WAI-ARIA Authoring Practices – Alert</a></li>
71
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/status/" target="_blank" rel="noopener noreferrer">WAI-ARIA Authoring Practices – Status</a></li>
72
+ <li><a href="https://www.w3.org/WAI/WCAG21/quickref/#timing-adjustable" target="_blank" rel="noopener noreferrer">WCAG 2.1 – Timing Adjustable</a></li>
73
+ </ul>
74
+ </ResourcesSection>
75
+ </AccessibilityGuideLayout>
@@ -207,3 +207,50 @@ export const Card: Story = {
207
207
  }
208
208
  },
209
209
  }
210
+
211
+ export const WithAriaRole: Story = {
212
+ parameters: {
213
+ sourceCode: [
214
+ {
215
+ name: 'Template',
216
+ code: `<template>
217
+ <PageContainer
218
+ role="region"
219
+ unique-id="main-content"
220
+ aria-labelledby="main-content-title"
221
+ >
222
+ <h2 id="main-content-title">Contenu principal</h2>
223
+ Contenu de la page
224
+ </PageContainer>
225
+ </template>
226
+ `,
227
+ },
228
+ {
229
+ name: 'Script',
230
+ code: `<script setup lang="ts">
231
+ import { PageContainer } from '@cnamts/synapse'
232
+ </script>
233
+ `,
234
+ },
235
+ ],
236
+ },
237
+ args: {
238
+ role: 'region',
239
+ uniqueId: 'main-content',
240
+ ariaLabelledby: 'main-content-title',
241
+ },
242
+ render: (args) => {
243
+ return {
244
+ components: { PageContainer },
245
+ setup() {
246
+ return { args }
247
+ },
248
+ template: `
249
+ <PageContainer :role="args.role" :unique-id="args.uniqueId" :aria-labelledby="args.ariaLabelledby">
250
+ <h2 id="main-content-title" class="pa-4">Contenu principal</h2>
251
+ <p class="pa-4">Contenu de la page</p>
252
+ </PageContainer>
253
+ `,
254
+ }
255
+ },
256
+ }
@@ -1,8 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import { computed } from 'vue'
3
3
  import { useDisplay } from 'vuetify'
4
-
5
- type AriaRole = 'main' | 'region' | 'navigation' | 'contentinfo' | 'banner'
4
+ import type { AriaRole } from '../types'
6
5
 
7
6
  const props = withDefaults(defineProps<{
8
7
  size?: 'xl' | 'lg' | 'md' | 'sm' | 'xs'
@@ -10,12 +9,14 @@
10
9
  color?: string
11
10
  uniqueId?: string
12
11
  role?: AriaRole
12
+ ariaLabelledby?: string
13
13
  }>(), {
14
14
  size: undefined,
15
15
  spacing: undefined,
16
16
  color: 'transparent',
17
17
  uniqueId: undefined,
18
18
  role: undefined,
19
+ ariaLabelledby: undefined,
19
20
  })
20
21
 
21
22
  const display = useDisplay()
@@ -63,6 +64,7 @@
63
64
  :id="uniqueId ? `${uniqueId}-container` : undefined"
64
65
  :class="[spacingClass, 'vd-page-container d-flex justify-center']"
65
66
  :role="role"
67
+ :aria-labelledby="ariaLabelledby"
66
68
  >
67
69
  <VSheet
68
70
  :id="uniqueId ? `${uniqueId}-content` : undefined"