@cnamts/synapse 1.0.22 → 1.0.24

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 (426) hide show
  1. package/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
  2. package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
  3. package/dist/{DateFilter-B5n-ZkLi.js → DateFilter-BpwFexzi.js} +1 -1
  4. package/dist/DateFilter-DTUl8hb1.cjs +1 -0
  5. package/dist/{NumberFilter-CtiZ9uj8.js → NumberFilter-Bz_NTdX9.js} +3 -3
  6. package/dist/NumberFilter-MAEojdk0.cjs +1 -0
  7. package/dist/PeriodFilter-CC4WgIhl.cjs +1 -0
  8. package/dist/{PeriodFilter-DzqiMb-b.js → PeriodFilter-DX_wy9g-.js} +1 -1
  9. package/dist/SelectFilter-BR3fvl-a.cjs +1 -0
  10. package/dist/SelectFilter-xqiPtPgX.js +135 -0
  11. package/dist/{TextFilter-BOFRNfcX.js → TextFilter-BBl3JFqK.js} +7 -7
  12. package/dist/TextFilter-CCfYFl5F.cjs +1 -0
  13. package/dist/apLightTheme-CFSRrjv2.cjs +1 -0
  14. package/dist/apLightTheme-D1P4jcD0.js +1231 -0
  15. package/dist/components/Accordion/Accordion.d.ts +13 -2
  16. package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
  17. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  18. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  19. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
  20. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  23. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +61 -61
  24. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  25. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  26. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7506 -10100
  27. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +22 -22
  28. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +42 -42
  29. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  30. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  31. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +130 -147
  32. package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
  33. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +6 -6
  34. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +13 -17
  35. package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
  36. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +9 -9
  37. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +29 -507
  38. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +29 -507
  39. package/dist/components/Customs/SyTextField/SyTextField.d.ts +64 -81
  40. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +640 -780
  41. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +322 -407
  42. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +114 -156
  43. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  44. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  45. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  46. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  47. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  48. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  49. package/dist/components/ErrorPage/ErrorPage.d.ts +3 -1
  50. package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
  51. package/dist/components/FileList/UploadItem/locales.d.ts +1 -4
  52. package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
  53. package/dist/components/FileUpload/validateFiles.d.ts +2 -1
  54. package/dist/components/HeaderBar/HeaderBar.d.ts +2 -1
  55. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -1
  56. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +6 -5
  57. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  58. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  59. package/dist/components/MonthPicker/MonthPicker.d.ts +1903 -0
  60. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1863 -0
  61. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
  62. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
  63. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
  64. package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
  65. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
  66. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
  67. package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
  68. package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
  69. package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
  70. package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
  71. package/dist/components/MonthPicker/locales.d.ts +12 -0
  72. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
  73. package/dist/components/NirField/NirField.d.ts +209 -271
  74. package/dist/components/NirField/locales.d.ts +10 -10
  75. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  76. package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
  77. package/dist/components/PasswordField/PasswordField.d.ts +9 -10
  78. package/dist/components/PeriodField/PeriodField.d.ts +1379 -1659
  79. package/dist/components/PhoneField/PhoneField.d.ts +90 -125
  80. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  81. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +1 -1
  82. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
  83. package/dist/components/SyHeading/SyHeading.d.ts +4 -2
  84. package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
  85. package/dist/components/SyTextArea/SyTextArea.d.ts +35 -15
  86. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  87. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +11 -8
  88. package/dist/components/Tables/SyTable/SyTable.d.ts +11 -8
  89. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  90. package/dist/components/Tables/common/SyTablePagination.d.ts +21 -23
  91. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  92. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  93. package/dist/components/Tables/common/types.d.ts +19 -3
  94. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  95. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  96. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  97. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  98. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  99. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
  100. package/dist/components/index.d.ts +1 -0
  101. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  102. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  103. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  104. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  105. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  106. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  107. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  108. package/dist/composables/validation/useValidation.d.ts +15 -9
  109. package/dist/design-system-v3.d.ts +2 -0
  110. package/dist/design-system-v3.js +196 -194
  111. package/dist/design-system-v3.umd.cjs +1 -1066
  112. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
  113. package/dist/{main-CEl4J8_T.js → main-BtTqyn4z.js} +16983 -15576
  114. package/dist/main-C1e3eoxd.cjs +1067 -0
  115. package/dist/synapse.css +1 -0
  116. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  117. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  118. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  119. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  120. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  121. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  122. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  123. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  124. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  125. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  126. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  127. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  128. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  129. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  130. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  131. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  132. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  133. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  134. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  135. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  136. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  137. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  138. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  139. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  140. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  141. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  142. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  143. package/dist/tooth-44-CazyQucj.cjs +1 -0
  144. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  145. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  146. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  147. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  148. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  149. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  150. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  151. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  152. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  153. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  154. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  155. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  156. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  157. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  158. package/dist/tooth-71-D473PPO5.cjs +1 -0
  159. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  160. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  161. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  162. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  163. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  164. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  165. package/dist/tooth-83-KV010j64.cjs +1 -0
  166. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  167. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  168. package/dist/vuetifyConfig.js +561 -0
  169. package/dist/vuetifyConfig.umd.cjs +1 -0
  170. package/package.json +18 -6
  171. package/src/assets/apTokens.scss +2 -2
  172. package/src/assets/overrides/_btns.scss +2 -0
  173. package/src/assets/overrides/_forms.scss +9 -0
  174. package/src/assets/overrides/_icons.scss +41 -4
  175. package/src/assets/overrides/_tables.scss +19 -0
  176. package/src/assets/overrides/_typography.scss +0 -10
  177. package/src/components/Accordion/Accordion.mdx +23 -9
  178. package/src/components/Accordion/Accordion.stories.ts +153 -3
  179. package/src/components/Accordion/Accordion.vue +7 -6
  180. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
  181. package/src/components/Accordion/composables/useAccordionState.ts +3 -4
  182. package/src/components/Accordion/tests/accordion.spec.ts +131 -19
  183. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  184. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  185. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
  186. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
  187. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  188. package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
  189. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
  190. package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
  191. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  192. package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
  193. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +14 -122
  194. package/src/components/ChipList/ChipList.stories.ts +0 -15
  195. package/src/components/ChipList/ChipList.vue +5 -1
  196. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  197. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  198. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +124 -10
  199. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
  200. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +162 -84
  201. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
  202. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
  203. package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
  204. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
  205. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +377 -9
  206. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +27 -13
  207. package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
  208. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  209. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
  210. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  211. package/src/components/Customs/Selects/SySelect/SySelect.vue +60 -14
  212. package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
  213. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
  214. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  215. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  216. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
  217. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
  218. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  219. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  220. package/src/components/Customs/SyIcon/SyIcon.vue +1 -1
  221. package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
  222. package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
  223. package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
  224. package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
  225. package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
  226. package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
  227. package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
  228. package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
  229. package/src/components/Customs/SyPagination/SyPagination.vue +5 -5
  230. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  231. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  232. package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
  233. package/src/components/Customs/SyTextField/SyTextField.vue +174 -159
  234. package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
  235. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +47 -0
  236. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +155 -10
  237. package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
  238. package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
  239. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  240. package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
  241. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  242. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  243. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  244. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
  245. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  246. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
  247. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  248. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  249. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  250. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  251. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  252. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
  253. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  254. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  255. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  256. package/src/components/DatePicker/composables/index.ts +1 -0
  257. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  258. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  259. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  260. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  261. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  262. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  263. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  264. package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
  265. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  266. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  267. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  268. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  269. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
  270. package/src/components/ErrorPage/ErrorPage.stories.ts +113 -19
  271. package/src/components/ErrorPage/ErrorPage.vue +17 -2
  272. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
  273. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
  274. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +0 -1
  275. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
  276. package/src/components/FileList/FileList.stories.ts +51 -1
  277. package/src/components/FileList/UploadItem/UploadItem.vue +13 -6
  278. package/src/components/FileList/UploadItem/locales.ts +3 -12
  279. package/src/components/FileList/accessibilite/Accessibility.mdx +3 -0
  280. package/src/components/FileUpload/FileUpload.vue +2 -1
  281. package/src/components/FileUpload/FileUploadContent.vue +2 -1
  282. package/src/components/FileUpload/tests/FileUpload.spec.ts +47 -0
  283. package/src/components/FileUpload/validateFiles.ts +5 -2
  284. package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
  285. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  286. package/src/components/HeaderBar/HeaderBar.vue +2 -1
  287. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -1
  288. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
  289. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  290. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  291. package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
  292. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
  293. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  294. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  295. package/src/components/MaintenancePage/MaintenancePage.vue +1 -1
  296. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +4 -5
  297. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +0 -1
  298. package/src/components/MonthPicker/MonthPicker.mdx +35 -0
  299. package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
  300. package/src/components/MonthPicker/MonthPicker.vue +79 -0
  301. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
  302. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
  303. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
  304. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
  305. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
  306. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
  307. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
  308. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
  309. package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
  310. package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
  311. package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
  312. package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
  313. package/src/components/MonthPicker/locales.ts +12 -0
  314. package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
  315. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1249 -0
  316. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
  317. package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
  318. package/src/components/NirField/NirField.mdx +1 -2
  319. package/src/components/NirField/NirField.stories.ts +70 -6
  320. package/src/components/NirField/NirField.vue +64 -260
  321. package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
  322. package/src/components/NirField/locales.ts +1 -1
  323. package/src/components/NirField/tests/NirField.spec.ts +6 -0
  324. package/src/components/NirField/useNirValidation.ts +271 -0
  325. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +2 -3
  326. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +22 -14
  327. package/src/components/NotificationBar/Notification/Notification.vue +3 -1
  328. package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
  329. package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
  330. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
  331. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  332. package/src/components/PasswordField/PasswordField.vue +18 -24
  333. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  334. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  335. package/src/components/PeriodField/PeriodField.vue +57 -57
  336. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  337. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  338. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  339. package/src/components/PhoneField/PhoneField.vue +5 -6
  340. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  341. package/src/components/RangeField/RangeField.vue +6 -0
  342. package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
  343. package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
  344. package/src/components/StatusPage/StatusPage.stories.ts +118 -0
  345. package/src/components/StatusPage/StatusPage.vue +5 -3
  346. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +22 -0
  347. package/src/components/StatusPage/tests/StatusPage.spec.ts +22 -0
  348. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +22 -14
  349. package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
  350. package/src/components/SyAlert/SyAlert.vue +1 -0
  351. package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
  352. package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
  353. package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
  354. package/src/components/SyHeading/SyHeading.test.ts +115 -0
  355. package/src/components/SyHeading/SyHeading.vue +5 -3
  356. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  357. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  358. package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
  359. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
  360. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  361. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  362. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  363. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
  364. package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
  365. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
  366. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
  367. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  368. package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
  369. package/src/components/Tables/SyTable/SyTable.vue +130 -56
  370. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
  371. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
  372. package/src/components/Tables/common/SyTableFilter.vue +22 -2
  373. package/src/components/Tables/common/TableHeader.vue +5 -1
  374. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  375. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  376. package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
  377. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  378. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  379. package/src/components/Tables/common/filters/locales.ts +0 -1
  380. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  381. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  382. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  383. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  384. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  385. package/src/components/Tables/common/tableStyles.scss +48 -4
  386. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  387. package/src/components/Tables/common/types.ts +13 -4
  388. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  389. package/src/components/Tables/common/usePagination.ts +13 -0
  390. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  391. package/src/components/Tables/common/useTableHeaders.ts +3 -3
  392. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  393. package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
  394. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +2 -2
  395. package/src/components/index.ts +1 -0
  396. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  397. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  398. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  399. package/src/composables/rules/useFieldValidation.ts +34 -17
  400. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  401. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  402. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  403. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  404. package/src/composables/unifyValidation/useValidation.ts +190 -0
  405. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  406. package/src/composables/useFormFieldErrorHandling.ts +15 -9
  407. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  408. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  409. package/src/composables/validation/useFormValidation.ts +20 -13
  410. package/src/composables/validation/useValidatable.ts +8 -1
  411. package/src/composables/validation/useValidation.ts +135 -99
  412. package/src/composantsVuetify/Introduction.mdx +48 -0
  413. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  414. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  415. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  416. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  417. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
  418. package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
  419. package/src/stories/Components/Components.stories.ts +74 -9
  420. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  421. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  422. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  423. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  424. package/dist/SelectFilter-BOYlF7rX.js +0 -136
  425. package/dist/style.css +0 -1
  426. package/src/components/DatePicker/Accessibilite.mdx +0 -14
@@ -1,10 +1,88 @@
1
- import { Meta, Story } from '@storybook/addon-docs';
2
- import * as CaptchaStorie from '../Captcha.stories';
3
- import '@/stories/styles/shared.css';
1
+ import { Meta, Story } from '@storybook/blocks';
2
+ import * as CaptchaStories from '../Captcha.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
+ AuditSection,
12
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
4
13
 
5
- <Meta of={CaptchaStorie} />
14
+ <Meta of={CaptchaStories} />
6
15
 
7
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- <p>Cette page sera bientôt disponible</p>
10
- </div>
16
+ <AccessibilityGuideLayout
17
+ componentName="Captcha"
18
+ iconSrc={AccessibilityIcon}
19
+ >
20
+
21
+ <CriteriaSection>
22
+ <CriteriaCard icon="🖼️" title="Images et alternatives textuelles">
23
+ <ul>
24
+ <li><strong>Image captcha</strong> : Attribut <code>alt</code> avec <code>locales.captchaImgAlt</code> ("Le captcha à saisir").</li>
25
+ <li><strong>Skeleton loader</strong> : <code>aria-label</code> avec <code>locales.captchaImgLoading</code> pendant le chargement.</li>
26
+ <li><strong>Gestion des erreurs</strong> : Émission de l'événement <code>imageError</code> en cas d'échec de chargement.</li>
27
+ </ul>
28
+ </CriteriaCard>
29
+
30
+ <CriteriaCard icon="🎵" title="Captcha audio et contrôles">
31
+ <ul>
32
+ <li><strong>Bouton audio</strong> : <code>aria-label</code> dynamique avec <code>locales.audio.loading</code> pendant le chargement.</li>
33
+ <li><strong>Icônes décoratives</strong> : <code>aria-hidden="true"</code> sur les icônes volume-up et SyIcon décoratives.</li>
34
+ <li><strong>États lecture/pause</strong> : Texte alternatif avec <code>locales.pause</code> et <code>locales.play</code>.</li>
35
+ </ul>
36
+ </CriteriaCard>
37
+
38
+ <CriteriaCard icon="📝" title="Formulaires et champs de saisie">
39
+ <ul>
40
+ <li><strong>Champ de saisie</strong> : Utilise <code>SyTextField</code> avec label descriptif selon le type (image/audio).</li>
41
+ <li><strong>Validation</strong> : Règle personnalisée avec message <code>locales.required</code>.</li>
42
+ <li><strong>États du champ</strong> : Désactivé si rejeté, readonly si succès, messages d'erreur.</li>
43
+ <li><strong>Labellisation</strong> : Labels spécifiques avec <code>locales.image.textfieldLabel</code> et <code>locales.audio.textfieldLabel</code>.</li>
44
+ </ul>
45
+ </CriteriaCard>
46
+
47
+ <CriteriaCard icon="🔄" title="Boutons d'action et navigation">
48
+ <ul>
49
+ <li><strong>Texte masqué</strong> : <code>&lt;p class="d-sr-only"&gt;</code> avec <code>locales.renew</code> pour le bouton de renouvellement.</li>
50
+ <li><strong>Icônes décoratives</strong> : Attribut <code>decorative</code> sur les SyIcon pour ne pas polluer les lecteurs d'écran.</li>
51
+ <li><strong>Boutons configurables</strong> : Utilisation de <code>CaptchaBtn</code> avec icônes et textes appropriés.</li>
52
+ </ul>
53
+ </CriteriaCard>
54
+
55
+ <CriteriaCard icon="⚠️" title="Alertes et messages d'erreur">
56
+ <ul>
57
+ <li><strong>Composant d'alerte</strong> : Utilise <code>VAlert</code> avec couleur "error" et variant "text".</li>
58
+ <li><strong>Icône d'erreur</strong> : SyIcon décoratif avec <code>mdiAlertCircleOutline</code>.</li>
59
+ <li><strong>Cliquabilité</strong> : L'alerte est cliquable pour renouveler le captcha.</li>
60
+ </ul>
61
+ </CriteriaCard>
62
+ </CriteriaSection>
63
+
64
+ <DemoSection componentName="Captcha">
65
+ <Story of={CaptchaStories.Default} />
66
+ </DemoSection>
67
+
68
+ <BestPracticesSection>
69
+ <ul>
70
+ <li>Fournissez toujours les URLs requises (<code>urlCreate</code>, <code>urlGetImage</code>, <code>urlGetAudio</code>).</li>
71
+ <li>Personnalisez les <code>locales</code> pour adapter les messages à votre langue.</li>
72
+ <li>Configurez un <code>helpDesk</code> approprié pour les utilisateurs en difficulté.</li>
73
+ <li>Utilisez <code>tagTitle</code> pour un niveau de titre cohérent avec votre page.</li>
74
+ <li>Gérez les erreurs avec <code>errorMessage</code> pour un feedback clair.</li>
75
+ <li>Testez les deux modes (image et audio) pour une accessibilité complète.</li>
76
+ </ul>
77
+ </BestPracticesSection>
78
+
79
+ <ResourcesSection>
80
+ <ul>
81
+ <li><a href="https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html" target="_blank" rel="noopener noreferrer">WCAG : Contenu non textuel</a></li>
82
+ <li><a href="https://www.w3.org/WAI/WCAG21/Understanding/error-identification.html" target="_blank" rel="noopener noreferrer">WCAG : Identification des erreurs</a></li>
83
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/alert/" target="_blank" rel="noopener noreferrer">Guide des pratiques WAI-ARIA : Alertes</a></li>
84
+ <li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.4" target="_blank" rel="noopener noreferrer">RGAA : Captchas</a></li>
85
+ <li><a href="https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/#1.5" target="_blank" rel="noopener noreferrer">RGAA : Solution d’accès alternatif</a></li>
86
+ </ul>
87
+ </ResourcesSection>
88
+ </AccessibilityGuideLayout>
@@ -1,8 +1,6 @@
1
1
  import { describe, it, expect, vi, afterEach } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
-
4
3
  import Captcha from '../Captcha.vue'
5
- import { vuetify } from '@tests/unit/setup'
6
4
 
7
5
  describe('Captcha', () => {
8
6
  afterEach(() => {
@@ -18,9 +16,6 @@ describe('Captcha', () => {
18
16
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
19
17
 
20
18
  const wrapper = mount(Captcha, {
21
- global: {
22
- plugins: [vuetify],
23
- },
24
19
  props: {
25
20
  urlCreate: '/captcha/captcha.json',
26
21
  urlGetImage: '/captcha/captcha.png',
@@ -60,9 +55,6 @@ describe('Captcha', () => {
60
55
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
61
56
 
62
57
  const wrapper = mount(Captcha, {
63
- global: {
64
- plugins: [vuetify],
65
- },
66
58
  props: {
67
59
  urlCreate: '/captcha/captcha.json',
68
60
  urlGetImage: '/captcha/captcha.png',
@@ -101,9 +93,6 @@ describe('Captcha', () => {
101
93
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
102
94
 
103
95
  const wrapper = mount(Captcha, {
104
- global: {
105
- plugins: [vuetify],
106
- },
107
96
  props: {
108
97
  urlCreate: '/captcha/captcha.json',
109
98
  urlGetImage: '/captcha/captcha.png',
@@ -124,9 +113,6 @@ describe('Captcha', () => {
124
113
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
125
114
 
126
115
  const wrapper = mount(Captcha, {
127
- global: {
128
- plugins: [vuetify],
129
- },
130
116
  props: {
131
117
  urlCreate: '/captcha/captcha.json',
132
118
  urlGetImage: '/captcha/captcha.png',
@@ -163,9 +149,6 @@ describe('Captcha', () => {
163
149
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
164
150
 
165
151
  const wrapper = mount(Captcha, {
166
- global: {
167
- plugins: [vuetify],
168
- },
169
152
  props: {
170
153
  urlCreate: '/captcha/captcha.json',
171
154
  urlGetImage: '/captcha/captcha.png',
@@ -193,9 +176,6 @@ describe('Captcha', () => {
193
176
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
194
177
 
195
178
  const wrapper = mount(Captcha, {
196
- global: {
197
- plugins: [vuetify],
198
- },
199
179
  props: {
200
180
  urlCreate: '/captcha/captcha.json',
201
181
  urlGetImage: '/captcha/captcha.png',
@@ -221,9 +201,6 @@ describe('Captcha', () => {
221
201
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
222
202
 
223
203
  const wrapper = mount(Captcha, {
224
- global: {
225
- plugins: [vuetify],
226
- },
227
204
  props: {
228
205
  urlCreate: '/captcha/captcha.json',
229
206
  urlGetImage: '/captcha/captcha.png',
@@ -251,9 +228,6 @@ describe('Captcha', () => {
251
228
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
252
229
 
253
230
  const wrapper = mount(Captcha, {
254
- global: {
255
- plugins: [vuetify],
256
- },
257
231
  props: {
258
232
  urlCreate: '/captcha/captcha.json',
259
233
  urlGetImage: '/captcha/captcha.png',
@@ -278,9 +252,6 @@ describe('Captcha', () => {
278
252
  vi.stubGlobal('fetch', vi.fn().mockResolvedValue(response))
279
253
 
280
254
  const wrapper = mount(Captcha, {
281
- global: {
282
- plugins: [vuetify],
283
- },
284
255
  props: {
285
256
  urlCreate: '/captcha/captcha.json',
286
257
  urlGetImage: '/captcha/captcha.png',
@@ -100,61 +100,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
100
100
  ">
101
101
  <div class="v-field__overlay"></div>
102
102
  <div class="v-field__loader">
103
- <div
104
- aria-hidden="true"
105
- aria-valuemax="100"
106
- aria-valuemin="0"
107
- class="
108
- v-locale--is-ltr
109
- v-progress-linear
110
- v-theme--light
111
- "
112
- role="progressbar"
113
- style="
114
- top: 0px;
115
- height: 0px;
116
- --v-progress-linear-height: 2px;
117
- "
118
- >
119
- <!---->
120
- <div
121
- class="
122
- bg-primary
123
- v-progress-linear__background
124
- "
125
- style="opacity: NaN;"
126
- ></div>
127
- <div
128
- class="
129
- bg-primary
130
- v-progress-linear__buffer
131
- "
132
- style="
133
- opacity: NaN;
134
- width: 0%;
135
- "
136
- ></div>
137
- <transition-stub
138
- appear="false"
139
- css="true"
140
- name="fade-transition"
141
- persisted="false"
142
- >
143
- <div class="v-progress-linear__indeterminate">
144
- <div class="
145
- bg-primary
146
- long
147
- v-progress-linear__indeterminate
148
- "></div>
149
- <div class="
150
- bg-primary
151
- short
152
- v-progress-linear__indeterminate
153
- "></div>
154
- </div>
155
- </transition-stub>
156
- <!---->
157
- </div>
103
+ <!-- v-if -->
158
104
  </div>
159
105
  <div class="v-field__prepend-inner">
160
106
  <!-- v-if -->
@@ -171,21 +117,21 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
171
117
  v-field-label
172
118
  v-label
173
119
  "
174
- for="input-v-2"
175
- id="input-v-2-label"
120
+ for="input-v-3"
121
+ id="input-v-3-label"
176
122
  >
177
123
  <!---->
178
124
  Caractères de l’audio
179
125
  </label>
180
126
  <!---->
181
127
  <input
182
- aria-describedby="input-v-2-messages"
128
+ aria-describedby="input-v-3-messages"
183
129
  aria-label="Caractères de l’audio"
184
- aria-labelledby="input-v-2-label"
130
+ aria-labelledby="input-v-3-label"
185
131
  autocomplete="off"
186
132
  class="v-field__input"
187
133
  direction="horizontal"
188
- id="input-v-2"
134
+ id="input-v-3"
189
135
  title="Caractères de l’audio"
190
136
  type="text"
191
137
  />
@@ -224,7 +170,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
224
170
  appear="false"
225
171
  class="v-messages"
226
172
  css="true"
227
- id="input-v-2-messages"
173
+ id="input-v-3-messages"
228
174
  name="slide-y-transition"
229
175
  persisted="false"
230
176
  tag="div"
@@ -496,61 +442,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
496
442
  ">
497
443
  <div class="v-field__overlay"></div>
498
444
  <div class="v-field__loader">
499
- <div
500
- aria-hidden="true"
501
- aria-valuemax="100"
502
- aria-valuemin="0"
503
- class="
504
- v-locale--is-ltr
505
- v-progress-linear
506
- v-theme--light
507
- "
508
- role="progressbar"
509
- style="
510
- top: 0px;
511
- height: 0px;
512
- --v-progress-linear-height: 2px;
513
- "
514
- >
515
- <!---->
516
- <div
517
- class="
518
- bg-primary
519
- v-progress-linear__background
520
- "
521
- style="opacity: NaN;"
522
- ></div>
523
- <div
524
- class="
525
- bg-primary
526
- v-progress-linear__buffer
527
- "
528
- style="
529
- opacity: NaN;
530
- width: 0%;
531
- "
532
- ></div>
533
- <transition-stub
534
- appear="false"
535
- css="true"
536
- name="fade-transition"
537
- persisted="false"
538
- >
539
- <div class="v-progress-linear__indeterminate">
540
- <div class="
541
- bg-primary
542
- long
543
- v-progress-linear__indeterminate
544
- "></div>
545
- <div class="
546
- bg-primary
547
- short
548
- v-progress-linear__indeterminate
549
- "></div>
550
- </div>
551
- </transition-stub>
552
- <!---->
553
- </div>
445
+ <!-- v-if -->
554
446
  </div>
555
447
  <div class="v-field__prepend-inner">
556
448
  <!-- v-if -->
@@ -567,21 +459,21 @@ exports[`Captcha > renders correctly in image mode 1`] = `
567
459
  v-field-label
568
460
  v-label
569
461
  "
570
- for="input-v-1"
571
- id="input-v-1-label"
462
+ for="input-v-2"
463
+ id="input-v-2-label"
572
464
  >
573
465
  <!---->
574
466
  Caractères de l’image
575
467
  </label>
576
468
  <!---->
577
469
  <input
578
- aria-describedby="input-v-1-messages"
470
+ aria-describedby="input-v-2-messages"
579
471
  aria-label="Caractères de l’image"
580
- aria-labelledby="input-v-1-label"
472
+ aria-labelledby="input-v-2-label"
581
473
  autocomplete="off"
582
474
  class="v-field__input"
583
475
  direction="horizontal"
584
- id="input-v-1"
476
+ id="input-v-2"
585
477
  title="Caractères de l’image"
586
478
  type="text"
587
479
  />
@@ -620,7 +512,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
620
512
  appear="false"
621
513
  class="v-messages"
622
514
  css="true"
623
- id="input-v-1-messages"
515
+ id="input-v-2-messages"
624
516
  name="slide-y-transition"
625
517
  persisted="false"
626
518
  tag="div"
@@ -713,9 +713,6 @@ export const CustomResetText: Story = {
713
713
 
714
714
  export const WithOverflow: Story = {
715
715
  parameters: {
716
- a11y: {
717
- disable: true,
718
- },
719
716
  sourceCode: [
720
717
  {
721
718
  name: 'Template',
@@ -809,9 +806,6 @@ export const WithOverflow: Story = {
809
806
 
810
807
  export const WithEvents: Story = {
811
808
  parameters: {
812
- a11y: {
813
- disable: true,
814
- },
815
809
  sourceCode: [
816
810
  {
817
811
  name: 'Template',
@@ -923,9 +917,6 @@ const handleReset = () => {
923
917
 
924
918
  export const WithPrependStateIcon: Story = {
925
919
  parameters: {
926
- a11y: {
927
- disable: true,
928
- },
929
920
  sourceCode: [
930
921
  {
931
922
  name: 'Template',
@@ -1004,9 +995,6 @@ const items: ChipItem[] = [
1004
995
 
1005
996
  export const WithAppendStateIcon: Story = {
1006
997
  parameters: {
1007
- a11y: {
1008
- disable: true,
1009
- },
1010
998
  sourceCode: [
1011
999
  {
1012
1000
  name: 'Template',
@@ -1085,9 +1073,6 @@ const items: ChipItem[] = [
1085
1073
 
1086
1074
  export const WithCustomIcon: Story = {
1087
1075
  parameters: {
1088
- a11y: {
1089
- disable: true,
1090
- },
1091
1076
  sourceCode: [
1092
1077
  {
1093
1078
  name: 'Template',
@@ -245,7 +245,7 @@
245
245
  <SyIcon
246
246
  v-bind="options.icon"
247
247
  :icon="deleteIcon"
248
- :color="item.state"
248
+ :color="item.state || 'white'"
249
249
  decorative
250
250
  />
251
251
  </VBtn>
@@ -260,7 +260,11 @@
260
260
  v-bind="options.chip"
261
261
  class="overflow-chip text-cyan-darken-40 ma-1"
262
262
  :aria-label="overflowAriaLabel"
263
+ role="button"
264
+ tabindex="0"
263
265
  @click="toggleShowAllItems"
266
+ @keydown.enter.prevent="toggleShowAllItems"
267
+ @keydown.space.prevent="toggleShowAllItems"
264
268
  >
265
269
  {{ overflowText }}
266
270
  </VChip>
@@ -1,15 +1,88 @@
1
1
  import { Meta, Story } from '@storybook/addon-docs';
2
- import * as Stories from '../ChipList.stories.ts';
3
- import '@/stories/styles/shared.css';
2
+ import * as ChipListStories from '../ChipList.stories.ts';
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
+ AuditSection,
12
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx';
4
13
 
5
- <Meta of={Stories} />
14
+ <Meta of={ChipListStories} />
6
15
 
7
- <div className="header">
8
- <h1>Accessibilité</h1>
9
- </div>
16
+ <AccessibilityGuideLayout
17
+ componentName="ChipList"
18
+ iconSrc={AccessibilityIcon}
19
+ apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
20
+ >
21
+ <AuditSection>
22
+ <div class="mt-2">
23
+ <p>Rapport d'audit manuel : <a href="/audits/ChipList.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
24
+ <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" style={{color:'#0C41BD'}}>issue #814</a>)</p>
25
+ </div>
26
+ </AuditSection>
27
+ <CriteriaSection>
28
+ <CriteriaCard icon="🏷️" title="Structure sémantique de liste">
29
+ <ul>
30
+ <li><strong>Liste native</strong> : Utilisation de <code>&lt;ul&gt;</code> et <code>&lt;li&gt;</code> pour la structure principale</li>
31
+ <li><strong>Étiquetage</strong> : <code>aria-label</code> ou <code>aria-labelledby</code> pour la liste via les props <strong>listAriaLabel</strong> et <strong>listAriaLabelledby</strong></li>
32
+ <li><strong>Contenu des chips</strong> : <code>&lt;span&gt;</code> avec <code>role="status"</code> et <code>aria-live="polite"</code> pour le texte des chips</li>
33
+ <li><strong>Accessibilité</strong> : Permet une navigation sémantique correcte (critères 9.1.1, 9.2.1 RGAA)</li>
34
+ </ul>
35
+ </CriteriaCard>
10
36
 
37
+ <CriteriaCard icon="🎯" title="Chips interactifs et débordement">
38
+ <ul>
39
+ <li><strong>Chips supprimables</strong> : Boutons avec <code>aria-label</code> descriptif pour chaque action de suppression</li>
40
+ <li><strong>Chip de débordement</strong> : <code>role="button"</code>, <code>tabindex="0"</code>, et <code>aria-label</code> décrivant les éléments masqués</li>
41
+ <li><strong>Navigation clavier</strong> : Support des touches Entrée et Espace pour le chip de débordement</li>
42
+ <li><strong>Focus visible</strong> : Indicateurs de focus sur tous les éléments interactifs</li>
43
+ </ul>
44
+ </CriteriaCard>
11
45
 
12
- <div class="mt-2">
13
- <p>Rapport d’audit manuel : <a href="/audits/ChipList.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
14
- <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" style={{color:'#0C41BD'}}>issue #814</a>)</p>
15
- </div>
46
+ <CriteriaCard icon="⌨️" title="Navigation et interaction clavier">
47
+ <ul>
48
+ <li><strong>Navigation Tab</strong> : Parcours logique des éléments interactifs (chips bouton débordement boutons reset)</li>
49
+ <li><strong>Suppression de chips</strong> : Touches Entrée/Espace sur les boutons de suppression</li>
50
+ <li><strong>Débordement</strong> : Touches Entrée/Espace pour afficher/masquer les éléments supplémentaires</li>
51
+ <li><strong>Réinitialisation</strong> : Bouton reset accessible avec navigation standard</li>
52
+ </ul>
53
+ </CriteriaCard>
54
+
55
+ <CriteriaCard icon="🎨" title="États et feedback visuel">
56
+ <ul>
57
+ <li><strong>États des chips</strong> : Couleurs et icônes différentes pour success, info, warning, error</li>
58
+ <li><strong>Icônes d'état</strong> : Option <strong>displayPrependStateIcon</strong> et <strong>displayAppendStateIcon</strong> avec icônes décoratives</li>
59
+ <li><strong>Contraste</strong> : Styles CSS spécifiques pour garantir le contraste des bordures de focus selon l'état</li>
60
+ <li><strong>Feedback</strong> : <code>aria-live="polite"</code> pour les changements de contenu</li>
61
+ </ul>
62
+ </CriteriaCard>
63
+ </CriteriaSection>
64
+
65
+ <DemoSection componentName="ChipList">
66
+ <Story of={ChipListStories.WithOverflow} />
67
+ </DemoSection>
68
+
69
+ <BestPracticesSection>
70
+ <ul>
71
+ <li>Utilisez des libellés descriptifs pour la liste via <code>listAriaLabel</code></li>
72
+ <li>Limitez le nombre de chips visibles avec <code>overflowLimit</code> pour éviter la surcharge visuelle</li>
73
+ <li>Assurez-vous que les textes des chips sont concis mais explicites</li>
74
+ <li>Utilisez les états visuels (success, info, warning, error) de manière cohérente</li>
75
+ <li>Fournissez une alternative de réinitialisation lorsque les chips sont nombreux</li>
76
+ <li>Testez la navigation au clavier sans la souris</li>
77
+ </ul>
78
+ </BestPracticesSection>
79
+
80
+ <ResourcesSection>
81
+ <ul>
82
+ <li><a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/" target="_blank" rel="noopener noreferrer">Guide des pratiques d'auteur WAI-ARIA pour les listes</a></li>
83
+ <li><a href="https://www.w3.org/WAI/WCAG21/quickref/" target="_blank" rel="noopener noreferrer">Référence rapide WCAG 2.1</a></li>
84
+ <li><a href="https://inclusive-components.design/tag-buttons/" target="_blank" rel="noopener noreferrer">Inclusive Components: Tag Buttons</a></li>
85
+ <li><a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/814" target="_blank" rel="noopener noreferrer">Issue #814 - Corrections d'accessibilité ChipList</a></li>
86
+ </ul>
87
+ </ResourcesSection>
88
+ </AccessibilityGuideLayout>
@@ -25,6 +25,47 @@ describe('ChipList – accessibility (axe)', () => {
25
25
  },
26
26
  ]
27
27
 
28
+ it('has no obvious axe violations with overflow chip', async () => {
29
+ const overflowItems: ChipItem[] = [
30
+ {
31
+ text: 'Email',
32
+ value: 'email',
33
+ state: 'success' as ChipState,
34
+ },
35
+ {
36
+ text: 'SMS',
37
+ value: 'sms',
38
+ state: 'info' as ChipState,
39
+ },
40
+ {
41
+ text: 'Téléphone',
42
+ value: 'telephone',
43
+ state: 'warning' as ChipState,
44
+ },
45
+ {
46
+ text: 'Courrier',
47
+ value: 'courrier',
48
+ state: 'error' as ChipState,
49
+ },
50
+ {
51
+ text: 'Notification',
52
+ value: 'notification',
53
+ },
54
+ ]
55
+
56
+ const wrapper = mount(ChipList, {
57
+ props: {
58
+ items: overflowItems,
59
+ overflowLimit: 3,
60
+ },
61
+ })
62
+
63
+ const results = await axe(wrapper.element as HTMLElement)
64
+ assertNoA11yViolations(results, 'ChipList – overflow chip', {
65
+ ignoreRules: ['region'],
66
+ })
67
+ })
68
+
28
69
  it('has no obvious axe violations with default items', async () => {
29
70
  const wrapper = mount(ChipList, {
30
71
  props: {