@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
@@ -14,7 +14,24 @@
14
14
  type DateInput,
15
15
  type DateValue,
16
16
  } from '@/composables/date/useDateInitializationDayjs'
17
- import { useAsteriskDisplay, useDateFormatValidation, useDatePickerViewMode, useDatePickerVisibility, useDateRangeValidation, useDateSelection, useDateValidation, useDisplayedDateString, useIconState, useInputBlurHandler, useManualDateValidation, useMonthButtonCustomization, useTodayButton } from '../composables'
17
+ import {
18
+ useAsteriskDisplay,
19
+ useDateFormatValidation,
20
+ useDatePickerState,
21
+ useDatePickerViewMode,
22
+ useDatePickerVisibility,
23
+ useDateRangeValidation,
24
+ useDateSelection,
25
+ useDateValidation,
26
+ useDisplayedDateString,
27
+ useIconState,
28
+ useInputBlurHandler,
29
+ useManualDateValidation,
30
+ useMonthButtonCustomization,
31
+ useTodayButton,
32
+ useHolidayHighlighting,
33
+ useCalendarKeyboardNavigation,
34
+ } from '../composables'
18
35
  import dayjs from 'dayjs'
19
36
  import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
20
37
  import DateTextInput from '../DateTextInput/DateTextInput.vue'
@@ -27,7 +44,7 @@
27
44
  import { useDatePickerAccessibility } from '@/composables/date/useDatePickerAccessibility'
28
45
  import { DATE_PICKER_MESSAGES } from '../constants/messages'
29
46
  import { mdiCalendar } from '@mdi/js'
30
- import { useHolidayDay } from '@/composables/date/useHolidayDay'
47
+ import { getDateDescription as getDateDescriptionUtil } from '../utils/dateFormattingUtils'
31
48
  import customParseFormat from 'dayjs/plugin/customParseFormat'
32
49
 
33
50
  dayjs.extend(customParseFormat)
@@ -113,7 +130,7 @@
113
130
  const props = withDefaults(
114
131
  defineProps<{
115
132
  modelValue?: DateInput
116
- label?: string
133
+ label: string
117
134
  placeholder?: string
118
135
  format?: string
119
136
  dateFormatReturn?: string
@@ -156,7 +173,7 @@
156
173
  }>(),
157
174
  {
158
175
  modelValue: undefined,
159
- placeholder: DATE_PICKER_MESSAGES.PLACEHOLDER_DEFAULT,
176
+ placeholder: undefined,
160
177
  format: DATE_PICKER_MESSAGES.FORMAT_DEFAULT,
161
178
  dateFormatReturn: '',
162
179
  isBirthDate: false,
@@ -186,7 +203,6 @@
186
203
  displayAsterisk: false,
187
204
  period: () => ({ min: '', max: '' }),
188
205
  autoClamp: false,
189
- label: DATE_PICKER_MESSAGES.PLACEHOLDER_DEFAULT,
190
206
  isValidateOnBlur: true,
191
207
  density: 'default',
192
208
  hint: undefined,
@@ -243,15 +259,13 @@
243
259
  selectedDates as Ref<DateObjectValue>,
244
260
  props.displayRange,
245
261
  )
246
-
247
- const textInputValue = ref('')
248
- const displayFormattedDate = ref('')
249
262
  // Force re-render of DateTextInput/SyTextField when needed (e.g., after reset)
250
263
  const fieldKey = ref(0)
251
264
  const isManualInputActive = ref(false)
252
265
  const isFormatting = ref(false)
253
266
  const isUpdatingFromInternal = ref(false)
254
267
  const hasInteracted = ref(false)
268
+ const preventCloseOnInternalUpdate = ref(false)
255
269
 
256
270
  const { validateDateFormat, isDateComplete } = useDateFormatValidation({
257
271
  format: props.format,
@@ -279,6 +293,27 @@
279
293
  successes,
280
294
  })
281
295
 
296
+ const {
297
+ toggleDatePicker,
298
+ openDatePicker,
299
+ openDatePickerOnClick,
300
+ openDatePickerOnFocus,
301
+ openDatePickerOnIconClick,
302
+ handleClickOutside,
303
+ handleKeyboardNavigation,
304
+ } = useDatePickerVisibility({
305
+ disabled: props.disabled,
306
+ readonly: props.readonly,
307
+ textFieldActivator: props.textFieldActivator,
308
+ isDatePickerVisible,
309
+ isManualInputActive,
310
+ hasInteracted,
311
+ updateAccessibility,
312
+ validateDates,
313
+ emitClosed: () => emit('closed'),
314
+ emitFocus: () => emit('focus'),
315
+ })
316
+
282
317
  const updateModel = (value: DateValue) => {
283
318
  // Prevent redundant emits
284
319
  if (JSON.stringify(value) === JSON.stringify(props.modelValue)) return
@@ -310,24 +345,6 @@
310
345
  // 3) Re-emit upward
311
346
  emit('date-selected', value)
312
347
  }
313
-
314
- // Display helpers
315
- const displayFormattedDateComputed = computed(() => {
316
- if (!selectedDates.value) return null
317
- if (Array.isArray(selectedDates.value)) {
318
- if (selectedDates.value.length >= 2)
319
- return `${formatDate(selectedDates.value[0], props.format)} - ${formatDate(
320
- selectedDates.value[selectedDates.value.length - 1],
321
- props.format,
322
- )}`
323
- return formatDate(selectedDates.value[0], props.format)
324
- }
325
- return formatDate(selectedDates.value, props.format)
326
- })
327
-
328
- watch(displayFormattedDateComputed, (newValue) => {
329
- if (!props.noCalendar && newValue) displayFormattedDate.value = newValue
330
- })
331
348
  // Watcher pour re-valider quand les customRules changent
332
349
  watch(() => props.customRules, () => {
333
350
  if (selectedDates.value !== null) {
@@ -356,6 +373,33 @@
356
373
  { immediate: true },
357
374
  )
358
375
 
376
+ const {
377
+ textInputValue,
378
+ displayFormattedDate,
379
+ formattedDate,
380
+ displayFormattedFromSelectedDates,
381
+ syncFromModelValue,
382
+ syncTextInputFromSelection,
383
+ } = useDatePickerState({
384
+ selectedDates,
385
+ rangeBoundaryDates,
386
+ format: props.format,
387
+ dateFormatReturn: props.dateFormatReturn,
388
+ displayRange: props.displayRange,
389
+ parseDate,
390
+ formatDate,
391
+ initializeSelectedDates,
392
+ validateDates,
393
+ updateModel,
394
+ })
395
+
396
+ // Display helpers (centralised in useDatePickerState)
397
+ const displayFormattedDateComputed = displayFormattedFromSelectedDates
398
+
399
+ watch(displayFormattedDateComputed, (newValue) => {
400
+ if (!props.noCalendar && newValue) displayFormattedDate.value = newValue
401
+ })
402
+
359
403
  const updateSelectedDates = (date: Date | null) => {
360
404
  if (date !== null) {
361
405
  const validationResult = validateField(date, props.customRules, props.customWarningRules)
@@ -369,84 +413,86 @@
369
413
  queueMicrotask(() => validateDates(true))
370
414
  }
371
415
 
372
- // Formatted value for model
373
- const formattedDate = computed<DateValue>(() => {
374
- if (!selectedDates.value) return ''
375
- const rf = returnFormat.value
376
-
377
- if (props.displayRange && rangeBoundaryDates.value) {
378
- return [
379
- formatDate(rangeBoundaryDates.value[0], rf),
380
- formatDate(rangeBoundaryDates.value[1], rf),
381
- ] as [string, string]
382
- }
383
- if (Array.isArray(selectedDates.value)) {
384
- if (selectedDates.value.length >= 2)
385
- return [
386
- formatDate(selectedDates.value[0], rf),
387
- formatDate(selectedDates.value[selectedDates.value.length - 1], rf),
388
- ] as [string, string]
389
- return ''
390
- }
391
- return formatDate(selectedDates.value, rf)
392
- })
393
-
394
- watch(
395
- formattedDate,
396
- (newValue) => {
397
- if (!newValue || newValue === '') {
398
- textInputValue.value = ''
399
- return
400
- }
401
- if (typeof newValue === 'string') {
402
- if (props.dateFormatReturn) {
403
- const date = parseDate(newValue, returnFormat.value)
404
- if (date) {
405
- const formattedForDisplay = formatDate(date, props.format)
406
- textInputValue.value = formattedForDisplay
407
- }
408
- }
409
- else {
410
- textInputValue.value = newValue
411
- }
412
- }
413
- },
414
- { immediate: true },
415
- )
416
-
417
416
  watch(selectedDates, (newValue) => {
418
417
  validateDates()
419
418
  if (newValue !== null) {
420
- updateModel(formattedDate.value)
419
+ if (!preventCloseOnInternalUpdate.value) {
420
+ updateModel(formattedDate.value)
421
+ }
421
422
  withInternalUpdate(() => {
422
- if (Array.isArray(newValue)) {
423
- if (newValue.length > 0) {
424
- const newFormattedValue = formatDate(newValue[0], props.format)
425
- if (textInputValue.value !== newFormattedValue) {
426
- textInputValue.value = newFormattedValue
427
- }
428
- }
429
- }
430
- else {
431
- const newFormattedValue = formatDate(newValue, props.format)
432
- if (textInputValue.value !== newFormattedValue) {
433
- textInputValue.value = newFormattedValue
434
- }
435
- }
423
+ syncTextInputFromSelection()
436
424
  })
425
+
426
+ let baseDate: Date | null = null
427
+ if (Array.isArray(newValue)) {
428
+ baseDate = (newValue.find(date => date instanceof Date) as Date | null) ?? null
429
+ }
430
+ else {
431
+ baseDate = newValue
432
+ }
433
+ if (baseDate) {
434
+ const monthIndex = baseDate.getMonth()
435
+ const yearString = baseDate.getFullYear().toString()
436
+ currentMonth.value = monthIndex.toString()
437
+ currentMonthName.value = dayjs(baseDate).format('MMMM')
438
+ currentYear.value = yearString
439
+ currentYearName.value = yearString
440
+ }
441
+ if (isDatePickerVisible.value) {
442
+ nextTick(() => {
443
+ customizeMonthButton()
444
+ markHolidayDays()
445
+ })
446
+ }
437
447
  }
438
448
  else {
439
449
  updateModel(null)
440
- textInputValue.value = ''
450
+ withInternalUpdate(() => {
451
+ syncTextInputFromSelection()
452
+ })
441
453
  // Reset month/year names when clearing the date
442
454
  const today = new Date()
443
455
  currentMonth.value = today.getMonth().toString()
444
456
  currentMonthName.value = dayjs(today).format('MMMM')
445
457
  currentYear.value = today.getFullYear().toString()
446
458
  currentYearName.value = today.getFullYear().toString()
459
+ if (isDatePickerVisible.value) {
460
+ nextTick(() => {
461
+ customizeMonthButton()
462
+ markHolidayDays()
463
+ })
464
+ }
447
465
  }
448
466
  })
449
467
 
468
+ const formatDateInput = (input: string, cursorPosition?: number): { formatted: string, cursorPos: number } => {
469
+ const cleanedInput = input.replace(/[^\d]/g, '')
470
+ const separator = props.format.match(/[^DMY]/)?.[0] || '/'
471
+ const inputBeforeCursor = input.substring(0, cursorPosition || 0)
472
+ const digitsBeforeCursor = inputBeforeCursor.replace(/[^\d]/g, '').length
473
+
474
+ let result = ''
475
+ let digitIndex = 0
476
+ for (let i = 0; i < props.format.length && digitIndex < cleanedInput.length; i++) {
477
+ const formatChar = props.format[i].toUpperCase()
478
+ if (['D', 'M', 'Y'].includes(formatChar)) {
479
+ result += cleanedInput[digitIndex]
480
+ digitIndex++
481
+ }
482
+ else {
483
+ result += separator
484
+ }
485
+ }
486
+
487
+ let newCursorPos = digitsBeforeCursor
488
+ for (let i = 0, digitCount = 0; i < props.format.length && digitCount < digitsBeforeCursor; i++) {
489
+ if (!['D', 'M', 'Y'].includes(props.format[i].toUpperCase())) newCursorPos++
490
+ else digitCount++
491
+ }
492
+
493
+ return { formatted: result, cursorPos: Math.min(newCursorPos, result.length) }
494
+ }
495
+
450
496
  // Handle manual typing sync → model/selection
451
497
  watch(textInputValue, (newValue) => {
452
498
  // En mode plage, on laisse DateTextInput + handleDateTextInputUpdate
@@ -530,61 +576,16 @@
530
576
  * Accessibility (live description during typing)
531
577
  */
532
578
  const accessibilityDescription = ref(DATE_PICKER_MESSAGES.ARIA_DATE_INPUT)
533
- const getDateDescription = (dateStr: string, format: string): string => {
534
- if (!dateStr?.trim()) return 'Aucune date saisie'
535
- const separator = format.match(/[^DMY]/)?.[0] || '/'
536
- const dateParts = dateStr.split(separator)
537
- const formatParts = format.split(separator)
538
-
539
- let description = 'Date en cours de saisie: '
540
- for (let i = 0; i < formatParts.length; i++) {
541
- if (i >= dateParts.length) break
542
- const part = dateParts[i].trim()
543
- const formatPart = formatParts[i][0]?.toUpperCase()
544
- if (!part || part.replace(/_/g, '').length === 0) continue
545
- if (formatPart === 'D') description += `jour ${part}, `
546
- else if (formatPart === 'M') description += `mois ${part}, `
547
- else if (formatPart === 'Y') description += `année ${part}, `
548
- }
549
- return description.endsWith(', ') ? description.slice(0, -2) : description
550
- }
551
579
 
552
580
  watch(displayFormattedDate, (newValue) => {
553
581
  if (newValue && typeof newValue === 'string') {
554
- accessibilityDescription.value = getDateDescription(newValue.replace(/_/g, ' '), props.format)
582
+ accessibilityDescription.value = getDateDescriptionUtil(newValue.replace(/_/g, ' '), props.format)
555
583
  }
556
584
  else {
557
585
  accessibilityDescription.value = 'Aucune date saisie'
558
586
  }
559
587
  })
560
588
 
561
- /**
562
- * Holiday marking
563
- */
564
- const { getJoursFeries } = useHolidayDay()
565
- const markHolidayDays = () => {
566
- if (!props.displayHolidayDays) return
567
- nextTick(() => {
568
- const year = parseInt(currentYear.value || String(new Date().getFullYear()), 10)
569
- const month = parseInt(
570
- currentMonth.value !== null ? currentMonth.value : String(new Date().getMonth()),
571
- 10,
572
- )
573
- const joursFeries = getJoursFeries(year)
574
- const holidayDates = Array.from(joursFeries).map((dateStr) => {
575
- const [day, monthStr, yearStr] = dateStr.split('/')
576
- return new Date(parseInt(yearStr), parseInt(monthStr) - 1, parseInt(day))
577
- })
578
- const monthHolidays = holidayDates.filter(h => h.getMonth() === month && h.getFullYear() === year)
579
- monthHolidays.forEach((holiday) => {
580
- const day = holiday.getDate()
581
- const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`
582
- const dayElements = document.querySelectorAll(`[data-v-date="${dateStr}"]`)
583
- dayElements.forEach(el => el.classList.add('holiday-day'))
584
- })
585
- })
586
- }
587
-
588
589
  /**
589
590
  * Mount / unmount
590
591
  */
@@ -592,6 +593,18 @@
592
593
  const dateCalendarTextInputRef = ref<null | ComponentPublicInstance<typeof SyTextField>>()
593
594
  const datePickerRef = ref<null | ComponentPublicInstance<typeof VDatePicker>>()
594
595
 
596
+ /**
597
+ * Holiday marking (partagé via useHolidayHighlighting)
598
+ */
599
+ const { markHolidayDays } = useHolidayHighlighting({
600
+ currentMonth,
601
+ currentYear,
602
+ isDisplayHolidayDays: () => props.displayHolidayDays,
603
+ rootElement: computed(
604
+ () => datePickerRef.value?.$el as HTMLElement | null,
605
+ ),
606
+ })
607
+
595
608
  onMounted(() => {
596
609
  setupMonthButtonObserver()
597
610
  document.addEventListener('click', handleClickOutside)
@@ -603,6 +616,48 @@
603
616
  document.removeEventListener('click', handleClickOutside)
604
617
  })
605
618
 
619
+ useCalendarKeyboardNavigation({
620
+ isDatePickerVisible,
621
+ datePickerRef: datePickerRef as unknown as Ref<ComponentPublicInstance | null>,
622
+ getCurrentDate: () => {
623
+ const value = selectedDates.value
624
+ if (value) {
625
+ const date = Array.isArray(value) ? value[0] ?? null : value
626
+ if (date && currentMonth.value !== null && currentYear.value !== null) {
627
+ const sameMonth = date.getMonth() === Number(currentMonth.value)
628
+ const sameYear = date.getFullYear() === Number(currentYear.value)
629
+ if (sameMonth && sameYear) {
630
+ return date
631
+ }
632
+ }
633
+ }
634
+
635
+ if (currentMonth.value !== null && currentYear.value !== null) {
636
+ return new Date(Number(currentYear.value), Number(currentMonth.value), 1)
637
+ }
638
+
639
+ return null
640
+ },
641
+ setCurrentDate: (date: Date) => {
642
+ preventCloseOnInternalUpdate.value = true
643
+ updateSelectedDates(date)
644
+ queueMicrotask(() => {
645
+ preventCloseOnInternalUpdate.value = false
646
+ })
647
+ // Synchroniser le mois et l'année visibles lorsque l'on franchit une limite de mois
648
+ const newMonth = String(date.getMonth())
649
+ const newYear = String(date.getFullYear())
650
+ if (currentMonth.value !== newMonth) {
651
+ currentMonth.value = newMonth
652
+ currentMonthName.value = dayjs().month(date.getMonth()).format('MMMM')
653
+ }
654
+ if (currentYear.value !== newYear) {
655
+ currentYear.value = newYear
656
+ currentYearName.value = newYear
657
+ }
658
+ },
659
+ })
660
+
606
661
  /**
607
662
  * Input handling (text field)
608
663
  */
@@ -629,6 +684,50 @@
629
684
  inputRef: dateCalendarTextInputRef as Ref<ComponentPublicInstance | null>,
630
685
  })
631
686
 
687
+ const handleKeydown = (event: KeyboardEvent & { target: HTMLInputElement }) => {
688
+ if (props.readonly) return
689
+
690
+ if (!props.noCalendar && handleKeyboardNavigation(event)) return
691
+
692
+ if (event.key === 'Backspace') {
693
+ const input = event.target
694
+ if (!input.selectionStart || input.selectionStart !== input.selectionEnd) return
695
+ const cursorPos = input.selectionStart
696
+ const charBeforeCursor = input.value[cursorPos - 1]
697
+
698
+ if (!/\d/.test(charBeforeCursor)) {
699
+ event.preventDefault()
700
+ const newValue = input.value.substring(0, cursorPos - 2) + input.value.substring(cursorPos)
701
+ displayFormattedDate.value = newValue
702
+ queueMicrotask(() => {
703
+ const newCursorPos = cursorPos - 2
704
+ input.setSelectionRange(newCursorPos, newCursorPos)
705
+ })
706
+ }
707
+ }
708
+
709
+ if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
710
+ const input = event.target
711
+ const cursorPos = input.selectionStart || 0
712
+ const separator = props.format.match(/[^DMY]/)?.[0] || '/'
713
+
714
+ if (event.key === 'ArrowLeft' && cursorPos > 0) {
715
+ const charBeforeCursor = input.value[cursorPos - 1]
716
+ if (charBeforeCursor === separator) {
717
+ event.preventDefault()
718
+ input.setSelectionRange(cursorPos - 2, cursorPos - 2)
719
+ }
720
+ }
721
+ else if (event.key === 'ArrowRight' && cursorPos < input.value.length) {
722
+ const charAtCursor = input.value[cursorPos]
723
+ if (charAtCursor === separator) {
724
+ event.preventDefault()
725
+ input.setSelectionRange(cursorPos + 2, cursorPos + 2)
726
+ }
727
+ }
728
+ }
729
+ }
730
+
632
731
  const handleInput = (eventOrValue: Event | string) => {
633
732
  if (props.readonly) return
634
733
 
@@ -788,34 +887,14 @@
788
887
  }
789
888
  }
790
889
 
791
- /**
792
- * Sync from external v-model
793
- */
794
- const syncFromModelValue = (newValue: DateInput | undefined) => {
795
- if (!newValue || newValue === '') {
796
- selectedDates.value = null
797
- textInputValue.value = ''
798
- displayFormattedDate.value = ''
799
- validateDates()
800
- return
801
- }
802
-
803
- selectedDates.value = initializeSelectedDates(newValue, props.format, props.dateFormatReturn)
804
- if (selectedDates.value) {
805
- const firstDate = Array.isArray(selectedDates.value)
806
- ? selectedDates.value[0]
807
- : selectedDates.value
808
- const formattedForInput = formatDate(firstDate, props.format)
809
- textInputValue.value = formattedForInput
810
- displayFormattedDate.value = displayFormattedDateComputed.value || ''
811
- }
812
- validateDates()
813
- }
814
-
890
+ // Sync from external v-model
815
891
  watch(
816
892
  () => props.modelValue,
817
893
  (newValue) => {
818
894
  if (isUpdatingFromInternal.value) {
895
+ if (preventCloseOnInternalUpdate.value) {
896
+ return
897
+ }
819
898
  if (props.displayRange) {
820
899
  if (Array.isArray(newValue) && newValue.length >= 2) {
821
900
  isDatePickerVisible.value = false
@@ -848,102 +927,6 @@
848
927
  },
849
928
  )
850
929
 
851
- /**
852
- * Menu / visibility & keyboard
853
- */
854
- const {
855
- toggleDatePicker,
856
- openDatePicker,
857
- openDatePickerOnClick,
858
- openDatePickerOnFocus,
859
- openDatePickerOnIconClick,
860
- handleClickOutside,
861
- handleKeyboardNavigation,
862
- } = useDatePickerVisibility({
863
- disabled: props.disabled,
864
- readonly: props.readonly,
865
- textFieldActivator: props.textFieldActivator,
866
- isDatePickerVisible,
867
- isManualInputActive,
868
- hasInteracted,
869
- updateAccessibility,
870
- validateDates,
871
- emitClosed: () => emit('closed'),
872
- emitFocus: () => emit('focus'),
873
- })
874
-
875
- const formatDateInput = (input: string, cursorPosition?: number): { formatted: string, cursorPos: number } => {
876
- const cleanedInput = input.replace(/[^\d]/g, '')
877
- const separator = props.format.match(/[^DMY]/)?.[0] || '/'
878
- const inputBeforeCursor = input.substring(0, cursorPosition || 0)
879
- const digitsBeforeCursor = inputBeforeCursor.replace(/[^\d]/g, '').length
880
-
881
- let result = ''
882
- let digitIndex = 0
883
- for (let i = 0; i < props.format.length && digitIndex < cleanedInput.length; i++) {
884
- const formatChar = props.format[i].toUpperCase()
885
- if (['D', 'M', 'Y'].includes(formatChar)) {
886
- result += cleanedInput[digitIndex]
887
- digitIndex++
888
- }
889
- else {
890
- result += separator
891
- }
892
- }
893
-
894
- let newCursorPos = digitsBeforeCursor
895
- for (let i = 0, digitCount = 0; i < props.format.length && digitCount < digitsBeforeCursor; i++) {
896
- if (!['D', 'M', 'Y'].includes(props.format[i].toUpperCase())) newCursorPos++
897
- else digitCount++
898
- }
899
-
900
- return { formatted: result, cursorPos: Math.min(newCursorPos, result.length) }
901
- }
902
-
903
- const handleKeydown = (event: KeyboardEvent & { target: HTMLInputElement }) => {
904
- if (props.readonly) return
905
-
906
- if (!props.noCalendar && handleKeyboardNavigation(event)) return
907
-
908
- if (event.key === 'Backspace') {
909
- const input = event.target
910
- if (!input.selectionStart || input.selectionStart !== input.selectionEnd) return
911
- const cursorPos = input.selectionStart
912
- const charBeforeCursor = input.value[cursorPos - 1]
913
-
914
- if (!/\d/.test(charBeforeCursor)) {
915
- event.preventDefault()
916
- const newValue = input.value.substring(0, cursorPos - 2) + input.value.substring(cursorPos)
917
- displayFormattedDate.value = newValue
918
- queueMicrotask(() => {
919
- const newCursorPos = cursorPos - 2
920
- input.setSelectionRange(newCursorPos, newCursorPos)
921
- })
922
- }
923
- }
924
-
925
- if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
926
- const input = event.target
927
- const cursorPos = input.selectionStart || 0
928
- const separator = props.format.match(/[^DMY]/)?.[0] || '/'
929
-
930
- if (event.key === 'ArrowLeft' && cursorPos > 0) {
931
- const charBeforeCursor = input.value[cursorPos - 1]
932
- if (charBeforeCursor === separator) {
933
- event.preventDefault()
934
- input.setSelectionRange(cursorPos - 2, cursorPos - 2)
935
- }
936
- }
937
- else if (event.key === 'ArrowRight' && cursorPos < input.value.length) {
938
- const charAtCursor = input.value[cursorPos]
939
- if (charAtCursor === separator) {
940
- event.preventDefault()
941
- input.setSelectionRange(cursorPos + 2, cursorPos + 2)
942
- }
943
- }
944
- }
945
- }
946
-
947
930
  /**
948
931
  * Today button + labels
949
932
  */
@@ -1048,7 +1031,7 @@
1048
1031
  :class="[getMessageClasses(), 'label-hidden-on-focus']"
1049
1032
  :date-format-return="props.dateFormatReturn"
1050
1033
  :format="props.format"
1051
- :label="labelWithAsterisk || ''"
1034
+ :label="labelWithAsterisk"
1052
1035
  :placeholder="props.placeholder"
1053
1036
  :required="props.required"
1054
1037
  :custom-rules="props.customRules"
@@ -1067,7 +1050,7 @@
1067
1050
  :external-error-messages="errorMessages"
1068
1051
  :display-asterisk="props.displayAsterisk"
1069
1052
  :is-validate-on-blur="props.isValidateOnBlur"
1070
- :title="props.title || props.placeholder || undefined"
1053
+ :title="props.title"
1071
1054
  :hint="props.hint"
1072
1055
  :persistent-hint="props.persistentHint"
1073
1056
  @focus="emit('focus')"
@@ -1093,14 +1076,14 @@
1093
1076
  ref="dateCalendarTextInputRef"
1094
1077
  :key="fieldKey"
1095
1078
  :model-value="textInputValue"
1096
- :label="labelWithAsterisk || ''"
1079
+ :label="labelWithAsterisk"
1097
1080
  :placeholder="props.placeholder"
1098
1081
  :format="props.format"
1099
1082
  :date-format-return="props.dateFormatReturn"
1100
1083
  :required="props.required"
1101
1084
  :disabled="props.disabled"
1102
1085
  :readonly="props.readonly"
1103
- :title="props.title || props.placeholder || undefined"
1086
+ :title="props.title"
1104
1087
  :is-outlined="props.isOutlined"
1105
1088
  :display-icon="props.displayIcon"
1106
1089
  :display-append-icon="props.displayAppendIcon"
@@ -1113,7 +1096,6 @@
1113
1096
  :show-success-messages="props.showSuccessMessages"
1114
1097
  :bg-color="props.bgColor"
1115
1098
  :display-range="props.displayRange"
1116
- :display-persistent-placeholder="true"
1117
1099
  :is-validate-on-blur="props.isValidateOnBlur"
1118
1100
  :external-error-messages="errorMessages"
1119
1101
  :class="[getMessageClasses(), 'label-hidden-on-focus']"
@@ -1145,6 +1127,8 @@
1145
1127
  :show-adjacent-months="true"
1146
1128
  :show-week="props.showWeekNumber"
1147
1129
  :view-mode="currentViewMode"
1130
+ :month="currentMonth !== null ? Number(currentMonth) : undefined"
1131
+ :year="currentYear !== null ? Number(currentYear) : undefined"
1148
1132
  :max="maxDate"
1149
1133
  :min="minDate"
1150
1134
  :custom-rules="props.customRules"
@@ -1324,4 +1308,23 @@
1324
1308
  :deep(.v-btn--variant-text .v-btn__overlay) {
1325
1309
  padding: 13px;
1326
1310
  }
1311
+
1312
+ /* Style de base du ::after */
1313
+ :deep(.custom-year-btn::after) {
1314
+ background-color: #afb1b1;
1315
+ padding: 10px 40px;
1316
+ text-decoration: none;
1317
+ display: inline-block;
1318
+ margin-left: -22px !important;
1319
+ cursor: pointer;
1320
+ border-radius: 9999px;
1321
+ }
1322
+
1323
+ :deep(.custom-month-btn::after) {
1324
+ background-color: #afb1b1;
1325
+ text-decoration: none;
1326
+ display: inline-block;
1327
+ cursor: pointer;
1328
+ border-radius: 9999px !important;
1329
+ }
1327
1330
  </style>