@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
@@ -42,8 +42,12 @@ const meta = {
42
42
  detail: `{
43
43
  optionalDocument: 'Document facultatif',
44
44
  see: 'Voir',
45
+ import: 'Importer',
45
46
  delete: 'Supprimer',
46
47
  uploading: 'En cours',
48
+ importLabel: (title: string) => string,
49
+ seeLabel: (title: string) => string,
50
+ deleteLabel: (title: string) => string,
47
51
  success: 'Téléchargé',
48
52
  error: 'Erreur',
49
53
  errorOccurred: 'Une erreur est survenue pendant le téléchargement.',
@@ -157,6 +161,44 @@ const meta = {
157
161
  },
158
162
  },
159
163
  },
164
+ 'seeLabel': {
165
+ description: 'Label du bouton de prévisualisation',
166
+ control: 'text',
167
+ table: {
168
+ category: 'props',
169
+ type: {
170
+ summary: 'string',
171
+ },
172
+ defaultValue: {
173
+ summary: 'Voir le fichier',
174
+ },
175
+ },
176
+ },
177
+ 'deleteLabel': {
178
+ description: 'Label du bouton de suppression',
179
+ control: 'text',
180
+ table: {
181
+ category: 'props',
182
+ type: { summary: 'string',
183
+ },
184
+ defaultValue: {
185
+ summary: 'Supprimer le fichier',
186
+ },
187
+ },
188
+ },
189
+ 'importLabel': {
190
+ description: 'Label du bouton d\'upload',
191
+ control: 'text',
192
+ table: {
193
+ category: 'props',
194
+ type: {
195
+ summary: 'string',
196
+ },
197
+ defaultValue: {
198
+ summary: 'Importer le fichier',
199
+ },
200
+ },
201
+ },
160
202
  },
161
203
  parameters: {
162
204
  controls: {
@@ -193,6 +235,9 @@ export const Default: Story = {
193
235
  onPreview: fn(),
194
236
  },
195
237
  parameters: {
238
+ a11y: {
239
+ disable: false,
240
+ },
196
241
  sourceCode: [
197
242
  {
198
243
  name: 'Template',
@@ -263,7 +308,7 @@ export const States: Story = {
263
308
  },
264
309
  parameters: {
265
310
  a11y: {
266
- disable: true,
311
+ disable: false,
267
312
  },
268
313
  sourceCode: [
269
314
  {
@@ -335,6 +380,9 @@ export const OptionalDocument: Story = {
335
380
  onPreview: fn(),
336
381
  },
337
382
  parameters: {
383
+ a11y: {
384
+ disable: false,
385
+ },
338
386
  sourceCode: [
339
387
  {
340
388
  name: 'Template',
@@ -411,6 +459,9 @@ export const Actions: Story = {
411
459
  onPreview: fn(),
412
460
  },
413
461
  parameters: {
462
+ a11y: {
463
+ disable: false,
464
+ },
414
465
  sourceCode: [
415
466
  {
416
467
  name: 'Template',
@@ -508,6 +559,9 @@ export const Customization: Story = {
508
559
  `,
509
560
  }),
510
561
  parameters: {
562
+ a11y: {
563
+ disable: false,
564
+ },
511
565
  sourceCode: [
512
566
  {
513
567
  name: 'Template',
@@ -32,6 +32,9 @@
32
32
  showPreviewBtn?: boolean
33
33
  tag?: string
34
34
  locales?: typeof defaultLocales
35
+ seeLabel?: string
36
+ deleteLabel?: string
37
+ importLabel?: string
35
38
  }>(), {
36
39
  fileName: undefined,
37
40
  message: undefined,
@@ -43,6 +46,9 @@
43
46
  showPreviewBtn: false,
44
47
  tag: 'div',
45
48
  locales: () => defaultLocales,
49
+ seeLabel: defaultLocales.see,
50
+ deleteLabel: defaultLocales.delete,
51
+ importLabel: defaultLocales.import,
46
52
  })
47
53
 
48
54
  defineSlots<{
@@ -118,10 +124,12 @@
118
124
  {{ message ?? locales.optionalDocument }}
119
125
  </div>
120
126
  <div
121
- v-if="state === 'error'"
122
127
  class="file-item__error-message text-error"
128
+ role="status"
123
129
  >
124
- {{ locales.error }}
130
+ <div v-if="state === 'error'">
131
+ {{ locales.error }}
132
+ </div>
125
133
  </div>
126
134
  </div>
127
135
  </div>
@@ -130,9 +138,10 @@
130
138
  v-if="(state === 'initial' || state == 'error') && showUploadBtn"
131
139
  class="file-item__action file-item__action-upload text-primary"
132
140
  variant="text"
141
+ :aria-label="`${locales.import} ${title}`"
133
142
  @click="$emit('upload', itemId)"
134
143
  >
135
- <span>Importer</span>
144
+ <span>{{ importLabel }}</span>
136
145
  <template #prepend>
137
146
  <SyIcon
138
147
  color="primary"
@@ -145,9 +154,10 @@
145
154
  v-if="state === 'success' && showPreviewBtn"
146
155
  class="file-item__action file-item__action-preview text-primary"
147
156
  variant="text"
157
+ :aria-label="`${locales.see} ${fileName}`"
148
158
  @click="$emit('preview', itemId)"
149
159
  >
150
- <span>{{ locales.see }}</span>
160
+ <span>{{ seeLabel }}</span>
151
161
  <template #prepend>
152
162
  <SyIcon
153
163
  color="primary"
@@ -160,9 +170,10 @@
160
170
  v-if="state === 'success' && showDeleteBtn"
161
171
  class="file-item__action file-item__action-delete text-error"
162
172
  variant="text"
173
+ :aria-label="`${locales.delete} ${fileName}`"
163
174
  @click="$emit('delete', itemId)"
164
175
  >
165
- <span>{{ locales.delete }}</span>
176
+ <span>{{ deleteLabel }}</span>
166
177
  <template #prepend>
167
178
  <SyIcon
168
179
  color="error"
@@ -188,6 +199,7 @@
188
199
  height="7"
189
200
  color="primary"
190
201
  rounded="true"
202
+ :aria-label="title ? `Chargement de ${title}` : 'Chargement en cours'"
191
203
  />
192
204
  </div>
193
205
  </component>
@@ -1,7 +1,8 @@
1
1
  export const locales = {
2
2
  optionalDocument: 'Document facultatif',
3
- see: 'Voir',
4
- delete: 'Supprimer',
3
+ see: 'Voir le fichier',
4
+ delete: 'Supprimer le fichier',
5
+ import: 'Importer le fichier',
5
6
  uploading: 'En cours',
6
7
  success: 'Téléchargé',
7
8
  error: 'Erreur',
@@ -1,12 +1,63 @@
1
- import { Meta, Story } from '@storybook/addon-docs';
1
+ import { Meta, Primary } from '@storybook/addon-docs';
2
2
  import * as Stories from '../FileList.stories.ts';
3
- import '@/stories/styles/shared.css';
3
+ import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
4
+ import {
5
+ AccessibilityGuideLayout,
6
+ CriteriaSection,
7
+ CriteriaCard,
8
+ DemoSection,
9
+ BestPracticesSection,
10
+ ResourcesSection,
11
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
4
12
 
5
13
  <Meta of={Stories} />
6
14
 
7
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- <p>Cette page sera bientôt disponible</p>
10
- </div>
15
+ <AccessibilityGuideLayout
16
+ componentName="FileList"
17
+ iconSrc={AccessibilityIcon}
18
+ >
19
+ <CriteriaSection>
20
+ <CriteriaCard icon="🔍" title="Structure sémantique">
21
+ <ul>
22
+ <li><strong>Formattage sous forme de liste </strong> : Utilisation de balises HTML sémantiques pour structurer les éléments de la liste de fichiers.</li>
23
+ <li><strong>Boutons</strong> : Utilisation de <code>&lt;button&gt;</code> pour les actions associées à chaque fichier, avec des étiquettes claires qui reprennent l'action et le nom du fichier.</li>
24
+ <li><strong>Aria-label</strong>: On utilise les méthodes <code>importAriaLabel()</code> pour générer les etiquettes ARIA des champs avec le titre et <code>seeAriaLabel()</code> et <code>deleteAriaLabel()</code> pour les étiquettes ARIA avec le nom du fichier.</li>
25
+ <li><strong>SeeLabel, ImportLabel, DeleteLabel </strong> : Utilisation de ces propriétés pour fournir des étiquettes claires et descriptives pour les actions associées à chaque fichier.</li>
11
26
 
12
- <br />
27
+ </ul>
28
+ </CriteriaCard>
29
+
30
+
31
+ <CriteriaCard icon="⌨️" title="Navigation clavier complète">
32
+ <ul>
33
+ <li><strong>Navigation entre les éléments</strong> : Utilisation des touches Tab et Shift+Tab pour naviguer entre les fichiers et les actions associées.</li>
34
+ <li><strong>Activation des actions</strong> : Utilisation de la touche Entrée ou Espace pour activer les boutons d'action (télécharger, supprimer, etc.).</li>
35
+ </ul>
36
+ </CriteriaCard>
37
+
38
+ <CriteriaCard icon="📱" title="États et retours d'information">
39
+ <ul>
40
+ <li><strong>Indication de l'état de téléchargement</strong> : Utilisation d'icônes ou de messages pour indiquer si un fichier est en cours de téléchargement, téléchargé avec succès ou en échec.</li>
41
+ <li><strong>Indication de l'état d'erreur</strong> : Affichage d'un message d'erreur dans un élément avec le rôle <code>status</code> pour informer les utilisateurs de l'erreur.</li>
42
+ </ul>
43
+ </CriteriaCard>
44
+
45
+ <DemoSection componentName="FileList">
46
+ <Primary />
47
+ </DemoSection>
48
+
49
+ <BestPracticesSection>
50
+ <ul>
51
+ <li><strong>Labels clairs et descriptifs</strong> : Assurez-vous que les titres des fichiers requis sont assez descriptifs pour que les utilisateurs comprennent facilement ce qui est attendu d'eux.</li>
52
+ <li><strong>Progression</strong> : Fournissez une indication de la progression du téléchargement pour les fichiers volumineux.</li>
53
+ </ul>
54
+ </BestPracticesSection>
55
+ </CriteriaSection>
56
+ <ResourcesSection>
57
+ <ul>
58
+ <li><a href="https://developer.mozilla.org/fr/docs/Web/HTML/Reference/Elements/button">Documentation MDN sur les boutons</a></li>
59
+ <li><a href="https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/Reference/Roles/status_role">Documentation MDN sur le rôle ARIA "status"</a></li>
60
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/status_role">MDN documentation on ARIA "status" role</a></li>
61
+ </ul>
62
+ </ResourcesSection>
63
+ </AccessibilityGuideLayout>
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { useWidthable, type Widthable } from '@/composables/widthable'
3
- import { ref, useId, watch } from 'vue'
3
+ import { ref, useAttrs, useId, watch } from 'vue'
4
4
  import { useTheme } from 'vuetify'
5
5
  import FileUploadContent, { type FileUploadContentSlots } from './FileUploadContent.vue'
6
6
  import { locales as defaultLocales } from './locales'
@@ -33,6 +33,8 @@
33
33
  default(): void
34
34
  } & FileUploadContentSlots>()
35
35
 
36
+ const attrs = useAttrs()
37
+
36
38
  const dragover = ref(false)
37
39
  const id = 'file-upload-' + useId()
38
40
  const dropZone = ref<HTMLElement | null>(null)
@@ -41,6 +43,9 @@
41
43
  const isDarkMode = useTheme().current.value.dark
42
44
 
43
45
  function openFileDialog() {
46
+ if (props.disabled) {
47
+ return
48
+ }
44
49
  fileInput.value?.click()
45
50
  }
46
51
 
@@ -69,7 +74,7 @@
69
74
  files = files.slice(0, 1)
70
75
  }
71
76
  const { errors, validFiles } = validateFiles(
72
- files, props.fileSizeMax, props.allowedExtensions, props.fileSizeUnits,
77
+ files, props.fileSizeMax, props.allowedExtensions, props.fileSizeUnits, props.locales,
73
78
  )
74
79
 
75
80
  if (errors.length) {
@@ -98,61 +103,80 @@
98
103
  ;(e.target as HTMLInputElement).value = ''
99
104
  }
100
105
  </script>
101
- <!-- eslint-disable vuejs-accessibility/no-static-element-interactions -->
106
+
102
107
  <template>
103
- <label
104
- ref="dropZone"
105
- :for="id"
106
- :class="[
107
- {
108
- dragover: dragover,
109
- 'sy-file-upload--disabled': disabled,
110
- 'dark-mode': isDarkMode,
111
- },
112
- ]"
113
- :style="widthStyles"
114
- class="sy-file-upload d-block pa-4"
115
- @dragover.prevent="dragover = true"
116
- @dragleave="dragover = false"
108
+ <div
109
+ class="sy-file-upload-wrapper"
117
110
  >
118
111
  <input
119
112
  :id="id"
120
113
  ref="fileInput"
121
114
  type="file"
122
- :disabled="disabled"
123
- :multiple="multiple"
115
+ tabindex="-1"
116
+ aria-hidden="true"
117
+ :disabled="disabled ? true : undefined"
118
+ :multiple="multiple ? true : undefined"
124
119
  :accept="allowedExtensions.map(el=>`.${el}`).join(', ')"
125
120
  class="sy-file-upload-input"
126
121
  @change="onFileChange"
127
122
  >
128
- <slot>
129
- <FileUploadContent
130
- :allowed-extensions="allowedExtensions"
131
- :multiple="multiple"
132
- :file-size-max="fileSizeMax"
133
- :file-size-units="fileSizeUnits"
134
- >
135
- <template
136
- v-for="(_, slotName) in $slots"
137
- #[slotName]="slotProps"
123
+ <div
124
+ ref="dropZone"
125
+ :aria-disabled="disabled ? true : undefined"
126
+ :title="locales.fileUploadTitle"
127
+ role="button"
128
+ :tabindex="disabled ? -1 : 0"
129
+ :class="[
130
+ {
131
+ dragover: dragover,
132
+ 'sy-file-upload--disabled': disabled,
133
+ 'dark-mode': isDarkMode,
134
+ },
135
+ ]"
136
+ :style="widthStyles"
137
+ class="sy-file-upload d-block pa-4"
138
+ v-bind="attrs"
139
+ @click="openFileDialog"
140
+ @keydown.enter.prevent="openFileDialog"
141
+ @keydown.space.prevent="openFileDialog"
142
+ @dragover.prevent="dragover = true"
143
+ @dragleave="dragover = false"
144
+ @drop="dragover = false"
145
+ >
146
+ <slot>
147
+ <FileUploadContent
148
+ :allowed-extensions="allowedExtensions"
149
+ :multiple="multiple"
150
+ :file-size-max="fileSizeMax"
151
+ :file-size-units="fileSizeUnits"
152
+ :locales="locales"
138
153
  >
139
- <slot
140
- :name="slotName"
141
- v-bind="slotProps || {}"
142
- />
143
- </template>
144
- </FileUploadContent>
145
- </slot>
146
- </label>
154
+ <template
155
+ v-for="(_, slotName) in $slots"
156
+ #[slotName]="slotProps"
157
+ >
158
+ <slot
159
+ :name="slotName"
160
+ v-bind="slotProps || {}"
161
+ />
162
+ </template>
163
+ </FileUploadContent>
164
+ </slot>
165
+ </div>
166
+ </div>
147
167
  </template>
148
168
 
149
169
  <style lang="scss" scoped>
150
170
  @use '@/assets/tokens';
151
171
 
172
+ .sy-file-upload-wrapper {
173
+ display: contents;
174
+ }
175
+
152
176
  .sy-file-upload {
153
177
  cursor: pointer;
154
178
  position: relative;
155
- border: 1px dashed tokens.$colors-border-accent;
179
+ border: 1px dashed tokens.$colors-border-accent-primary;
156
180
  border-radius: tokens.$radius-rounded-lg;
157
181
  transition: background 0.25s;
158
182
 
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { calcHumanFileSize } from '@/utils/calcHumanFileSize'
3
- import { locales } from './locales'
3
+ import { locales as defaultLocales } from './locales'
4
4
  import { mdiCloudUpload } from '@mdi/js'
5
5
  import { computed } from 'vue'
6
6
  import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
@@ -10,6 +10,7 @@
10
10
  fileSizeUnits: Array<string>
11
11
  fileSizeMax: number
12
12
  multiple: boolean
13
+ locales: typeof defaultLocales
13
14
  }>()
14
15
 
15
16
  export interface FileUploadContentSlots {
@@ -60,7 +61,7 @@
60
61
  </span>
61
62
 
62
63
  <span
63
- class="sy-file-upload-btn bg-primary text-white elevation-2"
64
+ class="sy-file-upload-btn bg-primary text-white"
64
65
  >
65
66
  <slot name="button-text">
66
67
  {{ locales.chooseFile(multiple) }}
@@ -1,12 +1,55 @@
1
1
  import { Meta, Story } from '@storybook/addon-docs';
2
2
  import * as Stories from '../FileUpload.stories.ts';
3
- import '@/stories/styles/shared.css';
3
+ import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg';
4
+
5
+ import {
6
+ AccessibilityGuideLayout,
7
+ CriteriaSection,
8
+ CriteriaCard,
9
+ DemoSection,
10
+ BestPracticesSection,
11
+ ResourcesSection,
12
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
13
+
4
14
 
5
15
  <Meta of={Stories} />
6
16
 
7
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- <p>Cette page sera bientôt disponible</p>
10
- </div>
17
+ <AccessibilityGuideLayout
18
+ componentName="FileUpload"
19
+ iconSrc={AccessibilityIcon}
20
+ >
21
+ <CriteriaSection>
22
+ <CriteriaCard icon="🔍" title="Structure sémantique">
23
+ <ul>
24
+ <li><strong>Utilisation d'un boutton</strong> : Le composant utilise un élément avec le role <code>button</code> pour déclencher l'ouverture du sélecteur de fichiers. Ceci permet de gérer l'interaction avec le clavier, le clic souris ainsi que le glisser-déposer simultanément tout en gardant une bonne sémantique.</li>
25
+ <li><strong>Disabled</strong> : Utilisation de l'attribut <code>disabled</code> sur le bouton si le champ est désactivé.</li>
26
+ </ul>
27
+ </CriteriaCard>
28
+
29
+ <CriteriaCard icon="⌨️" title="Navigation clavier">
30
+ <ul>
31
+ <li><strong>Navigation au clavier</strong> : La zone d'upload de fichier est focusable, l'utilisateur peut utiliser le clic souris, le clavier ainsi que le glisser-déposer.</li>
32
+ </ul>
33
+ </CriteriaCard>
34
+ </CriteriaSection>
35
+
36
+ <DemoSection componentName="FileUpload">
37
+ <Story name="Default" />
38
+ </DemoSection>
11
39
 
40
+ <BestPracticesSection>
41
+ <ul>
42
+ <li><strong>Utiliser dans une balise de formulaire</strong> : Intégrer le composant dans une balise <code>form</code> ou le composant <code>SyForm</code> pour la sémantique et l'accessibilité.</li>
43
+ <li><strong>Fournir des messages d'erreur clairs</strong> : Utiliser des messages d'erreur explicites et accessibles pour informer les utilisateurs des problèmes de téléchargement.</li>
44
+ <li><strong>Gérer les états de téléchargement</strong> : Fournir des indications visuelles et textuelles pour les différents états de téléchargement, y compris les erreurs et les succès.</li>
45
+ </ul>
46
+ </BestPracticesSection>
12
47
 
48
+ <ResourcesSection>
49
+ <ul>
50
+ <li><a href="https://react.carbondesignsystem.com/?path=/docs/components-fileuploader--overview" target="_blank" rel="noopener noreferrer">Design system d'IBM</a></li>
51
+ <li><a href="https://developer.mozilla.org/fr/docs/Web/HTML/Reference/Elements/input/file" target="_blank" rel="noopener noreferrer">MDN: input type="file"</a></li>
52
+ <li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
53
+ </ul>
54
+ </ResourcesSection>
55
+ </AccessibilityGuideLayout>
@@ -1,4 +1,5 @@
1
1
  export const locales = {
2
+ fileUploadTitle: 'Téléverser un fichier',
2
3
  or: 'Ou',
3
4
  chooseFile: (multiple: boolean) => multiple ? 'Choisir des fichiers' : 'Choisir un fichier',
4
5
  infoText: (max: string, ext: string[]): string =>
@@ -48,13 +48,13 @@ describe('FileUpload', () => {
48
48
  },
49
49
  })
50
50
 
51
- const label = wrapper.find('label')
51
+ const label = wrapper.find('.sy-file-upload')
52
52
  const labelClasses = label.classes()
53
53
 
54
- await wrapper.find('input').trigger('dragover')
54
+ await wrapper.find('.sy-file-upload').trigger('dragover')
55
55
  expect(label.classes()).not.toEqual(labelClasses)
56
56
 
57
- await wrapper.find('input').trigger('dragleave')
57
+ await wrapper.find('.sy-file-upload').trigger('dragleave')
58
58
  expect(label.classes()).toEqual(labelClasses)
59
59
  })
60
60
 
@@ -68,7 +68,7 @@ describe('FileUpload', () => {
68
68
 
69
69
  const file: File = new File([''], 'filename.pdf', { type: 'application/pdf' })
70
70
 
71
- await wrapper.find('input').trigger('drop', {
71
+ await wrapper.find('.sy-file-upload').trigger('drop', {
72
72
  dataTransfer: {
73
73
  files: [file],
74
74
  },
@@ -89,13 +89,13 @@ describe('FileUpload', () => {
89
89
 
90
90
  const file: File = new File([''], 'filename.pdf', { type: 'application/pdf' })
91
91
 
92
- await wrapper.find('label').trigger('drop', {
92
+ await wrapper.find('.sy-file-upload').trigger('drop', {
93
93
  dataTransfer: {
94
94
  files: [file],
95
95
  },
96
96
  })
97
97
 
98
- await wrapper.find('label').trigger('drop', {
98
+ await wrapper.find('.sy-file-upload').trigger('drop', {
99
99
  dataTransfer: {
100
100
  files: [file, file],
101
101
  },
@@ -115,7 +115,7 @@ describe('FileUpload', () => {
115
115
 
116
116
  const file: File = new File([''], 'filename.jpg', { type: 'image/jpeg' })
117
117
 
118
- await wrapper.find('input').trigger('drop', {
118
+ await wrapper.find('.sy-file-upload').trigger('drop', {
119
119
  dataTransfer: {
120
120
  files: [file],
121
121
  },
@@ -137,7 +137,7 @@ describe('FileUpload', () => {
137
137
  },
138
138
  })
139
139
 
140
- await wrapper.find('label').trigger('drop', {
140
+ await wrapper.find('.sy-file-upload').trigger('drop', {
141
141
  dataTransfer: {
142
142
  files: [jpgFile],
143
143
  },
@@ -146,7 +146,7 @@ describe('FileUpload', () => {
146
146
  expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(undefined)
147
147
  expect(wrapper.emitted('error')?.[0]).toEqual([['Le fichier filename.jpg a une extension invalide. Extensions acceptées : pdf']])
148
148
 
149
- await wrapper.find('label').trigger('drop', {
149
+ await wrapper.find('.sy-file-upload').trigger('drop', {
150
150
  dataTransfer: {
151
151
  files: [pdfFile],
152
152
  },
@@ -166,7 +166,7 @@ describe('FileUpload', () => {
166
166
 
167
167
  const file: File = new File(['42'], 'filename.jpg', { type: 'image/jpeg' })
168
168
 
169
- await wrapper.find('label').trigger('drop', {
169
+ await wrapper.find('.sy-file-upload').trigger('drop', {
170
170
  dataTransfer: {
171
171
  files: [file],
172
172
  },
@@ -183,7 +183,7 @@ describe('FileUpload', () => {
183
183
  },
184
184
  })
185
185
 
186
- await wrapper.find('label').trigger('drop', {
186
+ await wrapper.find('.sy-file-upload').trigger('drop', {
187
187
  dataTransfer: {
188
188
  files: [],
189
189
  },
@@ -203,7 +203,7 @@ describe('FileUpload', () => {
203
203
 
204
204
  const file: File = new File([''], 'filename.xyz', { type: 'unknown' })
205
205
 
206
- await wrapper.find('label').trigger('drop', {
206
+ await wrapper.find('.sy-file-upload').trigger('drop', {
207
207
  dataTransfer: {
208
208
  files: [file],
209
209
  },
@@ -221,7 +221,7 @@ describe('FileUpload', () => {
221
221
  },
222
222
  })
223
223
 
224
- await wrapper.find('label').trigger('drop', {
224
+ await wrapper.find('.sy-file-upload').trigger('drop', {
225
225
  dataTransfer: {
226
226
  files: [file],
227
227
  },
@@ -241,7 +241,7 @@ describe('FileUpload', () => {
241
241
  const file1: File = new File([''], 'filename1.jpg', { type: 'image/jpeg' })
242
242
  const file2: File = new File([''], 'filename2.jpg', { type: 'image/jpeg' })
243
243
 
244
- await wrapper.find('label').trigger('drop', {
244
+ await wrapper.find('.sy-file-upload').trigger('drop', {
245
245
  dataTransfer: {
246
246
  files: [file1, file2],
247
247
  },
@@ -268,6 +268,53 @@ describe('FileUpload', () => {
268
268
  expect(wrapper.emitted('error')).toBeFalsy()
269
269
  })
270
270
 
271
+ it('accepts a file whose extension is uppercase (case-insensitive check)', async () => {
272
+ const wrapper = mount(FileUpload, {
273
+ props: {
274
+ modelValue: [],
275
+ allowedExtensions: ['png'],
276
+ },
277
+ })
278
+
279
+ const file: File = new File([''], 'image.PNG', { type: 'image/png' })
280
+
281
+ await wrapper.find('.sy-file-upload').trigger('drop', {
282
+ dataTransfer: { files: [file] },
283
+ })
284
+
285
+ expect(wrapper.emitted('error')).toBeFalsy()
286
+ expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([[file]])
287
+ })
288
+
289
+ it('uses custom locales error message when provided', async () => {
290
+ const customLocales = {
291
+ or: 'Ou',
292
+ chooseFile: (multiple: boolean) => multiple ? 'Choisir des fichiers' : 'Choisir un fichier',
293
+ infoText: (max: string, ext: string[]) => `Taille max. : ${max}. Formats : ${ext.join(', ')}`,
294
+ fileSizeUnits: ['o', 'Ko', 'Mo', 'Go', 'To'],
295
+ dropFilesHere: (multiple: boolean) => multiple ? 'Déposer vos fichiers ici' : 'Déposer votre fichier ici',
296
+ errorSize: (fileName: string, max: string) => `Fichier ${fileName} trop lourd. Max : ${max}`,
297
+ errorExtension: () => `Message erreur custom !`,
298
+ fileUploadTitle: '',
299
+ }
300
+
301
+ const wrapper = mount(FileUpload, {
302
+ props: {
303
+ modelValue: [],
304
+ allowedExtensions: ['pdf'],
305
+ locales: customLocales,
306
+ },
307
+ })
308
+
309
+ const file: File = new File([''], 'image.PNG', { type: 'image/png' })
310
+
311
+ await wrapper.find('.sy-file-upload').trigger('drop', {
312
+ dataTransfer: { files: [file] },
313
+ })
314
+
315
+ expect(wrapper.emitted('error')?.[0]).toEqual([['Message erreur custom !']])
316
+ })
317
+
271
318
  it('add the new files to the existing ones when the input changes in multiple mode', async () => {
272
319
  const file1 = new File([''], 'filename1.jpg', { type: 'image/jpeg' })
273
320
  const file2 = new File([''], 'filename2.jpg', { type: 'image/jpeg' })