@cnamts/synapse 1.0.21 → 1.0.23

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 (449) hide show
  1. package/dist/{DateFilter-uN8OURoP.js → DateFilter-Dc-gSGwk.js} +29 -24
  2. package/dist/{NumberFilter-sm1dQNQi.js → NumberFilter-vP38Wp6j.js} +1 -1
  3. package/dist/{PeriodFilter-Cklsxnh9.js → PeriodFilter-Ba1uYUnT.js} +1 -1
  4. package/dist/{SelectFilter-CWefj27Z.js → SelectFilter-BioGT6Nn.js} +1 -1
  5. package/dist/{TextFilter-Ddyj885L.js → TextFilter-B84dpnoq.js} +1 -1
  6. package/dist/components/Accordion/Accordion.d.ts +13 -2
  7. package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
  8. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7405 -5973
  9. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
  10. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
  12. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.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 +2413 -2029
  27. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8885 -7323
  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 +8884 -7330
  31. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +950 -838
  32. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1614 -1358
  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 +1108 -846
  42. package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +514 -320
  44. package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
  45. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +40 -38
  46. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +920 -800
  47. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  48. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  49. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +906 -794
  50. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1634 -1367
  51. package/dist/components/DataList/DataList.d.ts +1 -1
  52. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3869 -3120
  53. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1947 -1561
  54. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +831 -684
  55. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  56. package/dist/components/DownloadBtn/config.d.ts +1 -1
  57. package/dist/components/ErrorPage/ErrorPage.d.ts +6 -0
  58. package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
  59. package/dist/components/FileList/UploadItem/locales.d.ts +1 -0
  60. package/dist/components/FileUpload/FileUpload.d.ts +4 -4
  61. package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
  62. package/dist/components/FileUpload/locales.d.ts +1 -0
  63. package/dist/components/FileUpload/validateFiles.d.ts +2 -1
  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 +2 -0
  69. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -0
  70. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +4 -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/MonthPicker/MonthPicker.d.ts +1939 -0
  76. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1899 -0
  77. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
  78. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
  79. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
  80. package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
  81. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
  82. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
  83. package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
  84. package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
  85. package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
  86. package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
  87. package/dist/components/MonthPicker/locales.d.ts +12 -0
  88. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
  89. package/dist/components/NirField/NirField.d.ts +1669 -1379
  90. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  91. package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
  92. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  93. package/dist/components/PeriodField/PeriodField.d.ts +7696 -6192
  94. package/dist/components/PhoneField/PhoneField.d.ts +829 -684
  95. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  96. package/dist/components/StatusPage/StatusPage.d.ts +12 -1
  97. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  98. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  99. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +9 -0
  100. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
  101. package/dist/components/SyHeading/SyHeading.d.ts +22 -0
  102. package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
  103. package/dist/components/SyTextArea/SyTextArea.d.ts +475 -419
  104. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  105. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  106. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  107. package/dist/components/Tables/common/SyTablePagination.d.ts +263 -164
  108. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  109. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  110. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  111. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  112. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  113. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  114. package/dist/components/Tables/common/types.d.ts +2 -0
  115. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +24 -1211
  116. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  117. package/dist/components/index.d.ts +2 -0
  118. package/dist/components/types.d.ts +2 -0
  119. package/dist/design-system-v3.js +111 -107
  120. package/dist/design-system-v3.umd.cjs +158 -158
  121. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  122. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  123. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
  124. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  125. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  126. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  127. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  128. package/dist/main-aLKwdMi1.js +37886 -0
  129. package/dist/main.d.ts +1 -0
  130. package/dist/style.css +1 -1
  131. package/dist/vuetifyConfig.d.ts +14 -14
  132. package/package.json +21 -9
  133. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  134. package/src/assets/apTokens.scss +53 -17
  135. package/src/assets/overrides/_btns.scss +8 -0
  136. package/src/assets/overrides/_forms.scss +9 -0
  137. package/src/assets/overrides/_icons.scss +43 -4
  138. package/src/assets/overrides/_tables.scss +19 -0
  139. package/src/assets/overrides/_tooltips.scss +5 -6
  140. package/src/assets/overrides/_typography.scss +17 -2
  141. package/src/assets/overrides/_utilities.scss +49 -3
  142. package/src/assets/tokens.scss +53 -17
  143. package/src/components/Accordion/Accordion.mdx +23 -9
  144. package/src/components/Accordion/Accordion.stories.ts +153 -3
  145. package/src/components/Accordion/Accordion.vue +7 -6
  146. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  147. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
  148. package/src/components/Accordion/composables/useAccordionState.ts +3 -4
  149. package/src/components/Accordion/tests/accordion.spec.ts +131 -19
  150. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  151. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  152. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  153. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  154. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  155. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  156. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  157. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  158. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  159. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  160. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  161. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  162. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  163. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  164. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  165. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  166. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  167. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  168. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  169. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  170. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  171. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  172. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  173. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  174. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  175. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  176. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
  177. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
  178. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  179. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  180. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  181. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  182. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  183. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  184. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  185. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  186. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  187. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  188. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  189. package/src/components/BackBtn/BackBtn.vue +1 -1
  190. package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
  191. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
  192. package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
  193. package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
  194. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +18 -108
  195. package/src/components/ChipList/ChipList.vue +4 -2
  196. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  197. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  198. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  199. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  200. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  201. package/src/components/CookieBanner/CookieBanner.stories.ts +10 -0
  202. package/src/components/CookieBanner/CookieBanner.vue +15 -5
  203. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +9 -0
  204. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +10 -2
  205. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  206. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  207. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  208. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  209. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  210. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  211. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  212. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  213. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  214. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  215. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  216. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +133 -10
  217. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
  218. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +144 -83
  219. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
  220. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
  221. package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
  222. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
  223. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +234 -9
  224. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +13 -3
  225. package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
  226. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  227. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  228. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  229. package/src/components/Customs/Selects/SySelect/SySelect.vue +63 -3
  230. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  231. package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
  232. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  233. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  234. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +1 -1
  235. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  236. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  237. package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
  238. package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
  239. package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
  240. package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
  241. package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
  242. package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
  243. package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
  244. package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
  245. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  246. package/src/components/Customs/SyPagination/SyPagination.vue +25 -10
  247. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  248. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +53 -0
  249. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  250. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  251. package/src/components/Customs/SyTextField/SyTextField.vue +59 -7
  252. package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
  253. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +15 -0
  254. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +36 -0
  255. package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
  256. package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
  257. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  258. package/src/components/DatePicker/CalendarMode/DatePicker.vue +20 -8
  259. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  260. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  261. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  262. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +34 -0
  263. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -0
  264. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  265. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  266. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  267. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  268. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  269. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  270. package/src/components/DialogBox/DialogBox.vue +12 -5
  271. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  272. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  273. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  274. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  275. package/src/components/DownloadBtn/config.ts +1 -1
  276. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
  277. package/src/components/ErrorPage/ErrorPage.stories.ts +176 -47
  278. package/src/components/ErrorPage/ErrorPage.vue +21 -0
  279. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +15 -0
  280. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
  281. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
  282. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +1 -0
  283. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
  284. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  285. package/src/components/FileList/FileList.stories.ts +55 -1
  286. package/src/components/FileList/UploadItem/UploadItem.vue +17 -5
  287. package/src/components/FileList/UploadItem/locales.ts +3 -2
  288. package/src/components/FileList/accessibilite/Accessibility.mdx +58 -7
  289. package/src/components/FileUpload/FileUpload.vue +62 -38
  290. package/src/components/FileUpload/FileUploadContent.vue +3 -2
  291. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  292. package/src/components/FileUpload/locales.ts +1 -0
  293. package/src/components/FileUpload/tests/FileUpload.spec.ts +61 -14
  294. package/src/components/FileUpload/validateFiles.ts +5 -2
  295. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  296. package/src/components/FilterInline/FilterInline.vue +1 -0
  297. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  298. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  299. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  300. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  301. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  302. package/src/components/FooterBar/FooterBar.stories.ts +298 -34
  303. package/src/components/FooterBar/FooterBar.vue +67 -9
  304. package/src/components/FooterBar/config.ts +2 -2
  305. package/src/components/FooterBar/locales.ts +1 -0
  306. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  307. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  308. package/src/components/FooterBar/types.d.ts +1 -0
  309. package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
  310. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  311. package/src/components/HeaderBar/HeaderBar.vue +5 -0
  312. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +8 -2
  313. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  314. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  315. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  316. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  317. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  318. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +3 -0
  319. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  320. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  321. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  322. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  323. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  324. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  325. package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
  326. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
  327. package/src/components/MaintenancePage/MaintenancePage.vue +33 -6
  328. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +3 -1
  329. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +3 -2
  330. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +18 -1
  331. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +1 -0
  332. package/src/components/MonthPicker/MonthPicker.mdx +35 -0
  333. package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
  334. package/src/components/MonthPicker/MonthPicker.vue +79 -0
  335. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
  336. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
  337. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
  338. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
  339. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
  340. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
  341. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
  342. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
  343. package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
  344. package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
  345. package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
  346. package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
  347. package/src/components/MonthPicker/locales.ts +12 -0
  348. package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
  349. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1248 -0
  350. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
  351. package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
  352. package/src/components/NirField/NirField.mdx +1 -2
  353. package/src/components/NirField/NirField.stories.ts +66 -6
  354. package/src/components/NotFoundPage/NotFoundPage.stories.ts +1 -1
  355. package/src/components/NotFoundPage/NotFoundPage.vue +16 -5
  356. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +2 -0
  357. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +49 -0
  358. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +24 -2
  359. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +24 -14
  360. package/src/components/NotificationBar/Notification/Notification.vue +3 -1
  361. package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
  362. package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
  363. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
  364. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  365. package/src/components/PageContainer/PageContainer.vue +4 -2
  366. package/src/components/PageContainer/accessibilite/Accessibility.mdx +31 -17
  367. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  368. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  369. package/src/components/PeriodField/PeriodField.vue +4 -0
  370. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  371. package/src/components/PhoneField/PhoneField.stories.ts +73 -35
  372. package/src/components/PhoneField/PhoneField.vue +152 -83
  373. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  374. package/src/components/PhoneField/indicatifs.ts +2 -2
  375. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +47 -0
  376. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  377. package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
  378. package/src/components/SearchListField/SearchListField.vue +1 -1
  379. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  380. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  381. package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
  382. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +1 -1
  383. package/src/components/StatusPage/StatusPage.mdx +10 -1
  384. package/src/components/StatusPage/StatusPage.stories.ts +161 -0
  385. package/src/components/StatusPage/StatusPage.vue +29 -5
  386. package/src/components/StatusPage/accessibilite/Accessibility.mdx +24 -5
  387. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +23 -0
  388. package/src/components/StatusPage/tests/StatusPage.spec.ts +25 -0
  389. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +24 -14
  390. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  391. package/src/components/SubHeader/SubHeader.vue +6 -3
  392. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  393. package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
  394. package/src/components/SyAlert/SyAlert.vue +22 -20
  395. package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
  396. package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
  397. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  398. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  399. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  400. package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
  401. package/src/components/SyHeading/SyHeading.test.ts +115 -0
  402. package/src/components/SyHeading/SyHeading.vue +20 -0
  403. package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
  404. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
  405. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -30
  406. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  407. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  408. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  409. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  410. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  411. package/src/components/Tables/common/types.ts +3 -0
  412. package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
  413. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +11 -11
  414. package/src/components/UploadWorkflow/UploadWorkflow.vue +30 -13
  415. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  416. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  417. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +7 -25
  418. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +146 -123
  419. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  420. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  421. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  422. package/src/components/index.ts +2 -0
  423. package/src/components/types.ts +4 -0
  424. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  425. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  426. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  427. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  428. package/src/composables/useFilterable/useFilterable.ts +7 -1
  429. package/src/composables/useFormFieldErrorHandling.ts +11 -2
  430. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  431. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  432. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
  433. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  434. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  435. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  436. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  437. package/src/directives/rgaaSvgFix.ts +2 -7
  438. package/src/main.ts +2 -0
  439. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  440. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  441. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  442. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  443. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  444. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  445. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  446. package/src/stories/DesignTokens/Colors.mdx +8 -59
  447. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  448. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  449. package/dist/main-CWniLr0s.js +0 -36919
@@ -0,0 +1,30 @@
1
+ import { type ValidationRule } from '@/composables/validation/useValidation'
2
+ import { computed } from 'vue'
3
+
4
+ export type ValidationProps = {
5
+ customRules?: ValidationRule[]
6
+ customWarningRules?: ValidationRule[]
7
+ customSuccessRules?: ValidationRule[]
8
+ errorMessages?: string[] | null
9
+ warningMessages?: string[] | null
10
+ successMessages?: string[] | null
11
+ hasError?: boolean
12
+ hasWarning?: boolean
13
+ hasSuccess?: boolean
14
+ showSuccessMessages?: boolean
15
+ }
16
+
17
+ export function useMonthPickerValidation(props: ValidationProps) {
18
+ return computed(() => ({
19
+ customRules: props.customRules,
20
+ customWarningRules: props.customWarningRules,
21
+ customSuccessRules: props.customSuccessRules,
22
+ errorMessages: props.errorMessages,
23
+ warningMessages: props.warningMessages,
24
+ successMessages: props.successMessages,
25
+ hasError: props.hasError,
26
+ hasWarning: props.hasWarning,
27
+ hasSuccess: props.hasSuccess,
28
+ showSuccessMessages: props.showSuccessMessages,
29
+ }))
30
+ }
@@ -65,8 +65,7 @@ import NirField from './NirField.vue';
65
65
 
66
66
  Le composant `NirField` utilise des règles de validation par défaut pour le numéro NIR et la Clé. Voici les règles de validation par défaut :
67
67
 
68
- #### Pour le numéro NIR :
69
-
68
+ <h4 id="ancre-nirtype">Pour le numéro NIR</h4>
70
69
  - Props: `nirType` à simple (par defaut) d'après le [repo](https://github.com/assurance-maladie-digital/nir-validation) :
71
70
 
72
71
  - Le 1er chiffre (1er composant) permet d'identifier le sexe de l'assuré (1 pour un homme et 2 pour une femme) ;
@@ -878,9 +878,6 @@ export const WithNirTooltip: Story = {
878
878
  nirTooltipPosition: 'prepend',
879
879
  },
880
880
  parameters: {
881
- a11y: {
882
- disable: true,
883
- },
884
881
  docs: {
885
882
  description: {
886
883
  story: `
@@ -929,9 +926,6 @@ export const WithKeyTooltip: Story = {
929
926
  keyTooltipPosition: 'append',
930
927
  },
931
928
  parameters: {
932
- a11y: {
933
- disable: true,
934
- },
935
929
  docs: {
936
930
  description: {
937
931
  story: `
@@ -1394,4 +1388,70 @@ const value = ref('')
1394
1388
  },
1395
1389
  ],
1396
1390
  },
1391
+
1392
+ }
1393
+
1394
+ export const ComplexNirType: Story = {
1395
+ args: {
1396
+ modelValue: '712125233333340',
1397
+ required: false,
1398
+ numberLabel: 'Numéro de sécurité sociale',
1399
+ keyLabel: 'Clé',
1400
+ displayKey: true,
1401
+ nirType: 'complexe',
1402
+ },
1403
+ parameters: {
1404
+ sourceCode: [
1405
+ {
1406
+ name: 'Template',
1407
+ code: `
1408
+ <template>
1409
+ <NirField
1410
+ v-model="value"
1411
+ :required="false"
1412
+ numberLabel="Numéro de sécurité sociale"
1413
+ keyLabel="Clé"
1414
+ :nirType="complexe"
1415
+ :displayKey="true"
1416
+ />
1417
+ </template>
1418
+ `,
1419
+ },
1420
+ {
1421
+ name: 'Script',
1422
+ code: `
1423
+ <script setup lang="ts">
1424
+ import { NirField } from '@cnamts/synapse'
1425
+ import { ref } from 'vue'
1426
+
1427
+ const value = ref('184027512345674')
1428
+
1429
+ return { value }
1430
+ </script>
1431
+ `,
1432
+ },
1433
+ ],
1434
+ },
1435
+ render: () => ({
1436
+ components: { NirField },
1437
+ setup() {
1438
+ const value = ref('712125233333340')
1439
+
1440
+ return { value }
1441
+ },
1442
+ template: `
1443
+ <div>
1444
+ <p class="mt-2">Cet exemple montre l'utilisation d'un NIR de type complexe<br/>(commençant par 7).</p>
1445
+ <p class="mb-4">Pour plus d'informations sur le NirType voir la <a href="/?path=/docs/composants-formulaires-nirfield--docs#ancre-nirtype">documentation</a>.</p>
1446
+ </div>
1447
+ <NirField
1448
+ v-model="value"
1449
+ :required="false"
1450
+ numberLabel="Numéro de sécurité sociale"
1451
+ keyLabel="Clé"
1452
+ nirType="complexe"
1453
+ :displayKey="true"
1454
+ />
1455
+ `,
1456
+ }),
1397
1457
  }
@@ -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,25 @@ describe('NotFoundPage', () => {
113
114
  expect(img.exists()).toBe(true)
114
115
  expect(img.attributes('src')).toBe('/custom.svg')
115
116
  })
117
+
118
+ it('uses a generated uniqueId', async () => {
119
+ const wrapper = mount(NotFoundPage)
120
+ await flushPromises()
121
+ await wrapper.vm.$nextTick()
122
+
123
+ expect(wrapper.find('.vd-page-container').attributes('id')).toMatch(/^[-a-z0-9]+-container$/)
124
+ })
125
+
126
+ it('passes a custom uniqueId prop to StatusPage', async () => {
127
+ const wrapper = mount(NotFoundPage, {
128
+ props: {
129
+ uniqueId: 'custom-id',
130
+ },
131
+ })
132
+ await flushPromises()
133
+ await wrapper.vm.$nextTick()
134
+
135
+ const statusPage = wrapper.findComponent(StatusPage)
136
+ expect(statusPage.props('uniqueId')).toBe('custom-id')
137
+ })
116
138
  })
@@ -1,19 +1,23 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
3
  exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
4
- <div class="
5
- d-flex
6
- justify-center
7
- px-14
8
- py-10
9
- vd-page-container
10
- ">
4
+ <div
5
+ class="
6
+ d-flex
7
+ justify-center
8
+ px-14
9
+ py-10
10
+ vd-page-container
11
+ "
12
+ id="v-0-container"
13
+ >
11
14
  <div
12
15
  class="
13
16
  bg-transparent
14
17
  v-sheet
15
18
  v-theme--light
16
19
  "
20
+ id="v-0-content"
17
21
  style="width: 800px;"
18
22
  >
19
23
  <div class="
@@ -107,6 +111,7 @@ exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
107
111
  font-weight-bold
108
112
  mb-2
109
113
  mb-4
114
+ sy-heading
110
115
  text-h5
111
116
  ">
112
117
  Page non trouvée
@@ -148,19 +153,23 @@ exports[`NotFoundPage > display the support ID if provided in the url 1`] = `
148
153
  `;
149
154
 
150
155
  exports[`NotFoundPage > renders correctly 1`] = `
151
- <div class="
152
- d-flex
153
- justify-center
154
- px-14
155
- py-10
156
- vd-page-container
157
- ">
156
+ <div
157
+ class="
158
+ d-flex
159
+ justify-center
160
+ px-14
161
+ py-10
162
+ vd-page-container
163
+ "
164
+ id="v-0-container"
165
+ >
158
166
  <div
159
167
  class="
160
168
  bg-transparent
161
169
  v-sheet
162
170
  v-theme--light
163
171
  "
172
+ id="v-0-content"
164
173
  style="width: 800px;"
165
174
  >
166
175
  <div class="
@@ -254,6 +263,7 @@ exports[`NotFoundPage > renders correctly 1`] = `
254
263
  font-weight-bold
255
264
  mb-2
256
265
  mb-4
266
+ sy-heading
257
267
  text-h5
258
268
  ">
259
269
  Page non trouvée
@@ -74,7 +74,9 @@
74
74
  decorative
75
75
  />
76
76
 
77
- <span class="notification__message">{{ notification.message }}</span>
77
+ <span class="notification__message">
78
+ <slot :notification="props.notification">{{ notification.message }}</slot>
79
+ </span>
78
80
  <div
79
81
  class="d-flex ga-2 notification__actions"
80
82
  :class="notification.message.length > 50 ? 'action-section-long-text' : 'action-section-short-text'"
@@ -408,6 +408,160 @@ CustomCloseBtnText.parameters = {
408
408
  ],
409
409
  }
410
410
 
411
+ export const DefaultSlot: Story = (args) => {
412
+ return {
413
+ components: { NotificationBar, VBtn },
414
+ setup() {
415
+ const { addNotification } = useNotificationService()
416
+
417
+ const envoyerNotification = () => {
418
+ const notification: Notification = {
419
+ id: Date.now().toString(),
420
+ message: 'Notification avec contenu principal personnalisé.',
421
+ type: 'info',
422
+ timeout: -1,
423
+ }
424
+ addNotification(notification)
425
+ }
426
+
427
+ return { args, envoyerNotification }
428
+ },
429
+ template: `
430
+ <div class="d-flex flex-wrap align-center justify-center">
431
+ <NotificationBar v-bind="args">
432
+ <template #default="{ notification }">
433
+ Contenu personnalisé pour <strong>{{ notification.id }}</strong>
434
+ </template>
435
+ </NotificationBar>
436
+ <VBtn
437
+ color="primary"
438
+ @click="envoyerNotification()"
439
+ class="ma-6"
440
+ >
441
+ Afficher la notification
442
+ </VBtn>
443
+ </div>
444
+ `,
445
+ }
446
+ }
447
+
448
+ DefaultSlot.args = {
449
+ ...Default.args,
450
+ }
451
+
452
+ DefaultSlot.parameters = {
453
+ sourceCode: [
454
+ {
455
+ name: 'Template',
456
+ code: `
457
+ <NotificationBar>
458
+ <template #default="{ notification }">
459
+ Contenu personnalisé pour <strong>{{ notification.id }}</strong>
460
+ </template>
461
+ </NotificationBar>
462
+ `,
463
+ },
464
+ {
465
+ name: 'Script',
466
+ code: `
467
+ <script setup lang="ts">
468
+ import { NotificationBar, useNotificationService } from '@cnamts/synapse'
469
+
470
+ const { addNotification } = useNotificationService()
471
+
472
+ const envoyerNotification = () => {
473
+ addNotification({
474
+ id: Date.now().toString(),
475
+ message: 'Notification avec contenu principal personnalisé.',
476
+ type: 'info',
477
+ timeout: -1,
478
+ })
479
+ }
480
+ </script>
481
+ `,
482
+ },
483
+ ],
484
+ }
485
+
486
+ export const ActionSlot: Story = (args) => {
487
+ return {
488
+ components: { NotificationBar, VBtn },
489
+ setup() {
490
+ const { addNotification } = useNotificationService()
491
+
492
+ const envoyerNotification = () => {
493
+ const notification: Notification = {
494
+ id: Date.now().toString(),
495
+ message: 'Notification avec contenu personnalisé via slot.',
496
+ type: 'info',
497
+ timeout: -1,
498
+ }
499
+ addNotification(notification)
500
+ }
501
+
502
+ return { args, envoyerNotification }
503
+ },
504
+ template: `
505
+ <div class="d-flex flex-wrap align-center justify-center">
506
+ <NotificationBar v-bind="args">
507
+ <template #action>
508
+ <VBtn variant="outlined">
509
+ Voir le détail
510
+ </VBtn>
511
+ </template>
512
+ </NotificationBar>
513
+ <VBtn
514
+ color="primary"
515
+ @click="envoyerNotification()"
516
+ class="ma-6"
517
+ >
518
+ Afficher la notification
519
+ </VBtn>
520
+ </div>
521
+ `,
522
+ }
523
+ }
524
+
525
+ ActionSlot.args = {
526
+ ...Default.args,
527
+ }
528
+
529
+ ActionSlot.parameters = {
530
+ sourceCode: [
531
+ {
532
+ name: 'Template',
533
+ code: `
534
+ <NotificationBar>
535
+ <template #action>
536
+ <VBtn variant="outlined">
537
+ Voir le détail
538
+ </VBtn>
539
+ </template>
540
+ </NotificationBar>
541
+ `,
542
+ },
543
+ {
544
+ name: 'Script',
545
+ code: `
546
+ <script setup lang="ts">
547
+ import { NotificationBar, useNotificationService } from '@cnamts/synapse'
548
+
549
+ const { addNotification } = useNotificationService()
550
+
551
+ const envoyerNotification = () => {
552
+ addNotification({
553
+ id: Date.now().toString(),
554
+ message: 'Notification avec contenu personnalisé via slot.',
555
+ type: 'info',
556
+ timeout: -1,
557
+ })
558
+ }
559
+ </script>
560
+ `,
561
+ },
562
+ ],
563
+ }
564
+
411
565
  export const Customization: Story = Default.bind({})
412
566
  Customization.args = {
413
567
  ...Default.args,
@@ -41,6 +41,32 @@ describe('NotificationBar – accessibility (axe)', () => {
41
41
  vi.restoreAllMocks()
42
42
  })
43
43
 
44
+ it('has no obvious axe violations with default slot content', async () => {
45
+ const notification: Notification = {
46
+ id: '1',
47
+ message: 'Message original',
48
+ type: 'info',
49
+ timeout: -1,
50
+ icon: null,
51
+ }
52
+
53
+ useNotificationService().notificationQueue.value = [notification]
54
+
55
+ const wrapper = mount(NotificationBar, {
56
+ attachTo: document.body,
57
+ slots: {
58
+ default: '<span>Contenu personnalisé via slot default</span>',
59
+ },
60
+ })
61
+
62
+ const results = await axe(document.body)
63
+ assertNoA11yViolations(results, 'NotificationBar – default slot content', {
64
+ ignoreRules: ['region'],
65
+ })
66
+
67
+ wrapper.unmount()
68
+ })
69
+
44
70
  it('has no obvious axe violations with visible info notification', async () => {
45
71
  const notification: Notification = {
46
72
  id: '1',
@@ -186,6 +186,66 @@ describe('NotificationBar.vue', () => {
186
186
  expect(wrapper.html()).not.toContain('Test message 1')
187
187
  })
188
188
 
189
+ it('should render default slot content instead of message', async () => {
190
+ const notification: Notification = {
191
+ id: '1',
192
+ message: 'Message original',
193
+ type: 'info',
194
+ timeout: -1,
195
+ icon: null,
196
+ }
197
+ notificationServiceMock.notificationQueue.value = [notification]
198
+
199
+ const wrapper = mount(NotificationBar, {
200
+ slots: {
201
+ default: '<span>Contenu personnalisé</span>',
202
+ },
203
+ })
204
+ vi.runAllTimers()
205
+ await nextTick()
206
+
207
+ expect(wrapper.html()).toContain('Contenu personnalisé')
208
+ expect(wrapper.html()).not.toContain('Message original')
209
+ })
210
+
211
+ it('should expose notification slotProp in default slot', async () => {
212
+ const notification: Notification = {
213
+ id: 'abc',
214
+ message: 'Message original',
215
+ type: 'info',
216
+ timeout: -1,
217
+ icon: null,
218
+ }
219
+ notificationServiceMock.notificationQueue.value = [notification]
220
+
221
+ const wrapper = mount(NotificationBar, {
222
+ slots: {
223
+ default: `<template #default="{ notification }"><span>id: {{ notification.id }}</span></template>`,
224
+ },
225
+ })
226
+ vi.runAllTimers()
227
+ await nextTick()
228
+
229
+ expect(wrapper.html()).toContain('id: abc')
230
+ })
231
+
232
+ it('should fall back to message when no default slot is provided', async () => {
233
+ const notification: Notification = {
234
+ id: '1',
235
+ message: 'Message fallback',
236
+ type: 'info',
237
+ timeout: -1,
238
+ icon: null,
239
+ }
240
+ notificationServiceMock.notificationQueue.value = [notification]
241
+
242
+ const wrapper = mount(NotificationBar)
243
+ vi.runAllTimers()
244
+ await nextTick()
245
+
246
+ expect(wrapper.html()).toContain('Message fallback')
247
+ })
248
+
189
249
  it('should compute action', async () => {
190
250
  const notification: Notification = {
191
251
  id: '1',