@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
@@ -33,48 +33,48 @@ describe('useFieldValidation', () => {
33
33
  global.Date = originalDate
34
34
  })
35
35
 
36
- it('should validate required rule', () => {
36
+ it('should validate required rule', async () => {
37
37
  const rules = generateRules([{ type: 'required', options: { message: 'This field is required.' } }])
38
38
  const rule = rules[0]!
39
39
 
40
- expect(rule('')).toEqual({ error: 'This field is required.' })
41
- expect(rule('value')).toEqual({ success: 'Le champ est valide.' })
42
- expect(rule(new Date())).toEqual({ success: 'Le champ est valide.' })
43
- expect(rule({ key: 'value' })).toEqual({ success: 'Le champ est valide.' })
44
- expect(rule(null)).toEqual({ error: 'This field is required.' })
40
+ expect(await rule('')).toEqual({ error: 'This field is required.' })
41
+ expect(await rule('value')).toEqual({ success: 'Le champ est valide.' })
42
+ expect(await rule(new Date())).toEqual({ success: 'Le champ est valide.' })
43
+ expect(await rule({ key: 'value' })).toEqual({ success: 'Le champ est valide.' })
44
+ expect(await rule(null)).toEqual({ error: 'This field is required.' })
45
45
  })
46
46
 
47
- it('should validate min rule', () => {
47
+ it('should validate min rule', async () => {
48
48
  const rules = generateRules([{ type: 'min', options: { value: 5, message: 'Value must be at least 5.' } }])
49
49
  const rule = rules[0]!
50
50
 
51
- expect(rule(3)).toEqual({ error: 'Value must be at least 5.' })
52
- expect(rule(5)).toEqual({ success: 'Le champ est valide.' })
53
- expect(rule(10)).toEqual({ success: 'Le champ est valide.' })
54
- expect(rule('')).toEqual({}) // Empty string should be ignored
51
+ expect(await rule(3)).toEqual({ error: 'Value must be at least 5.' })
52
+ expect(await rule(5)).toEqual({ success: 'Le champ est valide.' })
53
+ expect(await rule(10)).toEqual({ success: 'Le champ est valide.' })
54
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
55
55
  })
56
56
 
57
- it('should validate max rule', () => {
57
+ it('should validate max rule', async () => {
58
58
  const rules = generateRules([{ type: 'max', options: { value: 10, message: 'Value must be at most 10.' } }])
59
59
  const rule = rules[0]!
60
60
 
61
- expect(rule(15)).toEqual({ error: 'Value must be at most 10.' })
62
- expect(rule(10)).toEqual({ success: 'Le champ est valide.' })
63
- expect(rule(5)).toEqual({ success: 'Le champ est valide.' })
64
- expect(rule('')).toEqual({}) // Empty string should be ignored
61
+ expect(await rule(15)).toEqual({ error: 'Value must be at most 10.' })
62
+ expect(await rule(10)).toEqual({ success: 'Le champ est valide.' })
63
+ expect(await rule(5)).toEqual({ success: 'Le champ est valide.' })
64
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
65
65
  })
66
66
 
67
- it('should validate minLength rule', () => {
67
+ it('should validate minLength rule', async () => {
68
68
  const rules = generateRules([{ type: 'minLength', options: { length: 5, message: 'Minimum length is 5.' } }])
69
69
  const rule = rules[0]!
70
70
 
71
- expect(rule('1234')).toEqual({ error: 'Minimum length is 5.' })
72
- expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
73
- expect(rule('123456')).toEqual({ success: 'Le champ est valide.' })
74
- expect(rule('')).toEqual({}) // Empty string should be ignored
71
+ expect(await rule('1234')).toEqual({ error: 'Minimum length is 5.' })
72
+ expect(await rule('12345')).toEqual({ success: 'Le champ est valide.' })
73
+ expect(await rule('123456')).toEqual({ success: 'Le champ est valide.' })
74
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
75
75
  })
76
76
 
77
- it('should validate minLength rule with ignoreSpace option', () => {
77
+ it('should validate minLength rule with ignoreSpace option', async () => {
78
78
  const rules = generateRules([{
79
79
  type: 'minLength',
80
80
  options: {
@@ -85,21 +85,21 @@ describe('useFieldValidation', () => {
85
85
  }])
86
86
  const rule = rules[0]!
87
87
 
88
- expect(rule('1 2 3 4')).toEqual({ error: 'Minimum length is 5.' }) // Length without spaces is 4
89
- expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
88
+ expect(await rule('1 2 3 4')).toEqual({ error: 'Minimum length is 5.' }) // Length without spaces is 4
89
+ expect(await rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
90
90
  })
91
91
 
92
- it('should validate maxLength rule', () => {
92
+ it('should validate maxLength rule', async () => {
93
93
  const rules = generateRules([{ type: 'maxLength', options: { length: 5, message: 'Maximum length is 5.' } }])
94
94
  const rule = rules[0]!
95
95
 
96
- expect(rule('123456')).toEqual({ error: 'Maximum length is 5.' })
97
- expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
98
- expect(rule('1234')).toEqual({ success: 'Le champ est valide.' })
99
- expect(rule('')).toEqual({}) // Empty string should be ignored
96
+ expect(await rule('123456')).toEqual({ error: 'Maximum length is 5.' })
97
+ expect(await rule('12345')).toEqual({ success: 'Le champ est valide.' })
98
+ expect(await rule('1234')).toEqual({ success: 'Le champ est valide.' })
99
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
100
100
  })
101
101
 
102
- it('should validate maxLength rule with ignoreSpace option', () => {
102
+ it('should validate maxLength rule with ignoreSpace option', async () => {
103
103
  const rules = generateRules([{
104
104
  type: 'maxLength',
105
105
  options: {
@@ -110,21 +110,21 @@ describe('useFieldValidation', () => {
110
110
  }])
111
111
  const rule = rules[0]!
112
112
 
113
- expect(rule('1 2 3 4 5 6')).toEqual({ error: 'Maximum length is 5.' }) // Length without spaces is 6
114
- expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
113
+ expect(await rule('1 2 3 4 5 6')).toEqual({ error: 'Maximum length is 5.' }) // Length without spaces is 6
114
+ expect(await rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
115
115
  })
116
116
 
117
- it('should validate exactLength rule', () => {
117
+ it('should validate exactLength rule', async () => {
118
118
  const rules = generateRules([{ type: 'exactLength', options: { length: 5, message: 'Length must be exactly 5.' } }])
119
119
  const rule = rules[0]!
120
120
 
121
- expect(rule('1234')).toEqual({ error: 'Length must be exactly 5.' })
122
- expect(rule('123456')).toEqual({ error: 'Length must be exactly 5.' })
123
- expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
124
- expect(rule('')).toEqual({}) // Empty string should be ignored
121
+ expect(await rule('1234')).toEqual({ error: 'Length must be exactly 5.' })
122
+ expect(await rule('123456')).toEqual({ error: 'Length must be exactly 5.' })
123
+ expect(await rule('12345')).toEqual({ success: 'Le champ est valide.' })
124
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
125
125
  })
126
126
 
127
- it('should validate exactLength rule with ignoreSpace option', () => {
127
+ it('should validate exactLength rule with ignoreSpace option', async () => {
128
128
  const rules = generateRules([{
129
129
  type: 'exactLength',
130
130
  options: {
@@ -135,12 +135,12 @@ describe('useFieldValidation', () => {
135
135
  }])
136
136
  const rule = rules[0]!
137
137
 
138
- expect(rule('1 2 3 4')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 4
139
- expect(rule('1 2 3 4 5 6')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 6
140
- expect(rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
138
+ expect(await rule('1 2 3 4')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 4
139
+ expect(await rule('1 2 3 4 5 6')).toEqual({ error: 'Length must be exactly 5.' }) // Length without spaces is 6
140
+ expect(await rule('1 2 3 4 5')).toEqual({ success: 'Le champ est valide.' }) // Length without spaces is 5
141
141
  })
142
142
 
143
- it('should validate email rule', () => {
143
+ it('should validate email rule', async () => {
144
144
  // Vérifions d'abord que la regex EMAIL_REGEXP fonctionne comme prévu
145
145
  expect(EMAIL_REGEXP.test('invalid-email')).toBe(false)
146
146
  // Note: La regex actuelle considère test@example comme valide
@@ -150,26 +150,26 @@ describe('useFieldValidation', () => {
150
150
  const rules = generateRules([{ type: 'email', options: { message: 'Invalid email address.' } }])
151
151
  const rule = rules[0]!
152
152
 
153
- expect(rule('invalid-email')).toEqual({ error: 'Invalid email address.' })
154
- expect(rule('test@example.com')).toEqual({ success: 'Le champ est valide.' })
155
- expect(rule('test.name@example.co.uk')).toEqual({ success: 'Le champ est valide.' })
156
- expect(rule('')).toEqual({}) // Empty string should be ignored
153
+ expect(await rule('invalid-email')).toEqual({ error: 'Invalid email address.' })
154
+ expect(await rule('test@example.com')).toEqual({ success: 'Le champ est valide.' })
155
+ expect(await rule('test.name@example.co.uk')).toEqual({ success: 'Le champ est valide.' })
156
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
157
157
  })
158
158
 
159
- it('should validate matchPattern rule', () => {
159
+ it('should validate matchPattern rule', async () => {
160
160
  const rules = generateRules([{
161
161
  type: 'matchPattern',
162
162
  options: { pattern: /^[a-z]+$/, message: 'Invalid format.' },
163
163
  }])
164
164
  const rule = rules[0]!
165
165
 
166
- expect(rule('123')).toEqual({ error: 'Invalid format.' })
167
- expect(rule('aBc')).toEqual({ error: 'Invalid format.' })
168
- expect(rule('abc')).toEqual({ success: 'Le champ est valide.' })
169
- expect(rule('')).toEqual({}) // Empty string should be ignored
166
+ expect(await rule('123')).toEqual({ error: 'Invalid format.' })
167
+ expect(await rule('aBc')).toEqual({ error: 'Invalid format.' })
168
+ expect(await rule('abc')).toEqual({ success: 'Le champ est valide.' })
169
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
170
170
  })
171
171
 
172
- it('should validate notWeekend rule', () => {
172
+ it('should validate notWeekend rule', async () => {
173
173
  const rules = generateRules([{
174
174
  type: 'notWeekend',
175
175
  options: { message: 'Date cannot be on a weekend.' },
@@ -177,15 +177,15 @@ describe('useFieldValidation', () => {
177
177
  const rule = rules[0]!
178
178
 
179
179
  // 15 janvier 2023 est un dimanche (jour 0)
180
- expect(rule(new Date(2023, 0, 15))).toEqual({ error: 'Date cannot be on a weekend.' })
180
+ expect(await rule(new Date(2023, 0, 15))).toEqual({ error: 'Date cannot be on a weekend.' })
181
181
  // 14 janvier 2023 est un samedi (jour 6)
182
- expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be on a weekend.' })
182
+ expect(await rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be on a weekend.' })
183
183
  // 13 janvier 2023 est un vendredi (jour 5)
184
- expect(rule(new Date(2023, 0, 13))).toEqual({ success: 'Le champ est valide.' })
185
- expect(rule('')).toEqual({}) // Empty string should be ignored
184
+ expect(await rule(new Date(2023, 0, 13))).toEqual({ success: 'Le champ est valide.' })
185
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
186
186
  })
187
187
 
188
- it('should validate notBeforeToday rule', () => {
188
+ it('should validate notBeforeToday rule', async () => {
189
189
  const rules = generateRules([{
190
190
  type: 'notBeforeToday',
191
191
  options: { message: 'Date cannot be before today.' },
@@ -193,15 +193,15 @@ describe('useFieldValidation', () => {
193
193
  const rule = rules[0]!
194
194
 
195
195
  // 14 janvier 2023 est avant aujourd'hui (15 janvier 2023)
196
- expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be before today.' })
196
+ expect(await rule(new Date(2023, 0, 14))).toEqual({ error: 'Date cannot be before today.' })
197
197
  // 15 janvier 2023 est aujourd'hui
198
- expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
198
+ expect(await rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
199
199
  // 16 janvier 2023 est après aujourd'hui
200
- expect(rule(new Date(2023, 0, 16))).toEqual({ success: 'Le champ est valide.' })
201
- expect(rule('')).toEqual({}) // Empty string should be ignored
200
+ expect(await rule(new Date(2023, 0, 16))).toEqual({ success: 'Le champ est valide.' })
201
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
202
202
  })
203
203
 
204
- it('should validate notAfterToday rule', () => {
204
+ it('should validate notAfterToday rule', async () => {
205
205
  const rules = generateRules([{
206
206
  type: 'notAfterToday',
207
207
  options: { message: 'Date cannot be after today.' },
@@ -209,12 +209,12 @@ describe('useFieldValidation', () => {
209
209
  const rule = rules[0]!
210
210
 
211
211
  // 16 janvier 2023 est après aujourd'hui (15 janvier 2023)
212
- expect(rule(new Date(2023, 0, 16))).toEqual({ error: 'Date cannot be after today.' })
212
+ expect(await rule(new Date(2023, 0, 16))).toEqual({ error: 'Date cannot be after today.' })
213
213
  // 15 janvier 2023 est aujourd'hui
214
- expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
214
+ expect(await rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
215
215
  // 14 janvier 2023 est avant aujourd'hui
216
- expect(rule(new Date(2023, 0, 14))).toEqual({ success: 'Le champ est valide.' })
217
- expect(rule('')).toEqual({}) // Empty string should be ignored
216
+ expect(await rule(new Date(2023, 0, 14))).toEqual({ success: 'Le champ est valide.' })
217
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
218
218
  })
219
219
 
220
220
  it('should test parseDate function directly', () => {
@@ -259,7 +259,7 @@ describe('useFieldValidation', () => {
259
259
  expect(parseDate('31/02/2023', 'DD/MM/YYYY')).toBeNull()
260
260
  })
261
261
 
262
- it('should validate notBeforeDate rule', () => {
262
+ it('should validate notBeforeDate rule', async () => {
263
263
  const rules = generateRules([{
264
264
  type: 'notBeforeDate',
265
265
  options: {
@@ -270,36 +270,36 @@ describe('useFieldValidation', () => {
270
270
  const rule = rules[0]!
271
271
 
272
272
  // 9 janvier 2023 est avant la date de référence
273
- expect(rule(new Date(2023, 0, 9))).toEqual({ error: 'Date cannot be before reference date.' })
273
+ expect(await rule(new Date(2023, 0, 9))).toEqual({ error: 'Date cannot be before reference date.' })
274
274
  // 10 janvier 2023 est la date de référence
275
- expect(rule(new Date(2023, 0, 10))).toEqual({ success: 'Le champ est valide.' })
275
+ expect(await rule(new Date(2023, 0, 10))).toEqual({ success: 'Le champ est valide.' })
276
276
  // 11 janvier 2023 est après la date de référence
277
- expect(rule(new Date(2023, 0, 11))).toEqual({ success: 'Le champ est valide.' })
277
+ expect(await rule(new Date(2023, 0, 11))).toEqual({ success: 'Le champ est valide.' })
278
278
  // Test avec une date invalide
279
- expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
279
+ expect(await rule('invalid-date')).toEqual({ error: 'Date invalide' })
280
280
  // Test sans option date
281
281
  const ruleWithoutDate = generateRules([{
282
282
  type: 'notBeforeDate',
283
283
  options: { message: 'Date cannot be before reference date.' },
284
284
  }])[0]!
285
- expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
286
- expect(rule('')).toEqual({}) // Empty string should be ignored
285
+ expect(await ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
286
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
287
287
 
288
288
  const ruleWithEmptyDate = generateRules([{
289
289
  type: 'notBeforeDate',
290
290
  options: { date: '', message: 'Date cannot be before reference date.' },
291
291
  }])[0]!
292
- expect(ruleWithEmptyDate(new Date())).toEqual({})
292
+ expect(await ruleWithEmptyDate(new Date())).toEqual({})
293
293
 
294
294
  const ruleWithUndefinedDate = generateRules([{
295
295
  type: 'notBeforeDate',
296
296
  options: { date: undefined as unknown as string, message: 'Date cannot be before reference date.' },
297
297
  }])[0]!
298
- expect(ruleWithUndefinedDate(new Date())).toEqual({})
298
+ expect(await ruleWithUndefinedDate(new Date())).toEqual({})
299
299
  })
300
300
 
301
- it('should throw when date reference is not a string in notBeforeDate rule', () => {
302
- expect(() => {
301
+ it('should throw when date reference is not a string in notBeforeDate rule', async () => {
302
+ await expect(async () => {
303
303
  const invalidRule = generateRules([{
304
304
  type: 'notBeforeDate',
305
305
  options: {
@@ -307,11 +307,11 @@ describe('useFieldValidation', () => {
307
307
  message: 'Date cannot be before reference date.',
308
308
  },
309
309
  }])[0]!
310
- invalidRule(new Date())
311
- }).toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
310
+ await invalidRule(new Date())
311
+ }).rejects.toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
312
312
  })
313
313
 
314
- it('should validate notAfterDate rule', () => {
314
+ it('should validate notAfterDate rule', async () => {
315
315
  const rules = generateRules([{
316
316
  type: 'notAfterDate',
317
317
  options: {
@@ -322,36 +322,36 @@ describe('useFieldValidation', () => {
322
322
  const rule = rules[0]!
323
323
 
324
324
  // 21 janvier 2023 est après la date de référence
325
- expect(rule(new Date(2023, 0, 21))).toEqual({ error: 'Date cannot be after reference date.' })
325
+ expect(await rule(new Date(2023, 0, 21))).toEqual({ error: 'Date cannot be after reference date.' })
326
326
  // 20 janvier 2023 est la date de référence
327
- expect(rule(new Date(2023, 0, 20))).toEqual({ success: 'Le champ est valide.' })
327
+ expect(await rule(new Date(2023, 0, 20))).toEqual({ success: 'Le champ est valide.' })
328
328
  // 19 janvier 2023 est avant la date de référence
329
- expect(rule(new Date(2023, 0, 19))).toEqual({ success: 'Le champ est valide.' })
329
+ expect(await rule(new Date(2023, 0, 19))).toEqual({ success: 'Le champ est valide.' })
330
330
  // Test avec une date invalide
331
- expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
331
+ expect(await rule('invalid-date')).toEqual({ error: 'Date invalide' })
332
332
  // Test sans option date
333
333
  const ruleWithoutDate = generateRules([{
334
334
  type: 'notAfterDate',
335
335
  options: { message: 'Date cannot be after reference date.' },
336
336
  }])[0]!
337
- expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
338
- expect(rule('')).toEqual({}) // Empty string should be ignored
337
+ expect(await ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
338
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
339
339
 
340
340
  const ruleWithEmptyDate = generateRules([{
341
341
  type: 'notAfterDate',
342
342
  options: { date: '', message: 'Date cannot be after reference date.' },
343
343
  }])[0]!
344
- expect(ruleWithEmptyDate(new Date())).toEqual({})
344
+ expect(await ruleWithEmptyDate(new Date())).toEqual({})
345
345
 
346
346
  const ruleWithUndefinedDate = generateRules([{
347
347
  type: 'notAfterDate',
348
348
  options: { date: undefined as unknown as string, message: 'Date cannot be after reference date.' },
349
349
  }])[0]!
350
- expect(ruleWithUndefinedDate(new Date())).toEqual({})
350
+ expect(await ruleWithUndefinedDate(new Date())).toEqual({})
351
351
  })
352
352
 
353
- it('should throw when date reference is not a string in notAfterDate rule', () => {
354
- expect(() => {
353
+ it('should throw when date reference is not a string in notAfterDate rule', async () => {
354
+ await expect(async () => {
355
355
  const invalidRule = generateRules([{
356
356
  type: 'notAfterDate',
357
357
  options: {
@@ -359,11 +359,11 @@ describe('useFieldValidation', () => {
359
359
  message: 'Date cannot be after reference date.',
360
360
  },
361
361
  }])[0]!
362
- invalidRule(new Date())
363
- }).toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
362
+ await invalidRule(new Date())
363
+ }).rejects.toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
364
364
  })
365
365
 
366
- it('should validate dateExact rule', () => {
366
+ it('should validate dateExact rule', async () => {
367
367
  const rules = generateRules([{
368
368
  type: 'dateExact',
369
369
  options: {
@@ -374,36 +374,36 @@ describe('useFieldValidation', () => {
374
374
  const rule = rules[0]!
375
375
 
376
376
  // 14 janvier 2023 n'est pas la date exacte
377
- expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date must be exactly the reference date.' })
377
+ expect(await rule(new Date(2023, 0, 14))).toEqual({ error: 'Date must be exactly the reference date.' })
378
378
  // 15 janvier 2023 est la date exacte
379
- expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
379
+ expect(await rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
380
380
  // 16 janvier 2023 n'est pas la date exacte
381
- expect(rule(new Date(2023, 0, 16))).toEqual({ error: 'Date must be exactly the reference date.' })
381
+ expect(await rule(new Date(2023, 0, 16))).toEqual({ error: 'Date must be exactly the reference date.' })
382
382
  // Test avec une date invalide
383
- expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
383
+ expect(await rule('invalid-date')).toEqual({ error: 'Date invalide' })
384
384
  // Test sans option date
385
385
  const ruleWithoutDate = generateRules([{
386
386
  type: 'dateExact',
387
387
  options: { message: 'Date must be exactly the reference date.' },
388
388
  }])[0]!
389
- expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
390
- expect(rule('')).toEqual({}) // Empty string should be ignored
389
+ expect(await ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
390
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
391
391
 
392
392
  const ruleWithEmptyDate = generateRules([{
393
393
  type: 'dateExact',
394
394
  options: { date: '', message: 'Date must be exactly the reference date.' },
395
395
  }])[0]!
396
- expect(ruleWithEmptyDate(new Date())).toEqual({})
396
+ expect(await ruleWithEmptyDate(new Date())).toEqual({})
397
397
 
398
398
  const ruleWithUndefinedDate = generateRules([{
399
399
  type: 'dateExact',
400
400
  options: { date: undefined as unknown as string, message: 'Date must be exactly the reference date.' },
401
401
  }])[0]!
402
- expect(ruleWithUndefinedDate(new Date())).toEqual({})
402
+ expect(await ruleWithUndefinedDate(new Date())).toEqual({})
403
403
  })
404
404
 
405
- it('should throw when date reference is not a string in dateExact rule', () => {
406
- expect(() => {
405
+ it('should throw when date reference is not a string in dateExact rule', async () => {
406
+ await expect(async () => {
407
407
  const invalidRule = generateRules([{
408
408
  type: 'dateExact',
409
409
  options: {
@@ -411,30 +411,30 @@ describe('useFieldValidation', () => {
411
411
  message: 'Date must be exactly the reference date.',
412
412
  },
413
413
  }])[0]!
414
- invalidRule(new Date())
415
- }).toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
414
+ await invalidRule(new Date())
415
+ }).rejects.toThrow('La date de référence doit être une chaîne au format DD/MM/YYYY')
416
416
  })
417
417
 
418
- it('should validate custom rule', () => {
418
+ it('should validate custom rule', async () => {
419
419
  const rules = generateRules([{
420
420
  type: 'custom',
421
421
  options: { validate: (value: unknown) => value === 'valid', message: 'Custom validation failed.' },
422
422
  }])
423
423
  const rule = rules[0]!
424
424
 
425
- expect(rule('invalid')).toEqual({ error: 'Custom validation failed.' })
426
- expect(rule('valid')).toEqual({ success: 'Le champ est valide.' })
427
- expect(rule('')).toEqual({}) // Empty string should be ignored
425
+ expect(await rule('invalid')).toEqual({ error: 'Custom validation failed.' })
426
+ expect(await rule('valid')).toEqual({ success: 'Le champ est valide.' })
427
+ expect(await rule('')).toEqual({}) // Empty string should be ignored
428
428
 
429
429
  // Test avec un message personnalisé
430
430
  const customMessageRule = generateRules([{
431
431
  type: 'custom',
432
432
  options: { validate: (value: unknown) => value === 'valid' ? true : 'Custom error message' },
433
433
  }])[0]!
434
- expect(customMessageRule('invalid')).toEqual({ error: 'Custom error message' })
434
+ expect(await customMessageRule('invalid')).toEqual({ error: 'Custom error message' })
435
435
  })
436
436
 
437
- it('should handle warning mode instead of error', () => {
437
+ it('should handle warning mode instead of error', async () => {
438
438
  const rules = generateRules([{
439
439
  type: 'required',
440
440
  options: {
@@ -444,7 +444,7 @@ describe('useFieldValidation', () => {
444
444
  }])
445
445
  const rule = rules[0]!
446
446
 
447
- expect(rule('')).toEqual({ warning: 'This field is required.' })
447
+ expect(await rule('')).toEqual({ warning: 'This field is required.' })
448
448
 
449
449
  // Test avec un message d'avertissement personnalisé
450
450
  const warningMessageRule = generateRules([{
@@ -454,10 +454,10 @@ describe('useFieldValidation', () => {
454
454
  isWarning: true,
455
455
  },
456
456
  }])[0]!
457
- expect(warningMessageRule('')).toEqual({ warning: 'Warning: this field should be filled.' })
457
+ expect(await warningMessageRule('')).toEqual({ warning: 'Warning: this field should be filled.' })
458
458
  })
459
459
 
460
- it('should handle custom field identifiers', () => {
460
+ it('should handle custom field identifiers', async () => {
461
461
  const rules = generateRules([{
462
462
  type: 'required',
463
463
  options: {
@@ -466,7 +466,7 @@ describe('useFieldValidation', () => {
466
466
  }])
467
467
  const rule = rules[0]!
468
468
 
469
- expect(rule('')).toEqual({ error: 'Vous devez renseigner Email.' })
469
+ expect(await rule('')).toEqual({ error: 'Vous devez renseigner Email.' })
470
470
 
471
471
  const fieldIdentifierRule = generateRules([{
472
472
  type: 'required',
@@ -474,10 +474,10 @@ describe('useFieldValidation', () => {
474
474
  fieldIdentifier: 'l\'adresse email',
475
475
  },
476
476
  }])[0]!
477
- expect(fieldIdentifierRule('')).toEqual({ error: 'Vous devez renseigner l\'adresse email.' })
477
+ expect(await fieldIdentifierRule('')).toEqual({ error: 'Vous devez renseigner l\'adresse email.' })
478
478
  })
479
479
 
480
- it('should handle success messages', () => {
480
+ it('should handle success messages', async () => {
481
481
  const rules = generateRules([{
482
482
  type: 'required',
483
483
  options: {
@@ -486,16 +486,16 @@ describe('useFieldValidation', () => {
486
486
  }])
487
487
  const rule = rules[0]!
488
488
 
489
- expect(rule('value')).toEqual({ success: 'Field is valid!' })
489
+ expect(await rule('value')).toEqual({ success: 'Field is valid!' })
490
490
  })
491
491
 
492
- it('should handle invalid rule types', () => {
492
+ it('should handle invalid rule types', async () => {
493
493
  const rules = generateRules([{
494
494
  type: 'invalidRuleType',
495
495
  options: { message: 'This should show an error.' },
496
496
  }])
497
497
  const rule = rules[0]!
498
498
 
499
- expect(rule('any value')).toEqual({ error: 'La règle spécifiée pour ce champ n\'existe pas.' })
499
+ expect(await rule('any value')).toEqual({ error: 'La règle spécifiée pour ce champ n\'existe pas.' })
500
500
  })
501
501
  })
@@ -10,25 +10,24 @@ export type ValidationResult = {
10
10
  warning?: string
11
11
  }
12
12
 
13
- export type RuleOptions = {
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ export type RuleOptions<T = any> = {
14
15
  message?: string
15
16
  successMessage?: string
16
17
  warningMessage?: string
17
18
  fieldName?: string
18
19
  fieldIdentifier?: string
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
20
- value?: any
20
+ value?: T
21
21
  length?: number
22
22
  pattern?: RegExp
23
23
  ignoreSpace?: boolean
24
24
  isWarning?: boolean // Si true, la règle génère un warning au lieu d'une erreur
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
26
- validate?: (value: any) => boolean | string
25
+ validate?: ((value: T) => boolean | string) | ((value: T) => Promise<boolean | string>) // Fonction de validation personnalisée pour les règles de type 'custom'
27
26
  date?: string | Date // Date de référence pour les règles notBeforeDate et notAfterDate
28
27
  }
29
28
 
30
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
31
- export type ValidationRule = (value: any) => ValidationResult
30
+ export type ValidationRule = (value: any) => ValidationResult | Promise<ValidationResult>
32
31
 
33
32
  export function useFieldValidation() {
34
33
  const getValueLength = (value: string, ignoreSpace?: boolean): number => {
@@ -93,7 +92,7 @@ export function useFieldValidation() {
93
92
 
94
93
  const createRule = (type: string, options: RuleOptions = {}): ValidationRule => {
95
94
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
96
- return (value: any): ValidationResult => {
95
+ return (value: any): ValidationResult | Promise<ValidationResult> => {
97
96
  // Gestion des champs vides non obligatoires
98
97
  if (type !== 'required' && typeof value === 'string' && value.trim() === '') {
99
98
  return {}
@@ -377,20 +376,38 @@ export function useFieldValidation() {
377
376
  }
378
377
 
379
378
  case 'custom': {
380
- const result = options.validate?.(value)
381
- if (result === true) {
382
- return { success: options.successMessage || baseMessages.success }
383
- }
384
- // If result is undefined or falsy but not true, treat as invalid
385
- if (result === false) {
379
+ if (!options.validate) {
386
380
  return options.isWarning
387
381
  ? { warning: options.warningMessage || baseMessages.warning }
388
382
  : { error: options.message || baseMessages.error }
389
383
  }
390
- // If result is a string, use it as error/warning message
391
- return options.isWarning
392
- ? { warning: typeof result === 'string' ? result : options.warningMessage || baseMessages.warning }
393
- : { error: typeof result === 'string' ? result : options.message || baseMessages.error }
384
+
385
+ const handleCustomResult = (res: boolean | string): ValidationResult => {
386
+ if (res === true) {
387
+ return { success: options.successMessage || baseMessages.success }
388
+ }
389
+ // If result is undefined or falsy but not true, treat as invalid
390
+ if (res === false) {
391
+ return options.isWarning
392
+ ? { warning: options.warningMessage || baseMessages.warning }
393
+ : { error: options.message || baseMessages.error }
394
+ }
395
+ // If result is a string, use it as error/warning message
396
+ return options.isWarning
397
+ ? { warning: typeof res === 'string' ? res : options.warningMessage || baseMessages.warning }
398
+ : { error: typeof res === 'string' ? res : options.message || baseMessages.error }
399
+ }
400
+
401
+ const result = options.validate(value)
402
+ if (result instanceof Promise) {
403
+ return result.then(handleCustomResult).catch((err: unknown) => {
404
+ const message = err instanceof Error ? err.message : String(err)
405
+ return options.isWarning
406
+ ? { warning: options.warningMessage || message || baseMessages.warning } as ValidationResult
407
+ : { error: options.message || message || baseMessages.error } as ValidationResult
408
+ })
409
+ }
410
+ return handleCustomResult(result)
394
411
  }
395
412
 
396
413
  default: