@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
@@ -183,6 +183,149 @@ describe('SyAutocomplete', () => {
183
183
  expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([null])
184
184
  })
185
185
 
186
+ it('removes chip when Enter key is pressed on chip close button', async () => {
187
+ wrapper.unmount()
188
+ wrapper = mount(SyAutocomplete, {
189
+ props: {
190
+ modelValue: [items[0]!, items[1]!],
191
+ items,
192
+ multiple: true,
193
+ chips: true,
194
+ returnObject: true,
195
+ label: 'Test Chips Keyboard',
196
+ textKey: 'text',
197
+ valueKey: 'value',
198
+ },
199
+ attachTo: document.body,
200
+ })
201
+
202
+ await wrapper.vm.$nextTick()
203
+ const closeBtn = wrapper.find('.v-chip__close')
204
+ closeBtn.element.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, cancelable: true }))
205
+ await flushPromises()
206
+ await wrapper.vm.$nextTick()
207
+
208
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
209
+ // First item was removed — remaining is [items[1]]
210
+ const emitted = wrapper.emitted('update:modelValue')?.[0]?.[0] as unknown[]
211
+ expect(emitted).toHaveLength(1)
212
+ expect((emitted[0] as { value: string }).value).toBe('2')
213
+ })
214
+
215
+ it('removes chip when Space key is pressed on chip close button', async () => {
216
+ wrapper.unmount()
217
+ wrapper = mount(SyAutocomplete, {
218
+ props: {
219
+ modelValue: [items[0]!, items[1]!],
220
+ items,
221
+ multiple: true,
222
+ chips: true,
223
+ returnObject: true,
224
+ label: 'Test Chips Space',
225
+ textKey: 'text',
226
+ valueKey: 'value',
227
+ },
228
+ attachTo: document.body,
229
+ })
230
+
231
+ await wrapper.vm.$nextTick()
232
+ const closeBtn = wrapper.find('.v-chip__close')
233
+ closeBtn.element.dispatchEvent(new KeyboardEvent('keydown', { key: ' ', bubbles: true, cancelable: true }))
234
+ await flushPromises()
235
+ await wrapper.vm.$nextTick()
236
+
237
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
238
+ const emitted = wrapper.emitted('update:modelValue')?.[0]?.[0] as unknown[]
239
+ expect(emitted).toHaveLength(1)
240
+ })
241
+
242
+ it('does not open menu when modelValue is set programmatically (suppressMenuOpen)', async () => {
243
+ // Menu must be closed initially
244
+ expect(isMenuOverlayActive()).toBe(false)
245
+
246
+ // Programmatic update (e.g., filter reset sets a value) should NOT open the menu
247
+ await wrapper.setProps({ modelValue: items[0] })
248
+ await flushPromises()
249
+ await wrapper.vm.$nextTick()
250
+
251
+ expect(isMenuOverlayActive()).toBe(false)
252
+ })
253
+
254
+ it('keeps menu open when blur target is a chip (checkErrorOnBlur)', async () => {
255
+ wrapper.unmount()
256
+ wrapper = mount(SyAutocomplete, {
257
+ props: {
258
+ modelValue: ['1'],
259
+ items,
260
+ multiple: true,
261
+ chips: true,
262
+ label: 'Test blur chip',
263
+ textKey: 'text',
264
+ valueKey: 'value',
265
+ menuId,
266
+ },
267
+ attachTo: document.body,
268
+ })
269
+
270
+ // Open menu
271
+ const input = wrapper.find('input')
272
+ await input.trigger('click')
273
+ await flushPromises()
274
+ await wrapper.vm.$nextTick()
275
+ expect(isMenuOverlayActive()).toBe(true)
276
+
277
+ // Create a chip DOM element as blur relatedTarget
278
+ const chipEl = document.createElement('span')
279
+ chipEl.className = 'sy-autocomplete__chip'
280
+ document.body.appendChild(chipEl)
281
+
282
+ const inputEl = getInputEl()!
283
+ inputEl.dispatchEvent(new FocusEvent('blur', { relatedTarget: chipEl, bubbles: true }))
284
+ await flushPromises()
285
+ await wrapper.vm.$nextTick()
286
+
287
+ // Menu should remain open
288
+ expect(isMenuOverlayActive()).toBe(true)
289
+
290
+ document.body.removeChild(chipEl)
291
+ })
292
+
293
+ it('keeps menu open when blur target is the clear button (checkErrorOnBlur)', async () => {
294
+ wrapper.unmount()
295
+ wrapper = mount(SyAutocomplete, {
296
+ props: {
297
+ modelValue: items[0],
298
+ items,
299
+ clearable: true,
300
+ label: 'Test blur clear',
301
+ textKey: 'text',
302
+ valueKey: 'value',
303
+ menuId,
304
+ },
305
+ attachTo: document.body,
306
+ })
307
+
308
+ const input = wrapper.find('input')
309
+ await input.trigger('click')
310
+ await flushPromises()
311
+ await wrapper.vm.$nextTick()
312
+ expect(isMenuOverlayActive()).toBe(true)
313
+
314
+ // Create a clear-button DOM element as blur relatedTarget
315
+ const clearBtn = document.createElement('button')
316
+ clearBtn.className = 'sy-autocomplete__clear-button'
317
+ document.body.appendChild(clearBtn)
318
+
319
+ const inputEl = getInputEl()!
320
+ inputEl.dispatchEvent(new FocusEvent('blur', { relatedTarget: clearBtn, bubbles: true }))
321
+ await flushPromises()
322
+ await wrapper.vm.$nextTick()
323
+
324
+ expect(isMenuOverlayActive()).toBe(true)
325
+
326
+ document.body.removeChild(clearBtn)
327
+ })
328
+
186
329
  it('shows clear button when clearable and has selection', async () => {
187
330
  wrapper.unmount()
188
331
  wrapper = mount(SyAutocomplete, {
@@ -160,21 +160,25 @@ export const ariaManager = {
160
160
  }
161
161
  }
162
162
  inputEl.setAttribute('aria-haspopup', 'listbox')
163
- if (!popupRendered) {
163
+ if (!isOpen.value) {
164
164
  inputEl.removeAttribute('aria-controls')
165
- if (isOpen.value) {
166
- nextTick(() => {
167
- const popupNowRendered = Boolean(document.getElementById(menuId))
168
- if (popupNowRendered) {
169
- inputEl.setAttribute('aria-controls', menuId)
170
- }
171
- })
172
- }
165
+ }
166
+ else if (!popupRendered) {
167
+ inputEl.removeAttribute('aria-controls')
168
+ nextTick(() => {
169
+ const popupNowRendered = Boolean(document.getElementById(menuId))
170
+ if (isOpen.value && popupNowRendered) {
171
+ inputEl.setAttribute('aria-controls', menuId)
172
+ }
173
+ else {
174
+ inputEl.removeAttribute('aria-controls')
175
+ }
176
+ })
173
177
  }
174
178
  ariaManager.updateValidationAttributes(inputEl, false, false)
175
179
  nextTick(() => {
176
180
  const popupStillThere = Boolean(document.getElementById(menuId))
177
- if (popupStillThere) {
181
+ if (isOpen.value && popupStillThere) {
178
182
  inputEl.setAttribute('aria-controls', menuId)
179
183
  }
180
184
  else {
@@ -508,12 +508,12 @@ const options = [
508
508
  { text: 'Option 3', value: '3' },
509
509
  ]
510
510
 
511
- const validateForm = () => {
511
+ const validateForm = async (): Promise<void> => {
512
512
  // Réinitialiser
513
513
  formSubmitted.value = false
514
514
 
515
515
  // Valider le champ avec la méthode validateOnSubmit
516
- const isValid = selectField.value.validateOnSubmit()
516
+ const isValid = await selectField.value.validateOnSubmit()
517
517
 
518
518
  if (!isValid) {
519
519
  return
@@ -551,7 +551,7 @@ const validateForm = () => {
551
551
  const errorMessages = ref([])
552
552
  const formSubmitted = ref(false)
553
553
 
554
- const validateForm = () => {
554
+ const validateForm = async (): Promise<void> => {
555
555
  // Réinitialiser
556
556
  formSubmitted.value = false
557
557
 
@@ -562,7 +562,7 @@ const validateForm = () => {
562
562
  }
563
563
 
564
564
  // Valider le champ avec la méthode validateOnSubmit
565
- const isValid = selectField.value.validateOnSubmit()
565
+ const isValid = await selectField.value.validateOnSubmit()
566
566
 
567
567
  if (!isValid) {
568
568
  return
@@ -50,7 +50,6 @@
50
50
 
51
51
  // Initialisation du composable de validation
52
52
  const validation = useValidation({
53
- customRules: props.customRules,
54
53
  fieldIdentifier: props.label,
55
54
  disableErrorHandling: props.disableErrorHandling,
56
55
  })
@@ -90,11 +89,11 @@
90
89
  const inputId = ref(`sy-input-select-${Math.random().toString(36).substring(7)}`)
91
90
 
92
91
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
93
- const selectItem = (item: any) => {
92
+ const selectItem = async (item: any) => {
94
93
  selectedItem.value = item
95
94
  emit('update:modelValue', item)
96
95
  isOpen.value = false
97
- validateField(item)
96
+ await validateField(item)
98
97
  emit('update:errorMessages', localErrorMessages.value)
99
98
  }
100
99
 
@@ -182,7 +181,7 @@
182
181
  : [],
183
182
  )
184
183
 
185
- const validateField = (value: unknown) => {
184
+ const validateField = async (value: unknown) => {
186
185
  if (props.readonly) {
187
186
  validation.clearValidation()
188
187
  localErrorMessages.value = []
@@ -195,7 +194,7 @@
195
194
  return true
196
195
  }
197
196
 
198
- const result = validation.validateField(
197
+ const result = await validation.validateField(
199
198
  value,
200
199
  [...defaultRules.value, ...(props.customRules || [])],
201
200
  )
@@ -204,14 +203,14 @@
204
203
  return !result.hasError
205
204
  }
206
205
 
207
- const validateOnSubmit = () => {
208
- const isValid = validateField(selectedItem.value)
206
+ const validateOnSubmit = async () => {
207
+ const isValid = await validateField(selectedItem.value)
209
208
  hasError.value = !isValid
210
209
  return isValid
211
210
  }
212
211
 
213
- const checkForErrors = () => {
214
- return validateField(selectedItem.value)
212
+ const checkForErrors = async () => {
213
+ return await validateField(selectedItem.value)
215
214
  }
216
215
 
217
216
  defineExpose({
@@ -96,7 +96,7 @@ describe('SyInputSelect', () => {
96
96
  })
97
97
  })
98
98
 
99
- describe('Validation', () => {
99
+ describe('Validation', async () => {
100
100
  it('validateField valide correctement un champ requis avec une valeur', async () => {
101
101
  const wrapper = mount(SyInputSelect, {
102
102
  props: {
@@ -105,7 +105,7 @@ describe('SyInputSelect', () => {
105
105
  },
106
106
  })
107
107
 
108
- const result = wrapper.vm.validateField({ text: 'Option 1', value: '1' })
108
+ const result = await wrapper.vm.validateField({ text: 'Option 1', value: '1' })
109
109
  expect(result).toBe(true)
110
110
  expect(wrapper.find('.v-messages__message').exists()).toBe(false)
111
111
  })
@@ -119,7 +119,7 @@ describe('SyInputSelect', () => {
119
119
  },
120
120
  })
121
121
 
122
- const result = wrapper.vm.validateField(null)
122
+ const result = await wrapper.vm.validateField(null)
123
123
  expect(result).toBe(false)
124
124
 
125
125
  await wrapper.setProps({ errorMessages: ['Test Label est requis'] })
@@ -134,15 +134,15 @@ describe('SyInputSelect', () => {
134
134
  props: { required: true },
135
135
  })
136
136
 
137
- const result = wrapper.vm.validateOnSubmit()
137
+ const result = await wrapper.vm.validateOnSubmit()
138
138
  expect(result).toBe(false)
139
139
 
140
140
  await wrapper.setProps({ modelValue: { text: 'Option 1', value: '1' } })
141
- const resultWithValue = wrapper.vm.validateOnSubmit()
141
+ const resultWithValue = await wrapper.vm.validateOnSubmit()
142
142
  expect(resultWithValue).toBe(true)
143
143
  })
144
144
 
145
- it('vérifie que checkForErrors retourne le résultat de la validation', () => {
145
+ it('vérifie que checkForErrors retourne le résultat de la validation', async () => {
146
146
  const wrapper1 = mount(SyInputSelect, {
147
147
  props: {
148
148
  required: true,
@@ -150,7 +150,7 @@ describe('SyInputSelect', () => {
150
150
  },
151
151
  })
152
152
 
153
- const result1 = wrapper1.vm.checkForErrors()
153
+ const result1 = await wrapper1.vm.checkForErrors()
154
154
  expect(result1).toBe(false)
155
155
 
156
156
  const wrapper2 = mount(SyInputSelect, {
@@ -160,13 +160,13 @@ describe('SyInputSelect', () => {
160
160
  },
161
161
  })
162
162
 
163
- const result2 = wrapper2.vm.checkForErrors()
163
+ const result2 = await wrapper2.vm.checkForErrors()
164
164
  expect(result2).toBe(true)
165
165
  })
166
166
  })
167
167
 
168
168
  describe('Mode readonly', () => {
169
- it('désactive la validation en mode readonly', () => {
169
+ it('désactive la validation en mode readonly', async () => {
170
170
  const wrapper = mount(SyInputSelect, {
171
171
  props: {
172
172
  readonly: true,
@@ -174,7 +174,7 @@ describe('SyInputSelect', () => {
174
174
  },
175
175
  })
176
176
 
177
- const result = wrapper.vm.validateField(null)
177
+ const result = await wrapper.vm.validateField(null)
178
178
  expect(result).toBe(true)
179
179
  expect(wrapper.find('.v-messages__message').exists()).toBe(false)
180
180
  })
@@ -193,7 +193,7 @@
193
193
 
194
194
  const iconColor = computed(() => {
195
195
  if (hasError.value || Boolean(isRequired.value) || props.errorMessages.length > 0) return 'error'
196
- return 'rgb(0 0 0 / 70%)'
196
+ return 'rgb(var(--v-theme-iconBase));'
197
197
  })
198
198
 
199
199
  const variant = computed(() => {
@@ -286,7 +286,10 @@
286
286
  emit('update:modelValue', props.multiple ? [] : null)
287
287
 
288
288
  // Garder la liste ouverte après une suppression et réinitialiser la navigation au clavier
289
- if (event?.type === 'keydown' || event?.type === 'click') {
289
+ const target = event?.target as HTMLElement | undefined
290
+ const listElement = list.value?.$el as HTMLElement | undefined
291
+ const isClickFromList = Boolean(listElement && target && listElement.contains(target))
292
+ if (event?.type === 'keydown' || isClickFromList) {
290
293
  if (!isOpen.value) {
291
294
  isOpen.value = true
292
295
  }
@@ -968,7 +971,9 @@
968
971
  class="ma-1"
969
972
  closable
970
973
  :close-label="locales.removeChip(getChipText(item))"
971
- @click:close="removeChip(item)"
974
+ @click:close.stop.prevent="removeChip(item)"
975
+ @keydown.enter.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && removeChip(item)"
976
+ @keydown.space.capture.stop.prevent="(event) => (event.target as HTMLElement | null)?.closest('.v-chip__close') && removeChip(item)"
972
977
  >
973
978
  {{ getChipText(item) }}
974
979
  </VChip>
@@ -1144,8 +1149,6 @@
1144
1149
  </template>
1145
1150
 
1146
1151
  <style scoped lang="scss">
1147
- @use '@/assets/tokens';
1148
-
1149
1152
  .sy-select-container {
1150
1153
  display: flex;
1151
1154
  flex-direction: column;
@@ -1157,12 +1160,12 @@
1157
1160
 
1158
1161
  :deep(.v-input__prepend > .v-icon__svg),
1159
1162
  :deep(.v-input__append > .v-icon__svg) {
1160
- fill: rgb(0 0 0 / 70%);
1163
+ fill: rgb(var(--v-theme-iconBase));
1161
1164
  }
1162
1165
 
1163
1166
  :deep(.v-input__prepend .v-icon:focus-visible),
1164
1167
  :deep(.v-input__append .v-icon:focus-visible) {
1165
- outline: 2px solid tokens.$primary-base;
1168
+ outline: 2px solid rgb(var(--v-theme-accentPrimary));
1166
1169
  outline-offset: 2px;
1167
1170
  opacity: 1;
1168
1171
  }
@@ -1213,7 +1216,7 @@
1213
1216
  /* Ensure focus styles match selection styles for keyboard navigation */
1214
1217
  .v-list-item:focus-visible,
1215
1218
  .v-list-item.keyboard-focused {
1216
- outline: 2px solid tokens.$primary-base;
1219
+ outline: 2px solid rgb(var(--v-theme-accentPrimary));
1217
1220
  outline-offset: -2px;
1218
1221
  background-color: rgb(0 0 0 / 8%);
1219
1222
  }
@@ -1240,11 +1243,11 @@
1240
1243
  .v-icon.arrow {
1241
1244
  position: absolute;
1242
1245
  right: 10px;
1243
- color: tokens.$grey-darken-20;
1246
+ color: rgb(var(--v-theme-iconBase));
1244
1247
  }
1245
1248
 
1246
1249
  .sy-select__clear-icon {
1247
- color: tokens.$grey-darken-20 !important;
1250
+ color: rgb(var(--v-theme-iconBase)) !important;
1248
1251
  opacity: var(--v-medium-emphasis-opacity) !important;
1249
1252
  }
1250
1253
 
@@ -1289,7 +1292,7 @@
1289
1292
 
1290
1293
  .sy-select :deep(.v-field__input) {
1291
1294
  opacity: 1;
1292
- color: tokens.$grey-darken-20 !important;
1295
+ color: rgb(var(--v-theme-iconBase)) !important;
1293
1296
  cursor: pointer;
1294
1297
  caret-color: transparent;
1295
1298
  padding-right: 25px;
@@ -964,6 +964,60 @@ describe('SySelect.vue', () => {
964
964
 
965
965
  wrapper.unmount()
966
966
  })
967
+
968
+ it('removes chip when Enter key is pressed on chip close button', async () => {
969
+ const items = [
970
+ { text: 'Option 1', value: '1' },
971
+ { text: 'Option 2', value: '2' },
972
+ ]
973
+ const wrapper = mount(SySelect, {
974
+ props: {
975
+ items,
976
+ multiple: true,
977
+ chips: true,
978
+ modelValue: ['1', '2'],
979
+ textKey: 'text',
980
+ valueKey: 'value',
981
+ },
982
+ attachTo: document.body,
983
+ })
984
+
985
+ await wrapper.vm.$nextTick()
986
+ const closeButton = wrapper.find('.v-chip__close')
987
+ closeButton.element.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, cancelable: true }))
988
+ await wrapper.vm.$nextTick()
989
+
990
+ expect(wrapper.emitted()['update:modelValue']?.[0]).toEqual([['2']])
991
+
992
+ wrapper.unmount()
993
+ })
994
+
995
+ it('removes chip when Space key is pressed on chip close button', async () => {
996
+ const items = [
997
+ { text: 'Option 1', value: '1' },
998
+ { text: 'Option 2', value: '2' },
999
+ ]
1000
+ const wrapper = mount(SySelect, {
1001
+ props: {
1002
+ items,
1003
+ multiple: true,
1004
+ chips: true,
1005
+ modelValue: ['1', '2'],
1006
+ textKey: 'text',
1007
+ valueKey: 'value',
1008
+ },
1009
+ attachTo: document.body,
1010
+ })
1011
+
1012
+ await wrapper.vm.$nextTick()
1013
+ const closeButton = wrapper.find('.v-chip__close')
1014
+ closeButton.element.dispatchEvent(new KeyboardEvent('keydown', { key: ' ', bubbles: true, cancelable: true }))
1015
+ await wrapper.vm.$nextTick()
1016
+
1017
+ expect(wrapper.emitted()['update:modelValue']?.[0]).toEqual([['2']])
1018
+
1019
+ wrapper.unmount()
1020
+ })
967
1021
  })
968
1022
 
969
1023
  describe('keyboard navigation', () => {
@@ -83,9 +83,6 @@
83
83
  const isSubmitted = ref(false)
84
84
 
85
85
  const validation = useValidation({
86
- customRules: props.customRules,
87
- warningRules: props.customWarningRules,
88
- successRules: props.customSuccessRules,
89
86
  showSuccessMessages: props.showSuccessMessages,
90
87
  fieldIdentifier: props.label,
91
88
  disableErrorHandling: props.disableErrorHandling,
@@ -135,7 +132,7 @@
135
132
  return model.value as (string | number) | null
136
133
  }
137
134
 
138
- const validateField = (value: (string | number) | (string | number)[] | null) => {
135
+ const validateField = async (value: (string | number) | (string | number)[] | null) => {
139
136
  if (props.readonly) {
140
137
  validation.clearValidation()
141
138
  return true
@@ -146,7 +143,7 @@
146
143
  return true
147
144
  }
148
145
 
149
- const result = validation.validateField(
146
+ const result = await validation.validateField(
150
147
  value,
151
148
  [...defaultRules.value, ...props.customRules],
152
149
  props.customWarningRules,
@@ -155,18 +152,18 @@
155
152
  return !result.hasError
156
153
  }
157
154
 
158
- const validateOnSubmit = () => {
155
+ const validateOnSubmit = async () => {
159
156
  isSubmitted.value = true
160
- return validateField(getValidationValue())
157
+ return await validateField(getValidationValue())
161
158
  }
162
159
 
163
160
  const checkErrorOnBlur = () => {
164
161
  validateField(getValidationValue())
165
162
  }
166
163
 
167
- watch(model, (newValue) => {
164
+ watch(model, async (newValue) => {
168
165
  if (!props.isValidateOnBlur || isSubmitted.value) {
169
- validateField(newValue as (string | number) | (string | number)[] | null)
166
+ await validateField(newValue as (string | number) | (string | number)[] | null)
170
167
  }
171
168
  })
172
169
 
@@ -5,7 +5,7 @@ import { fn } from '@storybook/test'
5
5
 
6
6
  // Interface pour typer correctement le composant SyCheckbox avec sa méthode validateOnSubmit
7
7
  interface SyCheckboxInstance {
8
- validateOnSubmit: () => boolean
8
+ validateOnSubmit: () => Promise<boolean>
9
9
  }
10
10
 
11
11
  const meta = {
@@ -171,9 +171,6 @@ export const Indeterminate: Story = {
171
171
  template: `<SyCheckbox v-model="checked" :indeterminate="indeterminate" v-bind="args" label="Case à cocher indéterminée" />`,
172
172
  }),
173
173
  parameters: {
174
- a11y: {
175
- disable: true,
176
- },
177
174
  sourceCode: [
178
175
  {
179
176
  name: 'Template',
@@ -207,9 +204,6 @@ Cette case à cocher est dans un état indéterminé, généralement utilisé lo
207
204
 
208
205
  export const WithControlsIds: Story = {
209
206
  parameters: {
210
- a11y: {
211
- disable: true,
212
- },
213
207
  sourceCode: [
214
208
  {
215
209
  name: 'Template',
@@ -702,11 +696,11 @@ const rules = [
702
696
  },
703
697
  ]
704
698
 
705
- const validateForm = () => {
699
+ const validateForm = async (): Promise<void> => {
706
700
  if (!checkbox.value || !checkbox2.value) return
707
701
  hasError.value = true
708
- const isValid = checkbox.value.validateOnSubmit()
709
- const isValid2 = checkbox2.value.validateOnSubmit()
702
+ const isValid = await checkbox.value.validateOnSubmit()
703
+ const isValid2 = await checkbox2.value.validateOnSubmit()
710
704
  if (isValid && isValid2) {
711
705
  formSubmitted.value = true
712
706
  hasError.value = false
@@ -735,18 +729,18 @@ Cette case à cocher utilise des règles de validation personnalisées et valide
735
729
  const hasError = ref(false)
736
730
 
737
731
  // Revalider quand les valeurs changent
738
- watch([checked, checked2], () => {
732
+ watch([checked, checked2], async () => {
739
733
  if (hasError.value && checkbox.value && checkbox2.value) {
740
- checkbox.value.validateOnSubmit()
741
- checkbox2.value.validateOnSubmit()
734
+ await checkbox.value.validateOnSubmit()
735
+ await checkbox2.value.validateOnSubmit()
742
736
  }
743
737
  })
744
738
 
745
- const validateForm = () => {
739
+ const validateForm = async (): Promise<void> => {
746
740
  if (!checkbox.value || !checkbox2.value) return
747
741
  hasError.value = true
748
- const isValid = checkbox.value.validateOnSubmit()
749
- const isValid2 = checkbox2.value.validateOnSubmit()
742
+ const isValid = await checkbox.value.validateOnSubmit()
743
+ const isValid2 = await checkbox2.value.validateOnSubmit()
750
744
  if (isValid && isValid2) {
751
745
  formSubmitted.value = true
752
746
  hasError.value = false