@cnamts/synapse 1.0.0 → 1.0.1

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 (395) hide show
  1. package/dist/DateFilter-BmRuzQ9Z.js +98 -0
  2. package/dist/NumberFilter-CnIPDHqx.js +121 -0
  3. package/dist/PeriodFilter-CZwZ8CnQ.js +112 -0
  4. package/dist/SelectFilter-Cj-GW2Cc.js +97 -0
  5. package/dist/TextFilter-DTxZHJwX.js +114 -0
  6. package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
  7. package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
  8. package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
  9. package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
  10. package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
  11. package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
  12. package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
  13. package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
  14. package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
  15. package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
  16. package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
  17. package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
  18. package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
  19. package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
  20. package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
  21. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4162 -0
  22. package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +142 -102
  23. package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +32 -26
  24. package/dist/components/DatePicker/composables/index.d.ts +15 -0
  25. package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
  26. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
  27. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
  28. package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
  29. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
  30. package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
  31. package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
  32. package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
  33. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +16 -0
  34. package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
  35. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +30 -0
  36. package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
  37. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
  38. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +9 -0
  39. package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
  40. package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
  41. package/dist/components/DatePicker/constants/messages.d.ts +29 -0
  42. package/dist/components/DatePicker/types.d.ts +13 -0
  43. package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
  44. package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
  45. package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
  46. package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
  47. package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
  48. package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
  49. package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
  50. package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
  51. package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
  52. package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
  53. package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
  54. package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
  55. package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
  56. package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
  57. package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
  58. package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
  59. package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
  60. package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
  61. package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
  62. package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
  63. package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
  64. package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
  65. package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
  66. package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
  67. package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
  68. package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
  69. package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
  70. package/dist/components/PeriodField/PeriodField.d.ts +171 -37
  71. package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
  72. package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
  73. package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
  74. package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
  75. package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
  76. package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
  77. package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
  78. package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
  79. package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
  80. package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
  81. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +647 -0
  82. package/dist/components/Tables/SyTable/SyTable.d.ts +666 -0
  83. package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
  84. package/dist/components/Tables/common/TableHeader.d.ts +33 -0
  85. package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
  86. package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
  87. package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
  88. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
  89. package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
  90. package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
  91. package/dist/components/Tables/common/formatters.d.ts +17 -0
  92. package/dist/components/Tables/common/locales.d.ts +7 -0
  93. package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
  94. package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -0
  95. package/dist/components/Tables/common/tableStorageUtils.d.ts +29 -0
  96. package/dist/components/Tables/common/tableUtils.d.ts +42 -0
  97. package/dist/components/Tables/common/types.d.ts +80 -0
  98. package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
  99. package/dist/components/Tables/index.d.ts +2 -0
  100. package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
  101. package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
  102. package/dist/components/index.d.ts +3 -1
  103. package/dist/design-system-v3.js +100 -11944
  104. package/dist/design-system-v3.umd.cjs +22 -4
  105. package/dist/designTokens/index.d.ts +3 -1
  106. package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
  107. package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
  108. package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
  109. package/dist/designTokens/utils/index.d.ts +2 -1
  110. package/dist/main-WDqeoGM-.js +14788 -0
  111. package/dist/style.css +1 -1
  112. package/dist/utils/rules/isRequired/index.d.ts +1 -1
  113. package/dist/vite-env.d.ts +12 -0
  114. package/package.json +3 -3
  115. package/src/assets/_spacers.scss +37 -1
  116. package/src/assets/_typography.scss +158 -0
  117. package/src/assets/settings.scss +7 -0
  118. package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
  119. package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
  120. package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
  121. package/src/components/ChipList/AccessibiliteItems.ts +1 -1
  122. package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
  123. package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
  124. package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
  125. package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
  126. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
  127. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
  128. package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
  129. package/src/components/Customs/SySelect/SySelect.vue +3 -9
  130. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +4 -2
  131. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
  132. package/src/components/DataList/AccessibiliteItems.ts +1 -1
  133. package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
  134. package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
  135. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
  136. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1097 -0
  137. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +497 -180
  138. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +941 -0
  139. package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
  140. package/src/components/DatePicker/{tests → DatePicker}/DatePicker.spec.ts +1 -1
  141. package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +115 -400
  142. package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +302 -84
  143. package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
  144. package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
  145. package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
  146. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +310 -0
  147. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
  148. package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +8 -7
  149. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +916 -0
  150. package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
  151. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +572 -0
  152. package/src/components/DatePicker/composables/index.ts +22 -0
  153. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
  154. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
  155. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
  156. package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
  157. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
  158. package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
  159. package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
  160. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
  161. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
  162. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
  163. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +278 -0
  164. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
  165. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +100 -0
  166. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
  167. package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
  168. package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
  169. package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
  170. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
  171. package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
  172. package/src/components/DatePicker/composables/useDateRangeInput.ts +375 -0
  173. package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
  174. package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
  175. package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
  176. package/src/components/DatePicker/composables/useDisplayedDateString.ts +58 -0
  177. package/src/components/DatePicker/composables/useIconState.ts +53 -0
  178. package/src/components/DatePicker/composables/useInputBlurHandler.ts +101 -0
  179. package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
  180. package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
  181. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +89 -0
  182. package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
  183. package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
  184. package/src/components/DatePicker/constants/messages.ts +50 -0
  185. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  186. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
  187. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
  188. package/src/components/DatePicker/types.ts +15 -0
  189. package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
  190. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
  191. package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
  192. package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
  193. package/src/components/FileList/AccessibiliteItems.ts +1 -1
  194. package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
  195. package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
  196. package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
  197. package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
  198. package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
  199. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
  200. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
  201. package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
  202. package/src/components/FooterBar/FooterBar.vue +2 -1
  203. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
  204. package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
  205. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
  206. package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
  207. package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
  208. package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
  209. package/src/components/Logo/Accessibilite.stories.ts +4 -0
  210. package/src/components/Logo/AccessibiliteItems.ts +1 -1
  211. package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
  212. package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
  213. package/src/components/NirField/AccessibiliteItems.ts +1 -1
  214. package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
  215. package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
  216. package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
  217. package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
  218. package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
  219. package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
  220. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
  221. package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
  222. package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
  223. package/src/components/PeriodField/PeriodField.vue +13 -1
  224. package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
  225. package/src/components/RangeField/AccessibiliteItems.ts +1 -1
  226. package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
  227. package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
  228. package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
  229. package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
  230. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
  231. package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
  232. package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
  233. package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
  234. package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
  235. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +83 -0
  236. package/src/components/Tables/SyServerTable/SyServerTable.mdx +160 -0
  237. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +2887 -0
  238. package/src/components/Tables/SyServerTable/SyServerTable.vue +302 -0
  239. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +450 -0
  240. package/src/components/Tables/SyServerTable/tests/__snapshots__/SyServerTable.spec.ts.snap +521 -0
  241. package/src/components/Tables/SyTable/FilterRules.stories.ts +235 -0
  242. package/src/components/Tables/SyTable/SyTable.mdx +129 -0
  243. package/src/components/Tables/SyTable/SyTable.stories.ts +1966 -0
  244. package/src/components/Tables/SyTable/SyTable.vue +317 -0
  245. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +345 -0
  246. package/src/components/Tables/SyTable/tests/__snapshots__/SyTable.spec.ts.snap +521 -0
  247. package/src/components/Tables/common/SyTableFilter.vue +342 -0
  248. package/src/components/Tables/common/TableHeader.vue +221 -0
  249. package/src/components/Tables/common/constants/StateEnum.ts +6 -0
  250. package/src/components/Tables/common/filters/DateFilter.vue +140 -0
  251. package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
  252. package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
  253. package/src/components/Tables/common/filters/SelectFilter.vue +126 -0
  254. package/src/components/Tables/common/filters/TextFilter.vue +191 -0
  255. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
  256. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
  257. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
  258. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
  259. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
  260. package/src/components/Tables/common/formatters.ts +72 -0
  261. package/src/components/Tables/common/locales.ts +7 -0
  262. package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
  263. package/src/components/Tables/common/tableFilterUtils.ts +327 -0
  264. package/src/components/Tables/common/tableStorageUtils.ts +102 -0
  265. package/src/components/Tables/common/tableStyles.scss +54 -0
  266. package/src/components/Tables/common/tableUtils.ts +115 -0
  267. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
  268. package/src/components/Tables/common/tests/resize.spec.ts +161 -0
  269. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +106 -0
  270. package/src/components/Tables/common/tests/tableUtils.spec.ts +272 -0
  271. package/src/components/Tables/common/types.ts +81 -0
  272. package/src/components/Tables/common/useTableFilter.ts +19 -0
  273. package/src/components/Tables/index.ts +3 -0
  274. package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
  275. package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
  276. package/src/components/index.ts +3 -1
  277. package/src/composables/date/useDateFormatDayjs.ts +8 -3
  278. package/src/composables/date/useDateInitializationDayjs.ts +28 -36
  279. package/src/composables/rules/useFieldValidation.ts +1 -2
  280. package/src/designTokens/index.ts +4 -0
  281. package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
  282. package/src/designTokens/tokens/pa/paFonts.ts +140 -0
  283. package/src/designTokens/utils/createFontVariables.ts +143 -0
  284. package/src/designTokens/utils/index.ts +2 -1
  285. package/src/stories/Demarrer/Accueil.stories.ts +12 -3
  286. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
  287. package/src/utils/rules/isRequired/index.ts +2 -1
  288. package/src/vite-env.d.ts +12 -0
  289. package/src/vuetifyConfig.ts +10 -3
  290. package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  291. package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
  292. package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
  293. package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  294. package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
  295. package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  296. package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  297. package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  298. package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  299. package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
  300. package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
  301. package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
  302. package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  303. package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
  304. package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  305. package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  306. package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  307. package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
  308. package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
  309. package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
  310. package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
  311. package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  312. package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  313. package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  314. package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  315. package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  316. package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
  317. package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  318. package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  319. package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
  320. package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
  321. package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
  322. package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
  323. package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  324. package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  325. package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
  326. package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
  327. package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
  328. package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
  329. package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
  330. package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
  331. package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  332. package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
  333. package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
  334. package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
  335. package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  336. package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
  337. package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
  338. package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  339. package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
  340. package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  341. package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
  342. package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
  343. package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
  344. package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
  345. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
  346. package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
  347. package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
  348. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
  349. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
  350. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
  351. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
  352. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
  353. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
  354. package/src/components/DatePicker/DatePicker.mdx +0 -222
  355. package/src/components/DatePicker/DateTextInput.vue +0 -504
  356. package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
  357. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
  358. package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
  359. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
  360. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
  361. package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
  362. package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
  363. package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
  364. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
  365. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
  366. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
  367. package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
  368. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
  369. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
  370. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
  371. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  372. package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
  373. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
  374. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
  375. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
  376. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
  377. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
  378. package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
  379. package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
  380. package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
  381. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
  382. package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
  383. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
  384. package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
  385. package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
  386. package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
  387. package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
  388. package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
  389. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
  390. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
  391. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
  392. package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  393. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
  394. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
  395. /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
@@ -0,0 +1,165 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { ref } from 'vue'
3
+ import { useDateFormatValidation } from '../useDateFormatValidation'
4
+
5
+ describe('useDateFormatValidation', () => {
6
+ const hasInteracted = ref(false)
7
+
8
+ beforeEach(() => {
9
+ hasInteracted.value = false
10
+ })
11
+
12
+ describe('validateDateFormat', () => {
13
+ it('devrait retourner isValid=true pour une date valide', () => {
14
+ const { validateDateFormat } = useDateFormatValidation({
15
+ format: 'DD/MM/YYYY',
16
+ hasInteracted,
17
+ })
18
+
19
+ const result = validateDateFormat('25/12/2023')
20
+ expect(result.isValid).toBe(true)
21
+ expect(result.message).toBe('')
22
+ })
23
+
24
+ it('devrait retourner isValid=false pour une date invalide', () => {
25
+ const { validateDateFormat } = useDateFormatValidation({
26
+ format: 'DD/MM/YYYY',
27
+ hasInteracted,
28
+ })
29
+
30
+ const result = validateDateFormat('32/12/2023')
31
+ expect(result.isValid).toBe(false)
32
+ expect(result.message).toBe('Format de date invalide (DD/MM/YYYY)')
33
+ })
34
+
35
+ it('devrait retourner isValid=true pour une date vide si non requis', () => {
36
+ const { validateDateFormat } = useDateFormatValidation({
37
+ format: 'DD/MM/YYYY',
38
+ required: false,
39
+ hasInteracted,
40
+ })
41
+
42
+ const result = validateDateFormat('')
43
+ expect(result.isValid).toBe(true)
44
+ expect(result.message).toBe('')
45
+ })
46
+
47
+ it('devrait retourner isValid=false pour une date vide si requis et utilisateur a interagi', () => {
48
+ hasInteracted.value = true
49
+
50
+ const { validateDateFormat } = useDateFormatValidation({
51
+ format: 'DD/MM/YYYY',
52
+ required: true,
53
+ hasInteracted,
54
+ })
55
+
56
+ const result = validateDateFormat('')
57
+ expect(result.isValid).toBe(false)
58
+ expect(result.message).toBe('La date est requise.')
59
+ })
60
+
61
+ it('devrait retourner isValid=true si disableErrorHandling=true même pour une date invalide', () => {
62
+ const { validateDateFormat } = useDateFormatValidation({
63
+ format: 'DD/MM/YYYY',
64
+ disableErrorHandling: true,
65
+ hasInteracted,
66
+ })
67
+
68
+ const result = validateDateFormat('32/12/2023')
69
+ expect(result.isValid).toBe(true)
70
+ expect(result.message).toBe('')
71
+ })
72
+
73
+ it('devrait retourner isValid=false pour une date avec des caractères non autorisés', () => {
74
+ const { validateDateFormat } = useDateFormatValidation({
75
+ format: 'DD/MM/YYYY',
76
+ hasInteracted,
77
+ })
78
+
79
+ const result = validateDateFormat('25/12/2023a')
80
+ expect(result.isValid).toBe(false)
81
+ expect(result.message).toBe('Format de date invalide (DD/MM/YYYY)')
82
+ })
83
+
84
+ it('devrait valider une date au format alternatif si dateFormatReturn est spécifié', () => {
85
+ const { validateDateFormat } = useDateFormatValidation({
86
+ format: 'DD/MM/YYYY',
87
+ dateFormatReturn: 'YYYY-MM-DD',
88
+ hasInteracted,
89
+ })
90
+
91
+ // Format principal
92
+ let result = validateDateFormat('25/12/2023')
93
+ expect(result.isValid).toBe(true)
94
+
95
+ // Format alternatif
96
+ result = validateDateFormat('2023-12-25')
97
+ expect(result.isValid).toBe(true)
98
+ })
99
+ })
100
+
101
+ describe('isDateComplete', () => {
102
+ it('devrait retourner true pour une date complète et valide', () => {
103
+ const { isDateComplete } = useDateFormatValidation({
104
+ format: 'DD/MM/YYYY',
105
+ hasInteracted,
106
+ })
107
+
108
+ expect(isDateComplete.value('25/12/2023')).toBe(true)
109
+ })
110
+
111
+ it('devrait retourner false pour une date incomplète', () => {
112
+ const { isDateComplete } = useDateFormatValidation({
113
+ format: 'DD/MM/YYYY',
114
+ hasInteracted,
115
+ })
116
+
117
+ expect(isDateComplete.value('25/12')).toBe(false)
118
+ })
119
+
120
+ it('devrait retourner false pour une date vide', () => {
121
+ const { isDateComplete } = useDateFormatValidation({
122
+ format: 'DD/MM/YYYY',
123
+ hasInteracted,
124
+ })
125
+
126
+ expect(isDateComplete.value('')).toBe(false)
127
+ })
128
+
129
+ it('devrait retourner true pour une date avec le bon nombre de chiffres, même si elle est invalide', () => {
130
+ const { isDateComplete } = useDateFormatValidation({
131
+ format: 'DD/MM/YYYY',
132
+ hasInteracted,
133
+ })
134
+
135
+ // 32/12/2023 a le bon nombre de chiffres, même si c'est une date invalide
136
+ expect(isDateComplete.value('32/12/2023')).toBe(true)
137
+ })
138
+
139
+ it('devrait vérifier uniquement le nombre de chiffres pour différents formats de date', () => {
140
+ const { isDateComplete: isDateCompleteUS } = useDateFormatValidation({
141
+ format: 'MM/DD/YYYY',
142
+ hasInteracted,
143
+ })
144
+
145
+ // 12/25/2023 a le bon nombre de chiffres pour le format MM/DD/YYYY
146
+ expect(isDateCompleteUS.value('12/25/2023')).toBe(true)
147
+ // 25/12/2023 a aussi le bon nombre de chiffres, même si ce n'est pas dans le bon ordre
148
+ expect(isDateCompleteUS.value('25/12/2023')).toBe(true)
149
+ // 1/2/2023 n'a pas assez de chiffres
150
+ expect(isDateCompleteUS.value('1/2/2023')).toBe(false)
151
+
152
+ const { isDateComplete: isDateCompleteISO } = useDateFormatValidation({
153
+ format: 'YYYY-MM-DD',
154
+ hasInteracted,
155
+ })
156
+
157
+ // 2023-12-25 a le bon nombre de chiffres pour le format YYYY-MM-DD
158
+ expect(isDateCompleteISO.value('2023-12-25')).toBe(true)
159
+ // 25-12-2023 a aussi le bon nombre de chiffres, même si ce n'est pas dans le bon ordre
160
+ expect(isDateCompleteISO.value('25-12-2023')).toBe(true)
161
+ // 23-1-25 n'a pas assez de chiffres
162
+ expect(isDateCompleteISO.value('23-1-25')).toBe(false)
163
+ })
164
+ })
165
+ })
@@ -0,0 +1,359 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest'
2
+ import { useDateInputEditing } from '../useDateInputEditing'
3
+
4
+ describe('useDateInputEditing', () => {
5
+ // Mock pour la fonction updateDisplayValue
6
+ const updateDisplayValue = vi.fn()
7
+
8
+ // Réinitialiser les mocks avant chaque test
9
+ beforeEach(() => {
10
+ vi.resetAllMocks()
11
+ })
12
+
13
+ describe('formatDateInput', () => {
14
+ it('devrait formater correctement une entrée de date avec le format DD/MM/YYYY', () => {
15
+ const { formatDateInput } = useDateInputEditing({
16
+ format: 'DD/MM/YYYY',
17
+ updateDisplayValue,
18
+ })
19
+
20
+ // Test avec différentes entrées
21
+ let result = formatDateInput('25122023')
22
+ expect(result.formatted).toBe('25/12/2023')
23
+ // La position du curseur dépend de l'implémentation
24
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
25
+
26
+ // Test avec une entrée partielle
27
+ result = formatDateInput('2512')
28
+ expect(result.formatted).toBe('25/12/____')
29
+ // La position du curseur dépend de l'implémentation
30
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
31
+
32
+ // Test avec une entrée vide
33
+ result = formatDateInput('')
34
+ expect(result.formatted).toBe('__/__/____')
35
+ expect(result.cursorPos).toBe(0)
36
+ })
37
+
38
+ it('devrait formater correctement une entrée de date avec le format MM/DD/YYYY', () => {
39
+ const { formatDateInput } = useDateInputEditing({
40
+ format: 'MM/DD/YYYY',
41
+ updateDisplayValue,
42
+ })
43
+
44
+ const result = formatDateInput('12252023')
45
+ expect(result.formatted).toBe('12/25/2023')
46
+ // La position du curseur dépend de l'implémentation
47
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
48
+ })
49
+
50
+ it('devrait formater correctement une entrée de date avec le format YYYY-MM-DD', () => {
51
+ const { formatDateInput } = useDateInputEditing({
52
+ format: 'YYYY-MM-DD',
53
+ updateDisplayValue,
54
+ })
55
+
56
+ const result = formatDateInput('20231225')
57
+ expect(result.formatted).toBe('2023-12-25')
58
+ // La position du curseur dépend de l'implémentation
59
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
60
+ })
61
+
62
+ it('devrait limiter le nombre de chiffres au format attendu', () => {
63
+ const { formatDateInput } = useDateInputEditing({
64
+ format: 'DD/MM/YYYY',
65
+ updateDisplayValue,
66
+ })
67
+
68
+ // Entrée avec trop de chiffres
69
+ const result = formatDateInput('251220232024')
70
+ expect(result.formatted).toBe('25/12/2023')
71
+ // La position du curseur dépend de l'implémentation
72
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
73
+ })
74
+
75
+ it('devrait calculer correctement la position du curseur après formatage', () => {
76
+ const { formatDateInput } = useDateInputEditing({
77
+ format: 'DD/MM/YYYY',
78
+ updateDisplayValue,
79
+ })
80
+
81
+ // Test avec position du curseur spécifiée
82
+ let result = formatDateInput('25122023', 4)
83
+ expect(result.formatted).toBe('25/12/2023')
84
+ // La position du curseur dépend de l'implémentation
85
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
86
+
87
+ // Test avec position du curseur au début
88
+ result = formatDateInput('25122023', 0)
89
+ expect(result.formatted).toBe('25/12/2023')
90
+ expect(result.cursorPos).toBe(0)
91
+
92
+ // Test avec position du curseur à la fin
93
+ result = formatDateInput('25122023', 8)
94
+ expect(result.formatted).toBe('25/12/2023')
95
+ // La position du curseur dépend de l'implémentation
96
+ expect(result.cursorPos).toBeGreaterThanOrEqual(0)
97
+ })
98
+
99
+ it('devrait détecter et utiliser différents séparateurs selon le format', () => {
100
+ // Format avec tirets
101
+ let { formatDateInput } = useDateInputEditing({
102
+ format: 'DD-MM-YYYY',
103
+ updateDisplayValue,
104
+ })
105
+
106
+ let result = formatDateInput('25122023')
107
+ expect(result.formatted).toBe('25-12-2023')
108
+
109
+ // Format avec points
110
+ formatDateInput = useDateInputEditing({
111
+ format: 'DD.MM.YYYY',
112
+ updateDisplayValue,
113
+ }).formatDateInput
114
+
115
+ result = formatDateInput('25122023')
116
+ expect(result.formatted).toBe('25.12.2023')
117
+ })
118
+ })
119
+
120
+ describe('handleKeydown', () => {
121
+ it('devrait gérer correctement la touche Backspace sur un séparateur', () => {
122
+ const { handleKeydown } = useDateInputEditing({
123
+ format: 'DD/MM/YYYY',
124
+ updateDisplayValue,
125
+ })
126
+
127
+ // Créer un mock pour l'événement keydown
128
+ const mockEvent = {
129
+ key: 'Backspace',
130
+ target: {
131
+ value: '25/1_/____',
132
+ selectionStart: 3,
133
+ selectionEnd: 3,
134
+ setSelectionRange: vi.fn(),
135
+ },
136
+ preventDefault: vi.fn(),
137
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
138
+
139
+ // Appeler la fonction
140
+ handleKeydown(mockEvent)
141
+
142
+ // Vérifier que preventDefault a été appelé
143
+ expect(mockEvent.preventDefault).toHaveBeenCalled()
144
+
145
+ // Vérifier que updateDisplayValue a été appelé
146
+ expect(updateDisplayValue).toHaveBeenCalled()
147
+
148
+ // Nous ne vérifions pas la valeur exacte car elle peut dépendre de l'implémentation
149
+
150
+ // Vérifier que setSelectionRange a été appelé
151
+ setTimeout(() => {
152
+ expect(mockEvent.target.setSelectionRange).toHaveBeenCalledWith(1, 1)
153
+ }, 0)
154
+ })
155
+
156
+ it('ne devrait pas interférer avec Backspace sur un chiffre', () => {
157
+ const { handleKeydown } = useDateInputEditing({
158
+ format: 'DD/MM/YYYY',
159
+ updateDisplayValue,
160
+ })
161
+
162
+ // Créer un mock pour l'événement keydown
163
+ const mockEvent = {
164
+ key: 'Backspace',
165
+ target: {
166
+ value: '25/1_/____',
167
+ selectionStart: 2,
168
+ selectionEnd: 2,
169
+ setSelectionRange: vi.fn(),
170
+ },
171
+ preventDefault: vi.fn(),
172
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
173
+
174
+ // Appeler la fonction
175
+ handleKeydown(mockEvent)
176
+
177
+ // Vérifier que preventDefault n'a pas été appelé
178
+ expect(mockEvent.preventDefault).not.toHaveBeenCalled()
179
+
180
+ // Vérifier que updateDisplayValue n'a pas été appelé
181
+ expect(updateDisplayValue).not.toHaveBeenCalled()
182
+ })
183
+
184
+ it('devrait gérer correctement la touche ArrowLeft sur un séparateur', () => {
185
+ const { handleKeydown } = useDateInputEditing({
186
+ format: 'DD/MM/YYYY',
187
+ updateDisplayValue,
188
+ })
189
+
190
+ // Créer un mock pour l'événement keydown
191
+ const mockEvent = {
192
+ key: 'ArrowLeft',
193
+ target: {
194
+ value: '25/12/____',
195
+ selectionStart: 3,
196
+ selectionEnd: 3,
197
+ setSelectionRange: vi.fn(),
198
+ },
199
+ preventDefault: vi.fn(),
200
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
201
+
202
+ // Appeler la fonction
203
+ handleKeydown(mockEvent)
204
+
205
+ // Vérifier que preventDefault a été appelé
206
+ expect(mockEvent.preventDefault).toHaveBeenCalled()
207
+
208
+ // Vérifier que setSelectionRange a été appelé avec la bonne position
209
+ expect(mockEvent.target.setSelectionRange).toHaveBeenCalledWith(1, 1)
210
+ })
211
+
212
+ it('devrait gérer correctement la touche ArrowRight sur un séparateur', () => {
213
+ const { handleKeydown } = useDateInputEditing({
214
+ format: 'DD/MM/YYYY',
215
+ updateDisplayValue,
216
+ })
217
+
218
+ // Créer un mock pour l'événement keydown
219
+ const mockEvent = {
220
+ key: 'ArrowRight',
221
+ target: {
222
+ value: '25/12/____',
223
+ selectionStart: 2,
224
+ selectionEnd: 2,
225
+ setSelectionRange: vi.fn(),
226
+ },
227
+ preventDefault: vi.fn(),
228
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
229
+
230
+ // Appeler la fonction
231
+ handleKeydown(mockEvent)
232
+
233
+ // Vérifier que preventDefault a été appelé
234
+ expect(mockEvent.preventDefault).toHaveBeenCalled()
235
+
236
+ // Vérifier que setSelectionRange a été appelé avec la bonne position
237
+ expect(mockEvent.target.setSelectionRange).toHaveBeenCalledWith(4, 4)
238
+ })
239
+ })
240
+
241
+ describe('handlePaste', () => {
242
+ it('devrait formater correctement le texte collé', () => {
243
+ const { handlePaste } = useDateInputEditing({
244
+ format: 'DD/MM/YYYY',
245
+ updateDisplayValue,
246
+ })
247
+
248
+ // Créer un mock pour l'événement paste
249
+ const mockEvent = {
250
+ clipboardData: {
251
+ getData: vi.fn().mockReturnValue('25122023'),
252
+ },
253
+ target: {
254
+ value: '__/__/____',
255
+ selectionStart: 0,
256
+ selectionEnd: 0,
257
+ setSelectionRange: vi.fn(),
258
+ },
259
+ preventDefault: vi.fn(),
260
+ } as unknown as ClipboardEvent
261
+
262
+ // Appeler la fonction
263
+ handlePaste(mockEvent)
264
+
265
+ // Vérifier que preventDefault a été appelé
266
+ expect(mockEvent.preventDefault).toHaveBeenCalled()
267
+
268
+ // Vérifier que getData a été appelé avec 'text'
269
+ expect(mockEvent.clipboardData?.getData).toHaveBeenCalledWith('text')
270
+
271
+ // Vérifier que updateDisplayValue a été appelé avec la bonne valeur formatée
272
+ expect(updateDisplayValue).toHaveBeenCalledWith('25/12/2023')
273
+
274
+ // Vérifier que setSelectionRange a été appelé
275
+ setTimeout(() => {
276
+ expect((mockEvent.target as HTMLInputElement).setSelectionRange).toHaveBeenCalledWith(10, 10)
277
+ }, 0)
278
+ })
279
+
280
+ it('ne devrait rien faire si clipboardData est null', () => {
281
+ const { handlePaste } = useDateInputEditing({
282
+ format: 'DD/MM/YYYY',
283
+ updateDisplayValue,
284
+ })
285
+
286
+ // Créer un mock pour l'événement paste sans clipboardData
287
+ const mockEvent = {
288
+ clipboardData: null,
289
+ preventDefault: vi.fn(),
290
+ } as unknown as ClipboardEvent
291
+
292
+ // Appeler la fonction
293
+ handlePaste(mockEvent)
294
+
295
+ // Vérifier que preventDefault n'a pas été appelé
296
+ expect(mockEvent.preventDefault).not.toHaveBeenCalled()
297
+
298
+ // Vérifier que updateDisplayValue n'a pas été appelé
299
+ expect(updateDisplayValue).not.toHaveBeenCalled()
300
+ })
301
+
302
+ it('ne devrait rien faire si le texte collé est vide', () => {
303
+ const { handlePaste } = useDateInputEditing({
304
+ format: 'DD/MM/YYYY',
305
+ updateDisplayValue,
306
+ })
307
+
308
+ // Créer un mock pour l'événement paste avec un texte vide
309
+ const mockEvent = {
310
+ clipboardData: {
311
+ getData: vi.fn().mockReturnValue(''),
312
+ },
313
+ preventDefault: vi.fn(),
314
+ } as unknown as ClipboardEvent
315
+
316
+ // Appeler la fonction
317
+ handlePaste(mockEvent)
318
+
319
+ // Vérifier que getData a été appelé avec 'text'
320
+ expect(mockEvent.clipboardData?.getData).toHaveBeenCalledWith('text')
321
+
322
+ // Vérifier que preventDefault n'a pas été appelé
323
+ expect(mockEvent.preventDefault).not.toHaveBeenCalled()
324
+
325
+ // Vérifier que updateDisplayValue n'a pas été appelé
326
+ expect(updateDisplayValue).not.toHaveBeenCalled()
327
+ })
328
+
329
+ it('devrait gérer le collage au milieu d\'une date existante', () => {
330
+ const { handlePaste } = useDateInputEditing({
331
+ format: 'DD/MM/YYYY',
332
+ updateDisplayValue,
333
+ })
334
+
335
+ // Créer un mock pour l'événement paste
336
+ const mockEvent = {
337
+ clipboardData: {
338
+ getData: vi.fn().mockReturnValue('12'),
339
+ },
340
+ target: {
341
+ value: '25/__/____',
342
+ selectionStart: 3,
343
+ selectionEnd: 3,
344
+ setSelectionRange: vi.fn(),
345
+ },
346
+ preventDefault: vi.fn(),
347
+ } as unknown as ClipboardEvent
348
+
349
+ // Appeler la fonction
350
+ handlePaste(mockEvent)
351
+
352
+ // Vérifier que preventDefault a été appelé
353
+ expect(mockEvent.preventDefault).toHaveBeenCalled()
354
+
355
+ // Vérifier que updateDisplayValue a été appelé
356
+ expect(updateDisplayValue).toHaveBeenCalled()
357
+ })
358
+ })
359
+ })
@@ -0,0 +1,160 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest'
2
+ import { useDatePickerViewMode } from '../useDatePickerViewMode'
3
+
4
+ // Mock pour watch
5
+ vi.mock('vue', async () => {
6
+ const actual = await vi.importActual('vue')
7
+ return {
8
+ ...actual,
9
+ watch: vi.fn((getter, callback) => {
10
+ // Stocker le callback pour pouvoir le déclencher manuellement dans les tests
11
+ watchCallback = callback
12
+ }),
13
+ }
14
+ })
15
+
16
+ // Variable pour stocker le callback de watch
17
+ let watchCallback: ((newValue: boolean) => void) | null = null
18
+
19
+ describe('useDatePickerViewMode', () => {
20
+ // Mocks et setup
21
+ let isBirthDate = false
22
+ const mockIsBirthDateGetter = vi.fn(() => isBirthDate)
23
+
24
+ beforeEach(() => {
25
+ // Réinitialiser les mocks avant chaque test
26
+ mockIsBirthDateGetter.mockClear()
27
+ isBirthDate = false
28
+ watchCallback = null
29
+ })
30
+
31
+ it('devrait initialiser currentViewMode à "month" si isBirthDate est false', () => {
32
+ const { currentViewMode } = useDatePickerViewMode(mockIsBirthDateGetter)
33
+
34
+ expect(currentViewMode.value).toBe('month')
35
+ expect(mockIsBirthDateGetter).toHaveBeenCalled()
36
+ })
37
+
38
+ it('devrait initialiser currentViewMode à "year" si isBirthDate est true', () => {
39
+ isBirthDate = true
40
+
41
+ const { currentViewMode } = useDatePickerViewMode(mockIsBirthDateGetter)
42
+
43
+ expect(currentViewMode.value).toBe('year')
44
+ expect(mockIsBirthDateGetter).toHaveBeenCalled()
45
+ })
46
+
47
+ it('devrait mettre à jour currentViewMode quand isBirthDate change', () => {
48
+ const { currentViewMode } = useDatePickerViewMode(mockIsBirthDateGetter)
49
+
50
+ // Initialement, currentViewMode devrait être 'month'
51
+ expect(currentViewMode.value).toBe('month')
52
+
53
+ // Simuler un changement de isBirthDate
54
+ if (watchCallback) {
55
+ watchCallback(true)
56
+ }
57
+
58
+ // Après le changement, currentViewMode devrait être 'year'
59
+ expect(currentViewMode.value).toBe('year')
60
+ })
61
+
62
+ describe('handleViewModeUpdate', () => {
63
+ it('devrait mettre à jour currentViewMode avec la nouvelle valeur', () => {
64
+ const { currentViewMode, handleViewModeUpdate } = useDatePickerViewMode(mockIsBirthDateGetter)
65
+
66
+ // Initialement, currentViewMode devrait être 'month'
67
+ expect(currentViewMode.value).toBe('month')
68
+
69
+ // Mettre à jour le mode d'affichage
70
+ handleViewModeUpdate('year')
71
+
72
+ // Après la mise à jour, currentViewMode devrait être 'year'
73
+ expect(currentViewMode.value).toBe('year')
74
+ })
75
+ })
76
+
77
+ describe('handleYearUpdate', () => {
78
+ it('ne devrait pas modifier currentViewMode si isBirthDate est false', () => {
79
+ const { currentViewMode, handleViewModeUpdate, handleYearUpdate } = useDatePickerViewMode(mockIsBirthDateGetter)
80
+
81
+ // Mettre à jour le mode d'affichage à 'year'
82
+ handleViewModeUpdate('year')
83
+
84
+ // Appeler handleYearUpdate
85
+ handleYearUpdate()
86
+
87
+ // currentViewMode ne devrait pas changer
88
+ expect(currentViewMode.value).toBe('year')
89
+ })
90
+
91
+ it('devrait passer à "months" si isBirthDate est true', () => {
92
+ isBirthDate = true
93
+
94
+ const { currentViewMode, handleYearUpdate } = useDatePickerViewMode(mockIsBirthDateGetter)
95
+
96
+ // Appeler handleYearUpdate
97
+ handleYearUpdate()
98
+
99
+ // currentViewMode devrait passer à 'months'
100
+ expect(currentViewMode.value).toBe('months')
101
+ })
102
+ })
103
+
104
+ describe('handleMonthUpdate', () => {
105
+ it('ne devrait pas modifier currentViewMode si isBirthDate est false', () => {
106
+ const { currentViewMode, handleViewModeUpdate, handleMonthUpdate } = useDatePickerViewMode(mockIsBirthDateGetter)
107
+
108
+ // Mettre à jour le mode d'affichage à 'months'
109
+ handleViewModeUpdate('months')
110
+
111
+ // Appeler handleMonthUpdate
112
+ handleMonthUpdate()
113
+
114
+ // currentViewMode ne devrait pas changer
115
+ expect(currentViewMode.value).toBe('months')
116
+ })
117
+
118
+ it('devrait passer à undefined si isBirthDate est true', () => {
119
+ isBirthDate = true
120
+
121
+ const { currentViewMode, handleMonthUpdate } = useDatePickerViewMode(mockIsBirthDateGetter)
122
+
123
+ // Appeler handleMonthUpdate
124
+ handleMonthUpdate()
125
+
126
+ // currentViewMode devrait passer à undefined
127
+ expect(currentViewMode.value).toBeUndefined()
128
+ })
129
+ })
130
+
131
+ describe('resetViewMode', () => {
132
+ it('devrait réinitialiser currentViewMode à "month" si isBirthDate est false', () => {
133
+ const { currentViewMode, handleViewModeUpdate, resetViewMode } = useDatePickerViewMode(mockIsBirthDateGetter)
134
+
135
+ // Mettre à jour le mode d'affichage à 'year'
136
+ handleViewModeUpdate('year')
137
+
138
+ // Réinitialiser le mode d'affichage
139
+ resetViewMode()
140
+
141
+ // currentViewMode devrait être réinitialisé à 'month'
142
+ expect(currentViewMode.value).toBe('month')
143
+ })
144
+
145
+ it('devrait réinitialiser currentViewMode à "year" si isBirthDate est true', () => {
146
+ isBirthDate = true
147
+
148
+ const { currentViewMode, handleViewModeUpdate, resetViewMode } = useDatePickerViewMode(mockIsBirthDateGetter)
149
+
150
+ // Mettre à jour le mode d'affichage à 'months'
151
+ handleViewModeUpdate('months')
152
+
153
+ // Réinitialiser le mode d'affichage
154
+ resetViewMode()
155
+
156
+ // currentViewMode devrait être réinitialisé à 'year'
157
+ expect(currentViewMode.value).toBe('year')
158
+ })
159
+ })
160
+ })