@cnamts/synapse 1.0.25 → 1.0.27

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/{AutocompleteFilter-D7qBuCAP.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
  2. package/dist/{DateFilter-BitMWrMU.js → DateFilter-y-GLkAkn.js} +9 -9
  3. package/dist/{NumberFilter-BTLUxw0a.js → NumberFilter-DN6hIBS7.js} +1 -1
  4. package/dist/{PeriodFilter-B5rUIPAC.js → PeriodFilter-MoUUp9qS.js} +1 -1
  5. package/dist/{SelectFilter-l4QnRcuk.js → SelectFilter-bCbrdLmu.js} +1 -1
  6. package/dist/{TextFilter-C9hj6Qrp.js → TextFilter-CvjgEaoM.js} +4 -4
  7. package/dist/apLightTheme2026-ug4Y23ns.js +611 -0
  8. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2369 -351
  9. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
  10. package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
  11. package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
  12. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +58 -288
  13. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
  14. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
  15. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +4 -3
  16. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -3
  17. package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
  18. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -37
  19. package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
  20. package/dist/components/Customs/SyTextField/SyTextField.d.ts +8 -10
  21. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +197 -185
  22. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +91 -82
  23. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +35 -32
  24. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  25. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +3 -3
  26. package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
  27. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  28. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  29. package/dist/components/DatePicker/types.d.ts +1 -2
  30. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  31. package/dist/components/MonthPicker/MonthPicker.d.ts +24 -24
  32. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +24 -24
  33. package/dist/components/NirField/NirField.d.ts +64 -60
  34. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  35. package/dist/components/PasswordField/PasswordField.d.ts +3 -3
  36. package/dist/components/PeriodField/PeriodField.d.ts +338 -314
  37. package/dist/components/PhoneField/PhoneField.d.ts +34 -24
  38. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  39. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  40. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  41. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  42. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  43. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  44. package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
  45. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
  46. package/dist/components/SyTextArea/locales.d.ts +1 -0
  47. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  48. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  49. package/dist/components/Tables/common/SyTablePagination.d.ts +152 -364
  50. package/dist/components/Tables/common/TableHeader.d.ts +1 -1
  51. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  52. package/dist/components/Tables/common/types.d.ts +2 -0
  53. package/dist/components/index.d.ts +1 -0
  54. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  55. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
  56. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  57. package/dist/composables/unifyValidation/useValidation.d.ts +27 -19
  58. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  59. package/dist/composables/validation/useValidation.d.ts +1 -0
  60. package/dist/design-system-v3.js +81 -80
  61. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
  62. package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
  63. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -98
  64. package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
  65. package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
  66. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
  67. package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
  68. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -99
  69. package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
  70. package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
  71. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
  72. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
  73. package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
  74. package/dist/{main-Cpx8Co6H.js → main-CI6Q9nmO.js} +13843 -13478
  75. package/dist/synapse.css +1 -1
  76. package/dist/vuetifyConfig.js +208 -72
  77. package/package.json +10 -7
  78. package/src/assets/overrides/_icons.scss +5 -17
  79. package/src/assets/overrides/_otp.scss +4 -5
  80. package/src/assets/overrides/_typography.scss +2 -1
  81. package/src/assets/overrides/_utilities.scss +1 -42
  82. package/src/components/Accordion/Accordion.vue +2 -0
  83. package/src/components/ChipList/ChipList.vue +30 -18
  84. package/src/components/ChipList/tests/chipList.spec.ts +4 -4
  85. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -1
  86. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  87. package/src/components/CopyBtn/CopyBtn.vue +9 -0
  88. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
  89. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
  90. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
  91. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
  92. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +183 -219
  93. package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
  94. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
  95. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
  96. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
  97. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
  98. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +52 -217
  99. package/src/components/Customs/Selects/SySelect/SySelect.vue +248 -236
  100. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
  101. package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
  102. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +440 -5
  103. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
  104. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
  105. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +5 -5
  106. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
  107. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +27 -6
  108. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
  109. package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
  110. package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
  111. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
  112. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
  113. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +100 -127
  114. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
  115. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
  116. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
  117. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
  118. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
  119. package/src/components/Customs/SyTabs/SyTabs.stories.ts +5 -5
  120. package/src/components/Customs/SyTabs/config.ts +3 -3
  121. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
  122. package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
  123. package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
  124. package/src/components/Customs/SyTextField/SyTextField.vue +52 -17
  125. package/src/components/DataList/DataList.stories.ts +1 -1
  126. package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
  127. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  128. package/src/components/DatePicker/CalendarMode/DatePicker.vue +52 -154
  129. package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
  130. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
  131. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  132. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +55 -73
  133. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +207 -1
  134. package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
  135. package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
  136. package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
  137. package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
  138. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  139. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +169 -60
  140. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  141. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
  142. package/src/components/DatePicker/composables/index.ts +1 -0
  143. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
  144. package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
  145. package/src/components/DatePicker/composables/useDatePickerState.ts +33 -14
  146. package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
  147. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  148. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  149. package/src/components/DatePicker/composables/useDateTextField.ts +2 -2
  150. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  151. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
  152. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
  153. package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
  154. package/src/components/DatePicker/types.ts +1 -2
  155. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  156. package/src/components/DialogBox/DialogBox.vue +1 -1
  157. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  158. package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
  159. package/src/components/FileUpload/FileUpload.vue +2 -2
  160. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  161. package/src/components/FilterInline/FilterInline.mdx +2 -2
  162. package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
  163. package/src/components/FilterSideBar/FilterSideBar.vue +4 -3
  164. package/src/components/FooterBar/FooterBar.vue +7 -7
  165. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  166. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
  167. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
  168. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
  169. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
  170. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
  171. package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
  172. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
  173. package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
  174. package/src/components/LangBtn/LangBtn.vue +2 -1
  175. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
  176. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
  177. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
  178. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
  179. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
  180. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
  181. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
  182. package/src/components/NirField/NirField.vue +3 -3
  183. package/src/components/NotificationBar/Notification/Notification.vue +12 -12
  184. package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
  185. package/src/components/PaginatedTable/PaginatedTable.vue +1 -1
  186. package/src/components/PaginatedTable/Pagination.vue +3 -3
  187. package/src/components/PasswordField/PasswordField.vue +15 -11
  188. package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
  189. package/src/components/PhoneField/PhoneField.vue +4 -2
  190. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -18
  191. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  192. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +32 -48
  193. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  194. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  195. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  196. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  197. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  198. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  199. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +28 -37
  200. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  201. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  202. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  203. package/src/components/RatingPicker/tests/RatingPicker.a11y.spec.ts +123 -0
  204. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  205. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  206. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  207. package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
  208. package/src/components/SubHeader/SubHeader.vue +1 -1
  209. package/src/components/SyAlert/SyAlert.vue +23 -23
  210. package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
  211. package/src/components/SyTextArea/SyTextArea.vue +257 -74
  212. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
  213. package/src/components/SyTextArea/locales.ts +1 -0
  214. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
  215. package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
  216. package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
  217. package/src/components/TableToolbar/TableToolbar.vue +6 -6
  218. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
  219. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
  220. package/src/components/Tables/SyServerTable/SyServerTable.vue +3 -2
  221. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  222. package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
  223. package/src/components/Tables/SyTable/SyTable.vue +3 -2
  224. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
  225. package/src/components/Tables/common/SyTableFilter.vue +4 -4
  226. package/src/components/Tables/common/SyTablePagination.vue +1 -0
  227. package/src/components/Tables/common/TableHeader.vue +3 -3
  228. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  229. package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
  230. package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
  231. package/src/components/Tables/common/tableStyles.scss +6 -6
  232. package/src/components/Tables/common/types.ts +2 -0
  233. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
  234. package/src/components/index.ts +1 -0
  235. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +112 -0
  236. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  237. package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
  238. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  239. package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
  240. package/src/composables/tests/useError.spec.ts +30 -0
  241. package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
  242. package/src/composables/unifyValidation/documentationValidationProps.ts +12 -12
  243. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
  244. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +32 -1
  245. package/src/composables/unifyValidation/tests/useValidation.spec.ts +28 -2
  246. package/src/composables/unifyValidation/useCustomValidation.ts +34 -12
  247. package/src/composables/unifyValidation/useValidation.ts +55 -27
  248. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  249. package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
  250. package/src/composables/useFilterable/useFilterable.ts +11 -7
  251. package/src/composables/useFormFieldErrorHandling.ts +6 -3
  252. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  253. package/src/composables/validation/useValidation.ts +15 -3
  254. package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
  255. package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
  256. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  257. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  258. package/src/designTokens/tokens/amelipro/apColors2026.ts +1 -1
  259. package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
  260. package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
  261. package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -100
  262. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  263. package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
  264. package/src/designTokens/tokens/baseTokens.ts +232 -0
  265. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
  266. package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
  267. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -101
  268. package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
  269. package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
  270. package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
  271. package/src/designTokens/tokens/semanticTokens.ts +114 -0
  272. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  273. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -8
  274. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  275. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  276. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  277. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  278. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +168 -78
  279. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +13 -6
  280. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +66 -45
  281. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  282. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  283. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  284. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +18 -20
  285. package/src/stories/Components/Components.stories.ts +59 -6
  286. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
  287. package/src/stories/DesignTokens/Colors.mdx +6 -8
  288. package/src/stories/DesignTokens/colors.stories.ts +244 -1081
  289. package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
  290. package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
  291. package/src/utils/tests/insertAt.spec.ts +44 -0
  292. package/dist/AutocompleteFilter-Df9i5mAl.cjs +0 -1
  293. package/dist/DateFilter-BJD6FMev.cjs +0 -1
  294. package/dist/NumberFilter-DGCzCXzI.cjs +0 -1
  295. package/dist/PeriodFilter-DO_ecTZW.cjs +0 -1
  296. package/dist/SelectFilter-CGwcKWLm.cjs +0 -1
  297. package/dist/TextFilter-B8nf7xoK.cjs +0 -1
  298. package/dist/apLightTheme-CEK4iY3f.cjs +0 -1
  299. package/dist/apLightTheme-DnIM24Lv.js +0 -950
  300. package/dist/composables/date/useDateFormat.d.ts +0 -26
  301. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  302. package/dist/design-system-v3.umd.cjs +0 -1
  303. package/dist/main-ByDPHpae.cjs +0 -1067
  304. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  305. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  306. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  307. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  308. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  309. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  310. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  311. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  312. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  313. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  314. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  315. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  316. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  317. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  318. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  319. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  320. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  321. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  322. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  323. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  324. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  325. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  326. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  327. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  328. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  329. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  330. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  331. package/dist/tooth-44-CazyQucj.cjs +0 -1
  332. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  333. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  334. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  335. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  336. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  337. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  338. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  339. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  340. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  341. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  342. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  343. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  344. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  345. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  346. package/dist/tooth-71-D473PPO5.cjs +0 -1
  347. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  348. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  349. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  350. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  351. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  352. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  353. package/dist/tooth-83-KV010j64.cjs +0 -1
  354. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  355. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  356. package/dist/vuetifyConfig.umd.cjs +0 -1
  357. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  358. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  359. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  360. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  361. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
  362. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  363. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  364. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  365. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  366. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  367. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  368. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  369. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  370. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  371. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  372. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  373. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  374. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  375. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  376. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  377. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  378. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  379. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  380. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  381. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  382. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  383. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  384. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  385. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  386. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  387. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  388. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  389. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  390. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  391. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  392. package/src/composables/date/useDateFormat.ts +0 -110
  393. package/src/composables/date/useDateInitialization.ts +0 -92
@@ -1,5 +1,8 @@
1
- import { it, describe, expect } from 'vitest'
1
+ import { it, describe, expect, vi } from 'vitest'
2
2
  import { flushPromises, mount } from '@vue/test-utils'
3
+ import { ref } from 'vue'
4
+ import SyForm from '../../Customs/SyForm/SyForm.vue'
5
+ import SyIcon from '../../Customs/SyIcon/SyIcon.vue'
3
6
  import SyTextArea from '../SyTextArea.vue'
4
7
 
5
8
  describe('SyTextArea', () => {
@@ -324,4 +327,449 @@ describe('SyTextArea', () => {
324
327
 
325
328
  expect(wrapper.text()).toContain('Succès personnalisé')
326
329
  })
330
+
331
+ it('validates only on blur when isValidateOnBlur is true', async () => {
332
+ const wrapper = mount(SyTextArea, {
333
+ props: {
334
+ modelValue: '',
335
+ label: 'Description des symptomes',
336
+ isValidateOnBlur: true,
337
+ customRules: [
338
+ {
339
+ type: 'custom',
340
+ options: {
341
+ validate: (value: string) => value !== 'interdit',
342
+ message: 'Erreur isValidateOnBlur',
343
+ },
344
+ },
345
+ ],
346
+ },
347
+ })
348
+
349
+ const textarea = wrapper.find('textarea')
350
+ await textarea.trigger('focus')
351
+ await textarea.setValue('interdit')
352
+ await flushPromises()
353
+
354
+ expect(wrapper.text()).not.toContain('Erreur isValidateOnBlur')
355
+
356
+ await textarea.trigger('blur')
357
+ await flushPromises()
358
+
359
+ expect(wrapper.text()).toContain('Erreur isValidateOnBlur')
360
+ })
361
+
362
+ it('keeps success visual state but hides success text when showSuccessMessages is false', async () => {
363
+ const wrapper = mount(SyTextArea, {
364
+ props: {
365
+ modelValue: '',
366
+ label: 'Description des symptomes',
367
+ isValidateOnBlur: false,
368
+ showSuccessMessages: false,
369
+ customSuccessRules: [
370
+ {
371
+ type: 'custom',
372
+ options: {
373
+ successMessage: 'Succès masqué',
374
+ validate: () => true,
375
+ },
376
+ },
377
+ ],
378
+ },
379
+ })
380
+
381
+ const textarea = wrapper.find('textarea')
382
+ await textarea.trigger('focus')
383
+ await textarea.setValue('valeur')
384
+ await textarea.trigger('blur')
385
+ await flushPromises()
386
+
387
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
388
+ expect((wrapper.vm as any).hasSuccess).toBe(true)
389
+ expect(wrapper.find('.success-field').exists()).toBe(true)
390
+ expect(wrapper.find('.sy-textarea__state-icon').exists()).toBe(true)
391
+ expect(wrapper.findComponent(SyIcon).props('color')).toBe('onSuccessVariant')
392
+ expect(wrapper.text()).not.toContain('Succès masqué')
393
+ })
394
+
395
+ it('applies warning visual state and warning icon when warning rules fail', async () => {
396
+ const wrapper = mount(SyTextArea, {
397
+ props: {
398
+ modelValue: '',
399
+ label: 'Description des symptomes',
400
+ isValidateOnBlur: false,
401
+ customWarningRules: [
402
+ {
403
+ type: 'custom',
404
+ options: {
405
+ warningMessage: 'Avertissement visuel',
406
+ validate: () => false,
407
+ },
408
+ },
409
+ ],
410
+ },
411
+ })
412
+
413
+ const textarea = wrapper.find('textarea')
414
+ await textarea.trigger('focus')
415
+ await textarea.setValue('valeur')
416
+ await textarea.trigger('blur')
417
+ await flushPromises()
418
+
419
+ expect(wrapper.find('.warning-field').exists()).toBe(true)
420
+ expect(wrapper.find('.sy-textarea__state-icon').exists()).toBe(true)
421
+ expect(wrapper.findComponent(SyIcon).props('color')).toBe('onWarningVariant')
422
+ })
423
+
424
+ it('applies error visual state and error icon when validation fails', async () => {
425
+ const wrapper = mount(SyTextArea, {
426
+ props: {
427
+ modelValue: '',
428
+ label: 'Description des symptomes',
429
+ required: true,
430
+ },
431
+ })
432
+
433
+ const textarea = wrapper.find('textarea')
434
+ await textarea.trigger('focus')
435
+ await textarea.trigger('blur')
436
+ await flushPromises()
437
+
438
+ expect(wrapper.find('.error-field').exists()).toBe(true)
439
+ expect(wrapper.find('.sy-textarea__state-icon').exists()).toBe(true)
440
+ expect(wrapper.findComponent(SyIcon).props('color')).toBe('error')
441
+ })
442
+
443
+ describe('Affichage de l\'astérisque', () => {
444
+ it('affiche l\'astérisque quand displayAsterisk et required sont true', () => {
445
+ const wrapper = mount(SyTextArea, {
446
+ props: {
447
+ modelValue: '',
448
+ label: 'Test Label',
449
+ displayAsterisk: true,
450
+ required: true,
451
+ },
452
+ })
453
+
454
+ expect(wrapper.html()).toContain('Test Label *')
455
+ })
456
+
457
+ it('n\'affiche pas l\'astérisque quand displayAsterisk est false', () => {
458
+ const wrapper = mount(SyTextArea, {
459
+ props: {
460
+ modelValue: '',
461
+ label: 'Test Label',
462
+ displayAsterisk: false,
463
+ required: true,
464
+ },
465
+ })
466
+
467
+ expect(wrapper.html()).not.toContain('Test Label *')
468
+ expect(wrapper.html()).toContain('Test Label')
469
+ })
470
+
471
+ it('n\'affiche pas l\'astérisque quand required est false', () => {
472
+ const wrapper = mount(SyTextArea, {
473
+ props: {
474
+ modelValue: '',
475
+ label: 'Test Label',
476
+ displayAsterisk: true,
477
+ required: false,
478
+ },
479
+ })
480
+
481
+ expect(wrapper.html()).not.toContain('Test Label *')
482
+ })
483
+ })
484
+
485
+ describe('helpText', () => {
486
+ it('affiche le helpText quand aucun message de validation n\'est présent', () => {
487
+ const wrapper = mount(SyTextArea, {
488
+ props: {
489
+ modelValue: '',
490
+ label: 'Description',
491
+ helpText: 'Texte d\'aide',
492
+ },
493
+ })
494
+
495
+ expect(wrapper.text()).toContain('Texte d\'aide')
496
+ })
497
+
498
+ it('masque le helpText quand des erreurs sont présentes', async () => {
499
+ const wrapper = mount(SyTextArea, {
500
+ props: {
501
+ modelValue: '',
502
+ label: 'Description',
503
+ helpText: 'Texte d\'aide',
504
+ required: true,
505
+ },
506
+ })
507
+
508
+ const textarea = wrapper.find('textarea')
509
+ await textarea.trigger('focus')
510
+ await textarea.trigger('blur')
511
+
512
+ expect(wrapper.text()).not.toContain('Texte d\'aide')
513
+ expect(wrapper.text()).toContain('Ce champ est requis')
514
+ })
515
+ })
516
+
517
+ describe('hideDetails', () => {
518
+ it('masque la zone des messages quand hideDetails est true et qu\'il n\'y a pas de messages', () => {
519
+ const wrapper = mount(SyTextArea, {
520
+ props: {
521
+ modelValue: '',
522
+ label: 'Description',
523
+ hideDetails: true,
524
+ },
525
+ })
526
+
527
+ expect(wrapper.find('.v-messages').exists()).toBe(false)
528
+ })
529
+
530
+ it('affiche la zone des messages quand hideDetails est true mais qu\'il y a des erreurs', async () => {
531
+ const wrapper = mount(SyTextArea, {
532
+ props: {
533
+ modelValue: '',
534
+ label: 'Description',
535
+ hideDetails: true,
536
+ required: true,
537
+ },
538
+ })
539
+
540
+ const textarea = wrapper.find('textarea')
541
+ await textarea.trigger('focus')
542
+ await textarea.trigger('blur')
543
+
544
+ expect(wrapper.find('.v-messages').exists()).toBe(true)
545
+ expect(wrapper.text()).toContain('Ce champ est requis')
546
+ })
547
+
548
+ it('affiche la zone des messages par défaut (hideDetails vaut false)', () => {
549
+ const wrapper = mount(SyTextArea, {
550
+ props: {
551
+ modelValue: '',
552
+ label: 'Description',
553
+ },
554
+ })
555
+
556
+ expect(wrapper.find('.v-messages').exists()).toBe(true)
557
+ })
558
+ })
559
+
560
+ describe('clearable', () => {
561
+ it('affiche le bouton de suppression quand clearable est true et qu\'une valeur est saisie', () => {
562
+ const wrapper = mount(SyTextArea, {
563
+ props: {
564
+ modelValue: 'contenu',
565
+ label: 'Description',
566
+ clearable: true,
567
+ },
568
+ attachTo: document.body,
569
+ })
570
+
571
+ expect(wrapper.find('.sy-textarea__clear-button').exists()).toBe(true)
572
+
573
+ wrapper.unmount()
574
+ })
575
+
576
+ it('n\'affiche pas le bouton de suppression quand clearable est false', () => {
577
+ const wrapper = mount(SyTextArea, {
578
+ props: {
579
+ modelValue: 'contenu',
580
+ label: 'Description',
581
+ clearable: false,
582
+ },
583
+ attachTo: document.body,
584
+ })
585
+
586
+ expect(wrapper.find('.sy-textarea__clear-button').exists()).toBe(false)
587
+
588
+ wrapper.unmount()
589
+ })
590
+
591
+ it('vide le champ au clic sur le bouton de suppression', async () => {
592
+ const wrapper = mount(SyTextArea, {
593
+ props: {
594
+ modelValue: 'contenu',
595
+ label: 'Description',
596
+ clearable: true,
597
+ },
598
+ attachTo: document.body,
599
+ })
600
+
601
+ const clearButton = wrapper.find('.sy-textarea__clear-button')
602
+ await clearButton.trigger('click')
603
+ await flushPromises()
604
+
605
+ expect(wrapper.emitted('update:modelValue')).toBeTruthy()
606
+ const emittedValues = wrapper.emitted('update:modelValue') as string[][]
607
+ expect(emittedValues[emittedValues.length - 1]).toEqual([''])
608
+
609
+ wrapper.unmount()
610
+ })
611
+ })
612
+
613
+ describe('disableErrorHandling', () => {
614
+ it('n\'affiche pas d\'erreur pour un champ requis sans valeur quand disableErrorHandling est true', async () => {
615
+ const wrapper = mount(SyTextArea, {
616
+ props: {
617
+ modelValue: '',
618
+ label: 'Description',
619
+ required: true,
620
+ disableErrorHandling: true,
621
+ },
622
+ })
623
+
624
+ const textarea = wrapper.find('textarea')
625
+ await textarea.trigger('focus')
626
+ await textarea.trigger('blur')
627
+
628
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
629
+ expect((wrapper.vm as any).hasError).toBe(false)
630
+ expect(wrapper.text()).not.toContain('Ce champ est requis')
631
+ })
632
+
633
+ it('affiche les erreurs normalement quand disableErrorHandling est false', async () => {
634
+ const wrapper = mount(SyTextArea, {
635
+ props: {
636
+ modelValue: '',
637
+ label: 'Description',
638
+ required: true,
639
+ disableErrorHandling: false,
640
+ },
641
+ })
642
+
643
+ const textarea = wrapper.find('textarea')
644
+ await textarea.trigger('focus')
645
+ await textarea.trigger('blur')
646
+
647
+ expect(wrapper.text()).toContain('Ce champ est requis')
648
+ })
649
+ })
650
+
651
+ describe('validateOnSubmit / clearValidation', () => {
652
+ it('validateOnSubmit retourne true quand le champ est valide', async () => {
653
+ const wrapper = mount(SyTextArea, {
654
+ props: {
655
+ modelValue: 'valeur',
656
+ label: 'Description',
657
+ required: true,
658
+ },
659
+ })
660
+
661
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
662
+ const isValid = await (wrapper.vm as any).validateOnSubmit()
663
+ await flushPromises()
664
+
665
+ expect(isValid).toBe(true)
666
+ })
667
+
668
+ it('validateOnSubmit retourne false quand le champ est invalide', async () => {
669
+ const wrapper = mount(SyTextArea, {
670
+ props: {
671
+ modelValue: '',
672
+ label: 'Description',
673
+ isValidateOnBlur: false,
674
+ customRules: [{
675
+ type: 'custom',
676
+ options: {
677
+ validate: (value: string) => value.length <= 5,
678
+ message: 'Valeur trop longue.',
679
+ },
680
+ }],
681
+ },
682
+ })
683
+
684
+ const textarea = wrapper.find('textarea')
685
+ await textarea.trigger('focus')
686
+ await textarea.setValue('valeur trop longue')
687
+ await textarea.trigger('blur')
688
+ await flushPromises()
689
+
690
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
691
+ const isValid = await (wrapper.vm as any).validateOnSubmit()
692
+ await flushPromises()
693
+
694
+ expect(isValid).toBe(false)
695
+ expect(wrapper.text()).toContain('Valeur trop longue.')
696
+ })
697
+
698
+ it('validateOnSubmit retourne false quand un champ requis est vide', async () => {
699
+ const wrapper = mount(SyTextArea, {
700
+ props: {
701
+ modelValue: '',
702
+ label: 'Description',
703
+ required: true,
704
+ },
705
+ })
706
+
707
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
708
+ const isValid = await (wrapper.vm as any).validateOnSubmit()
709
+ await flushPromises()
710
+
711
+ expect(isValid).toBe(false)
712
+ expect(wrapper.text()).toContain('Ce champ est requis')
713
+ })
714
+
715
+ it('clearValidation remet l\'état d\'erreur à zéro', async () => {
716
+ const wrapper = mount(SyTextArea, {
717
+ props: {
718
+ modelValue: '',
719
+ label: 'Description',
720
+ isValidateOnBlur: false,
721
+ customRules: [{
722
+ type: 'custom',
723
+ options: {
724
+ validate: (value: string) => value.length <= 5,
725
+ message: 'Valeur trop longue.',
726
+ },
727
+ }],
728
+ },
729
+ })
730
+
731
+ const textarea = wrapper.find('textarea')
732
+ await textarea.trigger('focus')
733
+ await textarea.setValue('valeur trop longue')
734
+ await textarea.trigger('blur')
735
+ await flushPromises()
736
+
737
+ expect(wrapper.text()).toContain('Valeur trop longue.')
738
+
739
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
740
+ const instance = wrapper.vm as any
741
+ instance.clearValidation()
742
+ await flushPromises()
743
+ expect(wrapper.find('.v-messages__message').exists()).toBe(false)
744
+ })
745
+ })
746
+
747
+ describe('SyForm integration', () => {
748
+ it('valide un champ requis vide lors de la soumission sans interaction préalable', async () => {
749
+ const onSubmit = vi.fn()
750
+ const wrapper = mount({
751
+ components: { SyForm, SyTextArea },
752
+ setup() {
753
+ const value = ref('')
754
+ return { onSubmit, value }
755
+ },
756
+ template: `
757
+ <SyForm @submit="onSubmit">
758
+ <SyTextArea
759
+ v-model="value"
760
+ label="Description"
761
+ required
762
+ />
763
+ <button type="submit">Soumettre</button>
764
+ </SyForm>
765
+ `,
766
+ })
767
+
768
+ await wrapper.find('form').trigger('submit')
769
+ await flushPromises()
770
+
771
+ expect(onSubmit).toHaveBeenCalledWith({ isValid: false })
772
+ expect(wrapper.text()).toContain('Ce champ est requis')
773
+ })
774
+ })
327
775
  })
@@ -40,14 +40,9 @@ export function useDefaultValidationRules(params: {
40
40
 
41
41
  if (params.required.value) {
42
42
  rules.push({
43
- type: 'custom',
43
+ type: 'required',
44
44
  options: {
45
- validate: (value: string) => {
46
- if (!params.hasInteracted.value) {
47
- return true
48
- }
49
- return !!value || locales.required
50
- },
45
+ message: locales.required,
51
46
  },
52
47
  })
53
48
  }