@cnamts/synapse 1.0.23 → 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 (292) hide show
  1. package/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
  2. package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
  3. package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BpwFexzi.js} +1 -1
  4. package/dist/DateFilter-DTUl8hb1.cjs +1 -0
  5. package/dist/{NumberFilter-vP38Wp6j.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-Ba1uYUnT.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-B84dpnoq.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/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  16. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  17. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  18. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  19. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +60 -60
  20. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  21. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7501 -10095
  23. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +21 -21
  24. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +41 -41
  25. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  26. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  27. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +108 -146
  28. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +5 -5
  29. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -16
  30. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +8 -8
  31. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +28 -506
  32. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
  33. package/dist/components/Customs/SyTextField/SyTextField.d.ts +65 -85
  34. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -771
  35. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -402
  36. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -155
  37. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  38. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  39. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  40. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  41. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  42. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  43. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +4 -4
  44. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  45. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  46. package/dist/components/MonthPicker/MonthPicker.d.ts +86 -122
  47. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -121
  48. package/dist/components/NirField/NirField.d.ts +206 -270
  49. package/dist/components/NirField/locales.d.ts +10 -10
  50. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  51. package/dist/components/PasswordField/PasswordField.d.ts +8 -9
  52. package/dist/components/PeriodField/PeriodField.d.ts +1352 -1640
  53. package/dist/components/PhoneField/PhoneField.d.ts +88 -124
  54. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  55. package/dist/components/SyTextArea/SyTextArea.d.ts +34 -14
  56. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  57. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +9 -6
  58. package/dist/components/Tables/SyTable/SyTable.d.ts +9 -6
  59. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  60. package/dist/components/Tables/common/SyTablePagination.d.ts +17 -19
  61. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  62. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  63. package/dist/components/Tables/common/types.d.ts +19 -3
  64. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  65. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  66. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  67. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  68. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  69. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
  70. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  71. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  72. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  73. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  74. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  75. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  76. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  77. package/dist/composables/validation/useValidation.d.ts +15 -9
  78. package/dist/design-system-v3.d.ts +2 -0
  79. package/dist/design-system-v3.js +186 -187
  80. package/dist/design-system-v3.umd.cjs +1 -1066
  81. package/dist/{main-aLKwdMi1.js → main-BtTqyn4z.js} +16434 -15672
  82. package/dist/main-C1e3eoxd.cjs +1067 -0
  83. package/dist/main.d.ts +0 -1
  84. package/dist/synapse.css +1 -0
  85. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  86. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  87. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  88. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  89. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  90. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  91. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  92. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  93. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  94. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  95. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  96. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  97. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  98. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  99. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  100. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  101. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  102. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  103. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  104. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  105. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  106. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  107. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  108. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  109. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  110. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  111. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  112. package/dist/tooth-44-CazyQucj.cjs +1 -0
  113. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  114. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  115. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  116. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  117. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  118. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  119. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  120. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  121. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  122. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  123. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  124. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  125. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  126. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  127. package/dist/tooth-71-D473PPO5.cjs +1 -0
  128. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  129. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  130. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  131. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  132. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  133. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  134. package/dist/tooth-83-KV010j64.cjs +1 -0
  135. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  136. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  137. package/dist/vuetifyConfig.js +561 -0
  138. package/dist/vuetifyConfig.umd.cjs +1 -0
  139. package/package.json +10 -4
  140. package/src/assets/overrides/_btns.scss +0 -6
  141. package/src/assets/overrides/_icons.scss +9 -1
  142. package/src/assets/overrides/_typography.scss +0 -10
  143. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  144. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  145. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  146. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  147. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +12 -12
  148. package/src/components/ChipList/ChipList.stories.ts +0 -15
  149. package/src/components/ChipList/ChipList.vue +5 -1
  150. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  151. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  152. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +0 -9
  153. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +22 -5
  154. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +143 -0
  155. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +14 -10
  156. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  157. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
  158. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  159. package/src/components/Customs/Selects/SySelect/SySelect.vue +14 -11
  160. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
  161. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  162. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  163. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
  164. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
  165. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  166. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  167. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  168. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  169. package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
  170. package/src/components/Customs/SyTextField/SyTextField.vue +154 -157
  171. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +32 -0
  172. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +120 -11
  173. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  174. package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
  175. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  176. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  177. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  178. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
  179. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  180. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
  181. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  182. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  183. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  184. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  185. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  186. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
  187. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  188. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  189. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  190. package/src/components/DatePicker/composables/index.ts +1 -0
  191. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  192. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  193. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  194. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  195. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  196. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  197. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  198. package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
  199. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  200. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  201. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  202. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  203. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  204. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  205. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  206. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  207. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  208. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +2 -1
  209. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +7 -7
  210. package/src/components/NirField/NirField.stories.ts +4 -0
  211. package/src/components/NirField/NirField.vue +64 -260
  212. package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
  213. package/src/components/NirField/locales.ts +1 -1
  214. package/src/components/NirField/tests/NirField.spec.ts +6 -0
  215. package/src/components/NirField/useNirValidation.ts +271 -0
  216. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  217. package/src/components/PasswordField/PasswordField.vue +18 -24
  218. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  219. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  220. package/src/components/PeriodField/PeriodField.vue +57 -57
  221. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  222. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  223. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  224. package/src/components/PhoneField/PhoneField.vue +5 -6
  225. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  226. package/src/components/RangeField/RangeField.vue +6 -0
  227. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  228. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  229. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  230. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  231. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  232. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
  233. package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
  234. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
  235. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
  236. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  237. package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
  238. package/src/components/Tables/SyTable/SyTable.vue +130 -56
  239. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
  240. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
  241. package/src/components/Tables/common/SyTableFilter.vue +22 -2
  242. package/src/components/Tables/common/TableHeader.vue +5 -1
  243. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  244. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  245. package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
  246. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  247. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  248. package/src/components/Tables/common/filters/locales.ts +0 -1
  249. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  250. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  251. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  252. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  253. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  254. package/src/components/Tables/common/tableStyles.scss +48 -4
  255. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  256. package/src/components/Tables/common/types.ts +13 -4
  257. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  258. package/src/components/Tables/common/usePagination.ts +13 -0
  259. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  260. package/src/components/Tables/common/useTableHeaders.ts +3 -3
  261. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  262. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  263. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  264. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  265. package/src/composables/rules/useFieldValidation.ts +34 -17
  266. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  267. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  268. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  269. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  270. package/src/composables/unifyValidation/useValidation.ts +190 -0
  271. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  272. package/src/composables/useFormFieldErrorHandling.ts +4 -7
  273. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  274. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  275. package/src/composables/validation/useFormValidation.ts +20 -13
  276. package/src/composables/validation/useValidatable.ts +8 -1
  277. package/src/composables/validation/useValidation.ts +135 -99
  278. package/src/composantsVuetify/Introduction.mdx +48 -0
  279. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  280. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  281. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  282. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  283. package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
  284. package/src/main.ts +0 -2
  285. package/src/stories/Components/Components.stories.ts +74 -9
  286. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  287. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  288. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  289. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  290. package/dist/SelectFilter-BioGT6Nn.js +0 -136
  291. package/dist/style.css +0 -1
  292. package/src/components/DatePicker/Accessibilite.mdx +0 -14
@@ -93,7 +93,7 @@ exports[`AmeliproHeaderBrandSection > Snapshots > renders the component with onl
93
93
  <img
94
94
  alt="AmeliPro"
95
95
  class="logo-amelipro"
96
- src="/src/assets/amelipro/img/amelipro.svg"
96
+ src="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='99'%20height='64'%20viewBox='0%200%2099%2064'%20fill='none'%3e%3cpath%20fill='%2300a5df'%20d='M68.38%2038.78c.54.32%201.45.63%202.31.63%202.76%200%205.38-1.87%205.38-5.72v-2.86c0-3.59-2.62-5.7-5.7-5.7-3.09%200-5.71%202.11-5.71%205.7v13.73h3.72v-5.78Zm0-2.99v-4.83c0-1.8.85-2.68%202-2.68%201.12%200%201.97.88%201.97%202.68v2.6c0%201.97-.88%202.7-2%202.7-.67%200-1.32-.2-1.97-.47ZM77.97%2039.07h3.7v-8.68c0-1.23.67-2.11%201.84-2.11.63%200%201.28.13%201.85.29l.7-3.02a8.47%208.47%200%200%200-2.57-.42c-3.1%200-5.52%202.11-5.52%205.26v8.68ZM86.43%2033.45c0%203.72%202.44%205.96%205.8%205.96%203.35%200%205.8-2.24%205.8-5.96V31.1c0-3.72-2.45-5.96-5.8-5.96-3.36%200-5.8%202.24-5.8%205.96v2.36Zm3.69-.13v-2.1c0-1.8.52-2.94%202.1-2.94%201.56%200%202.11%201.14%202.11%202.94v2.1c0%201.8-.55%202.94-2.1%202.94-1.57%200-2.11-1.14-2.11-2.94Z'/%3e%3cpath%20fill='%230c419a'%20d='M.47%2035.64c0-2.82%202.38-4.42%207.64-4.97-.08-1.2-.82-1.9-2.27-1.9-1.12%200-2.24.48-3.5%201.23L.94%2027.36a10.75%2010.75%200%200%201%205.67-1.78c3.39%200%205.25%201.97%205.25%206.09v7.72H8.15v-1.3s-1.53%201.64-3.7%201.64C2%2039.69.48%2037.9.48%2035.64Zm7.64-.22v-2.34c-2.8.37-3.88%201.26-3.88%202.27%200%20.85.6%201.3%201.53%201.3.86-.04%201.64-.52%202.35-1.23ZM57.84%2021.75c0-1.22.97-2.08%202.28-2.08%201.3%200%202.27.86%202.27%202.08%200%201.23-.97%202.08-2.27%202.08-1.35%200-2.28-.89-2.28-2.08Zm.3%204.05h3.91v13.48h-3.9V25.8ZM36.24%2032.7c0-4.37%202.76-7.05%206.07-7.05%203.77%200%205.85%202.79%205.85%206.46%200%20.7-.07%201.45-.14%201.79h-7.94c.33%201.97%201.67%202.86%203.43%202.86%201%200%201.86-.41%202.83-.97l1.34%202.49a8.4%208.4%200%200%201-4.7%201.52c-3.87-.04-6.74-2.64-6.74-7.1Zm8.6-1.48c0-1.48-.85-2.56-2.41-2.56-1.23%200-2.1.85-2.35%202.56h4.77ZM18.18%2027.66c1.08-1.08%202.28-2%204.03-2%201.86%200%203.02.77%203.69%202.18%201.15-1.19%202.38-2.19%204.17-2.19%202.9%200%204.21%202.08%204.21%205.39v8.28h-4.14v-7.73c0-1.85-.52-2.41-1.56-2.41-.63%200-1.34.4-2.16%201.23v8.95h-4.18v-7.77c0-1.85-.48-2.41-1.56-2.41-.63%200-1.34.4-2.16%201.23v8.95h-4.14V26.02h3.8v1.64ZM50.52%2035.2V20.34h3.92v15c0%20.86.37%201.12.7%201.12.15%200%20.26%200%20.49-.04l.48%202.94c-.44.18-1.08.33-1.97.33-2.72.04-3.62-1.75-3.62-4.5Z'/%3e%3c/svg%3e"
97
97
  />
98
98
  </button>
99
99
  </div>
@@ -67,8 +67,8 @@ exports[`AmeliproTextArea > Snapshots > renders the component with all propertie
67
67
  valid = value.trim() !== "";
68
68
  } else {
69
69
  valid = value !== null && value !== void 0;
70
- }
71
- return valid || __vite_ssr_import_0__.ruleMessage(errorMessages, "default");
70
+ };
71
+ return valid || (0,__vite_ssr_import_0__.ruleMessage)(errorMessages, "default");
72
72
  }"
73
73
  style="
74
74
  max-width: 150px;
@@ -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>
@@ -117,21 +117,21 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
117
117
  v-field-label
118
118
  v-label
119
119
  "
120
- for="input-v-2"
121
- id="input-v-2-label"
120
+ for="input-v-3"
121
+ id="input-v-3-label"
122
122
  >
123
123
  <!---->
124
124
  Caractères de l’audio
125
125
  </label>
126
126
  <!---->
127
127
  <input
128
- aria-describedby="input-v-2-messages"
128
+ aria-describedby="input-v-3-messages"
129
129
  aria-label="Caractères de l’audio"
130
- aria-labelledby="input-v-2-label"
130
+ aria-labelledby="input-v-3-label"
131
131
  autocomplete="off"
132
132
  class="v-field__input"
133
133
  direction="horizontal"
134
- id="input-v-2"
134
+ id="input-v-3"
135
135
  title="Caractères de l’audio"
136
136
  type="text"
137
137
  />
@@ -170,7 +170,7 @@ exports[`Captcha > renders correctly in audio mode 1`] = `
170
170
  appear="false"
171
171
  class="v-messages"
172
172
  css="true"
173
- id="input-v-2-messages"
173
+ id="input-v-3-messages"
174
174
  name="slide-y-transition"
175
175
  persisted="false"
176
176
  tag="div"
@@ -459,21 +459,21 @@ exports[`Captcha > renders correctly in image mode 1`] = `
459
459
  v-field-label
460
460
  v-label
461
461
  "
462
- for="input-v-1"
463
- id="input-v-1-label"
462
+ for="input-v-2"
463
+ id="input-v-2-label"
464
464
  >
465
465
  <!---->
466
466
  Caractères de l’image
467
467
  </label>
468
468
  <!---->
469
469
  <input
470
- aria-describedby="input-v-1-messages"
470
+ aria-describedby="input-v-2-messages"
471
471
  aria-label="Caractères de l’image"
472
- aria-labelledby="input-v-1-label"
472
+ aria-labelledby="input-v-2-label"
473
473
  autocomplete="off"
474
474
  class="v-field__input"
475
475
  direction="horizontal"
476
- id="input-v-1"
476
+ id="input-v-2"
477
477
  title="Caractères de l’image"
478
478
  type="text"
479
479
  />
@@ -512,7 +512,7 @@ exports[`Captcha > renders correctly in image mode 1`] = `
512
512
  appear="false"
513
513
  class="v-messages"
514
514
  css="true"
515
- id="input-v-1-messages"
515
+ id="input-v-2-messages"
516
516
  name="slide-y-transition"
517
517
  persisted="false"
518
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: {
@@ -18,8 +18,6 @@ import {
18
18
  apgHref="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
19
19
  >
20
20
 
21
- ## Critères d'accessibilité
22
-
23
21
  <CriteriaSection>
24
22
 
25
23
  <CriteriaCard title="Structure sémantique">
@@ -49,10 +47,6 @@ import {
49
47
 
50
48
  <DemoSection>
51
49
 
52
- ## Démo
53
-
54
- Exemples d'utilisation du composant `SelectBtnField` :
55
-
56
50
  ```vue
57
51
  <template>
58
52
  <!-- Sélection simple avec label -->
@@ -92,7 +86,6 @@ Exemples d'utilisation du composant `SelectBtnField` :
92
86
 
93
87
  </DemoSection>
94
88
 
95
- ## Bonnes pratiques
96
89
 
97
90
  <BestPracticesSection>
98
91
 
@@ -122,8 +115,6 @@ Exemples d'utilisation du composant `SelectBtnField` :
122
115
 
123
116
  </BestPracticesSection>
124
117
 
125
- ## Ressources
126
-
127
118
  <ResourcesSection>
128
119
 
129
120
  - [WAI-ARIA Authoring Practices - Listbox](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/)
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { computed, onMounted, ref, watch, type PropType } from 'vue'
2
+ import { computed, nextTick, onMounted, ref, watch, type PropType } from 'vue'
3
3
  import { VMenu, VList, VListItem, VListItemTitle, VChip } from 'vuetify/components'
4
4
  import { mdiChevronDown, mdiCloseCircle } from '@mdi/js'
5
5
  import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
@@ -168,6 +168,7 @@
168
168
  const selected = ref<SelectValue | SelectArray>(props.modelValue as SelectValue | SelectArray)
169
169
  const hasInteracted = ref(false)
170
170
  const suppressNextInput = ref(false)
171
+ const suppressMenuOpen = ref(false)
171
172
  type SyTextFieldInstance = InstanceType<typeof SyTextField> & { $refs?: { input?: HTMLInputElement } }
172
173
  const textFieldRef = ref<SyTextFieldInstance | null>(null)
173
174
  const randomId = Math.random().toString(36).slice(2)
@@ -199,6 +200,7 @@
199
200
 
200
201
  const syncSearchFromValue = () => {
201
202
  if (props.multiple) return
203
+ suppressMenuOpen.value = true
202
204
  if (!selected.value) {
203
205
  search.value = ''
204
206
  return
@@ -241,6 +243,11 @@
241
243
  let debounceHandle: ReturnType<typeof setTimeout> | null = null
242
244
 
243
245
  watch(search, () => {
246
+ if (suppressMenuOpen.value) {
247
+ suppressMenuOpen.value = false
248
+ return
249
+ }
250
+
244
251
  if (!isOpen.value) {
245
252
  isOpen.value = true
246
253
  }
@@ -368,7 +375,15 @@
368
375
  return errorHandling.validateOnSubmit()
369
376
  }
370
377
 
371
- const checkErrorOnBlur = () => {
378
+ const checkErrorOnBlur = (event?: FocusEvent) => {
379
+ const relatedTarget = event?.relatedTarget as HTMLElement | null | undefined
380
+ if (relatedTarget?.closest('.sy-autocomplete__chip') || relatedTarget?.closest('.sy-autocomplete__clear-button')) {
381
+ isOpen.value = true
382
+ nextTick(() => {
383
+ focusInput(textFieldRef)
384
+ })
385
+ return
386
+ }
372
387
  markInteracted()
373
388
  return errorHandling.checkErrorOnBlur()
374
389
  }
@@ -522,7 +537,9 @@
522
537
  class="sy-autocomplete__chip"
523
538
  closable
524
539
  :close-label="locales.removeChip(getChipLabel(item as ItemType))"
525
- @click:close="() => selectItem(item as ItemType)"
540
+ @click:close.stop.prevent="() => selectItem(item as ItemType)"
541
+ @keydown.enter.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && selectItem(item as ItemType)"
542
+ @keydown.space.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && selectItem(item as ItemType)"
526
543
  >
527
544
  {{ getChipLabel(item as ItemType) }}
528
545
  </VChip>
@@ -639,7 +656,7 @@
639
656
  }
640
657
 
641
658
  .sy-autocomplete__clear-icon {
642
- color: rgb(0 0 0 / 54%);
659
+ color: rgb(var(--v-theme-iconBase));
643
660
  }
644
661
 
645
662
  .sy-autocomplete__chip {
@@ -707,7 +724,7 @@ li:hover {
707
724
  .v-list-item.keyboard-focused,
708
725
  li:focus-visible,
709
726
  li.keyboard-focused {
710
- outline: 2px solid tokens.$primary-base;
727
+ outline: 2px solid rgb(var(--v-theme-accentPrimary));
711
728
  outline-offset: -2px;
712
729
  background-color: rgb(0 0 0 / 8%);
713
730
  }