@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
@@ -2,26 +2,56 @@
2
2
  import { ref, computed, watch } from 'vue'
3
3
  import { config } from './config'
4
4
  import { locales } from './locales'
5
- import { useFieldValidation } from '@/composables/rules/useFieldValidation'
6
- import { mdiEye, mdiEyeOff } from '@mdi/js'
7
- // import deepMerge from 'deepmerge'
5
+ import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
6
+ import {
7
+ mdiEye,
8
+ mdiEyeOff,
9
+ mdiAlertCircle,
10
+ mdiAlert,
11
+ mdiCheckCircle,
12
+ } from '@mdi/js'
8
13
  import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
9
-
10
- type Rule = (value: string | null) => { error?: string, success?: string }
14
+ import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
15
+ import type { ColorType } from '@/components/Customs/SyTextField/types'
11
16
 
12
17
  const props = withDefaults(defineProps<{
13
18
  modelValue?: string | null
14
- outlined?: boolean
19
+ variantStyle?: 'outlined' | 'underlined'
20
+ color?: ColorType
21
+ label?: string
15
22
  required?: boolean
23
+ errorMessages?: string[] | null
24
+ warningMessages?: string[] | null
25
+ successMessages?: string[] | null
26
+ isReadOnly?: boolean
27
+ isDisabled?: boolean
28
+ placeholder?: string
29
+ customRules?: ValidationRule[]
30
+ customWarningRules?: ValidationRule[]
31
+ customSuccessRules?: ValidationRule[]
32
+ showSuccessMessages?: boolean
33
+ displayAsterisk?: boolean
16
34
  isValidateOnBlur?: boolean
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
18
- customRules?: any
35
+ disableErrorHandling?: boolean
19
36
  } & CustomizableOptions>(), {
20
37
  modelValue: null,
21
- outlined: true,
38
+ variantStyle: 'outlined',
39
+ color: 'primary',
40
+ label: undefined,
22
41
  required: false,
42
+ errorMessages: null,
43
+ warningMessages: null,
44
+ successMessages: null,
45
+ isReadOnly: false,
46
+ isDisabled: false,
47
+ placeholder: undefined,
48
+ customRules: () => [],
49
+ customWarningRules: () => [],
50
+ customSuccessRules: () => [],
51
+ showSuccessMessages: true,
52
+ displayAsterisk: false,
23
53
  isValidateOnBlur: true,
24
- customRules: [],
54
+ disableErrorHandling: false,
25
55
  })
26
56
 
27
57
  const options = useCustomizableOptions(config, props)
@@ -43,147 +73,230 @@
43
73
  },
44
74
  )
45
75
 
46
- const { generateRules } = useFieldValidation()
76
+ // Construction des règles de validation
77
+ const defaultRules = computed<ValidationRule[]>(() => {
78
+ const rules: ValidationRule[] = []
47
79
 
48
- const defaultRules = [
49
- ...(props.required
50
- ? [{
80
+ if (props.required) {
81
+ rules.push({
51
82
  type: 'required',
52
- options: { message: 'Le mot de passe est requis.', fieldIdentifier: 'password' },
53
- }]
54
- : []),
55
- ]
56
-
57
- const rules = computed(() => {
58
- const baseRules = (props.required ? defaultRules : [])
59
- return props.customRules ? generateRules([...baseRules, ...props.customRules]) : generateRules(baseRules)
60
- })
61
-
62
- const errors = ref<string[]>([])
63
- const successes = ref<string[]>([])
83
+ options: {
84
+ message: 'Le mot de passe est requis',
85
+ fieldIdentifier: props.label || 'password',
86
+ },
87
+ })
88
+ }
64
89
 
65
- const isValidating = ref(false)
90
+ // Règle pour le message de succès
91
+ rules.push({
92
+ type: 'custom',
93
+ options: {
94
+ validate: (value: string) => value ? true : 'Ce champ est requis',
95
+ successMessage: 'Mot de passe fort',
96
+ fieldIdentifier: props.label || 'password',
97
+ },
98
+ })
66
99
 
67
- watch(() => password.value, () => {
68
- validateFields()
69
- }, { immediate: true })
100
+ return rules
101
+ })
70
102
 
71
- watch(
72
- () => props.isValidateOnBlur,
73
- () => {
74
- validateFields()
75
- },
76
- { immediate: true },
77
- )
103
+ // Initialisation du composable de validation
104
+ const { errors, warnings, successes, validateField } = useValidation({
105
+ customRules: defaultRules.value,
106
+ warningRules: props.customWarningRules || [],
107
+ successRules: props.customSuccessRules || [],
108
+ showSuccessMessages: props.showSuccessMessages,
109
+ fieldIdentifier: props.label || 'password',
110
+ disableErrorHandling: props.disableErrorHandling,
111
+ })
78
112
 
79
- watch(
80
- () => props.required,
81
- () => {
82
- validateFields()
83
- },
84
- { immediate: true },
85
- )
113
+ // Computed pour les états de validation
114
+ const hasError = computed(() => errors.value.length > 0)
115
+ const hasWarning = computed(() => warnings.value.length > 0)
116
+ const hasSuccess = computed(() => successes.value.length > 0 && props.showSuccessMessages)
86
117
 
87
- function validateFieldSet(value: string | null, rules: Rule[]) {
88
- rules.forEach((rule) => {
89
- const { error, success } = rule(value)
90
- if (error) errors.value.push(error)
91
- if (success && success !== 'Le champ est valide.') successes.value.push(success)
92
- })
93
- }
118
+ const validationIcon = computed(() => {
119
+ if (hasError.value) return mdiAlertCircle
120
+ if (hasWarning.value) return mdiAlert
121
+ if (hasSuccess.value) return mdiCheckCircle
122
+ return undefined
123
+ })
94
124
 
95
- function validateFields(onBlur = false): void {
96
- errors.value = []
97
- successes.value = []
125
+ const validationColor = computed(() => {
126
+ if (hasError.value) return 'error'
127
+ if (hasWarning.value) return 'warning'
128
+ if (hasSuccess.value) return 'success'
129
+ return 'rgb(0 0 0 / 100%)'
130
+ })
98
131
 
99
- const shouldValidate = onBlur || !props.isValidateOnBlur
132
+ // Synchronisation des messages externes
133
+ watch(() => props.errorMessages, (newVal) => {
134
+ if (newVal) {
135
+ errors.value = newVal
136
+ }
137
+ }, { immediate: true })
100
138
 
101
- if (!shouldValidate) return
139
+ watch(() => props.warningMessages, (newVal) => {
140
+ if (newVal) {
141
+ warnings.value = newVal
142
+ }
143
+ }, { immediate: true })
102
144
 
103
- validateFieldSet(password.value, rules.value)
104
- }
145
+ watch(() => props.successMessages, (newVal) => {
146
+ if (newVal) {
147
+ successes.value = newVal
148
+ }
149
+ }, { immediate: true })
105
150
 
106
- function emitChangeEvent(value: string): void {
107
- emit('update:modelValue', value)
108
- validateFields()
109
- }
151
+ watch(() => password.value, () => {
152
+ validateField(password.value, [...defaultRules.value, ...(props.customRules || [])], props.customWarningRules || [], props.customSuccessRules || [])
153
+ emit('update:modelValue', password.value)
154
+ })
110
155
 
111
156
  function handleKeydown(event: KeyboardEvent): void {
112
157
  if (event.key === 'Enter') {
113
- emit('submit')
158
+ validateOnSubmit()
114
159
  }
115
160
  }
116
161
 
117
- function validateOnSubmit() {
118
- isValidating.value = true
119
- validateFields(true)
120
- return errors.value.length === 0
162
+ const validateOnSubmit = () => {
163
+ validateField(password.value, [...defaultRules.value, ...(props.customRules || [])], props.customWarningRules || [], props.customSuccessRules || [])
164
+ const isValid = errors.value.length === 0
165
+ if (isValid) {
166
+ emit('submit')
167
+ }
168
+ return isValid
121
169
  }
122
170
 
123
171
  defineExpose({
172
+ showEyeIcon,
173
+ errors,
174
+ warnings,
175
+ successes,
176
+ hasError,
177
+ hasWarning,
178
+ hasSuccess,
124
179
  validateOnSubmit,
125
180
  })
126
181
  </script>
127
182
 
128
183
  <template>
129
- <VTextField
184
+ <SyTextField
130
185
  v-model="password"
131
- :class="{
132
- 'v-messages__message--success': successes.length > 0
133
- }"
186
+ v-bind="options"
187
+ :variant-style="props.variantStyle"
188
+ :color="props.color"
189
+ :label="props.label"
190
+ :required="props.required"
134
191
  :error-messages="errors"
135
- :messages="successes"
192
+ :warning-messages="warnings"
193
+ :success-messages="successes"
194
+ :is-read-only="props.isReadOnly"
195
+ :is-disabled="props.isDisabled"
196
+ :placeholder="props.placeholder"
136
197
  :type="showEyeIcon ? 'text' : 'password'"
137
- :variant="outlined ? 'outlined' : 'underlined'"
198
+ :display-asterisk="props.displayAsterisk"
199
+ :rules="[...defaultRules, ...props.customRules]"
138
200
  class="vd-password"
139
- color="primary"
140
- title="password"
141
- validate-on="blur lazy"
142
- @blur="validateFields(true)"
201
+ :validate-on="props.isValidateOnBlur ? 'blur lazy' : 'lazy'"
202
+ @blur="props.isValidateOnBlur ? validateField(password, [...defaultRules, ...(props.customRules || [])], props.customWarningRules || [], props.customSuccessRules || []) : () => {}"
143
203
  @keydown="handleKeydown"
144
- @update:model-value="emitChangeEvent"
145
204
  >
146
205
  <template #append-inner>
147
- <VBtn
148
- :aria-label="btnLabel"
149
- class="mx-auto"
206
+ <div
207
+ class="d-flex align-center"
150
208
  v-bind="options.btn"
151
- @click="showEyeIcon = !showEyeIcon"
152
209
  >
153
- <VIcon v-bind="options.icon">
154
- {{ showEyeIcon ? eyeIcon : eyeOffIcon }}
155
- </VIcon>
156
- </VBtn>
210
+ <VIcon
211
+ :icon="validationIcon"
212
+ :color="validationColor"
213
+ class="mr-2"
214
+ />
215
+ <VIcon
216
+ :icon="showEyeIcon ? eyeIcon : eyeOffIcon"
217
+ color="rgb(0 0 0 / 70%)"
218
+ :aria-label="btnLabel"
219
+ role="button"
220
+ @click="showEyeIcon = !showEyeIcon"
221
+ />
222
+ </div>
157
223
  </template>
158
- </VTextField>
224
+ </SyTextField>
159
225
  </template>
160
226
 
161
227
  <style lang="scss" scoped>
162
228
  @use '@/assets/tokens';
163
229
 
164
230
  .vd-password {
165
- .v-btn--icon.v-btn--density-default {
166
- width: var(--v-btn-height);
167
- height: var(--v-btn-height);
231
+ :deep(.v-field) {
232
+ .v-field__input {
233
+ padding-right: 48px;
234
+ }
235
+ }
236
+ }
237
+
238
+ .warning-field {
239
+ :deep(.v-input__details > .v-icon),
240
+ :deep(.v-input__prepend > .v-icon),
241
+ :deep(.v-input__append > .v-icon) {
242
+ opacity: 1 !important;
168
243
  }
169
244
 
170
- :deep(.v-field.v-field--variant-underlined .v-field__append-inner) {
171
- padding-top: 0;
172
- padding-bottom: 0;
173
- display: flex;
174
- align-items: center;
245
+ :deep(.v-field) {
246
+ color: tokens.$colors-border-warning !important;
247
+
248
+ .v-field__outline {
249
+ color: tokens.$colors-border-warning !important;
250
+ }
175
251
  }
176
252
 
177
- :deep(.v-field.v-field--variant-underlined .v-field__input) {
178
- padding-top: calc(var(--v-field-input-padding-top) - 15px);
253
+ :deep(.v-messages) {
254
+ opacity: 1 !important;
255
+
256
+ .v-messages__message {
257
+ color: tokens.$colors-border-warning !important;
258
+ }
179
259
  }
180
260
  }
181
261
 
182
- .v-messages__message--success {
183
- color: tokens.$colors-border-success !important;
262
+ .error-field {
263
+ :deep(.v-input__control),
264
+ :deep(.v-messages__message) {
265
+ color: tokens.$colors-text-error !important;
266
+ }
184
267
 
185
268
  .v-field--active & {
269
+ color: tokens.$colors-border-error !important;
270
+ }
271
+ }
272
+
273
+ .success-field {
274
+ :deep(.v-input__details > .v-icon),
275
+ :deep(.v-input__prepend > .v-icon),
276
+ :deep(.v-input__append > .v-icon) {
277
+ opacity: 1 !important;
278
+ }
279
+
280
+ :deep(.v-field) {
186
281
  color: tokens.$colors-border-success !important;
282
+
283
+ .v-field__outline {
284
+ color: tokens.$colors-border-success !important;
285
+ }
286
+ }
287
+
288
+ :deep(.v-messages) {
289
+ opacity: 1 !important;
290
+
291
+ .v-messages__message {
292
+ color: tokens.$colors-border-success !important;
293
+ }
294
+ }
295
+ }
296
+
297
+ .basic-field {
298
+ :deep(.v-icon__svg) {
299
+ fill: rgb(0 0 0 / 70%);
187
300
  }
188
301
  }
189
302
  </style>
@@ -7,8 +7,12 @@ import { createVuetify } from 'vuetify'
7
7
  interface PasswordFieldVM {
8
8
  showEyeIcon: boolean
9
9
  errors: string[]
10
- isValidating: boolean
11
10
  validateOnSubmit: () => boolean
11
+ hasError: boolean
12
+ hasWarning: boolean
13
+ hasSuccess: boolean
14
+ validationIcon: string
15
+ validationIconColor: string
12
16
  }
13
17
 
14
18
  describe('PasswordField.vue', () => {
@@ -36,7 +40,7 @@ describe('PasswordField.vue', () => {
36
40
  // 2. Cast wrapper.vm as your interface
37
41
  const vm = wrapper.vm as unknown as PasswordFieldVM
38
42
 
39
- const button = wrapper.find('button')
43
+ const button = wrapper.find('[role="button"]')
40
44
  expect(vm.showEyeIcon).toBe(false) // from your interface
41
45
  await button.trigger('click')
42
46
  expect(vm.showEyeIcon).toBe(true)
@@ -62,35 +66,160 @@ describe('PasswordField.vue', () => {
62
66
  },
63
67
  props: {
64
68
  required: true,
69
+ label: 'Password',
65
70
  },
66
71
  })
67
72
  const vm = wrapper.vm as unknown as PasswordFieldVM
68
73
 
69
74
  const input = wrapper.find('input')
70
75
  await input.trigger('blur')
71
- expect(vm.errors).toContain('Le mot de passe est requis.')
76
+ expect(vm.errors).toContain('Le mot de passe est requis')
72
77
  })
73
78
 
74
- it('validates fields on submit and sets validating flag', async () => {
79
+ it('validates fields on submit', async () => {
75
80
  const wrapper = mount(PasswordField, {
76
81
  global: {
77
82
  plugins: [vuetify],
78
83
  },
79
84
  props: {
80
85
  modelValue: '',
81
- outlined: false,
86
+ variantStyle: 'underlined',
82
87
  required: true,
88
+ label: 'Password',
83
89
  },
84
90
  })
85
91
  const vm = wrapper.vm as unknown as PasswordFieldVM
86
92
 
87
93
  const result = vm.validateOnSubmit()
88
- expect(vm.isValidating).toBe(true)
89
94
  expect(result).toBe(false)
95
+ expect(vm.errors).toContain('Le mot de passe est requis')
90
96
 
91
- // This awaits the Vue microtask queue to let any reactive data settle
92
- await wrapper.vm.$nextTick()
97
+ // Test avec un mot de passe valide
98
+ await wrapper.setProps({ modelValue: 'valid-password' })
99
+ const validResult = vm.validateOnSubmit()
100
+ expect(validResult).toBe(true)
101
+ expect(wrapper.emitted().submit).toBeTruthy()
102
+ })
103
+
104
+ it('displays warning and success messages', async () => {
105
+ const wrapper = mount(PasswordField, {
106
+ global: {
107
+ plugins: [vuetify],
108
+ },
109
+ props: {
110
+ modelValue: 'test',
111
+ warningMessages: ['Attention: mot de passe court'],
112
+ successMessages: ['Mot de passe valide'],
113
+ },
114
+ })
115
+
116
+ const messages = wrapper.findAll('.v-messages__message')
117
+ expect(messages.length).toBe(1) // SyTextField affiche soit les warnings, soit les succès
118
+ expect(messages[0].text()).toBe('Attention: mot de passe court')
119
+
120
+ // Simuler la suppression du warning pour voir le message de succès
121
+ await wrapper.setProps({ warningMessages: [] })
122
+ const successMessages = wrapper.findAll('.v-messages__message')
123
+ expect(successMessages.length).toBe(1)
124
+ expect(successMessages[0].text()).toBe('Mot de passe valide')
125
+ })
126
+
127
+ it('handles custom validation rules', async () => {
128
+ const wrapper = mount(PasswordField, {
129
+ global: {
130
+ plugins: [vuetify],
131
+ },
132
+ props: {
133
+ modelValue: 'test',
134
+ customRules: [{
135
+ type: 'custom',
136
+ options: {
137
+ message: 'Le mot de passe doit contenir au moins 8 caractères',
138
+ validate: (value: string) => value.length >= 8,
139
+ },
140
+ }],
141
+ customWarningRules: [{
142
+ type: 'custom',
143
+ options: {
144
+ warningMessage: 'Le mot de passe pourrait être plus fort',
145
+ validate: (value: string) => /[A-Z]/.test(value),
146
+ },
147
+ }],
148
+ customSuccessRules: [{
149
+ type: 'custom',
150
+ options: {
151
+ successMessage: 'Mot de passe fort',
152
+ validate: (value: string) => value.length >= 12,
153
+ },
154
+ }],
155
+ },
156
+ })
157
+
158
+ const vm = wrapper.vm as unknown as PasswordFieldVM
159
+
160
+ // Forcer la validation initiale
161
+ await wrapper.find('input').trigger('blur')
162
+ expect(vm.errors).toContain('Le mot de passe doit contenir au moins 8 caractères')
163
+
164
+ // Mettons un mot de passe plus long mais sans majuscule -> warning
165
+ await wrapper.setProps({ modelValue: 'testpassword' })
166
+ await wrapper.find('input').trigger('blur')
167
+ const messages = wrapper.findAll('.v-messages__message')
168
+ expect(messages[0].text()).toBe('Le mot de passe pourrait être plus fort')
169
+
170
+ // Mettons un mot de passe fort -> succès
171
+ await wrapper.setProps({ modelValue: 'TestPassword123' })
172
+ await wrapper.find('input').trigger('blur')
173
+ const successMessages = wrapper.findAll('.v-messages__message')
174
+ expect(successMessages[0].text()).toBe('Mot de passe fort')
175
+ })
176
+
177
+ it('displays validation states based on validation rules', async () => {
178
+ const wrapper = mount(PasswordField, {
179
+ global: {
180
+ plugins: [vuetify],
181
+ },
182
+ props: {
183
+ modelValue: 'test',
184
+ customRules: [{
185
+ type: 'custom',
186
+ options: {
187
+ message: 'Le mot de passe doit contenir au moins 8 caractères',
188
+ validate: (value: string) => value.length >= 8,
189
+ },
190
+ }],
191
+ customWarningRules: [{
192
+ type: 'custom',
193
+ options: {
194
+ warningMessage: 'Le mot de passe pourrait être plus fort',
195
+ validate: (value: string) => /[A-Z]/.test(value),
196
+ },
197
+ }],
198
+ customSuccessRules: [{
199
+ type: 'custom',
200
+ options: {
201
+ successMessage: 'Mot de passe fort',
202
+ validate: (value: string) => value.length >= 12,
203
+ },
204
+ }],
205
+ },
206
+ })
207
+
208
+ // Forcer la validation initiale
209
+ await wrapper.find('input').trigger('blur')
210
+
211
+ // État d'erreur
212
+ const vm = wrapper.vm as unknown as PasswordFieldVM
213
+ expect(vm.hasError).toBe(true)
214
+
215
+ // État d'avertissement
216
+ await wrapper.setProps({ modelValue: 'testpassword' })
217
+ await wrapper.find('input').trigger('blur')
218
+ expect(vm.hasWarning).toBe(true)
93
219
 
94
- expect(vm.errors).toContain('Le mot de passe est requis.')
220
+ // État de succès
221
+ await wrapper.setProps({ modelValue: 'TestPassword123' })
222
+ await wrapper.find('input').trigger('blur')
223
+ expect(vm.hasSuccess).toBe(true)
95
224
  })
96
225
  })