@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,219 @@
1
+ import { describe, it, expect, beforeEach, vi } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import { createVuetify } from 'vuetify'
4
+ import * as components from 'vuetify/components'
5
+ import * as directives from 'vuetify/directives'
6
+
7
+ import SelectFilter from '../SelectFilter.vue'
8
+ import SySelect from '@/components/Customs/SySelect/SySelect.vue'
9
+ import type { FilterType } from '../../types'
10
+
11
+ const vuetify = createVuetify({
12
+ components,
13
+ directives,
14
+ })
15
+
16
+ describe('SelectFilter.vue', () => {
17
+ let wrapper: ReturnType<typeof mount<typeof SelectFilter>>
18
+ const header = {
19
+ title: 'Test Select',
20
+ key: 'test',
21
+ filterOptions: [
22
+ { text: 'Option 1', value: 'option1' },
23
+ { text: 'Option 2', value: 'option2' },
24
+ ],
25
+ }
26
+ const filters: { key: string, value: string | number, type: FilterType }[] = []
27
+
28
+ beforeEach(() => {
29
+ wrapper = mount(SelectFilter, {
30
+ global: {
31
+ plugins: [vuetify],
32
+ stubs: {
33
+ SySelect: {
34
+ template: '<div class="sy-select-stub" data-testid="sy-select" :label="label" :items="items" :clearable="clearable" :density="density" :hideDetails="hideDetails"></div>',
35
+ props: ['modelValue', 'label', 'items', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant'],
36
+ },
37
+ },
38
+ },
39
+ props: {
40
+ header,
41
+ filters,
42
+ filterValue: undefined,
43
+ },
44
+ })
45
+ })
46
+
47
+ it('renders correctly with default props', () => {
48
+ expect(wrapper.exists()).toBe(true)
49
+ expect(wrapper.findComponent(SySelect).exists()).toBe(true)
50
+ })
51
+
52
+ it('passes the correct props to SySelect', () => {
53
+ const sySelect = wrapper.findComponent(SySelect)
54
+ // Use attributes for stubbed components
55
+ expect(sySelect.attributes('label')).toBe('Test Select')
56
+ // Can't easily test complex objects with attributes
57
+ // expect(sySelect.attributes('items')) would not work as expected
58
+ expect(sySelect.attributes('clearable')).toBe('true')
59
+ expect(sySelect.attributes('density')).toBe('compact')
60
+ expect(sySelect.attributes('hidedetails')).toBe('true')
61
+ })
62
+
63
+ it('emits update:filters event when value changes', async () => {
64
+ const sySelect = wrapper.findComponent(SySelect)
65
+ await sySelect.vm.$emit('update:modelValue', 'option1')
66
+
67
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
68
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
69
+ { key: 'test', value: 'option1', type: 'select' as FilterType },
70
+ ])
71
+ })
72
+
73
+ it('emits update:filters event to remove filter when value is null', async () => {
74
+ // First set a value
75
+ const sySelect = wrapper.findComponent(SySelect)
76
+ await sySelect.vm.$emit('update:modelValue', 'option1')
77
+
78
+ // Then clear it
79
+ await sySelect.vm.$emit('update:modelValue', null)
80
+
81
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
82
+ })
83
+
84
+ it('emits update:filters event to remove filter when value is undefined', async () => {
85
+ // First set a value
86
+ const sySelect = wrapper.findComponent(SySelect)
87
+ await sySelect.vm.$emit('update:modelValue', 'option1')
88
+
89
+ // Then clear it
90
+ await sySelect.vm.$emit('update:modelValue', undefined)
91
+
92
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
93
+ })
94
+
95
+ it('handles clear button click', async () => {
96
+ const sySelect = wrapper.findComponent(SySelect)
97
+ await sySelect.vm.$emit('click:clear')
98
+
99
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
100
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
101
+ })
102
+
103
+ it('updates existing filter when one already exists', async () => {
104
+ const existingFilters = [{ key: 'test', value: 'option1', type: 'select' as FilterType }]
105
+ await wrapper.setProps({ filters: existingFilters })
106
+
107
+ const sySelect = wrapper.findComponent(SySelect)
108
+ await sySelect.vm.$emit('update:modelValue', 'option2')
109
+
110
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
111
+ { key: 'test', value: 'option2', type: 'select' as FilterType },
112
+ ])
113
+ })
114
+
115
+ it('works with object values', async () => {
116
+ const objectHeader = {
117
+ title: 'Test Object Select',
118
+ key: 'test',
119
+ filterOptions: [
120
+ { text: 'Option 1', value: { id: 1, name: 'Option 1' } },
121
+ { text: 'Option 2', value: { id: 2, name: 'Option 2' } },
122
+ ],
123
+ }
124
+
125
+ await wrapper.setProps({ header: objectHeader })
126
+
127
+ const sySelect = wrapper.findComponent(SySelect)
128
+ await sySelect.vm.$emit('update:modelValue', { id: 1, name: 'Option 1' })
129
+
130
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
131
+ { key: 'test', value: { id: 1, name: 'Option 1' }, type: 'select' as FilterType },
132
+ ])
133
+ })
134
+
135
+ it('generates unique key when header.key and header.value are absent', async () => {
136
+ // Recréer le wrapper avec un header sans key ni value, seulement title
137
+ const headerWithoutKey = {
138
+ title: 'Test Select',
139
+ filterOptions: [
140
+ { text: 'Option 1', value: 'option1' },
141
+ { text: 'Option 2', value: 'option2' },
142
+ ],
143
+ }
144
+ const newWrapper = mount(SelectFilter, {
145
+ global: {
146
+ plugins: [vuetify],
147
+ stubs: {
148
+ SySelect: {
149
+ template: '<div class="sy-select-stub" data-testid="sy-select"></div>',
150
+ props: ['modelValue', 'label', 'items', 'clearable', 'density', 'hideDetails'],
151
+ },
152
+ },
153
+ },
154
+ props: {
155
+ header: headerWithoutKey,
156
+ filters: [],
157
+ filterValue: undefined,
158
+ },
159
+ })
160
+
161
+ // Émettre une valeur pour déclencher la mise à jour du filtre
162
+ const sySelect = newWrapper.findComponent(SySelect)
163
+ await sySelect.vm.$emit('update:modelValue', 'option1')
164
+
165
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le titre
166
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
167
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
168
+ expect(emittedFilters.length).toBe(1)
169
+ expect(emittedFilters[0].key).toBe('filter_Test Select')
170
+ expect(emittedFilters[0].value).toBe('option1')
171
+ expect(emittedFilters[0].type).toBe('select')
172
+ })
173
+
174
+ it('generates unique key with timestamp when all header properties are absent', async () => {
175
+ // Mock Date.now() pour avoir une valeur prévisible dans le test
176
+ const originalDateNow = Date.now
177
+ const mockTimestamp = 1622548800000 // 2021-06-01T12:00:00.000Z
178
+ global.Date.now = vi.fn(() => mockTimestamp)
179
+
180
+ // Recréer le wrapper avec un header complètement vide
181
+ const emptyHeader = {
182
+ filterOptions: [
183
+ { text: 'Option 1', value: 'option1' },
184
+ { text: 'Option 2', value: 'option2' },
185
+ ],
186
+ }
187
+ const newWrapper = mount(SelectFilter, {
188
+ global: {
189
+ plugins: [vuetify],
190
+ stubs: {
191
+ SySelect: {
192
+ template: '<div class="sy-select-stub" data-testid="sy-select"></div>',
193
+ props: ['modelValue', 'label', 'items', 'clearable', 'density', 'hideDetails'],
194
+ },
195
+ },
196
+ },
197
+ props: {
198
+ header: emptyHeader,
199
+ filters: [],
200
+ filterValue: undefined,
201
+ },
202
+ })
203
+
204
+ // Émettre une valeur pour déclencher la mise à jour du filtre
205
+ const sySelect = newWrapper.findComponent(SySelect)
206
+ await sySelect.vm.$emit('update:modelValue', 'option1')
207
+
208
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le timestamp
209
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
210
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
211
+ expect(emittedFilters.length).toBe(1)
212
+ expect(emittedFilters[0].key).toBe(`filter_${mockTimestamp}`)
213
+ expect(emittedFilters[0].value).toBe('option1')
214
+ expect(emittedFilters[0].type).toBe('select')
215
+
216
+ // Restaurer Date.now
217
+ global.Date.now = originalDateNow
218
+ })
219
+ })
@@ -0,0 +1,260 @@
1
+ import { describe, it, expect, beforeEach, vi } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import { createVuetify } from 'vuetify'
4
+ import * as components from 'vuetify/components'
5
+ import * as directives from 'vuetify/directives'
6
+
7
+ import TextFilter from '../TextFilter.vue'
8
+ import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
9
+ import type { FilterType } from '../../types'
10
+ import { filterItems } from '../../tableFilterUtils'
11
+
12
+ const vuetify = createVuetify({
13
+ components,
14
+ directives,
15
+ })
16
+
17
+ describe('TextFilter.vue', () => {
18
+ let wrapper: ReturnType<typeof mount<typeof TextFilter>>
19
+ const header = { title: 'Test Column', key: 'test' }
20
+ const filters: { key: string, value: string, type: FilterType }[] = []
21
+
22
+ beforeEach(() => {
23
+ wrapper = mount(TextFilter, {
24
+ global: {
25
+ plugins: [vuetify],
26
+ stubs: {
27
+ SyTextField: {
28
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field" :label="label" :clearable="clearable" :density="density" :hideDetails="hideDetails"></div>',
29
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant'],
30
+ },
31
+ },
32
+ },
33
+ props: {
34
+ header,
35
+ filters,
36
+ filterValue: '',
37
+ debounceTime: 0, // Set debounce time to 0 for testing
38
+ },
39
+ })
40
+ })
41
+
42
+ it('renders correctly with default props', () => {
43
+ expect(wrapper.exists()).toBe(true)
44
+ expect(wrapper.findComponent(SyTextField).exists()).toBe(true)
45
+ })
46
+
47
+ it('passes the correct props to SyTextField', () => {
48
+ const syTextField = wrapper.findComponent(SyTextField)
49
+ // Use attributes for stubbed components
50
+ expect(syTextField.attributes('label')).toBe('Test Column')
51
+ expect(syTextField.attributes('clearable')).toBe('true')
52
+ expect(syTextField.attributes('density')).toBe('compact')
53
+ expect(syTextField.attributes('hidedetails')).toBe('true')
54
+ })
55
+
56
+ it('emits update:filters event when value changes', async () => {
57
+ const syTextField = wrapper.findComponent(SyTextField)
58
+ await syTextField.vm.$emit('update:modelValue', 'test value')
59
+
60
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
61
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
62
+ { key: 'test', value: 'test value', type: 'text' as FilterType },
63
+ ])
64
+ })
65
+
66
+ it('emits update:filters event to remove filter when value is empty', async () => {
67
+ // First set a value
68
+ const syTextField = wrapper.findComponent(SyTextField)
69
+ await syTextField.vm.$emit('update:modelValue', 'test value')
70
+
71
+ // Then clear it
72
+ await syTextField.vm.$emit('update:modelValue', '')
73
+
74
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
75
+ })
76
+
77
+ it('handles clear button click', async () => {
78
+ const syTextField = wrapper.findComponent(SyTextField)
79
+ await syTextField.vm.$emit('click:clear')
80
+
81
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
82
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
83
+ })
84
+
85
+ it('updates existing filter when one already exists', async () => {
86
+ const existingFilters = [{ key: 'test', value: 'old value', type: 'text' as FilterType }]
87
+ await wrapper.setProps({ filters: existingFilters })
88
+
89
+ const syTextField = wrapper.findComponent(SyTextField)
90
+ await syTextField.vm.$emit('update:modelValue', 'new value')
91
+
92
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
93
+ { key: 'test', value: 'new value', type: 'text' as FilterType },
94
+ ])
95
+ })
96
+
97
+ it('generates unique key when header.key and header.value are absent', async () => {
98
+ // Recréer le wrapper avec un header sans key ni value, seulement title
99
+ const headerWithoutKey = { title: 'Test Column' }
100
+ const newWrapper = mount(TextFilter, {
101
+ global: {
102
+ plugins: [vuetify],
103
+ stubs: {
104
+ SyTextField: {
105
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
106
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails'],
107
+ },
108
+ },
109
+ },
110
+ props: {
111
+ header: headerWithoutKey,
112
+ filters: [],
113
+ filterValue: '',
114
+ debounceTime: 0, // Set debounce time to 0 for testing
115
+ },
116
+ })
117
+
118
+ // Émettre une valeur pour déclencher la mise à jour du filtre
119
+ const syTextField = newWrapper.findComponent(SyTextField)
120
+ await syTextField.vm.$emit('update:modelValue', 'test value')
121
+
122
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le titre
123
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
124
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
125
+ expect(emittedFilters.length).toBe(1)
126
+ expect(emittedFilters[0].key).toBe('filter_Test Column')
127
+ expect(emittedFilters[0].value).toBe('test value')
128
+ expect(emittedFilters[0].type).toBe('text')
129
+ })
130
+
131
+ it('generates unique key with timestamp when all header properties are absent', async () => {
132
+ // Mock Date.now() pour avoir une valeur prévisible dans le test
133
+ const originalDateNow = Date.now
134
+ const mockTimestamp = 1622548800000 // 2021-06-01T12:00:00.000Z
135
+ global.Date.now = vi.fn(() => mockTimestamp)
136
+
137
+ // Recréer le wrapper avec un header complètement vide
138
+ const emptyHeader = {}
139
+ const newWrapper = mount(TextFilter, {
140
+ global: {
141
+ plugins: [vuetify],
142
+ stubs: {
143
+ SyTextField: {
144
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
145
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails'],
146
+ },
147
+ },
148
+ },
149
+ props: {
150
+ header: emptyHeader,
151
+ filters: [],
152
+ filterValue: '',
153
+ debounceTime: 0, // Set debounce time to 0 for testing
154
+ },
155
+ })
156
+
157
+ // Émettre une valeur pour déclencher la mise à jour du filtre
158
+ const syTextField = newWrapper.findComponent(SyTextField)
159
+ await syTextField.vm.$emit('update:modelValue', 'test value')
160
+
161
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le timestamp
162
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
163
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
164
+ expect(emittedFilters.length).toBe(1)
165
+ expect(emittedFilters[0].key).toBe(`filter_${mockTimestamp}`)
166
+ expect(emittedFilters[0].value).toBe('test value')
167
+ expect(emittedFilters[0].type).toBe('text')
168
+
169
+ // Restaurer Date.now
170
+ global.Date.now = originalDateNow
171
+ })
172
+
173
+ describe('Text filter rules', () => {
174
+ const testItems = [
175
+ { id: 1, text: 'apple' },
176
+ { id: 2, text: 'banana' },
177
+ { id: 3, text: 'Cherry' },
178
+ { id: 4, text: 'date' },
179
+ { id: 5, text: 'Elderberry' },
180
+ { id: 6, text: 'fig' },
181
+ { id: 7, text: 'grape' },
182
+ { id: 8, text: '' }, // Empty string
183
+ { id: 9, text: null }, // Null value
184
+ ]
185
+
186
+ it('performs case-insensitive search by default', () => {
187
+ const filters = [{ key: 'text', value: 'cherry', type: 'text' as FilterType }]
188
+ const result = filterItems(testItems, filters)
189
+ expect(result).toHaveLength(1)
190
+ expect(result[0].id).toBe(3)
191
+ })
192
+
193
+ it('supports wildcard * for any string of characters', () => {
194
+ const filters = [{ key: 'text', value: 'a*', type: 'text' as FilterType }]
195
+ const result = filterItems(testItems, filters)
196
+ expect(result).toHaveLength(2)
197
+ expect(result.map(item => item.id)).toEqual([1, 2])
198
+ })
199
+
200
+ it('supports wildcard ? for any single character', () => {
201
+ const filters = [{ key: 'text', value: '????', type: 'text' as FilterType }]
202
+ const result = filterItems(testItems, filters)
203
+ expect(result).toHaveLength(3)
204
+ expect(result.map(item => item.id)).toEqual([1, 4, 6])
205
+ })
206
+
207
+ it('supports case-sensitive search with double quotes', () => {
208
+ const filters = [{ key: 'text', value: '"Cherry"', type: 'text' as FilterType }]
209
+ const result = filterItems(testItems, filters)
210
+ expect(result).toHaveLength(1)
211
+ expect(result[0].id).toBe(3)
212
+
213
+ // Should not match lowercase
214
+ const filters2 = [{ key: 'text', value: '"cherry"', type: 'text' as FilterType }]
215
+ const result2 = filterItems(testItems, filters2)
216
+ expect(result2).toHaveLength(0)
217
+ })
218
+
219
+ it('supports prefix search with wildcard', () => {
220
+ const filters = [{ key: 'text', value: 'e*', type: 'text' as FilterType }]
221
+ const result = filterItems(testItems, filters)
222
+ expect(result).toHaveLength(1)
223
+ expect(result[0].id).toBe(5)
224
+ })
225
+
226
+ it('supports exact length search with =????', () => {
227
+ const filters = [{ key: 'text', value: '=????', type: 'text' as FilterType }]
228
+ const result = filterItems(testItems, filters)
229
+ expect(result).toHaveLength(3)
230
+ expect(result.map(item => item.id)).toEqual([1, 4, 6])
231
+
232
+ // Test with different length
233
+ const filters2 = [{ key: 'text', value: '=?????', type: 'text' as FilterType }]
234
+ const result2 = filterItems(testItems, filters2)
235
+ expect(result2).toHaveLength(2)
236
+ expect(result2.map(item => item.id)).toEqual([2, 5])
237
+ })
238
+
239
+ it('supports empty or null value search with <>?*', () => {
240
+ const filters = [{ key: 'text', value: '<>?*', type: 'text' as FilterType }]
241
+ const result = filterItems(testItems, filters)
242
+ expect(result).toHaveLength(2)
243
+ expect(result.map(item => item.id)).toEqual([8, 9])
244
+ })
245
+
246
+ it('supports alphabetical comparison with >', () => {
247
+ const filters = [{ key: 'text', value: '>f', type: 'text' as FilterType }]
248
+ const result = filterItems(testItems, filters)
249
+ expect(result).toHaveLength(2)
250
+ expect(result.map(item => item.id)).toEqual([6, 7])
251
+ })
252
+
253
+ it('combines multiple wildcards correctly', () => {
254
+ const filters = [{ key: 'text', value: '*r*', type: 'text' as FilterType }]
255
+ const result = filterItems(testItems, filters)
256
+ expect(result).toHaveLength(3)
257
+ expect(result.map(item => item.id)).toEqual([3, 5, 7])
258
+ })
259
+ })
260
+ })
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Fonctions utilitaires pour formater les données dans les tableaux
3
+ */
4
+
5
+ /**
6
+ * Formate un objet période pour l'affichage
7
+ *
8
+ * @param value - L'objet période à formater
9
+ * @returns Chaîne de période formatée
10
+ */
11
+ export function formatPeriod(value: unknown): string {
12
+ // Traite les valeurs null ou undefined
13
+ if (value === null || value === undefined) {
14
+ return ''
15
+ }
16
+
17
+ // Traite les objets période
18
+ if (typeof value === 'object' && value !== null && 'from' in value && 'to' in value) {
19
+ const periodValue = value as { from?: string | null, to?: string | null }
20
+ const from = periodValue.from || ''
21
+ const to = periodValue.to || ''
22
+
23
+ // Formate comme "du [date] au [date]"
24
+ if (from && to) {
25
+ return `du ${from} au ${to}`
26
+ }
27
+ // Si seule la date de début est présente
28
+ else if (from) {
29
+ return `du ${from}`
30
+ }
31
+ // Si seule la date de fin est présente
32
+ else if (to) {
33
+ return `au ${to}`
34
+ }
35
+ }
36
+
37
+ // Repli sur la représentation en chaîne de caractères
38
+ return String(value)
39
+ }
40
+
41
+ /**
42
+ * Traite les éléments du tableau pour formater les champs spéciaux comme les périodes
43
+ *
44
+ * @param items - Les éléments du tableau à traiter
45
+ * @returns Éléments traités avec des valeurs formatées
46
+ */
47
+ export function processItems(items: Record<string, unknown>[]): Record<string, unknown>[] {
48
+ if (!items || !Array.isArray(items)) return []
49
+
50
+ return items.map((item) => {
51
+ if (!item) return item
52
+
53
+ const newItem = { ...item } as Record<string, unknown>
54
+
55
+ // Traite tous les champs de l'élément
56
+ Object.keys(newItem).forEach((key) => {
57
+ const value = newItem[key]
58
+
59
+ // Vérifie si ce champ est un objet de type période (possède les propriétés from et to)
60
+ if (value
61
+ && typeof value === 'object'
62
+ && value !== null
63
+ && 'from' in value
64
+ && 'to' in value) {
65
+ // Formate la période et la stocke à nouveau
66
+ newItem[key] = formatPeriod(value)
67
+ }
68
+ })
69
+
70
+ return newItem
71
+ })
72
+ }
@@ -0,0 +1,7 @@
1
+ export const locales = {
2
+ resetFilters: 'Réinitialiser les filtres',
3
+ noData: 'Aucune donnée disponible',
4
+ columnOrder: (columnTitle: string) => `Ordonner par ${columnTitle}`,
5
+ ResizableColumn: 'Redimensionner la colonne',
6
+ resizeColumn: (columnTitle: string) => `Redimensionner la colonne ${columnTitle}`,
7
+ }
@@ -0,0 +1,61 @@
1
+ import { onMounted } from 'vue'
2
+
3
+ /**
4
+ * Utility function to enhance table accessibility
5
+ */
6
+ export function useTableAccessibility({
7
+ tableId,
8
+ }: {
9
+ tableId: string
10
+ }) {
11
+ function setupAccessibility() {
12
+ onMounted(() => {
13
+ const captionElement = document.querySelector(`#${tableId} caption`)
14
+ if (captionElement && captionElement.textContent?.trim() === '') {
15
+ captionElement.setAttribute('aria-label', 'Table caption')
16
+ }
17
+
18
+ const inputs = document.querySelectorAll(`#${tableId} input`)
19
+ inputs.forEach((input) => {
20
+ (input as HTMLElement).removeAttribute('aria-describedby')
21
+ })
22
+
23
+ const fields = document.querySelectorAll(`#${tableId} .v-field`)
24
+ fields.forEach((field) => {
25
+ const element = field as HTMLElement
26
+ element.setAttribute('tabindex', '0')
27
+
28
+ // Remove immediately if it exists
29
+ if (element.hasAttribute('aria-controls')) {
30
+ element.removeAttribute('aria-controls')
31
+ }
32
+
33
+ // Check again after a delay
34
+ setTimeout(() => {
35
+ if (element.hasAttribute('aria-controls')) {
36
+ element.removeAttribute('aria-controls')
37
+ }
38
+ }, 500)
39
+ })
40
+
41
+ const fieldLabels = document.querySelectorAll(`#${tableId} .v-field`)
42
+ fieldLabels.forEach((fieldLabel) => {
43
+ (fieldLabel as HTMLElement).setAttribute('aria-label', 'items per page')
44
+ })
45
+
46
+ const fieldTitles = document.querySelectorAll(`#${tableId} .v-field`)
47
+ fieldTitles.forEach((fieldTitle) => {
48
+ (fieldTitle as HTMLElement).setAttribute('title', 'items per page')
49
+ })
50
+
51
+ const th = document.querySelectorAll(`#${tableId} th`)
52
+ for (let i = 0; i < th.length; i++) {
53
+ th[i].setAttribute('scope', 'col')
54
+ }
55
+ })
56
+ }
57
+
58
+ return {
59
+ setupAccessibility,
60
+ }
61
+ }