@cnamts/synapse 0.0.12-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 (250) hide show
  1. package/dist/design-system-v3.js +4913 -4021
  2. package/dist/design-system-v3.umd.cjs +1 -1
  3. package/dist/src/components/Amelipro/types/types.d.ts +30 -57
  4. package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +2 -0
  5. package/dist/src/components/DatePicker/DatePicker.d.ts +36 -44
  6. package/dist/src/components/DatePicker/DateTextInput.d.ts +33 -36
  7. package/dist/src/components/FilterInline/AccessibiliteItems.d.ts +30 -0
  8. package/dist/src/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +4 -0
  9. package/dist/src/components/FilterSideBar/AccessibiliteItems.d.ts +29 -0
  10. package/dist/src/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +4 -0
  11. package/dist/src/components/NirField/NirField.d.ts +14 -2
  12. package/dist/src/components/NotificationBar/NotificationBar.d.ts +5 -5
  13. package/dist/src/components/PasswordField/PasswordField.d.ts +2 -0
  14. package/dist/src/components/PeriodField/PeriodField.d.ts +159 -157
  15. package/dist/src/components/PhoneField/PhoneField.d.ts +22 -1
  16. package/dist/src/components/UploadWorkflow/AccessibiliteItems.d.ts +29 -0
  17. package/dist/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +4 -0
  18. package/dist/src/components/Usages/Usages.d.ts +10 -0
  19. package/dist/src/components/index.d.ts +3 -0
  20. package/dist/src/composables/date/tests/useDatePickerAccessibility.spec.d.ts +1 -0
  21. package/dist/src/composables/date/useDateFormat.d.ts +26 -0
  22. package/dist/src/composables/date/useDateInitialization.d.ts +18 -0
  23. package/dist/src/composables/date/useDatePickerAccessibility.d.ts +8 -0
  24. package/dist/src/composables/useFilterable/useFilterable.d.ts +1 -1
  25. package/dist/src/composables/validation/useValidation.d.ts +1 -0
  26. package/dist/src/main.d.ts +1 -0
  27. package/dist/src/utils/formatDate/index.d.ts +3 -0
  28. package/dist/src/utils/formatDate/tests/formatDate.spec.d.ts +1 -0
  29. package/dist/src/utils/functions/validation/isDateAfter/index.d.ts +2 -0
  30. package/dist/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.d.ts +1 -0
  31. package/dist/src/utils/functions/validation/isDateBefore/index.d.ts +2 -0
  32. package/dist/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.d.ts +1 -0
  33. package/dist/src/utils/functions/validation/isDateInRange/index.d.ts +3 -0
  34. package/dist/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.d.ts +1 -0
  35. package/dist/src/utils/functions/validation/isDateValid/index.d.ts +9 -0
  36. package/dist/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.d.ts +1 -0
  37. package/dist/src/utils/functions/validation/isEmailValid/tests/isEmailValid.spec.d.ts +1 -0
  38. package/dist/src/utils/functions/validation/isWeekend/index.d.ts +3 -0
  39. package/dist/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.d.ts +1 -0
  40. package/dist/src/utils/parseDate/index.d.ts +3 -0
  41. package/dist/src/utils/parseDate/tests/parseDate.spec.d.ts +1 -0
  42. package/dist/src/utils/rules/doMatchPattern/index.d.ts +3 -0
  43. package/dist/src/utils/rules/doMatchPattern/tests/matchPattern.spec.d.ts +1 -0
  44. package/dist/src/utils/rules/index.d.ts +11 -0
  45. package/dist/src/utils/rules/isDateValid/index.d.ts +4 -0
  46. package/dist/src/utils/rules/isDateValid/tests/isDateValid.spec.d.ts +1 -0
  47. package/dist/src/utils/rules/isExactLength/index.d.ts +3 -0
  48. package/dist/src/utils/rules/isExactLength/locales.d.ts +2 -0
  49. package/dist/src/utils/rules/isExactLength/tests/exactLength.spec.d.ts +1 -0
  50. package/dist/src/utils/rules/isMaxLength/index.d.ts +3 -0
  51. package/dist/src/utils/rules/isMaxLength/locales.d.ts +2 -0
  52. package/dist/src/utils/rules/isMaxLength/tests/isMaxLength.spec.d.ts +1 -0
  53. package/dist/src/utils/rules/isMinLength/index.d.ts +3 -0
  54. package/dist/src/utils/rules/isMinLength/locales.d.ts +2 -0
  55. package/dist/src/utils/rules/isMinLength/tests/isMinLength.spec.d.ts +1 -0
  56. package/dist/src/utils/rules/isNotAfterDate/index.d.ts +3 -0
  57. package/dist/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.d.ts +1 -0
  58. package/dist/src/utils/rules/isNotAfterToday/index.d.ts +4 -0
  59. package/dist/src/utils/rules/isNotAfterToday/locales.d.ts +2 -0
  60. package/dist/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.d.ts +1 -0
  61. package/dist/src/utils/rules/isNotBeforeDate/index.d.ts +3 -0
  62. package/dist/src/utils/rules/isNotBeforeDate/locales.d.ts +2 -0
  63. package/dist/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.d.ts +1 -0
  64. package/dist/src/utils/rules/isNotBeforeToday/index.d.ts +4 -0
  65. package/dist/src/utils/rules/isNotBeforeToday/locales.d.ts +2 -0
  66. package/dist/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.d.ts +1 -0
  67. package/dist/src/utils/rules/isRequired/index.d.ts +4 -0
  68. package/dist/src/utils/rules/isRequired/locales.d.ts +2 -0
  69. package/dist/src/utils/rules/isRequired/tests/isRequred.spec.d.ts +1 -0
  70. package/dist/src/utils/rules/isValidEmail/index.d.ts +4 -0
  71. package/dist/src/utils/rules/isValidEmail/locales.d.ts +2 -0
  72. package/dist/src/utils/rules/isValidEmail/tests/isValidEmail.spec.d.ts +1 -0
  73. package/dist/style.css +1 -1
  74. package/package.json +3 -1
  75. package/src/assets/_radius.scss +12 -6
  76. package/src/assets/settings.scss +8 -0
  77. package/src/components/Amelipro/types/types.ts +40 -0
  78. package/src/components/ChipList/ChipList.stories.ts +26 -27
  79. package/src/components/ChipList/ChipList.vue +5 -1
  80. package/src/components/ChipList/config.ts +1 -0
  81. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -2
  82. package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +1 -1
  83. package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +1 -1
  84. package/src/components/Customs/SySelect/SySelect.mdx +1 -1
  85. package/src/components/Customs/SySelect/SySelect.vue +19 -4
  86. package/src/components/Customs/SyTextField/SyTextField.mdx +2 -2
  87. package/src/components/Customs/SyTextField/SyTextField.stories.ts +239 -0
  88. package/src/components/Customs/SyTextField/SyTextField.vue +3 -0
  89. package/src/components/DatePicker/DatePicker.stories.ts +177 -5
  90. package/src/components/DatePicker/DatePicker.vue +148 -347
  91. package/src/components/DatePicker/DateTextInput.vue +91 -251
  92. package/src/components/DatePicker/tests/DatePicker.spec.ts +118 -48
  93. package/src/components/DatePicker/tests/DateTextInput.spec.ts +202 -6
  94. package/src/components/FileList/Accessibilite.stories.ts +1 -1
  95. package/src/components/FileList/AccessibiliteItems.ts +22 -0
  96. package/src/components/FileUpload/FileUpload.stories.ts +9 -7
  97. package/src/components/FilterInline/Accessibilite.mdx +14 -0
  98. package/src/components/FilterInline/Accessibilite.stories.ts +216 -0
  99. package/src/components/FilterInline/AccessibiliteItems.ts +132 -0
  100. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +4 -0
  101. package/src/components/FilterSideBar/Accessibilite.mdx +14 -0
  102. package/src/components/FilterSideBar/Accessibilite.stories.ts +216 -0
  103. package/src/components/FilterSideBar/AccessibiliteItems.ts +153 -0
  104. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +4 -0
  105. package/src/components/NirField/NirField.stories.ts +165 -0
  106. package/src/components/NirField/NirField.vue +6 -2
  107. package/src/components/NirField/tests/config.spec.ts +65 -0
  108. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  109. package/src/components/NotificationBar/NotificationBar.stories.ts +59 -11
  110. package/src/components/NotificationBar/NotificationBar.vue +42 -114
  111. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +28 -33
  112. package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +1 -1
  113. package/src/components/PaginatedTable/PaginatedTable.vue +6 -10
  114. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +4 -4
  115. package/src/components/PasswordField/PasswordField.stories.ts +191 -4
  116. package/src/components/PasswordField/PasswordField.vue +3 -0
  117. package/src/components/PeriodField/PeriodField.stories.ts +214 -118
  118. package/src/components/PeriodField/PeriodField.vue +195 -148
  119. package/src/components/PeriodField/tests/PeriodField.spec.ts +146 -0
  120. package/src/components/PhoneField/PhoneField.stories.ts +101 -0
  121. package/src/components/PhoneField/PhoneField.vue +73 -17
  122. package/src/components/PhoneField/tests/PhoneField.spec.ts +40 -0
  123. package/src/components/RatingPicker/RatingPicker.stories.ts +7 -7
  124. package/src/components/SearchListField/SearchListField.stories.ts +1 -1
  125. package/src/components/UploadWorkflow/Accessibilite.mdx +14 -0
  126. package/src/components/UploadWorkflow/Accessibilite.stories.ts +216 -0
  127. package/src/components/UploadWorkflow/AccessibiliteItems.ts +192 -0
  128. package/src/components/UploadWorkflow/UploadWorkflow.vue +2 -2
  129. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +4 -0
  130. package/src/components/Usages/tests/Usages.spec.ts +183 -0
  131. package/src/components/index.ts +3 -0
  132. package/src/composables/date/tests/useDateFormat.spec.ts +67 -0
  133. package/src/composables/date/tests/useDateInitialization.spec.ts +89 -0
  134. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +102 -0
  135. package/src/composables/date/useDateFormat.ts +94 -0
  136. package/src/composables/date/useDateInitialization.ts +92 -0
  137. package/src/composables/date/useDatePickerAccessibility.ts +78 -0
  138. package/src/composables/rules/tests/useFieldValidation.spec.ts +385 -4
  139. package/src/composables/useFilterable/useFilterable.ts +5 -4
  140. package/src/composables/validation/useValidation.ts +15 -0
  141. package/src/main.ts +1 -0
  142. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +28 -0
  143. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -2
  144. package/src/stories/Accessibilite/Audit/RGAA.mdx +6 -6
  145. package/src/stories/Accessibilite/Introduction.mdx +2 -1
  146. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +1 -1
  147. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +1 -1
  148. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +8 -11
  149. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +77 -0
  150. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +9 -3
  151. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
  152. package/src/stories/Demarrer/Introduction.stories.ts +3 -3
  153. package/src/stories/Demarrer/Releases.mdx +8 -0
  154. package/src/stories/Demarrer/Releases.stories.ts +66 -0
  155. package/src/stories/DesignTokens/Conteneurs.stories.ts +3 -3
  156. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +36 -0
  157. package/src/stories/GuideDuDev/UtiliserLesRules.mdx +2 -2
  158. package/src/utils/formatDate/index.ts +6 -0
  159. package/src/utils/formatDate/tests/formatDate.spec.ts +18 -0
  160. package/src/utils/functions/validation/isDateAfter/index.ts +9 -0
  161. package/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.ts +18 -0
  162. package/src/utils/functions/validation/isDateBefore/index.ts +9 -0
  163. package/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.ts +23 -0
  164. package/src/utils/functions/validation/isDateInRange/index.ts +22 -0
  165. package/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.ts +28 -0
  166. package/src/utils/functions/validation/isDateValid/index.ts +67 -0
  167. package/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.ts +46 -0
  168. package/src/utils/functions/validation/isEmailValid/index.ts +9 -0
  169. package/src/utils/functions/validation/isWeekend/index.ts +10 -0
  170. package/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.ts +16 -0
  171. package/src/utils/parseDate/index.ts +29 -0
  172. package/src/utils/parseDate/tests/parseDate.spec.ts +52 -0
  173. package/src/utils/rules/Rules.mdx +16 -0
  174. package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +66 -0
  175. package/src/utils/rules/doMatchPattern/DoMatchPattern.stories.ts +106 -0
  176. package/src/utils/rules/doMatchPattern/index.ts +28 -0
  177. package/src/utils/rules/doMatchPattern/locales.ts +5 -0
  178. package/src/utils/rules/doMatchPattern/tests/matchPattern.spec.ts +38 -0
  179. package/src/utils/rules/index.ts +11 -0
  180. package/src/utils/rules/isDateValid/IsDateValid.mdx +87 -0
  181. package/src/utils/rules/isDateValid/IsDateValid.stories.ts +113 -0
  182. package/src/utils/rules/isDateValid/index.ts +32 -0
  183. package/src/utils/rules/isDateValid/locales.ts +10 -0
  184. package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +27 -0
  185. package/src/utils/rules/isExactLength/IsExactLenght.mdx +68 -0
  186. package/src/utils/rules/isExactLength/IsExactLength.stories.ts +151 -0
  187. package/src/utils/rules/{exactLength → isExactLength}/index.ts +2 -4
  188. package/src/utils/rules/isExactLength/tests/exactLength.spec.ts +48 -0
  189. package/src/utils/rules/isMaxLength/IsMaxLength.mdx +68 -0
  190. package/src/utils/rules/isMaxLength/IsMaxLength.stories.ts +152 -0
  191. package/src/utils/rules/isMaxLength/index.ts +30 -0
  192. package/src/utils/rules/isMaxLength/locales.ts +6 -0
  193. package/src/utils/rules/isMaxLength/tests/isMaxLength.spec.ts +42 -0
  194. package/src/utils/rules/isMinLength/IsMinLength.mdx +68 -0
  195. package/src/utils/rules/isMinLength/IsMinLength.stories.ts +152 -0
  196. package/src/utils/rules/isMinLength/index.ts +30 -0
  197. package/src/utils/rules/isMinLength/locales.ts +6 -0
  198. package/src/utils/rules/isMinLength/tests/isMinLength.spec.ts +42 -0
  199. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +68 -0
  200. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +109 -0
  201. package/src/utils/rules/isNotAfterDate/index.ts +25 -0
  202. package/src/utils/rules/isNotAfterDate/locales.ts +6 -0
  203. package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +25 -0
  204. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +83 -0
  205. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +110 -0
  206. package/src/utils/rules/isNotAfterToday/index.ts +28 -0
  207. package/src/utils/rules/isNotAfterToday/locales.ts +5 -0
  208. package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +30 -0
  209. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +68 -0
  210. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.stories.ts +114 -0
  211. package/src/utils/rules/isNotBeforeDate/index.ts +25 -0
  212. package/src/utils/rules/isNotBeforeDate/locales.ts +6 -0
  213. package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +25 -0
  214. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +83 -0
  215. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +110 -0
  216. package/src/utils/rules/isNotBeforeToday/index.ts +28 -0
  217. package/src/utils/rules/isNotBeforeToday/locales.ts +5 -0
  218. package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +36 -0
  219. package/src/utils/rules/isRequired/IsRequired.mdx +81 -0
  220. package/src/utils/rules/isRequired/IsRequired.stories.ts +101 -0
  221. package/src/utils/rules/{required → isRequired}/index.ts +3 -3
  222. package/src/utils/rules/{required/tests/index.spec.ts → isRequired/tests/isRequred.spec.ts} +9 -9
  223. package/src/utils/rules/isValidEmail/IsValidEmail.mdx +81 -0
  224. package/src/utils/rules/isValidEmail/IsValidEmail.stories.ts +101 -0
  225. package/src/utils/rules/{email → isValidEmail}/index.ts +3 -5
  226. package/src/utils/rules/{email/tests/email.spec.ts → isValidEmail/tests/isValidEmail.spec.ts} +5 -5
  227. package/dist/src/components/Amelipro/types/languages.d.ts +0 -6
  228. package/dist/src/utils/rules/email/index.d.ts +0 -4
  229. package/dist/src/utils/rules/exactLength/index.d.ts +0 -4
  230. package/dist/src/utils/rules/required/index.d.ts +0 -4
  231. package/dist/src/utils/rules/required/ruleMessageHelper.d.ts +0 -3
  232. package/src/components/Amelipro/types/languages.d.ts +0 -6
  233. package/src/components/Amelipro/types/types.d.ts +0 -65
  234. package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +0 -58
  235. package/src/utils/functions/isEmailValid/index.ts +0 -8
  236. package/src/utils/rules/required/ruleMessageHelper.ts +0 -14
  237. package/src/utils/rules/required/tests/rulesMessageHelper.spec.ts +0 -22
  238. /package/dist/src/{utils/functions/isEmailValid/tests/isEmailValid.spec.d.ts → components/NirField/tests/config.spec.d.ts} +0 -0
  239. /package/dist/src/{utils/rules/email/tests/email.spec.d.ts → components/Usages/tests/Usages.spec.d.ts} +0 -0
  240. /package/dist/src/{utils/rules/required/tests/index.spec.d.ts → composables/date/tests/useDateFormat.spec.d.ts} +0 -0
  241. /package/dist/src/{utils/rules/required/tests/rulesMessageHelper.spec.d.ts → composables/date/tests/useDateInitialization.spec.d.ts} +0 -0
  242. /package/dist/src/utils/functions/{isEmailValid → validation/isEmailValid}/index.d.ts +0 -0
  243. /package/dist/src/utils/rules/{exactLength → doMatchPattern}/locales.d.ts +0 -0
  244. /package/dist/src/utils/rules/{email → isDateValid}/locales.d.ts +0 -0
  245. /package/dist/src/utils/rules/{required → isNotAfterDate}/locales.d.ts +0 -0
  246. /package/src/components/NirField/{tests → examples}//342/200/257dataset/342/200/257.md" +0 -0
  247. /package/src/utils/functions/{isEmailValid → validation/isEmailValid}/tests/isEmailValid.spec.ts +0 -0
  248. /package/src/utils/rules/{exactLength → isExactLength}/locales.ts +0 -0
  249. /package/src/utils/rules/{required → isRequired}/locales.ts +0 -0
  250. /package/src/utils/rules/{email → isValidEmail}/locales.ts +0 -0
@@ -0,0 +1,152 @@
1
+ import type { StoryObj } from '@storybook/vue3'
2
+ import { VTextField } from 'vuetify/components'
3
+ import { isMinLengthFn } from './index'
4
+
5
+ export default {
6
+ title: 'Guide du dev/Règles De Validation/isMinLength',
7
+ component: isMinLengthFn,
8
+ }
9
+
10
+ export const Default: StoryObj<unknown> = {
11
+ render: () => {
12
+ return {
13
+ components: { VTextField },
14
+ setup() {
15
+ const min5 = isMinLengthFn(5)
16
+ return { min5 }
17
+ },
18
+ template: `
19
+ <VTextField
20
+ :rules="[min5]"
21
+ label="Min 5 caractères"
22
+ variant="outlined"
23
+ />
24
+ `,
25
+ }
26
+ },
27
+ parameters: {
28
+ sourceCode: [
29
+ {
30
+ name: 'Script',
31
+ code: `
32
+ <script setup lang="ts">
33
+ import { VTextField } from 'vuetify/components'
34
+ import { isMinLengthFn } from '@cnamts/synapse'
35
+
36
+ const min5 = isMinLengthFn(5)
37
+ </script>
38
+ `,
39
+ },
40
+ {
41
+ name: 'Template',
42
+ code: `
43
+ <template>
44
+ <VTextField
45
+ :rules="[min5]"
46
+ label="Min 5 caractères"
47
+ variant="outlined"
48
+ />
49
+ </template>
50
+ `,
51
+ },
52
+ ],
53
+ },
54
+ }
55
+
56
+ export const ignoreSpaces: StoryObj<unknown> = {
57
+ render: () => {
58
+ return {
59
+ components: { VTextField },
60
+ setup() {
61
+ const min5 = isMinLengthFn(5, true)
62
+ return { min5 }
63
+ },
64
+ template: `
65
+ <VTextField
66
+ :rules="[min5]"
67
+ label="Min 5 caractères, ignore les espaces"
68
+ variant="outlined"
69
+ />
70
+ `,
71
+ }
72
+ },
73
+ parameters: {
74
+ sourceCode: [
75
+ {
76
+ name: 'Script',
77
+ code: `
78
+ <script setup lang="ts">
79
+ import { VTextField } from 'vuetify/components'
80
+ import { isMinLengthFn } from '@cnamts/synapse'
81
+
82
+ const min5 = isMinLengthFn(5, true)
83
+ </script>
84
+ `,
85
+ },
86
+ {
87
+ name: 'Template',
88
+ code: `
89
+ <template>
90
+ <VTextField
91
+ :rules="[min5]"
92
+ label="Min 5 caractères, ignore les espaces"
93
+ variant="outlined"
94
+ />
95
+ </template>
96
+ `,
97
+ },
98
+ ],
99
+ },
100
+ }
101
+
102
+ export const CustomMessage: StoryObj<unknown> = {
103
+ render: () => {
104
+ return {
105
+ components: { VTextField },
106
+ setup() {
107
+ const messages = {
108
+ default: min => `The text entered is too short, it must be ${min} characters or more`,
109
+ }
110
+ const min5 = isMinLengthFn(5, false, messages)
111
+ return { min5 }
112
+ },
113
+ template: `
114
+ <VTextField
115
+ :rules="[min5]"
116
+ label="Min 5 characters"
117
+ variant="outlined"
118
+ />
119
+ `,
120
+ }
121
+ },
122
+ parameters: {
123
+ sourceCode: [
124
+ {
125
+ name: 'Script',
126
+ code: `
127
+ <script setup lang="ts">
128
+ import { VTextField } from 'vuetify/components'
129
+ import { isMinLengthFn } from '@cnamts/synapse'
130
+
131
+ const messages = {
132
+ default: min => \`The text entered is too long, it must be \${min} characters or less\`,
133
+ }
134
+ const min5 = isMinLengthFn(5, false, messages)
135
+ </script>
136
+ `,
137
+ },
138
+ {
139
+ name: 'Template',
140
+ code: `
141
+ <template>
142
+ <VTextField
143
+ :rules="[min5]"
144
+ label="Min 5 characters"
145
+ variant="outlined"
146
+ />
147
+ </template>
148
+ `,
149
+ },
150
+ ],
151
+ },
152
+ }
@@ -0,0 +1,30 @@
1
+ import { ruleMessage } from '@/utils/ruleMessage'
2
+ import type {
3
+ ValidationRule,
4
+ ValidationResult,
5
+ ErrorMessages,
6
+ Value,
7
+ } from '../types'
8
+
9
+ import { defaultErrorMessages } from './locales'
10
+
11
+ /** Check that the value is not shorter than the specified length */
12
+ export function isMinLengthFn(
13
+ min: number,
14
+ ignoreSpaces = false,
15
+ errorMessages: ErrorMessages<number> = defaultErrorMessages,
16
+ ): ValidationRule {
17
+ return (value: Value): ValidationResult => {
18
+ if (!value) {
19
+ return true
20
+ }
21
+
22
+ if (ignoreSpaces) {
23
+ value = value.replace(/\s/g, '')
24
+ }
25
+
26
+ return (
27
+ value.length >= min || ruleMessage(errorMessages, 'default', [min])
28
+ )
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ import type { ErrorMessages } from '../types'
2
+
3
+ export const defaultErrorMessages: ErrorMessages<number> = {
4
+ default: (min: number) =>
5
+ `La longueur minimale du champ doit être de ${min} caractères.`,
6
+ }
@@ -0,0 +1,42 @@
1
+ import { isMinLengthFn } from '..'
2
+ import { describe, it, expect } from 'vitest'
3
+
4
+ describe('isMinLengthFn', () => {
5
+ it('returns an error when the value is shorter than minimum', () => {
6
+ const rule = isMinLengthFn(10)
7
+
8
+ expect(typeof rule('0')).toBe('string')
9
+ })
10
+
11
+ it('returns true when the value is longer than the minimum', () => {
12
+ const rule = isMinLengthFn(10)
13
+
14
+ expect(rule('012345678910')).toBe(true)
15
+ })
16
+
17
+ it('returns true when the value equals the maximum', () => {
18
+ const rule = isMinLengthFn(10)
19
+
20
+ expect(rule('0123456789')).toBe(true)
21
+ })
22
+
23
+ it('returns true when the value is longer than the maximum without counting spaces', () => {
24
+ const rule = isMinLengthFn(10, true)
25
+
26
+ expect(rule('0 1 2 3 4 5 6 7 8 9 10')).toBe(true)
27
+ })
28
+
29
+ it('returns true if the value is falsy', () => {
30
+ const rule = isMinLengthFn(10)
31
+
32
+ expect(rule('')).toBe(true)
33
+ })
34
+
35
+ it('works with custom error messages', () => {
36
+ const rule = isMinLengthFn(10, false, {
37
+ default: 'test',
38
+ })
39
+
40
+ expect(rule('0')).toBe('test')
41
+ })
42
+ })
@@ -0,0 +1,68 @@
1
+ import { Meta, Canvas, Source } from '@storybook/blocks';
2
+ import * as IsNotAfterDateStories from './IsNotAfterDate.stories';
3
+
4
+ <Meta of={IsNotAfterDateStories} />
5
+
6
+ # Règle de validation `isNotAfterDate`
7
+
8
+ La règle de validation `isNotAfterDate` permet de vérifier qu'une date n'est pas postérieure à une date de référence.
9
+
10
+ ## Usage
11
+
12
+ Pour utiliser cette règle de validation, vous devez importer la fonction d'ordre supérieur `isNotAfterDateFn` depuis le package `@cnamts/synapse`.
13
+
14
+ <Source dark code={`
15
+ import { isNotAfterDateFn } from '@cnamts/synapse';
16
+ `} />
17
+
18
+ Vous devez ensuite faire appel à cette fonction en lui passant en paramètre la date de référence.
19
+
20
+ <Source dark code={`
21
+ const notAfterToday = isNotAfterDateFn('01/01/2022');
22
+ `} />
23
+
24
+ Vous pouvez ensuite utiliser la fonction retournée comme règle d'un champs de formulaire.
25
+
26
+ <Source dark code={`
27
+ <script setup lang="ts">
28
+ import { isNotAfterDateFn } from '@cnamts/synapse';
29
+ import { VTextField } from 'vuetify/components';
30
+
31
+ const notAfter = isNotAfterDateFn('01/01/2022');
32
+
33
+ </script>
34
+
35
+ <template>
36
+ <VTextField
37
+ :rules="[notAfter]"
38
+ label="Date"
39
+ />
40
+ </template>
41
+ `} />
42
+
43
+ ## API
44
+
45
+ <Source dark code={`
46
+
47
+ isNotAfterDateFn(
48
+ date: string,
49
+ errorMessages?: {
50
+ default: (date: string) => string;
51
+ }
52
+ ): (value: string) => true | string;
53
+
54
+ `} />
55
+
56
+ ### Arguments
57
+
58
+ - `date` : chaîne de caractères représentant la date de référence. La date doit être au format `JJ/MM/AAAA`.
59
+ - `errorMessages` : objet optionnel permettant de personnaliser les messages d'erreur. Les clés disponibles sont :
60
+ - `default` : message d'erreur par défaut. Vous pouvez utiliser la variable `{{ date }}` pour afficher la date de référence.
61
+
62
+ ### Valeurs de retour
63
+
64
+ Retourne une fonction de validation qui vérifie si la date passée en paramètre n'est pas postérieure à la date de référence.
65
+
66
+ ## Exemples
67
+
68
+ <Canvas of={IsNotAfterDateStories.Default} />
@@ -0,0 +1,109 @@
1
+ import type { StoryObj } from '@storybook/vue3'
2
+ import { VTextField } from 'vuetify/components'
3
+ import { isNotAfterDateFn } from './index'
4
+ import { ref } from 'vue'
5
+
6
+ export default {
7
+ title: 'Guide du dev/Règles De Validation/isNotAfterDate',
8
+ component: isNotAfterDateFn,
9
+ }
10
+
11
+ export const Default: StoryObj<unknown> = {
12
+ render: () => {
13
+ return {
14
+ components: { VTextField },
15
+ setup() {
16
+ const date = isNotAfterDateFn('01/01/2022')
17
+ const model = ref('12/12/2023')
18
+
19
+ return { date, model }
20
+ },
21
+ template: `
22
+ <VTextField
23
+ v-model="model"
24
+ :rules="[date]"
25
+ label="Date"
26
+ variant="outlined"
27
+ validate-on="eager blur"
28
+ />
29
+ `,
30
+ }
31
+ },
32
+ parameters: {
33
+ sourceCode: [
34
+ {
35
+ name: 'Script',
36
+ code: `
37
+ <script setup lang="ts">
38
+ import { VTextField } from 'vuetify/components'
39
+ import { isNotAfterDateFn } from '@cnamts/synapse'
40
+
41
+ const date = isNotAfterDateFn('01/01/2022')
42
+ </script>
43
+ `,
44
+ },
45
+ {
46
+ name: 'Template',
47
+ code: `
48
+ <template>
49
+ <VTextField
50
+ :rules="[date]"
51
+ label="Date"
52
+ variant="outlined"
53
+ />
54
+ </template>
55
+ `,
56
+ },
57
+ ],
58
+ },
59
+ }
60
+
61
+ export const CustomMessage: StoryObj<unknown> = {
62
+ render: () => {
63
+ return {
64
+ components: { VTextField },
65
+ setup() {
66
+ const date = isNotAfterDateFn('01/01/2022', {
67
+ default: (date: string) => `The date must not be after ${date}`,
68
+ })
69
+ return { date }
70
+ },
71
+ template: `
72
+ <VTextField
73
+ :rules="[date]"
74
+ label="Date"
75
+ variant="outlined"
76
+ />
77
+ `,
78
+ }
79
+ },
80
+ parameters: {
81
+ sourceCode: [
82
+ {
83
+ name: 'Script',
84
+ code: `
85
+ <script setup lang="ts">
86
+ import { VTextField } from 'vuetify/components'
87
+ import { isNotAfterDateFn } from '@cnamts/synapse'
88
+
89
+ const date = isNotAfterDateFn('01/01/2022', {
90
+ default: (date: string) => \`The date must not be after \${date}\`,
91
+ })
92
+ </script>
93
+ `,
94
+ },
95
+ {
96
+ name: 'Template',
97
+ code: `
98
+ <template>
99
+ <VTextField
100
+ :rules="[date]"
101
+ label="Date"
102
+ variant="outlined"
103
+ />
104
+ </template>
105
+ `,
106
+ },
107
+ ],
108
+ },
109
+ }
@@ -0,0 +1,25 @@
1
+ import { formatDate } from '@/utils/formatDate'
2
+ import { parseDate } from '@/utils/parseDate'
3
+ import { ruleMessage } from '@/utils/ruleMessage'
4
+ import { isDateAfter } from '../../functions/validation/isDateAfter'
5
+ import type { ValidationResult, ValidationRule, Value } from '../types'
6
+ import { defaultErrorMessages } from './locales'
7
+
8
+ /** Check that the value is not after the specified date (DD/MM/YYYY format) */
9
+ export function isNotAfterDateFn(
10
+ date: string,
11
+ errorMessages = defaultErrorMessages,
12
+ ): ValidationRule {
13
+ return (value: Value): ValidationResult => {
14
+ if (!value) {
15
+ return true
16
+ }
17
+
18
+ const formattedValue = formatDate(parseDate(date))
19
+
20
+ return (
21
+ !isDateAfter(date, value)
22
+ || ruleMessage(errorMessages, 'default', [formattedValue])
23
+ )
24
+ }
25
+ }
@@ -0,0 +1,6 @@
1
+ import type { ErrorMessages } from '../types'
2
+
3
+ export const defaultErrorMessages: ErrorMessages = {
4
+ default: (date: string) =>
5
+ `La date doit être antérieure ou égale au ${date}.`,
6
+ }
@@ -0,0 +1,25 @@
1
+ import { isNotAfterDateFn } from '..'
2
+ import { describe, it, expect } from 'vitest'
3
+
4
+ import dayjs from 'dayjs'
5
+ import { formatDate } from '@/utils/formatDate'
6
+
7
+ describe('notAfterDate', () => {
8
+ const currentDate = formatDate(dayjs())
9
+ const pastDate = formatDate(dayjs().subtract(1, 'year'))
10
+ const futureDate = formatDate(dayjs().add(1, 'year'))
11
+
12
+ const rule = isNotAfterDateFn(currentDate)
13
+
14
+ it('returns true with a past date', () => {
15
+ expect(rule(pastDate)).toBe(true)
16
+ })
17
+
18
+ it('returns an error with a future date', () => {
19
+ expect(typeof rule(futureDate)).toBe('string')
20
+ })
21
+
22
+ it('returns true if the value is falsy', () => {
23
+ expect(rule('')).toBe(true)
24
+ })
25
+ })
@@ -0,0 +1,83 @@
1
+ import { Meta, Canvas, Source } from '@storybook/blocks';
2
+ import * as IsNotAfterTodayStories from './IsNotAfterToday.stories';
3
+
4
+ <Meta of={IsNotAfterTodayStories} />
5
+
6
+ # Règle de validation `isNotAfterToday`
7
+
8
+ La règle de validation `isNotAfterToday` permet de vérifier qu'une date n'est pas postérieure à la date du jour.
9
+
10
+ ## Usage
11
+
12
+ Pour utiliser cette règle de validation, vous devez importer la règle `isNotAfterToday` depuis le package `@cnamts/synapse`.
13
+
14
+ <Source dark code={`
15
+ import { isNotAfterToday } from '@cnamts/synapse';
16
+ `} />
17
+
18
+
19
+ Vous pouvez ensuite utiliser la fonction comme règle d'un champs de formulaire.
20
+
21
+ <Source dark code={`
22
+ <script setup lang="ts">
23
+ import { isNotAfterToday } from '@cnamts/synapse';
24
+ import { VTextField } from 'vuetify/components';
25
+
26
+ </script>
27
+
28
+ <template>
29
+ <VTextField
30
+ :rules="[isNotAfterToday]"
31
+ label="Date"
32
+ />
33
+ </template>
34
+ `} />
35
+
36
+ ## Customisation des messages d'erreur
37
+
38
+ Vous pouvez personnaliser les messages d'erreur en passant un objet `errorMessages` en paramètre de la fonction `isNotAfterTodayFn`.
39
+ Puis en utilisant la fonction retournée comme règle d'un champs de formulaire.
40
+
41
+ <Source dark code={`
42
+ <script setup lang="ts">
43
+ import { isNotAfterTodayFn } from '@cnamts/synapse';
44
+ import { VTextField } from 'vuetify/components';
45
+
46
+ const notAfterToday = isNotAfterTodayFn({
47
+ default: \`The date must not be after today\`,
48
+ });
49
+
50
+ </script>
51
+
52
+ <template>
53
+ <VTextField
54
+ :rules="[notAfterToday]"
55
+ label="Date"
56
+ />
57
+ </template>
58
+ `} />
59
+
60
+ ## API
61
+
62
+ <Source dark code={`
63
+
64
+ isNotAfterTodayFn(
65
+ errorMessages?: {
66
+ default: string;
67
+ }
68
+ ): (value: string) => true | string;
69
+
70
+ `} />
71
+
72
+ ### Arguments
73
+
74
+ - `errorMessages` : objet optionnel permettant de personnaliser les messages d'erreur. Les clés disponibles sont :
75
+ - `default` : message d'erreur par défaut.
76
+
77
+ ### Valeurs de retour
78
+
79
+ Retourne une fonction qui prend en paramètre une chaîne de caractères représentant une date et retourne `true` si la date n'est pas postérieure à la date du jour, sinon retourne un message d'erreur.
80
+
81
+ ## Exemples
82
+
83
+ <Canvas of={IsNotAfterTodayStories.Default} />
@@ -0,0 +1,110 @@
1
+ import type { StoryObj } from '@storybook/vue3'
2
+ import { VTextField } from 'vuetify/components'
3
+ import { isNotAfterToday, isNotAfterTodayFn } from './index'
4
+ import { ref } from 'vue'
5
+
6
+ export default {
7
+ title: 'Guide du dev/Règles De Validation/isNotAfterToday',
8
+ component: isNotAfterTodayFn,
9
+ }
10
+
11
+ export const Default: StoryObj<unknown> = {
12
+ render: () => {
13
+ return {
14
+ components: { VTextField },
15
+ setup() {
16
+ const model = ref('12/12/2050')
17
+
18
+ return { model, isNotAfterToday }
19
+ },
20
+ template: `
21
+ <VTextField
22
+ v-model="model"
23
+ :rules="[isNotAfterToday]"
24
+ label="Date"
25
+ variant="outlined"
26
+ validate-on="eager blur"
27
+ />
28
+ `,
29
+ }
30
+ },
31
+ parameters: {
32
+ sourceCode: [
33
+ {
34
+ name: 'Script',
35
+ code: `
36
+ <script setup lang="ts">
37
+ import { VTextField } from 'vuetify/components'
38
+ import { isNotAfterToday } from '@cnamts/synapse'
39
+ </script>
40
+ `,
41
+ },
42
+ {
43
+ name: 'Template',
44
+ code: `
45
+ <template>
46
+ <VTextField
47
+ :rules="[isNotAfterToday]"
48
+ label="Date"
49
+ variant="outlined"
50
+ />
51
+ </template>
52
+ `,
53
+ },
54
+ ],
55
+ },
56
+ }
57
+
58
+ export const CustomMessage: StoryObj<unknown> = {
59
+ render: () => {
60
+ return {
61
+ components: { VTextField },
62
+ setup() {
63
+ const messages = {
64
+ default: 'The date must not be after today.',
65
+ }
66
+ const dateRule = isNotAfterTodayFn(messages)
67
+
68
+ return { dateRule }
69
+ },
70
+ template: `
71
+ <VTextField
72
+ :rules="[dateRule]"
73
+ label="Date"
74
+ variant="outlined"
75
+ validate-on="eager blur"
76
+ />
77
+ `,
78
+ }
79
+ },
80
+ parameters: {
81
+ sourceCode: [
82
+ {
83
+ name: 'Script',
84
+ code: `
85
+ <script setup lang="ts">
86
+ import { VTextField } from 'vuetify/components'
87
+ import { isNotAfterTodayFn } from '@cnamts/synapse'
88
+
89
+ const messages = {
90
+ default: 'The date must not be after today.',
91
+ }
92
+ const dateRule = isNotAfterTodayFn(messages)
93
+ </script>
94
+ `,
95
+ },
96
+ {
97
+ name: 'Template',
98
+ code: `
99
+ <template>
100
+ <VTextField
101
+ :rules="[dateRule]"
102
+ label="Date"
103
+ variant="outlined"
104
+ />
105
+ </template>
106
+ `,
107
+ },
108
+ ],
109
+ },
110
+ }
@@ -0,0 +1,28 @@
1
+ import { formatDate } from '@/utils/formatDate'
2
+ import { ruleMessage } from '@/utils/ruleMessage'
3
+ import dayjs from 'dayjs'
4
+ import { isDateAfter } from '../../functions/validation/isDateAfter'
5
+ import type {
6
+ ErrorMessages,
7
+ ValidationResult,
8
+ ValidationRule,
9
+ Value,
10
+ } from '../types'
11
+ import { defaultErrorMessages } from './locales'
12
+
13
+ /** Check that the value is not after today (DD/MM/YYYY format) */
14
+ export function isNotAfterTodayFn(
15
+ errorMessages: ErrorMessages = defaultErrorMessages,
16
+ ): ValidationRule {
17
+ return (value: Value): ValidationResult => {
18
+ if (!value) {
19
+ return true
20
+ }
21
+
22
+ return (
23
+ !isDateAfter(formatDate(dayjs()), value) || ruleMessage(errorMessages, 'default')
24
+ )
25
+ }
26
+ }
27
+
28
+ export const isNotAfterToday = isNotAfterTodayFn()
@@ -0,0 +1,5 @@
1
+ import type { ErrorMessages } from '../types'
2
+
3
+ export const defaultErrorMessages: ErrorMessages = {
4
+ default: 'La date doit être antérieure ou égale à aujourd’hui.',
5
+ }