@cnamts/synapse 1.0.26 → 1.0.27

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 (253) hide show
  1. package/dist/{AutocompleteFilter-BPR-a55G.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
  2. package/dist/{DateFilter-CknrJWs2.js → DateFilter-y-GLkAkn.js} +8 -8
  3. package/dist/{NumberFilter-DJ-yNlzv.js → NumberFilter-DN6hIBS7.js} +1 -1
  4. package/dist/{PeriodFilter-CiB5Oa9Z.js → PeriodFilter-MoUUp9qS.js} +1 -1
  5. package/dist/{SelectFilter-EiafX97M.js → SelectFilter-bCbrdLmu.js} +1 -1
  6. package/dist/{TextFilter-BzOmpdxj.js → TextFilter-CvjgEaoM.js} +4 -4
  7. package/dist/apLightTheme2026-ug4Y23ns.js +611 -0
  8. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2369 -353
  9. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
  10. package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
  11. package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
  12. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +9 -10
  13. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
  14. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
  15. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +3 -3
  16. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +3 -3
  17. package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
  18. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -38
  19. package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
  20. package/dist/components/Customs/SyTextField/SyTextField.d.ts +6 -6
  21. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +147 -136
  22. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +62 -54
  23. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +27 -24
  24. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  25. package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
  26. package/dist/components/MonthPicker/MonthPicker.d.ts +23 -23
  27. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +23 -23
  28. package/dist/components/NirField/NirField.d.ts +56 -56
  29. package/dist/components/PasswordField/PasswordField.d.ts +3 -3
  30. package/dist/components/PeriodField/PeriodField.d.ts +236 -212
  31. package/dist/components/PhoneField/PhoneField.d.ts +23 -23
  32. package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
  33. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
  34. package/dist/components/SyTextArea/locales.d.ts +1 -0
  35. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
  36. package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
  37. package/dist/components/Tables/common/SyTablePagination.d.ts +25 -25
  38. package/dist/components/Tables/common/types.d.ts +2 -0
  39. package/dist/components/index.d.ts +1 -0
  40. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
  41. package/dist/composables/unifyValidation/useValidation.d.ts +16 -14
  42. package/dist/design-system-v3.js +81 -80
  43. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
  44. package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
  45. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -100
  46. package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
  47. package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
  48. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
  49. package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
  50. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -101
  51. package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
  52. package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
  53. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
  54. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
  55. package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
  56. package/dist/main-CI6Q9nmO.js +39234 -0
  57. package/dist/synapse.css +1 -1
  58. package/dist/vuetifyConfig.js +208 -72
  59. package/package.json +4 -2
  60. package/src/assets/overrides/_icons.scss +5 -4
  61. package/src/assets/overrides/_otp.scss +4 -4
  62. package/src/assets/overrides/_typography.scss +2 -1
  63. package/src/assets/overrides/_utilities.scss +1 -42
  64. package/src/components/ChipList/ChipList.vue +30 -18
  65. package/src/components/ChipList/tests/chipList.spec.ts +4 -4
  66. package/src/components/CopyBtn/CopyBtn.vue +2 -2
  67. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
  68. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
  69. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
  70. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
  71. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +182 -218
  72. package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
  73. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
  74. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
  75. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
  76. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
  77. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +9 -491
  78. package/src/components/Customs/Selects/SySelect/SySelect.vue +46 -79
  79. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
  80. package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
  81. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +196 -0
  82. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
  83. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
  84. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +2 -2
  85. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
  86. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +8 -8
  87. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
  88. package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
  89. package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
  90. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
  91. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
  92. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +82 -127
  93. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
  94. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
  95. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
  96. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
  97. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
  98. package/src/components/Customs/SyTabs/config.ts +3 -3
  99. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
  100. package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
  101. package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
  102. package/src/components/Customs/SyTextField/SyTextField.vue +23 -15
  103. package/src/components/DataList/DataList.stories.ts +1 -1
  104. package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
  105. package/src/components/DatePicker/CalendarMode/DatePicker.vue +37 -142
  106. package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
  107. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
  108. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +47 -66
  109. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +206 -0
  110. package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
  111. package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
  112. package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
  113. package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
  114. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +129 -54
  115. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
  116. package/src/components/DatePicker/composables/index.ts +1 -0
  117. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
  118. package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
  119. package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
  120. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
  121. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
  122. package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
  123. package/src/components/DialogBox/DialogBox.vue +1 -1
  124. package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
  125. package/src/components/FileUpload/FileUpload.vue +2 -2
  126. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  127. package/src/components/FilterInline/FilterInline.mdx +2 -2
  128. package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
  129. package/src/components/FilterSideBar/FilterSideBar.vue +2 -2
  130. package/src/components/FooterBar/FooterBar.vue +7 -7
  131. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  132. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
  133. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
  134. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
  135. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
  136. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
  137. package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
  138. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
  139. package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
  140. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
  141. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
  142. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
  143. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
  144. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
  145. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
  146. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
  147. package/src/components/NirField/NirField.vue +3 -3
  148. package/src/components/NotificationBar/Notification/Notification.vue +12 -12
  149. package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
  150. package/src/components/PaginatedTable/Pagination.vue +2 -2
  151. package/src/components/PasswordField/PasswordField.vue +8 -8
  152. package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
  153. package/src/components/RangeField/RangeSlider/RangeSlider.vue +2 -2
  154. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  155. package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
  156. package/src/components/SubHeader/SubHeader.vue +1 -1
  157. package/src/components/SyAlert/SyAlert.vue +23 -23
  158. package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
  159. package/src/components/SyTextArea/SyTextArea.vue +235 -83
  160. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
  161. package/src/components/SyTextArea/locales.ts +1 -0
  162. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
  163. package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
  164. package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
  165. package/src/components/TableToolbar/TableToolbar.vue +6 -6
  166. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
  167. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
  168. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -1
  169. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  170. package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
  171. package/src/components/Tables/SyTable/SyTable.vue +2 -1
  172. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
  173. package/src/components/Tables/common/TableHeader.vue +2 -2
  174. package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
  175. package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
  176. package/src/components/Tables/common/tableStyles.scss +6 -6
  177. package/src/components/Tables/common/types.ts +2 -0
  178. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
  179. package/src/components/index.ts +1 -0
  180. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +31 -0
  181. package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
  182. package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
  183. package/src/composables/tests/useError.spec.ts +30 -0
  184. package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
  185. package/src/composables/unifyValidation/documentationValidationProps.ts +5 -5
  186. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
  187. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +30 -0
  188. package/src/composables/unifyValidation/tests/useValidation.spec.ts +6 -2
  189. package/src/composables/unifyValidation/useCustomValidation.ts +19 -9
  190. package/src/composables/unifyValidation/useValidation.ts +18 -21
  191. package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
  192. package/src/composables/useFilterable/useFilterable.ts +11 -7
  193. package/src/composables/useFormFieldErrorHandling.ts +2 -2
  194. package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
  195. package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
  196. package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
  197. package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
  198. package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -103
  199. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  200. package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
  201. package/src/designTokens/tokens/baseTokens.ts +232 -0
  202. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
  203. package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
  204. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -104
  205. package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
  206. package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
  207. package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
  208. package/src/designTokens/tokens/semanticTokens.ts +114 -0
  209. package/src/stories/Components/Components.stories.ts +7 -3
  210. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
  211. package/src/stories/DesignTokens/Colors.mdx +6 -8
  212. package/src/stories/DesignTokens/colors.stories.ts +244 -1081
  213. package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
  214. package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
  215. package/src/utils/tests/insertAt.spec.ts +44 -0
  216. package/dist/apLightTheme-DS0Uy44H.js +0 -954
  217. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +0 -1
  218. package/dist/main-BsJ9ec3i.js +0 -38954
  219. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  220. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  221. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  222. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  223. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
  224. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  225. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  226. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  227. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  228. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  229. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  230. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  231. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  232. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  233. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  234. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  235. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  236. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  237. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  238. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  239. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  240. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  241. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  242. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  243. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  244. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  245. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  246. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  247. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  248. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  249. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  250. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  251. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  252. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  253. /package/src/components/RatingPicker/tests/{RatingPicker.a11y.spect.ts → RatingPicker.a11y.spec.ts} +0 -0
@@ -0,0 +1,176 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import filter from '../number'
3
+
4
+ describe('Number filter logic', () => {
5
+ describe('itemValue non-number', () => {
6
+ it('retourne false si itemValue est une string', () => {
7
+ expect(filter('42', 42)).toBe(false)
8
+ })
9
+
10
+ it('retourne false si itemValue est null', () => {
11
+ expect(filter(null, 42)).toBe(false)
12
+ })
13
+
14
+ it('retourne false si itemValue est undefined', () => {
15
+ expect(filter(undefined, 42)).toBe(false)
16
+ })
17
+
18
+ it('retourne false si itemValue est un boolean', () => {
19
+ expect(filter(true, 1)).toBe(false)
20
+ })
21
+ })
22
+
23
+ describe('filterValue numérique (exact match)', () => {
24
+ it('retourne true pour une valeur égale', () => {
25
+ expect(filter(42, 42)).toBe(true)
26
+ })
27
+
28
+ it('retourne false pour une valeur différente', () => {
29
+ expect(filter(42, 43)).toBe(false)
30
+ })
31
+
32
+ it('retourne true pour 0 === 0', () => {
33
+ expect(filter(0, 0)).toBe(true)
34
+ })
35
+
36
+ it('retourne false pour 0 !== 1', () => {
37
+ expect(filter(0, 1)).toBe(false)
38
+ })
39
+
40
+ it('retourne true pour des négatifs égaux', () => {
41
+ expect(filter(-5, -5)).toBe(true)
42
+ })
43
+ })
44
+
45
+ describe('filterValue string sans opérateur', () => {
46
+ it('retourne true pour correspondance exacte via string', () => {
47
+ expect(filter(42, '42')).toBe(true)
48
+ })
49
+
50
+ it('retourne true pour string avec virgule décimale', () => {
51
+ expect(filter(3.14, '3,14')).toBe(true)
52
+ })
53
+
54
+ it('retourne true pour string avec point décimal', () => {
55
+ expect(filter(3.14, '3.14')).toBe(true)
56
+ })
57
+
58
+ it('retourne false pour une string non numérique', () => {
59
+ expect(filter(42, 'abc')).toBe(false)
60
+ })
61
+
62
+ it('retourne false si la valeur ne correspond pas', () => {
63
+ expect(filter(42, '43')).toBe(false)
64
+ })
65
+ })
66
+
67
+ describe('opérateur =', () => {
68
+ it('retourne true pour =42 avec itemValue 42', () => {
69
+ expect(filter(42, '=42')).toBe(true)
70
+ })
71
+
72
+ it('retourne false pour =42 avec itemValue 43', () => {
73
+ expect(filter(43, '=42')).toBe(false)
74
+ })
75
+
76
+ it('retourne false si la valeur après = est non numérique', () => {
77
+ expect(filter(42, '=abc')).toBe(false)
78
+ })
79
+ })
80
+
81
+ describe('opérateur <>', () => {
82
+ it('retourne true pour <>42 avec itemValue 43', () => {
83
+ expect(filter(43, '<>42')).toBe(true)
84
+ })
85
+
86
+ it('retourne false pour <>42 avec itemValue 42', () => {
87
+ expect(filter(42, '<>42')).toBe(false)
88
+ })
89
+ })
90
+
91
+ describe('opérateur <', () => {
92
+ it('retourne true si itemValue < filterValue', () => {
93
+ expect(filter(10, '<20')).toBe(true)
94
+ })
95
+
96
+ it('retourne false si itemValue === filterValue', () => {
97
+ expect(filter(20, '<20')).toBe(false)
98
+ })
99
+
100
+ it('retourne false si itemValue > filterValue', () => {
101
+ expect(filter(30, '<20')).toBe(false)
102
+ })
103
+ })
104
+
105
+ describe('opérateur <=', () => {
106
+ it('retourne true si itemValue < filterValue', () => {
107
+ expect(filter(10, '<=20')).toBe(true)
108
+ })
109
+
110
+ it('retourne true si itemValue === filterValue', () => {
111
+ expect(filter(20, '<=20')).toBe(true)
112
+ })
113
+
114
+ it('retourne false si itemValue > filterValue', () => {
115
+ expect(filter(30, '<=20')).toBe(false)
116
+ })
117
+ })
118
+
119
+ describe('opérateur >', () => {
120
+ it('retourne true si itemValue > filterValue', () => {
121
+ expect(filter(30, '>20')).toBe(true)
122
+ })
123
+
124
+ it('retourne false si itemValue === filterValue', () => {
125
+ expect(filter(20, '>20')).toBe(false)
126
+ })
127
+
128
+ it('retourne false si itemValue < filterValue', () => {
129
+ expect(filter(10, '>20')).toBe(false)
130
+ })
131
+ })
132
+
133
+ describe('opérateur >=', () => {
134
+ it('retourne true si itemValue > filterValue', () => {
135
+ expect(filter(30, '>=20')).toBe(true)
136
+ })
137
+
138
+ it('retourne true si itemValue === filterValue', () => {
139
+ expect(filter(20, '>=20')).toBe(true)
140
+ })
141
+
142
+ it('retourne false si itemValue < filterValue', () => {
143
+ expect(filter(10, '>=20')).toBe(false)
144
+ })
145
+ })
146
+
147
+ describe('virgule comme séparateur décimal dans opérateurs', () => {
148
+ it('retourne true pour >=3,5 avec itemValue 4', () => {
149
+ expect(filter(4, '>=3,5')).toBe(true)
150
+ })
151
+
152
+ it('retourne true pour <=3,5 avec itemValue 3', () => {
153
+ expect(filter(3, '<=3,5')).toBe(true)
154
+ })
155
+
156
+ it('retourne true pour =3,14 avec itemValue 3.14', () => {
157
+ expect(filter(3.14, '=3,14')).toBe(true)
158
+ })
159
+ })
160
+
161
+ describe('valeur NaN après opérateur', () => {
162
+ it('retourne false si la valeur après < est non numérique', () => {
163
+ expect(filter(42, '<abc')).toBe(false)
164
+ })
165
+
166
+ it('retourne false si la valeur après > est non numérique', () => {
167
+ expect(filter(42, '>abc')).toBe(false)
168
+ })
169
+ })
170
+
171
+ describe('fallback String.includes pour filterValue autre', () => {
172
+ it('retourne true si String(itemValue).includes(String(filterValue)) pour filterValue boolean', () => {
173
+ expect(filter(42, true as unknown as string)).toBe(false)
174
+ })
175
+ })
176
+ })
@@ -0,0 +1,111 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import filter from '../select'
3
+
4
+ describe('Select filter logic', () => {
5
+ describe('filterValue scalaire (valeur unique)', () => {
6
+ it('retourne true pour une correspondance exacte de string', () => {
7
+ expect(filter('foo', 'foo')).toBe(true)
8
+ })
9
+
10
+ it('retourne false pour une non-correspondance de string', () => {
11
+ expect(filter('foo', 'bar')).toBe(false)
12
+ })
13
+
14
+ it('retourne true pour une correspondance exacte de number', () => {
15
+ expect(filter(42, 42)).toBe(true)
16
+ })
17
+
18
+ it('retourne false pour une non-correspondance de number', () => {
19
+ expect(filter(42, 43)).toBe(false)
20
+ })
21
+
22
+ it('retourne true pour null === null', () => {
23
+ expect(filter(null, null)).toBe(true)
24
+ })
25
+
26
+ it('retourne false pour null !== "foo"', () => {
27
+ expect(filter(null, 'foo')).toBe(false)
28
+ })
29
+
30
+ it('retourne true pour boolean true === true', () => {
31
+ expect(filter(true, true)).toBe(true)
32
+ })
33
+
34
+ it('retourne false pour boolean true !== false', () => {
35
+ expect(filter(true, false)).toBe(false)
36
+ })
37
+ })
38
+
39
+ describe('filterValue objet (comparaison JSON)', () => {
40
+ it('retourne true pour deux objets identiques', () => {
41
+ expect(filter({ id: 1, label: 'A' }, { id: 1, label: 'A' })).toBe(true)
42
+ })
43
+
44
+ it('retourne false pour deux objets différents', () => {
45
+ expect(filter({ id: 1, label: 'A' }, { id: 2, label: 'B' })).toBe(false)
46
+ })
47
+
48
+ it('retourne false si itemValue est une string et filterValue un objet', () => {
49
+ expect(filter('foo', { id: 1 })).toBe(false)
50
+ })
51
+
52
+ it('retourne true pour deux objets imbriqués identiques', () => {
53
+ const obj = { a: { b: 1 } }
54
+ expect(filter({ a: { b: 1 } }, obj)).toBe(true)
55
+ })
56
+ })
57
+
58
+ describe('filterValue tableau — itemValue scalaire', () => {
59
+ it('retourne true si itemValue est dans le tableau', () => {
60
+ expect(filter('foo', ['foo', 'bar'])).toBe(true)
61
+ })
62
+
63
+ it('retourne false si itemValue n\'est pas dans le tableau', () => {
64
+ expect(filter('baz', ['foo', 'bar'])).toBe(false)
65
+ })
66
+
67
+ it('retourne true pour un number inclus dans le tableau', () => {
68
+ expect(filter(2, [1, 2, 3])).toBe(true)
69
+ })
70
+
71
+ it('retourne false pour un number non inclus dans le tableau', () => {
72
+ expect(filter(5, [1, 2, 3])).toBe(false)
73
+ })
74
+
75
+ it('retourne false pour un tableau filterValue vide', () => {
76
+ expect(filter('foo', [])).toBe(false)
77
+ })
78
+ })
79
+
80
+ describe('filterValue tableau — itemValue tableau', () => {
81
+ it('retourne true si au moins un élément commun (primitifs)', () => {
82
+ expect(filter(['Vue', 'React'], ['Vue', 'Angular'])).toBe(true)
83
+ })
84
+
85
+ it('retourne false si aucun élément commun (primitifs)', () => {
86
+ expect(filter(['Svelte', 'Angular'], ['Vue', 'React'])).toBe(false)
87
+ })
88
+
89
+ it('retourne true si au moins un objet commun (comparaison JSON)', () => {
90
+ expect(filter(
91
+ [{ id: 1 }, { id: 2 }],
92
+ [{ id: 2 }, { id: 3 }],
93
+ )).toBe(true)
94
+ })
95
+
96
+ it('retourne false si aucun objet commun (comparaison JSON)', () => {
97
+ expect(filter(
98
+ [{ id: 1 }],
99
+ [{ id: 2 }],
100
+ )).toBe(false)
101
+ })
102
+
103
+ it('retourne false si itemValue est tableau vide', () => {
104
+ expect(filter([], ['foo'])).toBe(false)
105
+ })
106
+
107
+ it('retourne false si filterValue est tableau vide', () => {
108
+ expect(filter(['foo'], [])).toBe(false)
109
+ })
110
+ })
111
+ })
@@ -56,28 +56,28 @@
56
56
 
57
57
  // Override Vuetify's checkbox styles to use primary color
58
58
  .v-table .v-selection-control {
59
- color: rgb(var(--v-theme-borderAccentPrimary)) !important;
59
+ color: rgb(var(--v-theme-primary)) !important;
60
60
  }
61
61
 
62
62
  .v-table .v-selection-control--dirty .v-selection-control__input::before {
63
- background-color: rgb(var(--v-theme-borderAccentPrimary)) !important;
64
- border-color: rgb(var(--v-theme-borderAccentPrimary)) !important;
63
+ background-color: rgb(var(--v-theme-primary)) !important;
64
+ border-color: rgb(var(--v-theme-primary)) !important;
65
65
  }
66
66
 
67
67
  // Target the header checkbox specifically
68
68
  .v-data-table-header__checkbox .v-selection-control {
69
- color: rgb(var(--v-theme-borderAccentPrimary)) !important;
69
+ color: rgb(var(--v-theme-primary)) !important;
70
70
  }
71
71
 
72
72
  // Target the row checkboxes specifically
73
73
  .v-data-table-row__checkbox .v-selection-control {
74
- color: rgb(var(--v-theme-borderAccentPrimary)) !important;
74
+ color: rgb(var(--v-theme-primary)) !important;
75
75
  }
76
76
 
77
77
  // Add a global style for all checkboxes in the table
78
78
  .v-checkbox .v-selection-control__input::before,
79
79
  .v-checkbox-btn .v-selection-control__input::before {
80
- border-color: rgb(var(--v-theme-borderAccentPrimary)) !important;
80
+ border-color: rgb(var(--v-theme-primary)) !important;
81
81
  }
82
82
 
83
83
  .v-data-table-rows-no-data {
@@ -106,6 +106,7 @@ export type SyTableProps = {
106
106
  pinnedColumnKey?: string
107
107
  clickableRow?: boolean
108
108
  pageInput?: boolean
109
+ hideDefaultFooter?: boolean
109
110
  }
110
111
 
111
112
  export type SyServerTableProps = {
@@ -134,4 +135,5 @@ export type SyServerTableProps = {
134
135
  pinnedColumnKey?: string
135
136
  clickableRow?: boolean
136
137
  pageInput?: boolean
138
+ hideDefaultFooter?: boolean
137
139
  }
@@ -48,10 +48,12 @@ describe('UploadWorkflow', () => {
48
48
  })
49
49
 
50
50
  it('handles undefined upload list without crashing', async () => {
51
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
51
52
  const wrapper = mount(UploadWorkflow, {
52
53
  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
53
54
  props: {} as any,
54
55
  })
56
+ warnSpy.mockRestore()
55
57
 
56
58
  expect(wrapper.html()).toMatchSnapshot()
57
59
  expect(wrapper.findAll('.file-item')).toHaveLength(0)
@@ -95,6 +95,7 @@ export { default as ChipList } from './ChipList/ChipList.vue'
95
95
  export * from './ChipList/types'
96
96
  export { default as CollapsibleList } from './CollapsibleList/CollapsibleList.vue'
97
97
  export { default as SyIcon } from './Customs/SyIcon/SyIcon.vue'
98
+ export { default as SyIconButton } from './Customs/SyIconButton/SyIconButton.vue'
98
99
  export { default as DataList } from './DataList/DataList.vue'
99
100
  export { default as DataListGroup } from './DataListGroup/DataListGroup.vue'
100
101
  export { default as DataListItem } from './DataListItem/DataListItem.vue'
@@ -96,5 +96,36 @@ describe('useDateFormatDayjs', () => {
96
96
  process.env.TZ = previousTz
97
97
  }
98
98
  })
99
+
100
+ it('handles non-string non-Date input by converting to string', () => {
101
+ // Test avec un nombre qui sera converti en string
102
+ const result = parseDate(20230115 as unknown as string, 'YYYYMMDD')
103
+ expect(result).not.toBeNull()
104
+ expect(result?.getFullYear()).toBe(2023)
105
+ })
106
+
107
+ it('handles undefined input', () => {
108
+ expect(parseDate(undefined, 'DD/MM/YYYY')).toBeNull()
109
+ })
110
+ })
111
+
112
+ describe('useDateFormat composable', () => {
113
+ it('returns parseDate and formatDate functions', async () => {
114
+ const { useDateFormat } = await import('../useDateFormatDayjs')
115
+ const hook = useDateFormat()
116
+ expect(hook.parseDate).toBeDefined()
117
+ expect(hook.formatDate).toBeDefined()
118
+ expect(typeof hook.parseDate).toBe('function')
119
+ expect(typeof hook.formatDate).toBe('function')
120
+ })
121
+
122
+ it('uses returned functions correctly', async () => {
123
+ const { useDateFormat } = await import('../useDateFormatDayjs')
124
+ const { parseDate: hookParse, formatDate: hookFormat } = useDateFormat()
125
+
126
+ const date = hookParse('15/01/2023', 'DD/MM/YYYY')
127
+ expect(date).not.toBeNull()
128
+ expect(hookFormat(date, 'DD/MM/YYYY')).toBe('15/01/2023')
129
+ })
99
130
  })
100
131
  })
@@ -0,0 +1,109 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import {
3
+ getJoursFeries,
4
+ isHolidayDay,
5
+ useHolidayDay,
6
+ } from '../useHolidayDay'
7
+
8
+ describe('useHolidayDay', () => {
9
+ const { calculPaquesGregorienne } = useHolidayDay()
10
+
11
+ describe('calculPaquesGregorienne', () => {
12
+ it('calculates Easter date for various years', () => {
13
+ // Pâques 2023: 9 avril
14
+ const paques2023 = calculPaquesGregorienne(2023)
15
+ expect(paques2023.jour).toBe(9)
16
+ expect(paques2023.mois).toBe(4)
17
+
18
+ // Pâques 2024: 31 mars
19
+ const paques2024 = calculPaquesGregorienne(2024)
20
+ expect(paques2024.jour).toBe(31)
21
+ expect(paques2024.mois).toBe(3)
22
+
23
+ // Pâques 2025: 20 avril
24
+ const paques2025 = calculPaquesGregorienne(2025)
25
+ expect(paques2025.jour).toBe(20)
26
+ expect(paques2025.mois).toBe(4)
27
+ })
28
+
29
+ it('handles years where sum <= 9 (Easter in March)', () => {
30
+ // Certaines années Pâques tombe en mars (sum <= 9)
31
+ const paques2016 = calculPaquesGregorienne(2016)
32
+ expect(paques2016.mois).toBe(3) // 27 mars 2016
33
+ })
34
+ })
35
+
36
+ describe('getJoursFeries', () => {
37
+ it('returns a Set of holidays for a given year', () => {
38
+ const holidays2023 = getJoursFeries(2023)
39
+ expect(holidays2023).toBeInstanceOf(Set)
40
+ expect(holidays2023.size).toBe(11) // 11 jours fériés fixes + variables
41
+ })
42
+
43
+ it('includes fixed holidays', () => {
44
+ const holidays2023 = getJoursFeries(2023)
45
+ expect(holidays2023.has('01/01/2023')).toBe(true) // Jour de l'an
46
+ expect(holidays2023.has('01/05/2023')).toBe(true) // Fête du travail
47
+ expect(holidays2023.has('08/05/2023')).toBe(true) // Victoire
48
+ expect(holidays2023.has('14/07/2023')).toBe(true) // Fête nationale
49
+ expect(holidays2023.has('15/08/2023')).toBe(true) // Assomption
50
+ expect(holidays2023.has('01/11/2023')).toBe(true) // Toussaint
51
+ expect(holidays2023.has('11/11/2023')).toBe(true) // Armistice
52
+ expect(holidays2023.has('25/12/2023')).toBe(true) // Noël
53
+ })
54
+
55
+ it('includes Easter-related holidays', () => {
56
+ const holidays2023 = getJoursFeries(2023)
57
+ // Pâques 2023: 9 avril
58
+ expect(holidays2023.has('10/04/2023')).toBe(true) // Lundi de Pâques
59
+ expect(holidays2023.has('18/05/2023')).toBe(true) // Ascension
60
+ expect(holidays2023.has('29/05/2023')).toBe(true) // Lundi de Pentecôte
61
+ })
62
+
63
+ it('accepts custom format', () => {
64
+ const holidays2023 = getJoursFeries(2023, 'YYYY-MM-DD')
65
+ expect(holidays2023.has('2023-01-01')).toBe(true)
66
+ expect(holidays2023.has('2023-12-25')).toBe(true)
67
+ })
68
+ })
69
+
70
+ describe('isHolidayDay', () => {
71
+ it('returns true for holidays', () => {
72
+ expect(isHolidayDay(new Date(2023, 0, 1))).toBe(true) // Jour de l'an
73
+ expect(isHolidayDay(new Date(2023, 4, 1))).toBe(true) // Fête du travail
74
+ expect(isHolidayDay(new Date(2023, 11, 25))).toBe(true) // Noël
75
+ })
76
+
77
+ it('returns false for non-holidays', () => {
78
+ expect(isHolidayDay(new Date(2023, 0, 2))).toBe(false) // 2 janvier
79
+ expect(isHolidayDay(new Date(2023, 5, 15))).toBe(false) // 15 juin
80
+ })
81
+
82
+ it('accepts string dates', () => {
83
+ expect(isHolidayDay('01/01/2023', 'DD/MM/YYYY')).toBe(true)
84
+ expect(isHolidayDay('02/01/2023', 'DD/MM/YYYY')).toBe(false)
85
+ })
86
+
87
+ it('accepts custom format', () => {
88
+ expect(isHolidayDay('2023-01-01', 'YYYY-MM-DD')).toBe(true)
89
+ expect(isHolidayDay('2023-12-25', 'YYYY-MM-DD')).toBe(true)
90
+ })
91
+
92
+ it('returns false for invalid dates', () => {
93
+ expect(isHolidayDay('invalid-date', 'DD/MM/YYYY')).toBe(false)
94
+ expect(isHolidayDay('', 'DD/MM/YYYY')).toBe(false)
95
+ })
96
+ })
97
+
98
+ describe('useHolidayDay composable', () => {
99
+ it('returns all functions', () => {
100
+ const hook = useHolidayDay()
101
+ expect(hook.getJoursFeries).toBeDefined()
102
+ expect(hook.isHolidayDay).toBeDefined()
103
+ expect(hook.calculPaquesGregorienne).toBeDefined()
104
+ expect(typeof hook.getJoursFeries).toBe('function')
105
+ expect(typeof hook.isHolidayDay).toBe('function')
106
+ expect(typeof hook.calculPaquesGregorienne).toBe('function')
107
+ })
108
+ })
109
+ })