@cnamts/synapse 0.0.11-alpha → 0.0.13-alpha

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 (315) hide show
  1. package/dist/design-system-v3.js +5394 -3813
  2. package/dist/design-system-v3.umd.cjs +1 -1
  3. package/dist/src/components/Amelipro/types/types.d.ts +38 -0
  4. package/dist/src/components/CookieBanner/CookieBanner.d.ts +1 -1
  5. package/dist/src/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  6. package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +31 -23
  7. package/dist/src/components/Customs/SyTextField/types.d.ts +1 -0
  8. package/dist/src/components/DatePicker/DatePicker.d.ts +105 -102
  9. package/dist/src/components/DatePicker/DateTextInput.d.ts +82 -74
  10. package/dist/src/components/ErrorPage/ErrorPage.d.ts +1 -1
  11. package/dist/src/components/FileList/FileList.d.ts +1 -0
  12. package/dist/src/components/FileList/UploadItem/UploadItem.d.ts +1 -1
  13. package/dist/src/components/FilterInline/AccessibiliteItems.d.ts +30 -0
  14. package/dist/src/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +4 -0
  15. package/dist/src/components/FilterSideBar/AccessibiliteItems.d.ts +29 -0
  16. package/dist/src/components/FilterSideBar/FilterSideBar.d.ts +31 -0
  17. package/dist/src/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +4 -0
  18. package/dist/src/components/FilterSideBar/locales.d.ts +7 -0
  19. package/dist/src/components/LangBtn/LangBtn.d.ts +2 -2
  20. package/dist/src/components/NirField/NirField.d.ts +952 -0
  21. package/dist/src/components/NotificationBar/NotificationBar.d.ts +6 -6
  22. package/dist/src/components/PasswordField/PasswordField.d.ts +42 -8
  23. package/dist/src/components/PeriodField/PeriodField.d.ts +259 -235
  24. package/dist/src/components/PhoneField/PhoneField.d.ts +33 -3
  25. package/dist/src/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +1 -1
  26. package/dist/src/components/RatingPicker/NumberPicker/NumberPicker.d.ts +1 -1
  27. package/dist/src/components/RatingPicker/StarsPicker/StarsPicker.d.ts +1 -1
  28. package/dist/src/components/UploadWorkflow/AccessibiliteItems.d.ts +29 -0
  29. package/dist/src/components/UploadWorkflow/config.d.ts +29 -0
  30. package/dist/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +4 -0
  31. package/dist/src/components/UploadWorkflow/locales.d.ts +7 -0
  32. package/dist/src/components/UploadWorkflow/types.d.ts +19 -0
  33. package/dist/src/components/UploadWorkflow/useFileList.d.ts +10 -0
  34. package/dist/src/components/UploadWorkflow/useFileUploadJourney.d.ts +9 -0
  35. package/dist/src/components/Usages/Usages.d.ts +10 -0
  36. package/dist/src/components/index.d.ts +5 -0
  37. package/dist/src/composables/date/tests/useDateFormat.spec.d.ts +1 -0
  38. package/dist/src/composables/date/tests/useDateInitialization.spec.d.ts +1 -0
  39. package/dist/src/composables/date/tests/useDatePickerAccessibility.spec.d.ts +1 -0
  40. package/dist/src/composables/date/useDateFormat.d.ts +26 -0
  41. package/dist/src/composables/date/useDateInitialization.d.ts +18 -0
  42. package/dist/src/composables/date/useDatePickerAccessibility.d.ts +8 -0
  43. package/dist/src/composables/rules/useFieldValidation.d.ts +1 -0
  44. package/dist/src/composables/useFilterable/useFilterable.d.ts +1 -1
  45. package/dist/src/composables/validation/tests/useValidation.spec.d.ts +1 -0
  46. package/dist/src/composables/validation/useValidation.d.ts +40 -0
  47. package/dist/src/designTokens/index.d.ts +3 -1
  48. package/dist/src/main.d.ts +1 -0
  49. package/dist/src/utils/formatDate/index.d.ts +3 -0
  50. package/dist/src/utils/formatDate/tests/formatDate.spec.d.ts +1 -0
  51. package/dist/src/utils/functions/validation/isDateAfter/index.d.ts +2 -0
  52. package/dist/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.d.ts +1 -0
  53. package/dist/src/utils/functions/validation/isDateBefore/index.d.ts +2 -0
  54. package/dist/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.d.ts +1 -0
  55. package/dist/src/utils/functions/validation/isDateInRange/index.d.ts +3 -0
  56. package/dist/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.d.ts +1 -0
  57. package/dist/src/utils/functions/validation/isDateValid/index.d.ts +9 -0
  58. package/dist/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.d.ts +1 -0
  59. package/dist/src/utils/functions/validation/isEmailValid/tests/isEmailValid.spec.d.ts +1 -0
  60. package/dist/src/utils/functions/validation/isWeekend/index.d.ts +3 -0
  61. package/dist/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.d.ts +1 -0
  62. package/dist/src/utils/parseDate/index.d.ts +3 -0
  63. package/dist/src/utils/parseDate/tests/parseDate.spec.d.ts +1 -0
  64. package/dist/src/utils/rules/doMatchPattern/index.d.ts +3 -0
  65. package/dist/src/utils/rules/doMatchPattern/tests/matchPattern.spec.d.ts +1 -0
  66. package/dist/src/utils/rules/index.d.ts +11 -0
  67. package/dist/src/utils/rules/isDateValid/index.d.ts +4 -0
  68. package/dist/src/utils/rules/isDateValid/tests/isDateValid.spec.d.ts +1 -0
  69. package/dist/src/utils/rules/isExactLength/index.d.ts +3 -0
  70. package/dist/src/utils/rules/isExactLength/locales.d.ts +2 -0
  71. package/dist/src/utils/rules/isExactLength/tests/exactLength.spec.d.ts +1 -0
  72. package/dist/src/utils/rules/isMaxLength/index.d.ts +3 -0
  73. package/dist/src/utils/rules/isMaxLength/locales.d.ts +2 -0
  74. package/dist/src/utils/rules/isMaxLength/tests/isMaxLength.spec.d.ts +1 -0
  75. package/dist/src/utils/rules/isMinLength/index.d.ts +3 -0
  76. package/dist/src/utils/rules/isMinLength/locales.d.ts +2 -0
  77. package/dist/src/utils/rules/isMinLength/tests/isMinLength.spec.d.ts +1 -0
  78. package/dist/src/utils/rules/isNotAfterDate/index.d.ts +3 -0
  79. package/dist/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.d.ts +1 -0
  80. package/dist/src/utils/rules/isNotAfterToday/index.d.ts +4 -0
  81. package/dist/src/utils/rules/isNotAfterToday/locales.d.ts +2 -0
  82. package/dist/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.d.ts +1 -0
  83. package/dist/src/utils/rules/isNotBeforeDate/index.d.ts +3 -0
  84. package/dist/src/utils/rules/isNotBeforeDate/locales.d.ts +2 -0
  85. package/dist/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.d.ts +1 -0
  86. package/dist/src/utils/rules/isNotBeforeToday/index.d.ts +4 -0
  87. package/dist/src/utils/rules/isNotBeforeToday/locales.d.ts +2 -0
  88. package/dist/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.d.ts +1 -0
  89. package/dist/src/utils/rules/isRequired/index.d.ts +4 -0
  90. package/dist/src/utils/rules/isRequired/locales.d.ts +2 -0
  91. package/dist/src/utils/rules/isRequired/tests/isRequred.spec.d.ts +1 -0
  92. package/dist/src/utils/rules/isValidEmail/index.d.ts +4 -0
  93. package/dist/src/utils/rules/isValidEmail/locales.d.ts +2 -0
  94. package/dist/src/utils/rules/isValidEmail/tests/isValidEmail.spec.d.ts +1 -0
  95. package/dist/src/vuetifyConfig.d.ts +81 -0
  96. package/dist/style.css +1 -1
  97. package/package.json +3 -1
  98. package/src/assets/_elevations.scss +89 -0
  99. package/src/assets/_fonts.scss +6 -0
  100. package/src/assets/_radius.scss +92 -0
  101. package/src/assets/_spacers.scss +149 -0
  102. package/src/assets/settings.scss +15 -3
  103. package/src/assets/tokens.scss +32 -29
  104. package/src/components/Amelipro/types/types.ts +40 -0
  105. package/src/components/ChipList/ChipList.stories.ts +26 -27
  106. package/src/components/ChipList/ChipList.vue +5 -1
  107. package/src/components/ChipList/config.ts +1 -0
  108. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -2
  109. package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +1 -1
  110. package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +1 -1
  111. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +65 -0
  112. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +13 -3
  113. package/src/components/Customs/SySelect/SySelect.mdx +1 -1
  114. package/src/components/Customs/SySelect/SySelect.stories.ts +88 -5
  115. package/src/components/Customs/SySelect/SySelect.vue +55 -14
  116. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +135 -2
  117. package/src/components/Customs/SyTextField/SyTextField.mdx +2 -2
  118. package/src/components/Customs/SyTextField/SyTextField.stories.ts +809 -79
  119. package/src/components/Customs/SyTextField/SyTextField.vue +135 -104
  120. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +190 -38
  121. package/src/components/Customs/SyTextField/types.d.ts +1 -0
  122. package/src/components/DatePicker/DatePicker.stories.ts +177 -5
  123. package/src/components/DatePicker/DatePicker.vue +302 -233
  124. package/src/components/DatePicker/DateTextInput.vue +101 -246
  125. package/src/components/DatePicker/tests/DatePicker.spec.ts +123 -60
  126. package/src/components/DatePicker/tests/DateTextInput.spec.ts +202 -6
  127. package/src/components/FileList/Accessibilite.stories.ts +1 -1
  128. package/src/components/FileList/AccessibiliteItems.ts +22 -0
  129. package/src/components/FileList/FileList.vue +2 -1
  130. package/src/components/FileList/UploadItem/UploadItem.vue +10 -0
  131. package/src/components/FileUpload/FileUpload.stories.ts +93 -7
  132. package/src/components/FileUpload/FileUpload.vue +1 -0
  133. package/src/components/FileUpload/tests/FileUpload.spec.ts +4 -4
  134. package/src/components/FilterInline/Accessibilite.mdx +14 -0
  135. package/src/components/FilterInline/Accessibilite.stories.ts +216 -0
  136. package/src/components/FilterInline/AccessibiliteItems.ts +132 -0
  137. package/src/components/FilterInline/FilterInline.mdx +180 -34
  138. package/src/components/FilterInline/FilterInline.stories.ts +363 -6
  139. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +4 -0
  140. package/src/components/FilterSideBar/Accessibilite.mdx +14 -0
  141. package/src/components/FilterSideBar/Accessibilite.stories.ts +216 -0
  142. package/src/components/FilterSideBar/AccessibiliteItems.ts +153 -0
  143. package/src/components/FilterSideBar/FilterSideBar.mdx +237 -0
  144. package/src/components/FilterSideBar/FilterSideBar.stories.ts +798 -0
  145. package/src/components/FilterSideBar/FilterSideBar.vue +193 -0
  146. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +4 -0
  147. package/src/components/FilterSideBar/locales.ts +8 -0
  148. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +305 -0
  149. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +39 -0
  150. package/src/components/HeaderBar/Usages.mdx +1 -1
  151. package/src/components/NirField/NirField.stories.ts +738 -29
  152. package/src/components/NirField/NirField.vue +401 -359
  153. package/src/components/NirField/examples//342/200/257dataset/342/200/257.md +12 -0
  154. package/src/components/NirField/tests/NirField.spec.ts +88 -52
  155. package/src/components/NirField/tests/config.spec.ts +65 -0
  156. package/src/components/NotificationBar/Accessibilite.stories.ts +4 -0
  157. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  158. package/src/components/NotificationBar/NotificationBar.stories.ts +66 -13
  159. package/src/components/NotificationBar/NotificationBar.vue +42 -114
  160. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +28 -33
  161. package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +1 -1
  162. package/src/components/PaginatedTable/PaginatedTable.vue +6 -10
  163. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +4 -4
  164. package/src/components/PasswordField/PasswordField.mdx +129 -47
  165. package/src/components/PasswordField/PasswordField.stories.ts +1111 -120
  166. package/src/components/PasswordField/PasswordField.vue +212 -99
  167. package/src/components/PasswordField/tests/PasswordField.spec.ts +138 -9
  168. package/src/components/PeriodField/PeriodField.stories.ts +214 -118
  169. package/src/components/PeriodField/PeriodField.vue +238 -190
  170. package/src/components/PeriodField/tests/PeriodField.spec.ts +146 -0
  171. package/src/components/PhoneField/PhoneField.stories.ts +170 -0
  172. package/src/components/PhoneField/PhoneField.vue +76 -17
  173. package/src/components/PhoneField/indicatifs.ts +1 -1
  174. package/src/components/PhoneField/tests/PhoneField.spec.ts +40 -0
  175. package/src/components/RatingPicker/RatingPicker.stories.ts +7 -7
  176. package/src/components/SearchListField/SearchListField.stories.ts +1 -1
  177. package/src/components/UploadWorkflow/Accessibilite.mdx +14 -0
  178. package/src/components/UploadWorkflow/Accessibilite.stories.ts +216 -0
  179. package/src/components/UploadWorkflow/AccessibiliteItems.ts +192 -0
  180. package/src/components/UploadWorkflow/UploadWorkflow.mdx +75 -0
  181. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +943 -0
  182. package/src/components/UploadWorkflow/UploadWorkflow.vue +230 -0
  183. package/src/components/UploadWorkflow/config.ts +29 -0
  184. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +4 -0
  185. package/src/components/UploadWorkflow/locales.ts +8 -0
  186. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +257 -0
  187. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +54 -0
  188. package/src/components/UploadWorkflow/types.ts +21 -0
  189. package/src/components/UploadWorkflow/useFileList.ts +84 -0
  190. package/src/components/UploadWorkflow/useFileUploadJourney.ts +18 -0
  191. package/src/components/Usages/tests/Usages.spec.ts +183 -0
  192. package/src/components/index.ts +5 -0
  193. package/src/composables/date/tests/useDateFormat.spec.ts +67 -0
  194. package/src/composables/date/tests/useDateInitialization.spec.ts +89 -0
  195. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +102 -0
  196. package/src/composables/date/useDateFormat.ts +94 -0
  197. package/src/composables/date/useDateInitialization.ts +92 -0
  198. package/src/composables/date/useDatePickerAccessibility.ts +78 -0
  199. package/src/composables/rules/tests/useFieldValidation.spec.ts +385 -4
  200. package/src/composables/rules/useFieldValidation.ts +5 -2
  201. package/src/composables/useFilterable/useFilterable.ts +5 -4
  202. package/src/composables/validation/tests/useValidation.spec.ts +154 -0
  203. package/src/composables/validation/useValidation.ts +180 -0
  204. package/src/designTokens/index.ts +4 -0
  205. package/src/main.ts +1 -0
  206. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +28 -0
  207. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -2
  208. package/src/stories/Accessibilite/Audit/RGAA.mdx +6 -6
  209. package/src/stories/Accessibilite/Introduction.mdx +2 -1
  210. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +1 -1
  211. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +1 -1
  212. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +8 -11
  213. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +77 -0
  214. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +9 -3
  215. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
  216. package/src/stories/Demarrer/Accueil.mdx +1 -1
  217. package/src/stories/Demarrer/Introduction.stories.ts +3 -3
  218. package/src/stories/Demarrer/Releases.mdx +8 -0
  219. package/src/stories/Demarrer/Releases.stories.ts +66 -0
  220. package/src/stories/DesignTokens/Conteneurs.stories.ts +3 -3
  221. package/src/stories/DesignTokens/ThemePA.mdx +4 -30
  222. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +36 -0
  223. package/src/stories/GuideDuDev/UtiliserLesRules.mdx +321 -78
  224. package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
  225. package/src/utils/formatDate/index.ts +6 -0
  226. package/src/utils/formatDate/tests/formatDate.spec.ts +18 -0
  227. package/src/utils/functions/validation/isDateAfter/index.ts +9 -0
  228. package/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.ts +18 -0
  229. package/src/utils/functions/validation/isDateBefore/index.ts +9 -0
  230. package/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.ts +23 -0
  231. package/src/utils/functions/validation/isDateInRange/index.ts +22 -0
  232. package/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.ts +28 -0
  233. package/src/utils/functions/validation/isDateValid/index.ts +67 -0
  234. package/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.ts +46 -0
  235. package/src/utils/functions/validation/isEmailValid/index.ts +9 -0
  236. package/src/utils/functions/validation/isWeekend/index.ts +10 -0
  237. package/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.ts +16 -0
  238. package/src/utils/parseDate/index.ts +29 -0
  239. package/src/utils/parseDate/tests/parseDate.spec.ts +52 -0
  240. package/src/utils/rules/Rules.mdx +16 -0
  241. package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +66 -0
  242. package/src/utils/rules/doMatchPattern/DoMatchPattern.stories.ts +106 -0
  243. package/src/utils/rules/doMatchPattern/index.ts +28 -0
  244. package/src/utils/rules/doMatchPattern/locales.ts +5 -0
  245. package/src/utils/rules/doMatchPattern/tests/matchPattern.spec.ts +38 -0
  246. package/src/utils/rules/index.ts +11 -0
  247. package/src/utils/rules/isDateValid/IsDateValid.mdx +87 -0
  248. package/src/utils/rules/isDateValid/IsDateValid.stories.ts +113 -0
  249. package/src/utils/rules/isDateValid/index.ts +32 -0
  250. package/src/utils/rules/isDateValid/locales.ts +10 -0
  251. package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +27 -0
  252. package/src/utils/rules/isExactLength/IsExactLenght.mdx +68 -0
  253. package/src/utils/rules/isExactLength/IsExactLength.stories.ts +151 -0
  254. package/src/utils/rules/{exactLength → isExactLength}/index.ts +2 -4
  255. package/src/utils/rules/isExactLength/tests/exactLength.spec.ts +48 -0
  256. package/src/utils/rules/isMaxLength/IsMaxLength.mdx +68 -0
  257. package/src/utils/rules/isMaxLength/IsMaxLength.stories.ts +152 -0
  258. package/src/utils/rules/isMaxLength/index.ts +30 -0
  259. package/src/utils/rules/isMaxLength/locales.ts +6 -0
  260. package/src/utils/rules/isMaxLength/tests/isMaxLength.spec.ts +42 -0
  261. package/src/utils/rules/isMinLength/IsMinLength.mdx +68 -0
  262. package/src/utils/rules/isMinLength/IsMinLength.stories.ts +152 -0
  263. package/src/utils/rules/isMinLength/index.ts +30 -0
  264. package/src/utils/rules/isMinLength/locales.ts +6 -0
  265. package/src/utils/rules/isMinLength/tests/isMinLength.spec.ts +42 -0
  266. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +68 -0
  267. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +109 -0
  268. package/src/utils/rules/isNotAfterDate/index.ts +25 -0
  269. package/src/utils/rules/isNotAfterDate/locales.ts +6 -0
  270. package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +25 -0
  271. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +83 -0
  272. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +110 -0
  273. package/src/utils/rules/isNotAfterToday/index.ts +28 -0
  274. package/src/utils/rules/isNotAfterToday/locales.ts +5 -0
  275. package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +30 -0
  276. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +68 -0
  277. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.stories.ts +114 -0
  278. package/src/utils/rules/isNotBeforeDate/index.ts +25 -0
  279. package/src/utils/rules/isNotBeforeDate/locales.ts +6 -0
  280. package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +25 -0
  281. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +83 -0
  282. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +110 -0
  283. package/src/utils/rules/isNotBeforeToday/index.ts +28 -0
  284. package/src/utils/rules/isNotBeforeToday/locales.ts +5 -0
  285. package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +36 -0
  286. package/src/utils/rules/isRequired/IsRequired.mdx +81 -0
  287. package/src/utils/rules/isRequired/IsRequired.stories.ts +101 -0
  288. package/src/utils/rules/{required → isRequired}/index.ts +3 -3
  289. package/src/utils/rules/{required/tests/index.spec.ts → isRequired/tests/isRequred.spec.ts} +9 -9
  290. package/src/utils/rules/isValidEmail/IsValidEmail.mdx +81 -0
  291. package/src/utils/rules/isValidEmail/IsValidEmail.stories.ts +101 -0
  292. package/src/utils/rules/{email → isValidEmail}/index.ts +3 -5
  293. package/src/utils/rules/{email/tests/email.spec.ts → isValidEmail/tests/isValidEmail.spec.ts} +5 -5
  294. package/src/vuetifyConfig.ts +61 -0
  295. package/dist/src/utils/rules/email/index.d.ts +0 -4
  296. package/dist/src/utils/rules/exactLength/index.d.ts +0 -4
  297. package/dist/src/utils/rules/required/index.d.ts +0 -4
  298. package/dist/src/utils/rules/required/ruleMessageHelper.d.ts +0 -3
  299. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +0 -58
  300. package/src/composables/useFilterable/__snapshots__/useFilterable.spec.ts.snap +0 -3
  301. package/src/utils/functions/isEmailValid/index.ts +0 -8
  302. package/src/utils/rules/required/ruleMessageHelper.ts +0 -14
  303. package/src/utils/rules/required/tests/rulesMessageHelper.spec.ts +0 -22
  304. /package/dist/src/{utils/functions/isEmailValid/tests/isEmailValid.spec.d.ts → components/FilterSideBar/tests/FilterSideBar.spec.d.ts} +0 -0
  305. /package/dist/src/{utils/rules/email/tests/email.spec.d.ts → components/NirField/tests/config.spec.d.ts} +0 -0
  306. /package/dist/src/{utils/rules/required/tests/index.spec.d.ts → components/UploadWorkflow/tests/UploadWorkflow.spec.d.ts} +0 -0
  307. /package/dist/src/{utils/rules/required/tests/rulesMessageHelper.spec.d.ts → components/Usages/tests/Usages.spec.d.ts} +0 -0
  308. /package/dist/src/utils/functions/{isEmailValid → validation/isEmailValid}/index.d.ts +0 -0
  309. /package/dist/src/utils/rules/{exactLength → doMatchPattern}/locales.d.ts +0 -0
  310. /package/dist/src/utils/rules/{email → isDateValid}/locales.d.ts +0 -0
  311. /package/dist/src/utils/rules/{required → isNotAfterDate}/locales.d.ts +0 -0
  312. /package/src/utils/functions/{isEmailValid → validation/isEmailValid}/tests/isEmailValid.spec.ts +0 -0
  313. /package/src/utils/rules/{exactLength → isExactLength}/locales.ts +0 -0
  314. /package/src/utils/rules/{required → isRequired}/locales.ts +0 -0
  315. /package/src/utils/rules/{email → isValidEmail}/locales.ts +0 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Composable pour améliorer l'accessibilité du DatePicker
3
+ */
4
+ import { nextTick } from 'vue'
5
+
6
+ /**
7
+ * Améliore l'accessibilité du DatePicker en ajoutant des attributs ARIA et des instructions pour les lecteurs d'écran
8
+ * @returns Une fonction pour mettre à jour l'accessibilité du DatePicker
9
+ */
10
+ export function useDatePickerAccessibility() {
11
+ /**
12
+ * Met à jour les attributs d'accessibilité du DatePicker
13
+ * Ajoute des attributs ARIA et des instructions pour les lecteurs d'écran
14
+ */
15
+ const updateAccessibility = async (): Promise<void> => {
16
+ await nextTick()
17
+
18
+ // Utiliser des attributs data pour sélectionner les éléments, ce qui est plus stable que les classes CSS
19
+ const datePickerEl = document.querySelector('.v-date-picker')
20
+ if (!datePickerEl) return
21
+
22
+ // Ajouter un attribut role="application" au conteneur principal
23
+ datePickerEl.setAttribute('role', 'application')
24
+ datePickerEl.setAttribute('aria-label', 'Sélecteur de date')
25
+
26
+ // Sélectionner tous les boutons de navigation
27
+ const navigationButtons = datePickerEl.querySelectorAll('button')
28
+
29
+ // Attribuer des labels significatifs basés sur la position ou l'icône
30
+ navigationButtons.forEach((button) => {
31
+ const iconEl = button.querySelector('.v-icon')
32
+ if (!iconEl) return
33
+
34
+ // Utiliser le contenu de l'icône pour déterminer sa fonction
35
+ const iconContent = iconEl.textContent || ''
36
+ const iconClasses = iconEl.className || ''
37
+
38
+ if (iconClasses.includes('mdi-chevron-left') || iconContent.includes('chevron-left')) {
39
+ button.setAttribute('aria-label', 'Mois précédent')
40
+ }
41
+ else if (iconClasses.includes('mdi-chevron-right') || iconContent.includes('chevron-right')) {
42
+ button.setAttribute('aria-label', 'Mois suivant')
43
+ }
44
+ else if (iconClasses.includes('mdi-chevron-down') || iconContent.includes('chevron-down')
45
+ || iconClasses.includes('mdi-menu-down') || iconContent.includes('menu-down')) {
46
+ button.setAttribute('aria-label', 'Changer de vue')
47
+ }
48
+ })
49
+
50
+ // Ajouter des instructions pour les lecteurs d'écran
51
+ let srOnlyEl = datePickerEl.querySelector('.sr-only-instructions')
52
+ if (!srOnlyEl) {
53
+ srOnlyEl = document.createElement('span')
54
+ srOnlyEl.className = 'sr-only-instructions'
55
+ srOnlyEl.setAttribute('aria-live', 'polite')
56
+ // Utiliser HTMLElement pour accéder aux propriétés de style
57
+ const srOnlyHtmlEl = srOnlyEl as HTMLElement
58
+ srOnlyHtmlEl.style.position = 'absolute'
59
+ srOnlyHtmlEl.style.width = '1px'
60
+ srOnlyHtmlEl.style.height = '1px'
61
+ srOnlyHtmlEl.style.padding = '0'
62
+ srOnlyHtmlEl.style.margin = '-1px'
63
+ srOnlyHtmlEl.style.overflow = 'hidden'
64
+ srOnlyHtmlEl.style.clip = 'rect(0, 0, 0, 0)'
65
+ srOnlyHtmlEl.style.whiteSpace = 'nowrap'
66
+ srOnlyHtmlEl.style.border = '0'
67
+ srOnlyEl.textContent = 'Utilisez les flèches pour naviguer entre les dates et Entrée pour sélectionner une date'
68
+
69
+ datePickerEl.prepend(srOnlyEl)
70
+ }
71
+ }
72
+
73
+ return {
74
+ updateAccessibility,
75
+ }
76
+ }
77
+
78
+ export default useDatePickerAccessibility
@@ -1,8 +1,37 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { useFieldValidation } from '../useFieldValidation'
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
+ import { useFieldValidation, EMAIL_REGEXP } from '../useFieldValidation'
3
3
 
4
4
  describe('useFieldValidation', () => {
5
- const { generateRules } = useFieldValidation()
5
+ const { generateRules, parseDate } = useFieldValidation()
6
+
7
+ // Mock Date pour les tests liés à la date
8
+ let originalDate: typeof Date
9
+
10
+ beforeEach(() => {
11
+ // Sauvegarder la Date originale
12
+ originalDate = global.Date
13
+ // Mock de la date actuelle à 2023-01-15
14
+ // Pas besoin de stocker mockDate car nous utilisons directement la classe
15
+ global.Date = class extends Date {
16
+ constructor(...args: unknown[]) {
17
+ if (args.length === 0) {
18
+ super(2023, 0, 15)
19
+ }
20
+ else {
21
+ super(...args as [number, number, number])
22
+ }
23
+ }
24
+
25
+ static now() {
26
+ return new Date(2023, 0, 15).getTime()
27
+ }
28
+ } as typeof Date
29
+ })
30
+
31
+ afterEach(() => {
32
+ // Restaurer la Date originale
33
+ global.Date = originalDate
34
+ })
6
35
 
7
36
  it('should validate required rule', () => {
8
37
  const rules = generateRules([{ type: 'required', options: { message: 'This field is required.' } }])
@@ -10,6 +39,9 @@ describe('useFieldValidation', () => {
10
39
 
11
40
  expect(rule('')).toEqual({ error: 'This field is required.' })
12
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.' })
13
45
  })
14
46
 
15
47
  it('should validate min rule', () => {
@@ -18,6 +50,8 @@ describe('useFieldValidation', () => {
18
50
 
19
51
  expect(rule(3)).toEqual({ error: 'Value must be at least 5.' })
20
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
21
55
  })
22
56
 
23
57
  it('should validate max rule', () => {
@@ -26,6 +60,8 @@ describe('useFieldValidation', () => {
26
60
 
27
61
  expect(rule(15)).toEqual({ error: 'Value must be at most 10.' })
28
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
29
65
  })
30
66
 
31
67
  it('should validate minLength rule', () => {
@@ -34,6 +70,23 @@ describe('useFieldValidation', () => {
34
70
 
35
71
  expect(rule('1234')).toEqual({ error: 'Minimum length is 5.' })
36
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
75
+ })
76
+
77
+ it('should validate minLength rule with ignoreSpace option', () => {
78
+ const rules = generateRules([{
79
+ type: 'minLength',
80
+ options: {
81
+ length: 5,
82
+ message: 'Minimum length is 5.',
83
+ ignoreSpace: true,
84
+ },
85
+ }])
86
+ const rule = rules[0]
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
37
90
  })
38
91
 
39
92
  it('should validate maxLength rule', () => {
@@ -42,6 +95,23 @@ describe('useFieldValidation', () => {
42
95
 
43
96
  expect(rule('123456')).toEqual({ error: 'Maximum length is 5.' })
44
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
100
+ })
101
+
102
+ it('should validate maxLength rule with ignoreSpace option', () => {
103
+ const rules = generateRules([{
104
+ type: 'maxLength',
105
+ options: {
106
+ length: 5,
107
+ message: 'Maximum length is 5.',
108
+ ignoreSpace: true,
109
+ },
110
+ }])
111
+ const rule = rules[0]
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
45
115
  })
46
116
 
47
117
  it('should validate exactLength rule', () => {
@@ -49,15 +119,41 @@ describe('useFieldValidation', () => {
49
119
  const rule = rules[0]
50
120
 
51
121
  expect(rule('1234')).toEqual({ error: 'Length must be exactly 5.' })
122
+ expect(rule('123456')).toEqual({ error: 'Length must be exactly 5.' })
52
123
  expect(rule('12345')).toEqual({ success: 'Le champ est valide.' })
124
+ expect(rule('')).toEqual({}) // Empty string should be ignored
125
+ })
126
+
127
+ it('should validate exactLength rule with ignoreSpace option', () => {
128
+ const rules = generateRules([{
129
+ type: 'exactLength',
130
+ options: {
131
+ length: 5,
132
+ message: 'Length must be exactly 5.',
133
+ ignoreSpace: true,
134
+ },
135
+ }])
136
+ const rule = rules[0]
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
53
141
  })
54
142
 
55
143
  it('should validate email rule', () => {
144
+ // Vérifions d'abord que la regex EMAIL_REGEXP fonctionne comme prévu
145
+ expect(EMAIL_REGEXP.test('invalid-email')).toBe(false)
146
+ // Note: La regex actuelle considère test@example comme valide
147
+ expect(EMAIL_REGEXP.test('test@example')).toBe(true)
148
+ expect(EMAIL_REGEXP.test('test@example.com')).toBe(true)
149
+
56
150
  const rules = generateRules([{ type: 'email', options: { message: 'Invalid email address.' } }])
57
151
  const rule = rules[0]
58
152
 
59
153
  expect(rule('invalid-email')).toEqual({ error: 'Invalid email address.' })
60
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
61
157
  })
62
158
 
63
159
  it('should validate matchPattern rule', () => {
@@ -68,17 +164,302 @@ describe('useFieldValidation', () => {
68
164
  const rule = rules[0]
69
165
 
70
166
  expect(rule('123')).toEqual({ error: 'Invalid format.' })
167
+ expect(rule('aBc')).toEqual({ error: 'Invalid format.' })
71
168
  expect(rule('abc')).toEqual({ success: 'Le champ est valide.' })
169
+ expect(rule('')).toEqual({}) // Empty string should be ignored
170
+ })
171
+
172
+ it('should validate notWeekend rule', () => {
173
+ const rules = generateRules([{
174
+ type: 'notWeekend',
175
+ options: { message: 'Date cannot be on a weekend.' },
176
+ }])
177
+ const rule = rules[0]
178
+
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.' })
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.' })
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
186
+ })
187
+
188
+ it('should validate notBeforeToday rule', () => {
189
+ const rules = generateRules([{
190
+ type: 'notBeforeToday',
191
+ options: { message: 'Date cannot be before today.' },
192
+ }])
193
+ const rule = rules[0]
194
+
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.' })
197
+ // 15 janvier 2023 est aujourd'hui
198
+ expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
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
202
+ })
203
+
204
+ it('should validate notAfterToday rule', () => {
205
+ const rules = generateRules([{
206
+ type: 'notAfterToday',
207
+ options: { message: 'Date cannot be after today.' },
208
+ }])
209
+ const rule = rules[0]
210
+
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.' })
213
+ // 15 janvier 2023 est aujourd'hui
214
+ expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
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
218
+ })
219
+
220
+ it('should test parseDate function directly', () => {
221
+ // Test with valid date string
222
+ expect(parseDate('15/01/2023')).toEqual(new Date(2023, 0, 15))
223
+
224
+ // Test with Date object
225
+ const dateObj = new Date(2023, 0, 15)
226
+ expect(parseDate(dateObj)).toEqual(dateObj)
227
+
228
+ // Test with different format
229
+ expect(parseDate('2023-01-15', 'YYYY-MM-DD')).toEqual(new Date(2023, 0, 15))
230
+
231
+ // Test with YY format
232
+ expect(parseDate('15/01/23', 'DD/MM/YY')).toEqual(new Date(2023, 0, 15))
233
+
234
+ // Test with invalid date
235
+ expect(parseDate('invalid-date')).toBeNull()
236
+
237
+ // Test with empty string
238
+ expect(parseDate('')).toBeNull()
239
+
240
+ // Test with null
241
+ expect(parseDate(null as unknown as string | Date)).toBeNull()
242
+
243
+ // Test with mismatched format parts
244
+ expect(parseDate('15/01', 'DD/MM/YYYY')).toBeNull()
245
+
246
+ // Test with invalid parts
247
+ expect(parseDate('aa/bb/cccc', 'DD/MM/YYYY')).toBeNull()
248
+
249
+ // Test with invalid month (out of range)
250
+ expect(parseDate('15/13/2023', 'DD/MM/YYYY')).toBeNull()
251
+
252
+ // Test with invalid day (out of range)
253
+ expect(parseDate('32/01/2023', 'DD/MM/YYYY')).toBeNull()
254
+
255
+ // Test with invalid year (out of range)
256
+ expect(parseDate('15/01/1800', 'DD/MM/YYYY')).toBeNull()
257
+
258
+ // Test with invalid date (e.g., 31 February)
259
+ expect(parseDate('31/02/2023', 'DD/MM/YYYY')).toBeNull()
260
+ })
261
+
262
+ it('should validate notBeforeDate rule', () => {
263
+ const rules = generateRules([{
264
+ type: 'notBeforeDate',
265
+ options: {
266
+ date: '10/01/2023', // 10 janvier 2023
267
+ message: 'Date cannot be before reference date.',
268
+ },
269
+ }])
270
+ const rule = rules[0]
271
+
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.' })
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.' })
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.' })
278
+ // Test avec une date invalide
279
+ expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
280
+ // Test sans option date
281
+ const ruleWithoutDate = generateRules([{
282
+ type: 'notBeforeDate',
283
+ options: { message: 'Date cannot be before reference date.' },
284
+ }])[0]
285
+ expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
286
+ expect(rule('')).toEqual({}) // Empty string should be ignored
287
+ })
288
+
289
+ it('should throw when date reference is not a string in notBeforeDate rule', () => {
290
+ expect(() => {
291
+ const invalidRule = generateRules([{
292
+ type: 'notBeforeDate',
293
+ options: {
294
+ date: new Date() as unknown as string, // Date object instead of string
295
+ message: 'Date cannot be before reference date.',
296
+ },
297
+ }])[0]
298
+ invalidRule(new Date())
299
+ }).toThrow('Date reference must be a string in DD/MM/YYYY format')
300
+ })
301
+
302
+ it('should validate notAfterDate rule', () => {
303
+ const rules = generateRules([{
304
+ type: 'notAfterDate',
305
+ options: {
306
+ date: '20/01/2023', // 20 janvier 2023
307
+ message: 'Date cannot be after reference date.',
308
+ },
309
+ }])
310
+ const rule = rules[0]
311
+
312
+ // 21 janvier 2023 est après la date de référence
313
+ expect(rule(new Date(2023, 0, 21))).toEqual({ error: 'Date cannot be after reference date.' })
314
+ // 20 janvier 2023 est la date de référence
315
+ expect(rule(new Date(2023, 0, 20))).toEqual({ success: 'Le champ est valide.' })
316
+ // 19 janvier 2023 est avant la date de référence
317
+ expect(rule(new Date(2023, 0, 19))).toEqual({ success: 'Le champ est valide.' })
318
+ // Test avec une date invalide
319
+ expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
320
+ // Test sans option date
321
+ const ruleWithoutDate = generateRules([{
322
+ type: 'notAfterDate',
323
+ options: { message: 'Date cannot be after reference date.' },
324
+ }])[0]
325
+ expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
326
+ expect(rule('')).toEqual({}) // Empty string should be ignored
327
+ })
328
+
329
+ it('should throw when date reference is not a string in notAfterDate rule', () => {
330
+ expect(() => {
331
+ const invalidRule = generateRules([{
332
+ type: 'notAfterDate',
333
+ options: {
334
+ date: new Date() as unknown as string, // Date object instead of string
335
+ message: 'Date cannot be after reference date.',
336
+ },
337
+ }])[0]
338
+ invalidRule(new Date())
339
+ }).toThrow('Date reference must be a string in DD/MM/YYYY format')
340
+ })
341
+
342
+ it('should validate dateExact rule', () => {
343
+ const rules = generateRules([{
344
+ type: 'dateExact',
345
+ options: {
346
+ date: '15/01/2023', // 15 janvier 2023
347
+ message: 'Date must be exactly the reference date.',
348
+ },
349
+ }])
350
+ const rule = rules[0]
351
+
352
+ // 14 janvier 2023 n'est pas la date exacte
353
+ expect(rule(new Date(2023, 0, 14))).toEqual({ error: 'Date must be exactly the reference date.' })
354
+ // 15 janvier 2023 est la date exacte
355
+ expect(rule(new Date(2023, 0, 15))).toEqual({ success: 'Le champ est valide.' })
356
+ // 16 janvier 2023 n'est pas la date exacte
357
+ expect(rule(new Date(2023, 0, 16))).toEqual({ error: 'Date must be exactly the reference date.' })
358
+ // Test avec une date invalide
359
+ expect(rule('invalid-date')).toEqual({ error: 'Date invalide' })
360
+ // Test sans option date
361
+ const ruleWithoutDate = generateRules([{
362
+ type: 'dateExact',
363
+ options: { message: 'Date must be exactly the reference date.' },
364
+ }])[0]
365
+ expect(ruleWithoutDate(new Date())).toEqual({ error: 'Configuration de la règle invalide' })
366
+ expect(rule('')).toEqual({}) // Empty string should be ignored
367
+ })
368
+
369
+ it('should throw when date reference is not a string in dateExact rule', () => {
370
+ expect(() => {
371
+ const invalidRule = generateRules([{
372
+ type: 'dateExact',
373
+ options: {
374
+ date: new Date() as unknown as string, // Date object instead of string
375
+ message: 'Date must be exactly the reference date.',
376
+ },
377
+ }])[0]
378
+ invalidRule(new Date())
379
+ }).toThrow('Date reference must be a string in DD/MM/YYYY format')
72
380
  })
73
381
 
74
382
  it('should validate custom rule', () => {
75
383
  const rules = generateRules([{
76
384
  type: 'custom',
77
- options: { validate: value => value === 'valid', message: 'Custom validation failed.' },
385
+ options: { validate: (value: unknown) => value === 'valid', message: 'Custom validation failed.' },
78
386
  }])
79
387
  const rule = rules[0]
80
388
 
81
389
  expect(rule('invalid')).toEqual({ error: 'Custom validation failed.' })
82
390
  expect(rule('valid')).toEqual({ success: 'Le champ est valide.' })
391
+ expect(rule('')).toEqual({}) // Empty string should be ignored
392
+
393
+ // Test avec un message personnalisé
394
+ const customMessageRule = generateRules([{
395
+ type: 'custom',
396
+ options: { validate: (value: unknown) => value === 'valid' ? true : 'Custom error message' },
397
+ }])[0]
398
+ expect(customMessageRule('invalid')).toEqual({ error: 'Custom error message' })
399
+ })
400
+
401
+ it('should handle warning mode instead of error', () => {
402
+ const rules = generateRules([{
403
+ type: 'required',
404
+ options: {
405
+ message: 'This field is required.',
406
+ isWarning: true,
407
+ },
408
+ }])
409
+ const rule = rules[0]
410
+
411
+ expect(rule('')).toEqual({ warning: 'This field is required.' })
412
+
413
+ // Test avec un message d'avertissement personnalisé
414
+ const warningMessageRule = generateRules([{
415
+ type: 'required',
416
+ options: {
417
+ warningMessage: 'Warning: this field should be filled.',
418
+ isWarning: true,
419
+ },
420
+ }])[0]
421
+ expect(warningMessageRule('')).toEqual({ warning: 'Warning: this field should be filled.' })
422
+ })
423
+
424
+ it('should handle custom field identifiers', () => {
425
+ const rules = generateRules([{
426
+ type: 'required',
427
+ options: {
428
+ fieldName: 'Email',
429
+ },
430
+ }])
431
+ const rule = rules[0]
432
+
433
+ expect(rule('')).toEqual({ error: 'Vous devez renseigner Email.' })
434
+
435
+ const fieldIdentifierRule = generateRules([{
436
+ type: 'required',
437
+ options: {
438
+ fieldIdentifier: 'l\'adresse email',
439
+ },
440
+ }])[0]
441
+ expect(fieldIdentifierRule('')).toEqual({ error: 'Vous devez renseigner l\'adresse email.' })
442
+ })
443
+
444
+ it('should handle success messages', () => {
445
+ const rules = generateRules([{
446
+ type: 'required',
447
+ options: {
448
+ successMessage: 'Field is valid!',
449
+ },
450
+ }])
451
+ const rule = rules[0]
452
+
453
+ expect(rule('value')).toEqual({ success: 'Field is valid!' })
454
+ })
455
+
456
+ it('should handle invalid rule types', () => {
457
+ const rules = generateRules([{
458
+ type: 'invalidRuleType',
459
+ options: { message: 'This should show an error.' },
460
+ }])
461
+ const rule = rules[0]
462
+
463
+ expect(rule('any value')).toEqual({ error: 'La règle spécifiée pour ce champ n\'existe pas.' })
83
464
  })
84
465
  })
@@ -1,3 +1,6 @@
1
+ // Regular expressions
2
+ export const EMAIL_REGEXP = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
3
+
1
4
  export type ValidationResult = {
2
5
  success?: string
3
6
  error?: string
@@ -100,7 +103,7 @@ export function useFieldValidation() {
100
103
 
101
104
  const baseMessages = {
102
105
  success: options.successMessage || 'Le champ est valide.',
103
- error: options.message || `Validation échouée pour ${identifier}.`,
106
+ error: options.message || `Validation pour ${identifier}.`,
104
107
  warning: options.warningMessage || `Attention : ${identifier} peut contenir une erreur.`,
105
108
  }
106
109
 
@@ -154,7 +157,7 @@ export function useFieldValidation() {
154
157
 
155
158
  case 'email':
156
159
  return createValidationResult(
157
- typeof value === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value),
160
+ typeof value === 'string' && EMAIL_REGEXP.test(value),
158
161
  options.message || options.warningMessage || `${identifier} doit être un email valide.`,
159
162
  )
160
163
 
@@ -28,8 +28,8 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
28
28
  return slugify(name, { lower: true })
29
29
  }
30
30
 
31
- function getChips(toto: FilterItem): ChipItem[] {
32
- const { value, formatChip } = toto
31
+ function getChips(filter: FilterItem): ChipItem[] {
32
+ const { value, formatChip } = filter
33
33
 
34
34
  if (value !== undefined && formatChip) {
35
35
  return formatChip(value)
@@ -63,7 +63,7 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
63
63
  }
64
64
 
65
65
  return {
66
- text: item.text || item.value.toString(),
66
+ text: item.title || item.text || item.value.toString(),
67
67
  value: item,
68
68
  }
69
69
  })
@@ -92,7 +92,8 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
92
92
  return Object.keys(typedValue).map((key) => {
93
93
  // Use text property if it exists, else use value property or default to key value
94
94
  const text
95
- = typedValue[key].text
95
+ = typedValue[key].title
96
+ || typedValue[key].text
96
97
  || typedValue[key].value?.toString()
97
98
  || typedValue[key].toString()
98
99