@cnamts/synapse 1.0.15 → 1.0.17

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 (587) hide show
  1. package/dist/{DateFilter-isr8mXVb.js → DateFilter-RHtdShO1.js} +12 -12
  2. package/dist/{NumberFilter-BOe7DqWX.js → NumberFilter-DXYz_b_w.js} +1 -1
  3. package/dist/{PeriodFilter-WTprpO40.js → PeriodFilter-CzphmrNu.js} +1 -1
  4. package/dist/{SelectFilter-CqlG5dmI.js → SelectFilter-a4fUV5Jp.js} +1 -1
  5. package/dist/{TextFilter-fVW5bsRw.js → TextFilter-CZ4LTKoq.js} +1 -1
  6. package/dist/components/Accordion/Accordion.d.ts +22 -7
  7. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +2836 -2845
  8. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +3 -3
  9. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +7 -7
  10. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +3 -3
  11. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +3 -3
  12. package/dist/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.d.ts +3 -3
  13. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +3 -3
  14. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +3 -3
  15. package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +3 -3
  16. package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +3 -3
  17. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +18 -18
  18. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +9 -9
  19. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +3 -3
  20. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +3 -3
  21. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +3 -1
  22. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +5 -3
  23. package/dist/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.d.ts +3 -3
  24. package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +3 -3
  25. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  26. package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +3 -3
  27. package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +3 -3
  28. package/dist/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.d.ts +40 -8
  29. package/dist/components/Amelipro/AmeliproPatientLogged/types.d.ts +2 -1
  30. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1288 -1284
  31. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +1936 -1930
  32. package/dist/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.d.ts +3 -3
  33. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +2838 -2865
  34. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +3 -3
  35. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.d.ts +1 -1
  36. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +2849 -2867
  37. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +397 -397
  38. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +653 -642
  39. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +233 -5
  40. package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +6 -2
  41. package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +9 -9
  42. package/dist/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.d.ts +9 -0
  43. package/dist/components/Amelipro/StructureMenu/StructureItem/types.d.ts +1 -0
  44. package/dist/components/Amelipro/StructureMenu/StructureMenu.d.ts +9 -0
  45. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +23 -2
  46. package/dist/components/Captcha/CaptchaHelpdesk.d.ts +6 -0
  47. package/dist/components/ChipList/locales.d.ts +1 -0
  48. package/dist/components/CookieBanner/CookieBanner.d.ts +117 -119
  49. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +484 -484
  50. package/dist/components/CookiesSelection/CookiesSelection.d.ts +104 -106
  51. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +14 -10
  52. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +118 -129
  53. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -3
  54. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1 -1
  55. package/dist/components/Customs/SyForm/SyForm.d.ts +60 -53
  56. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +88 -0
  57. package/dist/components/Customs/SyRadioGroup/locales.d.ts +3 -0
  58. package/dist/components/Customs/SyTextField/SyTextField.d.ts +644 -642
  59. package/dist/components/DataList/DataList.d.ts +6 -1
  60. package/dist/components/DataListGroup/DataListGroup.d.ts +14 -2
  61. package/dist/components/DataListItem/DataListItem.d.ts +3 -0
  62. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +2986 -3098
  63. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1456 -1558
  64. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +653 -652
  65. package/dist/components/DatePicker/composables/index.d.ts +4 -1
  66. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +1 -1
  67. package/dist/components/DatePicker/composables/useCalendarKeyboardNavigation.d.ts +11 -0
  68. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +25 -0
  69. package/dist/components/DatePicker/composables/useDateTextField.d.ts +61 -0
  70. package/dist/components/DatePicker/composables/useHolidayHighlighting.d.ts +15 -0
  71. package/dist/components/DatePicker/constants/messages.d.ts +0 -1
  72. package/dist/components/DialogBox/DialogBox.d.ts +177 -179
  73. package/dist/components/DialogBox/config.d.ts +4 -0
  74. package/dist/components/FilterSideBar/FilterSideBar.d.ts +170 -173
  75. package/dist/components/FilterSideBar/locales.d.ts +5 -0
  76. package/dist/components/FooterBar/FooterBar.d.ts +5 -5
  77. package/dist/components/HeaderBar/HeaderBar.d.ts +4 -2
  78. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -1
  79. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +15 -5
  80. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +5 -1
  81. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +234 -258
  82. package/dist/components/LangBtn/LangBtn.d.ts +173 -179
  83. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +1 -1
  84. package/dist/components/LunarCalendar/LunarCalendar.d.ts +29 -0
  85. package/dist/components/LunarCalendar/useLunarCalendarRules.d.ts +5 -0
  86. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +13 -0
  87. package/dist/components/MaintenancePage/MaintenancePage.d.ts +8 -1
  88. package/dist/components/NirField/NirField.d.ts +1296 -1292
  89. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -2
  90. package/dist/components/NotificationBar/Notification/Notification.d.ts +30 -0
  91. package/dist/components/NotificationBar/NotificationBar.d.ts +32 -20
  92. package/dist/components/PaginatedTable/PaginatedTable.d.ts +1 -1
  93. package/dist/components/PeriodField/PeriodField.d.ts +5855 -6079
  94. package/dist/components/PhoneField/PhoneField.d.ts +645 -643
  95. package/dist/components/SubHeader/SubHeader.d.ts +11 -8
  96. package/dist/components/SyAlert/SyAlert.d.ts +31 -31
  97. package/dist/components/SyTextArea/SyTextArea.d.ts +397 -395
  98. package/dist/components/SyTextArea/locales.d.ts +1 -0
  99. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +193 -227
  100. package/dist/components/Tables/SyTable/SyTable.d.ts +192 -226
  101. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  102. package/dist/components/Tables/common/SyTablePagination.d.ts +118 -129
  103. package/dist/components/Tables/common/TableHeader.d.ts +52 -2
  104. package/dist/components/Tables/common/filters/DateFilter.d.ts +1 -1
  105. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  106. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  107. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  108. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  109. package/dist/components/Tables/common/locales.d.ts +1 -0
  110. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +86 -90
  111. package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -2
  112. package/dist/components/Tables/common/types.d.ts +3 -2
  113. package/dist/components/Tables/common/useTableCheckbox.d.ts +3 -2
  114. package/dist/components/Tables/common/useTableFilter.d.ts +1 -1
  115. package/dist/components/Tables/common/useTableItems.d.ts +6 -8
  116. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +18 -18
  117. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +2 -0
  118. package/dist/components/index.d.ts +2 -0
  119. package/dist/design-system-v3.js +101 -98
  120. package/dist/design-system-v3.umd.cjs +25 -33
  121. package/dist/directives/lockFocus.d.ts +1 -1
  122. package/dist/main-BXIMMzFS.js +35408 -0
  123. package/dist/style.css +1 -1
  124. package/dist/utils/formatNir/formatNir.d.ts +2 -0
  125. package/dist/utils/index.d.ts +1 -0
  126. package/dist/utils/insertAt.d.ts +1 -0
  127. package/dist/utils/rules/validateDateValue.d.ts +14 -0
  128. package/dist/vuetifyConfig.d.ts +6 -6
  129. package/package.json +14 -7
  130. package/src/assets/tokens.scss +2 -0
  131. package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +70 -241
  132. package/src/components/Accordion/Accordion.mdx +6 -1
  133. package/src/components/Accordion/Accordion.stories.ts +88 -9
  134. package/src/components/Accordion/Accordion.vue +56 -24
  135. package/src/components/Accordion/tests/Accordion.a11y.spec.ts +46 -0
  136. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +26 -30
  137. package/src/components/Accordion/tests/accordion.spec.ts +27 -26
  138. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +1 -18
  139. package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +178 -9
  140. package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +28 -121
  141. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +15 -270
  142. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +12 -194
  143. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +1 -18
  144. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +1 -18
  145. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +12 -194
  146. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +9 -9
  147. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +5 -4
  148. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/AmeliproAutoCompleteField.spec.ts +6 -6
  149. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -0
  150. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +135 -9
  151. package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +20 -5
  152. package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/AmeliproBreadcrumb.spec.ts +195 -28
  153. package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/__snapshots__/AmeliproBreadcrumb.spec.ts.snap +193 -124
  154. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +1 -1
  155. package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +364 -12
  156. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +30 -390
  157. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +4 -36
  158. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.stories.ts +10 -10
  159. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +7 -7
  160. package/src/components/Amelipro/AmeliproCheckbox/__tests__/AmeliproCheckbox.spec.ts +5 -5
  161. package/src/components/Amelipro/AmeliproCheckbox/__tests__/__snapshots__/AmeliproCheckbox.spec.ts.snap +1 -1
  162. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.stories.ts +7 -6
  163. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +6 -6
  164. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/AmeliproCheckboxGroup.spec.ts +6 -6
  165. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/__snapshots__/AmeliproCheckboxGroup.spec.ts.snap +2 -2
  166. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -43
  167. package/src/components/Amelipro/AmeliproContentLayout/__tests__/AmeliproContentLayout.spec.ts +80 -9
  168. package/src/components/Amelipro/AmeliproContentLayout/__tests__/__snapshots__/AmeliproContentLayout.spec.ts.snap +25 -4
  169. package/src/components/Amelipro/AmeliproCopyBtn/__tests__/__snapshots__/AmeliproCopyBtn.spec.ts.snap +1 -13
  170. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +7 -6
  171. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +5 -5
  172. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +187 -39
  173. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +147 -147
  174. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +1 -1
  175. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +0 -2
  176. package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/AmeliproErrorTemplate.spec.ts +160 -20
  177. package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/__snapshots__/AmeliproErrorTemplate.spec.ts.snap +34 -177
  178. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +1 -0
  179. package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +248 -19
  180. package/src/components/Amelipro/AmeliproFilePreview/__tests__/__snapshots__/AmeliproFilePreview.spec.ts.snap +34 -203
  181. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +6 -144
  182. package/src/components/Amelipro/AmeliproIcon/AmeliproIcon.vue +20 -2
  183. package/src/components/Amelipro/AmeliproIcon/__tests__/__snapshots__/AmeliproIcon.spec.ts.snap +1 -25
  184. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.stories.ts +5 -5
  185. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -6
  186. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/AmeliproIllustratedRadioGroup.spec.ts +22 -22
  187. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/__snapshots__/AmeliproIllustratedRadioGroup.spec.ts.snap +2 -2
  188. package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/AmeliproMultipleFoldingCard.spec.ts +304 -0
  189. package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +373 -0
  190. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.stories.ts +64 -34
  191. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +75 -16
  192. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/AmeliproPatientLogged.spec.ts +4 -2
  193. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +63 -177
  194. package/src/components/Amelipro/AmeliproPatientLogged/types.d.ts +2 -1
  195. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.stories.ts +11 -5
  196. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +9 -1
  197. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +162 -72
  198. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/AmeliproPostalAddressCityRow.spec.ts +2 -2
  199. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +6 -39
  200. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.stories.ts +3 -3
  201. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +8 -8
  202. package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/AmeliproPostalAddressField.spec.ts +2 -2
  203. package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +11 -52
  204. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.stories.ts +7 -7
  205. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +8 -8
  206. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/AmeliproRadioGroup.spec.ts +6 -6
  207. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/__snapshots__/AmeliproRadioGroup.spec.ts.snap +2 -2
  208. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +2 -14
  209. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.stories.ts +7 -7
  210. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +41 -5
  211. package/src/components/Amelipro/AmeliproSelect/__tests__/AmeliproSelect.spec.ts +12 -12
  212. package/src/components/Amelipro/AmeliproSelect/__tests__/__snapshots__/AmeliproSelect.spec.ts.snap +2 -2
  213. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +2 -2
  214. package/src/components/Amelipro/AmeliproStepper/__tests__/__snapshots__/AmeliproStepper.spec.ts.snap +2 -2
  215. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +2 -2
  216. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +463 -68
  217. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +176 -511
  218. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.stories.ts +94 -0
  219. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +6 -2
  220. package/src/components/Amelipro/AmeliproTabs/__tests__/AmeliproTabs.spec.ts +4 -0
  221. package/src/components/Amelipro/AmeliproTabs/__tests__/__snapshots__/AmeliproTabs.spec.ts.snap +4 -2
  222. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.stories.ts +6 -6
  223. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -4
  224. package/src/components/Amelipro/AmeliproTextArea/__tests__/AmeliproTextArea.spec.ts +3 -3
  225. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +1 -2
  226. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.stories.ts +78 -10
  227. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +114 -6
  228. package/src/components/Amelipro/AmeliproTextField/__tests__/AmeliproTextField.spec.ts +19 -7
  229. package/src/components/Amelipro/AmeliproTextField/__tests__/__snapshots__/AmeliproTextField.spec.ts.snap +2 -0
  230. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +44 -0
  231. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +79 -1
  232. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.stories.ts +45 -0
  233. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +6 -0
  234. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +0 -2
  235. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.stories.ts +2 -2
  236. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +21 -7
  237. package/src/components/Amelipro/AmeliproUpload/__tests__/AmeliproUpload.spec.ts +252 -44
  238. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +166 -0
  239. package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/ServiceBtn.spec.ts +137 -0
  240. package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/__snapshots__/ServiceBtn.spec.ts.snap +56 -0
  241. package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/ServiceList.spec.ts +116 -0
  242. package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/__snapshots__/ServiceList.spec.ts.snap +58 -0
  243. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/ServiceMenuContent.spec.ts +118 -0
  244. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/__snapshots__/ServiceMenuContent.spec.ts.snap +151 -0
  245. package/src/components/Amelipro/ServiceMenu/__tests__/ServiceMenu.spec.ts +259 -0
  246. package/src/components/Amelipro/ServiceMenu/__tests__/__snapshots__/ServiceMenu.spec.ts.snap +102 -0
  247. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +13 -0
  248. package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/StructureBtn.spec.ts +96 -0
  249. package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/__snapshots__/StructureBtn.spec.ts.snap +63 -0
  250. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +14 -2
  251. package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/StructureItem.spec.ts +133 -0
  252. package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/__snapshots__/StructureItem.spec.ts.snap +159 -0
  253. package/src/components/Amelipro/StructureMenu/StructureItem/types.d.ts +1 -0
  254. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/StructureList.spec.ts +190 -0
  255. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +109 -0
  256. package/src/components/Amelipro/StructureMenu/StructureMenu.stories.ts +93 -63
  257. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +5 -0
  258. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +22 -1
  259. package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/StructureTabs.spec.ts +163 -0
  260. package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/__snapshots__/StructureTabs.spec.ts.snap +105 -0
  261. package/src/components/Amelipro/StructureMenu/__tests__/StructureMenu.spec.ts +171 -0
  262. package/src/components/Amelipro/StructureMenu/__tests__/__snapshots__/StructureMenu.spec.ts.snap +39 -0
  263. package/src/components/Amelipro/UserInformationSummary/__tests__/UserInformationSummary.spec.ts +140 -0
  264. package/src/components/Amelipro/UserInformationSummary/{tests → __tests__}/__snapshots__/UserInformationSummary.spec.ts.snap +17 -24
  265. package/src/components/Amelipro/UserMenu/UserMenu.stories.ts +3 -3
  266. package/src/components/Amelipro/UserMenu/UserMenu.vue +2 -2
  267. package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/UserMenuDetails.spec.ts +150 -0
  268. package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/__snapshots__/UserMenuDetails.spec.ts.snap +117 -0
  269. package/src/components/Amelipro/UserMenu/__tests__/UserMenu.spec.ts +141 -0
  270. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +103 -0
  271. package/src/components/BackBtn/tests/BackBtn.a11y.spec.ts +20 -0
  272. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -0
  273. package/src/components/BackToTopBtn/tests/BackToTopBtn.a11y.spec.ts +37 -0
  274. package/src/components/Captcha/Captcha.vue +9 -24
  275. package/src/components/Captcha/CaptchaHelpdesk.vue +42 -0
  276. package/src/components/Captcha/tests/Captcha.a11y.spec.ts +49 -0
  277. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +256 -268
  278. package/src/components/ChipList/ChipList.stories.ts +15 -0
  279. package/src/components/ChipList/ChipList.vue +20 -17
  280. package/src/components/ChipList/locales.ts +1 -0
  281. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +40 -0
  282. package/src/components/CollapsibleList/Accessibilite.mdx +67 -11
  283. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +38 -0
  284. package/src/components/ContextualMenu/ContextualMenu.stories.ts +3 -0
  285. package/src/components/ContextualMenu/tests/ContextualMenu.a11y.spec.ts +30 -0
  286. package/src/components/CookieBanner/CookieBanner.stories.ts +15 -0
  287. package/src/components/CookieBanner/CookieBanner.vue +0 -1
  288. package/src/components/CookieBanner/tests/CookieBanner.a11y.spec.ts +29 -0
  289. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +46 -0
  290. package/src/components/CookiesSelection/CookiesTable/tests/CookiesTable.a11y.spec.ts +37 -0
  291. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +58 -0
  292. package/src/components/CopyBtn/CopyBtn.stories.ts +21 -0
  293. package/src/components/CopyBtn/tests/CopyBtn.a11y.spec.ts +40 -0
  294. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +0 -1
  295. package/src/components/Customs/Selects/SelectBtnField/Accessibilite.stories.ts +4 -0
  296. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +154 -82
  297. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +229 -125
  298. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +12 -12
  299. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +344 -826
  300. package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +30 -0
  301. package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.vue +1 -0
  302. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +27 -0
  303. package/src/components/Customs/Selects/SySelect/SySelect.vue +215 -169
  304. package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +4 -2
  305. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +7 -9
  306. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +40 -0
  307. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +7 -3
  308. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +20 -2
  309. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +26 -0
  310. package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +33 -0
  311. package/src/components/Customs/SyForm/SyForm.mdx +47 -7
  312. package/src/components/Customs/SyForm/SyForm.stories.ts +38 -34
  313. package/src/components/Customs/SyForm/SyForm.vue +27 -6
  314. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +37 -0
  315. package/src/components/Customs/SyIcon/SyIcon.stories.ts +5 -0
  316. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +27 -0
  317. package/src/components/Customs/SyRadioGroup/Accessibilite.mdx +263 -0
  318. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +37 -0
  319. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +665 -0
  320. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +324 -0
  321. package/src/components/Customs/SyRadioGroup/locales.ts +3 -0
  322. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +30 -0
  323. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +135 -0
  324. package/src/components/Customs/SyTabs/SyTabs.stories.ts +33 -0
  325. package/src/components/Customs/SyTabs/SyTabs.vue +1 -1
  326. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +51 -0
  327. package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -0
  328. package/src/components/Customs/SyTextField/SyTextField.vue +232 -199
  329. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +27 -0
  330. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +32 -2
  331. package/src/components/DataList/DataList.mdx +3 -1
  332. package/src/components/DataList/DataList.stories.ts +67 -17
  333. package/src/components/DataList/DataList.vue +13 -1
  334. package/src/components/DataList/tests/DataList.a11y.spec.ts +35 -0
  335. package/src/components/DataListGroup/DataListGroup.stories.ts +42 -12
  336. package/src/components/DataListGroup/DataListGroup.vue +14 -1
  337. package/src/components/DataListGroup/tests/DataListGroup.a11y.spec.ts +24 -0
  338. package/src/components/DataListItem/DataListItem.vue +10 -2
  339. package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +31 -0
  340. package/src/components/DataListItem/tests/DataListItem.spec.ts +1 -1
  341. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +45 -0
  342. package/src/components/DatePicker/CalendarMode/DatePicker.vue +230 -205
  343. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +27 -0
  344. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +5 -0
  345. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +179 -179
  346. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +54 -0
  347. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +337 -278
  348. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +26 -0
  349. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +234 -827
  350. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +12 -0
  351. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +46 -81
  352. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -0
  353. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +350 -0
  354. package/src/components/DatePicker/composables/index.ts +4 -1
  355. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +270 -0
  356. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +61 -3
  357. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +198 -0
  358. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +36 -2
  359. package/src/components/DatePicker/composables/tests/useInputHandler.spec.ts +755 -0
  360. package/src/components/DatePicker/composables/tests/useKeyboardEvents.spec.ts +168 -0
  361. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +40 -34
  362. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +1 -2
  363. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +155 -0
  364. package/src/components/DatePicker/composables/useDatePickerState.ts +163 -0
  365. package/src/components/DatePicker/composables/useDateRangeInput.ts +4 -8
  366. package/src/components/DatePicker/composables/useDateTextField.ts +156 -0
  367. package/src/components/DatePicker/composables/useHolidayHighlighting.ts +64 -0
  368. package/src/components/DatePicker/composables/useInputHandler.ts +25 -19
  369. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +51 -26
  370. package/src/components/DatePicker/constants/messages.ts +0 -1
  371. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +2 -2
  372. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +16 -8
  373. package/src/components/DiacriticPicker/tests/DiacriticPicker.a11y.spec.ts +46 -0
  374. package/src/components/DialogBox/DialogBox.stories.ts +5 -2
  375. package/src/components/DialogBox/DialogBox.vue +5 -0
  376. package/src/components/DialogBox/config.ts +5 -0
  377. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +43 -0
  378. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +26 -0
  379. package/src/components/ErrorPage/ErrorPage.stories.ts +60 -0
  380. package/src/components/ErrorPage/ErrorPage.vue +1 -1
  381. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +29 -0
  382. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +17 -0
  383. package/src/components/ExternalLinks/ExternalLinks.stories.ts +21 -0
  384. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +39 -0
  385. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +0 -1
  386. package/src/components/FileList/FileList.stories.ts +3 -0
  387. package/src/components/FileList/tests/FileList.a11y.spec.ts +41 -0
  388. package/src/components/FilePreview/FilePreview.stories.ts +3 -0
  389. package/src/components/FilePreview/tests/FilePreview.a11y.spec.ts +47 -0
  390. package/src/components/FileUpload/tests/FileUpload.a11y.spec.ts +25 -0
  391. package/src/components/FilterInline/FilterInline.stories.ts +15 -0
  392. package/src/components/FilterInline/FilterInline.vue +8 -4
  393. package/src/components/FilterInline/tests/FilterInline.a11y.spec.ts +36 -0
  394. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +0 -3
  395. package/src/components/FilterSideBar/Accessibilite.stories.ts +4 -0
  396. package/src/components/FilterSideBar/FilterSideBar.stories.ts +33 -11
  397. package/src/components/FilterSideBar/FilterSideBar.vue +146 -83
  398. package/src/components/FilterSideBar/locales.ts +6 -0
  399. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +59 -0
  400. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +2 -2
  401. package/src/components/FooterBar/Accessibilite.mdx +67 -11
  402. package/src/components/FooterBar/FooterBar.vue +1 -1
  403. package/src/components/FooterBar/config.ts +2 -2
  404. package/src/components/FooterBar/tests/FooterBar.a11y.spec.ts +31 -0
  405. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  406. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +1 -1
  407. package/src/components/FranceConnectBtn/tests/FranceConnectBtn.a11y.spec.ts +25 -0
  408. package/src/components/HeaderBar/HeaderBar.stories.ts +21 -0
  409. package/src/components/HeaderBar/HeaderBar.vue +47 -40
  410. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.stories.ts +12 -0
  411. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.stories.ts +3 -0
  412. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +4 -0
  413. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +17 -7
  414. package/src/components/HeaderBar/consts.scss +0 -1
  415. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +33 -0
  416. package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +58 -57
  417. package/src/components/HeaderLoading/tests/HeaderLoading.a11y.spec.ts +25 -0
  418. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +42 -0
  419. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +4 -0
  420. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +6 -2
  421. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +45 -0
  422. package/src/components/HeaderToolbar/HeaderToolbar.stories.ts +6 -0
  423. package/src/components/HeaderToolbar/HeaderToolbar.vue +0 -3
  424. package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +25 -0
  425. package/src/components/LangBtn/LangBtn.stories.ts +12 -0
  426. package/src/components/LangBtn/tests/LangBtn.a11y.spec.ts +25 -0
  427. package/src/components/Logo/tests/Logo.a11y.spec.ts +20 -0
  428. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +38 -0
  429. package/src/components/LunarCalendar/LunarCalendar.mdx +33 -0
  430. package/src/components/LunarCalendar/LunarCalendar.stories.ts +232 -0
  431. package/src/components/LunarCalendar/LunarCalendar.vue +57 -0
  432. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +31 -0
  433. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +79 -0
  434. package/src/components/LunarCalendar/useLunarCalendarRules.ts +96 -0
  435. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +47 -0
  436. package/src/components/MaintenancePage/MaintenancePage.stories.ts +46 -0
  437. package/src/components/MaintenancePage/MaintenancePage.vue +7 -5
  438. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +21 -0
  439. package/src/components/NirField/NirField.stories.ts +6 -0
  440. package/src/components/NirField/tests/NirField.a11y.spec.ts +32 -0
  441. package/src/components/NotFoundPage/NotFoundPage.stories.ts +56 -0
  442. package/src/components/NotFoundPage/NotFoundPage.vue +7 -5
  443. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +31 -0
  444. package/src/components/NotificationBar/Notification/Notification.vue +203 -0
  445. package/src/components/NotificationBar/NotificationBar.stories.ts +151 -140
  446. package/src/components/NotificationBar/NotificationBar.vue +148 -202
  447. package/src/components/NotificationBar/config.ts +1 -1
  448. package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +66 -0
  449. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +173 -177
  450. package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +67 -29
  451. package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +27 -0
  452. package/src/components/PaginatedTable/PaginatedTable.stories.ts +21 -10
  453. package/src/components/PaginatedTable/PaginatedTable.vue +72 -36
  454. package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +43 -0
  455. package/src/components/PasswordField/PasswordField.stories.ts +39 -0
  456. package/src/components/PasswordField/tests/PasswordField.a11y.spec.ts +26 -0
  457. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +31 -0
  458. package/src/components/PhoneField/PhoneField.stories.ts +51 -0
  459. package/src/components/PhoneField/PhoneField.vue +102 -83
  460. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +34 -0
  461. package/src/components/RangeField/tests/RangeField.a11y.spec.ts +32 -0
  462. package/src/components/RatingPicker/RatingPicker.stories.ts +21 -0
  463. package/src/components/SearchListField/tests/SearchListField.spec.ts +7 -53
  464. package/src/components/SkipLink/Accessibilite.mdx +59 -13
  465. package/src/components/SkipLink/SkipLink.stories.ts +41 -8
  466. package/src/components/SubHeader/SubHeader.stories.ts +178 -92
  467. package/src/components/SubHeader/SubHeader.vue +84 -71
  468. package/src/components/SubHeader/config.ts +1 -1
  469. package/src/components/SyAlert/SyAlert.vue +6 -3
  470. package/src/components/SyTextArea/SyTextArea.stories.ts +40 -0
  471. package/src/components/SyTextArea/SyTextArea.vue +13 -0
  472. package/src/components/SyTextArea/locales.ts +1 -0
  473. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +42 -0
  474. package/src/components/TableToolbar/TableToolbar.stories.ts +3 -0
  475. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +24 -72
  476. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +591 -24
  477. package/src/components/Tables/SyServerTable/SyServerTable.vue +19 -13
  478. package/src/components/Tables/SyTable/FilterRules.stories.ts +12 -0
  479. package/src/components/Tables/SyTable/SyTable.stories.ts +460 -18
  480. package/src/components/Tables/SyTable/SyTable.vue +16 -11
  481. package/src/components/Tables/common/TableHeader.vue +16 -7
  482. package/src/components/Tables/common/filters/DateFilter.vue +1 -1
  483. package/src/components/Tables/common/locales.ts +1 -0
  484. package/src/components/Tables/common/tableFilterUtils.ts +3 -3
  485. package/src/components/Tables/common/types.ts +4 -2
  486. package/src/components/Tables/common/useTableCheckbox.ts +4 -3
  487. package/src/components/Tables/common/useTableFilter.ts +2 -2
  488. package/src/components/Tables/common/useTableItems.ts +4 -19
  489. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +31 -1
  490. package/src/components/UserMenuBtn/UserMenuBtn.vue +2 -1
  491. package/src/components/UserMenuBtn/tests/UserMenuBtn.a11y.spec.ts +31 -0
  492. package/src/components/index.ts +2 -0
  493. package/src/composables/validation/tests/useFormValidation.spec.ts +251 -0
  494. package/src/composables/validation/tests/useValidatable.spec.ts +90 -0
  495. package/src/directives/lockFocus.ts +12 -2
  496. package/src/stories/Accessibilite/Audit/Exemptions-derogations.mdx +241 -0
  497. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +17 -10
  498. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -0
  499. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +160 -106
  500. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +2 -1
  501. package/src/stories/GuideDuDev/ClassesUtilitaires/DataUtilities.mdx +6 -6
  502. package/src/stories/GuideDuDev/ClassesUtilitaires/DomBrowserUtilities.mdx +52 -59
  503. package/src/stories/GuideDuDev/ClassesUtilitaires/FormattingUtilities.mdx +28 -8
  504. package/src/stories/GuideDuDev/ClassesUtilitaires/StorageUtilities.mdx +2 -2
  505. package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationRules.mdx +3 -3
  506. package/src/stories/GuideDuDev/ClassesUtilitaires/ValidationUtilities.mdx +11 -11
  507. package/src/stories/GuideDuDev/ClassesUtilitaires/index.mdx +24 -14
  508. package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
  509. package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
  510. package/src/stories/accessibility/AccessibilityGuideLayout.mdx +87 -0
  511. package/src/stories/styles/accessibility-guide.css +153 -0
  512. package/src/utils/formatNir/formatNir.ts +15 -0
  513. package/src/utils/index.ts +1 -0
  514. package/src/utils/insertAt.ts +11 -0
  515. package/src/utils/rules/isDateValid/IsDateValid.mdx +2 -2
  516. package/src/utils/rules/isDateValid/IsDateValid.stories.ts +6 -4
  517. package/src/utils/rules/isDateValid/index.ts +23 -8
  518. package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +9 -0
  519. package/src/utils/rules/isExactLength/IsExactLenght.mdx +1 -1
  520. package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +19 -7
  521. package/src/utils/rules/isHolidayDay/index.ts +6 -8
  522. package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +13 -1
  523. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +2 -2
  524. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +9 -2
  525. package/src/utils/rules/isNotAfterDate/index.ts +5 -12
  526. package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +20 -0
  527. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +2 -2
  528. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +8 -2
  529. package/src/utils/rules/isNotAfterToday/index.ts +6 -6
  530. package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +20 -0
  531. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +2 -2
  532. package/src/utils/rules/isNotBeforeDate/index.ts +5 -12
  533. package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +20 -0
  534. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +2 -2
  535. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +8 -2
  536. package/src/utils/rules/isNotBeforeToday/index.ts +6 -6
  537. package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +19 -0
  538. package/src/utils/rules/validateDateValue.ts +37 -0
  539. package/src/vuetifyConfig.ts +6 -2
  540. package/dist/components/Customs/Selects/SelectBtnField/config.d.ts +0 -11
  541. package/dist/components/DatePicker/composables/useIconState.d.ts +0 -17
  542. package/dist/components/DatePicker/tests/setup.d.ts +0 -75370
  543. package/dist/components/Tables/common/formatters.d.ts +0 -17
  544. package/dist/main-CbBVJ_le.js +0 -34377
  545. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +0 -70
  546. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +0 -8
  547. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +0 -28
  548. package/dist/stories/DesignTokens/vue-shims.d.ts +0 -6
  549. package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/AmeliproMultipleFoldingCard.spec.ts +0 -40
  550. package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +0 -369
  551. package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/ServiceBtn.spec.ts +0 -21
  552. package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/__snapshots__/ServiceBtn.spec.ts.snap +0 -100
  553. package/src/components/Amelipro/ServiceMenu/ServiceList/tests/ServiceList.spec.ts +0 -25
  554. package/src/components/Amelipro/ServiceMenu/ServiceList/tests/__snapshots__/ServiceList.spec.ts.snap +0 -245
  555. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/ServiceMenuContent.spec.ts +0 -45
  556. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/__snapshots__/ServiceMenuContent.spec.ts.snap +0 -787
  557. package/src/components/Amelipro/ServiceMenu/tests/ServiceMenu.spec.ts +0 -46
  558. package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -111
  559. package/src/components/Amelipro/StructureMenu/StructureBtn/tests/StructureBtn.spec.ts +0 -17
  560. package/src/components/Amelipro/StructureMenu/StructureBtn/tests/__snapshots__/StructureBtn.spec.ts.snap +0 -34
  561. package/src/components/Amelipro/StructureMenu/StructureItem/tests/StructureItem.spec.ts +0 -21
  562. package/src/components/Amelipro/StructureMenu/StructureItem/tests/__snapshots__/StructureItem.spec.ts.snap +0 -106
  563. package/src/components/Amelipro/StructureMenu/StructureList/tests/StructureList.spec.ts +0 -33
  564. package/src/components/Amelipro/StructureMenu/StructureList/tests/__snapshots__/StructureList.spec.ts.snap +0 -353
  565. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/StructureTabs.spec.ts +0 -60
  566. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/__snapshots__/StructureTabs.spec.ts.snap +0 -824
  567. package/src/components/Amelipro/StructureMenu/tests/StructureMenu.spec.ts +0 -69
  568. package/src/components/Amelipro/StructureMenu/tests/__snapshots__/StructureMenu.spec.ts.snap +0 -1383
  569. package/src/components/Amelipro/UserInformationSummary/tests/UserInformationSummary.spec.ts +0 -24
  570. package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/UserMenuDetails.spec.ts +0 -33
  571. package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/__snapshots__/UserMenuDetails.spec.ts.snap +0 -3
  572. package/src/components/Amelipro/UserMenu/tests/UserMenu.spec.ts +0 -34
  573. package/src/components/Amelipro/UserMenu/tests/__snapshots__/UserMenu.spec.ts.snap +0 -101
  574. package/src/components/Customs/Selects/SelectBtnField/config.ts +0 -11
  575. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +0 -151
  576. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +0 -148
  577. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +0 -361
  578. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +0 -709
  579. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +0 -130
  580. package/src/components/DatePicker/composables/useIconState.ts +0 -53
  581. package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +0 -4111
  582. package/src/components/DatePicker/tests/archiTest.md +0 -33
  583. package/src/components/DatePicker/tests/navigation.regression.spec.ts +0 -74
  584. package/src/components/DatePicker/tests/navigation.simple.spec.ts +0 -137
  585. package/src/components/DatePicker/tests/setup.ts +0 -243
  586. package/src/components/Tables/common/formatters.ts +0 -72
  587. package/src/components/Usages/tests/Usages.spec.ts +0 -155
@@ -1,943 +1,350 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
- import { mount, VueWrapper, flushPromises } from '@vue/test-utils'
1
+ import { mount, flushPromises } from '@vue/test-utils'
2
+ import { describe, it, expect } from 'vitest'
3
+ import { nextTick } from 'vue'
3
4
  import ComplexDatePicker from '../ComplexDatePicker.vue'
4
- import DateTextInput from '../../DateTextInput/DateTextInput.vue'
5
-
6
- // Mock des composables
7
- vi.mock('@/composables/date/useDateFormatDayjs', () => ({
8
- useDateFormat: () => ({
9
- parseDate: vi.fn((dateStr) => {
10
- if (!dateStr) return null
11
- return new Date('2023-01-15')
12
- }),
13
- formatDate: vi.fn((date) => {
14
- if (!date) return ''
15
- return '15/01/2023'
16
- }),
17
- }),
18
- }))
19
-
20
- vi.mock('@/composables/date/useDateInitializationDayjs', () => ({
21
- useDateInitialization: () => ({
22
- initializeSelectedDates: vi.fn((value) => {
23
- if (!value) return null
24
- if (Array.isArray(value)) {
25
- return value.map(() => new Date('2023-01-15'))
26
- }
27
- return new Date('2023-01-15')
28
- }),
29
- }),
30
- }))
31
-
32
- vi.mock('@/composables/date/useDatePickerAccessibility', () => ({
33
- useDatePickerAccessibility: () => ({
34
- updateAccessibility: vi.fn(),
35
- }),
36
- }))
37
-
38
- // Mock avec des erreurs qui peuvent être modifiées
39
- const mockErrors = { value: [] as string[] }
40
- const mockWarnings = { value: [] as string[] }
41
- const mockSuccesses = { value: [] as string[] }
42
- const mockHasError = { value: false }
43
- const mockHasWarning = { value: false }
44
- const mockHasSuccess = { value: false }
45
- const mockValidateField = vi.fn().mockReturnValue({ valid: true })
46
- const mockClearValidation = vi.fn(() => {
47
- mockErrors.value = []
48
- mockWarnings.value = []
49
- mockSuccesses.value = []
50
- mockHasError.value = false
51
- mockHasWarning.value = false
52
- mockHasSuccess.value = false
53
- })
54
-
55
- vi.mock('@/composables/validation/useValidation', () => ({
56
- useValidation: () => ({
57
- errors: mockErrors,
58
- warnings: mockWarnings,
59
- successes: mockSuccesses,
60
- hasError: mockHasError,
61
- hasWarning: mockHasWarning,
62
- hasSuccess: mockHasSuccess,
63
- validateField: mockValidateField,
64
- clearValidation: mockClearValidation,
65
- }),
66
- }))
67
-
68
- vi.mock('../composables/useWeekendDays', () => ({
69
- useWeekendDays: () => ({
70
- displayWeekendDays: true,
71
- }),
72
- }))
73
-
74
- vi.mock('../composables/useTodayButton', () => ({
75
- useTodayButton: () => ({
76
- todayInString: 'Aujourd\'hui : 15/01/2023',
77
- selectToday: vi.fn((selectedDates) => {
78
- if (Array.isArray(selectedDates.value)) {
79
- selectedDates.value = [new Date('2023-01-15')]
80
- }
81
- else {
82
- selectedDates.value = new Date('2023-01-15')
83
- }
84
- }),
85
- }),
86
- }))
87
-
88
- vi.mock('../composables/useDatePickerViewMode', () => ({
89
- useDatePickerViewMode: vi.fn(() => ({
90
- currentViewMode: 'month',
91
- handleViewModeUpdate: vi.fn(),
92
- handleYearUpdate: vi.fn(),
93
- handleMonthUpdate: vi.fn(),
94
- resetViewMode: vi.fn(),
95
- })),
96
- }))
97
-
98
- // Créer un mock pour rangeBoundaryDates qui peut être observé par les watchers
99
- const mockRangeBoundaryDates = { value: [new Date('2023-01-15'), new Date('2023-01-20')] }
100
-
101
- vi.mock('../composables/useDateSelection', () => ({
102
- useDateSelection: () => ({
103
- updateSelectedDates: vi.fn((date) => {
104
- return date
105
- }),
106
- rangeBoundaryDates: mockRangeBoundaryDates,
107
- generateDateRange: vi.fn((start, end) => {
108
- const result = [start]
109
- if (end > start) result.push(end)
110
- return result
111
- }),
112
- }),
113
- }))
114
-
115
- // Mock du document.addEventListener et removeEventListener pour les tests de clic extérieur
116
- const addEventListenerSpy = vi.spyOn(document, 'addEventListener')
117
- const removeEventListenerSpy = vi.spyOn(document, 'removeEventListener')
118
-
119
- describe('ComplexDatePicker', () => {
120
- let wrapper: VueWrapper<InstanceType<typeof ComplexDatePicker>>
121
-
122
- // Configuration de base pour monter le composant
123
- const createWrapper = (props = {}) => {
124
- // Assurer que les mocks sont correctement réinitialisés avant chaque test
125
- vi.clearAllMocks()
126
-
127
- mockRangeBoundaryDates.value = [new Date('2023-01-15'), new Date('2023-01-20')]
128
- return mount(ComplexDatePicker, {
129
- props: {
130
- ...props,
131
- },
132
- global: {
133
- stubs: {
134
- VDatePicker: true,
135
- VMenu: true,
136
- },
137
- mocks: {
138
- // Mock des méthodes qui pourraient être appelées dans le template
139
- $nextTick: () => Promise.resolve(),
140
- },
141
- },
142
- shallow: false,
143
- })
144
- }
145
5
 
146
- beforeEach(() => {
147
- // Réinitialiser les mocks avant chaque test
148
- vi.clearAllMocks()
6
+ describe('ComplexDatePicker.clean', () => {
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ const mountComponent = (props: any = { label: 'Test' }) => mount(ComplexDatePicker, {
9
+ props,
149
10
  })
150
11
 
151
- afterEach(() => {
152
- if (wrapper) {
153
- wrapper.unmount()
154
- }
155
- })
12
+ it('renders in calendar mode by default', () => {
13
+ const wrapper = mountComponent()
156
14
 
157
- it('devrait monter correctement avec les props par défaut', () => {
158
- wrapper = createWrapper()
159
15
  expect(wrapper.exists()).toBe(true)
16
+ // The activator text field should be present
17
+ const input = wrapper.find('input')
18
+ expect(input.exists()).toBe(true)
160
19
  })
161
20
 
162
- it('devrait afficher DateTextInput quand noCalendar=true', () => {
163
- // Pour ce test, on utilise shallowMount pour éviter les problèmes avec Vuetify
164
- const wrapper = mount(ComplexDatePicker, {
165
- props: {
166
- noCalendar: true,
167
- },
168
- global: {
169
- stubs: {
170
- // Stubber tous les composants pour éviter les erreurs de rendu
171
- DateTextInput: { template: '<div class="date-text-input-stub"></div>' },
172
- VMenu: { template: '<div class="v-menu-stub"></div>' },
173
- SyTextField: { template: '<div class="sy-text-field-stub"></div>' },
174
- VDatePicker: { template: '<div class="v-date-picker-stub"></div>' },
175
- },
176
- },
177
- shallow: true,
21
+ it('renders in text-only mode when noCalendar=true', () => {
22
+ const wrapper = mountComponent({
23
+ label: 'Date Field',
24
+ noCalendar: true,
178
25
  })
179
26
 
180
- // Vérifier que le template contient bien le v-if pour DateTextInput
181
- const template = wrapper.html()
182
- expect(template).toContain('date-text-input-stub')
183
- expect(template).not.toContain('v-menu-stub')
184
- })
185
-
186
- it('devrait afficher VMenu quand noCalendar=false', () => {
187
- wrapper = createWrapper({ noCalendar: false })
188
- expect(wrapper.findComponent(DateTextInput).exists()).toBe(false)
189
- expect(wrapper.find('.date-picker-container').exists()).toBe(true)
190
- })
191
-
192
- it('devrait initialiser correctement selectedDates à partir de modelValue', () => {
193
- const testDate = '2023-01-15'
194
- wrapper = createWrapper({ modelValue: testDate })
195
- expect(wrapper.vm.selectedDates).toBeDefined()
27
+ expect(wrapper.exists()).toBe(true)
28
+ // In text-only mode there should be no calendar rendered
29
+ expect(wrapper.find('.v-date-picker').exists()).toBe(false)
196
30
  })
197
31
 
198
- it('devrait émettre update:modelValue quand la date est modifiée', async () => {
199
- // Créer le wrapper avec des stubs pour les composants enfants
200
- wrapper = mount(ComplexDatePicker, {
201
- props: {},
202
- global: {
203
- stubs: {
204
- DateTextInput: true,
205
- VMenu: true,
206
- SyTextField: true,
207
- VDatePicker: true,
208
- },
209
- },
32
+ it('emits update:modelValue when a valid date is typed (single mode)', async () => {
33
+ const wrapper = mountComponent({
34
+ label: 'Date Field',
35
+ format: 'DD/MM/YYYY',
210
36
  })
211
37
 
212
- // Simuler l'émission d'un événement depuis un composant enfant
213
- wrapper.vm.$emit('update:modelValue', '15/01/2023')
214
-
215
- // Vérifier que l'événement update:modelValue a été émis
216
- expect(wrapper.emitted('update:modelValue')).toBeTruthy()
217
- expect(wrapper.emitted('update:modelValue')![0]).toEqual(['15/01/2023'])
218
- })
219
-
220
- it('devrait valider le champ comme requis quand required=true et aucune date n\'est sélectionnée', async () => {
221
- wrapper = createWrapper({ required: true })
222
-
223
- // Réinitialiser les erreurs avant le test
224
- mockErrors.value = []
225
-
226
- // Simuler une validation forcée
227
- await wrapper.vm.validateDates(true)
38
+ const input = wrapper.find('input')
39
+ await input.setValue('01/01/2025')
40
+ await input.trigger('blur')
41
+ await flushPromises()
228
42
 
229
- // Ajouter manuellement l'erreur comme le ferait le composant
230
- mockErrors.value.push('La date est requise.')
43
+ const emitted = wrapper.emitted('update:modelValue')
44
+ expect(emitted).toBeTruthy()
45
+ expect(emitted && emitted[0][0]).toBe('01/01/2025')
231
46
 
232
- expect(mockErrors.value).toContain('La date est requise.')
47
+ const selectedDate = wrapper.vm.selectedDates as Date
48
+ expect(selectedDate).toBeInstanceOf(Date)
49
+ expect(wrapper.vm.currentMonth).toBe(String(selectedDate.getMonth()))
50
+ expect(wrapper.vm.currentMonthName).toBeTruthy()
233
51
  })
234
52
 
235
- it('devrait mettre à jour displayFormattedDate quand updateDisplayFormattedDate est appelé', async () => {
236
- wrapper = createWrapper()
237
-
238
- // Définir une date sélectionnée directement sur l'instance
239
- wrapper.vm.selectedDates = new Date('2023-01-15')
240
-
241
- // Appeler la fonction
242
- await wrapper.vm.updateDisplayFormattedDate()
243
- await flushPromises()
53
+ it('respects disabled and readonly props when opening the calendar', async () => {
54
+ const wrapper = mountComponent({
55
+ label: 'Date Field',
56
+ format: 'DD/MM/YYYY',
57
+ disabled: true,
58
+ })
244
59
 
245
- // Vérifier que displayFormattedDate est mis à jour
246
- // Note: L'événement date-selected n'est émis que dans certaines conditions
247
- // qui ne sont pas remplies dans ce test
248
- expect(wrapper.vm.displayFormattedDate).not.toBe('')
249
- })
60
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
61
+ await wrapper.vm.openDatePicker()
62
+ await nextTick()
63
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
250
64
 
251
- it('devrait exposer les méthodes nécessaires via defineExpose', () => {
252
- wrapper = createWrapper()
253
- // Vérifier que les méthodes exposées sont disponibles
254
- expect(wrapper.vm.validateOnSubmit).toBeDefined()
255
- expect(wrapper.vm.isDatePickerVisible).toBeDefined()
256
- expect(wrapper.vm.selectedDates).toBeDefined()
257
- expect(wrapper.vm.errorMessages).toBeDefined()
258
- expect(wrapper.vm.handleClickOutside).toBeDefined()
259
- expect(wrapper.vm.initializeSelectedDates).toBeDefined()
260
- expect(wrapper.vm.updateAccessibility).toBeDefined()
261
- expect(wrapper.vm.openDatePicker).toBeDefined()
262
- expect(wrapper.vm.updateDisplayFormattedDate).toBeDefined()
65
+ await wrapper.setProps({ disabled: false, readonly: true })
66
+ await wrapper.vm.openDatePicker()
67
+ await nextTick()
68
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
263
69
  })
264
70
 
265
- it('devrait ajouter un écouteur d\'événement click au document lors du montage', () => {
266
- wrapper = createWrapper()
267
- expect(addEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function))
268
- })
71
+ it('handleDateSelected updates model, selection and emits event in single mode', async () => {
72
+ const wrapper = mountComponent({
73
+ label: 'Date Field',
74
+ format: 'DD/MM/YYYY',
75
+ })
269
76
 
270
- it('devrait supprimer l\'écouteur d\'événement click du document lors du démontage', () => {
271
- wrapper = createWrapper()
272
- wrapper.unmount()
273
- expect(removeEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function))
274
- })
77
+ await wrapper.vm.handleDateSelected('01/01/2025')
78
+ await flushPromises()
275
79
 
276
- it('devrait ouvrir le CalendarMode quand openDatePicker est appelé', async () => {
277
- wrapper = createWrapper()
278
- await wrapper.vm.toggleDatePicker()
279
- expect(wrapper.vm.isDatePickerVisible).toBe(true)
280
- })
80
+ const emittedUpdate = wrapper.emitted('update:modelValue')
81
+ expect(emittedUpdate).toBeTruthy()
82
+ expect(emittedUpdate && emittedUpdate[0][0]).toBe('01/01/2025')
281
83
 
282
- it('devrait fermer le CalendarMode quand toggleDatePicker est appelé et qu\'il est déjà ouvert', async () => {
283
- wrapper = createWrapper()
284
- // D'abord ouvrir le CalendarMode
285
- await wrapper.vm.toggleDatePicker()
286
- // Puis le fermer
287
- await wrapper.vm.toggleDatePicker()
288
- expect(wrapper.vm.isDatePickerVisible).toBe(false)
289
- })
84
+ const emittedSelected = wrapper.emitted('date-selected')
85
+ expect(emittedSelected).toBeTruthy()
86
+ expect(emittedSelected && emittedSelected[0][0]).toBe('01/01/2025')
290
87
 
291
- it('devrait sélectionner la date du jour quand handleSelectToday est appelé', async () => {
292
- wrapper = createWrapper()
293
- await wrapper.vm.toggleDatePicker()
294
- // Simuler l'appel à handleSelectToday
295
- await wrapper.vm.handleSelectToday()
296
- // Vérifier que selectedDates est mis à jour
297
88
  expect(wrapper.vm.selectedDates).toBeInstanceOf(Date)
89
+
90
+ const selectedDate = wrapper.vm.selectedDates as Date
91
+ expect(wrapper.vm.currentMonth).toBe(String(selectedDate.getMonth()))
92
+ expect(wrapper.vm.currentMonthName).toBeTruthy()
298
93
  })
299
94
 
300
- it('devrait valider correctement le format de date', async () => {
301
- // Créer le wrapper avec des stubs pour les composants enfants
302
- wrapper = mount(ComplexDatePicker, {
303
- props: {
304
- format: 'DD/MM/YYYY',
305
- },
306
- global: {
307
- stubs: {
308
- DateTextInput: true,
309
- VMenu: true,
310
- SyTextField: true,
311
- VDatePicker: true,
312
- },
313
- },
95
+ it('handleDateSelected updates model, selection and emits event in range mode', async () => {
96
+ const wrapper = mountComponent({
97
+ label: 'Date Field',
98
+ format: 'DD/MM/YYYY',
99
+ displayRange: true,
314
100
  })
315
101
 
316
- // Simuler une entrée de date valide
317
- wrapper.vm.$emit('input', '15/01/2023')
102
+ await wrapper.vm.handleDateSelected(['01/01/2025', '10/01/2025'])
318
103
  await flushPromises()
319
104
 
320
- // Vérifier qu'il n'y a pas d'erreur de format
321
- expect(wrapper.vm.errorMessages).toHaveLength(0)
322
- })
323
-
324
- it('devrait émettre un événement blur quand un input perd le focus', async () => {
325
- // Utiliser la fonction createWrapper pour bénéficier de l'initialisation correcte des mocks
326
- wrapper = createWrapper()
105
+ const emittedUpdate = wrapper.emitted('update:modelValue')
106
+ expect(emittedUpdate).toBeTruthy()
327
107
 
328
- // S'assurer que le wrapper est correctement monté
329
- expect(wrapper.exists()).toBe(true)
108
+ const emittedSelected = wrapper.emitted('date-selected')
109
+ expect(emittedSelected).toBeTruthy()
330
110
 
331
- // Simuler l'émission d'un événement blur depuis le composant
332
- wrapper.vm.$emit('blur')
333
- await flushPromises()
111
+ expect(wrapper.vm.selectedDates).not.toBeNull()
334
112
 
335
- // Vérifier que l'événement est émis
336
- expect(wrapper.emitted()).toHaveProperty('blur')
337
- expect(wrapper.emitted('blur')).toBeTruthy()
113
+ const selection = wrapper.vm.selectedDates as Date | (Date | null)[]
114
+ const baseDate = Array.isArray(selection)
115
+ ? (selection.find(date => date instanceof Date) as Date | undefined)
116
+ : selection
117
+ expect(baseDate).toBeInstanceOf(Date)
118
+ expect(wrapper.vm.currentMonth).toBe(String((baseDate as Date).getMonth()))
119
+ expect(wrapper.vm.currentMonthName).toBeTruthy()
338
120
  })
339
121
 
340
- it('devrait émettre un événement date-selected quand une date est sélectionnée', async () => {
341
- // Créer le wrapper avec des stubs pour les composants enfants
342
- wrapper = mount(ComplexDatePicker, {
343
- props: {
344
- modelValue: '15/01/2023',
345
- },
346
- global: {
347
- stubs: {
348
- DateTextInput: true,
349
- VMenu: true,
350
- SyTextField: true,
351
- VDatePicker: true,
352
- },
353
- },
122
+ it('initializes from external modelValue with dateFormatReturn in single mode', async () => {
123
+ const wrapper = mountComponent({
124
+ label: 'Date Field',
125
+ format: 'DD/MM/YYYY',
126
+ dateFormatReturn: 'YYYY-MM-DD',
127
+ modelValue: '2025-01-02',
354
128
  })
355
129
 
356
- // Simuler l'émission d'un événement date-selected depuis le composant
357
- wrapper.vm.$emit('date-selected', '15/01/2023')
358
130
  await flushPromises()
359
131
 
360
- // Vérifier que l'événement est émis
361
- expect(wrapper.emitted('date-selected')).toBeTruthy()
132
+ // displayFormattedDate et l'input utilisent le format d'affichage
133
+ expect(wrapper.vm.displayFormattedDate).toBe('02/01/2025')
134
+ const input = wrapper.find('input')
135
+ expect((input.element as HTMLInputElement).value).toBe('02/01/2025')
362
136
  })
363
137
 
364
- // Tests pour le formatage automatique des dates pendant la saisie
365
- it('devrait formater correctement la date lors de la saisie', async () => {
366
- wrapper = createWrapper({
138
+ it('initializes selection correctly from range modelValue in range mode', async () => {
139
+ const wrapper = mountComponent({
140
+ label: 'Date Field',
367
141
  format: 'DD/MM/YYYY',
142
+ displayRange: true,
143
+ modelValue: ['01/01/2025', '10/01/2025'],
368
144
  })
369
145
 
370
- // Simuler une saisie dans le champ de texte
371
- const input = wrapper.find('input')
372
- if (input.exists()) {
373
- await input.setValue('15012023')
374
- await input.trigger('input')
375
- await flushPromises()
376
-
377
- // Vérifier que le composant existe toujours après l'opération
378
- expect(wrapper.exists()).toBe(true)
379
- }
380
- })
381
-
382
- it('devrait gérer différents formats de date', async () => {
383
- wrapper = createWrapper({
384
- format: 'MM-DD-YYYY',
385
- })
146
+ await flushPromises()
386
147
 
387
- // Vérifier que le format est bien passé au composant
388
- expect(wrapper.props('format')).toBe('MM-DD-YYYY')
148
+ expect(wrapper.vm.selectedDates).not.toBeNull()
389
149
 
390
- // Vérifier que le composant existe
391
- expect(wrapper.exists()).toBe(true)
150
+ const input = wrapper.find('input')
151
+ expect((input.element as HTMLInputElement).value).toBe('01/01/2025 - ')
392
152
  })
393
153
 
394
- // Tests pour la validation des dates
395
- it('devrait valider correctement les dates avec des règles personnalisées', async () => {
396
- // Réinitialiser les mocks avant le test
397
- vi.clearAllMocks()
398
- mockErrors.value = []
399
-
400
- const customRules = [
401
- { type: 'maxDate', options: { date: '2023-12-31' } },
402
- ]
403
-
404
- wrapper = createWrapper({
405
- customRules,
406
- modelValue: '15/01/2023',
407
- disableErrorHandling: false,
154
+ it('formatDateInput formats raw digits according to the format and computes cursor position', () => {
155
+ const wrapper = mountComponent({
156
+ label: 'Date Field',
157
+ format: 'DD/MM/YYYY',
408
158
  })
409
159
 
410
- // Utiliser la méthode exposée validateDates
411
- await wrapper.vm.validateDates(true)
412
-
413
- // Vérifier que validateField a été appelé au moins une fois
414
- expect(mockValidateField).toHaveBeenCalled()
160
+ const { formatted, cursorPos } = wrapper.vm.formatDateInput('0101', 4)
161
+ expect(formatted).toBe('01/01')
162
+ expect(cursorPos).toBe(formatted.length)
415
163
  })
416
164
 
417
- // Tests pour la validation des dépendances
418
- it('devrait valider les dépendances même en présence d\'erreurs de validation standard', async () => {
419
- // Réinitialiser les mocks avant le test
420
- vi.clearAllMocks()
421
- mockErrors.value = []
422
-
423
- // Créer un wrapper avec des règles personnalisées et des règles d'avertissement
424
- wrapper = createWrapper({
425
- customRules: [{ type: 'required', options: {} }],
426
- customWarningRules: [{ type: 'minDate', options: { date: '2023-01-01' } }],
427
- disableErrorHandling: false,
165
+ it('opens calendar when textFieldActivator is true and input is clicked', async () => {
166
+ const wrapper = mountComponent({
167
+ label: 'Date Field',
168
+ format: 'DD/MM/YYYY',
169
+ textFieldActivator: true,
428
170
  })
429
171
 
430
- // Simuler une erreur de validation standard
431
- mockErrors.value = ['La date est requise.']
432
-
433
- // Définir une date sélectionnée pour que la validation puisse s'exécuter
434
- wrapper.vm.selectedDates = new Date('2023-01-15')
435
-
436
- // Simuler la validation des dépendances
437
- await wrapper.vm.validateDates(true)
438
-
439
- // Vérifier que la validation des dépendances a été appelée malgré l'erreur standard
440
- expect(mockValidateField).toHaveBeenCalled()
441
- })
442
-
443
- // Tests pour la gestion des événements clavier
444
- it('devrait gérer correctement les événements clavier', async () => {
445
- wrapper = createWrapper()
446
-
447
- // Simuler un événement clavier sur le champ de texte
448
172
  const input = wrapper.find('input')
449
- if (input.exists()) {
450
- await input.setValue('15/01/2023')
451
- await input.trigger('keydown.tab')
452
- await flushPromises()
453
-
454
- // Vérifier que le composant existe toujours après l'opération
455
- expect(wrapper.exists()).toBe(true)
456
- }
173
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
174
+ await input.trigger('click')
175
+ await nextTick()
176
+ expect(wrapper.vm.isDatePickerVisible).toBe(true)
457
177
  })
458
178
 
459
- it('devrait réagir aux touches spéciales', async () => {
460
- wrapper = createWrapper()
179
+ it('toggles calendar visibility with Enter key on the input', async () => {
180
+ const wrapper = mountComponent({
181
+ label: 'Date Field',
182
+ format: 'DD/MM/YYYY',
183
+ })
461
184
 
462
- // Simuler un événement clavier sur le champ de texte
463
185
  const input = wrapper.find('input')
464
- if (input.exists()) {
465
- await input.setValue('15/01/2023')
466
- await input.trigger('keydown.enter')
467
- await flushPromises()
468
-
469
- // Vérifier que le composant existe toujours après l'opération
470
- expect(wrapper.exists()).toBe(true)
471
- }
472
- })
473
-
474
- // Tests pour la synchronisation avec modelValue
475
- it('devrait synchroniser correctement depuis modelValue', async () => {
476
- wrapper = createWrapper()
477
-
478
- // Mettre à jour la prop modelValue
479
- await wrapper.setProps({ modelValue: '2023-02-15' })
480
- await flushPromises()
481
-
482
- // Vérifier que le composant existe toujours après l'opération
483
- expect(wrapper.exists()).toBe(true)
484
-
485
- // Vérifier que selectedDates est exposé
486
- expect(wrapper.vm.selectedDates).toBeDefined()
186
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
187
+ await input.trigger('keydown', { key: 'Enter' })
188
+ await nextTick()
189
+ expect(wrapper.vm.isDatePickerVisible).toBe(true)
487
190
  })
488
191
 
489
- // Test spécifique pour la mise à jour de textInputValue avec des plages de dates
490
- it('devrait gérer correctement les plages de dates', async () => {
491
- // Réinitialiser les mocks avant le test
492
- vi.clearAllMocks()
493
-
494
- // Créer un wrapper avec displayRange=true
495
- const wrapper = mount(ComplexDatePicker, {
496
- props: {
497
- displayRange: true,
498
- format: 'DD/MM/YYYY',
499
- // Ne pas définir modelValue initialement pour éviter les problèmes d'initialisation
500
- },
501
- global: {
502
- stubs: {
503
- VDatePicker: true,
504
- VMenu: true,
505
- },
506
- },
507
- })
508
-
509
- await flushPromises()
510
-
511
- // Vérifier que le composant existe
512
- expect(wrapper.exists()).toBe(true)
513
-
514
- // Maintenant, mettre à jour le modelValue après l'initialisation du composant
515
- await wrapper.setProps({
516
- modelValue: ['2023-03-10', '2023-03-15'],
192
+ it('does not open calendar with Enter key when readonly', async () => {
193
+ const wrapper = mountComponent({
194
+ label: 'Date Field',
195
+ format: 'DD/MM/YYYY',
196
+ readonly: true,
517
197
  })
518
- await flushPromises()
519
198
 
520
- // Vérifier que le modelValue a été correctement mis à jour
521
- expect(wrapper.props('modelValue')).toEqual(['2023-03-10', '2023-03-15'])
199
+ const input = wrapper.find('input')
200
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
201
+ await input.trigger('keydown', { key: 'Enter' })
202
+ await nextTick()
203
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
522
204
  })
523
205
 
524
- // Test pour le formatage automatique des dates avec différents formats
525
- it('devrait formater automatiquement les dates selon différents formats', async () => {
526
- // Tester avec le format MM/DD/YYYY
527
- let wrapper = mount(ComplexDatePicker, {
528
- props: {
529
- format: 'MM/DD/YYYY',
530
- },
531
- global: {
532
- stubs: {
533
- VDatePicker: true,
534
- VMenu: true,
535
- SyTextField: {
536
- template: '<div><input type="text" :value="modelValue" @input="$emit(\'update:modelValue\', $event.target.value)" /></div>',
537
- props: ['modelValue'],
538
- emits: ['update:modelValue'],
539
- },
540
- },
541
- },
542
- })
543
-
544
- // Accéder directement à la fonction formatDateInput
545
- const { formatDateInput } = wrapper.vm
546
-
547
- // Tester le formatage automatique avec différentes entrées
548
- const result1 = formatDateInput('0315')
549
- expect(result1.formatted).toBe('03/15')
550
-
551
- const result2 = formatDateInput('03152023')
552
- expect(result2.formatted).toBe('03/15/2023')
553
-
554
- // Tester avec le format YYYY-MM-DD
555
- wrapper = createWrapper({
556
- format: 'YYYY-MM-DD',
206
+ it('emits closed when handleClickOutside is called while open', () => {
207
+ const wrapper = mountComponent({
208
+ label: 'Date Field',
209
+ format: 'DD/MM/YYYY',
557
210
  })
558
211
 
559
- // Accéder directement à la fonction formatDateInput
560
- const { formatDateInput: formatDateInput2 } = wrapper.vm
561
-
562
- // Tester le formatage automatique avec différentes entrées
563
- const result3 = formatDateInput2('2023')
564
- expect(result3.formatted).toBe('2023')
565
-
566
- const result4 = formatDateInput2('202303')
567
- expect(result4.formatted).toBe('2023-03')
568
-
569
- const result5 = formatDateInput2('20230315')
570
- expect(result5.formatted).toBe('2023-03-15')
571
- })
572
-
573
- // Tests pour la validation du format de date
574
- it('devrait valider correctement le format de date', async () => {
575
- wrapper = createWrapper({ format: 'DD/MM/YYYY', required: true })
576
-
577
- // Accéder à la fonction validateDateFormat
578
- const { validateDateFormat } = wrapper.vm
212
+ const outsideElement = document.createElement('div')
213
+ wrapper.vm.isDatePickerVisible = true
214
+ wrapper.vm.handleClickOutside({ target: outsideElement } as unknown as MouseEvent)
579
215
 
580
- // Tester avec une date vide
581
- const emptyResult = validateDateFormat('')
582
- // Avec hasInteracted.value = false par défaut, isValid devrait être true
583
- expect(emptyResult.isValid).toBe(true)
584
- expect(emptyResult.message).toBe('')
585
-
586
- // Simuler une interaction avec le champ
587
- const input = wrapper.find('input')
588
- if (input.exists()) {
589
- await input.trigger('focus')
590
- await input.trigger('blur')
591
- await flushPromises()
592
-
593
- // Maintenant hasInteracted.value devrait être true
594
- const emptyResultAfterInteraction = validateDateFormat('')
595
- expect(emptyResultAfterInteraction.isValid).toBe(false)
596
- expect(emptyResultAfterInteraction.message).toBe('La date est requise.')
597
- }
598
-
599
- // Tester avec une date invalide (caractères non autorisés)
600
- const invalidCharsResult = validateDateFormat('12/AB/2023')
601
- expect(invalidCharsResult.isValid).toBe(false)
602
-
603
- // Tester avec une date au format invalide
604
- const invalidFormatResult = validateDateFormat('32/13/2023')
605
- expect(invalidFormatResult.isValid).toBe(false)
606
-
607
- // Tester avec une date valide
608
- const validResult = validateDateFormat('15/03/2023')
609
- expect(validResult.isValid).toBe(true)
610
- expect(validResult.message).toBe('')
216
+ const closedEvents = wrapper.emitted('closed')
217
+ expect(closedEvents).toBeTruthy()
611
218
  })
612
219
 
613
- // Tests pour le formatage automatique des dates pendant la saisie
614
- it('devrait formater automatiquement les dates pendant la saisie', async () => {
615
- // Créer un wrapper avec le format DD/MM/YYYY
616
- wrapper = createWrapper({
220
+ it('updates internal month and year when VDatePicker emits updates', async () => {
221
+ const wrapper = mountComponent({
222
+ label: 'Date Field',
617
223
  format: 'DD/MM/YYYY',
618
224
  })
619
225
 
620
- // Accéder directement à la fonction formatDateInput
621
- const { formatDateInput } = wrapper.vm
226
+ wrapper.vm.isDatePickerVisible = true
227
+ await nextTick()
622
228
 
623
- // Tester le formatage automatique avec différentes entrées
624
- const result1 = formatDateInput('0315')
625
- expect(result1.formatted).toBe('03/15')
229
+ const datePicker = wrapper.findComponent({ name: 'VDatePicker' })
230
+ expect(datePicker.exists()).toBe(true)
626
231
 
627
- const result2 = formatDateInput('03152023')
628
- expect(result2.formatted).toBe('03/15/2023')
232
+ await datePicker.vm.$emit('update:month', '5')
233
+ await datePicker.vm.$emit('update:year', '2030')
629
234
 
630
- // Tester avec une entrée déjà formatée
631
- const result3 = formatDateInput('12/03/2023')
632
- expect(result3.formatted).toBe('12/03/2023')
235
+ expect(wrapper.vm.currentMonth).toBe('5')
236
+ expect(wrapper.vm.currentMonthName).not.toBeNull()
237
+ expect(wrapper.vm.currentYear).toBe('2030')
238
+ expect(wrapper.vm.currentYearName).toBe('2030')
633
239
  })
634
240
 
635
- // Test spécifique pour la fonction formatDateInput
636
- it('devrait formater correctement une date selon le format spécifié', async () => {
637
- // Créer un wrapper avec le format DD/MM/YYYY
638
- wrapper = mount(ComplexDatePicker, {
639
- props: {
640
- format: 'DD/MM/YYYY',
641
- },
642
- global: {
643
- stubs: {
644
- VDatePicker: true,
645
- VMenu: true,
646
- SyTextField: true,
647
- },
648
- },
241
+ it('validateOnSubmit returns false when required and empty in text-only mode', () => {
242
+ const wrapper = mountComponent({
243
+ label: 'Date Field',
244
+ noCalendar: true,
245
+ required: true,
246
+ format: 'DD/MM/YYYY',
649
247
  })
650
248
 
651
- // Accéder à la fonction formatDateInput
652
- const { formatDateInput } = wrapper.vm
653
-
654
- // Tester avec une entrée vide
655
- const emptyResult = formatDateInput('')
656
- expect(emptyResult.formatted).toBe('')
657
-
658
- // Tester avec des chiffres sans séparateur
659
- const digitsResult = formatDateInput('1203')
660
- expect(digitsResult.formatted).toBe('12/03')
661
-
662
- // Tester avec une date complète sans séparateurs
663
- const fullDateResult = formatDateInput('12032023')
664
- expect(fullDateResult.formatted).toBe('12/03/2023')
665
-
666
- // Tester avec une date déjà formatée
667
- const formattedResult = formatDateInput('12/03/2023')
668
- expect(formattedResult.formatted).toBe('12/03/2023')
249
+ const result = wrapper.vm.validateOnSubmit()
250
+ expect(result).toBe(false)
669
251
  })
670
252
 
671
- // Test pour la fonction updateDisplayFormattedDate
672
- it('devrait mettre à jour displayFormattedDate', async () => {
673
- // Créer un wrapper avec une date sélectionnée
674
- wrapper = createWrapper({
253
+ it('validateOnSubmit returns true when a valid value is present in text-only mode', async () => {
254
+ const wrapper = mountComponent({
255
+ label: 'Date Field',
256
+ noCalendar: true,
257
+ required: true,
675
258
  format: 'DD/MM/YYYY',
676
- modelValue: '2023-01-15',
259
+ modelValue: '01/01/2025',
677
260
  })
678
261
 
679
- // Vérifier que displayFormattedDate est initialisé
680
- expect(wrapper.vm.displayFormattedDate).toBeDefined()
262
+ await nextTick()
263
+ const result = wrapper.vm.validateOnSubmit()
264
+ expect(result).toBe(true)
265
+ })
266
+
267
+ it('handleSelectToday selects today and keeps component usable', async () => {
268
+ const wrapper = mountComponent()
681
269
 
682
- // Simuler une mise à jour de la date sélectionnée
683
- await wrapper.setProps({ modelValue: '2023-02-20' })
270
+ await wrapper.vm.handleSelectToday()
684
271
  await flushPromises()
685
272
 
686
- // Vérifier que le composant existe toujours
273
+ expect(wrapper.vm.selectedDates).not.toBeNull()
687
274
  expect(wrapper.exists()).toBe(true)
688
275
  })
689
276
 
690
- // Test pour la validation avec required=false
691
- it('ne devrait pas afficher d\'erreur pour une date vide si le champ n\'est pas requis', async () => {
692
- // Monter le composant avec required=false
693
- wrapper = mount(ComplexDatePicker, {
694
- props: {
695
- required: false,
696
- format: 'DD/MM/YYYY',
697
- },
698
- global: {
699
- stubs: {
700
- VDatePicker: true,
701
- VMenu: true,
702
- SyTextField: true,
703
- },
704
- },
277
+ it('validateOnSubmit returns false when required and empty in calendar mode', () => {
278
+ const wrapper = mountComponent({
279
+ label: 'Date Field',
280
+ required: true,
281
+ format: 'DD/MM/YYYY',
705
282
  })
706
283
 
707
- // Simuler une saisie vide puis perte de focus
708
- const input = wrapper.find('input')
709
- if (input.exists()) {
710
- await input.setValue('')
711
- await input.trigger('blur')
712
- await flushPromises()
713
-
714
- // Vérifier qu'il n'y a pas d'erreur
715
- expect(mockErrors.value.length).toBe(0)
716
- }
284
+ const result = wrapper.vm.validateOnSubmit()
285
+ expect(result).toBe(false)
286
+ // Should surface at least one error message
287
+ expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
717
288
  })
718
289
 
719
- // Test pour la validation avec required=true
720
- it('devrait afficher une erreur pour une date vide si le champ est requis', async () => {
721
- // Monter le composant avec required=true
722
- wrapper = mount(ComplexDatePicker, {
723
- props: {
724
- required: true,
725
- format: 'DD/MM/YYYY',
726
- disableErrorHandling: false,
727
- },
728
- global: {
729
- stubs: {
730
- VDatePicker: true,
731
- VMenu: true,
732
- SyTextField: true,
733
- },
734
- },
290
+ it('validateDates flags an error when end date is before start date in range mode', () => {
291
+ const wrapper = mountComponent({
292
+ label: 'Date Field',
293
+ format: 'DD/MM/YYYY',
294
+ displayRange: true,
735
295
  })
736
296
 
737
- // Simuler une saisie vide puis perte de focus
738
- const input = wrapper.find('input')
739
- if (input.exists()) {
740
- await input.setValue('')
741
- await input.trigger('input')
742
- await input.trigger('blur') // Pour déclencher hasInteracted = true
743
- await flushPromises()
744
-
745
- // Forcer la validation
746
- await wrapper.vm.validateDates(true)
747
-
748
- // Vérifier qu'il y a une erreur
749
- expect(mockErrors.value.length).toBeGreaterThan(0)
750
- }
751
- })
752
-
753
- // Test pour la validation avec des caractères invalides
754
- it('devrait rejeter une date avec des caractères invalides', async () => {
755
- // Monter le composant
756
- wrapper = mount(ComplexDatePicker, {
757
- props: {
758
- format: 'DD/MM/YYYY',
759
- disableErrorHandling: false,
760
- },
761
- global: {
762
- stubs: {
763
- VDatePicker: true,
764
- VMenu: true,
765
- SyTextField: true,
766
- },
767
- },
768
- })
297
+ // Start date after end date -> invalid range
298
+ wrapper.vm.selectedDates = [
299
+ new Date(2025, 0, 10),
300
+ new Date(2025, 0, 1),
301
+ ]
769
302
 
770
- // Simuler une saisie avec des caractères invalides
771
- const input = wrapper.find('input')
772
- if (input.exists()) {
773
- await input.setValue('15/AB/2023')
774
- await input.trigger('input')
775
- await input.trigger('blur')
776
- await flushPromises()
777
-
778
- // Vérifier que la validation a été appelée
779
- expect(mockClearValidation).toHaveBeenCalled()
780
- }
303
+ const result = wrapper.vm.validateDates(true)
304
+ expect(result.hasError).toBe(true)
305
+ expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
781
306
  })
782
307
 
783
- // Test pour la validation avec un format de date invalide
784
- it('devrait rejeter une date avec un format invalide', async () => {
785
- // Monter le composant
786
- wrapper = mount(ComplexDatePicker, {
787
- props: {
788
- format: 'DD/MM/YYYY',
789
- disableErrorHandling: false,
790
- },
791
- global: {
792
- stubs: {
793
- VDatePicker: true,
794
- VMenu: true,
795
- SyTextField: true,
796
- },
797
- },
308
+ it('validateDates does not flag an error for an incomplete range when not forced', () => {
309
+ const wrapper = mountComponent({
310
+ label: 'Date Field',
311
+ format: 'DD/MM/YYYY',
312
+ displayRange: true,
798
313
  })
799
314
 
800
- // Simuler une saisie avec un format invalide (date impossible)
801
- const input = wrapper.find('input')
802
- if (input.exists()) {
803
- await input.setValue('31/02/2023') // Le 31 février n'existe pas
804
- await input.trigger('input')
805
- await input.trigger('blur')
806
- await flushPromises()
807
-
808
- // Vérifier que la validation a été appelée
809
- expect(mockClearValidation).toHaveBeenCalled()
810
- }
811
- })
812
-
813
- // Test pour la validation avec un format de date valide
814
- it('devrait accepter une date valide avec le format principal', async () => {
815
- // Monter le composant
816
- wrapper = mount(ComplexDatePicker, {
817
- props: {
818
- format: 'DD/MM/YYYY',
819
- disableErrorHandling: false,
820
- },
821
- global: {
822
- stubs: {
823
- VDatePicker: true,
824
- VMenu: true,
825
- SyTextField: true,
826
- },
827
- },
828
- })
315
+ // First boundary set, second still empty (user is still typing)
316
+ wrapper.vm.selectedDates = [
317
+ new Date(2025, 0, 1),
318
+ null,
319
+ ]
829
320
 
830
- // Simuler une saisie avec une date valide
831
- const input = wrapper.find('input')
832
- if (input.exists()) {
833
- await input.setValue('15/03/2023')
834
- await input.trigger('input')
835
- await input.trigger('blur')
836
- await flushPromises()
837
-
838
- // Vérifier que la validation a été appelée
839
- expect(mockClearValidation).toHaveBeenCalled()
840
- }
321
+ const result = wrapper.vm.validateDates()
322
+ expect(result.hasError).toBe(false)
323
+ expect(wrapper.vm.errorMessages.length).toBe(0)
841
324
  })
842
325
 
843
- // Test pour la validation avec un format de retour différent
844
- it('devrait accepter une date valide avec le format de retour', async () => {
845
- // Monter le composant avec un format de retour différent
846
- wrapper = mount(ComplexDatePicker, {
847
- props: {
848
- format: 'DD/MM/YYYY',
849
- dateFormatReturn: 'YYYY-MM-DD',
850
- },
851
- global: {
852
- stubs: {
853
- VDatePicker: true,
854
- VMenu: true,
855
- SyTextField: true,
856
- },
857
- },
326
+ it('reset clears selection, errors and closes the calendar', async () => {
327
+ const wrapper = mountComponent({
328
+ label: 'Date Field',
329
+ required: true,
330
+ format: 'DD/MM/YYYY',
858
331
  })
859
332
 
860
- // Simuler une saisie avec une date au format de retour
861
- const input = wrapper.find('input')
862
- if (input.exists()) {
863
- await input.setValue('2023-01-15')
864
- await input.trigger('input')
865
- await input.trigger('blur')
866
- await flushPromises()
867
-
868
- // Vérifier qu'il n'y a pas d'erreur
869
- expect(mockErrors.value.length).toBe(0)
870
- }
871
- })
872
-
873
- // Tests pour la validation de la saisie manuelle
874
- it('devrait valider correctement une date valide saisie manuellement', async () => {
875
- wrapper = createWrapper({ format: 'DD/MM/YYYY' })
333
+ // Simuler une erreur required
334
+ wrapper.vm.selectedDates = null
335
+ wrapper.vm.validateDates(true)
336
+ expect(wrapper.vm.errorMessages.length).toBeGreaterThan(0)
876
337
 
877
- // Simuler une saisie dans le champ de texte
878
- const input = wrapper.find('input')
879
- if (input.exists()) {
880
- // Saisir une date valide
881
- await input.setValue('15/01/2023')
882
- await input.trigger('input')
883
- await input.trigger('blur')
884
- await flushPromises()
885
-
886
- // Vérifier qu'il n'y a pas d'erreur
887
- expect(mockErrors.value.length).toBe(0)
888
- }
889
- })
890
-
891
- it('devrait détecter une date invalide saisie manuellement', async () => {
892
- // Réinitialiser les mocks avant le test
893
- vi.clearAllMocks()
894
- mockErrors.value = []
895
-
896
- wrapper = createWrapper({ format: 'DD/MM/YYYY', disableErrorHandling: false })
897
-
898
- // Simuler une saisie dans le champ de texte
899
- const input = wrapper.find('input')
900
- if (input.exists()) {
901
- // Saisir une date invalide
902
- await input.setValue('99/99/9999')
903
- await input.trigger('input')
904
- await input.trigger('blur')
905
- await flushPromises()
906
-
907
- // Vérifier que la validation a été appelée
908
- expect(mockClearValidation).toHaveBeenCalled()
909
- }
910
- })
911
-
912
- // Tests pour la gestion de la perte de focus
913
- it('devrait émettre un événement blur lors de la perte de focus', async () => {
914
- // Utiliser createWrapper pour bénéficier de l'initialisation correcte des mocks
915
- wrapper = createWrapper()
916
-
917
- // S'assurer que le wrapper est correctement monté
918
- expect(wrapper.exists()).toBe(true)
338
+ // Ouvrir le calendrier puis réinitialiser
339
+ await wrapper.vm.toggleDatePicker()
340
+ await nextTick()
341
+ expect(wrapper.vm.isDatePickerVisible).toBe(true)
919
342
 
920
- // Simuler un événement blur en émettant directement l'événement
921
- wrapper.vm.$emit('blur')
343
+ wrapper.vm.reset()
922
344
  await flushPromises()
923
345
 
924
- // Vérifier que l'événement blur a été émis
925
- expect(wrapper.emitted()).toHaveProperty('blur')
926
- expect(wrapper.emitted('blur')).toBeTruthy()
927
- })
928
-
929
- it('devrait respecter la propriété readonly dans le mode calendrier', async () => {
930
- // Monter le composant avec readonly=true et noCalendar=false (mode calendrier)
931
- wrapper = createWrapper({
932
- readonly: true,
933
- noCalendar: false,
934
- })
935
-
936
- // Vérifier que le composant a bien la propriété readonly définie
937
- expect(wrapper.props('readonly')).toBe(true)
938
-
939
- // Note: Ce test vérifie que la propriété readonly est correctement passée au composant.
940
- // La correction du bug a été de modifier ':readonly="false"' en ':readonly="props.readonly"'
941
- // dans le template du ComplexDatePicker pour que le mode readonly soit respecté.
346
+ expect(wrapper.vm.selectedDates).toBeNull()
347
+ expect(wrapper.vm.errorMessages.length).toBe(0)
348
+ expect(wrapper.vm.isDatePickerVisible).toBe(false)
942
349
  })
943
350
  })