@cnamts/synapse 1.0.19 → 1.0.21

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 (378) hide show
  1. package/dist/{DateFilter-CeVuSfJ9.js → DateFilter-uN8OURoP.js} +1 -1
  2. package/dist/{NumberFilter-C8PAu_sw.js → NumberFilter-sm1dQNQi.js} +1 -1
  3. package/dist/{PeriodFilter-UMUaxx3d.js → PeriodFilter-Cklsxnh9.js} +1 -1
  4. package/dist/{SelectFilter-CqZl8CYt.js → SelectFilter-CWefj27Z.js} +1 -1
  5. package/dist/{TextFilter-D_RhhNOh.js → TextFilter-Ddyj885L.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +4 -4
  7. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +17 -7
  8. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +4 -4
  9. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +4 -4
  10. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2416 -0
  11. package/dist/components/Customs/Selects/SyAutocomplete/types.d.ts +5 -0
  12. package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +14 -0
  13. package/dist/components/Customs/Selects/SyAutocomplete/utils/useItemUtils.d.ts +16 -0
  14. package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +28 -0
  15. package/dist/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.d.ts +12 -0
  16. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +2 -0
  17. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +160 -0
  18. package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
  19. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
  20. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1545 -2
  21. package/dist/components/Customs/SyIcon/SyIcon.d.ts +2 -1
  22. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1495 -2
  23. package/dist/components/DatePicker/composables/useDateSelection.d.ts +1 -0
  24. package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
  25. package/dist/components/ErrorPage/ErrorPage.d.ts +1 -12
  26. package/dist/components/ErrorPage/locales.d.ts +18 -3
  27. package/dist/components/FileUpload/FileUpload.d.ts +2 -0
  28. package/dist/components/MaintenancePage/locales.d.ts +18 -2
  29. package/dist/components/NotFoundPage/locales.d.ts +20 -4
  30. package/dist/components/PaginatedTable/PaginatedTable.d.ts +1 -1
  31. package/dist/components/PaginatedTable/Pagination.d.ts +17 -0
  32. package/dist/components/StatusPage/StatusPage.d.ts +39 -0
  33. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -5
  34. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -5
  35. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +13 -3
  36. package/dist/components/index.d.ts +4 -0
  37. package/dist/components/types.d.ts +15 -0
  38. package/dist/composables/useFormFieldErrorHandling.d.ts +31 -0
  39. package/dist/design-system-v3.js +126 -122
  40. package/dist/design-system-v3.umd.cjs +325 -314
  41. package/dist/{main-B39UVv5p.js → main-CWniLr0s.js} +15837 -14587
  42. package/dist/modules.d.ts +6 -0
  43. package/dist/style.css +1 -1
  44. package/dist/utils/theme/index.d.ts +6 -0
  45. package/package.json +12 -10
  46. package/src/assets/amelipro/icons.ts +166 -153
  47. package/src/components/Accordion/Accordion.mdx +4 -1
  48. package/src/components/Accordion/{Accessibilite/AccessibilityGuide.mdx → accessibilite/Accessibility.mdx} +2 -2
  49. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +73 -14
  50. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +119 -27
  51. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.a11y.spec.ts +304 -0
  52. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +435 -9
  53. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +60 -0
  54. package/src/components/Amelipro/AmeliproIcon/__tests__/AmeliproIcon.spec.ts +1 -1
  55. package/src/components/Amelipro/AmeliproIcon/iconList.ts +2 -0
  56. package/src/components/BackBtn/BackBtn.vue +5 -4
  57. package/src/components/BackBtn/accessibilite/Accessibility.mdx +15 -0
  58. package/src/components/BackToTopBtn/BackToTopBtn.vue +6 -3
  59. package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +15 -0
  60. package/src/components/Captcha/Captcha.vue +5 -1
  61. package/src/components/Captcha/CaptchaAlert.vue +9 -7
  62. package/src/components/Captcha/accessibilite/Accessibility.mdx +10 -0
  63. package/src/components/ChipList/accessibilite/Accessibility.mdx +15 -0
  64. package/src/components/CollapsibleList/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +8 -6
  65. package/src/components/Common/IconSlot/IconSlot.vue +1 -1
  66. package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
  67. package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +71 -0
  68. package/src/components/CookieBanner/CookieBanner.stories.ts +11 -20
  69. package/src/components/CookieBanner/CookieBanner.vue +20 -5
  70. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +71 -0
  71. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +48 -4
  72. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +5 -4
  73. package/src/components/CopyBtn/CopyBtn.vue +6 -3
  74. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +15 -0
  75. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +15 -0
  76. package/src/components/Customs/Selects/SelectOverview.mdx +112 -1
  77. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.mdx +52 -0
  78. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +979 -0
  79. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +653 -0
  80. package/src/components/Customs/Selects/{SySelect → SyAutocomplete/accessibilite}/Accessibilite.stories.ts +7 -38
  81. package/src/components/Customs/Selects/{SySelect/Accessibilite.mdx → SyAutocomplete/accessibilite/Accessibility.mdx} +15 -20
  82. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +72 -0
  83. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +345 -0
  84. package/src/components/Customs/Selects/SyAutocomplete/types.ts +7 -0
  85. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +180 -0
  86. package/src/components/Customs/Selects/SyAutocomplete/utils/useItemUtils.ts +46 -0
  87. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +107 -0
  88. package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +74 -0
  89. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +13 -9
  90. package/src/components/Customs/Selects/SyInputSelect/accessibilite/Accessibility.mdx +12 -0
  91. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +43 -34
  92. package/src/components/Customs/Selects/SySelect/SySelect.vue +19 -2
  93. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +274 -0
  94. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +21 -16
  95. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
  96. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
  97. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
  98. package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
  99. package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
  100. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
  101. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
  102. package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
  103. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -27
  104. package/src/components/Customs/SyCheckbox/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +3 -3
  105. package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
  106. package/src/components/Customs/SyForm/accessibilite/Accessibility.mdx +10 -0
  107. package/src/components/Customs/SyIcon/SyIcon.mdx +4 -1
  108. package/src/components/Customs/SyIcon/SyIcon.vue +4 -3
  109. package/src/components/Customs/SyIcon/{Accessibilite.stories.ts → accessibilite/Accessibilite.stories.ts} +3 -3
  110. package/src/components/Customs/SyIcon/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
  111. package/src/components/Customs/SyPagination/SyPagination.mdx +4 -2
  112. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +10 -0
  113. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
  114. package/src/components/Customs/SyRadioGroup/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
  115. package/src/components/Customs/SyTabs/SyTabs.mdx +4 -2
  116. package/src/components/Customs/SyTabs/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +2 -2
  117. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -2
  118. package/src/components/Customs/SyTextField/SyTextField.vue +13 -0
  119. package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +15 -0
  120. package/src/components/DataList/accessibilite/Accessibility.mdx +15 -0
  121. package/src/components/DataListGroup/accessibilite/Accessibility.mdx +14 -0
  122. package/src/components/DatePicker/Accessibilite.mdx +1 -1
  123. package/src/components/DatePicker/Accessibilite.stories.ts +1 -1
  124. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +7 -4
  125. package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
  126. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +43 -2
  127. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +297 -0
  128. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
  129. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
  130. package/src/components/DatePicker/composables/useDateSelection.ts +5 -0
  131. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +273 -0
  132. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  133. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +10 -0
  134. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
  135. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
  136. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
  137. package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
  138. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
  139. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
  140. package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
  141. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +10 -0
  142. package/src/components/DialogBox/accessibilite/Accessibility.mdx +15 -0
  143. package/src/components/DownloadBtn/DownloadBtn.vue +5 -4
  144. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +15 -0
  145. package/src/components/ErrorPage/ErrorPage.mdx +6 -16
  146. package/src/components/ErrorPage/ErrorPage.stories.ts +16 -87
  147. package/src/components/ErrorPage/ErrorPage.vue +38 -125
  148. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +77 -0
  149. package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
  150. package/src/components/ErrorPage/locales.ts +21 -3
  151. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
  152. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
  153. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +8 -266
  154. package/src/components/ExternalLinks/accessibilite/Accessibility.mdx +15 -0
  155. package/src/components/FileList/UploadItem/UploadItem.vue +25 -20
  156. package/src/components/FileList/accessibilite/Accessibility.mdx +12 -0
  157. package/src/components/FilePreview/accessibilite/Accessibility.mdx +12 -0
  158. package/src/components/FileUpload/FileUpload.vue +5 -0
  159. package/src/components/FileUpload/FileUploadContent.vue +5 -4
  160. package/src/components/FileUpload/accessibilite/Accessibility.mdx +12 -0
  161. package/src/components/FilterInline/FilterInline.vue +5 -4
  162. package/src/components/FilterInline/accessibilite/Accessibility.mdx +12 -0
  163. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +15 -0
  164. package/src/components/FooterBar/FooterBar.stories.ts +18 -14
  165. package/src/components/FooterBar/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +3 -4
  166. package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
  167. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +6 -5
  168. package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +15 -0
  169. package/src/components/FranceConnectBtn/tests/__snapshots__/FranceConnectBtn.spec.ts.snap +3 -0
  170. package/src/components/HeaderBar/HeaderBurgerMenu/accessibilite/Accessibility.mdx +15 -0
  171. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +15 -0
  172. package/src/components/HeaderBar/{Usages.mdx → usages/Usages.mdx} +2 -2
  173. package/src/components/HeaderLoading/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +9 -5
  174. package/src/components/HeaderToolbar/accessibilite/Accessibility.mdx +15 -0
  175. package/src/components/LangBtn/LangBtn.vue +5 -4
  176. package/src/components/LangBtn/accessibilite/Accessibility.mdx +15 -0
  177. package/src/components/Logo/accessibilite/Accessibility.mdx +17 -0
  178. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +12 -0
  179. package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +10 -0
  180. package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
  181. package/src/components/MaintenancePage/MaintenancePage.vue +15 -7
  182. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +70 -0
  183. package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
  184. package/src/components/MaintenancePage/locales.ts +24 -3
  185. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +75 -3
  186. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +42 -2
  187. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +3 -2
  188. package/src/components/NirField/accessibilite/Accessibility.mdx +15 -0
  189. package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
  190. package/src/components/NotFoundPage/NotFoundPage.stories.ts +3 -3
  191. package/src/components/NotFoundPage/NotFoundPage.vue +16 -11
  192. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +87 -0
  193. package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
  194. package/src/components/NotFoundPage/locales.ts +24 -4
  195. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +168 -4
  196. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +100 -12
  197. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +2 -2
  198. package/src/components/NotificationBar/Notification/Notification.vue +1 -1
  199. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  200. package/src/components/NotificationBar/accessibilite/Accessibility.mdx +75 -0
  201. package/src/components/PageContainer/{AccessibilityGuide.mdx → accessibilite/Accessibility.mdx} +7 -4
  202. package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
  203. package/src/components/PaginatedTable/PaginatedTable.vue +27 -47
  204. package/src/components/PaginatedTable/Pagination.vue +93 -0
  205. package/src/components/PaginatedTable/accessibilite/Accessibility.mdx +12 -0
  206. package/src/components/PasswordField/PasswordField.vue +2 -1
  207. package/src/components/PasswordField/accessibilite/Accessibility.mdx +108 -0
  208. package/src/components/PeriodField/accessibilite/Accessibility.mdx +12 -0
  209. package/src/components/PhoneField/PhoneField.stories.ts +46 -38
  210. package/src/components/PhoneField/accessibilite/Accessibility.mdx +15 -0
  211. package/src/components/RangeField/accessibilite/Accessibility.mdx +15 -0
  212. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +15 -0
  213. package/src/components/SearchListField/SearchListField.vue +6 -3
  214. package/src/components/SearchListField/accessibilite/Accessibility.mdx +15 -0
  215. package/src/components/SkipLink/{Accessibilite.mdx → accessibilite/Accessibility.mdx} +7 -4
  216. package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
  217. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
  218. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
  219. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +9 -1
  220. package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +67 -0
  221. package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
  222. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
  223. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
  224. package/src/components/StatusPage/StatusPage.mdx +22 -0
  225. package/src/components/StatusPage/StatusPage.stories.ts +193 -0
  226. package/src/components/StatusPage/StatusPage.vue +145 -0
  227. package/src/components/StatusPage/accessibilite/Accessibility.mdx +81 -0
  228. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +29 -0
  229. package/src/components/StatusPage/tests/StatusPage.spec.ts +50 -0
  230. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +270 -0
  231. package/src/components/SubHeader/accessibilite/Accessibility.mdx +15 -0
  232. package/src/components/SyAlert/SyAlert.vue +6 -6
  233. package/src/components/SyAlert/accessibilite/Accessibility.mdx +12 -0
  234. package/src/components/SyTextArea/accessibilite/Accessibility.mdx +10 -0
  235. package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
  236. package/src/components/TableToolbar/TableToolbar.vue +7 -4
  237. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +12 -0
  238. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +0 -5
  239. package/src/components/Tables/SyServerTable/SyServerTable.mdx +4 -1
  240. package/src/components/Tables/SyServerTable/accessibilite/Accessibility.mdx +10 -0
  241. package/src/components/Tables/SyTable/SyTable.mdx +4 -1
  242. package/src/components/Tables/SyTable/accessibilite/Accessibility.mdx +10 -0
  243. package/src/components/Tables/common/TableHeader.vue +3 -1
  244. package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +18 -14
  245. package/src/components/ToolbarContainer/ToolbarContainer.mdx +2 -1
  246. package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +563 -420
  247. package/src/components/ToolbarContainer/accessibilite/Accessibility.mdx +69 -0
  248. package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
  249. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +107 -3
  250. package/src/components/UploadWorkflow/UploadWorkflow.vue +35 -24
  251. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +12 -0
  252. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +48 -0
  253. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +9 -5
  254. package/src/components/UploadWorkflow/useFileList.ts +7 -0
  255. package/src/components/Usages/Usages.vue +3 -2
  256. package/src/components/UserMenuBtn/UserMenuBtn.vue +7 -5
  257. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +12 -0
  258. package/src/components/index.ts +5 -0
  259. package/src/components/types.ts +10 -0
  260. package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
  261. package/src/composables/rules/useFieldValidation.ts +31 -9
  262. package/src/composables/useFormFieldErrorHandling.ts +141 -0
  263. package/src/modules.d.ts +6 -0
  264. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
  265. package/src/utils/theme/index.ts +19 -0
  266. package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
  267. package/dist/components/MaintenancePage/index.d.ts +0 -2
  268. package/src/components/BackBtn/Accessibilite.mdx +0 -14
  269. package/src/components/BackBtn/Accessibilite.stories.ts +0 -30
  270. package/src/components/BackToTopBtn/Accessibilite.mdx +0 -14
  271. package/src/components/BackToTopBtn/Accessibilite.stories.ts +0 -31
  272. package/src/components/ChipList/Accessibilite.mdx +0 -14
  273. package/src/components/ChipList/Accessibilite.stories.ts +0 -31
  274. package/src/components/CollapsibleList/Accessibilite.stories.ts +0 -29
  275. package/src/components/ContextualMenu/Accessibilite.mdx +0 -13
  276. package/src/components/ContextualMenu/Accessibilite.stories.ts +0 -29
  277. package/src/components/CookieBanner/Accessibilite.mdx +0 -13
  278. package/src/components/CookieBanner/Accessibilite.stories.ts +0 -30
  279. package/src/components/CopyBtn/Accessibilite.mdx +0 -13
  280. package/src/components/CopyBtn/Accessibilite.stories.ts +0 -29
  281. package/src/components/Customs/Selects/SelectBtnField/Accessibilite.mdx +0 -14
  282. package/src/components/Customs/Selects/SelectBtnField/Accessibilite.stories.ts +0 -29
  283. package/src/components/Customs/Selects/SyInputSelect/Accessibilite.mdx +0 -13
  284. package/src/components/Customs/Selects/SyInputSelect/Accessibilite.stories.ts +0 -25
  285. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +0 -27
  286. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
  287. package/src/components/Customs/SyTextField/Accessibilite.mdx +0 -14
  288. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +0 -34
  289. package/src/components/DataList/Accessibilite.mdx +0 -13
  290. package/src/components/DataList/Accessibilite.stories.ts +0 -29
  291. package/src/components/DataListGroup/Accessibilite.mdx +0 -13
  292. package/src/components/DataListGroup/Accessibilite.stories.ts +0 -29
  293. package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
  294. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
  295. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +0 -26
  296. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +0 -27
  297. package/src/components/DialogBox/Accessibilite.mdx +0 -14
  298. package/src/components/DialogBox/Accessibilite.stories.ts +0 -29
  299. package/src/components/DownloadBtn/Accessibilite.mdx +0 -14
  300. package/src/components/DownloadBtn/Accessibilite.stories.ts +0 -29
  301. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
  302. package/src/components/ErrorPage/Accessibilite.mdx +0 -13
  303. package/src/components/ErrorPage/Accessibilite.stories.ts +0 -36
  304. package/src/components/ExternalLinks/Accessibilite.mdx +0 -18
  305. package/src/components/ExternalLinks/Accessibilite.stories.ts +0 -62
  306. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
  307. package/src/components/FileList/Accessibilite.mdx +0 -13
  308. package/src/components/FileList/Accessibilite.stories.ts +0 -26
  309. package/src/components/FilePreview/Accessibilite.mdx +0 -14
  310. package/src/components/FilePreview/Accessibilite.stories.ts +0 -26
  311. package/src/components/FileUpload/Accessibilite.mdx +0 -13
  312. package/src/components/FileUpload/Accessibilite.stories.ts +0 -26
  313. package/src/components/FilterInline/Accessibilite.mdx +0 -15
  314. package/src/components/FilterInline/Accessibilite.stories.ts +0 -26
  315. package/src/components/FilterSideBar/Accessibilite.mdx +0 -13
  316. package/src/components/FilterSideBar/Accessibilite.stories.ts +0 -30
  317. package/src/components/FooterBar/Accessibilite.stories.ts +0 -26
  318. package/src/components/FranceConnectBtn/Accessibilite.mdx +0 -13
  319. package/src/components/FranceConnectBtn/Accessibilite.stories.ts +0 -30
  320. package/src/components/HeaderBar/Accessibilite.mdx +0 -13
  321. package/src/components/HeaderBar/Accessibilite.stories.ts +0 -31
  322. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.mdx +0 -13
  323. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +0 -30
  324. package/src/components/HeaderLoading/Accessibilite.stories.ts +0 -31
  325. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
  326. package/src/components/HeaderToolbar/Accessibilite.mdx +0 -13
  327. package/src/components/HeaderToolbar/Accessibilite.stories.ts +0 -36
  328. package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
  329. package/src/components/LangBtn/Accessibilite.mdx +0 -13
  330. package/src/components/LangBtn/Accessibilite.stories.ts +0 -32
  331. package/src/components/Logo/Accessibilite.mdx +0 -13
  332. package/src/components/Logo/Accessibilite.stories.ts +0 -30
  333. package/src/components/LogoBrandSection/Accessibilite.mdx +0 -13
  334. package/src/components/LogoBrandSection/Accessibilite.stories.ts +0 -26
  335. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
  336. package/src/components/MaintenancePage/Accessibilite.mdx +0 -13
  337. package/src/components/MaintenancePage/Accessibilite.stories.ts +0 -36
  338. package/src/components/MaintenancePage/index.ts +0 -3
  339. package/src/components/NirField/Accessibilite.mdx +0 -13
  340. package/src/components/NirField/Accessibilite.stories.ts +0 -31
  341. package/src/components/NotFoundPage/Accessibilite.mdx +0 -13
  342. package/src/components/NotFoundPage/Accessibilite.stories.ts +0 -36
  343. package/src/components/NotificationBar/Accessibilite.mdx +0 -13
  344. package/src/components/NotificationBar/Accessibilite.stories.ts +0 -30
  345. package/src/components/PageContainer/Accessibilite.mdx +0 -13
  346. package/src/components/PageContainer/Accessibilite.stories.ts +0 -30
  347. package/src/components/PaginatedTable/Accessibilite.mdx +0 -13
  348. package/src/components/PaginatedTable/Accessibilite.stories.ts +0 -26
  349. package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
  350. package/src/components/PasswordField/Accessibilite.mdx +0 -13
  351. package/src/components/PasswordField/Accessibilite.stories.ts +0 -121
  352. package/src/components/PeriodField/Accessibilite.mdx +0 -13
  353. package/src/components/PeriodField/Accessibilite.stories.ts +0 -27
  354. package/src/components/PhoneField/Accessibilite.mdx +0 -13
  355. package/src/components/PhoneField/Accessibilite.stories.ts +0 -32
  356. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +0 -34
  357. package/src/components/RangeField/Accessibilite.mdx +0 -13
  358. package/src/components/RangeField/Accessibilite.stories.ts +0 -32
  359. package/src/components/RatingPicker/Accessibilite.mdx +0 -13
  360. package/src/components/RatingPicker/Accessibilite.stories.ts +0 -30
  361. package/src/components/SearchListField/Accessibilite.mdx +0 -13
  362. package/src/components/SearchListField/Accessibilite.stories.ts +0 -30
  363. package/src/components/SkipLink/Accessibilite.stories.ts +0 -36
  364. package/src/components/SocialMediaLinks/Accessibilite.mdx +0 -13
  365. package/src/components/SocialMediaLinks/Accessibilite.stories.ts +0 -36
  366. package/src/components/SubHeader/Accessibilite.mdx +0 -13
  367. package/src/components/SubHeader/Accessibilite.stories.ts +0 -36
  368. package/src/components/SyAlert/Accessibilite.mdx +0 -13
  369. package/src/components/SyAlert/Accessibilite.stories.ts +0 -30
  370. package/src/components/TableToolbar/Accessibilite.mdx +0 -13
  371. package/src/components/TableToolbar/Accessibilite.stories.ts +0 -26
  372. package/src/components/UploadWorkflow/Accessibilite.mdx +0 -13
  373. package/src/components/UploadWorkflow/Accessibilite.stories.ts +0 -26
  374. package/src/components/UserMenuBtn/Accessibilite.mdx +0 -13
  375. package/src/components/UserMenuBtn/Accessibilite.stories.ts +0 -25
  376. /package/src/components/HeaderBar/{Usages.stories.ts → usages/Usages.stories.ts} +0 -0
  377. /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
  378. /package/src/components/SyBtnMenu/accessibilite/{AccessibilityGuide.mdx → Accessibility.mdx} +0 -0
@@ -0,0 +1,69 @@
1
+ import { Meta, Primary } from '@storybook/blocks';
2
+ import * as ToolbarContainerStories from '../ToolbarContainer.stories';
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';
12
+
13
+ <Meta of={ToolbarContainerStories}/>
14
+
15
+ <AccessibilityGuideLayout
16
+ componentName="ToolbarContainer"
17
+ iconSrc={AccessibilityIcon}
18
+ apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/"
19
+ >
20
+ <CriteriaSection>
21
+ <CriteriaCard icon="🔍" title="Structure sémantique">
22
+ <ul>
23
+ <li><strong>Rôle ARIA approprié</strong> : <code>role="toolbar"</code> sur le conteneur principal</li>
24
+ </ul>
25
+ </CriteriaCard>
26
+
27
+ <CriteriaCard icon="⌨️" title="Navigation clavier complète">
28
+ <ul>
29
+ <li><strong>Flèches directionnelles</strong> : Navigation entre les éléments interactifs (←, →, ↑, ↓)</li>
30
+ <li>Le focus boucle en fin de liste et revient au début (et inversement)</li>
31
+ <li><strong>Touches Home/End</strong> : Accès rapide au premier/dernier élément</li>
32
+ <li><strong>Touche Tab</strong> : Accès au toolbar et sortie du toolbar</li>
33
+ </ul>
34
+ </CriteriaCard>
35
+
36
+ <CriteriaCard icon="📱" title="États et retours d'information">
37
+ <ul>
38
+ <li><strong>Focus visible</strong> : L'effet de focus possède un contraste suffisant et est cohérent avec le reste du design système</li>
39
+ <li><strong>État sélectionné</strong> : Utilisation de <code>aria-checked</code> ou <code>aria-pressed</code> selon le type de bouton</li>
40
+ <li><strong>Gestion du focus</strong> : Restauration du focus sur le dernier élément utilisé</li>
41
+ </ul>
42
+ </CriteriaCard>
43
+
44
+ </CriteriaSection>
45
+
46
+ <DemoSection componentName="ToolbarContainer">
47
+ <Primary />
48
+ </DemoSection>
49
+
50
+ <BestPracticesSection>
51
+ <ul>
52
+ <li>Utilisez un label pertinent pour le toolbar via <code>aria-label</code> ou <code>aria-labelledby</code></li>
53
+ <li>Regroupez les boutons apparentés dans des <code>role="group"</code> ou <code>role="radiogroup"</code></li>
54
+ <li>Utilisez des labels explicites pour chaque groupe d'actions</li>
55
+ <li>Assurez-vous que le focus est toujours visible</li>
56
+ </ul>
57
+ </BestPracticesSection>
58
+
59
+ <ResourcesSection>
60
+ <ul>
61
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/" target="_blank" rel="noopener noreferrer">WAI-ARIA Authoring Practices: Toolbar</a></li>
62
+ </ul>
63
+ </ResourcesSection>
64
+
65
+ <div class="mt-8">
66
+ <p>Rapport d’audit manuel : <a href="/audits/ToolbarContainer.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
67
+ <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/927" target="_blank" style={{color:'#0C41BD'}}>issue #927</a>)</p>
68
+ </div>
69
+ </AccessibilityGuideLayout>
@@ -17,7 +17,7 @@ import * as UploadWorkflowStories from './UploadWorkflow.stories';
17
17
 
18
18
  ## Événements
19
19
 
20
- Vous pouvez réagir lorsque la liste des fichiers est mise à jour en utilisant l’événement `update:modelValue`, et réagir aux erreurs de validation en utilisant l’événement `error`.
20
+ Vous pouvez réagir lorsque la liste des fichiers est mise à jour en utilisant l’événement `update:modelValue`, réagir aux erreurs de validation en utilisant l’événement `error`, et intercepter l’ouverture d’une prévisualisation en utilisant l’événement `preview` (avec le `FileItem` associé).
21
21
 
22
22
  <Canvas of={UploadWorkflowStories.Events} />
23
23
 
@@ -39,6 +39,16 @@ Vous pouvez permettre à l’utilisateur de prévisualiser le fichier qu’il vi
39
39
 
40
40
  <Canvas of={UploadWorkflowStories.WithPreviewStep} />
41
41
 
42
+ ## Texte d'information
43
+
44
+ Vous pouvez personnaliser le texte affiché dans la zone d’information du composant enfant `FileUpload` en utilisant la prop `info-text`.
45
+
46
+ <Canvas of={UploadWorkflowStories.WithInfoText} />
47
+
48
+ ## Niveau de titre
49
+
50
+ Vous pouvez configurer le niveau du titre affiché par défaut en utilisant la prop `heading-level` (rendu via `role="heading"` et `aria-level`).
51
+
42
52
  ## Exemple d'utilisation
43
53
 
44
54
  <Source
@@ -8,7 +8,7 @@ const meta: Meta<typeof UploadWorkflow> = {
8
8
  title: 'Composants/Formulaires/UploadWorkflow',
9
9
  component: UploadWorkflow,
10
10
  parameters: {
11
- controls: { exclude: ['update:modelValue', 'error'] },
11
+ controls: { exclude: ['update:modelValue', 'error', 'preview'] },
12
12
  },
13
13
  argTypes: {
14
14
  'modelValue': {
@@ -75,6 +75,36 @@ const meta: Meta<typeof UploadWorkflow> = {
75
75
  },
76
76
  },
77
77
  },
78
+ 'headingLevel': {
79
+ description: 'Niveau du titre affiché (utilise role="heading" et aria-level).',
80
+ control: {
81
+ type: 'number',
82
+ min: 1,
83
+ max: 6,
84
+ },
85
+ table: {
86
+ category: 'props',
87
+ type: {
88
+ summary: 'number',
89
+ },
90
+ defaultValue: {
91
+ summary: '4',
92
+ },
93
+ },
94
+ },
95
+ 'infoText': {
96
+ description: 'Personnalise le texte affiché dans la zone d’information du composant enfant FileUpload (slot info-text).',
97
+ control: 'text',
98
+ table: {
99
+ category: 'props',
100
+ type: {
101
+ summary: 'string',
102
+ },
103
+ defaultValue: {
104
+ summary: '\'\'',
105
+ },
106
+ },
107
+ },
78
108
  'vuetifyOptions': {
79
109
  description: 'Les options pour les composants enfants.',
80
110
  control: 'object',
@@ -186,6 +216,15 @@ const meta: Meta<typeof UploadWorkflow> = {
186
216
  },
187
217
  },
188
218
  },
219
+ 'onPreview': {
220
+ description: 'Événement émis lors de l\'ouverture d\'une prévisualisation.',
221
+ table: {
222
+ category: 'events',
223
+ type: {
224
+ summary: 'FileItem',
225
+ },
226
+ },
227
+ },
189
228
  'onUpdate:modelValue': {
190
229
  description: 'Événement émis lorsqu\'un fichier est ajouté ou supprimé.',
191
230
  table: {
@@ -267,6 +306,7 @@ export const Default: Story = {
267
306
  ],
268
307
  'onUpdate:modelValue': fn(),
269
308
  'onError': fn(),
309
+ 'onPreview': fn(),
270
310
  },
271
311
  parameters: {
272
312
  sourceCode: [
@@ -380,6 +420,7 @@ export const WithPreviewStep: Story = {
380
420
  ],
381
421
  'onUpdate:modelValue': fn(),
382
422
  'onError': fn(),
423
+ 'onPreview': fn(),
383
424
  'showFilePreview': true,
384
425
  },
385
426
  parameters: {
@@ -391,6 +432,7 @@ export const WithPreviewStep: Story = {
391
432
  v-model="files"
392
433
  :upload-list="uploadList"
393
434
  :showFilePreview="true"
435
+ @preview="onPreview"
394
436
  />
395
437
  </template>`,
396
438
 
@@ -412,6 +454,57 @@ export const WithPreviewStep: Story = {
412
454
  title: 'Facture de soin',
413
455
  },
414
456
  ]
457
+
458
+ function onPreview(fileItem: unknown) {
459
+ console.log('preview', fileItem)
460
+ }
461
+ </script>`,
462
+ },
463
+ ],
464
+ },
465
+ }
466
+
467
+ export const WithInfoText: Story = {
468
+ args: {
469
+ 'modelValue': [],
470
+ 'uploadList': [
471
+ {
472
+ id: '1',
473
+ title: 'Carte d\'identité',
474
+ },
475
+ {
476
+ id: '2',
477
+ title: 'Facture de soin',
478
+ },
479
+ ],
480
+ 'infoText': 'Vous pouvez déposer vos fichiers ici. Formats acceptés : PDF, JPG, PNG.',
481
+ 'onUpdate:modelValue': fn(),
482
+ 'onError': fn(),
483
+ 'onPreview': fn(),
484
+ },
485
+ parameters: {
486
+ sourceCode: [
487
+ {
488
+ name: 'Template',
489
+ code: `<template>
490
+ <UploadWorkflow
491
+ v-model="files"
492
+ :upload-list="uploadList"
493
+ info-text="Vous pouvez déposer vos fichiers ici. Formats acceptés : PDF, JPG, PNG."
494
+ />
495
+ </template>`,
496
+ },
497
+ {
498
+ name: 'Script',
499
+ code: `<script setup lang="ts">
500
+ import { ref } from 'vue'
501
+ import { UploadWorkflow } from '@cnamts/synapse'
502
+
503
+ const files = ref([])
504
+ const uploadList = [
505
+ { id: '1', title: 'Carte d\\'identité' },
506
+ { id: '2', title: 'Facture de soin' },
507
+ ]
415
508
  </script>`,
416
509
  },
417
510
  ],
@@ -468,14 +561,17 @@ export const Events: Story = {
468
561
  {
469
562
  id: 'ID',
470
563
  title: 'Carte d\'identité',
564
+ showPreviewBtn: true,
471
565
  },
472
566
  {
473
567
  id: 'Bill',
474
568
  title: 'Facture de soin',
569
+ showPreviewBtn: true,
475
570
  },
476
571
  ],
477
572
  'onUpdate:modelValue': fn(),
478
573
  'onError': fn(),
574
+ 'onPreview': fn(),
479
575
  },
480
576
  render: (args) => {
481
577
  return {
@@ -517,6 +613,7 @@ export const Events: Story = {
517
613
  :upload-list="args.uploadList"
518
614
  :vuetify-options="options"
519
615
  @error="[showError, args.onError]"
616
+ @preview="args.onPreview"
520
617
  @update:modelValue="[valueUpdated, args['onUpdate:modelValue']]"
521
618
  />
522
619
  <VSnackbar
@@ -549,6 +646,7 @@ export const Events: Story = {
549
646
  :upload-list="uploadList"
550
647
  vuetify-options="options"
551
648
  @onError="showError"
649
+ @onPreview="onPreview"
552
650
  @onUpdate:modelValue="valueUpdated"
553
651
  />
554
652
  </template>`,
@@ -564,10 +662,12 @@ export const Events: Story = {
564
662
  {
565
663
  id: 'ID',
566
664
  title: 'Carte d'identité',
665
+ showPreviewBtn: true,
567
666
  },
568
667
  {
569
668
  id: 'Bill',
570
669
  title: 'Facture de soin',
670
+ showPreviewBtn: true,
571
671
  },
572
672
  ]
573
673
 
@@ -581,13 +681,13 @@ export const Events: Story = {
581
681
  }
582
682
  }
583
683
 
584
- function showError (errors: string[]) {
684
+ function showError(errors: string[]) {
585
685
  snackbarText.value = errors.join(', ')
586
686
  snackbarColor.value = 'error';
587
687
  snackbar.value = true
588
688
  }
589
689
 
590
- function valueUpdated (items: {fileName: string, file: File}[]) {
690
+ function valueUpdated(items: { fileName: string, file: File }[]) {
591
691
  if(items.length === 0) {
592
692
  return
593
693
  }
@@ -595,6 +695,10 @@ export const Events: Story = {
595
695
  snackbarColor.value = 'success';
596
696
  snackbar.value = true
597
697
  }
698
+
699
+ function onPreview(fileItem: unknown) {
700
+ console.log('preview', fileItem)
701
+ }
598
702
  </script>`,
599
703
  },
600
704
  ],
@@ -4,7 +4,7 @@
4
4
  } from '@/composables/useCustomizableOptions'
5
5
  import { useWidthable, type Widthable } from '@/composables/widthable'
6
6
  import { isRequired } from '@/utils/rules/isRequired'
7
- import { computed, reactive, ref, toRef, watch } from 'vue'
7
+ import { computed, ref, toRef } from 'vue'
8
8
  import DialogBox from '../DialogBox/DialogBox.vue'
9
9
  import FileList from '../FileList/FileList.vue'
10
10
  import FilePreview from '../FilePreview/FilePreview.vue'
@@ -22,37 +22,35 @@
22
22
  uploadList: UploadItem[]
23
23
  sectionTitle?: string
24
24
  showFilePreview?: boolean
25
+ infoText?: string
26
+ headingLevel?: number
25
27
  locales?: typeof defaultLocales
26
28
  }
27
29
  >(),
28
30
  {
29
31
  sectionTitle: undefined,
30
32
  showFilePreview: false,
33
+ infoText: '',
34
+ headingLevel: 4,
31
35
  locales: () => defaultLocales,
32
36
  },
33
37
  )
34
38
 
35
39
  const emits = defineEmits<{
36
40
  (e: 'error', value: string[]): void
41
+ (e: 'preview', value: FileItem): void
37
42
  (e: 'update:modelValue', value: SelectedFile[]): void
38
43
  }>()
39
44
 
40
45
  const selectedFiles = defineModel<SelectedFile[]>({
41
46
  type: Array,
42
- default: reactive([]),
47
+ default: () => [],
43
48
  })
44
- watch(
45
- selectedFiles,
46
- (value) => {
47
- emits('update:modelValue', value)
48
- },
49
- { deep: true },
50
- )
51
49
 
52
50
  const { widthStyles } = useWidthable(props)
53
51
  const options = useCustomizableOptions(config, props)
54
52
 
55
- const fileUpload = ref<typeof FileUpload>()
53
+ const fileUpload = ref<InstanceType<typeof FileUpload>>()
56
54
  const { selectItems, selectedItem } = useFileUploadJourney(
57
55
  toRef(props, 'uploadList'),
58
56
  )
@@ -65,19 +63,21 @@
65
63
  = useFileList(selectedFiles, toRef(props, 'uploadList'))
66
64
 
67
65
  // handle FileList
68
- let inlineSelectedItemId: string | undefined = undefined
66
+ const inlineSelectedItemId = ref<string | undefined>(undefined)
69
67
  function uploadInline(item: FileItem) {
70
- inlineSelectedItemId = item.id
68
+ inlineSelectedItemId.value = item.id
71
69
 
72
- fileUpload.value!.fileInput!.click()
70
+ fileUpload.value?.openFileDialog()
73
71
  }
74
72
  function previewFile(file: FileItem & { file?: File }) {
73
+ emits('preview', file)
75
74
  showPreviewDialog.value = true
76
75
  fileToPreview.value = file.file
77
76
  }
78
77
 
79
78
  // handle FileUpload
80
79
  const uploadedFiles = ref<File[]>([])
80
+ const uploadedFile = computed(() => uploadedFiles.value[0])
81
81
 
82
82
  const showFileUpload = computed(
83
83
  () => (
@@ -88,10 +88,10 @@
88
88
 
89
89
  function fileSelected(files: File[]) {
90
90
  const fileId
91
- = inlineSelectedItemId ?? (props.uploadList.length === 1
91
+ = inlineSelectedItemId.value ?? (props.uploadList.length === 1
92
92
  ? props.uploadList[0]!.id
93
93
  : undefined)
94
- inlineSelectedItemId = undefined
94
+ inlineSelectedItemId.value = undefined
95
95
 
96
96
  if (props.showFilePreview || fileId === undefined) {
97
97
  showSelectDialog.value = true
@@ -105,22 +105,22 @@
105
105
 
106
106
  function uploadError(errors: string[]) {
107
107
  emits('error', errors)
108
- if (!inlineSelectedItemId) {
108
+ if (!inlineSelectedItemId.value) {
109
109
  return
110
110
  }
111
- setItemOnError(inlineSelectedItemId)
112
- inlineSelectedItemId = undefined
111
+ setItemOnError(inlineSelectedItemId.value)
112
+ inlineSelectedItemId.value = undefined
113
113
  }
114
114
 
115
115
  // handle DialogBox
116
116
  const showSelectDialog = ref(false)
117
117
 
118
118
  function dialogConfirm() {
119
- if (!selectedItem.value) {
119
+ if (!selectedItem.value || !uploadedFile.value) {
120
120
  return
121
121
  }
122
122
 
123
- addOrReplaceFile(uploadedFiles.value[0]!, selectedItem.value)
123
+ addOrReplaceFile(uploadedFile.value, selectedItem.value)
124
124
 
125
125
  showSelectDialog.value = false
126
126
  selectedItem.value = undefined
@@ -137,9 +137,13 @@
137
137
  class="sy-upload-workflow white"
138
138
  >
139
139
  <slot name="title">
140
- <h4 class="text-h6 mb-2">
140
+ <div
141
+ :aria-level="props.headingLevel"
142
+ role="heading"
143
+ class="text-h6 mb-2"
144
+ >
141
145
  {{ title }}
142
- </h4>
146
+ </div>
143
147
  </slot>
144
148
 
145
149
  <FileList
@@ -159,7 +163,14 @@
159
163
  v-model="uploadedFiles"
160
164
  @error="uploadError"
161
165
  @update:model-value="fileSelected"
162
- />
166
+ >
167
+ <template
168
+ v-if="props.infoText"
169
+ #info-text
170
+ >
171
+ {{ props.infoText }}
172
+ </template>
173
+ </FileUpload>
163
174
  </Transition>
164
175
 
165
176
  <DialogBox
@@ -195,7 +206,7 @@
195
206
  <FilePreview
196
207
  v-if="showFilePreview"
197
208
  :options="options.filePreview"
198
- :file="uploadedFiles[0]"
209
+ :file="uploadedFile"
199
210
  />
200
211
  </DialogBox>
201
212
 
@@ -0,0 +1,12 @@
1
+ import { Meta, Story } from '@storybook/addon-docs';
2
+ import * as Stories from '../UploadWorkflow.stories.ts';
3
+ import '@/stories/styles/shared.css';
4
+
5
+ <Meta of={Stories} />
6
+
7
+ <div className="header">
8
+ <h1>Accessibilité</h1>
9
+ <p>Cette page sera bientôt disponible</p>
10
+ </div>
11
+
12
+ <br />
@@ -1,5 +1,6 @@
1
1
  import { describe, it, expect, vi } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
+ import { nextTick } from 'vue'
3
4
 
4
5
  import UploadWorkflow from '../UploadWorkflow.vue'
5
6
  import { locales as fileListLocales } from '@/components/FileList/UploadItem/locales'
@@ -34,6 +35,24 @@ describe('UploadWorkflow', () => {
34
35
  expect(wrapper.find('.sy-file-upload').isVisible()).toBeTruthy()
35
36
  })
36
37
 
38
+ it('renders default title with role heading and configured aria-level', () => {
39
+ const wrapper = mount(UploadWorkflow, {
40
+ props: {
41
+ uploadList: [
42
+ {
43
+ id: 'ID',
44
+ title: 'Carte d\'identité',
45
+ },
46
+ ],
47
+ headingLevel: 2,
48
+ },
49
+ })
50
+
51
+ const title = wrapper.find('[role="heading"]')
52
+ expect(title.exists()).toBe(true)
53
+ expect(title.attributes('aria-level')).toBe('2')
54
+ })
55
+
37
56
  it('shows the file in the list when set with the list button', async () => {
38
57
  const wrapper = mount(UploadWorkflow, {
39
58
  props: {
@@ -237,6 +256,35 @@ describe('UploadWorkflow', () => {
237
256
 
238
257
  await wrapper.find('.file-item__action-preview').trigger('click')
239
258
 
259
+ expect(wrapper.emitted('preview')).toBeTruthy()
260
+ expect(wrapper.emitted('preview')?.[0]?.[0]).toMatchObject({
261
+ id: 'CERFA1',
262
+ title: 'CERFA 1',
263
+ showPreviewBtn: true,
264
+ })
265
+
240
266
  expect(wrapper.find('.sy-file-preview img').exists()).toBeTruthy()
241
267
  })
268
+
269
+ it('render custom infoText in FileUpload info-text slot', async () => {
270
+ const wrapper = mount(UploadWorkflow, {
271
+ props: {
272
+ modelValue: [],
273
+ uploadList: [
274
+ {
275
+ id: 'ID',
276
+ title: 'Carte d\'identité',
277
+ },
278
+ ],
279
+ infoText: 'Texte personnalisé',
280
+ },
281
+ })
282
+
283
+ await nextTick()
284
+
285
+ const fileUpload = wrapper.find('.sy-file-upload')
286
+ expect(fileUpload.exists()).toBe(true)
287
+
288
+ expect(fileUpload.text()).toContain('Texte personnalisé')
289
+ })
242
290
  })
@@ -8,12 +8,16 @@ exports[`UploadWorkflow > render the upload list 1`] = `
8
8
  "
9
9
  style="width: 100%;"
10
10
  >
11
- <h4 class="
12
- mb-2
13
- text-h6
14
- ">
11
+ <div
12
+ aria-level="4"
13
+ class="
14
+ mb-2
15
+ text-h6
16
+ "
17
+ role="heading"
18
+ >
15
19
  Documents à nous transmettre
16
- </h4>
20
+ </div>
17
21
  <ul
18
22
  class="upload-list"
19
23
  style="width: 100%;"
@@ -8,6 +8,10 @@ export default function useFileList(
8
8
  ) {
9
9
  const errorSelectedFiles = ref<string[]>([])
10
10
 
11
+ function notifySelectedFilesChanged() {
12
+ selectedFiles.value = selectedFiles.value.slice()
13
+ }
14
+
11
15
  function removeFromErrorList(fileId: string) {
12
16
  const errorIndex = errorSelectedFiles.value.findIndex(item => item === fileId)
13
17
  if (errorIndex !== -1) {
@@ -22,12 +26,14 @@ export default function useFileList(
22
26
  function resetFile(fileItem: FileListItem | SelectedFile) {
23
27
  const itemIndex = selectedFiles.value.findIndex(item => item.id === fileItem.id)
24
28
  selectedFiles.value.splice(itemIndex, 1)
29
+ notifySelectedFilesChanged()
25
30
  }
26
31
 
27
32
  function replaceFile(file: File, item: SelectedFile, state: FileState = 'success') {
28
33
  item.file = file
29
34
  item.fileName = file.name
30
35
  item.state = state
36
+ notifySelectedFilesChanged()
31
37
  }
32
38
 
33
39
  function addOrReplaceFile(file: File, fileId: string, state: FileState = 'success') {
@@ -52,6 +58,7 @@ export default function useFileList(
52
58
  fileName: file.name,
53
59
  file,
54
60
  })
61
+ notifySelectedFilesChanged()
55
62
  removeFromErrorList(fileId)
56
63
  }
57
64
  }
@@ -2,6 +2,7 @@
2
2
  import { type CustomizableOptions } from '@/composables/useCustomizableOptions'
3
3
  import { checkIcon, croixIcon } from '@/constants/icons'
4
4
  import { ref } from 'vue'
5
+ import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
5
6
 
6
7
  withDefaults(defineProps<CustomizableOptions & {
7
8
  items1?: string[]
@@ -31,7 +32,7 @@
31
32
  style="display: flex;"
32
33
  class="d-flex check-text"
33
34
  >
34
- <VIcon :icon="iconCheck" />
35
+ <SyIcon :icon="iconCheck" />
35
36
  <p class="font-weight-bold mb-2">
36
37
  À faire
37
38
  </p>
@@ -54,7 +55,7 @@
54
55
  class="m-2 p-2 v-col-auto not-check"
55
56
  >
56
57
  <div class="d-flex not-check-text">
57
- <VIcon :icon="iconCross" />
58
+ <SyIcon :icon="iconCross" />
58
59
  <p class="font-weight-bold mb-2">
59
60
  À ne pas faire
60
61
  </p>
@@ -6,6 +6,7 @@
6
6
  import { mdiAccount, mdiLoginVariant } from '@mdi/js'
7
7
  import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
8
8
  import { defaultOptions } from './config'
9
+ import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
9
10
 
10
11
  type MenuItem = { text: string, value: string, link?: string, to?: RouteLocationRaw }
11
12
 
@@ -55,14 +56,14 @@
55
56
  class="user-menu-btn"
56
57
  >
57
58
  <template #append-icon>
58
- <VIcon
59
+ <SyIcon
59
60
  v-if="!hideUserIcon"
61
+ decorative
62
+ :icon="mdiAccount"
60
63
  :size="isMobileView ? 'x-large' : 'default'"
61
64
  class="vd-user-icon mr-0 pa-2"
62
65
  v-bind="options['icon']"
63
- >
64
- {{ mdiAccount }}
65
- </VIcon>
66
+ />
66
67
  </template>
67
68
  <template #footer-list-item>
68
69
  <slot>
@@ -73,10 +74,11 @@
73
74
  @click="$emit('logout')"
74
75
  >
75
76
  <div class="d-flex">
76
- <VIcon
77
+ <SyIcon
77
78
  :icon="mdiLoginVariant"
78
79
  class="mr-4"
79
80
  v-bind="options['logoutIcon']"
81
+ decorative
80
82
  />
81
83
  <VListItemTitle class="logout">
82
84
  {{ props.logoutText }}
@@ -0,0 +1,12 @@
1
+ import { Meta, Story } from '@storybook/addon-docs';
2
+ import * as Stories from '../UserMenuBtn.stories.ts';
3
+ import '@/stories/styles/shared.css';
4
+
5
+ <Meta of={Stories} />
6
+
7
+ <div className="header">
8
+ <h1>Accessibilité</h1>
9
+ <p>Cette page sera bientôt disponible</p>
10
+ </div>
11
+
12
+ <br />