@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,121 @@
1
+ import { ref } from 'vue'
2
+ import type { Ref } from 'vue'
3
+
4
+ /**
5
+ * Composable pour gérer la sélection de dates dans les composants DatePicker
6
+ * Gère les plages de dates et la génération des dates intermédiaires
7
+ */
8
+ export function useDateSelection(
9
+ parseDate: (dateStr: string, format: string) => Date | null,
10
+ selectedDates: Ref<Date | (Date | null)[] | null>,
11
+ format: string,
12
+ displayRange: boolean,
13
+ ) {
14
+ // Stockage des dates de début et de fin pour les plages
15
+ const rangeBoundaryDates = ref<[Date | null, Date | null] | null>(null)
16
+
17
+ /**
18
+ * Génère toutes les dates entre deux dates (incluses)
19
+ */
20
+ const generateDateRange = (start: Date, end: Date): Date[] => {
21
+ const dateArray: Date[] = []
22
+ const currentDate = new Date(start)
23
+
24
+ // Ajouter la date de début
25
+ dateArray.push(new Date(currentDate))
26
+
27
+ // Ajouter toutes les dates intermédiaires jusqu'à la date de fin
28
+ while (currentDate < end) {
29
+ currentDate.setDate(currentDate.getDate() + 1)
30
+ dateArray.push(new Date(currentDate))
31
+ }
32
+
33
+ return dateArray
34
+ }
35
+
36
+ /**
37
+ * Met à jour les dates sélectionnées en fonction de l'entrée
38
+ */
39
+ const updateSelectedDates = (input: Date | Date[] | string | string[] | null | undefined) => {
40
+ // Cas 0: Input est null ou undefined (suppression de la sélection)
41
+ if (input === null || input === undefined) {
42
+ selectedDates.value = null
43
+ rangeBoundaryDates.value = null
44
+ return
45
+ }
46
+
47
+ // Cas 1: Input est un tableau de dates ou de chaînes (sélection depuis le calendrier)
48
+ if (Array.isArray(input)) {
49
+ const dates = input
50
+ .map((item) => {
51
+ if (item instanceof Date) return item
52
+ return item ? parseDate(item, format) : null
53
+ })
54
+ .filter((date): date is Date => date !== null)
55
+
56
+ if (dates.length === 0) {
57
+ selectedDates.value = null
58
+ rangeBoundaryDates.value = null
59
+ return
60
+ }
61
+
62
+ if (displayRange && dates.length >= 2) {
63
+ // Trier les dates pour s'assurer que nous avons la première et la dernière
64
+ dates.sort((a, b) => a.getTime() - b.getTime())
65
+
66
+ // Récupérer les dates de début et de fin
67
+ const startDate = dates[0]
68
+ const endDate = dates[dates.length - 1]
69
+
70
+ // Stocker les dates de début et de fin pour la plage, même si la plage est invalide
71
+ rangeBoundaryDates.value = [startDate, endDate]
72
+
73
+ // Pour l'affichage dans le calendrier, générer les dates intermédiaires si la plage est valide
74
+ if (startDate && endDate && startDate.getTime() <= endDate.getTime()) {
75
+ const allDates = generateDateRange(startDate, endDate)
76
+ selectedDates.value = allDates
77
+ }
78
+ else {
79
+ // Même si la plage est invalide, conserver les deux dates pour l'affichage
80
+ // Cela permettra à l'utilisateur de voir et corriger la plage invalide
81
+ selectedDates.value = [startDate, endDate]
82
+ }
83
+ }
84
+ else {
85
+ selectedDates.value = dates
86
+ rangeBoundaryDates.value = null
87
+ }
88
+ return
89
+ }
90
+
91
+ // Cas 2: Input est une chaîne de caractères (saisie manuelle)
92
+ if (!displayRange) {
93
+ // Mode date unique
94
+ const date = input && typeof input === 'string' ? parseDate(input, format) : null
95
+ selectedDates.value = date === null ? null : date
96
+ rangeBoundaryDates.value = null
97
+ }
98
+ else if (typeof input === 'string') {
99
+ // Mode plage de dates
100
+ const dates = input.split(' - ')
101
+ if (dates.length === 2) {
102
+ const startDate = parseDate(dates[0], format)
103
+ const endDate = parseDate(dates[1], format)
104
+ if (startDate && endDate) {
105
+ // Stocker les dates de début et de fin pour la plage
106
+ rangeBoundaryDates.value = [startDate, endDate]
107
+
108
+ // Générer toutes les dates intermédiaires pour l'affichage dans le calendrier
109
+ const allDates = generateDateRange(startDate, endDate)
110
+ selectedDates.value = allDates
111
+ }
112
+ }
113
+ }
114
+ }
115
+
116
+ return {
117
+ updateSelectedDates,
118
+ rangeBoundaryDates,
119
+ generateDateRange,
120
+ }
121
+ }
@@ -0,0 +1,225 @@
1
+ import { type Ref } from 'vue'
2
+ import { type ValidationResult } from '@/composables/validation/useValidation'
3
+ import { type DateObjectValue } from '../types'
4
+ import { DATE_PICKER_MESSAGES } from '../constants/messages'
5
+
6
+ /**
7
+ * Composable pour la validation des dates
8
+ *
9
+ * @param options - Options de configuration
10
+ * @returns Fonctions pour la validation des dates
11
+ */
12
+ export const useDateValidation = (options: {
13
+ // Propriétés de configuration
14
+ noCalendar?: boolean
15
+ required?: boolean
16
+ displayRange?: boolean
17
+ disableErrorHandling?: boolean
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles personnalisées
19
+ customRules?: { type: string, options: any }[]
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles d'avertissement personnalisées
21
+ customWarningRules?: { type: string, options: any }[]
22
+
23
+ // Références réactives
24
+ selectedDates: Ref<DateObjectValue>
25
+ isUpdatingFromInternal: Ref<boolean>
26
+ currentRangeIsValid: Ref<boolean>
27
+ getRangeValidationError: Ref<string>
28
+
29
+ // Fonctions de validation
30
+ clearValidation: () => void
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles personnalisées
32
+ validateField: (value: any, rules?: any[], warningRules?: any[]) => ValidationResult
33
+
34
+ // Références aux messages
35
+ errors: Ref<string[]>
36
+ warnings: Ref<string[]>
37
+ successes: Ref<string[]>
38
+ }) => {
39
+ const {
40
+ noCalendar = false,
41
+ required = false,
42
+ displayRange = false,
43
+ disableErrorHandling = false,
44
+ customRules = [],
45
+ customWarningRules = [],
46
+ selectedDates,
47
+ isUpdatingFromInternal,
48
+ currentRangeIsValid,
49
+ getRangeValidationError,
50
+ clearValidation,
51
+ validateField,
52
+ errors,
53
+ warnings,
54
+ successes,
55
+ } = options
56
+
57
+ /**
58
+ * Valide les dates sélectionnées
59
+ *
60
+ * @param forceValidation - Force la validation même si isUpdatingFromInternal est vrai
61
+ * @returns Résultat de la validation
62
+ */
63
+ const validateDates = (forceValidation = false): ValidationResult => {
64
+ if (noCalendar) {
65
+ // En mode no-calendar, on délègue la validation au DateTextInput
66
+ return {
67
+ hasError: false,
68
+ hasWarning: false,
69
+ hasSuccess: false,
70
+ state: {
71
+ errors: [],
72
+ warnings: [],
73
+ successes: [],
74
+ },
75
+ }
76
+ }
77
+
78
+ // Réinitialiser la validation
79
+ clearValidation()
80
+
81
+ // Si la gestion des erreurs est désactivée, on effectue la validation interne
82
+ // mais on n'ajoute pas les messages d'erreur
83
+ const shouldDisplayErrors = !disableErrorHandling
84
+
85
+ // Vérifier si le champ est requis et vide
86
+ if ((forceValidation || !isUpdatingFromInternal.value) && required && (!selectedDates.value || (Array.isArray(selectedDates.value) && selectedDates.value.length === 0))) {
87
+ if (shouldDisplayErrors) {
88
+ // Ajouter le message d'erreur dans le tableau errors.value
89
+ errors.value.push(DATE_PICKER_MESSAGES.ERROR_REQUIRED)
90
+ return {
91
+ hasError: true,
92
+ hasWarning: false,
93
+ hasSuccess: false,
94
+ state: {
95
+ errors: [DATE_PICKER_MESSAGES.ERROR_REQUIRED],
96
+ warnings: [],
97
+ successes: [],
98
+ },
99
+ }
100
+ }
101
+ else {
102
+ return {
103
+ hasError: true,
104
+ hasWarning: false,
105
+ hasSuccess: false,
106
+ state: {
107
+ errors: [],
108
+ warnings: [],
109
+ successes: [],
110
+ },
111
+ }
112
+ }
113
+ }
114
+
115
+ if (!selectedDates.value) {
116
+ return {
117
+ hasError: false,
118
+ hasWarning: false,
119
+ hasSuccess: true,
120
+ state: {
121
+ errors: [],
122
+ warnings: [],
123
+ successes: [],
124
+ },
125
+ }
126
+ }
127
+
128
+ // Détecter si nous sommes en train de saisir une plage incomplète
129
+ // (mode plage activé, avec une seule date sélectionnée)
130
+ if (displayRange && Array.isArray(selectedDates.value)
131
+ && selectedDates.value.length === 2 && selectedDates.value[0] && !selectedDates.value[1]
132
+ && !forceValidation) {
133
+ // Si nous sommes en train de saisir la première date d'une plage,
134
+ // ne pas appliquer les règles de validation pour éviter le message "Date invalide"
135
+ return {
136
+ hasError: false,
137
+ hasWarning: false,
138
+ hasSuccess: false,
139
+ state: {
140
+ errors: [],
141
+ warnings: [],
142
+ successes: [],
143
+ },
144
+ }
145
+ }
146
+
147
+ // Préparer les dates à valider
148
+ const datesToValidate = Array.isArray(selectedDates.value)
149
+ ? selectedDates.value.filter(Boolean) // Filtrer les valeurs null
150
+ : [selectedDates.value]
151
+
152
+ let isValid = true
153
+
154
+ // Valider chaque date
155
+ if (shouldDisplayErrors) {
156
+ datesToValidate.forEach((date) => {
157
+ if (!date) return // Ignorer les dates null
158
+
159
+ const result = validateField(
160
+ date,
161
+ customRules,
162
+ customWarningRules,
163
+ )
164
+ if (result.hasError) {
165
+ isValid = false
166
+ }
167
+ })
168
+
169
+ // Vérifier la validité de la plage de dates si en mode plage
170
+ if (displayRange && Array.isArray(selectedDates.value) && selectedDates.value.length >= 2) {
171
+ // Récupérer les dates de début et de fin
172
+ const startDate = selectedDates.value[0]
173
+ const endDate = selectedDates.value[selectedDates.value.length - 1]
174
+
175
+ // Vérifier si les deux dates sont présentes et si la plage est valide
176
+ if (startDate && endDate && startDate.getTime() > endDate.getTime()) {
177
+ // La date de fin est antérieure à la date de début
178
+ const rangeError = DATE_PICKER_MESSAGES.ERROR_END_BEFORE_START
179
+ if (!errors.value.includes(rangeError)) {
180
+ errors.value.push(rangeError)
181
+ isValid = false
182
+ }
183
+ }
184
+ // Utiliser également la validation du composable useDateRangeValidation
185
+ else if (!currentRangeIsValid.value) {
186
+ const rangeError = getRangeValidationError.value
187
+ if (rangeError && !errors.value.includes(rangeError)) {
188
+ errors.value.push(rangeError)
189
+ isValid = false
190
+ }
191
+ }
192
+ }
193
+
194
+ // Dédoublonner les messages (au cas où plusieurs dates auraient les mêmes messages)
195
+ errors.value = [...new Set(errors.value)]
196
+ warnings.value = [...new Set(warnings.value)]
197
+ successes.value = [...new Set(successes.value)]
198
+ }
199
+
200
+ return {
201
+ hasError: !isValid,
202
+ hasWarning: warnings.value.length > 0,
203
+ hasSuccess: successes.value.length > 0 && isValid && warnings.value.length === 0,
204
+ state: {
205
+ errors: errors.value,
206
+ warnings: warnings.value,
207
+ successes: successes.value,
208
+ },
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Valide les dates pour la soumission d'un formulaire
214
+ *
215
+ * @returns Résultat de la validation
216
+ */
217
+ const validateOnSubmit = (): ValidationResult => {
218
+ return validateDates(true)
219
+ }
220
+
221
+ return {
222
+ validateDates,
223
+ validateOnSubmit,
224
+ }
225
+ }
@@ -0,0 +1,58 @@
1
+ import { computed, type ComputedRef } from 'vue'
2
+ import dayjs from 'dayjs'
3
+ import { type DateObjectValue } from '../types'
4
+
5
+ export interface DisplayedDateStringProps {
6
+ selectedDates: { value: DateObjectValue }
7
+ todayInString: ComputedRef<string>
8
+ }
9
+
10
+ export interface DisplayedDateStringReturn {
11
+ displayedDateString: ComputedRef<string>
12
+ }
13
+
14
+ /**
15
+ * Composable pour formater l'affichage des dates sélectionnées
16
+ * Gère à la fois les dates uniques et les plages de dates
17
+ */
18
+ export function useDisplayedDateString(props: DisplayedDateStringProps): DisplayedDateStringReturn {
19
+ // Computed pour formater l'affichage des dates sélectionnées
20
+ const displayedDateString = computed(() => {
21
+ // Si nous n'avons pas de date sélectionnée, afficher la date du jour
22
+ if (!props.selectedDates.value) return props.todayInString.value
23
+
24
+ // Si nous avons une plage de dates
25
+ if (Array.isArray(props.selectedDates.value)) {
26
+ // Si nous avons les deux dates de la plage
27
+ if (props.selectedDates.value.length >= 2) {
28
+ const startDate = dayjs(props.selectedDates.value[0])
29
+ const endDate = dayjs(props.selectedDates.value[props.selectedDates.value.length - 1])
30
+
31
+ if (startDate.isValid() && endDate.isValid()) {
32
+ // Format court pour la date de début, format complet pour la date de fin
33
+ return `${startDate.format('D MMMM')} - ${endDate.format('D MMMM YYYY')}`
34
+ }
35
+ }
36
+ // Si nous n'avons qu'une seule date dans le tableau
37
+ else if (props.selectedDates.value.length === 1) {
38
+ const date = dayjs(props.selectedDates.value[0])
39
+ if (date.isValid()) {
40
+ return date.format('dddd D MMMM YYYY')
41
+ }
42
+ }
43
+ return props.todayInString.value
44
+ }
45
+ // Si nous avons une seule date (pas dans un tableau)
46
+ else {
47
+ const date = dayjs(props.selectedDates.value)
48
+ if (date.isValid()) {
49
+ return date.format('dddd D MMMM YYYY')
50
+ }
51
+ return props.todayInString.value
52
+ }
53
+ })
54
+
55
+ return {
56
+ displayedDateString,
57
+ }
58
+ }
@@ -0,0 +1,53 @@
1
+ import { computed, type Ref } from 'vue'
2
+
3
+ /**
4
+ * Composable pour déterminer l'icône à afficher en fonction de l'état de validation
5
+ *
6
+ * @param options - Options de configuration
7
+ * @returns Fonction pour obtenir l'icône appropriée
8
+ */
9
+ export const useIconState = (options: {
10
+ noCalendar?: boolean
11
+ disableErrorHandling?: boolean
12
+ errorMessages: Ref<string[]>
13
+ warningMessages: Ref<string[]>
14
+ successMessages: Ref<string[]>
15
+ }) => {
16
+ const {
17
+ noCalendar = false,
18
+ disableErrorHandling = false,
19
+ errorMessages,
20
+ warningMessages,
21
+ successMessages,
22
+ } = options
23
+
24
+ /**
25
+ * Détermine l'icône à afficher en fonction de l'état de validation
26
+ *
27
+ * @returns Le type d'icône à afficher ('error', 'warning', 'success' ou undefined)
28
+ */
29
+ const getIconValue = computed(() => {
30
+ if (noCalendar || disableErrorHandling) {
31
+ return undefined
32
+ }
33
+
34
+ switch (true) {
35
+ case errorMessages.value.length > 0:
36
+ return 'error'
37
+ case warningMessages.value.length > 0:
38
+ return 'warning'
39
+ case successMessages.value.length > 0:
40
+ return 'success'
41
+ default:
42
+ return undefined
43
+ }
44
+ })
45
+
46
+ // Propriété exposée pour être utilisée dans le template
47
+ const getIcon = getIconValue
48
+
49
+ return {
50
+ getIcon,
51
+ getIconValue,
52
+ }
53
+ }
@@ -0,0 +1,101 @@
1
+ import { type Ref } from 'vue'
2
+ import { type DateValue } from '@/composables/date/useDateInitializationDayjs'
3
+ import { type DateObjectValue } from '../types'
4
+
5
+ /**
6
+ * Composable pour gérer le comportement lors de la perte de focus d'un champ de date
7
+ *
8
+ * @param options - Options de configuration
9
+ * @returns Fonction pour gérer la perte de focus
10
+ */
11
+ export const useInputBlurHandler = (options: {
12
+ // Propriétés de configuration
13
+ format: string
14
+ dateFormatReturn?: string
15
+ required?: boolean
16
+
17
+ // Références réactives
18
+ displayFormattedDate: Ref<string>
19
+ hasInteracted: Ref<boolean>
20
+ isManualInputActive: Ref<boolean>
21
+ isUpdatingFromInternal: Ref<boolean>
22
+ selectedDates: Ref<DateObjectValue>
23
+
24
+ // Fonctions
25
+ validateDateFormat: (dateStr: string) => { isValid: boolean, message: string }
26
+ parseDate: (dateStr: string, format: string) => Date | null
27
+ formatDate: (date: Date, format: string) => string
28
+ updateModel: (value: DateValue) => void
29
+ validateManualInput: (value: string) => boolean
30
+
31
+ // Émetteurs d'événements
32
+ emitBlur: () => void
33
+ }) => {
34
+ const {
35
+ format,
36
+ dateFormatReturn = '',
37
+ required = false,
38
+ displayFormattedDate,
39
+ hasInteracted,
40
+ isManualInputActive,
41
+ isUpdatingFromInternal,
42
+ selectedDates,
43
+ validateDateFormat,
44
+ parseDate,
45
+ formatDate,
46
+ updateModel,
47
+ validateManualInput,
48
+ emitBlur,
49
+ } = options
50
+
51
+ /**
52
+ * Gère la perte de focus du champ de saisie de date
53
+ */
54
+ const handleInputBlur = () => {
55
+ // Émettre l'événement blur
56
+ emitBlur()
57
+
58
+ // Marquer que l'utilisateur a interagi avec le champ
59
+ hasInteracted.value = true
60
+
61
+ // Désactiver le mode de saisie manuelle
62
+ isManualInputActive.value = false
63
+
64
+ // Gérer la mise à jour du modèle en fonction de la validité de la date
65
+ if (displayFormattedDate.value) {
66
+ const validation = validateDateFormat(displayFormattedDate.value)
67
+ if (validation.isValid) {
68
+ const date = parseDate(displayFormattedDate.value, format)
69
+ if (date) {
70
+ // Si la date est valide, mettre à jour selectedDates et le modèle
71
+ try {
72
+ isUpdatingFromInternal.value = true
73
+ selectedDates.value = date
74
+
75
+ // Si on a un format de retour, formater la date dans ce format
76
+ const formattedValue = dateFormatReturn
77
+ ? formatDate(date, dateFormatReturn)
78
+ : formatDate(date, format)
79
+ updateModel(formattedValue)
80
+ }
81
+ finally {
82
+ setTimeout(() => {
83
+ isUpdatingFromInternal.value = false
84
+ }, 0)
85
+ }
86
+ }
87
+ }
88
+ }
89
+ else if (!required) {
90
+ // Si le champ est vide et non requis, réinitialiser le modèle
91
+ updateModel(null)
92
+ }
93
+
94
+ // Valider la saisie manuelle (affiche les messages d'erreur)
95
+ validateManualInput(displayFormattedDate.value || '')
96
+ }
97
+
98
+ return {
99
+ handleInputBlur,
100
+ }
101
+ }