@cnamts/synapse 1.0.15 → 1.0.16

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 (394) hide show
  1. package/dist/{DateFilter-isr8mXVb.js → DateFilter-DSwJUvBu.js} +12 -12
  2. package/dist/{NumberFilter-BOe7DqWX.js → NumberFilter-CwsbYyz4.js} +1 -1
  3. package/dist/{PeriodFilter-WTprpO40.js → PeriodFilter-csnEZU30.js} +1 -1
  4. package/dist/{SelectFilter-CqlG5dmI.js → SelectFilter-Bd5fndzR.js} +1 -1
  5. package/dist/{TextFilter-fVW5bsRw.js → TextFilter-B6gxzq2a.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +2836 -2845
  7. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +3 -3
  8. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +7 -7
  9. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +3 -3
  10. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +3 -3
  11. package/dist/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.d.ts +3 -3
  12. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +3 -3
  13. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +3 -3
  14. package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +3 -3
  15. package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +3 -3
  16. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +18 -18
  17. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +9 -9
  18. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +3 -3
  19. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +3 -3
  20. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +3 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +5 -3
  22. package/dist/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.d.ts +3 -3
  23. package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +3 -3
  24. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +3 -3
  26. package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +3 -3
  27. package/dist/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.d.ts +9 -0
  28. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1288 -1284
  29. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +1936 -1930
  30. package/dist/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.d.ts +3 -3
  31. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +2838 -2865
  32. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +3 -3
  33. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +2843 -2870
  34. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +397 -397
  35. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +642 -640
  36. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +233 -5
  37. package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +9 -9
  38. package/dist/components/Captcha/CaptchaHelpdesk.d.ts +6 -0
  39. package/dist/components/CookieBanner/CookieBanner.d.ts +117 -119
  40. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +484 -484
  41. package/dist/components/CookiesSelection/CookiesSelection.d.ts +104 -106
  42. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +14 -10
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +118 -129
  44. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -3
  45. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1 -1
  46. package/dist/components/Customs/SyForm/SyForm.d.ts +60 -53
  47. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +88 -0
  48. package/dist/components/Customs/SyRadioGroup/locales.d.ts +3 -0
  49. package/dist/components/Customs/SyTextField/SyTextField.d.ts +644 -642
  50. package/dist/components/DataList/DataList.d.ts +6 -1
  51. package/dist/components/DataListGroup/DataListGroup.d.ts +14 -2
  52. package/dist/components/DataListItem/DataListItem.d.ts +3 -0
  53. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +2988 -3100
  54. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1458 -1558
  55. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +655 -651
  56. package/dist/components/DatePicker/composables/index.d.ts +4 -0
  57. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +1 -1
  58. package/dist/components/DatePicker/composables/useCalendarKeyboardNavigation.d.ts +11 -0
  59. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +25 -0
  60. package/dist/components/DatePicker/composables/useDateTextField.d.ts +61 -0
  61. package/dist/components/DatePicker/composables/useHolidayHighlighting.d.ts +15 -0
  62. package/dist/components/DatePicker/constants/messages.d.ts +0 -1
  63. package/dist/components/DialogBox/DialogBox.d.ts +175 -177
  64. package/dist/components/FilterSideBar/FilterSideBar.d.ts +161 -171
  65. package/dist/components/FooterBar/FooterBar.d.ts +5 -5
  66. package/dist/components/HeaderBar/HeaderBar.d.ts +2 -2
  67. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -1
  68. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +1 -1
  69. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +234 -258
  70. package/dist/components/LangBtn/LangBtn.d.ts +173 -179
  71. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +1 -1
  72. package/dist/components/LunarCalendar/LunarCalendar.d.ts +29 -0
  73. package/dist/components/LunarCalendar/useLunarCalendarRules.d.ts +5 -0
  74. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +13 -0
  75. package/dist/components/NirField/NirField.d.ts +1296 -1292
  76. package/dist/components/PaginatedTable/PaginatedTable.d.ts +1 -1
  77. package/dist/components/PeriodField/PeriodField.d.ts +5844 -6068
  78. package/dist/components/PhoneField/PhoneField.d.ts +645 -643
  79. package/dist/components/SyAlert/SyAlert.d.ts +31 -31
  80. package/dist/components/SyTextArea/SyTextArea.d.ts +395 -395
  81. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +193 -227
  82. package/dist/components/Tables/SyTable/SyTable.d.ts +192 -226
  83. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  84. package/dist/components/Tables/common/SyTablePagination.d.ts +118 -129
  85. package/dist/components/Tables/common/TableHeader.d.ts +52 -2
  86. package/dist/components/Tables/common/filters/DateFilter.d.ts +1 -1
  87. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  88. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  89. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  90. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  91. package/dist/components/Tables/common/locales.d.ts +1 -0
  92. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +86 -90
  93. package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -2
  94. package/dist/components/Tables/common/types.d.ts +3 -2
  95. package/dist/components/Tables/common/useTableCheckbox.d.ts +3 -2
  96. package/dist/components/Tables/common/useTableFilter.d.ts +1 -1
  97. package/dist/components/Tables/common/useTableItems.d.ts +6 -8
  98. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +18 -18
  99. package/dist/components/index.d.ts +2 -0
  100. package/dist/design-system-v3.js +101 -98
  101. package/dist/design-system-v3.umd.cjs +25 -33
  102. package/dist/main-DkZZpa3S.js +35197 -0
  103. package/dist/style.css +1 -1
  104. package/dist/utils/formatNir/formatNir.d.ts +2 -0
  105. package/dist/utils/index.d.ts +1 -0
  106. package/dist/utils/insertAt.d.ts +1 -0
  107. package/dist/utils/rules/validateDateValue.d.ts +14 -0
  108. package/dist/vuetifyConfig.d.ts +6 -6
  109. package/package.json +4 -4
  110. package/src/assets/tokens.scss +2 -0
  111. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +1 -18
  112. package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +178 -9
  113. package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +28 -121
  114. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +15 -270
  115. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +12 -194
  116. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +1 -18
  117. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +1 -18
  118. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +12 -194
  119. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +9 -9
  120. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +5 -4
  121. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/AmeliproAutoCompleteField.spec.ts +6 -6
  122. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -0
  123. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +135 -9
  124. package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +20 -5
  125. package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/AmeliproBreadcrumb.spec.ts +195 -28
  126. package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/__snapshots__/AmeliproBreadcrumb.spec.ts.snap +193 -124
  127. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +1 -1
  128. package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +364 -12
  129. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +30 -390
  130. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +4 -36
  131. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.stories.ts +10 -10
  132. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +7 -7
  133. package/src/components/Amelipro/AmeliproCheckbox/__tests__/AmeliproCheckbox.spec.ts +5 -5
  134. package/src/components/Amelipro/AmeliproCheckbox/__tests__/__snapshots__/AmeliproCheckbox.spec.ts.snap +1 -1
  135. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.stories.ts +7 -6
  136. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +6 -6
  137. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/AmeliproCheckboxGroup.spec.ts +6 -6
  138. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/__snapshots__/AmeliproCheckboxGroup.spec.ts.snap +2 -2
  139. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -43
  140. package/src/components/Amelipro/AmeliproContentLayout/__tests__/AmeliproContentLayout.spec.ts +80 -9
  141. package/src/components/Amelipro/AmeliproContentLayout/__tests__/__snapshots__/AmeliproContentLayout.spec.ts.snap +25 -4
  142. package/src/components/Amelipro/AmeliproCopyBtn/__tests__/__snapshots__/AmeliproCopyBtn.spec.ts.snap +1 -13
  143. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +7 -6
  144. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +5 -5
  145. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +187 -39
  146. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +147 -147
  147. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +1 -1
  148. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +0 -2
  149. package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/AmeliproErrorTemplate.spec.ts +160 -20
  150. package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/__snapshots__/AmeliproErrorTemplate.spec.ts.snap +34 -177
  151. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +1 -0
  152. package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +248 -19
  153. package/src/components/Amelipro/AmeliproFilePreview/__tests__/__snapshots__/AmeliproFilePreview.spec.ts.snap +34 -203
  154. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +6 -144
  155. package/src/components/Amelipro/AmeliproIcon/AmeliproIcon.vue +20 -2
  156. package/src/components/Amelipro/AmeliproIcon/__tests__/__snapshots__/AmeliproIcon.spec.ts.snap +1 -25
  157. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.stories.ts +5 -5
  158. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -6
  159. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/AmeliproIllustratedRadioGroup.spec.ts +22 -22
  160. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/__snapshots__/AmeliproIllustratedRadioGroup.spec.ts.snap +2 -2
  161. package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/AmeliproMultipleFoldingCard.spec.ts +304 -0
  162. package/src/components/Amelipro/AmeliproMultipleFoldingCard/__tests__/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +373 -0
  163. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.stories.ts +2 -0
  164. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +28 -2
  165. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -173
  166. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -1
  167. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +162 -72
  168. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/AmeliproPostalAddressCityRow.spec.ts +2 -2
  169. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +6 -39
  170. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.stories.ts +3 -3
  171. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +8 -8
  172. package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/AmeliproPostalAddressField.spec.ts +2 -2
  173. package/src/components/Amelipro/AmeliproPostalAddressField/{tests → __tests__}/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +11 -52
  174. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.stories.ts +7 -7
  175. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +8 -8
  176. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/AmeliproRadioGroup.spec.ts +6 -6
  177. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/__snapshots__/AmeliproRadioGroup.spec.ts.snap +2 -2
  178. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +2 -14
  179. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.stories.ts +7 -7
  180. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +4 -4
  181. package/src/components/Amelipro/AmeliproSelect/__tests__/AmeliproSelect.spec.ts +12 -12
  182. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +2 -2
  183. package/src/components/Amelipro/AmeliproStepper/__tests__/__snapshots__/AmeliproStepper.spec.ts.snap +2 -2
  184. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +2 -2
  185. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +463 -68
  186. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +176 -511
  187. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.stories.ts +6 -6
  188. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -4
  189. package/src/components/Amelipro/AmeliproTextArea/__tests__/AmeliproTextArea.spec.ts +3 -3
  190. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +1 -2
  191. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.stories.ts +10 -10
  192. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +4 -4
  193. package/src/components/Amelipro/AmeliproTextField/__tests__/AmeliproTextField.spec.ts +5 -5
  194. package/src/components/Amelipro/AmeliproTextField/tests/__snapshots__/AmeliproTextField.spec.ts.snap +162 -0
  195. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +44 -0
  196. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +79 -1
  197. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +0 -2
  198. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.stories.ts +2 -2
  199. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +21 -7
  200. package/src/components/Amelipro/AmeliproUpload/__tests__/AmeliproUpload.spec.ts +252 -44
  201. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +166 -0
  202. package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/ServiceBtn.spec.ts +137 -0
  203. package/src/components/Amelipro/ServiceMenu/ServiceBtn/__tests__/__snapshots__/ServiceBtn.spec.ts.snap +56 -0
  204. package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/ServiceList.spec.ts +116 -0
  205. package/src/components/Amelipro/ServiceMenu/ServiceList/__tests__/__snapshots__/ServiceList.spec.ts.snap +58 -0
  206. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/ServiceMenuContent.spec.ts +118 -0
  207. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/__tests__/__snapshots__/ServiceMenuContent.spec.ts.snap +151 -0
  208. package/src/components/Amelipro/ServiceMenu/__tests__/ServiceMenu.spec.ts +259 -0
  209. package/src/components/Amelipro/ServiceMenu/__tests__/__snapshots__/ServiceMenu.spec.ts.snap +102 -0
  210. package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/StructureBtn.spec.ts +90 -0
  211. package/src/components/Amelipro/StructureMenu/StructureBtn/__tests__/__snapshots__/StructureBtn.spec.ts.snap +63 -0
  212. package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/StructureItem.spec.ts +133 -0
  213. package/src/components/Amelipro/StructureMenu/StructureItem/__tests__/__snapshots__/StructureItem.spec.ts.snap +143 -0
  214. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/StructureList.spec.ts +190 -0
  215. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +109 -0
  216. package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/StructureTabs.spec.ts +159 -0
  217. package/src/components/Amelipro/StructureMenu/StructureTabs/__tests__/__snapshots__/StructureTabs.spec.ts.snap +103 -0
  218. package/src/components/Amelipro/StructureMenu/__tests__/StructureMenu.spec.ts +165 -0
  219. package/src/components/Amelipro/StructureMenu/__tests__/__snapshots__/StructureMenu.spec.ts.snap +39 -0
  220. package/src/components/Amelipro/UserInformationSummary/__tests__/UserInformationSummary.spec.ts +140 -0
  221. package/src/components/Amelipro/UserInformationSummary/{tests → __tests__}/__snapshots__/UserInformationSummary.spec.ts.snap +17 -24
  222. package/src/components/Amelipro/UserMenu/UserMenu.stories.ts +3 -3
  223. package/src/components/Amelipro/UserMenu/UserMenu.vue +2 -2
  224. package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/UserMenuDetails.spec.ts +150 -0
  225. package/src/components/Amelipro/UserMenu/UserMenuDetails/__tests__/__snapshots__/UserMenuDetails.spec.ts.snap +117 -0
  226. package/src/components/Amelipro/UserMenu/__tests__/UserMenu.spec.ts +141 -0
  227. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +103 -0
  228. package/src/components/Captcha/Captcha.vue +9 -24
  229. package/src/components/Captcha/CaptchaHelpdesk.vue +42 -0
  230. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +256 -268
  231. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +0 -1
  232. package/src/components/Customs/Selects/SelectBtnField/Accessibilite.stories.ts +4 -0
  233. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +154 -82
  234. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +229 -125
  235. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +12 -12
  236. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +344 -826
  237. package/src/components/Customs/Selects/SySelect/SySelect.vue +215 -169
  238. package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +4 -2
  239. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +7 -9
  240. package/src/components/Customs/SyForm/SyForm.mdx +47 -7
  241. package/src/components/Customs/SyForm/SyForm.stories.ts +38 -34
  242. package/src/components/Customs/SyForm/SyForm.vue +27 -6
  243. package/src/components/Customs/SyRadioGroup/Accessibilite.mdx +263 -0
  244. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +37 -0
  245. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +665 -0
  246. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +324 -0
  247. package/src/components/Customs/SyRadioGroup/locales.ts +3 -0
  248. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +135 -0
  249. package/src/components/Customs/SyTabs/SyTabs.vue +1 -1
  250. package/src/components/Customs/SyTextField/SyTextField.vue +225 -194
  251. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +32 -2
  252. package/src/components/DataList/DataList.mdx +3 -1
  253. package/src/components/DataList/DataList.stories.ts +67 -17
  254. package/src/components/DataList/DataList.vue +13 -1
  255. package/src/components/DataListGroup/DataListGroup.stories.ts +42 -12
  256. package/src/components/DataListGroup/DataListGroup.vue +14 -1
  257. package/src/components/DataListItem/DataListItem.vue +10 -2
  258. package/src/components/DataListItem/tests/DataListItem.spec.ts +1 -1
  259. package/src/components/DatePicker/CalendarMode/DatePicker.vue +157 -178
  260. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +5 -0
  261. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +179 -179
  262. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +261 -258
  263. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +234 -827
  264. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +46 -73
  265. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +350 -0
  266. package/src/components/DatePicker/composables/index.ts +4 -0
  267. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +270 -0
  268. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +61 -3
  269. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +198 -0
  270. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +36 -2
  271. package/src/components/DatePicker/composables/tests/useInputHandler.spec.ts +755 -0
  272. package/src/components/DatePicker/composables/tests/useKeyboardEvents.spec.ts +168 -0
  273. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +40 -34
  274. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +1 -2
  275. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +155 -0
  276. package/src/components/DatePicker/composables/useDatePickerState.ts +163 -0
  277. package/src/components/DatePicker/composables/useDateRangeInput.ts +4 -8
  278. package/src/components/DatePicker/composables/useDateTextField.ts +156 -0
  279. package/src/components/DatePicker/composables/useHolidayHighlighting.ts +64 -0
  280. package/src/components/DatePicker/composables/useInputHandler.ts +25 -19
  281. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +52 -26
  282. package/src/components/DatePicker/constants/messages.ts +0 -1
  283. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +2 -2
  284. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +16 -8
  285. package/src/components/ErrorPage/ErrorPage.vue +1 -1
  286. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +17 -0
  287. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +0 -1
  288. package/src/components/LunarCalendar/LunarCalendar.mdx +33 -0
  289. package/src/components/LunarCalendar/LunarCalendar.stories.ts +232 -0
  290. package/src/components/LunarCalendar/LunarCalendar.vue +57 -0
  291. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +79 -0
  292. package/src/components/LunarCalendar/useLunarCalendarRules.ts +96 -0
  293. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +47 -0
  294. package/src/components/NotificationBar/NotificationBar.vue +2 -2
  295. package/src/components/PaginatedTable/PaginatedTable.stories.ts +15 -10
  296. package/src/components/PaginatedTable/PaginatedTable.vue +24 -35
  297. package/src/components/PhoneField/PhoneField.vue +102 -83
  298. package/src/components/SearchListField/tests/SearchListField.spec.ts +7 -53
  299. package/src/components/SyAlert/SyAlert.vue +5 -2
  300. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +24 -72
  301. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +521 -23
  302. package/src/components/Tables/SyServerTable/SyServerTable.vue +19 -13
  303. package/src/components/Tables/SyTable/SyTable.stories.ts +391 -18
  304. package/src/components/Tables/SyTable/SyTable.vue +16 -11
  305. package/src/components/Tables/common/TableHeader.vue +16 -7
  306. package/src/components/Tables/common/filters/DateFilter.vue +1 -1
  307. package/src/components/Tables/common/locales.ts +1 -0
  308. package/src/components/Tables/common/tableFilterUtils.ts +3 -3
  309. package/src/components/Tables/common/types.ts +4 -2
  310. package/src/components/Tables/common/useTableCheckbox.ts +4 -3
  311. package/src/components/Tables/common/useTableFilter.ts +2 -2
  312. package/src/components/Tables/common/useTableItems.ts +4 -19
  313. package/src/components/index.ts +2 -0
  314. package/src/composables/validation/tests/useFormValidation.spec.ts +251 -0
  315. package/src/composables/validation/tests/useValidatable.spec.ts +90 -0
  316. package/src/stories/Accessibilite/Audit/Exemptions-derogations.mdx +241 -0
  317. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +17 -10
  318. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -0
  319. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +160 -106
  320. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +2 -1
  321. package/src/stories/GuideDuDev/ClassesUtilitaires/FormattingUtilities.mdx +20 -0
  322. package/src/stories/GuideDuDev/ClassesUtilitaires/index.mdx +10 -0
  323. package/src/utils/formatNir/formatNir.ts +15 -0
  324. package/src/utils/index.ts +1 -0
  325. package/src/utils/insertAt.ts +11 -0
  326. package/src/utils/rules/isDateValid/IsDateValid.mdx +2 -2
  327. package/src/utils/rules/isDateValid/IsDateValid.stories.ts +6 -4
  328. package/src/utils/rules/isDateValid/index.ts +23 -8
  329. package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +9 -0
  330. package/src/utils/rules/isExactLength/IsExactLenght.mdx +1 -1
  331. package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +19 -7
  332. package/src/utils/rules/isHolidayDay/index.ts +6 -8
  333. package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +13 -1
  334. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +2 -2
  335. package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +9 -2
  336. package/src/utils/rules/isNotAfterDate/index.ts +5 -12
  337. package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +20 -0
  338. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +2 -2
  339. package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +8 -2
  340. package/src/utils/rules/isNotAfterToday/index.ts +6 -6
  341. package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +20 -0
  342. package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +2 -2
  343. package/src/utils/rules/isNotBeforeDate/index.ts +5 -12
  344. package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +20 -0
  345. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +2 -2
  346. package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +8 -2
  347. package/src/utils/rules/isNotBeforeToday/index.ts +6 -6
  348. package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +19 -0
  349. package/src/utils/rules/validateDateValue.ts +37 -0
  350. package/src/vuetifyConfig.ts +6 -2
  351. package/dist/components/Customs/Selects/SelectBtnField/config.d.ts +0 -11
  352. package/dist/components/DatePicker/tests/setup.d.ts +0 -75370
  353. package/dist/components/Tables/common/formatters.d.ts +0 -17
  354. package/dist/main-CbBVJ_le.js +0 -34377
  355. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +0 -70
  356. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +0 -8
  357. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +0 -28
  358. package/dist/stories/DesignTokens/vue-shims.d.ts +0 -6
  359. package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/AmeliproMultipleFoldingCard.spec.ts +0 -40
  360. package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/__snapshots__/AmeliproMultipleFoldingCard.spec.ts.snap +0 -369
  361. package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/ServiceBtn.spec.ts +0 -21
  362. package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/__snapshots__/ServiceBtn.spec.ts.snap +0 -100
  363. package/src/components/Amelipro/ServiceMenu/ServiceList/tests/ServiceList.spec.ts +0 -25
  364. package/src/components/Amelipro/ServiceMenu/ServiceList/tests/__snapshots__/ServiceList.spec.ts.snap +0 -245
  365. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/ServiceMenuContent.spec.ts +0 -45
  366. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/__snapshots__/ServiceMenuContent.spec.ts.snap +0 -787
  367. package/src/components/Amelipro/ServiceMenu/tests/ServiceMenu.spec.ts +0 -46
  368. package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -111
  369. package/src/components/Amelipro/StructureMenu/StructureBtn/tests/StructureBtn.spec.ts +0 -17
  370. package/src/components/Amelipro/StructureMenu/StructureBtn/tests/__snapshots__/StructureBtn.spec.ts.snap +0 -34
  371. package/src/components/Amelipro/StructureMenu/StructureItem/tests/StructureItem.spec.ts +0 -21
  372. package/src/components/Amelipro/StructureMenu/StructureItem/tests/__snapshots__/StructureItem.spec.ts.snap +0 -106
  373. package/src/components/Amelipro/StructureMenu/StructureList/tests/StructureList.spec.ts +0 -33
  374. package/src/components/Amelipro/StructureMenu/StructureList/tests/__snapshots__/StructureList.spec.ts.snap +0 -353
  375. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/StructureTabs.spec.ts +0 -60
  376. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/__snapshots__/StructureTabs.spec.ts.snap +0 -824
  377. package/src/components/Amelipro/StructureMenu/tests/StructureMenu.spec.ts +0 -69
  378. package/src/components/Amelipro/StructureMenu/tests/__snapshots__/StructureMenu.spec.ts.snap +0 -1383
  379. package/src/components/Amelipro/UserInformationSummary/tests/UserInformationSummary.spec.ts +0 -24
  380. package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/UserMenuDetails.spec.ts +0 -33
  381. package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/__snapshots__/UserMenuDetails.spec.ts.snap +0 -3
  382. package/src/components/Amelipro/UserMenu/tests/UserMenu.spec.ts +0 -34
  383. package/src/components/Amelipro/UserMenu/tests/__snapshots__/UserMenu.spec.ts.snap +0 -101
  384. package/src/components/Customs/Selects/SelectBtnField/config.ts +0 -11
  385. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +0 -151
  386. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +0 -148
  387. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +0 -361
  388. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +0 -709
  389. package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +0 -4111
  390. package/src/components/DatePicker/tests/archiTest.md +0 -33
  391. package/src/components/DatePicker/tests/navigation.regression.spec.ts +0 -74
  392. package/src/components/DatePicker/tests/navigation.simple.spec.ts +0 -137
  393. package/src/components/DatePicker/tests/setup.ts +0 -243
  394. package/src/components/Tables/common/formatters.ts +0 -72
@@ -0,0 +1,168 @@
1
+ import { describe, it, expect, vi } from 'vitest'
2
+ import { useKeyboardEvents } from '../useKeyboardEvents'
3
+
4
+ describe('useKeyboardEvents', () => {
5
+ it('handleKeyDown blocks disallowed characters', () => {
6
+ const { handleKeyDown } = useKeyboardEvents()
7
+
8
+ const preventDefault = vi.fn()
9
+ const event = {
10
+ key: 'a',
11
+ ctrlKey: false,
12
+ metaKey: false,
13
+ preventDefault,
14
+ target: document.createElement('input'),
15
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
16
+
17
+ handleKeyDown(event)
18
+
19
+ expect(preventDefault).toHaveBeenCalledTimes(1)
20
+ })
21
+
22
+ it('handleKeyDown allows allowed characters and calls onKeyDown', () => {
23
+ const onKeyDown = vi.fn()
24
+ const { handleKeyDown } = useKeyboardEvents({ onKeyDown })
25
+
26
+ const preventDefault = vi.fn()
27
+ const target = document.createElement('input')
28
+ const event = {
29
+ key: '5',
30
+ ctrlKey: false,
31
+ metaKey: false,
32
+ preventDefault,
33
+ target,
34
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
35
+
36
+ handleKeyDown(event)
37
+
38
+ expect(preventDefault).not.toHaveBeenCalled()
39
+ expect(onKeyDown).toHaveBeenCalledWith(event)
40
+ })
41
+
42
+ it('handleKeyDown allows disallowed characters when used with ctrl/meta (shortcuts)', () => {
43
+ const { handleKeyDown } = useKeyboardEvents()
44
+
45
+ const preventDefault = vi.fn()
46
+ const target = document.createElement('input')
47
+ const event = {
48
+ key: 'a',
49
+ ctrlKey: true,
50
+ metaKey: false,
51
+ preventDefault,
52
+ target,
53
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
54
+
55
+ handleKeyDown(event)
56
+
57
+ expect(preventDefault).not.toHaveBeenCalled()
58
+ })
59
+
60
+ it('handleKeyDown allows special keys like Backspace', () => {
61
+ const { handleKeyDown } = useKeyboardEvents()
62
+
63
+ const preventDefault = vi.fn()
64
+ const target = document.createElement('input')
65
+ const event = {
66
+ key: 'Backspace',
67
+ ctrlKey: false,
68
+ metaKey: false,
69
+ preventDefault,
70
+ target,
71
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
72
+
73
+ handleKeyDown(event)
74
+
75
+ expect(preventDefault).not.toHaveBeenCalled()
76
+ })
77
+
78
+ it('handleArrowKeys skips over separator when moving left and right', () => {
79
+ const { handleArrowKeys } = useKeyboardEvents({ separator: '/' })
80
+
81
+ const setSelectionRange = vi.fn()
82
+ const input = {
83
+ value: '01/01/2023',
84
+ selectionStart: 3,
85
+ selectionEnd: 3,
86
+ setSelectionRange,
87
+ } as unknown as HTMLInputElement
88
+
89
+ // Cursor just after the separator: index 3 (0-based)
90
+ const preventDefaultLeft = vi.fn()
91
+ const leftEvent = {
92
+ key: 'ArrowLeft',
93
+ target: input,
94
+ preventDefault: preventDefaultLeft,
95
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
96
+
97
+ handleArrowKeys(leftEvent)
98
+
99
+ expect(preventDefaultLeft).toHaveBeenCalled()
100
+ expect(setSelectionRange).toHaveBeenCalledWith(1, 1)
101
+
102
+ // Now test ArrowRight from just before the separator
103
+ input.selectionStart = 2
104
+ input.selectionEnd = 2
105
+
106
+ const preventDefaultRight = vi.fn()
107
+ const rightEvent = {
108
+ key: 'ArrowRight',
109
+ target: input,
110
+ preventDefault: preventDefaultRight,
111
+ } as unknown as KeyboardEvent & { target: HTMLInputElement }
112
+
113
+ handleArrowKeys(rightEvent)
114
+
115
+ expect(preventDefaultRight).toHaveBeenCalled()
116
+ expect(setSelectionRange).toHaveBeenCalledWith(4, 4)
117
+ })
118
+
119
+ it('handlePaste prevents paste when no allowed characters remain after filtering', () => {
120
+ const { handlePaste } = useKeyboardEvents()
121
+ const input = document.createElement('input')
122
+ input.value = ''
123
+
124
+ const preventDefault = vi.fn()
125
+ const event = {
126
+ clipboardData: {
127
+ getData: vi.fn(() => 'abc'),
128
+ },
129
+ preventDefault,
130
+ target: input,
131
+ } as unknown as ClipboardEvent
132
+
133
+ handlePaste(event)
134
+
135
+ expect(preventDefault).toHaveBeenCalledTimes(1)
136
+ expect(input.value).toBe('')
137
+ })
138
+
139
+ it('handlePaste inserts filtered allowed characters and moves cursor', () => {
140
+ vi.useFakeTimers()
141
+ const { handlePaste } = useKeyboardEvents()
142
+ const input = document.createElement('input')
143
+ input.value = ''
144
+ input.selectionStart = 0
145
+ input.selectionEnd = 0
146
+
147
+ const preventDefault = vi.fn()
148
+ const event = {
149
+ clipboardData: {
150
+ getData: vi.fn(() => '1a2'),
151
+ },
152
+ preventDefault,
153
+ target: input,
154
+ } as unknown as ClipboardEvent
155
+ const dispatchSpy = vi.spyOn(input, 'dispatchEvent')
156
+
157
+ const setSelectionRangeSpy = vi.spyOn(input, 'setSelectionRange')
158
+
159
+ handlePaste(event)
160
+ vi.runAllTimers()
161
+
162
+ expect(preventDefault).toHaveBeenCalledTimes(1)
163
+ expect(input.value).toBe('12')
164
+ expect(dispatchSpy).toHaveBeenCalled()
165
+ expect(setSelectionRangeSpy).toHaveBeenCalled()
166
+ vi.useRealTimers()
167
+ })
168
+ })
@@ -1,5 +1,6 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
- import { ref, nextTick, type Ref } from 'vue'
2
+ import { ref, nextTick, type Ref, defineComponent } from 'vue'
3
+ import { mount } from '@vue/test-utils'
3
4
  import { useMonthButtonCustomization } from '../useMonthButtonCustomization'
4
5
 
5
6
  describe('useMonthButtonCustomization', () => {
@@ -8,6 +9,30 @@ describe('useMonthButtonCustomization', () => {
8
9
  let monthName: Ref<string | null>
9
10
  let yearName: Ref<string | null>
10
11
 
12
+ const mountUseMonthButtonCustomization = (options?: {
13
+ isVisibleGetter?: () => boolean
14
+ month?: Ref<string | null>
15
+ year?: Ref<string | null>
16
+ }) => {
17
+ const exposed = {} as ReturnType<typeof useMonthButtonCustomization>
18
+ const TestComponent = defineComponent({
19
+ setup() {
20
+ Object.assign(
21
+ exposed,
22
+ useMonthButtonCustomization(
23
+ options?.isVisibleGetter ?? isPickerVisibleGetter,
24
+ options?.month ?? monthName,
25
+ options?.year ?? yearName,
26
+ ),
27
+ )
28
+ return () => null
29
+ },
30
+ })
31
+
32
+ const wrapper = mount(TestComponent)
33
+ return { exposed, wrapper }
34
+ }
35
+
11
36
  beforeEach(() => {
12
37
  // Réinitialiser les refs pour chaque test avec le type exact attendu par le composable
13
38
  monthName = ref<string | null>(null)
@@ -29,12 +54,9 @@ describe('useMonthButtonCustomization', () => {
29
54
  // Test de l'affichage des mois personnalisés via les noms de mois fournis
30
55
  it('personnalise correctement les noms de mois (janvier -> Janv.)', async () => {
31
56
  monthName.value = 'janvier'
32
- const { customizeMonthButton } = useMonthButtonCustomization(
33
- isPickerVisibleGetter,
34
- monthName,
35
- )
57
+ const { exposed } = mountUseMonthButtonCustomization()
36
58
 
37
- await customizeMonthButton()
59
+ await exposed.customizeMonthButton()
38
60
  await nextTick()
39
61
 
40
62
  const monthBtn = document.querySelector('.v-date-picker-controls__month-btn')!
@@ -43,12 +65,9 @@ describe('useMonthButtonCustomization', () => {
43
65
 
44
66
  it('personnalise correctement les noms de mois (février -> févr.)', async () => {
45
67
  monthName.value = 'février'
46
- const { customizeMonthButton } = useMonthButtonCustomization(
47
- isPickerVisibleGetter,
48
- monthName,
49
- )
68
+ const { exposed } = mountUseMonthButtonCustomization()
50
69
 
51
- await customizeMonthButton()
70
+ await exposed.customizeMonthButton()
52
71
  await nextTick()
53
72
 
54
73
  const monthBtn = document.querySelector('.v-date-picker-controls__month-btn')!
@@ -57,29 +76,21 @@ describe('useMonthButtonCustomization', () => {
57
76
 
58
77
  it('capitalise le premier caractère si le mois n\'est pas reconnu', async () => {
59
78
  monthName.value = 'pluviose'
60
- const { customizeMonthButton } = useMonthButtonCustomization(
61
- isPickerVisibleGetter,
62
- monthName,
63
- )
79
+ const { exposed } = mountUseMonthButtonCustomization()
64
80
 
65
- await customizeMonthButton()
81
+ await exposed.customizeMonthButton()
66
82
  await nextTick()
67
83
 
68
84
  const monthBtn = document.querySelector('.v-date-picker-controls__month-btn')!
69
- expect(monthBtn.textContent).toContain('pluviose')
85
+ expect(monthBtn.textContent).toContain('Pluviose')
70
86
  })
71
87
 
72
88
  it('customise les boutons du mois et de l’année', async () => {
73
89
  // S'assurer que monthName est null pour ce test
74
90
  monthName.value = null
91
+ const { exposed } = mountUseMonthButtonCustomization()
75
92
 
76
- const { customizeMonthButton, monthButtonText } = useMonthButtonCustomization(
77
- isPickerVisibleGetter,
78
- monthName,
79
- yearName,
80
- )
81
-
82
- await customizeMonthButton()
93
+ await exposed.customizeMonthButton()
83
94
  await nextTick()
84
95
 
85
96
  const monthBtn = document.querySelector('.v-date-picker-controls__month-btn')!
@@ -87,7 +98,7 @@ describe('useMonthButtonCustomization', () => {
87
98
 
88
99
  expect(monthBtn.innerHTML).toContain('<svg') // icône ajoutée
89
100
  expect(monthBtn.textContent).toContain('janv.') // mois transformé
90
- expect(monthButtonText.value).toBe('janvier 2023')
101
+ expect(exposed.monthButtonText.value).toBe('janvier 2023')
91
102
 
92
103
  expect(yearBtn.innerHTML).toContain('2023')
93
104
  expect(yearBtn.innerHTML).toContain('<svg')
@@ -96,14 +107,9 @@ describe('useMonthButtonCustomization', () => {
96
107
  it('utilise monthName et yearName si fournis', async () => {
97
108
  monthName.value = 'mars'
98
109
  yearName.value = '2030'
110
+ const { exposed } = mountUseMonthButtonCustomization()
99
111
 
100
- const { customizeMonthButton } = useMonthButtonCustomization(
101
- isPickerVisibleGetter,
102
- monthName,
103
- yearName,
104
- )
105
-
106
- await customizeMonthButton()
112
+ await exposed.customizeMonthButton()
107
113
  await nextTick()
108
114
 
109
115
  const monthBtn = document.querySelector('.v-date-picker-controls__month-btn')!
@@ -114,10 +120,10 @@ describe('useMonthButtonCustomization', () => {
114
120
  })
115
121
 
116
122
  it('observe les changements du DOM et personnalise automatiquement', async () => {
117
- const { setupMonthButtonObserver } = useMonthButtonCustomization(() => true)
123
+ const { exposed } = mountUseMonthButtonCustomization({ isVisibleGetter: () => true })
118
124
  const spy = vi.spyOn(document, 'querySelectorAll')
119
125
 
120
- setupMonthButtonObserver()
126
+ exposed.setupMonthButtonObserver()
121
127
  await nextTick()
122
128
 
123
129
  expect(spy).toHaveBeenCalledWith('.v-date-picker-controls')
@@ -17,8 +17,7 @@ export const useAsteriskDisplay = (
17
17
 
18
18
  // Ajoute l'astérisque au label si nécessaire
19
19
  const labelWithAsterisk = computed(() => {
20
- // Assertion de type pour indiquer que props[labelProp] est de type string | undefined
21
- const label = props[labelProp] as string | undefined
20
+ const label = props[labelProp] as string
22
21
  return isShouldDisplayAsterisk.value && label
23
22
  ? `${label} *`
24
23
  : label
@@ -0,0 +1,155 @@
1
+ import {
2
+ type Ref,
3
+ type ComponentPublicInstance,
4
+ watch,
5
+ nextTick,
6
+ onMounted,
7
+ onBeforeUnmount,
8
+ } from 'vue'
9
+ import dayjs from 'dayjs'
10
+
11
+ export interface CalendarKeyboardNavigationOptions {
12
+ isDatePickerVisible: Ref<boolean>
13
+ datePickerRef: Ref<ComponentPublicInstance | null>
14
+
15
+ // Renvoie la date actuellement "active" sur le calendrier
16
+ getCurrentDate: () => Date | null
17
+
18
+ // Applique la nouvelle date (typiquement via updateSelectedDates)
19
+ setCurrentDate: (date: Date) => void
20
+ }
21
+
22
+ export const useCalendarKeyboardNavigation = (options: CalendarKeyboardNavigationOptions) => {
23
+ const {
24
+ isDatePickerVisible,
25
+ datePickerRef,
26
+ getCurrentDate,
27
+ setCurrentDate,
28
+ } = options
29
+
30
+ const addDays = (date: Date, amount: number) => dayjs(date).add(amount, 'day').toDate()
31
+
32
+ const toISO = (date: Date) => dayjs(date).format('YYYY-MM-DD')
33
+
34
+ let isListenerAttached = false
35
+
36
+ const getBaseDateFromEvent = (event: KeyboardEvent): { date: Date | null, fromDayCell: boolean } => {
37
+ const target = event.target as HTMLElement | null
38
+ const dayWrapper = target?.closest<HTMLElement>('[data-v-date]')
39
+ const iso = dayWrapper?.getAttribute('data-v-date')
40
+ if (!iso) {
41
+ return { date: getCurrentDate(), fromDayCell: false }
42
+ }
43
+
44
+ const parsed = dayjs(iso, 'YYYY-MM-DD', true)
45
+ if (!parsed.isValid()) {
46
+ return { date: getCurrentDate(), fromDayCell: false }
47
+ }
48
+
49
+ return { date: parsed.toDate(), fromDayCell: true }
50
+ }
51
+
52
+ const handleArrowNavigation = (event: KeyboardEvent) => {
53
+ if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) {
54
+ return
55
+ }
56
+
57
+ // Ne pas intercepter les combinaisons de touches de navigation système (Ctrl/Alt/Meta)
58
+ if (event.altKey || event.ctrlKey || event.metaKey) {
59
+ return
60
+ }
61
+
62
+ const { date: current, fromDayCell } = getBaseDateFromEvent(event)
63
+ if (!current) return
64
+
65
+ event.preventDefault()
66
+
67
+ let nextDate = current
68
+ // Si l'événement ne vient pas d'un jour du calendrier (par ex. après un
69
+ // changement de mois via les contrôles), on utilise la date de base
70
+ // telle quelle pour « entrer » dans le mois (souvent le 1er jour),
71
+ // sans appliquer immédiatement le décalage lié à la flèche. À partir du
72
+ // moment où le focus est sur un jour (fromDayCell = true), les flèches
73
+ // se comportent normalement.
74
+ if (fromDayCell) {
75
+ switch (event.key) {
76
+ case 'ArrowLeft':
77
+ nextDate = addDays(current, -1)
78
+ break
79
+ case 'ArrowRight':
80
+ nextDate = addDays(current, 1)
81
+ break
82
+ case 'ArrowUp':
83
+ nextDate = addDays(current, -7)
84
+ break
85
+ case 'ArrowDown':
86
+ nextDate = addDays(current, 7)
87
+ break
88
+ }
89
+ }
90
+
91
+ setCurrentDate(nextDate)
92
+
93
+ nextTick(() => {
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mock Axios headers
95
+ const rootEl = (datePickerRef.value as any)?.$el as HTMLElement | undefined
96
+ if (!rootEl) return
97
+
98
+ const selector = `[data-v-date="${toISO(nextDate)}"] > [type="button"]`
99
+ const dayButton = rootEl.querySelector<HTMLElement>(selector)
100
+
101
+ dayButton?.focus()
102
+ })
103
+ }
104
+
105
+ const keydownListener = (event: Event) => {
106
+ const keyboardEvent = event as KeyboardEvent
107
+ const target = keyboardEvent.target as HTMLElement | null
108
+
109
+ // Ne pas interférer avec la saisie dans les champs de formulaire ou zones éditables
110
+ if (target) {
111
+ const tagName = target.tagName
112
+ if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT' || (target as HTMLElement).isContentEditable) {
113
+ return
114
+ }
115
+ }
116
+
117
+ handleArrowNavigation(keyboardEvent)
118
+ }
119
+
120
+ const attachListeners = () => {
121
+ if (isListenerAttached) return
122
+ document.addEventListener('keydown', keydownListener as EventListener, true)
123
+ isListenerAttached = true
124
+ }
125
+
126
+ const detachListeners = () => {
127
+ if (!isListenerAttached) return
128
+ document.removeEventListener('keydown', keydownListener as EventListener, true)
129
+ isListenerAttached = false
130
+ }
131
+
132
+ watch(isDatePickerVisible, (visible) => {
133
+ if (visible) {
134
+ nextTick(attachListeners)
135
+ }
136
+ else {
137
+ detachListeners()
138
+ }
139
+ })
140
+
141
+ onMounted(() => {
142
+ if (isDatePickerVisible.value) {
143
+ nextTick(attachListeners)
144
+ }
145
+ })
146
+
147
+ onBeforeUnmount(() => {
148
+ detachListeners()
149
+ })
150
+
151
+ return {
152
+ attachListeners,
153
+ detachListeners,
154
+ }
155
+ }
@@ -0,0 +1,163 @@
1
+ import { computed, ref, watch, type Ref, type ComputedRef } from 'vue'
2
+ import type { DateInput, DateValue } from '@/composables/date/useDateInitializationDayjs'
3
+
4
+ export interface UseDatePickerStateOptions {
5
+ selectedDates: Ref<Date | (Date | null)[] | null>
6
+ rangeBoundaryDates?: Ref<[Date | null, Date | null] | null>
7
+ format: string
8
+ dateFormatReturn?: string
9
+ displayRange?: boolean
10
+ parseDate: (value: string, format: string) => Date | null
11
+ formatDate: (date: Date | null, format: string) => string
12
+ initializeSelectedDates: (value: DateInput | null, format: string, dateFormatReturn?: string) => Date | (Date | null)[] | null
13
+ validateDates: (forceValidation?: boolean) => void
14
+ updateModel: (value: DateValue) => void
15
+ }
16
+
17
+ export interface UseDatePickerStateResult {
18
+ selectedDates: Ref<Date | (Date | null)[] | null>
19
+ rangeBoundaryDates?: Ref<[Date | null, Date | null] | null>
20
+ textInputValue: Ref<string>
21
+ displayFormattedDate: Ref<string>
22
+ formattedDate: Ref<DateValue>
23
+ displayFormattedFromSelectedDates: ComputedRef<string | null>
24
+ syncFromModelValue: (newValue: DateInput | undefined) => void
25
+ syncTextInputFromSelection: () => void
26
+ }
27
+
28
+ export const useDatePickerState = (options: UseDatePickerStateOptions): UseDatePickerStateResult => {
29
+ const {
30
+ selectedDates,
31
+ rangeBoundaryDates,
32
+ format,
33
+ dateFormatReturn,
34
+ displayRange = false,
35
+ parseDate,
36
+ formatDate,
37
+ initializeSelectedDates,
38
+ validateDates,
39
+ // updateModel,
40
+ } = options
41
+
42
+ const textInputValue = ref('')
43
+ const displayFormattedDate = ref('')
44
+
45
+ const formattedDate = computed<DateValue>(() => {
46
+ if (!selectedDates.value) return ''
47
+ const rf = dateFormatReturn || format
48
+
49
+ if (displayRange && rangeBoundaryDates?.value) {
50
+ return [
51
+ formatDate(rangeBoundaryDates.value[0], rf),
52
+ formatDate(rangeBoundaryDates.value[1], rf),
53
+ ] as [string, string]
54
+ }
55
+
56
+ if (Array.isArray(selectedDates.value)) {
57
+ if (selectedDates.value.length >= 2) {
58
+ return [
59
+ formatDate(selectedDates.value[0], rf),
60
+ formatDate(selectedDates.value[selectedDates.value.length - 1], rf),
61
+ ] as [string, string]
62
+ }
63
+ return ''
64
+ }
65
+
66
+ return formatDate(selectedDates.value, rf)
67
+ })
68
+
69
+ const displayFormattedFromSelectedDates = computed<string | null>(() => {
70
+ if (!selectedDates.value) return null
71
+
72
+ if (Array.isArray(selectedDates.value)) {
73
+ if (selectedDates.value.length >= 2) {
74
+ return `${formatDate(selectedDates.value[0], format)} - ${formatDate(
75
+ selectedDates.value[selectedDates.value.length - 1],
76
+ format,
77
+ )}`
78
+ }
79
+ return formatDate(selectedDates.value[0], format)
80
+ }
81
+
82
+ return formatDate(selectedDates.value, format)
83
+ })
84
+
85
+ watch(
86
+ formattedDate,
87
+ (newValue) => {
88
+ if (!newValue || newValue === '') {
89
+ textInputValue.value = ''
90
+ return
91
+ }
92
+ if (typeof newValue === 'string') {
93
+ if (dateFormatReturn) {
94
+ const date = parseDate(newValue, dateFormatReturn)
95
+ if (date) {
96
+ const formattedForDisplay = formatDate(date, format)
97
+ textInputValue.value = formattedForDisplay
98
+ }
99
+ }
100
+ else {
101
+ textInputValue.value = newValue
102
+ }
103
+ }
104
+ },
105
+ { immediate: true },
106
+ )
107
+
108
+ const syncFromModelValue = (newValue: DateInput | undefined) => {
109
+ if (!newValue || newValue === '') {
110
+ selectedDates.value = null
111
+ textInputValue.value = ''
112
+ displayFormattedDate.value = ''
113
+ validateDates()
114
+ return
115
+ }
116
+
117
+ selectedDates.value = initializeSelectedDates(newValue ?? null, format, dateFormatReturn)
118
+ if (selectedDates.value) {
119
+ const firstDate = Array.isArray(selectedDates.value)
120
+ ? selectedDates.value[0]
121
+ : selectedDates.value
122
+ if (firstDate) {
123
+ const formattedForInput = formatDate(firstDate, format)
124
+ textInputValue.value = formattedForInput
125
+ }
126
+ if (Array.isArray(formattedDate.value)) {
127
+ // Pour les plages, formater avec le séparateur standard " - "
128
+ displayFormattedDate.value = formattedDate.value.join(' - ')
129
+ }
130
+ else {
131
+ displayFormattedDate.value = (formattedDate.value as string) || ''
132
+ }
133
+ }
134
+ validateDates()
135
+ }
136
+
137
+ const syncTextInputFromSelection = () => {
138
+ const value = selectedDates.value
139
+ if (!value) {
140
+ textInputValue.value = ''
141
+ return
142
+ }
143
+
144
+ const firstDate = Array.isArray(value) ? (value[0] ?? null) : value
145
+ if (!firstDate) return
146
+
147
+ const formattedForInput = formatDate(firstDate, format)
148
+ if (textInputValue.value !== formattedForInput) {
149
+ textInputValue.value = formattedForInput
150
+ }
151
+ }
152
+
153
+ return {
154
+ selectedDates,
155
+ rangeBoundaryDates,
156
+ textInputValue,
157
+ displayFormattedDate,
158
+ formattedDate,
159
+ displayFormattedFromSelectedDates,
160
+ syncFromModelValue,
161
+ syncTextInputFromSelection,
162
+ }
163
+ }
@@ -1,6 +1,7 @@
1
1
  import { ref, computed } from 'vue'
2
2
  import dayjs from 'dayjs'
3
3
  import customParseFormat from 'dayjs/plugin/customParseFormat'
4
+ import { extractRangeParts as extractRangePartsUtil, hasRangeSeparator as hasRangeSeparatorUtil, isValidDateRange } from '../utils/dateFormattingUtils'
4
5
 
5
6
  // Initialiser les plugins dayjs
6
7
  dayjs.extend(customParseFormat)
@@ -28,18 +29,14 @@ export function useDateRangeInput(
28
29
  * Vérifie si une chaîne de caractères contient un séparateur de plage
29
30
  */
30
31
  const hasRangeSeparator = (value: string): boolean => {
31
- return value.includes(rangeSeparator)
32
+ return hasRangeSeparatorUtil(value, rangeSeparator)
32
33
  }
33
34
 
34
35
  /**
35
36
  * Extrait les deux parties d'une plage de dates
36
37
  */
37
38
  const extractRangeParts = (value: string): [string, string] => {
38
- const parts = value.split(rangeSeparator)
39
- return [
40
- parts[0]?.trim() || '',
41
- parts[1]?.trim() || '',
42
- ]
39
+ return extractRangePartsUtil(value, rangeSeparator)
43
40
  }
44
41
 
45
42
  /**
@@ -235,8 +232,7 @@ export function useDateRangeInput(
235
232
  * Vérifie si une plage de dates est valide (la date de début est antérieure à la date de fin)
236
233
  */
237
234
  const isValidRange = (startDate: Date | null, endDate: Date | null): boolean => {
238
- if (!startDate || !endDate) return true
239
- return startDate.getTime() <= endDate.getTime()
235
+ return isValidDateRange(startDate, endDate)
240
236
  }
241
237
 
242
238
  /**