@cnamts/synapse 1.0.12 → 1.0.14

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 (339) hide show
  1. package/README.md +0 -0
  2. package/dist/{DateFilter-DoCcOfDW.js → DateFilter-isr8mXVb.js} +1 -1
  3. package/dist/{NumberFilter-9uR8uo6p.js → NumberFilter-BOe7DqWX.js} +1 -1
  4. package/dist/{PeriodFilter-CxN5ini7.js → PeriodFilter-WTprpO40.js} +1 -1
  5. package/dist/{SelectFilter-bfxipgvt.js → SelectFilter-CqlG5dmI.js} +1 -1
  6. package/dist/{TextFilter-yCnWcmW2.js → TextFilter-fVW5bsRw.js} +1 -1
  7. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +1 -1
  8. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.d.ts +1 -1
  9. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +1 -1
  10. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +104 -90
  12. package/dist/components/Amelipro/AmeliproCard/AmeliproCard.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.d.ts +3 -3
  14. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
  15. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +5 -5
  16. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  17. package/dist/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.d.ts +1 -1
  18. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +24 -32
  19. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +36 -48
  20. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +104 -90
  21. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +105 -91
  22. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +5 -5
  23. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +15 -17
  24. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +1 -1
  25. package/dist/components/Captcha/Captcha.d.ts +70 -0
  26. package/dist/components/Captcha/CaptchaAlert.d.ts +13 -0
  27. package/dist/components/Captcha/CaptchaBase.d.ts +56 -0
  28. package/dist/components/Captcha/CaptchaBtn.d.ts +12 -0
  29. package/dist/components/Captcha/CaptchaForm.d.ts +16 -0
  30. package/dist/components/Captcha/CaptchaImg.d.ts +12 -0
  31. package/dist/components/Captcha/CaptchaInformation.d.ts +20 -0
  32. package/dist/components/Captcha/captchaApi.d.ts +41 -0
  33. package/dist/components/Captcha/icons/volumeUp.d.ts +2 -0
  34. package/dist/components/Captcha/locales.d.ts +35 -0
  35. package/dist/components/Captcha/types.d.ts +2 -0
  36. package/dist/components/ChipList/ChipList.d.ts +2 -2
  37. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +31 -19
  38. package/dist/components/Customs/SyForm/SyForm.d.ts +6 -3
  39. package/dist/components/Customs/SyTabs/SyTabs.d.ts +20 -0
  40. package/dist/components/Customs/SyTextField/SyTextField.d.ts +13 -17
  41. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +156 -74
  42. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +127 -57
  43. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +18 -17
  44. package/dist/components/DatePicker/composables/useDateFormatDisplay.d.ts +3 -0
  45. package/dist/components/DatePicker/tests/setup.d.ts +1216 -560
  46. package/dist/components/FilterSideBar/FilterSideBar.d.ts +8 -0
  47. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +62 -38
  48. package/dist/components/LangBtn/LangBtn.d.ts +4 -0
  49. package/dist/components/NirField/NirField.d.ts +29 -34
  50. package/dist/components/NirField/locales.d.ts +1 -3
  51. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  52. package/dist/components/PeriodField/PeriodField.d.ts +304 -140
  53. package/dist/components/PhoneField/PhoneField.d.ts +13 -17
  54. package/dist/components/RatingPicker/RatingPicker.d.ts +9 -0
  55. package/dist/components/SearchListField/SearchListField.d.ts +42 -413
  56. package/dist/components/SearchListField/locales.d.ts +1 -2
  57. package/dist/components/SyAlert/SyAlert.d.ts +1 -1
  58. package/dist/components/SyTextArea/SyTextArea.d.ts +2 -4
  59. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +15 -8
  60. package/dist/components/Tables/SyTable/SyTable.d.ts +15 -8
  61. package/dist/components/Tables/common/SyTablePagination.d.ts +31 -19
  62. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +4 -0
  63. package/dist/components/Tables/common/types.d.ts +2 -0
  64. package/dist/components/index.d.ts +1 -0
  65. package/dist/composables/validation/useFormValidation.d.ts +10 -0
  66. package/dist/composables/validation/useValidatable.d.ts +10 -2
  67. package/dist/design-system-v3.js +126 -125
  68. package/dist/design-system-v3.umd.cjs +168 -152
  69. package/dist/main-CbBVJ_le.js +34377 -0
  70. package/dist/style.css +1 -1
  71. package/package.json +5 -2
  72. package/src/assets/amelipro/icons.ts +17 -0
  73. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.stories.ts +40 -36
  74. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +226 -26
  75. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +55 -506
  76. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +1 -1
  77. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +7 -2
  78. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +2 -1
  79. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +4 -1
  80. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +4 -1
  81. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +1 -1
  82. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +9 -3
  83. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +42 -11
  84. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +4 -4
  85. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +7 -5
  86. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +4 -2
  87. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.stories.ts +1 -40
  88. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -0
  89. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.stories.ts +4 -2
  90. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +2 -1
  91. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +39 -29
  92. package/src/components/Amelipro/AmeliproCopyBtn/__tests__/__snapshots__/AmeliproCopyBtn.spec.ts.snap +4 -1
  93. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +3 -3
  94. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +8 -6
  95. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.mdx +3 -1
  96. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.stories.ts +23 -5
  97. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +5 -6
  98. package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +2 -2
  99. package/src/components/Amelipro/AmeliproFilePreview/__tests__/__snapshots__/AmeliproFilePreview.spec.ts.snap +5 -6
  100. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +4 -1
  101. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +6 -7
  102. package/src/components/Amelipro/AmeliproFooter/__tests__/AmeliproFooter.spec.ts +787 -0
  103. package/src/components/Amelipro/AmeliproFooter/__tests__/__snapshots__/AmeliproFooter.spec.ts.snap +318 -0
  104. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +1 -2
  105. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/AmeliproHeaderBrandSection.spec.ts +167 -0
  106. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +100 -0
  107. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproLogoAm/__tests__/AmeliproLogoAm.spec.ts +78 -0
  108. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproLogoAm/{tests → __tests__}/__snapshots__/AmeliproLogoAm.spec.ts.snap +64 -2
  109. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/__tests__/AmeliproHeaderBar.spec.ts +312 -0
  110. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/__tests__/__snapshots__/AmeliproHeaderBar.spec.ts.snap +98 -0
  111. package/src/components/Amelipro/AmeliproHeader/__tests__/AmeliproHeader.spec.ts +361 -0
  112. package/src/components/Amelipro/AmeliproHeader/__tests__/__snapshots__/AmeliproHeader.spec.ts.snap +22 -0
  113. package/src/components/Amelipro/AmeliproIcon/__tests__/AmeliproIcon.spec.ts +358 -0
  114. package/src/components/Amelipro/AmeliproIcon/{tests → __tests__}/__snapshots__/AmeliproIcon.spec.ts.snap +30 -3
  115. package/src/components/Amelipro/AmeliproIcon/iconList.ts +1 -0
  116. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +1 -1
  117. package/src/components/Amelipro/AmeliproIconBtn/__tests__/AmeliproIconBtn.spec.ts +459 -0
  118. package/src/components/Amelipro/AmeliproIconBtn/__tests__/__snapshots__/AmeliproIconBtn.spec.ts.snap +58 -0
  119. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.stories.ts +38 -26
  120. package/src/components/Amelipro/AmeliproIllustratedDataTile/__tests__/AmeliproIllustratedDataTile.spec.ts +321 -0
  121. package/src/components/Amelipro/AmeliproIllustratedDataTile/__tests__/__snapshots__/AmeliproIllustratedDataTile.spec.ts.snap +148 -0
  122. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.stories.ts +14 -5
  123. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +1 -1
  124. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/AmeliproIllustratedRadioGroup.spec.ts +498 -0
  125. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/__tests__/__snapshots__/AmeliproIllustratedRadioGroup.spec.ts.snap +325 -0
  126. package/src/components/Amelipro/AmeliproMailTile/__tests__/AmeliproMailTile.spec.ts +210 -0
  127. package/src/components/Amelipro/AmeliproMailTile/__tests__/__snapshots__/AmeliproMailTile.spec.ts.snap +98 -0
  128. package/src/components/Amelipro/AmeliproMenu/__tests__/AmeliproMenu.spec.ts +168 -0
  129. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +295 -0
  130. package/src/components/Amelipro/AmeliproMessage/__tests__/AmeliproMessage.spec.ts +446 -0
  131. package/src/components/Amelipro/AmeliproMessage/__tests__/__snapshots__/AmeliproMessage.spec.ts.snap +60 -0
  132. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/__tests__/AmeliproDropdownMenuBtn.spec.ts +128 -0
  133. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/__tests__/__snapshots__/AmeliproDropdownMenuBtn.spec.ts.snap +67 -0
  134. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/__tests__/AmeliproDropdownMenu.spec.ts +266 -0
  135. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/__tests__/__snapshots__/AmeliproDropdownMenu.spec.ts.snap +134 -0
  136. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/__tests__/AmeliproMessagingMenuBtn.spec.ts +72 -0
  137. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/__tests__/__snapshots__/AmeliproMessagingMenuBtn.spec.ts.snap +71 -0
  138. package/src/components/Amelipro/AmeliproMessagingLayout/__tests__/AmeliproMessagingLayout.spec.ts +300 -0
  139. package/src/components/Amelipro/AmeliproMessagingLayout/__tests__/__snapshots__/AmeliproMessagingLayout.spec.ts.snap +197 -0
  140. package/src/components/Amelipro/AmeliproNumberedCard/__tests__/AmeliproNumberedCard.spec.ts +117 -0
  141. package/src/components/Amelipro/AmeliproNumberedCard/{tests → __tests__}/__snapshots__/AmeliproNumberedCard.spec.ts.snap +47 -45
  142. package/src/components/Amelipro/AmeliproOnboarding/__tests__/AmeliproOnboarding.spec.ts +219 -0
  143. package/src/components/Amelipro/AmeliproOnboarding/__tests__/__snapshots__/AmeliproOnboarding.spec.ts.snap +41 -0
  144. package/src/components/Amelipro/AmeliproPageLayout/__tests__/AmeliproPageLayout.spec.ts +129 -0
  145. package/src/components/Amelipro/AmeliproPageLayout/__tests__/__snapshots__/AmeliproPageLayout.spec.ts.snap +189 -0
  146. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/__tests__/AmeliproPaginationBtn.spec.ts +92 -0
  147. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/__tests__/__snapshots__/AmeliproPaginationBtn.spec.ts.snap +56 -0
  148. package/src/components/Amelipro/AmeliproPagination/__tests__/AmeliproPagination.spec.ts +165 -0
  149. package/src/components/Amelipro/AmeliproPagination/__tests__/__snapshots__/AmeliproPagination.spec.ts.snap +83 -0
  150. package/src/components/Amelipro/AmeliproPatientBanner/__tests__/AmeliproPatientBanner.spec.ts +208 -0
  151. package/src/components/Amelipro/AmeliproPatientBanner/__tests__/__snapshots__/AmeliproPatientBanner.spec.ts.snap +285 -0
  152. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +26 -7
  153. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +12 -4
  154. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.stories.ts +28 -8
  155. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/AmeliproRadioGroup.spec.ts +332 -0
  156. package/src/components/Amelipro/AmeliproRadioGroup/__tests__/__snapshots__/AmeliproRadioGroup.spec.ts.snap +255 -0
  157. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +1 -2
  158. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +3 -1
  159. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +2 -1
  160. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +11 -5
  161. package/src/components/Amelipro/AmeliproSelect/__tests__/AmeliproSelect.spec.ts +481 -0
  162. package/src/components/Amelipro/AmeliproSelect/__tests__/__snapshots__/AmeliproSelect.spec.ts.snap +117 -0
  163. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +5 -2
  164. package/src/components/Amelipro/AmeliproStateTile/__tests__/AmeliproStateTile.spec.ts +206 -0
  165. package/src/components/Amelipro/AmeliproStateTile/__tests__/__snapshots__/AmeliproStateTile.spec.ts.snap +158 -0
  166. package/src/components/Amelipro/AmeliproStatus/__tests__/AmeliproStatus.spec.ts +120 -0
  167. package/src/components/Amelipro/AmeliproStatus/__tests__/__snapshots__/AmeliproStatus.spec.ts.snap +39 -0
  168. package/src/components/Amelipro/AmeliproStepper/AmeliproStepBtn/__tests__/AmeliproStepBtn.spec.ts +97 -0
  169. package/src/components/Amelipro/AmeliproStepper/AmeliproStepBtn/__tests__/__snapshots__/AmeliproStepBtn.spec.ts.snap +61 -0
  170. package/src/components/Amelipro/AmeliproStepper/__tests__/AmeliproStepper.spec.ts +248 -0
  171. package/src/components/Amelipro/AmeliproStepper/__tests__/__snapshots__/AmeliproStepper.spec.ts.snap +179 -0
  172. package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +14 -13
  173. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +2 -1
  174. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +10 -3
  175. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/__tests__/AmeliproTabBtn.spec.ts +129 -0
  176. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/__tests__/__snapshots__/AmeliproTabBtn.spec.ts.snap +81 -0
  177. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +2 -2
  178. package/src/components/Amelipro/AmeliproTabs/__tests__/AmeliproTabs.spec.ts +234 -0
  179. package/src/components/Amelipro/AmeliproTabs/__tests__/__snapshots__/AmeliproTabs.spec.ts.snap +122 -0
  180. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +7 -5
  181. package/src/components/Amelipro/AmeliproTextArea/__tests__/AmeliproTextArea.spec.ts +265 -9
  182. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +98 -155
  183. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -5
  184. package/src/components/Amelipro/AmeliproTextField/__tests__/AmeliproTextField.spec.ts +375 -0
  185. package/src/components/Amelipro/AmeliproTextField/__tests__/__snapshots__/AmeliproTextField.spec.ts.snap +143 -0
  186. package/src/components/Amelipro/AmeliproTileBtn/__tests__/AmeliproTileBtn.spec.ts +241 -0
  187. package/src/components/Amelipro/AmeliproTileBtn/__tests__/__snapshots__/AmeliproTileBtn.spec.ts.snap +74 -0
  188. package/src/components/Amelipro/AmeliproTooltips/__tests__/AmeliproTooltips.spec.ts +212 -0
  189. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +71 -0
  190. package/src/components/Amelipro/AmeliproTransmission/__tests__/AmeliproTransmission.spec.ts +155 -0
  191. package/src/components/Amelipro/AmeliproTransmission/__tests__/__snapshots__/AmeliproTransmission.spec.ts.snap +240 -0
  192. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.stories.ts +0 -1
  193. package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +4 -1
  194. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -0
  195. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +4 -5
  196. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/__snapshots__/StructureTabs.spec.ts.snap +5 -4
  197. package/src/components/Amelipro/StructureMenu/tests/__snapshots__/StructureMenu.spec.ts.snap +13 -6
  198. package/src/components/Amelipro/UserMenu/UserMenu.vue +2 -1
  199. package/src/components/Amelipro/UserMenu/tests/__snapshots__/UserMenu.spec.ts.snap +4 -1
  200. package/src/components/Captcha/Captcha.mdx +72 -0
  201. package/src/components/Captcha/Captcha.stories.ts +283 -0
  202. package/src/components/Captcha/Captcha.vue +328 -0
  203. package/src/components/Captcha/CaptchaAlert.vue +60 -0
  204. package/src/components/Captcha/CaptchaBase.vue +222 -0
  205. package/src/components/Captcha/CaptchaBtn.vue +35 -0
  206. package/src/components/Captcha/CaptchaForm.vue +58 -0
  207. package/src/components/Captcha/CaptchaImg.vue +41 -0
  208. package/src/components/Captcha/CaptchaInformation.vue +64 -0
  209. package/src/components/Captcha/captchaApi.ts +110 -0
  210. package/src/components/Captcha/icons/volumeUp.vue +11 -0
  211. package/src/components/Captcha/locales.ts +35 -0
  212. package/src/components/Captcha/readme.md +5 -0
  213. package/src/components/Captcha/tests/Captcha.spec.ts +298 -0
  214. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +716 -0
  215. package/src/components/Captcha/types.ts +2 -0
  216. package/src/components/Customs/Selects/SySelect/SySelect.vue +3 -3
  217. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +5 -0
  218. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +5 -1
  219. package/src/components/Customs/SyForm/SyForm.stories.ts +133 -23
  220. package/src/components/Customs/SyForm/SyForm.vue +17 -1
  221. package/src/components/Customs/SyTabs/SyTabs.stories.ts +174 -10
  222. package/src/components/Customs/SyTabs/SyTabs.vue +62 -0
  223. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +98 -0
  224. package/src/components/Customs/SyTextField/SyTextField.vue +2 -2
  225. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +13 -13
  226. package/src/components/DatePicker/CalendarMode/DatePicker.vue +14 -1
  227. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +11 -11
  228. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +115 -6
  229. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +7 -0
  230. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +1 -1
  231. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +3 -3
  232. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +78 -5
  233. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +15 -15
  234. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +2 -2
  235. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +1 -1
  236. package/src/components/DatePicker/composables/useDateFormatDisplay.ts +25 -0
  237. package/src/components/DatePicker/composables/useDateFormatValidation.ts +5 -2
  238. package/src/components/DatePicker/composables/useManualDateValidation.ts +5 -1
  239. package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +1 -1
  240. package/src/components/ErrorPage/ErrorPage.vue +54 -7
  241. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +6 -2
  242. package/src/components/ExternalLinks/ExternalLinks.vue +2 -4
  243. package/src/components/NirField/NirField.stories.ts +74 -0
  244. package/src/components/NirField/NirField.vue +34 -9
  245. package/src/components/NirField/locales.ts +1 -3
  246. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +6 -2
  247. package/src/components/PasswordField/PasswordField.vue +45 -13
  248. package/src/components/PhoneField/PhoneField.vue +43 -10
  249. package/src/components/RangeField/RangeSlider/RangeSlider.vue +3 -2
  250. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +2 -1
  251. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +2 -0
  252. package/src/components/RatingPicker/RatingPicker.stories.ts +10 -0
  253. package/src/components/RatingPicker/RatingPicker.vue +23 -1
  254. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +2 -0
  255. package/src/components/SearchListField/Accessibilite.stories.ts +4 -0
  256. package/src/components/SearchListField/SearchListField.stories.ts +16 -0
  257. package/src/components/SearchListField/SearchListField.vue +121 -109
  258. package/src/components/SearchListField/locales.ts +11 -2
  259. package/src/components/SearchListField/tests/SearchListField.spec.ts +91 -25
  260. package/src/components/SyAlert/SyAlert.vue +8 -0
  261. package/src/components/SyAlert/tests/SyAlert.spec.ts +1 -22
  262. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +304 -0
  263. package/src/components/Tables/SyServerTable/SyServerTable.vue +12 -4
  264. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  265. package/src/components/Tables/SyTable/SyTable.stories.ts +186 -0
  266. package/src/components/Tables/SyTable/SyTable.vue +12 -4
  267. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +65 -1
  268. package/src/components/Tables/common/types.ts +2 -0
  269. package/src/components/index.ts +1 -0
  270. package/src/composables/rules/useFieldValidation.ts +47 -7
  271. package/src/composables/validation/useFormValidation.ts +46 -8
  272. package/src/composables/validation/useValidatable.ts +19 -8
  273. package/dist/main-DMXtXK3y.js +0 -33458
  274. package/src/components/Amelipro/AmeliproFooter/tests/AmeliproFooter.spec.ts +0 -15
  275. package/src/components/Amelipro/AmeliproFooter/tests/__snapshots__/AmeliproFooter.spec.ts.snap +0 -432
  276. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/AmeliproHeaderBrandSection.spec.ts +0 -15
  277. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +0 -131
  278. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproLogoAm/tests/AmeliproLogoAm.spec.ts +0 -15
  279. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/AmeliproHeaderBar.spec.ts +0 -15
  280. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/__snapshots__/AmeliproHeaderBar.spec.ts.snap +0 -172
  281. package/src/components/Amelipro/AmeliproHeader/tests/AmeliproHeader.spec.ts +0 -159
  282. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +0 -841
  283. package/src/components/Amelipro/AmeliproIcon/tests/AmeliproIcon.spec.ts +0 -19
  284. package/src/components/Amelipro/AmeliproIconBtn/tests/AmeliproIconBtn.spec.ts +0 -22
  285. package/src/components/Amelipro/AmeliproIconBtn/tests/__snapshots__/AmeliproIconBtn.spec.ts.snap +0 -87
  286. package/src/components/Amelipro/AmeliproIllustratedDataTile/tests/AmeliproIllustratedDataTile.spec.ts +0 -20
  287. package/src/components/Amelipro/AmeliproIllustratedDataTile/tests/__snapshots__/AmeliproIllustratedDataTile.spec.ts.snap +0 -69
  288. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/tests/AmeliproIllustratedRadioGroup.spec.ts +0 -53
  289. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/tests/__snapshots__/AmeliproIllustratedRadioGroup.spec.ts.snap +0 -544
  290. package/src/components/Amelipro/AmeliproMailTile/tests/AmeliproMailTile.spec.ts +0 -25
  291. package/src/components/Amelipro/AmeliproMailTile/tests/__snapshots__/AmeliproMailTile.spec.ts.snap +0 -164
  292. package/src/components/Amelipro/AmeliproMenu/tests/AmeliproMenu.spec.ts +0 -85
  293. package/src/components/Amelipro/AmeliproMenu/tests/__snapshots__/AmeliproMenu.spec.ts.snap +0 -537
  294. package/src/components/Amelipro/AmeliproMessage/tests/AmeliproMessage.spec.ts +0 -18
  295. package/src/components/Amelipro/AmeliproMessage/tests/__snapshots__/AmeliproMessage.spec.ts.snap +0 -94
  296. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/tests/AmeliproDropdownMenuBtn.spec.ts +0 -16
  297. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/tests/__snapshots__/AmeliproDropdownMenuBtn.spec.ts.snap +0 -56
  298. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/tests/AmeliproDropdownMenu.spec.ts +0 -28
  299. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/tests/__snapshots__/AmeliproDropdownMenu.spec.ts.snap +0 -300
  300. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/tests/AmeliproMessagingMenuBtn.spec.ts +0 -16
  301. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/tests/__snapshots__/AmeliproMessagingMenuBtn.spec.ts.snap +0 -89
  302. package/src/components/Amelipro/AmeliproMessagingLayout/tests/AmeliproMessagingLayout.spec.ts +0 -30
  303. package/src/components/Amelipro/AmeliproMessagingLayout/tests/__snapshots__/AmeliproMessagingLayout.spec.ts.snap +0 -439
  304. package/src/components/Amelipro/AmeliproNumberedCard/tests/AmeliproNumberedCard.spec.ts +0 -23
  305. package/src/components/Amelipro/AmeliproOnboarding/tests/AmeliproOnboarding.spec.ts +0 -41
  306. package/src/components/Amelipro/AmeliproOnboarding/tests/__snapshots__/AmeliproOnboarding.spec.ts.snap +0 -3
  307. package/src/components/Amelipro/AmeliproPageLayout/tests/AmeliproPageLayout.spec.ts +0 -183
  308. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +0 -1590
  309. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/tests/AmeliproPaginationBtn.spec.ts +0 -15
  310. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/tests/__snapshots__/AmeliproPaginationBtn.spec.ts.snap +0 -46
  311. package/src/components/Amelipro/AmeliproPagination/tests/AmeliproPagination.spec.ts +0 -15
  312. package/src/components/Amelipro/AmeliproPagination/tests/__snapshots__/AmeliproPagination.spec.ts.snap +0 -116
  313. package/src/components/Amelipro/AmeliproPatientBanner/tests/AmeliproPatientBanner.spec.ts +0 -24
  314. package/src/components/Amelipro/AmeliproPatientBanner/tests/__snapshots__/AmeliproPatientBanner.spec.ts.snap +0 -268
  315. package/src/components/Amelipro/AmeliproRadioGroup/tests/AmeliproRadioGroup.spec.ts +0 -43
  316. package/src/components/Amelipro/AmeliproRadioGroup/tests/__snapshots__/AmeliproRadioGroup.spec.ts.snap +0 -262
  317. package/src/components/Amelipro/AmeliproSelect/tests/AmeliproSelect.spec.ts +0 -38
  318. package/src/components/Amelipro/AmeliproSelect/tests/__snapshots__/AmeliproSelect.spec.ts.snap +0 -196
  319. package/src/components/Amelipro/AmeliproStateTile/tests/AmeliproStateTile.spec.ts +0 -20
  320. package/src/components/Amelipro/AmeliproStateTile/tests/__snapshots__/AmeliproStateTile.spec.ts.snap +0 -90
  321. package/src/components/Amelipro/AmeliproStatus/tests/AmeliproStatus.spec.ts +0 -16
  322. package/src/components/Amelipro/AmeliproStatus/tests/__snapshots__/AmeliproStatus.spec.ts.snap +0 -21
  323. package/src/components/Amelipro/AmeliproStepper/AmeliproStepBtn/tests/AmeliproStepBtn.spec.ts +0 -18
  324. package/src/components/Amelipro/AmeliproStepper/AmeliproStepBtn/tests/__snapshots__/AmeliproStepBtn.spec.ts.snap +0 -34
  325. package/src/components/Amelipro/AmeliproStepper/tests/AmeliproStepper.spec.ts +0 -36
  326. package/src/components/Amelipro/AmeliproStepper/tests/__snapshots__/AmeliproStepper.spec.ts.snap +0 -354
  327. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/tests/AmeliproTabBtn.spec.ts +0 -20
  328. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/tests/__snapshots__/AmeliproTabBtn.spec.ts.snap +0 -34
  329. package/src/components/Amelipro/AmeliproTabs/tests/AmeliproTabs.spec.ts +0 -39
  330. package/src/components/Amelipro/AmeliproTabs/tests/__snapshots__/AmeliproTabs.spec.ts.snap +0 -217
  331. package/src/components/Amelipro/AmeliproTextField/tests/AmeliproTextField.spec.ts +0 -16
  332. package/src/components/Amelipro/AmeliproTextField/tests/__snapshots__/AmeliproTextField.spec.ts.snap +0 -162
  333. package/src/components/Amelipro/AmeliproTileBtn/tests/AmeliproTileBtn.spec.ts +0 -17
  334. package/src/components/Amelipro/AmeliproTileBtn/tests/__snapshots__/AmeliproTileBtn.spec.ts.snap +0 -65
  335. package/src/components/Amelipro/AmeliproTooltips/tests/AmeliproTooltips.spec.ts +0 -16
  336. package/src/components/Amelipro/AmeliproTooltips/tests/__snapshots__/AmeliproTooltips.spec.ts.snap +0 -105
  337. package/src/components/Amelipro/AmeliproTransmission/tests/AmeliproTransmission.spec.ts +0 -16
  338. package/src/components/Amelipro/AmeliproTransmission/tests/__snapshots__/AmeliproTransmission.spec.ts.snap +0 -246
  339. package/src/components/SyAlert/tests/__snapshots__/SyAlert.spec.ts.snap +0 -99
@@ -54,7 +54,7 @@
54
54
  persistentHint?: boolean
55
55
  externalErrorMessages?: string[]
56
56
  }>(), {
57
- modelValue: null,
57
+ modelValue: undefined,
58
58
  placeholder: DATE_PICKER_MESSAGES.PLACEHOLDER_DEFAULT,
59
59
  format: DATE_PICKER_MESSAGES.FORMAT_DEFAULT,
60
60
  dateFormatReturn: undefined,
@@ -200,6 +200,8 @@
200
200
  const inputValue = ref('')
201
201
  const inputRef = ref<InstanceType<typeof SyTextField> | null>(null)
202
202
  const isFormatting = ref(false)
203
+ // Force re-render of SyTextField when needed (e.g., after reset)
204
+ const fieldKey = ref(0)
203
205
 
204
206
  const updateDisplayValue = (dateDisplayText: string) => (inputValue.value = dateDisplayText)
205
207
  const updateAriaLabel = (ariaLabelText: string) => (ariaLabel.value = ariaLabelText)
@@ -688,6 +690,49 @@
688
690
  * =====================
689
691
  */
690
692
  watch(inputValue, async (nv, ov) => {
693
+ if (props.disabled) {
694
+ const isEmpty = !nv || nv.trim() === '' || /^[_/\-.\s]+$/.test(nv)
695
+
696
+ if (isEmpty && ov && props.modelValue) {
697
+ isFormatting.value = true
698
+
699
+ const mv = props.modelValue
700
+
701
+ // --- RANGE ---
702
+ if (isRange.value && Array.isArray(mv) && mv.length === 2) {
703
+ const [start, end] = mv
704
+ const sd = parseDate(start, returnFormat.value)
705
+ const ed = parseDate(end, returnFormat.value)
706
+
707
+ if (sd && ed) {
708
+ initializeWithDates(sd, ed)
709
+ selectedDates.value = [sd, ed]
710
+ inputValue.value = formatRangeForDisplay(sd, ed)
711
+ runRules(inputValue.value)
712
+ }
713
+ }
714
+
715
+ // --- SINGLE ---
716
+ else {
717
+ const raw = typeof mv === 'string' ? mv : ''
718
+ const parsed = dayjs(raw, displayFormat.value, true)
719
+
720
+ if (parsed.isValid()) {
721
+ inputValue.value = parsed.format(displayFormat.value)
722
+ runRules(inputValue.value)
723
+ }
724
+ else {
725
+ inputValue.value = raw
726
+ runRules(raw)
727
+ }
728
+ }
729
+
730
+ isFormatting.value = false
731
+ }
732
+
733
+ return
734
+ }
735
+
691
736
  // Prevent infinite loops but allow formatting
692
737
  if (isFormatting.value || nv === ov || isHandlingBackspace.value || isBootstrapping.value) return
693
738
  try {
@@ -869,7 +914,7 @@
869
914
  }
870
915
  })
871
916
 
872
- watch(() => props.modelValue, (nv: DateValue) => {
917
+ watch(() => props.modelValue, (nv) => {
873
918
  if (isFormatting.value) return
874
919
  if (!nv) {
875
920
  inputValue.value = ''
@@ -940,15 +985,42 @@
940
985
  isValidating.value = true
941
986
  hasInteracted.value = true
942
987
  const ok = runRules(inputValue.value)
943
- if (!ok || hasError.value) return false
944
- return !hasError.value
988
+ isValidating.value = false
989
+ return ok
990
+ }
991
+
992
+ // Reset hook utilisé par SyForm.reset() via useValidatable
993
+ const reset = () => {
994
+ // 1) Nettoyer l'état de validation et d'interaction
995
+ clearValidation()
996
+ isFocused.value = false
997
+ hasInteracted.value = false
998
+
999
+ if (props.disabled) {
1000
+ fieldKey.value++
1001
+ return
1002
+ }
1003
+
1004
+ // 2) Réinitialiser la valeur sans déclencher de validation interactive
1005
+ isFormatting.value = true
1006
+ inputValue.value = ''
1007
+ selectedDates.value = null
1008
+ resetState()
1009
+ isFormatting.value = false
1010
+
1011
+ // 3) Synchroniser le modèle externe
1012
+ emitModel(null)
1013
+
1014
+ // 4) Forcer la recréation du champ pour réinitialiser l'état interne de Vuetify
1015
+ fieldKey.value++
945
1016
  }
946
1017
 
947
1018
  // Intégration avec le système de validation du formulaire
948
- useValidatable(validateOnSubmit)
1019
+ useValidatable(validateOnSubmit, clearValidation, reset)
949
1020
 
950
1021
  defineExpose({
951
1022
  validateOnSubmit,
1023
+ reset,
952
1024
  focus() {
953
1025
  const el: HTMLInputElement | null | undefined = inputRef.value?.$el?.querySelector?.('input:not([type="hidden"])')
954
1026
  el?.focus({ preventScroll: true })
@@ -1002,6 +1074,7 @@
1002
1074
 
1003
1075
  <template>
1004
1076
  <SyTextField
1077
+ :key="fieldKey"
1005
1078
  ref="inputRef"
1006
1079
  v-model="inputValue"
1007
1080
  :append-icon="props.displayIcon && props.displayAppendIcon ? 'calendar' : undefined"
@@ -681,7 +681,7 @@ export const AutoClampFeature: Story = {
681
681
  <div class="d-flex flex-column">
682
682
  <h3>Démonstration de l'auto clamp dans DateTextInput</h3>
683
683
 
684
- <h4 class="mt-4">Format DD/MM/YYYY (séparateur /)</h4>
684
+ <h4 class="mt-4">Format JJ/MM/AAAA (séparateur /)</h4>
685
685
  <DatePicker
686
686
  v-model="dateSlash"
687
687
  placeholder="Saisie avec auto clamp - séparateur /"
@@ -690,7 +690,7 @@ export const AutoClampFeature: Story = {
690
690
  autoClamp
691
691
  />
692
692
 
693
- <h4 class="mt-4">Format DD-MM-YYYY (séparateur -)</h4>
693
+ <h4 class="mt-4">Format JJ-MM-AAAA (séparateur -)</h4>
694
694
  <DatePicker
695
695
  v-model="dateDash"
696
696
  placeholder="Saisie avec auto clamp - séparateur -"
@@ -753,7 +753,7 @@ export const AutoClampFeature: Story = {
753
753
  <h3>Démonstration de l'auto clamp dans DateTextInput</h3>
754
754
  <div class="mb-4 mt-2">Saisissez uniquement des chiffres - les séparateurs seront ajoutés automatiquement selon le format défini</div>
755
755
 
756
- <h4 class="mb-2">Format DD/MM/YYYY (séparateur /)</h4>
756
+ <h4 class="mb-2">Format JJ/MM/AAAA (séparateur /)</h4>
757
757
  <DatePicker
758
758
  v-model="dateSlash"
759
759
  placeholder="Saisie avec auto clamp - séparateur /"
@@ -763,7 +763,7 @@ export const AutoClampFeature: Story = {
763
763
  />
764
764
  <div class="caption mb-4">Valeur actuelle: {{ dateSlash || 'aucune date saisie' }}</div>
765
765
 
766
- <h4 class="mb-2">Format DD-MM-YYYY (séparateur -)</h4>
766
+ <h4 class="mb-2">Format JJ-MM-AAAA (séparateur -)</h4>
767
767
  <DatePicker
768
768
  v-model="dateDash"
769
769
  placeholder="Saisie avec auto clamp - séparateur -"
@@ -773,7 +773,7 @@ export const AutoClampFeature: Story = {
773
773
  />
774
774
  <div class="caption mb-4">Valeur actuelle: {{ dateDash || 'aucune date saisie' }}</div>
775
775
 
776
- <h4 class="mb-2">Format YYYY.MM.DD (séparateur .)</h4>
776
+ <h4 class="mb-2">Format AAAA.MM.JJ (séparateur .)</h4>
777
777
  <DatePicker
778
778
  v-model="dateDot"
779
779
  placeholder="Saisie avec auto clamp - séparateur ."
@@ -809,31 +809,31 @@ export const DifferentFormats: Story = {
809
809
  <div class="d-flex flex-column gap-4">
810
810
  <DatePicker
811
811
  v-model="value1"
812
- placeholder="Format DD/MM/YYYY"
812
+ placeholder="Format JJ/MM/AAAA"
813
813
  format="DD/MM/YYYY"
814
814
  no-calendar
815
815
  />
816
816
  <DatePicker
817
817
  v-model="value2"
818
- placeholder="Format MM/DD/YYYY"
818
+ placeholder="Format MM/JJ/AAAA"
819
819
  format="MM/DD/YYYY"
820
820
  no-calendar
821
821
  />
822
822
  <DatePicker
823
823
  v-model="value3"
824
- placeholder="Format YYYY-MM-DD"
824
+ placeholder="Format AAAA-MM-JJ"
825
825
  format="YYYY-MM-DD"
826
826
  no-calendar
827
827
  />
828
828
  <DatePicker
829
829
  v-model="value4"
830
- placeholder="Format DD-MM-YY"
830
+ placeholder="Format JJ-MM-AA"
831
831
  format="DD-MM-YY"
832
832
  no-calendar
833
833
  />
834
834
  <DatePicker
835
835
  v-model="value5"
836
- placeholder="Format DD.MM.YYYY"
836
+ placeholder="Format JJ.MM.AAAA"
837
837
  format="DD.MM.YYYY"
838
838
  no-calendar
839
839
  />
@@ -873,35 +873,35 @@ export const DifferentFormats: Story = {
873
873
  <div class="d-flex flex-column gap-4 pa-4">
874
874
  <DatePicker
875
875
  v-model="value1"
876
- placeholder="Format DD/MM/YYYY"
876
+ placeholder="Format JJ/MM/AAAA"
877
877
  format="DD/MM/YYYY"
878
878
  no-calendar
879
879
  class="py-4"
880
880
  />
881
881
  <DatePicker
882
882
  v-model="value2"
883
- placeholder="Format MM/DD/YYYY"
883
+ placeholder="Format MM/JJ/AAAA"
884
884
  format="MM/DD/YYYY"
885
885
  no-calendar
886
886
  class="py-4"
887
887
  />
888
888
  <DatePicker
889
889
  v-model="value3"
890
- placeholder="Format YYYY-MM-DD"
890
+ placeholder="Format AAAA-MM-JJ"
891
891
  format="YYYY-MM-DD"
892
892
  no-calendar
893
893
  class="py-4"
894
894
  />
895
895
  <DatePicker
896
896
  v-model="value4"
897
- placeholder="Format DD-MM-YY"
897
+ placeholder="Format JJ-MM-AA"
898
898
  format="DD-MM-YY"
899
899
  no-calendar
900
900
  class="py-4"
901
901
  />
902
902
  <DatePicker
903
903
  v-model="value5"
904
- placeholder="Format DD.MM.YYYY"
904
+ placeholder="Format JJ.MM.AAAA"
905
905
  format="DD.MM.YYYY"
906
906
  no-calendar
907
907
  class="py-4"
@@ -29,7 +29,7 @@ describe('useDateFormatValidation', () => {
29
29
 
30
30
  const result = validateDateFormat('32/12/2023')
31
31
  expect(result.isValid).toBe(false)
32
- expect(result.message).toBe('Format de date invalide (DD/MM/YYYY)')
32
+ expect(result.message).toBe('Format de date invalide (JJ/MM/AAAA)')
33
33
  })
34
34
 
35
35
  it('devrait retourner isValid=true pour une date vide si non requis', () => {
@@ -78,7 +78,7 @@ describe('useDateFormatValidation', () => {
78
78
 
79
79
  const result = validateDateFormat('25/12/2023a')
80
80
  expect(result.isValid).toBe(false)
81
- expect(result.message).toBe('Format de date invalide (DD/MM/YYYY)')
81
+ expect(result.message).toBe('Format de date invalide (JJ/MM/AAAA)')
82
82
  })
83
83
 
84
84
  it('devrait valider une date au format alternatif si dateFormatReturn est spécifié', () => {
@@ -161,7 +161,7 @@ describe('useManualDateValidation', () => {
161
161
  const result = validateManualInput('01/01/2023')
162
162
 
163
163
  expect(result).toBe(false)
164
- expect(errors.value).toContain('Format de date invalide (DD/MM/YYYY)')
164
+ expect(errors.value).toContain('Format de date invalide (JJ/MM/AAAA)')
165
165
  })
166
166
 
167
167
  it('devrait appeler validateField avec les règles personnalisées', () => {
@@ -0,0 +1,25 @@
1
+ export const useDateFormatDisplay = () => {
2
+ const getDisplayFormat = (format: string): string => {
3
+ if (!format) return ''
4
+
5
+ return format.replace(/[DMY]+/gi, (token) => {
6
+ const upper = token.toUpperCase()
7
+ const firstChar = upper.charAt(0)
8
+
9
+ switch (firstChar) {
10
+ case 'D':
11
+ return 'J'.repeat(token.length)
12
+ case 'M':
13
+ return 'M'.repeat(token.length)
14
+ case 'Y':
15
+ return 'A'.repeat(token.length)
16
+ default:
17
+ return token
18
+ }
19
+ })
20
+ }
21
+
22
+ return {
23
+ getDisplayFormat,
24
+ }
25
+ }
@@ -2,6 +2,7 @@ import { computed, type Ref } from 'vue'
2
2
  import dayjs from 'dayjs'
3
3
  import customParseFormat from 'dayjs/plugin/customParseFormat'
4
4
  import { DATE_PICKER_MESSAGES } from '../constants/messages'
5
+ import { useDateFormatDisplay } from './useDateFormatDisplay'
5
6
 
6
7
  // Initialiser le plugin dayjs nécessaire pour la validation des formats de date
7
8
  dayjs.extend(customParseFormat)
@@ -25,6 +26,8 @@ export const useDateFormatValidation = (options: {
25
26
  disableErrorHandling?: boolean
26
27
  }) => {
27
28
  const { format, dateFormatReturn, required = false, hasInteracted, disableErrorHandling = false } = options
29
+ const { getDisplayFormat } = useDateFormatDisplay()
30
+ const displayFormat = getDisplayFormat(format)
28
31
 
29
32
  /**
30
33
  * Valide le format d'une chaîne de date
@@ -43,7 +46,7 @@ export const useDateFormatValidation = (options: {
43
46
  if (!/^[\d/.-]*$/.test(dateStr)) {
44
47
  return {
45
48
  isValid: disableErrorHandling,
46
- message: disableErrorHandling ? '' : `Format de date invalide (${format})`,
49
+ message: disableErrorHandling ? '' : `Format de date invalide (${displayFormat})`,
47
50
  }
48
51
  }
49
52
 
@@ -53,7 +56,7 @@ export const useDateFormatValidation = (options: {
53
56
  if (!isValid) {
54
57
  return {
55
58
  isValid: disableErrorHandling,
56
- message: disableErrorHandling ? '' : `Format de date invalide (${format})`,
59
+ message: disableErrorHandling ? '' : `Format de date invalide (${displayFormat})`,
57
60
  }
58
61
  }
59
62
 
@@ -6,6 +6,7 @@ import {
6
6
  validateEmptyOrIncompleteDate,
7
7
  type CustomRule,
8
8
  } from '../utils/validationUtils'
9
+ import { useDateFormatDisplay } from './useDateFormatDisplay'
9
10
 
10
11
  /**
11
12
  * Composable pour la validation manuelle des dates saisies
@@ -47,6 +48,9 @@ export const useManualDateValidation = (options: {
47
48
  validateField,
48
49
  } = options
49
50
 
51
+ const { getDisplayFormat } = useDateFormatDisplay()
52
+ const displayFormat = getDisplayFormat(format)
53
+
50
54
  /**
51
55
  * Valide une saisie manuelle de date
52
56
  *
@@ -89,7 +93,7 @@ export const useManualDateValidation = (options: {
89
93
  if (!date) {
90
94
  // La date n'a pas pu être parsée
91
95
  if (!disableErrorHandling) {
92
- errors.value.push(`Format de date invalide (${format})`)
96
+ errors.value.push(`Format de date invalide (${displayFormat})`)
93
97
  }
94
98
  return false
95
99
  }
@@ -2634,7 +2634,7 @@ describe('DatePicker - Tests de Validation Complets', () => {
2634
2634
  const endTime = performance.now()
2635
2635
 
2636
2636
  expect(wrapper.exists()).toBe(true)
2637
- expect(endTime - startTime).toBeLessThan(500) // Moins de 500ms
2637
+ expect(endTime - startTime).toBeLessThan(1000) // Moins de 1 seconde sans lag
2638
2638
  })
2639
2639
  })
2640
2640
 
@@ -3,10 +3,45 @@
3
3
  import { locales } from './locales'
4
4
  import PageContainer from '../PageContainer/PageContainer.vue'
5
5
 
6
+ type MessagePart =
7
+ | { type: 'text', value: string }
8
+ | { type: 'phone', value: string }
9
+
6
10
  // Fonction pour formater le message et ajouter des liens tel: aux numéros de téléphone
7
- const formatMessage = (message: string): string => {
8
- // Regex pour détecter les numéros de téléphone comme 3646
9
- return message.replace(/\b(3646|\d{10})\b/g, '<a href="tel:$1">$1</a>')
11
+ const splitMessage = (message?: string): MessagePart[] => {
12
+ // Regex pour détecter les numéros de téléphone
13
+ if (!message)
14
+ return []
15
+
16
+ const regex = /\b(\d{4}|\d{10})\b/g
17
+ const parts: MessagePart[] = []
18
+ let lastIndex = 0
19
+ let match: RegExpExecArray | null
20
+
21
+ while ((match = regex.exec(message)) !== null) {
22
+ if (match.index > lastIndex) {
23
+ parts.push({
24
+ type: 'text',
25
+ value: message.slice(lastIndex, match.index),
26
+ })
27
+ }
28
+
29
+ parts.push({
30
+ type: 'phone',
31
+ value: match[1],
32
+ })
33
+
34
+ lastIndex = regex.lastIndex
35
+ }
36
+
37
+ if (lastIndex < message.length) {
38
+ parts.push({
39
+ type: 'text',
40
+ value: message.slice(lastIndex),
41
+ })
42
+ }
43
+
44
+ return parts
10
45
  }
11
46
 
12
47
  withDefaults(defineProps<{
@@ -57,10 +92,22 @@
57
92
  {{ pageTitle }}
58
93
  </h1>
59
94
 
60
- <p
61
- v-if="message"
62
- v-html="formatMessage(message)"
63
- />
95
+ <p v-if="message">
96
+ <template
97
+ v-for="(part, index) in splitMessage(message)"
98
+ :key="index"
99
+ >
100
+ <span v-if="part.type === 'text'">
101
+ {{ part.value }}
102
+ </span>
103
+ <a
104
+ v-else
105
+ :href="`tel:${part.value}`"
106
+ >
107
+ {{ part.value }}
108
+ </a>
109
+ </template>
110
+ </p>
64
111
 
65
112
  <slot name="additional-content" />
66
113
 
@@ -103,7 +103,9 @@ exports[`ErrorPage > renders correctly 1`] = `
103
103
  Something went wrong
104
104
  </h1>
105
105
  <p>
106
- Error message
106
+ <span>
107
+ Error message
108
+ </span>
107
109
  </p>
108
110
  <!-- v-if -->
109
111
  </div>
@@ -229,7 +231,9 @@ exports[`ErrorPage > renders correctly with undefined route 1`] = `
229
231
  Error
230
232
  </h1>
231
233
  <p>
232
- Error message
234
+ <span>
235
+ Error message
236
+ </span>
233
237
  </p>
234
238
  <a
235
239
  class="
@@ -145,9 +145,7 @@
145
145
  class="sy-external-links-list-item py-2"
146
146
  v-bind="options.listItem"
147
147
  >
148
- <div
149
- class="w-100 h-100 d-flex justify-space-between align-center"
150
- >
148
+ <div class="w-100 h-100 d-flex justify-space-between align-center">
151
149
  <div v-bind="options.listItemTitle">
152
150
  {{ item.text }}
153
151
  </div>
@@ -183,6 +181,7 @@ $list-max-height: 248px;
183
181
  // Allow overgrow on mobile
184
182
  max-width: none;
185
183
  border-radius: 0 !important;
184
+ box-shadow: none !important;
186
185
 
187
186
  :deep(.v-btn__content) {
188
187
  flex-direction: inherit;
@@ -244,7 +243,6 @@ $list-max-height: 248px;
244
243
  width: 100%;
245
244
  font-size: 1rem;
246
245
  font-weight: 400;
247
- letter-spacing: 0.0094em;
248
246
  }
249
247
 
250
248
  @media only screen and (height <= 340px) {
@@ -349,6 +349,16 @@ const meta: Meta<typeof NirField> = {
349
349
  },
350
350
  },
351
351
  },
352
+ customLocale: {
353
+ description: 'Objet permettant de surcharger les messages du composant. Clés supportées : `errorRequiredNumber`, `errorInvalidNumber`, `errorRequiredKey`, `errorInvalidKey`, `successNumberValid`, `successKeyValid`.',
354
+ control: 'object',
355
+ table: {
356
+ type: {
357
+ summary: 'Partial<typeof locales>',
358
+ },
359
+ defaultValue: { summary: '{}' },
360
+ },
361
+ },
352
362
  },
353
363
  } satisfies Meta<typeof NirField>
354
364
 
@@ -1315,3 +1325,67 @@ mais gérer leur affichage différemment, ou utiliser la validation uniquement a
1315
1325
  `,
1316
1326
  }),
1317
1327
  }
1328
+
1329
+ export const WithCustomLocale: Story = {
1330
+ args: {
1331
+ ...Default.args,
1332
+ required: true,
1333
+ showSuccessMessages: true,
1334
+ customLocale: {
1335
+ errorRequiredNumber: 'Veuillez renseigner votre numéro de sécurité sociale (13 caractères).',
1336
+ errorInvalidNumber: 'Format NIR non reconnu, merci de vérifier.',
1337
+ errorRequiredKey: 'La clé (2 chiffres) est requise.',
1338
+ errorInvalidKey: 'La clé ne correspond pas au NIR saisi.',
1339
+ successNumberValid: 'Numéro reconnu ✅',
1340
+ successKeyValid: 'Clé correspondante ✅',
1341
+ },
1342
+ },
1343
+ parameters: {
1344
+ docs: {
1345
+ description: {
1346
+ story: `
1347
+ ### Surcharger les messages avec customLocale
1348
+
1349
+ Utilisez la prop \`customLocale\` pour remplacer les messages par défaut sans toucher au composant.
1350
+
1351
+ Clés supportées :
1352
+ - \`errorRequiredNumber\`
1353
+ - \`erreurInvalidNumber\`
1354
+ - \`errorRequiredKey\`
1355
+ - \`errorInvalidKey\`
1356
+ - \`successNumberValid\`
1357
+ - \`successKeyValid\`
1358
+ `,
1359
+ },
1360
+ },
1361
+ sourceCode: [
1362
+ {
1363
+ name: 'Template',
1364
+ code: `<template>
1365
+ <NirField
1366
+ v-model="value"
1367
+ required
1368
+ show-success-messages
1369
+ :custom-locale="{
1370
+ errorRequiredNumber: 'Veuillez renseigner votre numéro de sécurité sociale (13 caractères).',
1371
+ errorInvalidNumber: 'Format NIR non reconnu, merci de vérifier.',
1372
+ errorRequiredKey: 'La clé (2 chiffres) est requise.',
1373
+ errorInvalidKey: 'La clé ne correspond pas au NIR saisi.',
1374
+ successNumberValid: 'Numéro reconnu ✅',
1375
+ successKeyValid: 'Clé correspondante ✅'
1376
+ }"
1377
+ />
1378
+ </template>`,
1379
+ },
1380
+ {
1381
+ name: 'Script',
1382
+ code: `<script setup lang="ts">
1383
+ import { NirField } from '@cnamts/synapse'
1384
+ import { ref } from 'vue'
1385
+
1386
+ const value = ref('')
1387
+ </script>`,
1388
+ },
1389
+ ],
1390
+ },
1391
+ }
@@ -43,6 +43,7 @@
43
43
  disableErrorHandling?: boolean
44
44
  nirType?: 'simple' | 'complexe'
45
45
  withoutFieldset?: boolean
46
+ customLocale?: Partial<Record<keyof typeof locales, string>>
46
47
  }>(), {
47
48
  modelValue: undefined,
48
49
  label: 'Identifiant d\'assuré',
@@ -79,6 +80,14 @@
79
80
  disableErrorHandling: false,
80
81
  nirType: 'simple',
81
82
  withoutFieldset: false,
83
+ customLocale: () => ({
84
+ errorRequiredNumber: locales.errorRequiredNumber,
85
+ errorInvalidNumber: locales.errorInvalidNumber,
86
+ errorRequiredKey: locales.errorRequiredKey,
87
+ errorInvalidKey: locales.errorInvalidKey,
88
+ successNumberValid: locales.successNumberValid,
89
+ successKeyValid: locales.successKeyValid,
90
+ } as Partial<Record<keyof typeof locales, string>>),
82
91
  })
83
92
 
84
93
  const emit = defineEmits(['update:modelValue'])
@@ -199,7 +208,7 @@
199
208
  rules.push({
200
209
  type: 'required',
201
210
  options: {
202
- message: locales.errorRequiredNumber,
211
+ message: props.customLocale.errorRequiredNumber,
203
212
  fieldIdentifier: props.numberLabel,
204
213
  },
205
214
  })
@@ -221,13 +230,13 @@
221
230
  if (!value) return true
222
231
  // Ne valider que si tous les caractères sont saisis
223
232
  if (value.length < 13) {
224
- return locales.erreurInvalidNumber
233
+ return props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
225
234
  }
226
235
  const result = checkNIR(value, props.nirType)
227
- return result === true ? true : locales.erreurInvalidNumber
236
+ return result ? true : props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
228
237
  },
229
- message: locales.erreurInvalidNumber,
230
- successMessage: locales.successNumberValid,
238
+ message: props.customLocale.errorInvalidNumber,
239
+ successMessage: props.customLocale.successNumberValid,
231
240
  fieldIdentifier: props.numberLabel,
232
241
  },
233
242
  })
@@ -250,7 +259,7 @@
250
259
  rules.push({
251
260
  type: 'required',
252
261
  options: {
253
- message: locales.errorRequiredKey,
262
+ message: props.customLocale.errorRequiredKey,
254
263
  fieldIdentifier: props.keyLabel,
255
264
  },
256
265
  })
@@ -274,8 +283,8 @@
274
283
  type: 'custom',
275
284
  options: {
276
285
  validate: validateKey,
277
- message: locales.errorInvalidKey,
278
- successMessage: locales.successKeyValid,
286
+ message: props.customLocale.errorInvalidKey,
287
+ successMessage: props.customLocale.successKeyValid,
279
288
  fieldIdentifier: props.keyLabel,
280
289
  },
281
290
  })
@@ -506,7 +515,23 @@
506
515
  })
507
516
 
508
517
  // Rendre le composant auto-validable dans un SyForm
509
- useValidatable(validateOnSubmit)
518
+ useValidatable(
519
+ validateOnSubmit,
520
+ () => {
521
+ try {
522
+ numberValidation.clearValidation()
523
+ }
524
+ catch {
525
+ void 0
526
+ }
527
+ try {
528
+ keyValidation.clearValidation()
529
+ }
530
+ catch {
531
+ void 0
532
+ }
533
+ },
534
+ )
510
535
 
511
536
  defineExpose({
512
537
  validateOnSubmit,