@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
@@ -0,0 +1,773 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { ref } from 'vue'
3
+ import SyRadioGroup from '../SyRadioGroup.vue'
4
+ import SyForm from '../../SyForm/SyForm.vue'
5
+ import { VBtn, VForm } from 'vuetify/components'
6
+
7
+ const meta: Meta<typeof SyRadioGroup> = {
8
+ title: 'Composants/Formulaires/SyRadioGroup/Validation',
9
+ component: SyRadioGroup,
10
+ parameters: {
11
+ docs: {
12
+ description: {
13
+ component: 'Stories démontrant les différents cas de validation avec SyRadioGroup.',
14
+ },
15
+ },
16
+ },
17
+ argTypes: {
18
+ label: { control: 'text', description: 'Label du groupe' },
19
+ options: { control: 'object', description: 'Liste des options' },
20
+ required: { control: 'boolean', description: 'Champ requis' },
21
+ disabled: { control: 'boolean', description: 'Désactivé' },
22
+ readonly: { control: 'boolean', description: 'Lecture seule' },
23
+ useVuetifyValidation: { control: 'boolean', description: 'Validation Vuetify native' },
24
+ showSuccessMessages: { control: 'boolean', description: 'Afficher les messages de succès' },
25
+ },
26
+ args: {
27
+ label: 'Choisissez une option',
28
+ options: [
29
+ { label: 'Option A', value: 'a' },
30
+ { label: 'Option B', value: 'b' },
31
+ ],
32
+ required: true,
33
+ },
34
+ }
35
+
36
+ export default meta
37
+ type Story = StoryObj<typeof SyRadioGroup>
38
+
39
+ /**
40
+ * Validation avec customRules (règles personnalisées Synapse)
41
+ * Utilise le système de validation personnalisé du design system
42
+ */
43
+ export const WithError: Story = {
44
+ parameters: {
45
+ docs: {
46
+ description: {
47
+ story: `
48
+ ### Validation avec customRules
49
+ Utilise les **customRules** pour définir des règles de validation personnalisées.
50
+
51
+ **Caractéristiques :**
52
+ - Règles de type ValidationRule (Synapse)
53
+ - Support des messages d'erreur, warning, success
54
+ - Validation programmatique via validateOnSubmit
55
+ `,
56
+ },
57
+ },
58
+ sourceCode: [
59
+ {
60
+ name: 'Template',
61
+ code: `
62
+ <template>
63
+ <SyForm ref="form" @submit="onSubmit">
64
+ <SyRadioGroup
65
+ v-model="selected"
66
+ label="Sélectionnez l'option A"
67
+ :options="options"
68
+ :custom-rules="customRules"
69
+ required
70
+ />
71
+ <VBtn type="submit" color="primary">Valider</VBtn>
72
+ </SyForm>
73
+ </template>`,
74
+ },
75
+ {
76
+ name: 'Script',
77
+ code: `<script setup lang="ts">
78
+ import { ref } from 'vue'
79
+ import { SyRadioGroup, SyForm } from '@cnamts/synapse'
80
+ import { VBtn } from 'vuetify/components'
81
+ import type { ValidationRule } from '@/composables/unifyValidation/useValidation'
82
+
83
+ const selected = ref<string | null>(null)
84
+
85
+ const options = [
86
+ { label: 'Option A', value: 'a' },
87
+ { label: 'Option B', value: 'b' },
88
+ ]
89
+
90
+ const customRules: ValidationRule[] = [
91
+ {
92
+ type: 'custom',
93
+ options: {
94
+ validate: (value: unknown) => value === 'a',
95
+ message: 'Vous devez sélectionner l'option A',
96
+ fieldIdentifier: 'Option',
97
+ },
98
+ },
99
+ ]
100
+
101
+ const onSubmit = (event: { isValid: boolean }) => {
102
+ if (event.isValid) {
103
+ alert('Formulaire valide !')
104
+ }
105
+ }
106
+ </script>`,
107
+ },
108
+ ],
109
+ },
110
+
111
+ render: args => ({
112
+ components: { SyRadioGroup, SyForm, VBtn },
113
+ setup() {
114
+ const selected = ref<string | null>('a')
115
+
116
+ const customRules = [
117
+ {
118
+ type: 'custom',
119
+ options: {
120
+ validate: (value: unknown) => value === 'a',
121
+ message: 'Vous devez sélectionner l\'option A',
122
+ fieldIdentifier: 'Option',
123
+ },
124
+ },
125
+ ]
126
+
127
+ const onSubmit = (event: { isValid: boolean }) => {
128
+ if (event.isValid) {
129
+ alert('Formulaire valide !')
130
+ }
131
+ }
132
+
133
+ return { args, selected, customRules, onSubmit }
134
+ },
135
+ template: `
136
+ <SyForm ref="form" @submit="onSubmit">
137
+ <SyRadioGroup
138
+ v-model="selected"
139
+ v-bind="args"
140
+ :custom-rules="customRules"
141
+ />
142
+ <VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
143
+ </SyForm>
144
+ `,
145
+ }),
146
+ }
147
+
148
+ /**
149
+ * Validation avec customWarningRules (règles d'avertissement Synapse)
150
+ * La soumission est autorisée malgré le warning
151
+ */
152
+ export const WithWarning: Story = {
153
+ parameters: {
154
+ docs: {
155
+ description: {
156
+ story: `
157
+ ### Validation avec customWarningRules
158
+ Utilise les **customWarningRules** pour afficher un avertissement non bloquant.
159
+
160
+ **Caractéristiques :**
161
+ - Le warning n'empêche pas la soumission du formulaire
162
+ - Affiché avec la couleur warning (orange)
163
+ - Utile pour des conseils ou recommandations
164
+ `,
165
+ },
166
+ },
167
+ sourceCode: [
168
+ {
169
+ name: 'Template',
170
+ code: `
171
+ <template>
172
+ <SyForm ref="form" @submit="onSubmit">
173
+ <SyRadioGroup
174
+ v-model="selected"
175
+ label="Choisissez une option"
176
+ :options="options"
177
+ :custom-warning-rules="customWarningRules"
178
+ />
179
+ <VBtn type="submit" color="primary">Valider</VBtn>
180
+ </SyForm>
181
+ </template>`,
182
+ },
183
+ {
184
+ name: 'Script',
185
+ code: `<script setup lang="ts">
186
+ import { ref } from 'vue'
187
+ import { SyRadioGroup, SyForm } from '@cnamts/synapse'
188
+ import { VBtn } from 'vuetify/components'
189
+ import type { ValidationRule } from '@/composables/unifyValidation/useValidation'
190
+
191
+ const selected = ref<string | null>('b')
192
+
193
+ const options = [
194
+ { label: 'Option A (recommandée)', value: 'a' },
195
+ { label: 'Option B', value: 'b' },
196
+ ]
197
+
198
+ const customWarningRules: ValidationRule[] = [
199
+ {
200
+ type: 'custom',
201
+ options: {
202
+ validate: (value: unknown) => value === 'a',
203
+ message: 'L'option A est recommandée',
204
+ fieldIdentifier: 'Option',
205
+ },
206
+ },
207
+ ]
208
+
209
+ const onSubmit = (event: { isValid: boolean }) => {
210
+ alert('Formulaire soumis (les warnings ne bloquent pas la soumission)')
211
+ }
212
+ </script>`,
213
+ },
214
+ ],
215
+ },
216
+
217
+ render: args => ({
218
+ components: { SyRadioGroup, SyForm, VBtn },
219
+ setup() {
220
+ const selected = ref<string | null>('b')
221
+
222
+ const customWarningRules = [
223
+ {
224
+ type: 'custom',
225
+ options: {
226
+ validate: (value: unknown) => value === 'a',
227
+ message: 'L\'option A est recommandée',
228
+ fieldIdentifier: 'Option',
229
+ },
230
+ },
231
+ ]
232
+
233
+ const onSubmit = () => {
234
+ alert('Formulaire soumis (les warnings ne bloquent pas la soumission)')
235
+ }
236
+
237
+ return { args, selected, customWarningRules, onSubmit }
238
+ },
239
+ template: `
240
+ <SyForm ref="form" @submit="onSubmit">
241
+ <SyRadioGroup
242
+ v-model="selected"
243
+ v-bind="args"
244
+ :custom-warning-rules="customWarningRules"
245
+ />
246
+ <VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
247
+ </SyForm>
248
+ `,
249
+ }),
250
+ }
251
+
252
+ /**
253
+ * showSuccessMessages: false — les messages de succès sont masqués
254
+ * Le champ est validé mais aucun message positif n'est affiché
255
+ */
256
+ export const NoSuccessMessage: Story = {
257
+ parameters: {
258
+ docs: {
259
+ description: {
260
+ story: `
261
+ ### showSuccessMessages à false
262
+ Avec **showSuccessMessages: false**, la validation se produit normalement mais les messages de succès ne s'affichent pas.
263
+
264
+ **Caractéristiques :**
265
+ - Sélectionner une option valide le champ silencieusement
266
+ - Aucun message vert n'est affiché
267
+ - Utile quand le feedback positif est jugé superflu
268
+ `,
269
+ },
270
+ },
271
+ sourceCode: [
272
+ {
273
+ name: 'Template',
274
+ code: `
275
+ <template>
276
+ <SyRadioGroup
277
+ v-model="selected"
278
+ label="Choisissez une option"
279
+ :options="options"
280
+ :show-success-messages="false"
281
+ required
282
+ />
283
+ </template>`,
284
+ },
285
+ {
286
+ name: 'Script',
287
+ code: `<script setup lang="ts">
288
+ import { ref } from 'vue'
289
+ import { SyRadioGroup } from '@cnamts/synapse'
290
+
291
+ const selected = ref<string | null>('a')
292
+
293
+ const options = [
294
+ { label: 'Option A', value: 'a' },
295
+ { label: 'Option B', value: 'b' },
296
+ ]
297
+ </script>`,
298
+ },
299
+ ],
300
+ },
301
+
302
+ render: args => ({
303
+ components: { SyRadioGroup },
304
+ setup() {
305
+ const selected = ref<string | null>('a')
306
+ return { args, selected }
307
+ },
308
+ template: `
309
+ <SyRadioGroup
310
+ v-model="selected"
311
+ v-bind="args"
312
+ :show-success-messages="false"
313
+ />
314
+ `,
315
+ }),
316
+ }
317
+
318
+ /**
319
+ * disableErrorHandling: true — la validation est complètement désactivée
320
+ */
321
+ export const DisableErrorHandling: Story = {
322
+ parameters: {
323
+ docs: {
324
+ description: {
325
+ story: `
326
+ ### disableErrorHandling à true
327
+ Avec **disableErrorHandling: true**, toute la validation est désactivée : aucun message d'erreur, warning ou succès ne s'affiche, quelle que soit la valeur.
328
+
329
+ **Caractéristiques :**
330
+ - Aucune règle n'est évaluée
331
+ - Le champ ne passe jamais dans un état d'erreur visuel
332
+ - Utile pour des champs en lecture contrôlée par le parent
333
+ `,
334
+ },
335
+ },
336
+ sourceCode: [
337
+ {
338
+ name: 'Template',
339
+ code: `
340
+ <template>
341
+ <SyForm>
342
+ <SyRadioGroup
343
+ v-model="selected"
344
+ label="Choisissez une option"
345
+ :options="options"
346
+ disable-error-handling
347
+ required
348
+ />
349
+ <VBtn type="submit" color="primary">Valider (aucune erreur)</VBtn>
350
+ </SyForm>
351
+ </template>`,
352
+ },
353
+ {
354
+ name: 'Script',
355
+ code: `<script setup lang="ts">
356
+ import { ref } from 'vue'
357
+ import { SyRadioGroup, SyForm } from '@cnamts/synapse'
358
+ import { VBtn } from 'vuetify/components'
359
+
360
+ const selected = ref<string | null>(null)
361
+
362
+ const options = [
363
+ { label: 'Option A', value: 'a' },
364
+ { label: 'Option B', value: 'b' },
365
+ ]
366
+ </script>`,
367
+ },
368
+ ],
369
+ },
370
+
371
+ render: args => ({
372
+ components: { SyRadioGroup, SyForm, VBtn },
373
+ setup() {
374
+ const selected = ref<string | null>(null)
375
+ return { args, selected }
376
+ },
377
+ template: `
378
+ <SyForm>
379
+ <SyRadioGroup
380
+ v-model="selected"
381
+ v-bind="args"
382
+ disable-error-handling
383
+ />
384
+ <VBtn type="submit" class="mt-2" color="primary">Valider (aucune erreur)</VBtn>
385
+ </SyForm>
386
+ `,
387
+ }),
388
+ }
389
+
390
+ /**
391
+ * Validation avec SyForm (composant formulaire du design system)
392
+ * Utilise le système de validation unifié avec useValidation et useValidatable
393
+ */
394
+ export const SyFormValidation: Story = {
395
+ parameters: {
396
+ docs: {
397
+ description: {
398
+ story: `
399
+ ### Validation avec SyForm
400
+ Utilise le composant **SyForm** du design system qui intègre le système de validation unifié.
401
+
402
+ **Caractéristiques :**
403
+ - Validation automatique à la soumission
404
+ - Gestion des erreurs via le composable useValidation
405
+ - Support des customRules, warningRules, successRules
406
+ - Messages de validation traduits
407
+ `,
408
+ },
409
+ },
410
+ sourceCode: [
411
+ {
412
+ name: 'Template',
413
+ code: `
414
+ <template>
415
+ <SyForm ref="form" @submit="onSubmit">
416
+ <SyRadioGroup
417
+ v-model="selected"
418
+ label="Choisissez une option"
419
+ :options="options"
420
+ required
421
+ />
422
+ <VBtn type="submit" color="primary">Valider</VBtn>
423
+ </SyForm>
424
+ </template>`,
425
+ },
426
+ {
427
+ name: 'Script',
428
+ code: `<script setup lang="ts">
429
+ import { ref } from 'vue'
430
+ import { SyRadioGroup, SyForm } from '@cnamts/synapse'
431
+ import { VBtn } from 'vuetify/components'
432
+
433
+ const selected = ref<string | null>(null)
434
+
435
+ const options = [
436
+ { label: 'Option A', value: 'a' },
437
+ { label: 'Option B', value: 'b' },
438
+ ]
439
+
440
+ const onSubmit = (event: { isValid: boolean }) => {
441
+ if (event.isValid) {
442
+ alert('Formulaire valide !')
443
+ }
444
+ }
445
+ </script>`,
446
+ },
447
+ ],
448
+ },
449
+
450
+ render: args => ({
451
+ components: { SyRadioGroup, SyForm, VBtn },
452
+ setup() {
453
+ const selected = ref<string | null>(null)
454
+
455
+ const onSubmit = (event: { isValid: boolean }) => {
456
+ if (event.isValid) {
457
+ alert('Formulaire valide !')
458
+ }
459
+ }
460
+
461
+ return { args, selected, onSubmit }
462
+ },
463
+ template: `
464
+ <SyForm ref="form" @submit="onSubmit">
465
+ <SyRadioGroup
466
+ v-model="selected"
467
+ v-bind="args"
468
+ />
469
+ <VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
470
+ </SyForm>
471
+ `,
472
+ }),
473
+ }
474
+
475
+ /**
476
+ * Validation avec VForm natif (sans useVuetifyValidation)
477
+ * Utilise VForm de Vuetify avec la validation Synapse
478
+ */
479
+ export const VFormValidation: Story = {
480
+ parameters: {
481
+ docs: {
482
+ description: {
483
+ story: `
484
+ ### Validation avec VForm natif
485
+ Intégration avec **VForm** natif Vuetify en conservant la validation Synapse. La soumission appelle **validateOnSubmit()** manuellement sur le composant pour déclencher la validation.
486
+
487
+ **Caractéristiques :**
488
+ - Validation Synapse (customRules, required, etc.)
489
+ - Pas de useVuetifyValidation
490
+ - Appel manuel de validateOnSubmit() sur le ref du composant
491
+ `,
492
+ },
493
+ },
494
+ sourceCode: [
495
+ {
496
+ name: 'Template',
497
+ code: `
498
+ <template>
499
+ <VForm @submit.prevent="onSubmit">
500
+ <SyRadioGroup
501
+ ref="radioRef"
502
+ v-model="selected"
503
+ label="Choisissez une option"
504
+ :options="options"
505
+ required
506
+ class="mb-4"
507
+ />
508
+ <VBtn type="submit" color="primary">Valider</VBtn>
509
+ </VForm>
510
+ </template>`,
511
+ },
512
+ {
513
+ name: 'Script',
514
+ code: `<script setup lang="ts">
515
+ import { ref } from 'vue'
516
+ import { SyRadioGroup } from '@cnamts/synapse'
517
+ import { VBtn, VForm } from 'vuetify/components'
518
+
519
+ const selected = ref<string | null>(null)
520
+ const radioRef = ref(null)
521
+
522
+ const options = [
523
+ { label: 'Option A', value: 'a' },
524
+ { label: 'Option B', value: 'b' },
525
+ ]
526
+
527
+ async function onSubmit() {
528
+ const isValid = await radioRef.value?.validateOnSubmit()
529
+ if (isValid) {
530
+ alert('Formulaire valide : ' + JSON.stringify(selected.value))
531
+ } else {
532
+ alert('Formulaire invalide : veuillez choisir une option.')
533
+ }
534
+ }
535
+ </script>`,
536
+ },
537
+ ],
538
+ },
539
+
540
+ render: args => ({
541
+ components: { SyRadioGroup, VForm, VBtn },
542
+ setup() {
543
+ const selected = ref<string | null>(null)
544
+ const radioRef = ref<{ validateOnSubmit: () => Promise<boolean> } | null>(null)
545
+
546
+ async function onSubmit() {
547
+ const isValid = await radioRef.value?.validateOnSubmit()
548
+ if (isValid) {
549
+ alert(`Formulaire valide : ${JSON.stringify(selected.value)}`)
550
+ }
551
+ else {
552
+ alert('Formulaire invalide : veuillez choisir une option.')
553
+ }
554
+ }
555
+
556
+ return { args, selected, radioRef, onSubmit }
557
+ },
558
+ template: `
559
+ <div class="pa-4">
560
+ <VForm @submit.prevent="onSubmit">
561
+ <SyRadioGroup
562
+ ref="radioRef"
563
+ v-model="selected"
564
+ v-bind="args"
565
+ class="mb-4"
566
+ />
567
+ <VBtn type="submit" color="primary">Valider</VBtn>
568
+ </VForm>
569
+ </div>
570
+ `,
571
+ }),
572
+ }
573
+
574
+ /**
575
+ * Validation avec VForm (composant natif Vuetify) + useVuetifyValidation
576
+ * Utilise la validation native de Vuetify
577
+ */
578
+ export const VFormVuetifyValidation: Story = {
579
+ parameters: {
580
+ docs: {
581
+ description: {
582
+ story: `
583
+ ### Validation avec VForm et useVuetifyValidation
584
+ Utilise le composant natif **VForm** de Vuetify avec la prop **useVuetifyValidation**.
585
+
586
+ **Caractéristiques :**
587
+ - Validation native Vuetify via les props :rules
588
+ - Compatible avec VForm de Vuetify
589
+ - Pas de messages de succès (Vuetify ne les gère pas)
590
+ - Validation côté template avec fonctions
591
+ `,
592
+ },
593
+ },
594
+ sourceCode: [
595
+ {
596
+ name: 'Template',
597
+ code: `
598
+ <template>
599
+ <VForm ref="form" @submit.prevent="submit">
600
+ <SyRadioGroup
601
+ v-model="selected"
602
+ label="Choisissez une option"
603
+ :options="options"
604
+ :rules="rules"
605
+ use-vuetify-validation
606
+ required
607
+ />
608
+ <VBtn type="submit" color="primary">Valider</VBtn>
609
+ </VForm>
610
+ </template>`,
611
+ },
612
+ {
613
+ name: 'Script',
614
+ code: `<script setup lang="ts">
615
+ import { ref } from 'vue'
616
+ import { SyRadioGroup } from '@cnamts/synapse'
617
+ import { VBtn, VForm } from 'vuetify/components'
618
+ import type { VuetifyValidationRule } from '@/composables/unifyValidation/useValidation'
619
+
620
+ const selected = ref<string | null>(null)
621
+ const form = ref<InstanceType<typeof VForm> | null>(null)
622
+
623
+ const options = [
624
+ { label: 'Option A', value: 'a' },
625
+ { label: 'Option B', value: 'b' },
626
+ ]
627
+
628
+ const rules: VuetifyValidationRule[] = [
629
+ (v: string | null) => !!v || 'Une sélection est requise',
630
+ (v: string | null) => v === 'a' || 'Vous devez sélectionner l'option A',
631
+ ]
632
+
633
+ const submit = async () => {
634
+ const { valid } = await form.value?.validate() || { valid: false }
635
+ if (valid) {
636
+ alert('Formulaire valide !')
637
+ }
638
+ }
639
+ </script>`,
640
+ },
641
+ ],
642
+ },
643
+
644
+ render: args => ({
645
+ components: { SyRadioGroup, VForm, VBtn },
646
+ setup() {
647
+ const selected = ref<string | null>(null)
648
+ const form = ref<InstanceType<typeof VForm> | null>(null)
649
+
650
+ const rules = [
651
+ (v: string | null) => !!v || 'Une sélection est requise',
652
+ (v: string | null) => v === 'a' || 'Vous devez sélectionner l\'option A',
653
+ ]
654
+
655
+ const submit = async () => {
656
+ const { valid } = await form.value?.validate() || { valid: false }
657
+ if (valid) {
658
+ alert('Formulaire valide !')
659
+ }
660
+ }
661
+
662
+ return { args, selected, form, rules, submit }
663
+ },
664
+ template: `
665
+ <VForm ref="form" @submit.prevent="submit">
666
+ <SyRadioGroup
667
+ v-model="selected"
668
+ v-bind="args"
669
+ :rules="rules"
670
+ use-vuetify-validation
671
+ />
672
+ <VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
673
+ </VForm>
674
+ `,
675
+ }),
676
+ }
677
+
678
+ /**
679
+ * Validation avec SyForm et useVuetifyValidation
680
+ * Combine le SyForm avec la validation Vuetify native
681
+ */
682
+ export const SyFormVuetifyValidation: Story = {
683
+ parameters: {
684
+ docs: {
685
+ description: {
686
+ story: `
687
+ ### Validation avec SyForm et useVuetifyValidation
688
+ Combine **SyForm** avec la prop **useVuetifyValidation** pour utiliser les règles Vuetify.
689
+
690
+ **Caractéristiques :**
691
+ - SyForm gère la soumission
692
+ - useVuetifyValidation active la validation native Vuetify
693
+ - Les règles sont passées via la prop :rules
694
+ `,
695
+ },
696
+ },
697
+ sourceCode: [
698
+ {
699
+ name: 'Template',
700
+ code: `
701
+ <template>
702
+ <SyForm ref="form" @submit="onSubmit">
703
+ <SyRadioGroup
704
+ v-model="selected"
705
+ label="Choisissez une option"
706
+ :options="options"
707
+ :rules="rules"
708
+ use-vuetify-validation
709
+ required
710
+ />
711
+ <VBtn type="submit" color="primary">Valider</VBtn>
712
+ </SyForm>
713
+ </template>`,
714
+ },
715
+ {
716
+ name: 'Script',
717
+ code: `<script setup lang="ts">
718
+ import { ref } from 'vue'
719
+ import { SyRadioGroup, SyForm } from '@cnamts/synapse'
720
+ import { VBtn } from 'vuetify/components'
721
+ import type { VuetifyValidationRule } from '@/composables/unifyValidation/useValidation'
722
+
723
+ const selected = ref<string | null>(null)
724
+
725
+ const options = [
726
+ { label: 'Option A', value: 'a' },
727
+ { label: 'Option B', value: 'b' },
728
+ ]
729
+
730
+ const rules: VuetifyValidationRule[] = [
731
+ (v: string | null) => !!v || 'Une sélection est requise',
732
+ ]
733
+
734
+ const onSubmit = (event: { isValid: boolean }) => {
735
+ if (event.isValid) {
736
+ alert('Formulaire valide !')
737
+ }
738
+ }
739
+ </script>`,
740
+ },
741
+ ],
742
+ },
743
+
744
+ render: args => ({
745
+ components: { SyRadioGroup, SyForm, VBtn },
746
+ setup() {
747
+ const selected = ref<string | null>(null)
748
+
749
+ const rules = [
750
+ (v: string | null) => !!v || 'Une sélection est requise',
751
+ ]
752
+
753
+ const onSubmit = (event: { isValid: boolean }) => {
754
+ if (event.isValid) {
755
+ alert('Formulaire valide !')
756
+ }
757
+ }
758
+
759
+ return { args, selected, rules, onSubmit }
760
+ },
761
+ template: `
762
+ <SyForm ref="form" @submit="onSubmit">
763
+ <SyRadioGroup
764
+ v-model="selected"
765
+ v-bind="args"
766
+ :rules="rules"
767
+ use-vuetify-validation
768
+ />
769
+ <VBtn type="submit" class="mt-2" color="primary">Valider</VBtn>
770
+ </SyForm>
771
+ `,
772
+ }),
773
+ }