@cnamts/synapse 1.0.26 → 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 (253) hide show
  1. package/dist/{AutocompleteFilter-BPR-a55G.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
  2. package/dist/{DateFilter-CknrJWs2.js → DateFilter-y-GLkAkn.js} +8 -8
  3. package/dist/{NumberFilter-DJ-yNlzv.js → NumberFilter-DN6hIBS7.js} +1 -1
  4. package/dist/{PeriodFilter-CiB5Oa9Z.js → PeriodFilter-MoUUp9qS.js} +1 -1
  5. package/dist/{SelectFilter-EiafX97M.js → SelectFilter-bCbrdLmu.js} +1 -1
  6. package/dist/{TextFilter-BzOmpdxj.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 -353
  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 +9 -10
  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 +3 -3
  16. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +3 -3
  17. package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
  18. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -38
  19. package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
  20. package/dist/components/Customs/SyTextField/SyTextField.d.ts +6 -6
  21. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +147 -136
  22. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +62 -54
  23. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +27 -24
  24. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  25. package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
  26. package/dist/components/MonthPicker/MonthPicker.d.ts +23 -23
  27. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +23 -23
  28. package/dist/components/NirField/NirField.d.ts +56 -56
  29. package/dist/components/PasswordField/PasswordField.d.ts +3 -3
  30. package/dist/components/PeriodField/PeriodField.d.ts +236 -212
  31. package/dist/components/PhoneField/PhoneField.d.ts +23 -23
  32. package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
  33. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
  34. package/dist/components/SyTextArea/locales.d.ts +1 -0
  35. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
  36. package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
  37. package/dist/components/Tables/common/SyTablePagination.d.ts +25 -25
  38. package/dist/components/Tables/common/types.d.ts +2 -0
  39. package/dist/components/index.d.ts +1 -0
  40. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
  41. package/dist/composables/unifyValidation/useValidation.d.ts +16 -14
  42. package/dist/design-system-v3.js +81 -80
  43. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
  44. package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
  45. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -100
  46. package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
  47. package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
  48. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
  49. package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
  50. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -101
  51. package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
  52. package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
  53. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
  54. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
  55. package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
  56. package/dist/main-CI6Q9nmO.js +39234 -0
  57. package/dist/synapse.css +1 -1
  58. package/dist/vuetifyConfig.js +208 -72
  59. package/package.json +4 -2
  60. package/src/assets/overrides/_icons.scss +5 -4
  61. package/src/assets/overrides/_otp.scss +4 -4
  62. package/src/assets/overrides/_typography.scss +2 -1
  63. package/src/assets/overrides/_utilities.scss +1 -42
  64. package/src/components/ChipList/ChipList.vue +30 -18
  65. package/src/components/ChipList/tests/chipList.spec.ts +4 -4
  66. package/src/components/CopyBtn/CopyBtn.vue +2 -2
  67. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
  68. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
  69. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
  70. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
  71. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +182 -218
  72. package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
  73. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
  74. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
  75. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
  76. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
  77. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +9 -491
  78. package/src/components/Customs/Selects/SySelect/SySelect.vue +46 -79
  79. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
  80. package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
  81. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +196 -0
  82. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
  83. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
  84. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +2 -2
  85. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
  86. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +8 -8
  87. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
  88. package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
  89. package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
  90. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
  91. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
  92. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +82 -127
  93. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
  94. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
  95. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
  96. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
  97. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
  98. package/src/components/Customs/SyTabs/config.ts +3 -3
  99. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
  100. package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
  101. package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
  102. package/src/components/Customs/SyTextField/SyTextField.vue +23 -15
  103. package/src/components/DataList/DataList.stories.ts +1 -1
  104. package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
  105. package/src/components/DatePicker/CalendarMode/DatePicker.vue +37 -142
  106. package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
  107. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
  108. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +47 -66
  109. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +206 -0
  110. package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
  111. package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
  112. package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
  113. package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
  114. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +129 -54
  115. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
  116. package/src/components/DatePicker/composables/index.ts +1 -0
  117. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
  118. package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
  119. package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
  120. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
  121. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
  122. package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
  123. package/src/components/DialogBox/DialogBox.vue +1 -1
  124. package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
  125. package/src/components/FileUpload/FileUpload.vue +2 -2
  126. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  127. package/src/components/FilterInline/FilterInline.mdx +2 -2
  128. package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
  129. package/src/components/FilterSideBar/FilterSideBar.vue +2 -2
  130. package/src/components/FooterBar/FooterBar.vue +7 -7
  131. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  132. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
  133. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
  134. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
  135. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
  136. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
  137. package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
  138. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
  139. package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
  140. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
  141. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
  142. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
  143. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
  144. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
  145. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
  146. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
  147. package/src/components/NirField/NirField.vue +3 -3
  148. package/src/components/NotificationBar/Notification/Notification.vue +12 -12
  149. package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
  150. package/src/components/PaginatedTable/Pagination.vue +2 -2
  151. package/src/components/PasswordField/PasswordField.vue +8 -8
  152. package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
  153. package/src/components/RangeField/RangeSlider/RangeSlider.vue +2 -2
  154. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  155. package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
  156. package/src/components/SubHeader/SubHeader.vue +1 -1
  157. package/src/components/SyAlert/SyAlert.vue +23 -23
  158. package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
  159. package/src/components/SyTextArea/SyTextArea.vue +235 -83
  160. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
  161. package/src/components/SyTextArea/locales.ts +1 -0
  162. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
  163. package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
  164. package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
  165. package/src/components/TableToolbar/TableToolbar.vue +6 -6
  166. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
  167. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
  168. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -1
  169. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  170. package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
  171. package/src/components/Tables/SyTable/SyTable.vue +2 -1
  172. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
  173. package/src/components/Tables/common/TableHeader.vue +2 -2
  174. package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
  175. package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
  176. package/src/components/Tables/common/tableStyles.scss +6 -6
  177. package/src/components/Tables/common/types.ts +2 -0
  178. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
  179. package/src/components/index.ts +1 -0
  180. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +31 -0
  181. package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
  182. package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
  183. package/src/composables/tests/useError.spec.ts +30 -0
  184. package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
  185. package/src/composables/unifyValidation/documentationValidationProps.ts +5 -5
  186. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
  187. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +30 -0
  188. package/src/composables/unifyValidation/tests/useValidation.spec.ts +6 -2
  189. package/src/composables/unifyValidation/useCustomValidation.ts +19 -9
  190. package/src/composables/unifyValidation/useValidation.ts +18 -21
  191. package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
  192. package/src/composables/useFilterable/useFilterable.ts +11 -7
  193. package/src/composables/useFormFieldErrorHandling.ts +2 -2
  194. package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
  195. package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
  196. package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
  197. package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
  198. package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -103
  199. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  200. package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
  201. package/src/designTokens/tokens/baseTokens.ts +232 -0
  202. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
  203. package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
  204. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -104
  205. package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
  206. package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
  207. package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
  208. package/src/designTokens/tokens/semanticTokens.ts +114 -0
  209. package/src/stories/Components/Components.stories.ts +7 -3
  210. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
  211. package/src/stories/DesignTokens/Colors.mdx +6 -8
  212. package/src/stories/DesignTokens/colors.stories.ts +244 -1081
  213. package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
  214. package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
  215. package/src/utils/tests/insertAt.spec.ts +44 -0
  216. package/dist/apLightTheme-DS0Uy44H.js +0 -954
  217. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +0 -1
  218. package/dist/main-BsJ9ec3i.js +0 -38954
  219. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  220. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  221. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  222. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  223. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
  224. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  225. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  226. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  227. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  228. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  229. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  230. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  231. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  232. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  233. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  234. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  235. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  236. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  237. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  238. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  239. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  240. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  241. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  242. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  243. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  244. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  245. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  246. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  247. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  248. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  249. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  250. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  251. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  252. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  253. /package/src/components/RatingPicker/tests/{RatingPicker.a11y.spect.ts → RatingPicker.a11y.spec.ts} +0 -0
@@ -2,6 +2,7 @@ import SyRadioGroup from '../SyRadioGroup.vue'
2
2
  import { mount } from '@vue/test-utils'
3
3
  import { describe, it, expect } from 'vitest'
4
4
  import { nextTick } from 'vue'
5
+ import type { ValidationRule } from '@/composables/unifyValidation/useValidation'
5
6
 
6
7
  describe('SyRadioGroup', () => {
7
8
  it('should render correctly', () => {
@@ -19,15 +20,16 @@ describe('SyRadioGroup', () => {
19
20
  expect(wrapper.text()).toContain('Test radio group')
20
21
  expect(wrapper.findAll('input[type="radio"]').length).toBe(2)
21
22
  })
23
+
22
24
  it('should handle v-model correctly', async () => {
23
25
  const wrapper = mount(SyRadioGroup, {
24
26
  props: {
25
27
  'modelValue': null,
28
+ 'label': 'Test Radio',
26
29
  'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
27
30
  'options': [
28
31
  { label: 'Option A', value: 'A' },
29
32
  { label: 'Option B', value: 'B' },
30
-
31
33
  ],
32
34
  },
33
35
  })
@@ -71,13 +73,14 @@ describe('SyRadioGroup', () => {
71
73
  // Valider à nouveau
72
74
  const isValidAfter = await wrapper.vm.validateOnSubmit()
73
75
  expect(isValidAfter).toBe(true)
74
- expect(wrapper.vm.modelValue).toBe('X')
76
+ expect(wrapper.props('modelValue')).toBe('X')
75
77
  })
76
78
 
77
79
  it('should handle readonly and disabled states', async () => {
78
80
  const wrapper = mount(SyRadioGroup, {
79
81
  props: {
80
82
  modelValue: null,
83
+ label: 'Readonly Radio',
81
84
  readonly: true,
82
85
  options: [{ label: 'X', value: 'X' }],
83
86
  },
@@ -94,11 +97,10 @@ describe('SyRadioGroup', () => {
94
97
  })
95
98
 
96
99
  it('should handle custom validation rules', async () => {
97
- const customRule = {
100
+ const customRule: ValidationRule = {
98
101
  type: 'custom',
99
102
  options: {
100
- // La fonction de validation personnalisée doit être définie dans options.validate
101
- validate: (value: unknown) => value === 'OK', // type générique unknown
103
+ validate: (value: unknown) => value === 'OK',
102
104
  message: 'Vous devez sélectionner une option.',
103
105
  fieldIdentifier: 'Custom Radio',
104
106
  },
@@ -107,13 +109,14 @@ describe('SyRadioGroup', () => {
107
109
  const wrapper = mount(SyRadioGroup, {
108
110
  props: {
109
111
  'modelValue': null,
112
+ 'label': 'Custom Rules Radio',
110
113
  'required': true,
111
114
  'customRules': [customRule],
112
115
  'isValidateOnBlur': false,
113
116
  'options': [
114
117
  { label: 'Non', value: 'NO' },
115
118
  { label: 'Oui', value: 'OK' },
116
- { label: 'Peut-être', value: 42 }, // exemple valeur non-string
119
+ { label: 'Peut-être', value: 42 },
117
120
  ],
118
121
  'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
119
122
  },
@@ -122,14 +125,148 @@ describe('SyRadioGroup', () => {
122
125
  // Validation initiale : aucune option sélectionnée
123
126
  const isValidInitial = await wrapper.vm.validateOnSubmit()
124
127
  expect(isValidInitial).toBe(false)
125
- expect(wrapper.vm.validation.errors.value).toContain('Vous devez sélectionner une option.')
126
128
 
127
- // Sélectionner l’option correcte
129
+ // Vérifier visuellement le message d'erreur
130
+ await nextTick()
131
+ const errorMessages = wrapper.findAll('.v-messages__message')
132
+ expect(errorMessages.length).toBeGreaterThan(0)
133
+
134
+ // Sélectionner l'option correcte
128
135
  await wrapper.setProps({ modelValue: 'OK' })
136
+ await nextTick()
129
137
 
130
138
  // Validation après sélection
131
139
  const isValidCorrect = await wrapper.vm.validateOnSubmit()
132
140
  expect(isValidCorrect).toBe(true)
133
- expect(wrapper.vm.validation.errors.value).toHaveLength(0)
141
+ })
142
+
143
+ it('should display asterisk when displayAsterisk is true and required', () => {
144
+ const wrapper = mount(SyRadioGroup, {
145
+ props: {
146
+ label: 'Required Field',
147
+ required: true,
148
+ displayAsterisk: true,
149
+ options: [{ label: 'X', value: 'X' }],
150
+ },
151
+ })
152
+
153
+ expect(wrapper.text()).toContain('Required Field *')
154
+ })
155
+
156
+ it('should not display asterisk when displayAsterisk is false', () => {
157
+ const wrapper = mount(SyRadioGroup, {
158
+ props: {
159
+ label: 'Required Field',
160
+ required: true,
161
+ displayAsterisk: false,
162
+ options: [{ label: 'X', value: 'X' }],
163
+ },
164
+ })
165
+
166
+ expect(wrapper.text()).toContain('Required Field')
167
+ expect(wrapper.text()).not.toContain('Required Field *')
168
+ })
169
+
170
+ it('should handle external error messages', async () => {
171
+ const wrapper = mount(SyRadioGroup, {
172
+ props: {
173
+ label: 'Radio Group',
174
+ options: [{ label: 'X', value: 'X' }],
175
+ errorMessages: ['Erreur externe'],
176
+ },
177
+ })
178
+
179
+ await nextTick()
180
+ const errorMessages = wrapper.findAll('.v-messages__message')
181
+ expect(errorMessages.length).toBeGreaterThan(0)
182
+ expect(errorMessages[0]?.text()).toContain('Erreur externe')
183
+ })
184
+
185
+ it('should handle warning and success rules', async () => {
186
+ const warningRule: ValidationRule = {
187
+ type: 'custom',
188
+ options: {
189
+ validate: (value: unknown) => value === 'A' || value === 'a',
190
+ fieldIdentifier: 'Warning Field',
191
+ },
192
+ }
193
+
194
+ const successRule: ValidationRule = {
195
+ type: 'custom',
196
+ options: {
197
+ validate: (value: unknown) => value === 'A',
198
+ successMessage: 'Bonne sélection !',
199
+ fieldIdentifier: 'Success Field',
200
+ },
201
+ }
202
+
203
+ const wrapper = mount(SyRadioGroup, {
204
+ props: {
205
+ 'modelValue': null,
206
+ 'label': 'Warning/Success Rules Radio',
207
+ 'customWarningRules': [warningRule],
208
+ 'customSuccessRules': [successRule],
209
+ 'showSuccessMessages': true,
210
+ 'isValidateOnBlur': false,
211
+ 'options': [
212
+ { label: 'Option A', value: 'A' },
213
+ { label: 'Option B', value: 'B' },
214
+ ],
215
+ 'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
216
+ },
217
+ })
218
+
219
+ // Sélectionner l'option A
220
+ await wrapper.setProps({ modelValue: 'A' })
221
+ await nextTick()
222
+ await wrapper.vm.validateOnSubmit()
223
+ await nextTick()
224
+
225
+ // Vérifier que la validation fonctionne
226
+ const isValid = await wrapper.vm.validateOnSubmit()
227
+ expect(isValid).toBe(true)
228
+ })
229
+
230
+ it('should validate on selection change when isValidateOnBlur is false', async () => {
231
+ const wrapper = mount(SyRadioGroup, {
232
+ props: {
233
+ 'modelValue': null,
234
+ 'label': 'Validate On Change Radio',
235
+ 'required': true,
236
+ 'isValidateOnBlur': false,
237
+ 'options': [
238
+ { label: 'Option A', value: 'A' },
239
+ ],
240
+ 'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
241
+ },
242
+ })
243
+
244
+ // La validation devrait se déclencher lors du changement de valeur
245
+ await wrapper.setProps({ modelValue: 'A' })
246
+ await nextTick()
247
+
248
+ const isValid = await wrapper.vm.validateOnSubmit()
249
+ expect(isValid).toBe(true)
250
+ })
251
+
252
+ it('should handle useVuetifyValidation mode', async () => {
253
+ const wrapper = mount(SyRadioGroup, {
254
+ props: {
255
+ 'modelValue': null,
256
+ 'label': 'Vuetify Validation Radio',
257
+ 'useVuetifyValidation': true,
258
+ 'rules': [
259
+ (v: string | null) => !!v || 'Sélection requise',
260
+ ],
261
+ 'options': [
262
+ { label: 'Option A', value: 'A' },
263
+ ],
264
+ 'onUpdate:modelValue': e => wrapper.setProps({ modelValue: e }),
265
+ },
266
+ })
267
+
268
+ // Validation doit fonctionner en mode Vuetify
269
+ const isValid = await wrapper.vm.validateOnSubmit()
270
+ expect(typeof isValid).toBe('boolean')
134
271
  })
135
272
  })
@@ -0,0 +1,165 @@
1
+ import SyRadioGroup from '../SyRadioGroup.vue'
2
+
3
+ const defaultOptions = [
4
+ { label: 'Option A', value: 'A' },
5
+ { label: 'Option B', value: 'B' },
6
+ { label: 'Option C', value: 'C' },
7
+ ]
8
+
9
+ describe('SyRadioGroup - Visual regression tests', () => {
10
+ it('displays the radio group by default', () => {
11
+ cy.mountWithVuetify(SyRadioGroup, {
12
+ props: {
13
+ label: 'Test Radio Group',
14
+ options: defaultOptions,
15
+ },
16
+ })
17
+
18
+ cy.get('.v-radio-group').should('be.visible')
19
+ cy.matchImageSnapshot('sy-radio-group-default', cy.get('.v-radio-group'))
20
+ })
21
+
22
+ it('displays the radio group with a selected value', () => {
23
+ cy.mountWithVuetify(SyRadioGroup, {
24
+ props: {
25
+ label: 'Test Radio Group',
26
+ modelValue: 'B',
27
+ options: defaultOptions,
28
+ },
29
+ })
30
+
31
+ cy.get('.v-radio-group').should('be.visible')
32
+ cy.matchImageSnapshot('sy-radio-group-selected', cy.get('.v-radio-group'))
33
+ })
34
+
35
+ it('displays the radio group in error state', () => {
36
+ cy.mountWithVuetify(SyRadioGroup, {
37
+ props: {
38
+ label: 'Required Radio Group',
39
+ required: true,
40
+ options: defaultOptions,
41
+ hasError: true,
42
+ errorMessages: ['Ce champ est requis.'],
43
+ },
44
+ })
45
+
46
+ cy.get('.v-radio-group').should('be.visible')
47
+ cy.get('.v-radio-group').should('have.class', 'error-field')
48
+ cy.matchImageSnapshot('sy-radio-group-error', cy.get('.v-radio-group'))
49
+ })
50
+
51
+ it('displays the radio group in warning state', () => {
52
+ cy.mountWithVuetify(SyRadioGroup, {
53
+ props: {
54
+ label: 'Radio Group with Warning',
55
+ options: defaultOptions,
56
+ hasWarning: true,
57
+ warningMessages: ['This is a warning message'],
58
+ showSuccessMessages: true,
59
+ },
60
+ })
61
+
62
+ cy.get('.v-radio-group').should('be.visible')
63
+ cy.get('.v-radio-group').should('have.class', 'warning-field')
64
+ cy.matchImageSnapshot('sy-radio-group-warning', cy.get('.v-radio-group'))
65
+ })
66
+
67
+ it('displays the radio group in success state', () => {
68
+ cy.mountWithVuetify(SyRadioGroup, {
69
+ props: {
70
+ label: 'Radio Group with Success',
71
+ options: defaultOptions,
72
+ modelValue: 'A',
73
+ required: true,
74
+ hasSuccess: true,
75
+ showSuccessMessages: true,
76
+ successMessages: ['Sélection valide.'],
77
+ },
78
+ })
79
+
80
+ cy.get('.v-radio-group').should('be.visible')
81
+ cy.get('.v-radio-group').should('have.class', 'success-field')
82
+ cy.matchImageSnapshot('sy-radio-group-success', cy.get('.v-radio-group'))
83
+ })
84
+
85
+ it('displays the radio group when disabled', () => {
86
+ cy.mountWithVuetify(SyRadioGroup, {
87
+ props: {
88
+ label: 'Disabled Radio Group',
89
+ options: defaultOptions,
90
+ modelValue: 'B',
91
+ disabled: true,
92
+ },
93
+ })
94
+
95
+ cy.get('.v-radio-group').should('be.visible')
96
+ cy.matchImageSnapshot('sy-radio-group-disabled', cy.get('.v-radio-group'))
97
+ })
98
+
99
+ it('displays the radio group when readonly', () => {
100
+ cy.mountWithVuetify(SyRadioGroup, {
101
+ props: {
102
+ label: 'Readonly Radio Group',
103
+ options: defaultOptions,
104
+ modelValue: 'B',
105
+ readonly: true,
106
+ },
107
+ })
108
+
109
+ cy.get('.v-radio-group').should('be.visible')
110
+ cy.matchImageSnapshot('sy-radio-group-readonly', cy.get('.v-radio-group'))
111
+ })
112
+
113
+ it('displays the radio group with compact density', () => {
114
+ cy.mountWithVuetify(SyRadioGroup, {
115
+ props: {
116
+ label: 'Compact Radio Group',
117
+ options: defaultOptions,
118
+ density: 'compact',
119
+ },
120
+ })
121
+
122
+ cy.get('.v-radio-group').should('be.visible')
123
+ cy.matchImageSnapshot('sy-radio-group-compact', cy.get('.v-radio-group'))
124
+ })
125
+
126
+ it('displays the radio group with comfortable density', () => {
127
+ cy.mountWithVuetify(SyRadioGroup, {
128
+ props: {
129
+ label: 'Comfortable Radio Group',
130
+ options: defaultOptions,
131
+ density: 'comfortable',
132
+ },
133
+ })
134
+
135
+ cy.get('.v-radio-group').should('be.visible')
136
+ cy.matchImageSnapshot('sy-radio-group-comfortable', cy.get('.v-radio-group'))
137
+ })
138
+
139
+ it('displays the radio group with asterisk', () => {
140
+ cy.mountWithVuetify(SyRadioGroup, {
141
+ props: {
142
+ label: 'Required Radio Group',
143
+ options: defaultOptions,
144
+ required: true,
145
+ displayAsterisk: true,
146
+ },
147
+ })
148
+
149
+ cy.get('.v-radio-group').should('be.visible')
150
+ cy.matchImageSnapshot('sy-radio-group-asterisk', cy.get('.v-radio-group'))
151
+ })
152
+
153
+ it('displays the radio group without details', () => {
154
+ cy.mountWithVuetify(SyRadioGroup, {
155
+ props: {
156
+ label: 'Radio Group without details',
157
+ options: defaultOptions,
158
+ hideDetails: true,
159
+ },
160
+ })
161
+
162
+ cy.get('.v-radio-group').should('be.visible')
163
+ cy.matchImageSnapshot('sy-radio-group-no-details', cy.get('.v-radio-group'))
164
+ })
165
+ })