@cnamts/synapse 1.0.0 → 1.0.2

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 (533) hide show
  1. package/README.md +1 -1
  2. package/dist/DateFilter-YWOTbfeL.js +98 -0
  3. package/dist/NumberFilter-DMmMgALM.js +121 -0
  4. package/dist/PeriodFilter-Bok5BHcn.js +112 -0
  5. package/dist/SelectFilter-BKud2WhN.js +136 -0
  6. package/dist/TextFilter-DvMf2thH.js +114 -0
  7. package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
  8. package/dist/components/Accordion/Accordion.d.ts +2 -1
  9. package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
  10. package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
  11. package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
  12. package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
  13. package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
  14. package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
  15. package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
  16. package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
  17. package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
  18. package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
  19. package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
  20. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
  21. package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
  22. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  23. package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
  24. package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
  25. package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
  26. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
  27. package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
  28. package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
  29. package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
  30. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4295 -0
  31. package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +158 -104
  32. package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +35 -27
  33. package/dist/components/DatePicker/composables/index.d.ts +17 -0
  34. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
  35. package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
  36. package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
  37. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
  38. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
  39. package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
  40. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
  41. package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
  42. package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
  43. package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
  44. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +19 -0
  45. package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
  46. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +31 -0
  47. package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
  48. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
  49. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +12 -0
  50. package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
  51. package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
  52. package/dist/components/DatePicker/constants/messages.d.ts +29 -0
  53. package/dist/components/DatePicker/types.d.ts +13 -0
  54. package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
  55. package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
  56. package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
  57. package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
  58. package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
  59. package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
  60. package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
  61. package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
  62. package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
  63. package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
  64. package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
  65. package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
  66. package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
  67. package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
  68. package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
  69. package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
  70. package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
  71. package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
  72. package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
  73. package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
  74. package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
  75. package/dist/components/NirField/NirField.d.ts +7 -3
  76. package/dist/components/NirField/nirValidation.d.ts +1 -1
  77. package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
  78. package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
  79. package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
  80. package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
  81. package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
  82. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  83. package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
  84. package/dist/components/PeriodField/PeriodField.d.ts +219 -41
  85. package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
  86. package/dist/components/PhoneField/PhoneField.d.ts +2 -2
  87. package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
  88. package/dist/components/RangeField/RangeField.d.ts +2 -0
  89. package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
  90. package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
  91. package/dist/components/SearchListField/SearchListField.d.ts +9 -0
  92. package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
  93. package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
  94. package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
  95. package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
  96. package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
  97. package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
  98. package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
  99. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +652 -0
  100. package/dist/components/Tables/SyTable/SyTable.d.ts +671 -0
  101. package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
  102. package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
  103. package/dist/components/Tables/common/TableHeader.d.ts +15 -0
  104. package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
  105. package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
  106. package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
  107. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
  108. package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
  109. package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
  110. package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
  111. package/dist/components/Tables/common/filters/locales.d.ts +4 -0
  112. package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
  113. package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
  114. package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
  115. package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
  116. package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
  117. package/dist/components/Tables/common/formatters.d.ts +17 -0
  118. package/dist/components/Tables/common/locales.d.ts +28 -0
  119. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
  120. package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
  121. package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
  122. package/dist/components/Tables/common/tableFilterUtils.d.ts +3 -0
  123. package/dist/components/Tables/common/tableStorageUtils.d.ts +69 -0
  124. package/dist/components/Tables/common/tableUtils.d.ts +79 -0
  125. package/dist/components/Tables/common/types.d.ts +91 -0
  126. package/dist/components/Tables/common/usePagination.d.ts +22 -0
  127. package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
  128. package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
  129. package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
  130. package/dist/components/Tables/common/useTableItems.d.ts +24 -0
  131. package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
  132. package/dist/components/Tables/index.d.ts +2 -0
  133. package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
  134. package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
  135. package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
  136. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
  137. package/dist/components/index.d.ts +9 -5
  138. package/dist/design-system-v3.js +102 -11944
  139. package/dist/design-system-v3.umd.cjs +22 -4
  140. package/dist/designTokens/index.d.ts +3 -1
  141. package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
  142. package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
  143. package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
  144. package/dist/designTokens/utils/index.d.ts +2 -1
  145. package/dist/main-Cx8qG7YR.js +16344 -0
  146. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
  147. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
  148. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
  149. package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
  150. package/dist/style.css +1 -1
  151. package/dist/utils/rules/isRequired/index.d.ts +1 -1
  152. package/dist/vite-env.d.ts +12 -0
  153. package/package.json +3 -3
  154. package/src/assets/_spacers.scss +37 -1
  155. package/src/assets/_typography.scss +158 -0
  156. package/src/assets/settings.scss +7 -0
  157. package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
  158. package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
  159. package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
  160. package/src/components/Accordion/Accordion.vue +48 -76
  161. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
  162. package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
  163. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
  164. package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
  165. package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
  166. package/src/components/Accordion/composables/useAccordionState.ts +59 -0
  167. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
  168. package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
  169. package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
  170. package/src/components/ChipList/AccessibiliteItems.ts +1 -1
  171. package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
  172. package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
  173. package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
  174. package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
  175. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
  176. package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
  177. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
  178. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
  179. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
  180. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
  181. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
  182. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
  183. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
  184. package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
  185. package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
  186. package/src/components/Customs/SySelect/SySelect.vue +292 -39
  187. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +234 -2
  188. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
  189. package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
  190. package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
  191. package/src/components/DataList/AccessibiliteItems.ts +1 -1
  192. package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
  193. package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
  194. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
  195. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1307 -0
  196. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +769 -204
  197. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
  198. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +943 -0
  199. package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
  200. package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +356 -519
  201. package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +435 -89
  202. package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
  203. package/src/components/DatePicker/{tests → DatePicker/tests}/DatePicker.spec.ts +0 -14
  204. package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
  205. package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
  206. package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
  207. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +320 -0
  208. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
  209. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
  210. package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +10 -7
  211. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +1111 -0
  212. package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
  213. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +782 -0
  214. package/src/components/DatePicker/composables/index.ts +24 -0
  215. package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
  216. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
  217. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
  218. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
  219. package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
  220. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
  221. package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
  222. package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
  223. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
  224. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
  225. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
  226. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +456 -0
  227. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
  228. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +125 -0
  229. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
  230. package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
  231. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
  232. package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
  233. package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
  234. package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
  235. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
  236. package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
  237. package/src/components/DatePicker/composables/useDateRangeInput.ts +378 -0
  238. package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
  239. package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
  240. package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
  241. package/src/components/DatePicker/composables/useDisplayedDateString.ts +70 -0
  242. package/src/components/DatePicker/composables/useIconState.ts +53 -0
  243. package/src/components/DatePicker/composables/useInputBlurHandler.ts +165 -0
  244. package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
  245. package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
  246. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +187 -0
  247. package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
  248. package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
  249. package/src/components/DatePicker/constants/messages.ts +50 -0
  250. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  251. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
  252. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
  253. package/src/components/DatePicker/types.ts +15 -0
  254. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
  255. package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
  256. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
  257. package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
  258. package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
  259. package/src/components/ErrorPage/ErrorPage.vue +12 -6
  260. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  261. package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
  262. package/src/components/FileList/AccessibiliteItems.ts +1 -1
  263. package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
  264. package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
  265. package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
  266. package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
  267. package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
  268. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
  269. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
  270. package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
  271. package/src/components/FooterBar/FooterBar.vue +2 -1
  272. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
  273. package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
  274. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
  275. package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
  276. package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
  277. package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
  278. package/src/components/Logo/Accessibilite.stories.ts +4 -0
  279. package/src/components/Logo/AccessibiliteItems.ts +1 -1
  280. package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
  281. package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
  282. package/src/components/NirField/AccessibiliteItems.ts +1 -1
  283. package/src/components/NirField/NirField.mdx +22 -9
  284. package/src/components/NirField/NirField.stories.ts +26 -2
  285. package/src/components/NirField/NirField.vue +209 -22
  286. package/src/components/NirField/nirValidation.ts +17 -3
  287. package/src/components/NirField/tests/NirField.spec.ts +2 -2
  288. package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
  289. package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
  290. package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
  291. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
  292. package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
  293. package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
  294. package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
  295. package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
  296. package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
  297. package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
  298. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
  299. package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
  300. package/src/components/PasswordField/PasswordField.stories.ts +4 -0
  301. package/src/components/PasswordField/PasswordField.vue +3 -0
  302. package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
  303. package/src/components/PeriodField/PeriodField.vue +15 -1
  304. package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
  305. package/src/components/PhoneField/PhoneField.stories.ts +15 -15
  306. package/src/components/PhoneField/PhoneField.vue +1 -1
  307. package/src/components/RangeField/AccessibiliteItems.ts +1 -1
  308. package/src/components/RangeField/RangeField.stories.ts +9 -0
  309. package/src/components/RangeField/RangeField.vue +4 -0
  310. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
  311. package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
  312. package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
  313. package/src/components/SearchListField/SearchListField.vue +5 -0
  314. package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
  315. package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
  316. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
  317. package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
  318. package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
  319. package/src/components/SyTextArea/SyTextArea.vue +3 -0
  320. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
  321. package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
  322. package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
  323. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +700 -0
  324. package/src/components/Tables/SyServerTable/SyServerTable.mdx +170 -0
  325. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4354 -0
  326. package/src/components/Tables/SyServerTable/SyServerTable.vue +391 -0
  327. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +702 -0
  328. package/src/components/Tables/SyTable/FilterRules.stories.ts +418 -0
  329. package/src/components/Tables/SyTable/SyTable.mdx +139 -0
  330. package/src/components/Tables/SyTable/SyTable.stories.ts +2754 -0
  331. package/src/components/Tables/SyTable/SyTable.vue +397 -0
  332. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +707 -0
  333. package/src/components/Tables/common/SyTableFilter.vue +289 -0
  334. package/src/components/Tables/common/SyTablePagination.vue +375 -0
  335. package/src/components/Tables/common/TableHeader.vue +205 -0
  336. package/src/components/Tables/common/constants/StateEnum.ts +6 -0
  337. package/src/components/Tables/common/filters/DateFilter.vue +140 -0
  338. package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
  339. package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
  340. package/src/components/Tables/common/filters/SelectFilter.vue +235 -0
  341. package/src/components/Tables/common/filters/TextFilter.vue +191 -0
  342. package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
  343. package/src/components/Tables/common/filters/locales.ts +4 -0
  344. package/src/components/Tables/common/filters/logics/date.ts +12 -0
  345. package/src/components/Tables/common/filters/logics/number.ts +48 -0
  346. package/src/components/Tables/common/filters/logics/period.ts +25 -0
  347. package/src/components/Tables/common/filters/logics/select.ts +27 -0
  348. package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
  349. package/src/components/Tables/common/filters/logics/text.ts +62 -0
  350. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
  351. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
  352. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
  353. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
  354. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
  355. package/src/components/Tables/common/formatters.ts +72 -0
  356. package/src/components/Tables/common/locales.ts +31 -0
  357. package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
  358. package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
  359. package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
  360. package/src/components/Tables/common/tableFilterUtils.ts +75 -0
  361. package/src/components/Tables/common/tableStorageUtils.ts +127 -0
  362. package/src/components/Tables/common/tableStyles.scss +80 -0
  363. package/src/components/Tables/common/tableUtils.ts +102 -0
  364. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
  365. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
  366. package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
  367. package/src/components/Tables/common/tests/resize.spec.ts +161 -0
  368. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +92 -0
  369. package/src/components/Tables/common/tests/tableUtils.spec.ts +228 -0
  370. package/src/components/Tables/common/types.ts +92 -0
  371. package/src/components/Tables/common/usePagination.ts +83 -0
  372. package/src/components/Tables/common/useTableCheckbox.ts +58 -0
  373. package/src/components/Tables/common/useTableFilter.ts +19 -0
  374. package/src/components/Tables/common/useTableHeaders.ts +88 -0
  375. package/src/components/Tables/common/useTableItems.ts +87 -0
  376. package/src/components/Tables/common/useTableOptions.ts +93 -0
  377. package/src/components/Tables/index.ts +3 -0
  378. package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
  379. package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
  380. package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
  381. package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
  382. package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
  383. package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
  384. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
  385. package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
  386. package/src/components/index.ts +9 -5
  387. package/src/composables/date/useDateFormatDayjs.ts +8 -3
  388. package/src/composables/date/useDateInitializationDayjs.ts +28 -36
  389. package/src/composables/rules/useFieldValidation.ts +1 -2
  390. package/src/designTokens/index.ts +4 -0
  391. package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
  392. package/src/designTokens/tokens/pa/paFonts.ts +140 -0
  393. package/src/designTokens/utils/createFontVariables.ts +143 -0
  394. package/src/designTokens/utils/index.ts +2 -1
  395. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
  396. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
  397. package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
  398. package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
  399. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
  400. package/src/stories/Accessibilite/Introduction.mdx +258 -18
  401. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
  402. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
  403. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
  404. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
  405. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
  406. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
  407. package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
  408. package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
  409. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
  410. package/src/stories/Demarrer/Accueil.stories.ts +32 -8
  411. package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
  412. package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
  413. package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
  414. package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
  415. package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
  416. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
  417. package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
  418. package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
  419. package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
  420. package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
  421. package/src/stories/GuideDuDev/Theme.mdx +41 -0
  422. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
  423. package/src/utils/rules/isRequired/index.ts +2 -1
  424. package/src/vite-env.d.ts +12 -0
  425. package/src/vuetifyConfig.ts +10 -3
  426. package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  427. package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
  428. package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
  429. package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  430. package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
  431. package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  432. package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  433. package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  434. package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  435. package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
  436. package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
  437. package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
  438. package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  439. package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
  440. package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  441. package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  442. package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  443. package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
  444. package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
  445. package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
  446. package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
  447. package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  448. package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  449. package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  450. package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  451. package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  452. package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
  453. package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  454. package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  455. package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
  456. package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
  457. package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
  458. package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
  459. package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  460. package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  461. package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
  462. package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
  463. package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
  464. package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
  465. package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
  466. package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
  467. package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  468. package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
  469. package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
  470. package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
  471. package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  472. package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
  473. package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
  474. package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  475. package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
  476. package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  477. package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
  478. package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
  479. package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
  480. package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
  481. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
  482. package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
  483. package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
  484. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
  485. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
  486. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
  487. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
  488. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
  489. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
  490. package/src/components/DatePicker/DatePicker.mdx +0 -222
  491. package/src/components/DatePicker/DateTextInput.vue +0 -504
  492. package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
  493. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
  494. package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
  495. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
  496. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
  497. package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
  498. package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
  499. package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
  500. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
  501. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
  502. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
  503. package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
  504. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
  505. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
  506. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
  507. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  508. package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
  509. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
  510. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
  511. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
  512. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
  513. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
  514. package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
  515. package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
  516. package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
  517. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
  518. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
  519. package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
  520. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
  521. package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
  522. package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
  523. package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
  524. package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
  525. package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
  526. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
  527. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
  528. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
  529. package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  530. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
  531. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
  532. package/src/stories/DesignTokens/ThemePA.mdx +0 -35
  533. /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
@@ -0,0 +1,378 @@
1
+ import { ref, computed } from 'vue'
2
+ import dayjs from 'dayjs'
3
+ import customParseFormat from 'dayjs/plugin/customParseFormat'
4
+
5
+ // Initialiser les plugins dayjs
6
+ dayjs.extend(customParseFormat)
7
+
8
+ /**
9
+ * Composable pour gérer la saisie manuelle des plages de dates
10
+ * Permet de saisir et formater correctement une plage de dates au format "date1 - date2"
11
+ */
12
+ export function useDateRangeInput(
13
+ format: string,
14
+ isRangeMode: boolean,
15
+ parseDate: (dateStr: string, format: string) => Date | null,
16
+ formatDate: (date: Date, format: string) => string,
17
+ ) {
18
+ // État pour suivre si nous sommes en train de saisir la première ou la deuxième date
19
+ const isEditingSecondDate = ref(false)
20
+ // Stockage temporaire pour la première date saisie
21
+ const firstDate = ref<Date | null>(null)
22
+ // Stockage temporaire pour la deuxième date saisie
23
+ const secondDate = ref<Date | null>(null)
24
+ // Séparateur de plage
25
+ const rangeSeparator = ' - '
26
+
27
+ /**
28
+ * Vérifie si une chaîne de caractères contient un séparateur de plage
29
+ */
30
+ const hasRangeSeparator = (value: string): boolean => {
31
+ return value.includes(rangeSeparator)
32
+ }
33
+
34
+ /**
35
+ * Extrait les deux parties d'une plage de dates
36
+ */
37
+ const extractRangeParts = (value: string): [string, string] => {
38
+ const parts = value.split(rangeSeparator)
39
+ return [
40
+ parts[0]?.trim() || '',
41
+ parts[1]?.trim() || '',
42
+ ]
43
+ }
44
+
45
+ /**
46
+ * Formate une plage de dates pour l'affichage
47
+ */
48
+ const formatRangeForDisplay = (startDate: Date | null, endDate: Date | null): string => {
49
+ if (!startDate) return ''
50
+ if (!endDate) return `${formatDate(startDate, format)}${rangeSeparator}`
51
+ return `${formatDate(startDate, format)}${rangeSeparator}${formatDate(endDate, format)}`
52
+ }
53
+
54
+ /**
55
+ * Analyse une chaîne de caractères pour en extraire une plage de dates
56
+ * Retourne un tableau contenant les dates de début et de fin
57
+ */
58
+ const parseRangeInput = (value: string): [Date | null, Date | null] => {
59
+ if (!value) return [null, null]
60
+
61
+ // Si la valeur contient un séparateur de plage
62
+ if (hasRangeSeparator(value)) {
63
+ const [startStr, endStr] = extractRangeParts(value)
64
+ const startDate = parseDate(startStr, format)
65
+ const endDate = parseDate(endStr, format)
66
+ return [startDate, endDate]
67
+ }
68
+
69
+ // Si la valeur ne contient pas de séparateur, c'est une seule date
70
+ const singleDate = parseDate(value, format)
71
+ return [singleDate, null]
72
+ }
73
+
74
+ /**
75
+ * Gère la saisie manuelle d'une plage de dates
76
+ * @param inputValue Valeur actuelle du champ de saisie
77
+ * @param newValue Nouvelle valeur saisie
78
+ * @param cursorPosition Position actuelle du curseur (optionnel)
79
+ * @returns Objet contenant les informations sur la plage de dates
80
+ */
81
+ const handleRangeInput = (inputValue: string | unknown, newValue: string | unknown, cursorPosition?: number): {
82
+ formattedValue: string
83
+ dates: [Date | null, Date | null]
84
+ isComplete: boolean
85
+ justCompletedFirstDate?: boolean
86
+ cursorPosition?: number
87
+ } => {
88
+ // S'assurer que inputValue et newValue sont des chaînes de caractères
89
+ const safeInputValue = typeof inputValue === 'string' ? inputValue : ''
90
+ const safeNewValue = typeof newValue === 'string' ? newValue : ''
91
+ // Si le mode plage n'est pas activé, traiter comme une date unique
92
+ if (!isRangeMode) {
93
+ const date = parseDate(safeNewValue, format)
94
+ return {
95
+ formattedValue: date ? formatDate(date, format) : safeNewValue,
96
+ dates: [date, null],
97
+ isComplete: !!date,
98
+ cursorPosition: cursorPosition,
99
+ }
100
+ }
101
+
102
+ // Cas spécial : si la valeur précédente se terminait par un séparateur et que la nouvelle valeur
103
+ // contient du texte après le séparateur, c'est qu'on commence à saisir la seconde date
104
+ if (safeInputValue && safeInputValue.endsWith(rangeSeparator)
105
+ && safeNewValue.startsWith(safeInputValue)
106
+ && safeNewValue.length > safeInputValue.length) {
107
+ // On est en train de saisir la seconde date pour la première fois
108
+ isEditingSecondDate.value = true
109
+
110
+ // Extraire la première date et le nouveau caractère saisi
111
+ const firstPart = safeInputValue.substring(0, safeInputValue.length - rangeSeparator.length)
112
+ const firstDateObj = parseDate(firstPart, format)
113
+ firstDate.value = firstDateObj
114
+
115
+ // Extraire le caractère nouvellement saisi (après le séparateur)
116
+ const secondPart = safeNewValue.substring(safeInputValue.length)
117
+ secondDate.value = parseDate(secondPart, format)
118
+
119
+ return {
120
+ formattedValue: `${firstPart}${rangeSeparator}${secondPart}`,
121
+ dates: [firstDateObj, secondDate.value],
122
+ isComplete: false,
123
+ cursorPosition: safeNewValue.length,
124
+ }
125
+ }
126
+
127
+ // Si la valeur contient déjà un séparateur de plage
128
+ if (hasRangeSeparator(safeNewValue)) {
129
+ const [startStr, endStr] = extractRangeParts(safeNewValue)
130
+ const startDate = parseDate(startStr, format)
131
+ const endDate = parseDate(endStr, format)
132
+
133
+ // Mettre à jour les dates temporaires
134
+ firstDate.value = startDate
135
+ secondDate.value = endDate
136
+
137
+ // Déterminer si nous sommes en train d'éditer la deuxième date
138
+ isEditingSecondDate.value = !!startDate && startStr.length >= format.length
139
+
140
+ // Formater correctement la valeur
141
+ const formattedStart = startDate ? formatDate(startDate, format) : startStr
142
+ const formattedValue = `${formattedStart}${rangeSeparator}${endStr}`
143
+
144
+ // Calculer la nouvelle position du curseur en fonction de la position actuelle
145
+ let newCursorPosition = cursorPosition
146
+
147
+ // Si la position du curseur est dans la première partie de la date
148
+ if (cursorPosition !== undefined) {
149
+ const separatorPos = safeInputValue.indexOf(rangeSeparator)
150
+ if (separatorPos !== -1 && cursorPosition <= separatorPos) {
151
+ // Ajuster la position si la première partie a été formatée
152
+ if (startStr !== formattedStart) {
153
+ // Conserver la position relative dans la première partie
154
+ const relativePos = Math.min(cursorPosition, startStr.length)
155
+ newCursorPosition = Math.min(relativePos, formattedStart.length)
156
+ }
157
+ }
158
+ else if (separatorPos !== -1) {
159
+ // Le curseur est dans la seconde partie
160
+ // Conserver la position relative après le séparateur
161
+ const posAfterSeparator = cursorPosition - (separatorPos + rangeSeparator.length)
162
+ newCursorPosition = formattedStart.length + rangeSeparator.length + Math.min(posAfterSeparator, endStr.length)
163
+ }
164
+ }
165
+
166
+ return {
167
+ formattedValue,
168
+ dates: [startDate, endDate],
169
+ isComplete: !!startDate && !!endDate,
170
+ cursorPosition: newCursorPosition,
171
+ }
172
+ }
173
+
174
+ // Si nous sommes déjà en train d'éditer la deuxième date
175
+ // (ce cas ne devrait pas arriver souvent car la valeur devrait contenir un séparateur)
176
+ if (isEditingSecondDate.value && firstDate.value) {
177
+ // Formater la valeur pour afficher la première date + séparateur + nouvelle valeur
178
+ const formattedValue = `${formatDate(firstDate.value, format)}${rangeSeparator}${typeof newValue === 'string' ? newValue : ''}`
179
+ const secondDateParsed = parseDate(typeof newValue === 'string' ? newValue : '', format)
180
+ secondDate.value = secondDateParsed
181
+
182
+ return {
183
+ formattedValue,
184
+ dates: [firstDate.value, secondDateParsed],
185
+ isComplete: !!firstDate.value && !!secondDateParsed,
186
+ cursorPosition: cursorPosition !== undefined ? formatDate(firstDate.value, format).length + rangeSeparator.length + Math.min(cursorPosition, typeof newValue === 'string' ? newValue.length : 0) : undefined,
187
+ }
188
+ }
189
+
190
+ // Si nous éditons la première date
191
+ const date = parseDate(typeof newValue === 'string' ? newValue : '', format)
192
+ firstDate.value = date
193
+
194
+ // Si la première date est complète, passer à la saisie de la deuxième date
195
+ if (date && typeof newValue === 'string' && newValue.length >= format.length) {
196
+ isEditingSecondDate.value = true
197
+ const formattedDate = formatDate(date, format)
198
+
199
+ return {
200
+ formattedValue: `${formattedDate}${rangeSeparator}`,
201
+ dates: [date, null],
202
+ isComplete: false,
203
+ justCompletedFirstDate: true,
204
+ cursorPosition: formattedDate.length + rangeSeparator.length,
205
+ }
206
+ }
207
+
208
+ return {
209
+ formattedValue: safeNewValue,
210
+ dates: [date, null],
211
+ isComplete: false,
212
+ cursorPosition: cursorPosition,
213
+ }
214
+ }
215
+
216
+ /**
217
+ * Initialise l'état du composable avec des valeurs existantes
218
+ */
219
+ const initializeWithDates = (startDate: Date | null, endDate: Date | null) => {
220
+ firstDate.value = startDate
221
+ secondDate.value = endDate
222
+ isEditingSecondDate.value = !!startDate && !!endDate
223
+ }
224
+
225
+ /**
226
+ * Réinitialise l'état du composable
227
+ */
228
+ const resetState = () => {
229
+ firstDate.value = null
230
+ secondDate.value = null
231
+ isEditingSecondDate.value = false
232
+ }
233
+
234
+ /**
235
+ * Vérifie si une plage de dates est valide (la date de début est antérieure à la date de fin)
236
+ */
237
+ const isValidRange = (startDate: Date | null, endDate: Date | null): boolean => {
238
+ if (!startDate || !endDate) return true
239
+ return startDate.getTime() <= endDate.getTime()
240
+ }
241
+
242
+ /**
243
+ * Vérifie si la plage actuelle est valide
244
+ */
245
+ const currentRangeIsValid = computed(() => {
246
+ return isValidRange(firstDate.value, secondDate.value)
247
+ })
248
+
249
+ /**
250
+ * Gère l'événement keydown pour filtrer les caractères non numériques
251
+ *
252
+ * @param event - Événement keydown
253
+ */
254
+ const handleKeydown = (event: KeyboardEvent & { target: HTMLInputElement }): void => {
255
+ // Bloquer la saisie de caractères non numériques
256
+ // Autoriser uniquement : chiffres, touches de navigation, touches de modification et touches de contrôle
257
+ if (
258
+ // Si la touche n'est pas un chiffre
259
+ !/^\d$/.test(event.key)
260
+ // Et n'est pas une touche spéciale autorisée
261
+ && ![
262
+ 'Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',
263
+ 'Home', 'End', 'Tab', 'Escape', 'Enter',
264
+ 'Control', 'Alt', 'Shift', 'Meta',
265
+ ].includes(event.key)
266
+ // Et n'est pas une combinaison de touches (Ctrl+A, Ctrl+C, Ctrl+V, etc.)
267
+ && !(event.ctrlKey || event.metaKey)
268
+ ) {
269
+ // Empêcher la saisie de caractères non numériques
270
+ event.preventDefault()
271
+ return
272
+ }
273
+
274
+ // Gérer les touches spéciales pour le mode plage
275
+ if (isRangeMode) {
276
+ // Gérer la suppression des séparateurs de plage
277
+ if (event.key === 'Backspace') {
278
+ const input = event.target
279
+ if (!input.selectionStart || input.selectionStart !== input.selectionEnd) {
280
+ return
281
+ }
282
+
283
+ const cursorPos = input.selectionStart
284
+
285
+ // Si on est juste après un séparateur de plage
286
+ if (cursorPos >= rangeSeparator.length
287
+ && input.value.substring(cursorPos - rangeSeparator.length, cursorPos) === rangeSeparator) {
288
+ // Empêcher le comportement par défaut
289
+ event.preventDefault()
290
+
291
+ // Supprimer le séparateur complet
292
+ const newValue = input.value.substring(0, cursorPos - rangeSeparator.length)
293
+ + input.value.substring(cursorPos)
294
+
295
+ // Mettre à jour la valeur (via l'événement input)
296
+ const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true, data: newValue })
297
+ Object.defineProperty(inputEvent, 'target', { value: input, enumerable: true })
298
+ input.value = newValue
299
+ input.dispatchEvent(inputEvent)
300
+
301
+ // Positionner le curseur
302
+ setTimeout(() => {
303
+ const newCursorPos = cursorPos - rangeSeparator.length
304
+ input.setSelectionRange(newCursorPos, newCursorPos)
305
+ }, 0)
306
+ }
307
+ }
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Gère l'événement paste pour filtrer les caractères non numériques
313
+ *
314
+ * @param event - Événement paste
315
+ */
316
+ const handlePaste = (event: ClipboardEvent): void => {
317
+ // Récupérer le contenu du presse-papiers
318
+ const clipboardData = event.clipboardData
319
+ if (!clipboardData) return
320
+
321
+ // Extraire le texte
322
+ const pastedText = clipboardData.getData('text')
323
+
324
+ // Filtrer pour ne garder que les chiffres
325
+ const cleanedText = pastedText.replace(/[^0-9]/g, '')
326
+
327
+ // Si le texte collé ne contient pas de chiffres, annuler l'opération
328
+ if (cleanedText.length === 0) {
329
+ event.preventDefault()
330
+ return
331
+ }
332
+
333
+ // Si le texte a été modifié (des caractères non numériques ont été supprimés)
334
+ if (cleanedText !== pastedText) {
335
+ event.preventDefault()
336
+
337
+ // Insérer manuellement le texte nettoyé
338
+ const input = event.target as HTMLInputElement
339
+ if (!input) return
340
+
341
+ const start = input.selectionStart || 0
342
+ const end = input.selectionEnd || 0
343
+
344
+ // Construire la nouvelle valeur
345
+ const newValue = input.value.substring(0, start) + cleanedText + input.value.substring(end)
346
+
347
+ // Mettre à jour la valeur (via l'événement input)
348
+ const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true, data: newValue })
349
+ Object.defineProperty(inputEvent, 'target', { value: input, enumerable: true })
350
+ input.value = newValue
351
+ input.dispatchEvent(inputEvent)
352
+
353
+ // Positionner le curseur après le texte collé
354
+ setTimeout(() => {
355
+ const newCursorPos = start + cleanedText.length
356
+ input.setSelectionRange(newCursorPos, newCursorPos)
357
+ }, 0)
358
+ }
359
+ }
360
+
361
+ return {
362
+ isEditingSecondDate,
363
+ firstDate,
364
+ secondDate,
365
+ rangeSeparator,
366
+ hasRangeSeparator,
367
+ extractRangeParts,
368
+ formatRangeForDisplay,
369
+ parseRangeInput,
370
+ handleRangeInput,
371
+ initializeWithDates,
372
+ resetState,
373
+ isValidRange,
374
+ currentRangeIsValid,
375
+ handleKeydown,
376
+ handlePaste,
377
+ }
378
+ }
@@ -0,0 +1,48 @@
1
+ import { computed, type Ref } from 'vue'
2
+ import type { DateObjectValue } from '../types'
3
+
4
+ /**
5
+ * Composable pour gérer la validation des plages de dates
6
+ * Permet de vérifier si une plage de dates est valide (date de début avant date de fin)
7
+ */
8
+ export function useDateRangeValidation(
9
+ selectedDates: Ref<DateObjectValue>,
10
+ displayRange: boolean,
11
+ ) {
12
+ /**
13
+ * Vérifie si une plage de dates est valide (date de début avant date de fin)
14
+ */
15
+ const isRangeValid = (startDate: Date | null, endDate: Date | null): boolean => {
16
+ if (!startDate || !endDate) return true // Si une des dates est manquante, considérer comme valide
17
+ return startDate.getTime() <= endDate.getTime()
18
+ }
19
+
20
+ /**
21
+ * Variable réactive pour suivre la validité de la plage de dates actuelle
22
+ */
23
+ const currentRangeIsValid = computed(() => {
24
+ if (!displayRange || !selectedDates.value) return true
25
+ if (!Array.isArray(selectedDates.value)) return true
26
+ if (selectedDates.value.length < 2) return true
27
+
28
+ const [startDate, endDate] = selectedDates.value.length >= 2
29
+ ? [selectedDates.value[0], selectedDates.value[selectedDates.value.length - 1]]
30
+ : [null, null]
31
+
32
+ return isRangeValid(startDate, endDate)
33
+ })
34
+
35
+ /**
36
+ * Fonction pour obtenir un message d'erreur si la plage n'est pas valide
37
+ */
38
+ const getRangeValidationError = computed((): string => {
39
+ if (currentRangeIsValid.value) return ''
40
+ return 'La date de fin doit être postérieure ou égale à la date de début'
41
+ })
42
+
43
+ return {
44
+ isRangeValid,
45
+ currentRangeIsValid,
46
+ getRangeValidationError,
47
+ }
48
+ }
@@ -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
+ }