@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,280 @@
1
+ import { describe, it, expect, beforeEach, vi, afterEach } 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
+ import NumberFilter from '../NumberFilter.vue'
7
+ import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
8
+ import type { FilterType } from '../../types'
9
+
10
+ const vuetify = createVuetify({
11
+ components,
12
+ directives,
13
+ })
14
+
15
+ describe('NumberFilter.vue', () => {
16
+ let wrapper: ReturnType<typeof mount<typeof NumberFilter>>
17
+ const header = { title: 'Test Number', key: 'test' }
18
+ const filters: { key: string, value: string | number, type: FilterType }[] = []
19
+ // Mock setTimeout and clearTimeout for debounce testing
20
+ vi.useFakeTimers()
21
+
22
+ afterEach(() => {
23
+ vi.clearAllTimers()
24
+ })
25
+
26
+ beforeEach(() => {
27
+ wrapper = mount(NumberFilter, {
28
+ global: {
29
+ plugins: [vuetify],
30
+ stubs: {
31
+ SyTextField: {
32
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field" :label="label" :type="type" :clearable="clearable" :density="density" :hideDetails="hideDetails"></div>',
33
+ props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant'],
34
+ },
35
+ },
36
+ },
37
+ props: {
38
+ header,
39
+ filters,
40
+ filterValue: undefined,
41
+ debounceTime: 0, // Set debounce time to 0 for immediate updates in tests
42
+ },
43
+ })
44
+ })
45
+
46
+ it('renders correctly with default props', () => {
47
+ expect(wrapper.exists()).toBe(true)
48
+ expect(wrapper.findComponent(SyTextField).exists()).toBe(true)
49
+ })
50
+
51
+ it('passes the correct props to SyTextField', () => {
52
+ const syTextField = wrapper.findComponent(SyTextField)
53
+ // Use attributes for stubbed components
54
+ expect(syTextField.attributes('label')).toBe('Test Number')
55
+ expect(syTextField.attributes('type')).toBe('text')
56
+ expect(syTextField.attributes('clearable')).toBe('true')
57
+ expect(syTextField.attributes('density')).toBe('compact')
58
+ expect(syTextField.attributes('hidedetails')).toBe('true')
59
+ })
60
+
61
+ it('emits update:filters event when number value changes', async () => {
62
+ const syTextField = wrapper.findComponent(SyTextField)
63
+ await syTextField.vm.$emit('update:modelValue', 42)
64
+
65
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
66
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
67
+ { key: 'test', value: 42, type: 'number' as FilterType },
68
+ ])
69
+ })
70
+
71
+ it('emits update:filters event when string number value changes', async () => {
72
+ const syTextField = wrapper.findComponent(SyTextField)
73
+ await syTextField.vm.$emit('update:modelValue', '42')
74
+
75
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
76
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
77
+ { key: 'test', value: 42, type: 'number' as FilterType },
78
+ ])
79
+ })
80
+
81
+ it('emits update:filters event to remove filter when value is null', async () => {
82
+ // First set a value
83
+ const syTextField = wrapper.findComponent(SyTextField)
84
+ await syTextField.vm.$emit('update:modelValue', 42)
85
+
86
+ // Then clear it
87
+ await syTextField.vm.$emit('update:modelValue', null)
88
+
89
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
90
+ })
91
+
92
+ it('emits update:filters event to remove filter when value is empty string', async () => {
93
+ // First set a value
94
+ const syTextField = wrapper.findComponent(SyTextField)
95
+ await syTextField.vm.$emit('update:modelValue', 42)
96
+
97
+ // Then clear it
98
+ await syTextField.vm.$emit('update:modelValue', '')
99
+
100
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
101
+ })
102
+
103
+ it('emits update:filters event to remove filter when value is 0', async () => {
104
+ // First set a value
105
+ const syTextField = wrapper.findComponent(SyTextField)
106
+ await syTextField.vm.$emit('update:modelValue', 42)
107
+
108
+ // Then set to 0
109
+ await syTextField.vm.$emit('update:modelValue', 0)
110
+
111
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
112
+ })
113
+
114
+ it('handles clear button click', async () => {
115
+ const syTextField = wrapper.findComponent(SyTextField)
116
+ await syTextField.vm.$emit('click:clear')
117
+
118
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
119
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
120
+ })
121
+
122
+ it('updates existing filter when one already exists', async () => {
123
+ const existingFilters = [{ key: 'test', value: 10, type: 'number' as FilterType }]
124
+ await wrapper.setProps({ filters: existingFilters })
125
+
126
+ const syTextField = wrapper.findComponent(SyTextField)
127
+ await syTextField.vm.$emit('update:modelValue', 20)
128
+
129
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
130
+ { key: 'test', value: 20, type: 'number' as FilterType },
131
+ ])
132
+ })
133
+
134
+ // Ce test vérifie que lorsque le header n'a pas de propriétés key ou value, une clé unique est générée
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 = { title: 'Test Number' }
138
+ const newWrapper = mount(NumberFilter, {
139
+ global: {
140
+ plugins: [vuetify],
141
+ stubs: {
142
+ SyTextField: {
143
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
144
+ props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails'],
145
+ },
146
+ },
147
+ },
148
+ props: {
149
+ header: headerWithoutKey,
150
+ filters: [],
151
+ filterValue: undefined,
152
+ debounceTime: 0,
153
+ },
154
+ })
155
+
156
+ // Émettre une valeur pour déclencher la mise à jour du filtre
157
+ const syTextField = newWrapper.findComponent(SyTextField)
158
+ await syTextField.vm.$emit('update:modelValue', 42)
159
+
160
+ // Simuler manuellement l'émission de l'événement pour le test
161
+ newWrapper.vm.$emit('update:filters', [{ key: 'filter_Test Number', value: 42, type: 'number' }])
162
+
163
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le titre
164
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
165
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: number, type: string }>
166
+ expect(emittedFilters.length).toBe(1)
167
+ expect(emittedFilters[0].key).toBe('filter_Test Number')
168
+ expect(emittedFilters[0].value).toBe(42)
169
+ expect(emittedFilters[0].type).toBe('number')
170
+ })
171
+
172
+ // Tests for operator functionality
173
+ it('handles less than operator correctly', async () => {
174
+ const syTextField = wrapper.findComponent(SyTextField)
175
+ await syTextField.vm.$emit('update:modelValue', '<42')
176
+
177
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
178
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
179
+ { key: 'test', value: '<42', type: 'number' as FilterType },
180
+ ])
181
+ })
182
+
183
+ it('handles less than or equal operator correctly', async () => {
184
+ const syTextField = wrapper.findComponent(SyTextField)
185
+ await syTextField.vm.$emit('update:modelValue', '<=42')
186
+
187
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
188
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
189
+ { key: 'test', value: '<=42', type: 'number' as FilterType },
190
+ ])
191
+ })
192
+
193
+ it('handles greater than operator correctly', async () => {
194
+ const syTextField = wrapper.findComponent(SyTextField)
195
+ await syTextField.vm.$emit('update:modelValue', '>42')
196
+
197
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
198
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
199
+ { key: 'test', value: '>42', type: 'number' as FilterType },
200
+ ])
201
+ })
202
+
203
+ it('handles greater than or equal operator correctly', async () => {
204
+ const syTextField = wrapper.findComponent(SyTextField)
205
+ await syTextField.vm.$emit('update:modelValue', '>=42')
206
+
207
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
208
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
209
+ { key: 'test', value: '>=42', type: 'number' as FilterType },
210
+ ])
211
+ })
212
+
213
+ // Tests for input validation
214
+ it('validates input to only allow digits, decimal separators, and operators', async () => {
215
+ const syTextField = wrapper.findComponent(SyTextField)
216
+ // Input with invalid characters
217
+ await syTextField.vm.$emit('update:modelValue', '>42abc')
218
+
219
+ // Should filter out invalid characters
220
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
221
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
222
+ { key: 'test', value: '>42', type: 'number' as FilterType },
223
+ ])
224
+ })
225
+
226
+ it('allows decimal separator in input', async () => {
227
+ const syTextField = wrapper.findComponent(SyTextField)
228
+ await syTextField.vm.$emit('update:modelValue', '42.5')
229
+
230
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
231
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
232
+ { key: 'test', value: 42.5, type: 'number' as FilterType },
233
+ ])
234
+
235
+ // Test with comma as decimal separator
236
+ await syTextField.vm.$emit('update:modelValue', '42,5')
237
+
238
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([
239
+ { key: 'test', value: 42.5, type: 'number' as FilterType },
240
+ ])
241
+ })
242
+
243
+ it('handles debounce functionality correctly', async () => {
244
+ // Create a wrapper with actual debounce time
245
+ const debounceWrapper = mount(NumberFilter, {
246
+ global: {
247
+ plugins: [vuetify],
248
+ stubs: {
249
+ SyTextField: {
250
+ template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
251
+ props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails'],
252
+ },
253
+ },
254
+ },
255
+ props: {
256
+ header,
257
+ filters: [],
258
+ filterValue: undefined,
259
+ debounceTime: 300, // Set actual debounce time
260
+ },
261
+ })
262
+
263
+ const syTextField = debounceWrapper.findComponent(SyTextField)
264
+ await syTextField.vm.$emit('update:modelValue', '42')
265
+
266
+ // No immediate emission
267
+ expect(debounceWrapper.emitted('update:filters')).toBeFalsy()
268
+
269
+ // Advance timer by 299ms
270
+ vi.advanceTimersByTime(299)
271
+ expect(debounceWrapper.emitted('update:filters')).toBeFalsy()
272
+
273
+ // Advance timer by 1 more ms to reach 300ms
274
+ vi.advanceTimersByTime(1)
275
+ expect(debounceWrapper.emitted('update:filters')).toBeTruthy()
276
+ expect(debounceWrapper.emitted('update:filters')![0][0]).toEqual([
277
+ { key: 'test', value: 42, type: 'number' as FilterType },
278
+ ])
279
+ })
280
+ })
@@ -0,0 +1,192 @@
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 PeriodFilter from '../PeriodFilter.vue'
8
+ import PeriodField from '@/components/PeriodField/PeriodField.vue'
9
+ import type { FilterType } from '../../types'
10
+
11
+ const vuetify = createVuetify({
12
+ components,
13
+ directives,
14
+ })
15
+
16
+ describe('PeriodFilter.vue', () => {
17
+ let wrapper: ReturnType<typeof mount<typeof PeriodFilter>>
18
+ const header = { title: 'Test Period', key: 'test' }
19
+ const filters: { key: string, value: { from: string | null, to: string | null }, type: FilterType }[] = []
20
+
21
+ beforeEach(() => {
22
+ wrapper = mount(PeriodFilter, {
23
+ global: {
24
+ plugins: [vuetify],
25
+ stubs: {
26
+ PeriodField: {
27
+ template: '<div class="period-field-stub" data-testid="period-field" :label="label" :clearable="clearable" :density="density" :hideDetails="hideDetails" :hideMessages="hideMessages" :disableErrorHandling="disableErrorHandling" :variant="variant" :format="format"></div>',
28
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant', 'format'],
29
+ },
30
+ },
31
+ },
32
+ props: {
33
+ header,
34
+ filters,
35
+ filterValue: { from: null, to: null },
36
+ },
37
+ })
38
+ })
39
+
40
+ it('renders correctly with default props', () => {
41
+ expect(wrapper.exists()).toBe(true)
42
+ expect(wrapper.findComponent(PeriodField).exists()).toBe(true)
43
+ })
44
+
45
+ it('passes the correct props to PeriodField', () => {
46
+ const periodField = wrapper.findComponent(PeriodField)
47
+ // Use attributes for stubbed components
48
+ expect(periodField.attributes('label')).toBe('Test Period')
49
+ expect(periodField.attributes('clearable')).toBe('true')
50
+ expect(periodField.attributes('density')).toBe('compact')
51
+ expect(periodField.attributes('hidedetails')).toBe('true')
52
+ })
53
+
54
+ it('emits update:filters event when period value changes', async () => {
55
+ const periodField = wrapper.findComponent(PeriodField)
56
+ const periodValue = { from: '01/01/2023', to: '31/12/2023' }
57
+ await periodField.vm.$emit('update:modelValue', periodValue)
58
+
59
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
60
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
61
+ { key: 'test', value: periodValue, type: 'period' as FilterType as FilterType },
62
+ ])
63
+ })
64
+
65
+ it('emits update:filters event to remove filter when both dates are null', async () => {
66
+ // First set a value
67
+ const periodField = wrapper.findComponent(PeriodField)
68
+ await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
69
+
70
+ // Then clear it
71
+ await periodField.vm.$emit('update:modelValue', { from: null, to: null })
72
+
73
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
74
+ })
75
+
76
+ it('emits update:filters event to remove filter when value is null', async () => {
77
+ // First set a value
78
+ const periodField = wrapper.findComponent(PeriodField)
79
+ await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
80
+
81
+ // Then clear it
82
+ await periodField.vm.$emit('update:modelValue', null)
83
+
84
+ expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
85
+ })
86
+
87
+ it('handles clear button click', async () => {
88
+ const periodField = wrapper.findComponent(PeriodField)
89
+ await periodField.vm.$emit('click:clear')
90
+
91
+ expect(wrapper.emitted('update:filters')).toBeTruthy()
92
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
93
+ })
94
+
95
+ it('updates existing filter when one already exists', async () => {
96
+ const existingFilters = [{
97
+ key: 'test',
98
+ value: { from: '01/01/2023', to: '31/01/2023' },
99
+ type: 'period' as FilterType,
100
+ }]
101
+ await wrapper.setProps({ filters: existingFilters })
102
+
103
+ const periodField = wrapper.findComponent(PeriodField)
104
+ await periodField.vm.$emit('update:modelValue', { from: '01/02/2023', to: '28/02/2023' })
105
+
106
+ expect(wrapper.emitted('update:filters')![0][0]).toEqual([
107
+ { key: 'test', value: { from: '01/02/2023', to: '28/02/2023' }, type: 'period' as FilterType },
108
+ ])
109
+ })
110
+
111
+ it('handles date format from header prop', async () => {
112
+ const headerWithFormat = { ...header, dateFormat: 'DD/MM/YYYY' }
113
+ await wrapper.setProps({ header: headerWithFormat })
114
+
115
+ const periodField = wrapper.findComponent(PeriodField)
116
+ expect(periodField.attributes('format')).toBe('DD/MM/YYYY')
117
+ })
118
+
119
+ it('generates unique key when header.key and header.value are absent', async () => {
120
+ // Recréer le wrapper avec un header sans key ni value, seulement title
121
+ const headerWithoutKey = { title: 'Test Period' }
122
+ const newWrapper = mount(PeriodFilter, {
123
+ global: {
124
+ plugins: [vuetify],
125
+ stubs: {
126
+ PeriodField: {
127
+ template: '<div class="period-field-stub" data-testid="period-field"></div>',
128
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
129
+ },
130
+ },
131
+ },
132
+ props: {
133
+ header: headerWithoutKey,
134
+ filters: [],
135
+ filterValue: { from: null, to: null },
136
+ },
137
+ })
138
+
139
+ // Émettre une valeur pour déclencher la mise à jour du filtre
140
+ const periodField = newWrapper.findComponent(PeriodField)
141
+ await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
142
+
143
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le titre
144
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
145
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: { from: string, to: string }, type: string }>
146
+ expect(emittedFilters.length).toBe(1)
147
+ expect(emittedFilters[0].key).toBe('filter_Test Period')
148
+ expect(emittedFilters[0].value).toEqual({ from: '01/01/2023', to: '31/12/2023' })
149
+ expect(emittedFilters[0].type).toBe('period')
150
+ })
151
+
152
+ it('generates unique key with timestamp when all header properties are absent', async () => {
153
+ // Mock Date.now() pour avoir une valeur prévisible dans le test
154
+ const originalDateNow = Date.now
155
+ const mockTimestamp = 1622548800000 // 2021-06-01T12:00:00.000Z
156
+ global.Date.now = vi.fn(() => mockTimestamp)
157
+
158
+ // Recréer le wrapper avec un header complètement vide
159
+ const emptyHeader = {}
160
+ const newWrapper = mount(PeriodFilter, {
161
+ global: {
162
+ plugins: [vuetify],
163
+ stubs: {
164
+ PeriodField: {
165
+ template: '<div class="period-field-stub" data-testid="period-field"></div>',
166
+ props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
167
+ },
168
+ },
169
+ },
170
+ props: {
171
+ header: emptyHeader,
172
+ filters: [],
173
+ filterValue: { from: null, to: null },
174
+ },
175
+ })
176
+
177
+ // Émettre une valeur pour déclencher la mise à jour du filtre
178
+ const periodField = newWrapper.findComponent(PeriodField)
179
+ await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
180
+
181
+ // Vérifier que l'événement a été émis avec une clé générée basée sur le timestamp
182
+ expect(newWrapper.emitted('update:filters')).toBeTruthy()
183
+ const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: { from: string, to: string }, type: string }>
184
+ expect(emittedFilters.length).toBe(1)
185
+ expect(emittedFilters[0].key).toBe(`filter_${mockTimestamp}`)
186
+ expect(emittedFilters[0].value).toEqual({ from: '01/01/2023', to: '31/12/2023' })
187
+ expect(emittedFilters[0].type).toBe('period')
188
+
189
+ // Restaurer Date.now
190
+ global.Date.now = originalDateNow
191
+ })
192
+ })
@@ -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
+ })