@cnamts/synapse 1.0.10 → 1.0.12

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 (393) hide show
  1. package/dist/{DateFilter-C0wDuzgn.js → DateFilter-DoCcOfDW.js} +1 -1
  2. package/dist/{NumberFilter-CBj7zdOi.js → NumberFilter-9uR8uo6p.js} +1 -1
  3. package/dist/{PeriodFilter-DB4wWyKy.js → PeriodFilter-CxN5ini7.js} +1 -1
  4. package/dist/{SelectFilter-Dces8572.js → SelectFilter-bfxipgvt.js} +1 -1
  5. package/dist/{TextFilter-BU9nlkuS.js → TextFilter-yCnWcmW2.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +6 -2
  7. package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +11 -0
  8. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +6 -2
  9. package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +9 -0
  10. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +12 -30
  11. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +18 -0
  12. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +9 -0
  13. package/dist/components/Amelipro/AmeliproFooter/locales.d.ts +0 -1
  14. package/dist/components/Amelipro/AmeliproFooter/types.d.ts +1 -0
  15. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +2 -0
  16. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +6 -2
  17. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +8 -4
  18. package/dist/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.d.ts +2 -0
  19. package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +9 -0
  20. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +11 -11
  21. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +13 -0
  22. package/dist/components/Amelipro/AmeliproTable/types.d.ts +11 -0
  23. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +12 -12
  24. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +2 -2
  25. package/dist/components/Amelipro/AmeliproUpload/types.d.ts +10 -0
  26. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +16 -16
  27. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +1 -1
  28. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +6 -6
  29. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
  30. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +52 -16
  31. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +52 -10
  32. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +8 -13
  33. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +2 -1
  34. package/dist/components/DatePicker/tests/setup.d.ts +464 -104
  35. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +6 -6
  36. package/dist/components/LangBtn/LangBtn.d.ts +2 -2
  37. package/dist/components/NirField/NirField.d.ts +10 -8
  38. package/dist/components/PeriodField/PeriodField.d.ts +104 -24
  39. package/dist/components/PhoneField/PhoneField.d.ts +3 -3
  40. package/dist/components/SearchListField/SearchListField.d.ts +13 -4
  41. package/dist/components/SyTextArea/SyTextArea.d.ts +2 -2
  42. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -8
  43. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -8
  44. package/dist/components/Tables/common/SyTablePagination.d.ts +7 -7
  45. package/dist/components/Tables/common/TableHeader.d.ts +6 -0
  46. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
  47. package/dist/components/Tables/common/types.d.ts +11 -0
  48. package/dist/components/Tables/common/usePagination.d.ts +3 -4
  49. package/dist/components/Tables/common/useTableCheckbox.d.ts +10 -6
  50. package/dist/components/Tables/common/useTableHeaders.d.ts +10 -20
  51. package/dist/design-system-v3.js +1 -1
  52. package/dist/design-system-v3.umd.cjs +160 -160
  53. package/dist/main-DMXtXK3y.js +33458 -0
  54. package/dist/style.css +1 -1
  55. package/dist/utils/amelipro/rules/uploadFile/index.d.ts +6 -0
  56. package/dist/utils/amelipro/toKebabCase/toKebabCase.d.ts +1 -0
  57. package/dist/utils/rules/isRequired/index.d.ts +5 -2
  58. package/dist/utils/rules/types.d.ts +12 -3
  59. package/package.json +12 -3
  60. package/src/assets/amelipro/img/bg-pieces-jointe.svg +28 -0
  61. package/src/assets/overrides/_btns.scss +1 -0
  62. package/src/assets/overrides/_forms.scss +7 -0
  63. package/src/components/Accordion/tests/accordion.spec.ts +0 -55
  64. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +7 -4
  65. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.vue +2 -0
  66. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/AmeliproAccordionTemplate.spec.ts +0 -4
  67. package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +0 -4
  68. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +1 -0
  69. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/AmeliproAccordionFrieze.spec.ts +0 -4
  70. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +574 -112
  71. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +0 -4
  72. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +11 -2
  73. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +7 -2
  74. package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +0 -4
  75. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +13 -2
  76. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +6 -3
  77. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +2 -0
  78. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +0 -4
  79. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +0 -4
  80. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +11 -2
  81. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +7 -2
  82. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +0 -4
  83. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +13 -2
  84. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.stories.ts +1 -1
  85. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/AmeliproAutoCompleteField.spec.ts +277 -55
  86. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +113 -233
  87. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +0 -4
  88. package/src/components/Amelipro/AmeliproBreadcrumb/__tests__/AmeliproBreadcrumb.spec.ts +0 -4
  89. package/src/components/Amelipro/AmeliproBtn/__tests__/AmeliproBtn.spec.ts +478 -0
  90. package/src/components/Amelipro/AmeliproBtn/__tests__/__snapshots__/AmeliproBtn.spec.ts.snap +74 -0
  91. package/src/components/Amelipro/AmeliproCallback/__tests__/AmeliproCallback.spec.ts +100 -0
  92. package/src/components/Amelipro/AmeliproCallback/__tests__/__snapshots__/AmeliproCallback.spec.ts.snap +50 -0
  93. package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +0 -4
  94. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +10 -2
  95. package/src/components/Amelipro/AmeliproCard/__tests__/AmeliproCard.spec.ts +402 -0
  96. package/src/components/Amelipro/AmeliproCard/__tests__/__snapshots__/AmeliproCard.spec.ts.snap +106 -0
  97. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +2 -0
  98. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +11 -1
  99. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +0 -4
  100. package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +0 -4
  101. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  102. package/src/components/Amelipro/AmeliproCheckbox/__tests__/AmeliproCheckbox.spec.ts +175 -0
  103. package/src/components/Amelipro/AmeliproCheckbox/__tests__/__snapshots__/AmeliproCheckbox.spec.ts.snap +88 -0
  104. package/src/components/Amelipro/AmeliproCheckboxGroup/__tests__/AmeliproCheckboxGroup.spec.ts +423 -0
  105. package/src/components/Amelipro/AmeliproCheckboxGroup/{tests → __tests__}/__snapshots__/AmeliproCheckboxGroup.spec.ts.snap +112 -78
  106. package/src/components/Amelipro/AmeliproChips/__tests__/AmeliproChips.spec.ts +92 -0
  107. package/src/components/Amelipro/AmeliproChips/__tests__/__snapshots__/AmeliproChips.spec.ts.snap +81 -0
  108. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +0 -4
  109. package/src/components/Amelipro/AmeliproContentLayout/__tests__/AmeliproContentLayout.spec.ts +0 -4
  110. package/src/components/Amelipro/AmeliproCopyBtn/__tests__/AmeliproCopyBtn.spec.ts +0 -4
  111. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +0 -4
  112. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/AmeliproTooth.spec.ts +0 -4
  113. package/src/components/Amelipro/AmeliproDentalChart/tests/AmeliproDentalChart.spec.ts +0 -4
  114. package/src/components/Amelipro/AmeliproDialog/__tests__/AmeliproDialog.spec.ts +257 -0
  115. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +61 -0
  116. package/src/components/Amelipro/AmeliproDisclosure/__tests__/AmeliproDisclosure.spec.ts +79 -0
  117. package/src/components/Amelipro/AmeliproDisclosure/__tests__/__snapshots__/AmeliproDisclosure.spec.ts.snap +89 -0
  118. package/src/components/Amelipro/AmeliproErrorTemplate/__tests__/AmeliproErrorTemplate.spec.ts +0 -4
  119. package/src/components/Amelipro/AmeliproFilePreview/__tests__/AmeliproFilePreview.spec.ts +0 -4
  120. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/AmeliproFirstLogin.spec.ts +0 -2
  121. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +1 -0
  122. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +5 -1
  123. package/src/components/Amelipro/AmeliproFooter/locales.ts +0 -1
  124. package/src/components/Amelipro/AmeliproFooter/tests/AmeliproFooter.spec.ts +0 -4
  125. package/src/components/Amelipro/AmeliproFooter/types.d.ts +1 -0
  126. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.stories.ts +18 -8
  127. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +3 -1
  128. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +3 -0
  129. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +10 -2
  130. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/AmeliproHeaderBrandSection.spec.ts +0 -4
  131. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/tests/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +2 -3
  132. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproLogoAm/tests/AmeliproLogoAm.spec.ts +0 -4
  133. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/AmeliproHeaderBar.spec.ts +0 -4
  134. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/tests/__snapshots__/AmeliproHeaderBar.spec.ts.snap +2 -3
  135. package/src/components/Amelipro/AmeliproHeader/tests/AmeliproHeader.spec.ts +0 -4
  136. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +2 -3
  137. package/src/components/Amelipro/AmeliproIcon/tests/AmeliproIcon.spec.ts +0 -4
  138. package/src/components/Amelipro/AmeliproIconBtn/tests/AmeliproIconBtn.spec.ts +0 -4
  139. package/src/components/Amelipro/AmeliproIllustratedDataTile/tests/AmeliproIllustratedDataTile.spec.ts +0 -4
  140. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/tests/AmeliproIllustratedRadioGroup.spec.ts +0 -4
  141. package/src/components/Amelipro/AmeliproMailTile/tests/AmeliproMailTile.spec.ts +0 -4
  142. package/src/components/Amelipro/AmeliproMenu/tests/AmeliproMenu.spec.ts +0 -2
  143. package/src/components/Amelipro/AmeliproMessage/tests/AmeliproMessage.spec.ts +0 -4
  144. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenuBtn/tests/AmeliproDropdownMenuBtn.spec.ts +0 -4
  145. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/tests/AmeliproDropdownMenu.spec.ts +0 -4
  146. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingMenuBtn/tests/AmeliproMessagingMenuBtn.spec.ts +0 -4
  147. package/src/components/Amelipro/AmeliproMessagingLayout/tests/AmeliproMessagingLayout.spec.ts +0 -4
  148. package/src/components/Amelipro/AmeliproMultipleFoldingCard/tests/AmeliproMultipleFoldingCard.spec.ts +0 -4
  149. package/src/components/Amelipro/AmeliproNumberedCard/tests/AmeliproNumberedCard.spec.ts +0 -4
  150. package/src/components/Amelipro/AmeliproOnboarding/tests/AmeliproOnboarding.spec.ts +0 -4
  151. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.stories.ts +9 -2
  152. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +4 -1
  153. package/src/components/Amelipro/AmeliproPageLayout/tests/AmeliproPageLayout.spec.ts +0 -4
  154. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +2 -3
  155. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/tests/AmeliproPaginationBtn.spec.ts +0 -4
  156. package/src/components/Amelipro/AmeliproPagination/tests/AmeliproPagination.spec.ts +0 -4
  157. package/src/components/Amelipro/AmeliproPatientBanner/tests/AmeliproPatientBanner.spec.ts +0 -4
  158. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/AmeliproPatientLogged.spec.ts +0 -4
  159. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +13 -2
  160. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/__tests__/AmeliproPatientLoginForm.spec.ts +0 -4
  161. package/src/components/Amelipro/AmeliproPatientLogin/__tests__/AmeliproPatientLogin.spec.ts +0 -4
  162. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/AmeliproPostalAddressCityRow.spec.ts +0 -4
  163. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +24 -4
  164. package/src/components/Amelipro/AmeliproPostalAddressField/tests/AmeliproPostalAddressField.spec.ts +0 -4
  165. package/src/components/Amelipro/AmeliproPostalAddressField/tests/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +40 -8
  166. package/src/components/Amelipro/AmeliproRadioGroup/tests/AmeliproRadioGroup.spec.ts +0 -4
  167. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +6 -0
  168. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +5 -1
  169. package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +0 -4
  170. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +13 -2
  171. package/src/components/Amelipro/AmeliproSelect/tests/AmeliproSelect.spec.ts +0 -4
  172. package/src/components/Amelipro/AmeliproSelect/tests/__snapshots__/AmeliproSelect.spec.ts.snap +13 -2
  173. package/src/components/Amelipro/AmeliproStateTile/tests/AmeliproStateTile.spec.ts +0 -4
  174. package/src/components/Amelipro/AmeliproStatus/tests/AmeliproStatus.spec.ts +0 -4
  175. package/src/components/Amelipro/AmeliproStepper/AmeliproStepBtn/tests/AmeliproStepBtn.spec.ts +0 -4
  176. package/src/components/Amelipro/AmeliproStepper/tests/AmeliproStepper.spec.ts +0 -4
  177. package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +87 -9
  178. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +144 -62
  179. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +10 -4
  180. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +374 -189
  181. package/src/components/Amelipro/AmeliproTable/types.d.ts +11 -0
  182. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/tests/AmeliproTabBtn.spec.ts +0 -4
  183. package/src/components/Amelipro/AmeliproTabs/tests/AmeliproTabs.spec.ts +0 -4
  184. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.stories.ts +1 -1
  185. package/src/components/Amelipro/AmeliproTextArea/__tests__/AmeliproTextArea.spec.ts +0 -4
  186. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +10 -2
  187. package/src/components/Amelipro/AmeliproTextField/tests/AmeliproTextField.spec.ts +0 -4
  188. package/src/components/Amelipro/AmeliproTextField/tests/__snapshots__/AmeliproTextField.spec.ts.snap +10 -2
  189. package/src/components/Amelipro/AmeliproTileBtn/tests/AmeliproTileBtn.spec.ts +0 -4
  190. package/src/components/Amelipro/AmeliproTooltips/tests/AmeliproTooltips.spec.ts +0 -4
  191. package/src/components/Amelipro/AmeliproTransmission/tests/AmeliproTransmission.spec.ts +0 -4
  192. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.mdx +38 -0
  193. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.stories.ts +99 -0
  194. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +714 -0
  195. package/src/components/Amelipro/AmeliproUpload/README.md +66 -0
  196. package/src/components/Amelipro/AmeliproUpload/__tests__/AmeliproUpload.spec.ts +74 -0
  197. package/src/components/Amelipro/AmeliproUpload/types.d.ts +10 -0
  198. package/src/components/Amelipro/ServiceMenu/ServiceBtn/tests/ServiceBtn.spec.ts +0 -4
  199. package/src/components/Amelipro/ServiceMenu/ServiceList/tests/ServiceList.spec.ts +0 -4
  200. package/src/components/Amelipro/ServiceMenu/ServiceMenuContent/tests/ServiceMenuContent.spec.ts +0 -4
  201. package/src/components/Amelipro/ServiceMenu/tests/ServiceMenu.spec.ts +0 -4
  202. package/src/components/Amelipro/StructureMenu/StructureBtn/tests/StructureBtn.spec.ts +0 -4
  203. package/src/components/Amelipro/StructureMenu/StructureItem/tests/StructureItem.spec.ts +0 -4
  204. package/src/components/Amelipro/StructureMenu/StructureList/tests/StructureList.spec.ts +0 -4
  205. package/src/components/Amelipro/StructureMenu/StructureTabs/tests/StructureTabs.spec.ts +0 -4
  206. package/src/components/Amelipro/StructureMenu/tests/StructureMenu.spec.ts +0 -2
  207. package/src/components/Amelipro/UserInformationSummary/tests/UserInformationSummary.spec.ts +0 -4
  208. package/src/components/Amelipro/UserMenu/UserMenuDetails/tests/UserMenuDetails.spec.ts +0 -4
  209. package/src/components/Amelipro/UserMenu/tests/UserMenu.spec.ts +0 -4
  210. package/src/components/BackBtn/BackBtn.vue +2 -1
  211. package/src/components/BackBtn/tests/BackBtn.spec.ts +1 -23
  212. package/src/components/BackToTopBtn/tests/BackToTopBtn.spec.ts +3 -34
  213. package/src/components/ChipList/tests/chipList.spec.ts +0 -38
  214. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +0 -8
  215. package/src/components/ContextualMenu/tests/ContextualMenu.spec.ts +0 -28
  216. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +1 -11
  217. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +0 -16
  218. package/src/components/CookiesSelection/CookiesTable/tests/CookiesTable.spec.ts +0 -4
  219. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +0 -16
  220. package/src/components/CopyBtn/tests/CopyBtn.spec.ts +0 -31
  221. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +1 -0
  222. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +3 -37
  223. package/src/components/Customs/Selects/SyBtnSelect/tests/SyBtnSelect.spec.ts +0 -28
  224. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +8 -104
  225. package/src/components/Customs/Selects/SySelect/SySelect.vue +2 -2
  226. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +0 -135
  227. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +1 -1
  228. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +1 -1
  229. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +0 -20
  230. package/src/components/Customs/SyForm/SyForm.mdx +1 -3
  231. package/src/components/Customs/SyForm/SyForm.stories.ts +131 -143
  232. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +0 -2
  233. package/src/components/Customs/SyTextField/SyTextField.vue +27 -5
  234. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +1 -27
  235. package/src/components/DataList/DataListLoading/tests/DataListLoading.spec.ts +0 -4
  236. package/src/components/DataList/tests/DataList.spec.ts +0 -26
  237. package/src/components/DataListGroup/tests/DataListGroup.spec.ts +0 -10
  238. package/src/components/DataListItem/tests/DataListItem.spec.ts +0 -28
  239. package/src/components/DatePicker/CalendarMode/DatePicker.vue +31 -8
  240. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -16
  241. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +4 -34
  242. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +44 -12
  243. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +0 -10
  244. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +2 -2
  245. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +0 -13
  246. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +0 -10
  247. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +0 -52
  248. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +7 -1
  249. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +107 -72
  250. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +6 -6
  251. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +57 -7
  252. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +14 -14
  253. package/src/components/DatePicker/tests/DatePicker.validation.spec.ts +0 -543
  254. package/src/components/DatePicker/tests/navigation.regression.spec.ts +74 -0
  255. package/src/components/DatePicker/tests/navigation.simple.spec.ts +137 -0
  256. package/src/components/DiacriticPicker/tests/DiatriticPicker.spec.ts +0 -6
  257. package/src/components/DialogBox/tests/DialogBox.spec.ts +0 -63
  258. package/src/components/DownloadBtn/tests/DownloadBtn.spec.ts +0 -7
  259. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +0 -7
  260. package/src/components/ExternalLinks/tests/ExternalLinks.spec.ts +0 -16
  261. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +1 -0
  262. package/src/components/FileList/tests/FileList.spec.ts +0 -13
  263. package/src/components/FilePreview/tests/FilePreview.spec.ts +1 -6
  264. package/src/components/FileUpload/tests/FileUpload.spec.ts +1 -48
  265. package/src/components/FilterInline/tests/FilterInline.spec.ts +0 -10
  266. package/src/components/FilterSideBar/FilterSideBar.stories.ts +2 -0
  267. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +0 -10
  268. package/src/components/FooterBar/tests/FooterBar.spec.ts +7 -19
  269. package/src/components/FranceConnectBtn/tests/FranceConnectBtn.spec.ts +0 -11
  270. package/src/components/HeaderBar/HeaderBar.stories.ts +37 -38
  271. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/tests/HeaderSubMenu.spec.ts +0 -6
  272. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +0 -6
  273. package/src/components/HeaderBar/HeaderBurgerMenu/tests/useHandleSubMenus.spec.ts +0 -13
  274. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +1 -22
  275. package/src/components/HeaderBar/HeaderMenuBtn/tests/HeaderMenuBtn.spec.ts +0 -10
  276. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +0 -16
  277. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +0 -4
  278. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +22 -15
  279. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +0 -4
  280. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +7 -51
  281. package/src/components/LangBtn/tests/LangBtn.spec.ts +0 -56
  282. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +22 -67
  283. package/src/components/NirField/NirField.stories.ts +13 -2
  284. package/src/components/NirField/NirField.vue +69 -34
  285. package/src/components/NirField/tests/NirField.cursor.spec.ts +315 -0
  286. package/src/components/NirField/tests/NirField.spec.ts +215 -17
  287. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +2 -12
  288. package/src/components/NotificationBar/NotificationBar.mdx +1 -1
  289. package/src/components/NotificationBar/NotificationBar.stories.ts +1 -0
  290. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +5 -44
  291. package/src/components/PageContainer/tests/PageContainer.spec.ts +1 -15
  292. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -23
  293. package/src/components/PasswordField/tests/PasswordField.spec.ts +4 -38
  294. package/src/components/PeriodField/tests/PeriodField.spec.ts +4 -74
  295. package/src/components/PhoneField/tests/PhoneField.spec.ts +3 -154
  296. package/src/components/RangeField/RangeSlider/tests/rangeSlider.spec.ts +0 -13
  297. package/src/components/RangeField/RangeSlider/tests/useThumbKeyboard.spec.ts +0 -34
  298. package/src/components/RangeField/RangeSlider/tests/useTrack.spec.ts +4 -24
  299. package/src/components/RangeField/tests/RangeField.spec.ts +0 -34
  300. package/src/components/RatingPicker/EmotionPicker/tests/EmotionPicker.spec.ts +2 -23
  301. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -17
  302. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +3 -22
  303. package/src/components/RatingPicker/tests/Rating.spec.ts +0 -10
  304. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +0 -23
  305. package/src/components/SearchListField/SearchListField.mdx +3 -4
  306. package/src/components/SearchListField/SearchListField.stories.ts +103 -3
  307. package/src/components/SearchListField/SearchListField.vue +34 -9
  308. package/src/components/SearchListField/tests/SearchListField.spec.ts +98 -44
  309. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +0 -32
  310. package/src/components/SubHeader/tests/SubHeader.spec.ts +0 -18
  311. package/src/components/SyAlert/tests/SyAlert.spec.ts +0 -14
  312. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -31
  313. package/src/components/TableToolbar/tests/TableToolbar.spec.ts +0 -31
  314. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +72 -24
  315. package/src/components/Tables/SyServerTable/SyServerTable.mdx +15 -0
  316. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +309 -0
  317. package/src/components/Tables/SyServerTable/SyServerTable.vue +33 -6
  318. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -58
  319. package/src/components/Tables/SyTable/SyTable.mdx +15 -0
  320. package/src/components/Tables/SyTable/SyTable.stories.ts +228 -0
  321. package/src/components/Tables/SyTable/SyTable.vue +48 -10
  322. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +63 -55
  323. package/src/components/Tables/common/SyTablePagination.vue +11 -9
  324. package/src/components/Tables/common/TableHeader.vue +57 -2
  325. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +0 -11
  326. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +0 -11
  327. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +0 -11
  328. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +0 -11
  329. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +0 -11
  330. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +0 -31
  331. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +0 -49
  332. package/src/components/Tables/common/tests/TableHeader.spec.ts +0 -19
  333. package/src/components/Tables/common/tests/filterByRange.spec.ts +0 -13
  334. package/src/components/Tables/common/tests/resize.spec.ts +0 -13
  335. package/src/components/Tables/common/types.ts +11 -0
  336. package/src/components/Tables/common/usePagination.ts +11 -20
  337. package/src/components/Tables/common/useStoredOptions.ts +1 -1
  338. package/src/components/Tables/common/useTableCheckbox.ts +23 -11
  339. package/src/components/Tables/common/useTableHeaders.ts +73 -6
  340. package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +0 -19
  341. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +0 -15
  342. package/src/components/Usages/tests/Usages.spec.ts +3 -31
  343. package/src/components/UserMenuBtn/tests/UserMenuBtn.spec.ts +0 -31
  344. package/src/composables/useFilterable/useFilterable.ts +33 -24
  345. package/src/composables/validation/{AvecVosComposants.mdx → AvecVosComposants.mdx.old} +1 -1
  346. package/src/composables/validation/{FormValidation.stories.ts → FormValidation.stories.ts.old} +5 -5
  347. package/src/stories/Accessibilite/Introduction.mdx +1 -1
  348. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +43 -0
  349. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +239 -0
  350. package/src/stories/Demarrer/SignalerUneAnomalie.mdx +39 -0
  351. package/src/stories/Demarrer/SignalerUneAnomalie.stories.ts +261 -0
  352. package/src/stories/GuideDuDev/FormValidationGuide.mdx +746 -114
  353. package/src/stories/GuideDuDev/UtiliserLesRules.mdx +138 -136
  354. package/src/utils/amelipro/rules/uploadFile/index.ts +119 -0
  355. package/src/utils/amelipro/rules/uploadFile/tests/uploadFile.spec.ts +55 -0
  356. package/src/utils/amelipro/toKebabCase/toKebabCase.ts +11 -0
  357. package/src/utils/rules/doMatchPattern/index.ts +1 -1
  358. package/src/utils/rules/isDateValid/index.ts +1 -1
  359. package/src/utils/rules/isExactLength/index.ts +4 -0
  360. package/src/utils/rules/isHolidayDay/index.ts +1 -1
  361. package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +24 -14
  362. package/src/utils/rules/isMaxLength/index.ts +4 -0
  363. package/src/utils/rules/isMinLength/index.ts +4 -0
  364. package/src/utils/rules/isNotAfterDate/index.ts +4 -0
  365. package/src/utils/rules/isNotAfterToday/index.ts +1 -1
  366. package/src/utils/rules/isNotBeforeDate/index.ts +4 -0
  367. package/src/utils/rules/isNotBeforeToday/index.ts +1 -1
  368. package/src/utils/rules/isRequired/index.ts +11 -5
  369. package/src/utils/rules/isRequired/tests/{isRequred.spec.ts → isRequired.spec.ts} +24 -0
  370. package/src/utils/rules/isValidEmail/index.ts +1 -1
  371. package/src/utils/rules/types.d.ts +12 -3
  372. package/dist/main-Dt4iNotT.js +0 -33147
  373. package/src/components/Amelipro/AmeliproBtn/tests/AmeliproBtn.spec.ts +0 -22
  374. package/src/components/Amelipro/AmeliproBtn/tests/__snapshots__/AmeliproBtn.spec.ts.snap +0 -46
  375. package/src/components/Amelipro/AmeliproCallback/tests/AmeliproCallback.spec.ts +0 -21
  376. package/src/components/Amelipro/AmeliproCallback/tests/__snapshots__/AmeliproCallback.spec.ts.snap +0 -165
  377. package/src/components/Amelipro/AmeliproCard/tests/AmeliproCard.spec.ts +0 -23
  378. package/src/components/Amelipro/AmeliproCard/tests/__snapshots__/AmeliproCard.spec.ts.snap +0 -78
  379. package/src/components/Amelipro/AmeliproCheckbox/tests/AmeliproCheckbox.spec.ts +0 -23
  380. package/src/components/Amelipro/AmeliproCheckbox/tests/__snapshots__/AmeliproCheckbox.spec.ts.snap +0 -40
  381. package/src/components/Amelipro/AmeliproCheckboxGroup/tests/AmeliproCheckboxGroup.spec.ts +0 -50
  382. package/src/components/Amelipro/AmeliproChips/tests/AmeliproChips.spec.ts +0 -20
  383. package/src/components/Amelipro/AmeliproChips/tests/__snapshots__/AmeliproChips.spec.ts.snap +0 -97
  384. package/src/components/Amelipro/AmeliproDialog/tests/AmeliproDialog.spec.ts +0 -26
  385. package/src/components/Amelipro/AmeliproDialog/tests/__snapshots__/AmeliproDialog.spec.ts.snap +0 -134
  386. package/src/components/Amelipro/AmeliproDisclosure/tests/AmeliproDisclosure.spec.ts +0 -23
  387. package/src/components/Amelipro/AmeliproDisclosure/tests/__snapshots__/AmeliproDisclosure.spec.ts.snap +0 -104
  388. package/src/components/BackBtn/tests/__snapshots__/BackBtn.spec.ts.snap +0 -45
  389. package/src/components/DialogBox/tests/__snapshots__/DialogBox.spec.ts.snap +0 -204
  390. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +0 -1222
  391. package/src/stories/Demarrer/CreerUneIssue.mdx +0 -67
  392. package/src/stories/Demarrer/components.stories.ts +0 -25
  393. /package/src/composables/validation/{FormValidation.mdx → FormValidation.mdx.old} +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
- import { ref } from 'vue'
2
+ import { ref, computed } from 'vue'
3
3
  import SyForm from './SyForm.vue'
4
4
  import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
5
5
  import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
@@ -33,9 +33,17 @@ export const Basic: Story = {
33
33
  setup() {
34
34
  const name = ref('')
35
35
  const email = ref('')
36
+ const form = ref<{ validate: () => Promise<boolean> } | null>(null)
36
37
 
37
- const onSubmit = (event: { isValid: boolean }) => {
38
- if (event.isValid) {
38
+ // Règles de validation selon le design system
39
+ const emailRules = [
40
+ { type: 'email', options: { message: 'Format d\'email invalide' } },
41
+ { type: 'required', options: { message: 'L\'email est obligatoire' } },
42
+ ]
43
+
44
+ const submitForm = async () => {
45
+ const isValid = await form.value?.validate()
46
+ if (isValid) {
39
47
  alert('Formulaire valide !')
40
48
  }
41
49
  else {
@@ -43,13 +51,13 @@ export const Basic: Story = {
43
51
  }
44
52
  }
45
53
 
46
- return { name, email, onSubmit, args }
54
+ return { name, email, emailRules, form, submitForm, args }
47
55
  },
48
56
  template: `
49
- <SyForm v-bind="args" @submit="onSubmit">
57
+ <SyForm ref="form" v-bind="args" @submit="submitForm">
50
58
  <div class="d-flex flex-column gap-4">
51
59
  <SyTextField v-model="name" label="Nom" required />
52
- <SyTextField v-model="email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
60
+ <SyTextField v-model="email" label="Email" :custom-rules="emailRules" />
53
61
  <v-btn type="submit" color="primary">Soumettre</v-btn>
54
62
  </div>
55
63
  </SyForm>
@@ -64,13 +72,13 @@ export const Basic: Story = {
64
72
  name: 'Template',
65
73
  code: `
66
74
  <template>
67
- <SyForm @submit="onSubmit">
68
- <div class="d-flex flex-column gap-4">
69
- <SyTextField v-model="name" label="Nom" required />
70
- <SyTextField v-model="email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
71
- <v-btn type="submit" color="primary">Soumettre</v-btn>
72
- </div>
73
- </SyForm>
75
+ <SyForm ref="form" v-bind="args" @submit="submitForm">
76
+ <div class="d-flex flex-column gap-4">
77
+ <SyTextField v-model="name" label="Nom" required />
78
+ <SyTextField v-model="email" label="Email" :custom-rules="emailRules" />
79
+ <v-btn type="submit" color="primary">Soumettre</v-btn>
80
+ </div>
81
+ </SyForm>
74
82
  </template>
75
83
  `,
76
84
  },
@@ -78,13 +86,16 @@ export const Basic: Story = {
78
86
  name: 'Script',
79
87
  code: `
80
88
  <script setup lang="ts">
81
- import { ref } from 'vue'
82
- import SyForm from '@cnamts/synapse'
83
- import SyTextField from '@cnamts/synapse'
84
89
 
85
90
  const name = ref('')
86
91
  const email = ref('')
87
92
 
93
+ // Règles de validation selon le design system
94
+ const emailRules = [
95
+ { type: 'email', options: { message: "Format d'email invalide" } },
96
+ { type: 'required', options: { message: "L'email est obligatoire" } },
97
+ ]
98
+
88
99
  const onSubmit = (event: { isValid: boolean }) => {
89
100
  if (event.isValid) {
90
101
  alert('Formulaire valide !')
@@ -107,45 +118,56 @@ export const CustomValidation: Story = {
107
118
  const username = ref('')
108
119
  const password = ref('')
109
120
  const confirmPassword = ref('')
121
+ const form = ref<{ validate: () => Promise<boolean> } | null>(null)
110
122
 
111
- const validatePasswordMatch = () => {
112
- return password.value === confirmPassword.value || 'Les mots de passe ne correspondent pas'
113
- }
123
+ // Règles de validation
124
+ const passwordRules = computed(() => [
125
+ { type: 'minLength', options: { length: 8, message: 'Minimum 8 caractères' } },
126
+ { type: 'required', options: { message: 'Le mot de passe est obligatoire' } },
127
+ ])
114
128
 
115
- const onSubmit = (event: { isValid: boolean }) => {
116
- if (event.isValid) {
129
+ const confirmPasswordRules = computed(() => [
130
+ { type: 'custom', options: {
131
+ validate: value => value === password.value || 'Les mots de passe ne correspondent pas',
132
+ message: 'Les mots de passe ne correspondent pas',
133
+ } },
134
+ { type: 'required', options: { message: 'Veuillez confirmer le mot de passe' } },
135
+ ])
136
+
137
+ const submitForm = async () => {
138
+ const isValid = await form.value?.validate()
139
+ if (isValid) {
117
140
  alert('Inscription réussie !')
118
141
  }
142
+ else {
143
+ alert('Formulaire invalide, veuillez corriger les erreurs.')
144
+ }
119
145
  }
120
146
 
121
- // Utilisez un type pour form.value avec une propriété validate
122
- interface FormRef {
123
- validate: () => Promise<boolean>
124
- }
125
-
126
- const form = ref<FormRef | null>(null)
127
- const validateManually = () => {
128
- if (form.value && form.value.validate) {
129
- form.value.validate().then((isValid: boolean) => {
130
- alert(isValid ? 'Formulaire valide !' : 'Formulaire invalide !')
131
- })
147
+ const validateManually = async () => {
148
+ const isValid = await form.value?.validate()
149
+ if (isValid) {
150
+ alert('Formulaire valide !')
151
+ }
152
+ else {
153
+ alert('Formulaire invalide !')
132
154
  }
133
155
  }
134
156
 
135
- return { username, password, confirmPassword, validatePasswordMatch, onSubmit, form, validateManually, args }
157
+ return { username, password, confirmPassword, passwordRules, confirmPasswordRules, form, submitForm, validateManually, args }
136
158
  },
137
159
  template: `
138
160
  <div>
139
- <SyForm ref="form" v-bind="args" @submit="onSubmit">
161
+ <SyForm ref="form" v-bind="args" @submit="submitForm">
140
162
  <div class="d-flex flex-column gap-4">
141
163
  <SyTextField v-model="username" label="Nom d'utilisateur" required />
142
- <SyTextField v-model="password" label="Mot de passe" type="password" required :rules="[v => v.length >= 8 || 'Minimum 8 caractères']" />
164
+ <SyTextField v-model="password" label="Mot de passe" type="password" :custom-rules="passwordRules" />
143
165
  <SyTextField
144
166
  v-model="confirmPassword"
145
167
  label="Confirmer le mot de passe"
146
168
  type="password"
147
169
  required
148
- :rules="[validatePasswordMatch]"
170
+ :custom-rules="confirmPasswordRules"
149
171
  />
150
172
  <div class="d-flex gap-3">
151
173
  <v-btn type="submit" color="primary">S'inscrire</v-btn>
@@ -166,13 +188,12 @@ export const CustomValidation: Story = {
166
188
  <SyForm ref="form" @submit="onSubmit">
167
189
  <div class="d-flex flex-column gap-4">
168
190
  <SyTextField v-model="username" label="Nom d'utilisateur" required />
169
- <SyTextField v-model="password" label="Mot de passe" type="password" required :rules="[v => v.length >= 8 || 'Minimum 8 caractères']" />
191
+ <SyTextField v-model="password" label="Mot de passe" type="password" :custom-rules="passwordRules" />
170
192
  <SyTextField
171
193
  v-model="confirmPassword"
172
194
  label="Confirmer le mot de passe"
173
195
  type="password"
174
- required
175
- :rules="[validatePasswordMatch]"
196
+ :custom-rules="confirmPasswordRules"
176
197
  />
177
198
  <div class="d-flex gap-3">
178
199
  <v-btn type="submit" color="primary">S'inscrire</v-btn>
@@ -188,15 +209,26 @@ export const CustomValidation: Story = {
188
209
  name: 'Script',
189
210
  code: `
190
211
  <script setup lang="ts">
191
- import { ref } from 'vue'
192
- import SyForm from '@cnamts/synapse'
193
- import SyTextField from '@cnamts/synapse'
212
+ import { ref, computed } from 'vue'
194
213
 
195
214
  const username = ref('')
196
215
  const password = ref('')
197
216
  const confirmPassword = ref('')
198
217
  const form = ref(null)
199
218
 
219
+ const passwordRules = computed(() => [
220
+ { type: 'minLength', options: { length: 8, message: 'Minimum 8 caractères' } },
221
+ { type: 'required', options: { message: 'Le mot de passe est obligatoire' } },
222
+ ])
223
+
224
+ const confirmPasswordRules = computed(() => [
225
+ { type: 'custom', options: {
226
+ validate: value => value === password.value || 'Les mots de passe ne correspondent pas',
227
+ message: 'Les mots de passe ne correspondent pas',
228
+ } },
229
+ { type: 'required', options: { message: 'Veuillez confirmer le mot de passe' } },
230
+ ])
231
+
200
232
  const validatePasswordMatch = () => {
201
233
  return password.value === confirmPassword.value || 'Les mots de passe ne correspondent pas'
202
234
  }
@@ -227,8 +259,20 @@ export const MixedFields: Story = {
227
259
  name: '',
228
260
  email: '',
229
261
  country: '',
230
- subscribe: false,
231
262
  })
263
+ const form = ref<{ validate: () => Promise<boolean> } | null>(null)
264
+
265
+ // Règles de validation
266
+ const emailCustomRules = [
267
+ {
268
+ type: 'email',
269
+ options: {
270
+ message: 'L\'email n\'est pas valide',
271
+ successMessage: 'L\'email est valide',
272
+ },
273
+ },
274
+ { type: 'required', options: { message: 'L\'email est obligatoire' } },
275
+ ]
232
276
 
233
277
  const countries = [
234
278
  { text: 'France', value: 'fr' },
@@ -237,21 +281,24 @@ export const MixedFields: Story = {
237
281
  { text: 'Italie', value: 'it' },
238
282
  ]
239
283
 
240
- const onSubmit = (event: { isValid: boolean }) => {
241
- if (event.isValid) {
284
+ const submitForm = async () => {
285
+ const isValid = await form.value?.validate()
286
+ if (isValid) {
242
287
  alert(`Formulaire valide ! Données: ${JSON.stringify(formData.value)}`)
243
288
  }
289
+ else {
290
+ alert('Formulaire invalide, veuillez corriger les erreurs.')
291
+ }
244
292
  }
245
293
 
246
- return { formData, countries, onSubmit, args }
294
+ return { formData, countries, form, submitForm, emailCustomRules, args }
247
295
  },
248
296
  template: `
249
- <SyForm v-bind="args" @submit="onSubmit">
297
+ <SyForm ref="form" v-bind="args" @submit="submitForm">
250
298
  <div class="d-flex flex-column gap-4">
251
299
  <SyTextField v-model="formData.name" label="Nom complet" required />
252
- <SyTextField v-model="formData.email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
300
+ <SyTextField v-model="formData.email" label="Email" :custom-rules="emailCustomRules" />
253
301
  <SySelect v-model="formData.country" :items="countries" label="Pays" required />
254
- <SyCheckbox v-model="formData.subscribe" label="S'abonner à la newsletter" />
255
302
  <v-btn type="submit" color="primary">Enregistrer</v-btn>
256
303
  </div>
257
304
  </SyForm>
@@ -263,111 +310,52 @@ export const MixedFields: Story = {
263
310
  name: 'Template',
264
311
  code: `
265
312
  <template>
266
- <SyForm @submit="onSubmit">
267
- <div class="d-flex flex-column gap-4">
268
- <SyTextField v-model="formData.name" label="Nom complet" required />
269
- <SyTextField v-model="formData.email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
270
- <SySelect v-model="formData.country" :items="countries" label="Pays" required />
271
- <SyCheckbox v-model="formData.subscribe" label="S'abonner à la newsletter" />
272
- <v-btn type="submit" color="primary">Enregistrer</v-btn>
273
- </div>
274
- </SyForm>
275
- </template>
276
- `,
277
- },
278
- {
279
- name: 'Script',
280
- code: `
281
- <script setup lang="ts">
282
- import { ref } from 'vue'
283
- import SyForm from '@cnamts/synapse'
284
- import SyTextField from '@cnamts/synapse'
285
- import SySelect from '@/components/Customs/Selects/SySelect/SySelect.vue'
286
- import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
287
-
288
- const formData = ref({
289
- name: '',
290
- email: '',
291
- country: '',
292
- subscribe: false,
293
- })
294
-
295
- const countries = [
296
- { text: 'France', value: 'fr' },
297
- { text: 'Allemagne', value: 'de' },
298
- { text: 'Espagne', value: 'es' },
299
- { text: 'Italie', value: 'it' },
300
- ]
301
-
302
- const onSubmit = (event: { isValid: boolean }) => {
303
- if (event.isValid) {
304
- alert('Formulaire valide ! Données: ' + JSON.stringify(formData.value))
305
- }
306
- }
307
- </script>
308
- `,
309
- },
310
- ],
311
- },
312
- }
313
-
314
- export const WithoutAutoValidation: Story = {
315
- render: args => ({
316
- components: { SyForm, SyTextField, VBtn },
317
- setup() {
318
- const name = ref('')
319
- const email = ref('')
320
-
321
- const onSubmit = () => {
322
- alert(`Soumission du formulaire sans validation automatique. Vous devez gérer la validation manuellement.`)
323
- }
324
-
325
- return { name, email, onSubmit, args }
326
- },
327
- template: `
328
- <SyForm v-bind="args" @submit="onSubmit">
313
+ <SyForm ref="form" v-bind="args" @submit="submitForm">
329
314
  <div class="d-flex flex-column gap-4">
330
- <SyTextField v-model="name" label="Nom" required />
331
- <SyTextField v-model="email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
332
- <v-btn type="submit" color="primary">Soumettre</v-btn>
315
+ <SyTextField v-model="formData.name" label="Nom complet" required />
316
+ <SyTextField v-model="formData.email" label="Email" :customRules="emailCustomRules" />
317
+ <SySelect v-model="formData.country" :items="countries" label="Pays" required />
318
+ <v-btn type="submit" color="primary">Enregistrer</v-btn>
333
319
  </div>
334
320
  </SyForm>
335
- `,
336
- }),
337
- args: {
338
- validateOnSubmit: false,
339
- },
340
- parameters: {
341
- sourceCode: [
342
- {
343
- name: 'Template',
344
- code: `
345
- <template>
346
- <SyForm :validate-on-submit="false" @submit="onSubmit">
347
- <div class="d-flex flex-column gap-4">
348
- <SyTextField v-model="name" label="Nom" required />
349
- <SyTextField v-model="email" label="Email" required :rules="[v => /.+@.+/.test(v) || 'E-mail invalide']" />
350
- <v-btn type="submit" color="primary">Soumettre</v-btn>
351
- </div>
352
- </SyForm>
353
321
  </template>
354
322
  `,
355
323
  },
356
324
  {
357
325
  name: 'Script',
358
326
  code: `
359
- <script setup lang="ts">
360
- import { ref } from 'vue'
361
- import SyForm from '@cnamts/synapse'
362
- import SyTextField from '@cnamts/synapse'
327
+ <script setup lang="ts">
363
328
 
364
- const name = ref('')
365
- const email = ref('')
329
+ const formData = ref({
330
+ name: '',
331
+ email: '',
332
+ country: '',
333
+ })
366
334
 
367
- const onSubmit = () => {
368
- alert('Soumission du formulaire sans validation automatique. Vous devez gérer la validation manuellement.')
369
- }
370
- </script>
335
+ const countries = [
336
+ { text: 'France', value: 'fr' },
337
+ { text: 'Allemagne', value: 'de' },
338
+ { text: 'Espagne', value: 'es' },
339
+ { text: 'Italie', value: 'it' },
340
+ ]
341
+
342
+ const emailCustomRules = [
343
+ {
344
+ type: 'email',
345
+ options: {
346
+ message: "L'email n'est pas valide:",
347
+ successMessage: "L'email est valide:",
348
+ },
349
+ },
350
+ { type: 'required', options: { message: "L'email est obligatoire" } },
351
+ ]
352
+
353
+ const onSubmit = (event: { isValid: boolean }) => {
354
+ if (event.isValid) {
355
+ alert('Formulaire valide ! Données: ' + JSON.stringify(formData.value))
356
+ }
357
+ }
358
+ </script>
371
359
  `,
372
360
  },
373
361
  ],
@@ -2,7 +2,6 @@ import { describe, it, expect, vi } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
3
  import { nextTick } from 'vue'
4
4
  import SyTabs from '@/components/Customs/SyTabs/SyTabs.vue'
5
- import { vuetify } from '@tests/unit/setup'
6
5
 
7
6
  // Mock RouterLink component
8
7
  const RouterLink = {
@@ -25,7 +24,6 @@ describe('SyTabs', () => {
25
24
  items: testItems,
26
25
  },
27
26
  global: {
28
- plugins: [vuetify],
29
27
  // Mock vue-router and provide RouterLink component
30
28
  components: {
31
29
  RouterLink,
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- // Prevent display-asterisk from being passed to the DOM
2
+ // Prevent display-asterisk from being passed to the DOM
3
3
  defineOptions({
4
4
  inheritAttrs: false,
5
5
  })
@@ -8,7 +8,7 @@
8
8
  mdiCheck,
9
9
  mdiInformationOutline,
10
10
  mdiClose,
11
- mdiInformation,
11
+ mdiAlertCircle,
12
12
  mdiCalendar,
13
13
  } from '@mdi/js'
14
14
  import { computed, onMounted, ref, watch, nextTick, type ComponentPublicInstance } from 'vue'
@@ -166,7 +166,7 @@
166
166
  info: mdiInformationOutline,
167
167
  success: mdiCheck,
168
168
  warning: mdiAlertOutline,
169
- error: mdiInformation,
169
+ error: mdiAlertCircle,
170
170
  close: mdiClose,
171
171
  calendar: mdiCalendar,
172
172
  }
@@ -189,6 +189,16 @@
189
189
 
190
190
  const isBlurred = ref(false)
191
191
 
192
+ const showClear = computed(() => {
193
+ if (!props.isClearable) return false
194
+ if (props.readonly || props.disabled) return false
195
+ return model.value !== undefined && model.value !== null && String(model.value) !== '' && String(model.value) !== '__/__/____'
196
+ })
197
+
198
+ const clearField = () => {
199
+ model.value = ''
200
+ }
201
+
192
202
  // Initialisation du composable de validation
193
203
  const validation = useValidation({
194
204
  customRules: props.customRules,
@@ -549,8 +559,6 @@
549
559
  :base-color="props.baseColor"
550
560
  :bg-color="props.bgColor"
551
561
  :center-affix="props.centerAffix"
552
- :clear-icon="ICONS.close"
553
- :clearable="props.isClearable"
554
562
  :color="props.color"
555
563
  :counter-value="props.counterValue"
556
564
  :density="props.density"
@@ -695,6 +703,16 @@
695
703
  <!-- Append inner -->
696
704
  <template #append-inner>
697
705
  <slot name="append-inner">
706
+ <!-- Keyboard-focusable clear button -->
707
+ <VBtn
708
+ v-if="showClear"
709
+ class="v-btn v-btn--density-compact mr-1"
710
+ :aria-label="props.label ? `Vider ${props.label}` : 'Vider'"
711
+ :title="props.label ? `Vider ${props.label}` : 'Vider'"
712
+ :icon="mdiClose"
713
+ variant="text"
714
+ @click="clearField"
715
+ />
698
716
  <SyIcon
699
717
  v-if="validationIcon && !props.appendInnerIcon"
700
718
  :icon="validationIcon"
@@ -788,6 +806,10 @@
788
806
  opacity: 1 !important;
789
807
  }
790
808
 
809
+ :deep(.v-icon__svg) {
810
+ fill: tokens.$colors-text-success !important;
811
+ }
812
+
791
813
  :deep(.v-field) {
792
814
  color: tokens.$colors-border-success !important;
793
815
 
@@ -1,26 +1,15 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
- import { createVuetify } from 'vuetify'
4
- import * as components from 'vuetify/components'
5
- import * as directives from 'vuetify/directives'
6
3
  import { VIcon } from 'vuetify/components'
7
4
 
8
5
  import SyTextField from '../SyTextField.vue'
9
6
  import type { IconType } from '../types'
10
7
 
11
- const vuetify = createVuetify({
12
- components,
13
- directives,
14
- })
15
-
16
8
  describe('SyTextField.vue', () => {
17
9
  let wrapper: ReturnType<typeof mount<typeof SyTextField>>
18
10
 
19
11
  beforeEach(() => {
20
12
  wrapper = mount(SyTextField, {
21
- global: {
22
- plugins: [vuetify],
23
- },
24
13
  props: {
25
14
  modelValue: undefined,
26
15
  required: true,
@@ -37,7 +26,6 @@ describe('SyTextField.vue', () => {
37
26
 
38
27
  it('applies the correct variant style', () => {
39
28
  wrapper = mount(SyTextField, {
40
- global: { plugins: [vuetify] },
41
29
  props: { variantStyle: 'filled' },
42
30
  })
43
31
  const textField = wrapper.findComponent({ name: 'VTextField' })
@@ -46,7 +34,6 @@ describe('SyTextField.vue', () => {
46
34
 
47
35
  it('renders default slots correctly', () => {
48
36
  wrapper = mount(SyTextField, {
49
- global: { plugins: [vuetify] },
50
37
  slots: {
51
38
  prepend: '<div data-testid="prepend-slot">Prepend Slot Content</div>',
52
39
  append: '<div data-testid="append-slot">Append Slot Content</div>',
@@ -62,7 +49,6 @@ describe('SyTextField.vue', () => {
62
49
 
63
50
  it('renders inner slots correctly', () => {
64
51
  wrapper = mount(SyTextField, {
65
- global: { plugins: [vuetify] },
66
52
  slots: {
67
53
  'prepend-inner': '<div data-testid="prepend-inner-slot">Prepend Inner Slot Content</div>',
68
54
  'append-inner': '<div data-testid="append-inner-slot">Append Inner Slot Content</div>',
@@ -80,7 +66,6 @@ describe('SyTextField.vue', () => {
80
66
 
81
67
  it('should update icon when validation state changes', async () => {
82
68
  wrapper = mount(SyTextField, {
83
- global: { plugins: [vuetify] },
84
69
  props: { appendInnerIcon: 'success' as IconType },
85
70
  })
86
71
  expect(wrapper.props('appendInnerIcon')).toBe('success')
@@ -88,7 +73,6 @@ describe('SyTextField.vue', () => {
88
73
 
89
74
  it('should update icon when validation state changes with warning', async () => {
90
75
  wrapper = mount(SyTextField, {
91
- global: { plugins: [vuetify] },
92
76
  props: { appendInnerIcon: 'warning' as IconType },
93
77
  })
94
78
  expect(wrapper.props('appendInnerIcon')).toBe('warning')
@@ -96,7 +80,6 @@ describe('SyTextField.vue', () => {
96
80
 
97
81
  it('should update icon when validation state changes with error', async () => {
98
82
  wrapper = mount(SyTextField, {
99
- global: { plugins: [vuetify] },
100
83
  props: { appendInnerIcon: 'error' as IconType },
101
84
  })
102
85
  expect(wrapper.props('appendInnerIcon')).toBe('error')
@@ -104,7 +87,6 @@ describe('SyTextField.vue', () => {
104
87
 
105
88
  it('should update icon when validation state changes with success', async () => {
106
89
  wrapper = mount(SyTextField, {
107
- global: { plugins: [vuetify] },
108
90
  props: { appendInnerIcon: 'success' as IconType },
109
91
  })
110
92
  expect(wrapper.props('appendInnerIcon')).toBe('success')
@@ -112,7 +94,6 @@ describe('SyTextField.vue', () => {
112
94
 
113
95
  it('emits prepend-icon-click event when prepend icon is clicked', async () => {
114
96
  const wrapper = mount(SyTextField, {
115
- global: { plugins: [vuetify] },
116
97
  props: { prependIcon: 'info' as IconType },
117
98
  })
118
99
 
@@ -126,7 +107,6 @@ describe('SyTextField.vue', () => {
126
107
 
127
108
  it('emits append-icon-click event when append icon is clicked', async () => {
128
109
  const wrapper = mount(SyTextField, {
129
- global: { plugins: [vuetify] },
130
110
  props: { appendIcon: 'info' as IconType },
131
111
  })
132
112
 
@@ -140,7 +120,6 @@ describe('SyTextField.vue', () => {
140
120
 
141
121
  it('shows validation error message', async () => {
142
122
  const wrapper = mount(SyTextField, {
143
- global: { plugins: [vuetify] },
144
123
  props: {
145
124
  required: true,
146
125
  label: 'Test Field',
@@ -161,7 +140,6 @@ describe('SyTextField.vue', () => {
161
140
  }
162
141
 
163
142
  wrapper = mount(SyTextField, {
164
- global: { plugins: [vuetify] },
165
143
  props: { customRules: [customRule] },
166
144
  })
167
145
 
@@ -184,7 +162,6 @@ describe('SyTextField.vue', () => {
184
162
  }
185
163
 
186
164
  const wrapper = mount(SyTextField, {
187
- global: { plugins: [vuetify] },
188
165
  props: {
189
166
  modelValue: 'test',
190
167
  customWarningRules: [warningRule],
@@ -203,9 +180,7 @@ describe('SyTextField.vue', () => {
203
180
  })
204
181
 
205
182
  it('maintains input value without validation rules', async () => {
206
- wrapper = mount(SyTextField, {
207
- global: { plugins: [vuetify] },
208
- })
183
+ wrapper = mount(SyTextField)
209
184
  const input = wrapper.find('input')
210
185
 
211
186
  await input.setValue('test value')
@@ -222,7 +197,6 @@ describe('SyTextField.vue', () => {
222
197
  }
223
198
 
224
199
  wrapper = mount(SyTextField, {
225
- global: { plugins: [vuetify] },
226
200
  props: {
227
201
  customRules: [customRule],
228
202
  isValidateOnBlur: false,
@@ -1,15 +1,11 @@
1
1
  import { describe, it, expect } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
- import { vuetify } from '@tests/unit/setup'
4
3
 
5
4
  import DataListLoading from '../DataListLoading.vue'
6
5
 
7
6
  describe('DataListLoading', () => {
8
7
  it('renders correctly', () => {
9
8
  const wrapper = mount(DataListLoading, {
10
- global: {
11
- plugins: [vuetify],
12
- },
13
9
  props: {
14
10
  heading: true,
15
11
  itemsNumber: 3,