@cnamts/synapse 1.0.23 → 1.0.25

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 (574) hide show
  1. package/README.md +27 -5
  2. package/dist/AutocompleteFilter-D7qBuCAP.js +114 -0
  3. package/dist/AutocompleteFilter-Df9i5mAl.cjs +1 -0
  4. package/dist/DateFilter-BJD6FMev.cjs +1 -0
  5. package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BitMWrMU.js} +1 -1
  6. package/dist/{NumberFilter-vP38Wp6j.js → NumberFilter-BTLUxw0a.js} +3 -3
  7. package/dist/NumberFilter-DGCzCXzI.cjs +1 -0
  8. package/dist/{PeriodFilter-Ba1uYUnT.js → PeriodFilter-B5rUIPAC.js} +1 -1
  9. package/dist/PeriodFilter-DO_ecTZW.cjs +1 -0
  10. package/dist/SelectFilter-CGwcKWLm.cjs +1 -0
  11. package/dist/SelectFilter-l4QnRcuk.js +135 -0
  12. package/dist/TextFilter-B8nf7xoK.cjs +1 -0
  13. package/dist/{TextFilter-B84dpnoq.js → TextFilter-C9hj6Qrp.js} +7 -7
  14. package/dist/apLightTheme-CEK4iY3f.cjs +1 -0
  15. package/dist/apLightTheme-DnIM24Lv.js +950 -0
  16. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  17. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  18. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  19. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  20. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +60 -60
  21. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  22. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  23. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7501 -10095
  24. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +21 -21
  25. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +41 -41
  26. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  27. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  28. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +117 -151
  29. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +5 -5
  30. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -16
  31. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +8 -8
  32. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +31 -506
  33. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
  34. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  35. package/dist/components/Customs/SyTextField/SyTextField.d.ts +69 -89
  36. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -791
  37. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -412
  38. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -160
  39. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  40. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  41. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +1 -0
  42. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  43. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  44. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  45. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  46. package/dist/components/FileList/FileList.d.ts +6 -0
  47. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  48. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +17 -17
  49. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  50. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  51. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  52. package/dist/components/MonthPicker/MonthPicker.d.ts +86 -127
  53. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -126
  54. package/dist/components/NirField/NirField.d.ts +202 -278
  55. package/dist/components/NirField/locales.d.ts +10 -10
  56. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  57. package/dist/components/PasswordField/PasswordField.d.ts +8 -9
  58. package/dist/components/PeriodField/PeriodField.d.ts +1352 -1680
  59. package/dist/components/PhoneField/PhoneField.d.ts +88 -129
  60. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  61. package/dist/components/SyTextArea/SyTextArea.d.ts +34 -14
  62. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  63. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +10 -6
  64. package/dist/components/Tables/SyTable/SyTable.d.ts +10 -6
  65. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  66. package/dist/components/Tables/common/SyTablePagination.d.ts +19 -19
  67. package/dist/components/Tables/common/TableHeader.d.ts +5 -0
  68. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  69. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  70. package/dist/components/Tables/common/locales.d.ts +3 -0
  71. package/dist/components/Tables/common/types.d.ts +21 -3
  72. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  73. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  74. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  75. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  76. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  77. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +7 -6
  78. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  79. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  80. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  81. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  82. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  83. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  84. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  85. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  86. package/dist/composables/validation/useValidation.d.ts +19 -9
  87. package/dist/design-system-v3.d.ts +2 -0
  88. package/dist/design-system-v3.js +186 -187
  89. package/dist/design-system-v3.umd.cjs +1 -1066
  90. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  91. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  92. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  93. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  94. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  95. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  96. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  97. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  98. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  99. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  100. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  101. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  102. package/dist/designTokens/utils/index.d.ts +2 -2
  103. package/dist/main-ByDPHpae.cjs +1067 -0
  104. package/dist/main-Cpx8Co6H.js +38869 -0
  105. package/dist/main.d.ts +0 -1
  106. package/dist/synapse.css +1 -0
  107. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  108. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  109. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  110. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  111. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  112. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  113. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  114. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  115. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  116. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  117. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  118. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  119. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  120. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  121. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  122. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  123. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  124. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  125. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  126. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  127. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  128. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  129. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  130. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  131. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  132. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  133. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  134. package/dist/tooth-44-CazyQucj.cjs +1 -0
  135. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  136. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  137. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  138. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  139. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  140. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  141. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  142. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  143. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  144. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  145. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  146. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  147. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  148. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  149. package/dist/tooth-71-D473PPO5.cjs +1 -0
  150. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  151. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  152. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  153. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  154. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  155. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  156. package/dist/tooth-83-KV010j64.cjs +1 -0
  157. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  158. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  159. package/dist/utils/functions/classToHex.d.ts +1 -1
  160. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  161. package/dist/vuetifyConfig.js +522 -0
  162. package/dist/vuetifyConfig.umd.cjs +1 -0
  163. package/package.json +37 -20
  164. package/src/assets/amelipro/apTokens2026.scss +5 -5
  165. package/src/assets/overrides/_breakpoints.scss +25 -0
  166. package/src/assets/overrides/_btns.scss +0 -8
  167. package/src/assets/overrides/_forms.scss +1 -3
  168. package/src/assets/overrides/_icons.scss +14 -10
  169. package/src/assets/overrides/_otp.scss +41 -0
  170. package/src/assets/overrides/_tables.scss +11 -20
  171. package/src/assets/overrides/_tooltips.scss +17 -7
  172. package/src/assets/overrides/_typography.scss +35 -47
  173. package/src/assets/overrides/_utilities.scss +43 -47
  174. package/src/assets/themes.scss +1 -0
  175. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  176. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  177. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  178. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  179. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  180. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  181. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  182. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  183. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  184. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  185. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  186. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  187. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  188. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  189. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  190. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  191. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  192. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  193. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  194. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  195. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  196. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  197. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  198. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  199. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  200. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  201. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  202. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  203. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  204. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  205. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  206. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  207. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +2 -2
  208. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  209. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  210. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  211. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  212. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  213. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  214. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  215. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  216. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  217. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  218. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  219. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  220. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  221. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  222. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  223. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  224. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  225. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  226. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  227. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  228. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  229. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  230. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  231. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  232. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  233. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  234. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  235. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  236. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  237. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  238. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  239. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  240. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  241. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  242. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  243. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  244. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  245. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  246. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  247. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  248. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  249. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  250. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  251. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  252. package/src/components/Captcha/Captcha.vue +1 -3
  253. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  254. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +12 -12
  255. package/src/components/ChipList/ChipList.stories.ts +0 -15
  256. package/src/components/ChipList/ChipList.vue +19 -17
  257. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  258. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  259. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +0 -2
  260. package/src/components/CopyBtn/CopyBtn.vue +1 -3
  261. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  262. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +0 -9
  263. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  264. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  265. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +28 -7
  266. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  267. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +209 -0
  268. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +14 -10
  269. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  270. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +12 -15
  271. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  272. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +1 -39
  273. package/src/components/Customs/Selects/SySelect/SySelect.vue +274 -71
  274. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  275. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +89 -0
  276. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  277. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  278. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  279. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +45 -11
  280. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +53 -3
  281. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  282. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  283. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  284. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  285. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  286. package/src/components/Customs/SyTabs/SyTabs.stories.ts +32 -33
  287. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  288. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  289. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  290. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  291. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  292. package/src/components/Customs/SyTextField/SyTextField.stories.ts +50 -68
  293. package/src/components/Customs/SyTextField/SyTextField.vue +156 -161
  294. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +32 -0
  295. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +120 -11
  296. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  297. package/src/components/DatePicker/CalendarMode/DatePicker.vue +342 -237
  298. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  299. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  300. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  301. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +215 -175
  302. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  303. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +33 -10
  304. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  305. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  306. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  307. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  308. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  309. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +71 -67
  310. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  311. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  312. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  313. package/src/components/DatePicker/composables/index.ts +1 -0
  314. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  315. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  316. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  317. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  318. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  319. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  320. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  321. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  322. package/src/components/DatePicker/composables/useDatePickerState.ts +24 -0
  323. package/src/components/DatePicker/composables/useDateTextField.ts +6 -6
  324. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  325. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  326. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  327. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  328. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  329. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  330. package/src/components/DialogBox/DialogBox.vue +3 -5
  331. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  332. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  333. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  334. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  335. package/src/components/FileList/FileList.vue +9 -2
  336. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  337. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  338. package/src/components/FileUpload/FileUpload.vue +3 -5
  339. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  340. package/src/components/FilterInline/FilterInline.vue +1 -3
  341. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  342. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  343. package/src/components/FilterSideBar/FilterSideBar.vue +7 -0
  344. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  345. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  346. package/src/components/FooterBar/FooterBar.vue +9 -13
  347. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  348. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  349. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  350. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  351. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  352. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  353. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  354. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  355. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  356. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  357. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  358. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  359. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  360. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  361. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  362. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  363. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  364. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  365. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  366. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  367. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  368. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  369. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  370. package/src/components/LangBtn/LangBtn.vue +2 -4
  371. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  372. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -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/LogoBrandSection/LogoBrandSection.vue +2 -2
  380. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  381. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  382. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  383. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  384. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +2 -1
  385. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +7 -7
  386. package/src/components/NirField/NirField.stories.ts +6 -2
  387. package/src/components/NirField/NirField.vue +67 -265
  388. package/src/components/NirField/accessibilite/Accessibility.mdx +102 -7
  389. package/src/components/NirField/locales.ts +1 -1
  390. package/src/components/NirField/tests/NirField.spec.ts +124 -0
  391. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  392. package/src/components/NirField/useNirValidation.ts +277 -0
  393. package/src/components/NotificationBar/Notification/Notification.vue +5 -7
  394. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  395. package/src/components/PaginatedTable/PaginatedTable.vue +2 -3
  396. package/src/components/PaginatedTable/Pagination.vue +3 -5
  397. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  398. package/src/components/PasswordField/PasswordField.vue +26 -34
  399. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  400. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  401. package/src/components/PeriodField/PeriodField.vue +57 -57
  402. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  403. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  404. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  405. package/src/components/PhoneField/PhoneField.vue +8 -9
  406. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  407. package/src/components/RangeField/RangeField.vue +6 -0
  408. package/src/components/RangeField/RangeSlider/RangeSlider.vue +0 -2
  409. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  410. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  411. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  412. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  413. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  414. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  415. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  416. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +6 -8
  417. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +3 -5
  418. package/src/components/SearchListField/SearchListField.vue +0 -2
  419. package/src/components/SkipLink/SkipLink.vue +2 -4
  420. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  421. package/src/components/SubHeader/SubHeader.vue +1 -1
  422. package/src/components/SyAlert/SyAlert.vue +7 -9
  423. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  424. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  425. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  426. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  427. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  428. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  429. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  430. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  431. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  432. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  433. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  434. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  435. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  436. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  437. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  438. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +839 -1
  439. package/src/components/Tables/SyServerTable/SyServerTable.vue +154 -95
  440. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +81 -0
  441. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +390 -0
  442. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  443. package/src/components/Tables/SyTable/SyTable.stories.ts +556 -1
  444. package/src/components/Tables/SyTable/SyTable.vue +136 -60
  445. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +79 -0
  446. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +382 -0
  447. package/src/components/Tables/common/SyTableFilter.vue +49 -4
  448. package/src/components/Tables/common/SyTablePagination.vue +142 -19
  449. package/src/components/Tables/common/TableHeader.vue +45 -4
  450. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  451. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  452. package/src/components/Tables/common/filters/SelectFilter.vue +11 -12
  453. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  454. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  455. package/src/components/Tables/common/filters/locales.ts +0 -1
  456. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  457. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  458. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  459. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  460. package/src/components/Tables/common/locales.ts +3 -0
  461. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  462. package/src/components/Tables/common/tableStyles.scss +60 -19
  463. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  464. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  465. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  466. package/src/components/Tables/common/types.ts +15 -4
  467. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  468. package/src/components/Tables/common/usePagination.ts +13 -0
  469. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  470. package/src/components/Tables/common/useTableHeaders.ts +52 -30
  471. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  472. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  473. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  474. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  475. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  476. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  477. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  478. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  479. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  480. package/src/composables/rules/useFieldValidation.ts +34 -17
  481. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  482. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  483. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  484. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  485. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  486. package/src/composables/unifyValidation/useValidation.ts +190 -0
  487. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  488. package/src/composables/useFormFieldErrorHandling.ts +4 -7
  489. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  490. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  491. package/src/composables/validation/useFormValidation.ts +20 -13
  492. package/src/composables/validation/useValidatable.ts +8 -1
  493. package/src/composables/validation/useValidation.ts +151 -99
  494. package/src/composantsVuetify/Introduction.mdx +48 -0
  495. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  496. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  497. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  498. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  499. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  500. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  501. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  502. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  503. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  504. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  505. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  506. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  507. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  508. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  509. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  510. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  511. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  512. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  513. package/src/designTokens/tokens/amelipro/apLightTheme.ts +1 -1
  514. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  515. package/src/designTokens/tokens/baseColors.ts +129 -0
  516. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  517. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  518. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  519. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +1 -1
  520. package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
  521. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  522. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  523. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  524. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  525. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  526. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  527. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  528. package/src/designTokens/utils/index.ts +2 -2
  529. package/src/main.ts +0 -2
  530. package/src/stories/Accessibilite/AuditDesignSystem.mdx +0 -11
  531. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  532. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  533. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +8 -1
  534. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +51 -10
  535. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -9
  536. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +48 -58
  537. package/src/stories/Components/Components.stories.ts +113 -9
  538. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  539. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  540. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  541. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  542. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  543. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  544. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  545. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  546. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  547. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  548. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  549. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  550. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  551. package/src/stories/styles/accessibility-guide.css +3 -3
  552. package/src/utils/functions/classToHex.ts +6 -34
  553. package/src/utils/functions/createHexResolver.ts +45 -0
  554. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  555. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  556. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  557. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  558. package/dist/SelectFilter-BioGT6Nn.js +0 -136
  559. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  560. package/dist/main-aLKwdMi1.js +0 -37886
  561. package/dist/style.css +0 -1
  562. package/src/assets/apTokens.scss +0 -343
  563. package/src/assets/overrides/_container.scss +0 -36
  564. package/src/assets/tokens.scss +0 -388
  565. package/src/components/DatePicker/Accessibilite.mdx +0 -14
  566. package/src/designTokens/apColors.md +0 -66
  567. package/src/designTokens/cnamColors.md +0 -193
  568. package/src/designTokens/paColors.md +0 -66
  569. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  570. package/src/designTokens/tokens/json/primitives.json +0 -209
  571. package/src/designTokens/tokens/json/semantic.json +0 -120
  572. package/src/designTokens/utils/convertGaps.ts +0 -11
  573. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  574. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -5,7 +5,7 @@ import { fn } from '@storybook/test'
5
5
 
6
6
  // Interface pour typer correctement le composant SyCheckbox avec sa méthode validateOnSubmit
7
7
  interface SyCheckboxInstance {
8
- validateOnSubmit: () => boolean
8
+ validateOnSubmit: () => Promise<boolean>
9
9
  }
10
10
 
11
11
  const meta = {
@@ -171,9 +171,6 @@ export const Indeterminate: Story = {
171
171
  template: `<SyCheckbox v-model="checked" :indeterminate="indeterminate" v-bind="args" label="Case à cocher indéterminée" />`,
172
172
  }),
173
173
  parameters: {
174
- a11y: {
175
- disable: true,
176
- },
177
174
  sourceCode: [
178
175
  {
179
176
  name: 'Template',
@@ -207,9 +204,6 @@ Cette case à cocher est dans un état indéterminé, généralement utilisé lo
207
204
 
208
205
  export const WithControlsIds: Story = {
209
206
  parameters: {
210
- a11y: {
211
- disable: true,
212
- },
213
207
  sourceCode: [
214
208
  {
215
209
  name: 'Template',
@@ -702,11 +696,11 @@ const rules = [
702
696
  },
703
697
  ]
704
698
 
705
- const validateForm = () => {
699
+ const validateForm = async (): Promise<void> => {
706
700
  if (!checkbox.value || !checkbox2.value) return
707
701
  hasError.value = true
708
- const isValid = checkbox.value.validateOnSubmit()
709
- const isValid2 = checkbox2.value.validateOnSubmit()
702
+ const isValid = await checkbox.value.validateOnSubmit()
703
+ const isValid2 = await checkbox2.value.validateOnSubmit()
710
704
  if (isValid && isValid2) {
711
705
  formSubmitted.value = true
712
706
  hasError.value = false
@@ -735,18 +729,18 @@ Cette case à cocher utilise des règles de validation personnalisées et valide
735
729
  const hasError = ref(false)
736
730
 
737
731
  // Revalider quand les valeurs changent
738
- watch([checked, checked2], () => {
732
+ watch([checked, checked2], async () => {
739
733
  if (hasError.value && checkbox.value && checkbox2.value) {
740
- checkbox.value.validateOnSubmit()
741
- checkbox2.value.validateOnSubmit()
734
+ await checkbox.value.validateOnSubmit()
735
+ await checkbox2.value.validateOnSubmit()
742
736
  }
743
737
  })
744
738
 
745
- const validateForm = () => {
739
+ const validateForm = async (): Promise<void> => {
746
740
  if (!checkbox.value || !checkbox2.value) return
747
741
  hasError.value = true
748
- const isValid = checkbox.value.validateOnSubmit()
749
- const isValid2 = checkbox2.value.validateOnSubmit()
742
+ const isValid = await checkbox.value.validateOnSubmit()
743
+ const isValid2 = await checkbox2.value.validateOnSubmit()
750
744
  if (isValid && isValid2) {
751
745
  formSubmitted.value = true
752
746
  hasError.value = false
@@ -36,6 +36,7 @@
36
36
  falseValue?: unknown
37
37
  controlsIds?: string[]
38
38
  displayAsterisk?: boolean
39
+ decorative?: boolean
39
40
  }>(),
40
41
  {
41
42
  modelValue: false,
@@ -66,11 +67,15 @@
66
67
  falseValue: () => false,
67
68
  controlsIds: () => [],
68
69
  displayAsterisk: false,
70
+ decorative: false,
69
71
  },
70
72
  )
71
73
 
72
74
  const emit = defineEmits(['update:modelValue', 'update:indeterminate', 'change'])
73
75
 
76
+ import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
77
+ import { mdiCheckboxBlankOutline, mdiCheckboxMarked, mdiMinusBox } from '@mdi/js'
78
+
74
79
  const checkboxRef = ref<VCheckbox | null>(null)
75
80
 
76
81
  const internalIndeterminate = ref(props.indeterminate)
@@ -102,9 +107,6 @@
102
107
  const isSubmitted = ref(false)
103
108
 
104
109
  const validation = useValidation({
105
- customRules: props.customRules,
106
- warningRules: props.customWarningRules,
107
- successRules: props.customSuccessRules,
108
110
  showSuccessMessages: props.showSuccessMessages,
109
111
  fieldIdentifier: props.label,
110
112
  disableErrorHandling: props.disableErrorHandling,
@@ -135,7 +137,7 @@
135
137
  : [],
136
138
  )
137
139
 
138
- const validateField = (value: boolean | null) => {
140
+ const validateField = async (value: boolean | null) => {
139
141
  // Si en lecture seule ou si la valeur est null et non requise, pas de validation
140
142
  if (props.readonly) {
141
143
  validation.clearValidation()
@@ -157,7 +159,7 @@
157
159
  }
158
160
 
159
161
  // Validation standard
160
- const result = validation.validateField(
162
+ const result = await validation.validateField(
161
163
  value,
162
164
  [...defaultRules.value, ...props.customRules],
163
165
  props.customWarningRules,
@@ -175,11 +177,11 @@
175
177
  validateField(model.value)
176
178
  }
177
179
 
178
- watch(model, (newValue) => {
180
+ watch(model, async (newValue) => {
179
181
  if (!props.isValidateOnBlur) {
180
182
  // Si le formulaire a été soumis et que la valeur change, on valide à nouveau
181
183
  if (isSubmitted.value) {
182
- const isValid = validateField(newValue)
184
+ const isValid = await validateField(newValue)
183
185
  if (isValid) {
184
186
  // La validation a réussi, effacer les erreurs
185
187
  validation.clearValidation()
@@ -187,7 +189,7 @@
187
189
  }
188
190
  else {
189
191
  // Comportement normal (hors soumission)
190
- const isValid = validateField(newValue)
192
+ const isValid = await validateField(newValue)
191
193
  // Si la validation réussit, s'assurer que les erreurs sont effacées
192
194
  if (isValid && validation.hasError.value) {
193
195
  validation.clearValidation()
@@ -206,7 +208,7 @@
206
208
 
207
209
  const ariaChecked = computed(() => {
208
210
  if (internalIndeterminate.value) return 'mixed'
209
- return model.value ? 'true' : undefined
211
+ return model.value ? 'true' : 'false'
210
212
  })
211
213
 
212
214
  const labelColor = computed(() => {
@@ -243,9 +245,17 @@
243
245
  const removeAriaAttributes = () => {
244
246
  nextTick(() => {
245
247
  if (checkboxRef.value) {
246
- const checkboxInput = checkboxRef.value.$el.querySelector('input[type="checkbox"][aria-disabled="false"]')
248
+ const checkboxInput = checkboxRef.value.$el?.querySelector('input[type="checkbox"]')
247
249
  if (checkboxInput) {
248
- checkboxInput.removeAttribute('aria-disabled')
250
+ // Supprimer aria-disabled="false" car il est redondant
251
+ if (checkboxInput.getAttribute('aria-disabled') === 'false') {
252
+ checkboxInput.removeAttribute('aria-disabled')
253
+ }
254
+ // Supprimer aria-checked natif de Vuetify pour éviter les conflits
255
+ // Notre composant gère aria-checked au niveau du wrapper VCheckbox
256
+ if (checkboxInput.hasAttribute('aria-checked')) {
257
+ checkboxInput.removeAttribute('aria-checked')
258
+ }
249
259
  }
250
260
  }
251
261
  })
@@ -303,7 +313,31 @@
303
313
 
304
314
  <template>
305
315
  <div>
316
+ <!-- Rendu purement visuel/décoratif, ignoré par les lecteurs d'écran -->
317
+ <div
318
+ v-if="props.decorative"
319
+ class="d-flex align-center pointer-events-none sy-checkbox-decorative"
320
+ aria-hidden="true"
321
+ >
322
+ <SyIcon
323
+ :icon="internalIndeterminate ? mdiMinusBox : (model ? mdiCheckboxMarked : mdiCheckboxBlankOutline)"
324
+ :color="(model || internalIndeterminate) ? props.color : '#727273'"
325
+ :class="{'text-disabled': props.disabled}"
326
+ :decorative="true"
327
+ class="mr-2"
328
+ />
329
+ <slot name="label">
330
+ <span
331
+ v-if="generatedLabel"
332
+ :class="{'text-disabled': props.disabled}"
333
+ :style="{ color: labelColor }"
334
+ >{{ generatedLabel }}</span>
335
+ </slot>
336
+ </div>
337
+
338
+ <!-- Rendu interactif standard -->
306
339
  <VCheckbox
340
+ v-else
307
341
  :id="props.id"
308
342
  ref="checkboxRef"
309
343
  v-model="model"
@@ -79,6 +79,23 @@ import '@/stories/styles/shared.css';
79
79
  </div>
80
80
  </div>
81
81
 
82
+ <div className="aria-management-section">
83
+ <h2>Gestion des attributs ARIA</h2>
84
+ <p>
85
+ Pour garantir la conformité ARIA, le composant SyCheckbox gère activement les conflits potentiels
86
+ avec l'implémentation native de Vuetify :
87
+ </p>
88
+ <ul>
89
+ <li><strong>Suppression des attributs conflictuels</strong> : Les attributs ARIA natifs de Vuetify sont automatiquement supprimés de l'élément input pour éviter les doublons</li>
90
+ <li><strong>Gestion centralisée</strong> : L'attribut <code>aria-checked</code> est géré au niveau du composant SyCheckbox et non au niveau de l'input natif</li>
91
+ <li><strong>Conformité garantie</strong> : Cette approche garantit que l'attribut <code>aria-checked</code> reflète toujours l'état réel du composant (true, false ou mixed)</li>
92
+ </ul>
93
+ <p>
94
+ Cette gestion préventive évite les erreurs d'audit d'accessibilité qui pourraient survenir
95
+ lorsque plusieurs attributs ARIA contradictoires sont présents sur le même élément.
96
+ </p>
97
+ </div>
98
+
82
99
  <div className="tri-state-section">
83
100
  <h2>Fonctionnalité tri-état (indéterminé)</h2>
84
101
  <p>
@@ -126,7 +143,19 @@ import '@/stories/styles/shared.css';
126
143
  <p>
127
144
  Cette relation est établie via la propriété <code>controlsIds</code> qui liste les identifiants des cases à cocher enfants.
128
145
  </p>
129
- </div>
146
+ </div>
147
+
148
+ <div className="decorative-mode-section">
149
+ <h2>Mode Décoratif (Imbrication)</h2>
150
+ <p>
151
+ Le composant SyCheckbox dispose d'une propriété <code>decorative</code> permettant de l'utiliser de manière purement visuelle.
152
+ Dans ce mode, la case à cocher n'inclut pas d'élément <code>&lt;input type="checkbox"&gt;</code> natif et est masquée aux lecteurs d'écran via <code>aria-hidden="true"</code>.
153
+ </p>
154
+ <p>
155
+ Ce mode est <strong>indispensable pour respecter l'accessibilité</strong> lorsque la case à cocher doit être imbriquée dans un autre composant interactif (par exemple, une option de <code>listbox</code> ou une ligne cliquable de tableau).
156
+ Les règles WAI-ARIA interdisent l'imbrication d'éléments interactifs. Le composant parent assume alors la responsabilité d'annoncer l'état de sélection (ex: via <code>aria-selected</code> ou <code>aria-checked</code> au niveau de la ligne).
157
+ </p>
158
+ </div>
130
159
 
131
160
  <div className="best-practices">
132
161
  <h2>Bonnes pratiques d'utilisation</h2>
@@ -190,8 +219,10 @@ import '@/stories/styles/shared.css';
190
219
 
191
220
  .criteria-section h2,
192
221
  .demo-section h2,
222
+ .aria-management-section h2,
193
223
  .tri-state-section h2,
194
224
  .parent-child-section h2,
225
+ .decorative-mode-section h2,
195
226
  .best-practices h2,
196
227
  .resources-section h2 {
197
228
  border-bottom: 2px solid #eaecef;
@@ -243,8 +274,26 @@ import '@/stories/styles/shared.css';
243
274
  margin-bottom: 40px;
244
275
  }
245
276
 
277
+ .aria-management-section {
278
+ background-color: #fff9e6;
279
+ padding: 20px;
280
+ border-radius: 8px;
281
+ margin-bottom: 30px;
282
+ border-left: 5px solid #ff9800;
283
+ }
284
+
285
+ .aria-management-section ul {
286
+ padding-left: 20px;
287
+ }
288
+
289
+ .aria-management-section li {
290
+ margin-bottom: 8px;
291
+ line-height: 1.5;
292
+ }
293
+
246
294
  .tri-state-section,
247
- .parent-child-section {
295
+ .parent-child-section,
296
+ .decorative-mode-section {
248
297
  background-color: #f0f7ff;
249
298
  padding: 20px;
250
299
  border-radius: 8px;
@@ -252,7 +301,8 @@ import '@/stories/styles/shared.css';
252
301
  }
253
302
 
254
303
  .tri-state-section p,
255
- .parent-child-section p {
304
+ .parent-child-section p,
305
+ .decorative-mode-section p {
256
306
  line-height: 1.6;
257
307
  }
258
308
 
@@ -6,21 +6,153 @@ import { axe } from 'vitest-axe'
6
6
  import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
7
7
  import SyCheckbox from '../SyCheckbox.vue'
8
8
 
9
- // Scénario daccessibilité : case à cocher requise avec libellé.
9
+ // Scénarios d'accessibilité : cases à cocher avec différents états et configurations.
10
10
 
11
11
  describe('SyCheckbox – accessibility (axe)', () => {
12
12
  it('has no obvious axe violations for required checkbox with label', async () => {
13
13
  const wrapper = mount(SyCheckbox, {
14
14
  props: {
15
- label: 'Jaccepte les conditions générales',
15
+ label: 'J\'accepte les conditions générales',
16
16
  modelValue: false,
17
17
  required: true,
18
18
  },
19
19
  })
20
20
 
21
+ // Attendre que removeAriaAttributes soit exécuté
22
+ await wrapper.vm.$nextTick()
23
+ await wrapper.vm.$nextTick()
24
+
21
25
  const results = await axe(wrapper.element as HTMLElement)
22
26
  assertNoA11yViolations(results, 'SyCheckbox – required labelled checkbox', {
23
27
  ignoreRules: ['region'],
24
28
  })
25
29
  })
30
+
31
+ it('has no axe violations for indeterminate checkbox (aria-checked="mixed")', async () => {
32
+ const wrapper = mount(SyCheckbox, {
33
+ props: {
34
+ label: 'Sélection partielle',
35
+ modelValue: false,
36
+ indeterminate: true,
37
+ controlsIds: ['child-1', 'child-2', 'child-3'],
38
+ },
39
+ })
40
+
41
+ // Attendre que removeAriaAttributes soit exécuté
42
+ await wrapper.vm.$nextTick()
43
+ await wrapper.vm.$nextTick()
44
+
45
+ const results = await axe(wrapper.element as HTMLElement)
46
+ assertNoA11yViolations(results, 'SyCheckbox – indeterminate checkbox', {
47
+ ignoreRules: ['region'],
48
+ })
49
+ })
50
+
51
+ it('has no axe violations for checked checkbox with aria-checked="true"', async () => {
52
+ const wrapper = mount(SyCheckbox, {
53
+ props: {
54
+ label: 'Option activée',
55
+ modelValue: true,
56
+ required: false,
57
+ },
58
+ })
59
+
60
+ // Attendre que removeAriaAttributes soit exécuté
61
+ await wrapper.vm.$nextTick()
62
+ await wrapper.vm.$nextTick()
63
+
64
+ const results = await axe(wrapper.element as HTMLElement)
65
+ assertNoA11yViolations(results, 'SyCheckbox – checked checkbox', {
66
+ ignoreRules: ['region'],
67
+ })
68
+ })
69
+
70
+ it('has no axe violations for unchecked checkbox with aria-checked="false"', async () => {
71
+ const wrapper = mount(SyCheckbox, {
72
+ props: {
73
+ label: 'Option désactivée',
74
+ modelValue: false,
75
+ required: false,
76
+ },
77
+ })
78
+
79
+ // Attendre que removeAriaAttributes soit exécuté
80
+ await wrapper.vm.$nextTick()
81
+ await wrapper.vm.$nextTick()
82
+
83
+ const results = await axe(wrapper.element as HTMLElement)
84
+ assertNoA11yViolations(results, 'SyCheckbox – unchecked checkbox', {
85
+ ignoreRules: ['region'],
86
+ })
87
+ })
88
+
89
+ it('has no axe violations for disabled checkbox', async () => {
90
+ const wrapper = mount(SyCheckbox, {
91
+ props: {
92
+ label: 'Option désactivée',
93
+ modelValue: true,
94
+ disabled: true,
95
+ },
96
+ })
97
+
98
+ // Attendre que removeAriaAttributes soit exécuté
99
+ await wrapper.vm.$nextTick()
100
+ await wrapper.vm.$nextTick()
101
+
102
+ const results = await axe(wrapper.element as HTMLElement)
103
+ assertNoA11yViolations(results, 'SyCheckbox – disabled checkbox', {
104
+ ignoreRules: ['region'],
105
+ })
106
+ })
107
+
108
+ it('has no axe violations for checkbox with custom aria-label', async () => {
109
+ const wrapper = mount(SyCheckbox, {
110
+ props: {
111
+ ariaLabel: 'Case à cocher personnalisée',
112
+ modelValue: false,
113
+ },
114
+ })
115
+
116
+ // Attendre que removeAriaAttributes soit exécuté
117
+ await wrapper.vm.$nextTick()
118
+ await wrapper.vm.$nextTick()
119
+
120
+ const results = await axe(wrapper.element as HTMLElement)
121
+ assertNoA11yViolations(results, 'SyCheckbox – checkbox with aria-label', {
122
+ ignoreRules: ['region'],
123
+ })
124
+ })
125
+
126
+ it('has no axe violations for checkbox with aria-labelledby', async () => {
127
+ // Créer un conteneur pour le test
128
+ const container = document.createElement('div')
129
+ document.body.appendChild(container)
130
+
131
+ // Créer un élément avec l'ID référencé
132
+ const labelElement = document.createElement('div')
133
+ labelElement.id = 'custom-label-id'
134
+ labelElement.textContent = 'Libellé personnalisé'
135
+ container.appendChild(labelElement)
136
+
137
+ const wrapper = mount(SyCheckbox, {
138
+ props: {
139
+ ariaLabelledby: 'custom-label-id',
140
+ modelValue: false,
141
+ },
142
+ attachTo: container,
143
+ })
144
+
145
+ // Attendre que removeAriaAttributes soit exécuté
146
+ await wrapper.vm.$nextTick()
147
+ await wrapper.vm.$nextTick()
148
+
149
+ const results = await axe(container as HTMLElement)
150
+ assertNoA11yViolations(results, 'SyCheckbox – checkbox with aria-labelledby', {
151
+ ignoreRules: ['region'],
152
+ })
153
+
154
+ // Nettoyer
155
+ wrapper.unmount()
156
+ document.body.removeChild(container)
157
+ })
26
158
  })
@@ -5,6 +5,7 @@ import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
5
5
  import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
6
6
  import SySelect from '@/components/Customs/Selects/SySelect/SySelect.vue'
7
7
  import { VBtn } from 'vuetify/components'
8
+ import { fn } from '@storybook/test'
8
9
 
9
10
  export default {
10
11
  title: 'Composants/Formulaires/SyForm',
@@ -42,6 +43,10 @@ export default {
42
43
  type Story = StoryObj<typeof SyForm>
43
44
 
44
45
  export const Basic: Story = {
46
+ args: {
47
+ onReset: fn(),
48
+ onSubmit: fn(),
49
+ },
45
50
  render: args => ({
46
51
  components: { SyForm, SyTextField, VBtn },
47
52
  setup() {
@@ -126,6 +131,11 @@ const onSubmit = (event: { isValid: boolean }) => {
126
131
  }
127
132
 
128
133
  export const CustomValidation: Story = {
134
+ args: {
135
+ validateOnSubmit: false,
136
+ onReset: fn(),
137
+ onSubmit: fn(),
138
+ },
129
139
  render: args => ({
130
140
  components: { SyForm, SyTextField, VBtn },
131
141
  setup() {
@@ -142,7 +152,7 @@ export const CustomValidation: Story = {
142
152
 
143
153
  const confirmPasswordRules = computed(() => [
144
154
  { type: 'custom', options: {
145
- validate: value => value === password.value || 'Les mots de passe ne correspondent pas',
155
+ validate: (value: string) => value === password.value,
146
156
  message: 'Les mots de passe ne correspondent pas',
147
157
  } },
148
158
  { type: 'required', options: { message: 'Veuillez confirmer le mot de passe' } },
@@ -150,7 +160,7 @@ export const CustomValidation: Story = {
150
160
 
151
161
  const submitForm = async (e: { isValid: boolean }) => {
152
162
  if (e.isValid) {
153
- alert('Inscription réussie !')
163
+ alert('Inscription réussie ! (validate on submit = ' + args.validateOnSubmit + ')')
154
164
  }
155
165
  else {
156
166
  alert('Formulaire invalide, veuillez corriger les erreurs.')
@@ -171,7 +181,7 @@ export const CustomValidation: Story = {
171
181
  },
172
182
  template: `
173
183
  <div>
174
- <SyForm ref="form" v-bind="args" @submit="submitForm" :validate-on-submit="false">
184
+ <SyForm ref="form" v-bind="args" @submit="submitForm" :validate-on-submit="args.validateOnSubmit">
175
185
  <div class="d-flex flex-column gap-4">
176
186
  <SyTextField v-model="username" label="Nom d'utilisateur" required class="mb-2" />
177
187
  <SyTextField v-model="password" label="Mot de passe" type="password" :custom-rules="passwordRules" class="mb-2" />
@@ -238,7 +248,7 @@ const passwordRules = computed(() => [
238
248
 
239
249
  const confirmPasswordRules = computed(() => [
240
250
  { type: 'custom', options: {
241
- validate: value => value === password.value || 'Les mots de passe ne correspondent pas',
251
+ validate: (value: string) => value === password.value,
242
252
  message: 'Les mots de passe ne correspondent pas',
243
253
  } },
244
254
  { type: 'required', options: { message: 'Veuillez confirmer le mot de passe' } },
@@ -267,6 +277,10 @@ const validateManually = () => {
267
277
  }
268
278
 
269
279
  export const MixedFields: Story = {
280
+ args: {
281
+ onReset: fn(),
282
+ onSubmit: fn(),
283
+ },
270
284
  render: args => ({
271
285
  components: { SyForm, SyTextField, SySelect, SyCheckbox, VBtn },
272
286
  setup() {
@@ -372,6 +386,9 @@ export const MixedFields: Story = {
372
386
  if (event.isValid) {
373
387
  alert('Formulaire valide ! Données: ' + JSON.stringify(formData.value))
374
388
  }
389
+ else {
390
+ alert('Formulaire invalide, veuillez corriger les erreurs.')
391
+ }
375
392
  }
376
393
  </script>
377
394
  `,
@@ -381,6 +398,10 @@ export const MixedFields: Story = {
381
398
  }
382
399
 
383
400
  export const Reset: Story = {
401
+ args: {
402
+ onReset: fn(),
403
+ onSubmit: fn(),
404
+ },
384
405
  render: args => ({
385
406
  components: { SyForm, SyTextField, VBtn },
386
407
  setup() {
@@ -408,7 +429,12 @@ export const Reset: Story = {
408
429
  form.value?.clearValidation()
409
430
  }
410
431
 
411
- return { name, email, emailRules, form, submitForm, clearAll, args }
432
+ function onFormReset() {
433
+ alert('Formulaire réinitialisé !')
434
+ args.onReset?.()
435
+ }
436
+
437
+ return { name, email, emailRules, form, submitForm, clearAll, onFormReset, args }
412
438
  },
413
439
  template: `
414
440
  <SyForm ref="form" v-bind="args" @submit="submitForm" @reset="onFormReset">
@@ -352,8 +352,6 @@
352
352
  </template>
353
353
 
354
354
  <style lang="scss" scoped>
355
- @use '@/assets/tokens';
356
-
357
355
  .sy-pagination {
358
356
  display: flex;
359
357
  align-items: center;
@@ -82,9 +82,6 @@
82
82
  const isSubmitted = ref(false)
83
83
 
84
84
  const validation = useValidation({
85
- customRules: props.customRules,
86
- warningRules: props.customWarningRules,
87
- successRules: props.customSuccessRules,
88
85
  showSuccessMessages: props.showSuccessMessages,
89
86
  fieldIdentifier: props.label,
90
87
  disableErrorHandling: props.disableErrorHandling,
@@ -108,7 +105,7 @@
108
105
  : [],
109
106
  )
110
107
 
111
- const validateField = (value: PropertyKey | null) => {
108
+ const validateField = async (value: PropertyKey | null) => {
112
109
  // const stringValue = value != null ? String(value) : null
113
110
 
114
111
  if (props.readonly) {
@@ -121,7 +118,7 @@
121
118
  return true
122
119
  }
123
120
 
124
- const result = validation.validateField(
121
+ const result = await validation.validateField(
125
122
  value,
126
123
  [...defaultRules.value, ...props.customRules],
127
124
  props.customWarningRules,
@@ -130,9 +127,9 @@
130
127
  return !result.hasError
131
128
  }
132
129
 
133
- const validateOnSubmit = () => {
130
+ const validateOnSubmit = async () => {
134
131
  isSubmitted.value = true
135
- return validateField(model.value)
132
+ return await validateField(model.value)
136
133
  }
137
134
 
138
135
  const checkErrorOnBlur = () => {
@@ -9,16 +9,6 @@ import * as SyTabsStories from "./SyTabs.stories";
9
9
  <p>Le composant `SyTabs` est un système de navigation par onglets conforme au Design System qui respecte les règles d'accessibilité <abbr title="Référentiel Général d'Amélioration de l'Accessibilité">RGAA</abbr>. Il permet d'organiser le contenu en sections navigables facilement via une interface à onglets.</p>
10
10
  </div>
11
11
 
12
- Il implémente les fonctionnalités suivantes :
13
-
14
- - Navigation complète au clavier
15
- - Attributs ARIA appropriés
16
- - Gestion du focus accessible
17
- - Structure HTML sémantique
18
- - Design personnalisable
19
-
20
- <Canvas of={SyTabsStories.Default} />
21
-
22
12
  ## API
23
13
 
24
14
  <Controls of={SyTabsStories.Default} />
@@ -36,54 +26,6 @@ export interface TabItem {
36
26
  }
37
27
  ```
38
28
 
39
- <div className="header">
40
- <h1>Accessibilité</h1>
41
- </div>
42
-
43
- Le composant `SyTabs` respecte les critères d'accessibilité RGAA suivants :
44
-
45
- ### Structure sémantique
46
-
47
- - Utilise les éléments `<nav>`, `<ul>` et `<li>` pour une structure de navigation sémantique
48
- - Associe chaque onglet à son panneau de contenu via les attributs `aria-controls` et `aria-labelledby`
49
- - Utilise l'attribut `aria-label="Onglets de navigation"` sur l'élément `<nav>` pour identifier la navigation
50
-
51
- ### Rôles ARIA
52
-
53
- - `role="tablist"` sur le conteneur de navigation
54
- - `role="presentation"` sur les éléments de liste
55
- - `role="tab"` sur les boutons d'onglets
56
- - `role="tabpanel"` sur les panneaux de contenu
57
-
58
- ### États et propriétés
59
-
60
- - `aria-selected="true|false"` indique l'onglet actif
61
- - Attribut `hidden` sur les panneaux non actifs
62
- - Focus visible avec outline adapté au design system
63
-
64
- ### Navigation au clavier
65
-
66
- Le composant implémente toutes les interactions clavier recommandées par les [Pratiques Authoring WAI-ARIA 1.2](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/) :
67
-
68
- - **Flèches gauche/droite** : Navigation entre les onglets
69
- - **Touches Home/End** : Accès au premier/dernier onglet
70
- - **Entrée/Espace** : Activation de l'onglet
71
- - **Échap** : Gestion du focus
72
-
73
- ### Contraste et visibilité
74
-
75
- - Contraste suffisant entre le texte et le fond (minimum 4.5:1)
76
- - Indication visuelle claire de l'onglet actif (changement de couleur et bordure)
77
- - Focus visible conforme aux exigences RGAA
78
-
79
- ### Tests d'accessibilité
80
-
81
- Le composant a été testé avec :
82
- - Lecteurs d'écran (NVDA, VoiceOver)
83
- - Navigation clavier
84
- - Outils de vérification de contraste
85
-
86
- <Canvas of={SyTabsStories.Default} />
87
29
 
88
30
  ## Personnalisation
89
31