@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
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from 'vitest'
1
+ import { describe, it, expect, vi } from 'vitest'
2
2
  import { useValidation } from '../useValidation'
3
3
 
4
4
  describe('useValidation', () => {
@@ -13,7 +13,7 @@ describe('useValidation', () => {
13
13
  expect(validation.hasSuccess.value).toBe(false)
14
14
  })
15
15
 
16
- it('should handle basic validation rules', () => {
16
+ it('should handle basic validation rules', async () => {
17
17
  const validation = useValidation()
18
18
  const rules = [{
19
19
  type: 'required',
@@ -24,17 +24,17 @@ describe('useValidation', () => {
24
24
  }]
25
25
 
26
26
  // Test avec une valeur vide
27
- const emptyResult = validation.validateField('', rules)
27
+ const emptyResult = await validation.validateField('', rules)
28
28
  expect(emptyResult.hasError).toBe(true)
29
29
  expect(emptyResult.state.errors).toContain('Ce champ est requis')
30
30
 
31
31
  // Test avec une valeur valide
32
- const validResult = validation.validateField('test', rules)
32
+ const validResult = await validation.validateField('test', rules)
33
33
  expect(validResult.hasSuccess).toBe(true)
34
34
  expect(validResult.state.successes).toContain('Champ valide')
35
35
  })
36
36
 
37
- it('should handle warning rules', () => {
37
+ it('should handle warning rules', async () => {
38
38
  const validation = useValidation()
39
39
  const warningRules = [{
40
40
  type: 'custom',
@@ -46,17 +46,17 @@ describe('useValidation', () => {
46
46
  }]
47
47
 
48
48
  // Test avec une valeur courte
49
- const shortResult = validation.validateField('test', [], warningRules)
49
+ const shortResult = await validation.validateField('test', [], warningRules)
50
50
  expect(shortResult.hasWarning).toBe(true)
51
51
  expect(shortResult.state.warnings[0]).toContain('8 caractères')
52
52
 
53
53
  // Test avec une valeur valide
54
- const validResult = validation.validateField('test_long', [], warningRules)
54
+ const validResult = await validation.validateField('test_long', [], warningRules)
55
55
  expect(validResult.hasWarning).toBe(false)
56
56
  expect(validResult.state.warnings).toEqual([])
57
57
  })
58
58
 
59
- it('should handle multiple validation rules', () => {
59
+ it('should handle multiple validation rules', async () => {
60
60
  const validation = useValidation()
61
61
  const rules = [
62
62
  {
@@ -75,22 +75,22 @@ describe('useValidation', () => {
75
75
  ]
76
76
 
77
77
  // Test avec une valeur vide
78
- const emptyResult = validation.validateField('', rules)
78
+ const emptyResult = await validation.validateField('', rules)
79
79
  expect(emptyResult.hasError).toBe(true)
80
80
  expect(emptyResult.state.errors).toContain('Ce champ est requis')
81
81
 
82
82
  // Test avec une valeur trop courte
83
- const shortResult = validation.validateField('ab', rules)
83
+ const shortResult = await validation.validateField('ab', rules)
84
84
  expect(shortResult.hasError).toBe(true)
85
85
  expect(shortResult.state.errors).toContain('Minimum 3 caractères requis')
86
86
 
87
87
  // Test avec une valeur valide
88
- const validResult = validation.validateField('abc', rules)
88
+ const validResult = await validation.validateField('abc', rules)
89
89
  expect(validResult.hasError).toBe(false)
90
90
  expect(validResult.hasSuccess).toBe(true)
91
91
  })
92
92
 
93
- it('should respect showSuccessMessages option', () => {
93
+ it('should respect showSuccessMessages option', async () => {
94
94
  const validation = useValidation({ showSuccessMessages: false })
95
95
  const rules = [{
96
96
  type: 'required',
@@ -100,12 +100,12 @@ describe('useValidation', () => {
100
100
  },
101
101
  }]
102
102
 
103
- const result = validation.validateField('test', rules)
103
+ const result = await validation.validateField('test', rules)
104
104
  expect(result.hasSuccess).toBe(false)
105
105
  expect(result.state.successes).toEqual([])
106
106
  })
107
107
 
108
- it('should use fieldIdentifier in messages', () => {
108
+ it('should use fieldIdentifier in messages', async () => {
109
109
  const validation = useValidation({ fieldIdentifier: 'Email' })
110
110
  const rules = [{
111
111
  type: 'required',
@@ -114,11 +114,11 @@ describe('useValidation', () => {
114
114
  },
115
115
  }]
116
116
 
117
- const result = validation.validateField('', rules)
117
+ const result = await validation.validateField('', rules)
118
118
  expect(result.state.errors[0]).toContain('Email')
119
119
  })
120
120
 
121
- it('should clear validation state', () => {
121
+ it('should clear validation state', async () => {
122
122
  const validation = useValidation()
123
123
  const rules = [{
124
124
  type: 'required',
@@ -127,7 +127,7 @@ describe('useValidation', () => {
127
127
  },
128
128
  }]
129
129
 
130
- validation.validateField('', rules)
130
+ await validation.validateField('', rules)
131
131
  expect(validation.hasError.value).toBe(true)
132
132
 
133
133
  validation.clearValidation()
@@ -145,10 +145,105 @@ describe('useValidation', () => {
145
145
  },
146
146
  }]
147
147
 
148
- validation.validateField('', rules)
149
- expect(await validation.validateOnSubmit()).toBe(false)
148
+ await validation.validateField('', rules)
149
+ expect(validation.validateOnSubmit()).toBe(false)
150
150
 
151
- validation.validateField('test', rules)
152
- expect(await validation.validateOnSubmit()).toBe(true)
151
+ await validation.validateField('test', rules)
152
+ expect(validation.validateOnSubmit()).toBe(true)
153
+ })
154
+
155
+ describe('Handle thrown errors in async rules', () => {
156
+ it('should handle thrown error in async validation rules', async () => {
157
+ const validation = useValidation()
158
+ const rules = [{
159
+ type: 'custom',
160
+ options: {
161
+ validate: async () => {
162
+ throw new Error('Network error')
163
+ },
164
+ message: 'Erreur personnalisée',
165
+ },
166
+ }]
167
+
168
+ const result = await validation.validateField('test', rules)
169
+ expect(result.hasError).toBe(true)
170
+ expect(result.state.errors[0]).toBe('Erreur personnalisée')
171
+ })
172
+
173
+ it('should use thrown error message when no custom message is provided', async () => {
174
+ const validation = useValidation()
175
+ const rules = [{
176
+ type: 'custom',
177
+ options: {
178
+ validate: async () => {
179
+ throw new Error('Service unavailable')
180
+ },
181
+ },
182
+ }]
183
+
184
+ const result = await validation.validateField('test', rules)
185
+ expect(result.hasError).toBe(true)
186
+ expect(result.state.errors[0]).toBe('Service unavailable')
187
+ })
188
+
189
+ it('should handle thrown error in async warning rules', async () => {
190
+ const validation = useValidation()
191
+ const warningRules = [{
192
+ type: 'custom',
193
+ options: {
194
+ validate: async () => {
195
+ throw new Error('Warning service failed')
196
+ },
197
+ isWarning: true,
198
+ },
199
+ }]
200
+
201
+ const result = await validation.validateField('test', [], warningRules)
202
+ expect(result.hasWarning).toBe(true)
203
+ expect(result.state.warnings[0]).toBe('Warning service failed')
204
+ })
205
+ })
206
+
207
+ it('should discard a slow async validation when a newer one is triggered after', async () => {
208
+ vi.useFakeTimers()
209
+ const validation = useValidation()
210
+
211
+ // Slow rule: resolves after 100ms with an error
212
+ const slowRules = [{
213
+ type: 'custom',
214
+ options: {
215
+ validate: () => new Promise<boolean>(resolve => setTimeout(() => resolve(false), 100)),
216
+ message: 'Erreur lente',
217
+ },
218
+ }]
219
+
220
+ // Fast rule: resolves immediately with success
221
+ const fastRules = [{
222
+ type: 'custom',
223
+ options: {
224
+ validate: () => true,
225
+ successMessage: 'Validation rapide réussie',
226
+ },
227
+ }]
228
+
229
+ // Launch slow validation first, then fast validation immediately after
230
+ const slowPromise = validation.validateField('test', slowRules)
231
+ const fastResult = await validation.validateField('test', fastRules)
232
+
233
+ // Fast validation should have succeeded
234
+ expect(fastResult.hasError).toBe(false)
235
+ expect(fastResult.hasSuccess).toBe(true)
236
+ expect(fastResult.state.successes).toContain('Validation rapide réussie')
237
+
238
+ // Wait for the slow validation to resolve
239
+ vi.advanceTimersByTime(100)
240
+ await slowPromise
241
+
242
+ // The slow validation must NOT have overwritten the fast result
243
+ expect(validation.errors.value).toEqual([])
244
+ expect(validation.hasError.value).toBe(false)
245
+ expect(validation.successes.value).toContain('Validation rapide réussie')
246
+
247
+ vi.useRealTimers()
153
248
  })
154
249
  })
@@ -1,10 +1,13 @@
1
1
  import { provide, inject, ref, type InjectionKey, type Ref } from 'vue'
2
2
 
3
3
  // Type pour les composants pouvant être validés
4
- export interface ValidatableComponent {
4
+ export type ValidatableComponent = {
5
5
  validateOnSubmit: () => Promise<boolean> | boolean
6
6
  clearValidation?: () => void
7
7
  reset?: () => void
8
+ $props?: {
9
+ label?: string
10
+ }
8
11
  }
9
12
 
10
13
  // Clé d'injection pour le registre des composants validables
@@ -47,24 +50,28 @@ export function useFormValidation() {
47
50
  // Fonction pour nettoyer les validations de tous les composants enregistrés
48
51
  const clearAll = () => {
49
52
  if (validatableComponents.value.length === 0) return
50
- validatableComponents.value.forEach((component) => {
51
- try {
52
- component.clearValidation?.()
53
- }
54
- catch {
55
- // no-op: un composant peut ne pas implémenter clearValidation
53
+ validatableComponents.value.forEach((component: ValidatableComponent) => {
54
+ if (component.clearValidation) {
55
+ try {
56
+ component.clearValidation()
57
+ }
58
+ catch (error) {
59
+ console.warn('Error clearing validation for field: ' + (component?.$props?.label ?? 'unknown'), error)
60
+ }
56
61
  }
57
62
  })
58
63
  }
59
64
 
60
65
  const resetAll = () => {
61
66
  if (validatableComponents.value.length === 0) return
62
- validatableComponents.value.forEach((component) => {
63
- try {
64
- component.reset?.()
65
- }
66
- catch {
67
- // no-op: un composant peut ne pas implémenter reset
67
+ validatableComponents.value.forEach((component: ValidatableComponent) => {
68
+ if (component.reset) {
69
+ try {
70
+ component.reset()
71
+ }
72
+ catch (error) {
73
+ console.warn('Error resetting field: ' + (component?.$props?.label ?? 'unknown'), error)
74
+ }
68
75
  }
69
76
  })
70
77
  }
@@ -34,7 +34,14 @@ export function useValidatable(
34
34
  const instance = getCurrentInstance()
35
35
 
36
36
  // Keep a stable object reference for register/unregister symmetry
37
- const componentRef = { validateOnSubmit: validateMethod, clearValidation, reset }
37
+ const componentRef = {
38
+ validateOnSubmit: validateMethod,
39
+ clearValidation,
40
+ reset,
41
+ $props: {
42
+ label: typeof instance?.props?.label === 'string' ? instance.props.label : undefined,
43
+ },
44
+ }
38
45
 
39
46
  onMounted(() => {
40
47
  if (instance) {
@@ -1,18 +1,40 @@
1
1
  import { ref, computed } from 'vue'
2
- import { useFieldValidation, type RuleOptions } from '../rules/useFieldValidation'
2
+ import { useFieldValidation, type RuleOptions, type ValidationResult as FieldValidationResult } from '../rules/useFieldValidation'
3
+
4
+ type builtInDateRuleType =
5
+ 'noWeekend'
6
+ | 'noBeforeToday'
7
+ | 'notAfterToday'
8
+ | 'notBeforeDate'
9
+ | 'notAfterDate'
10
+ | 'dateExact'
11
+ | 'isHolidayDay'
12
+
13
+ type BuiltInNumberRuleType = 'min' | 'max'
14
+ type BuiltInStringRuleType = 'minLength' | 'maxLength' | 'exactLength' | 'email' | 'matchPattern'
15
+ type BuiltInRuleGeneralType = 'required' | 'custom'
16
+ export type BuiltInRuleType =
17
+ | BuiltInRuleGeneralType
18
+ | BuiltInNumberRuleType
19
+ | BuiltInStringRuleType
20
+ | builtInDateRuleType
21
+
22
+ interface CustomValidationRule {
23
+ type: 'custom'
24
+ options: RuleOptions & { validate: NonNullable<RuleOptions['validate']> }
25
+ }
3
26
 
4
- export type ValidationRule = {
5
- type: string
27
+ interface StandardValidationRule {
28
+ type: BuiltInRuleType | ({} & string)
6
29
  options: RuleOptions
7
30
  }
8
31
 
32
+ export type ValidationRule = CustomValidationRule | StandardValidationRule
33
+
9
34
  export interface ValidationOptions {
10
35
  showSuccessMessages?: boolean
11
- fieldIdentifier?: string
12
- customRules?: ValidationRule[]
13
- warningRules?: ValidationRule[]
14
- successRules?: ValidationRule[]
15
36
  disableErrorHandling?: boolean
37
+ fieldIdentifier?: string
16
38
  }
17
39
 
18
40
  export interface ValidationState {
@@ -38,6 +60,8 @@ export function useValidation(options: ValidationOptions = { showSuccessMessages
38
60
  const warnings = ref<string[]>([])
39
61
  const successes = ref<string[]>([])
40
62
 
63
+ let currentValidationToken = 0
64
+
41
65
  const { generateRules } = useFieldValidation()
42
66
 
43
67
  const hasError = computed(() => errors.value.length > 0)
@@ -52,128 +76,156 @@ export function useValidation(options: ValidationOptions = { showSuccessMessages
52
76
  successes.value = []
53
77
  }
54
78
 
79
+ /**
80
+ * Resolves an array of rule results that may be sync or async.
81
+ * Returns the resolved array directly if all are sync, or a Promise if any are async.
82
+ */
83
+ const resolveRuleResults = (
84
+ results: (FieldValidationResult | Promise<FieldValidationResult>)[],
85
+ ): FieldValidationResult[] | Promise<FieldValidationResult[]> => {
86
+ if (results.every(r => !(r instanceof Promise))) return results as FieldValidationResult[]
87
+
88
+ const safePromises = results.map((r: FieldValidationResult | Promise<FieldValidationResult>) => {
89
+ if (!(r instanceof Promise)) return Promise.resolve(r)
90
+
91
+ return r.catch((err: unknown) => {
92
+ const message = err instanceof Error ? err.message : String(err)
93
+ return { error: message || 'Erreur de validation' } as FieldValidationResult
94
+ })
95
+ })
96
+
97
+ return Promise.all(safePromises)
98
+ }
99
+
100
+ /** Executes validation rules against a value, returning sync or async results. */
101
+ const executeRules = (
102
+ rules: ValidationRule[],
103
+ value: unknown,
104
+ extraOptions?: Record<string, boolean>,
105
+ ): FieldValidationResult[] | Promise<FieldValidationResult[]> => {
106
+ for (const rule of rules) {
107
+ if ('validator' in rule) {
108
+ console.error('[useValidation] "validator" en top level de ValidationRule n\'est plus supporté. Utilisez rule.options.validate à la place.')
109
+ }
110
+ }
111
+
112
+ const prepared = rules.map(rule => ({
113
+ type: rule.type,
114
+ options: { ...rule.options, ...extraOptions, ...(options.fieldIdentifier && !rule.options?.fieldIdentifier ? { fieldIdentifier: options.fieldIdentifier } : {}) },
115
+ }))
116
+ const fns = generateRules(prepared)
117
+ return resolveRuleResults(fns.map(fn => fn(value)))
118
+ }
119
+
120
+ /** Applies a callback to a sync or async value, discarding stale results via token. */
121
+ const thenOrSync = <T>(
122
+ value: T | Promise<T>,
123
+ token: number,
124
+ fn: (resolved: T) => ValidationResult | Promise<ValidationResult>,
125
+ ): ValidationResult | Promise<ValidationResult> => {
126
+ if (value instanceof Promise) {
127
+ return value.then(resolved =>
128
+ token !== currentValidationToken ? buildResult() : fn(resolved),
129
+ )
130
+ }
131
+ return fn(value)
132
+ }
133
+
134
+ const buildResult = (): ValidationResult => ({
135
+ hasError: hasError.value,
136
+ hasWarning: hasWarning.value,
137
+ hasSuccess: hasSuccess.value,
138
+ state: {
139
+ errors: errors.value,
140
+ warnings: warnings.value,
141
+ successes: successes.value,
142
+ },
143
+ })
144
+
145
+ /** Adds a default success message when no custom success rules are provided. */
146
+ const addDefaultSuccessMessage = (rules: ValidationRule[]) => {
147
+ const customSuccessMessage = rules.find(rule => rule.options?.successMessage)?.options.successMessage
148
+ if (customSuccessMessage) {
149
+ successes.value.push(customSuccessMessage)
150
+ }
151
+ else {
152
+ const defaultMessage = options.fieldIdentifier ? `Le champ ${options.fieldIdentifier} est valide.` : 'Champ valide'
153
+ successes.value.push(defaultMessage)
154
+ }
155
+ }
156
+
55
157
  const validateField = (
56
158
  value: unknown,
57
159
  rules: ValidationRule[] = [],
58
160
  warningRules: ValidationRule[] = [],
59
161
  successRules: ValidationRule[] = [],
60
- ): ValidationResult => {
162
+ ): ValidationResult | Promise<ValidationResult> => {
163
+ const token = ++currentValidationToken
61
164
  clearValidation()
62
165
 
63
- // Si la gestion des erreurs est désactivée, on retourne un résultat sans erreurs
64
- if (options.disableErrorHandling) {
65
- return {
66
- hasError: false,
67
- hasWarning: false,
68
- hasSuccess: false,
69
- state: {
70
- errors: [],
71
- warnings: [],
72
- successes: [],
73
- },
74
- }
75
- }
166
+ if (options.disableErrorHandling) return buildResult()
76
167
 
77
- // Validation des règles normales
78
- const normalRules = rules.map(rule => ({
79
- type: rule.type,
80
- options: {
81
- ...rule.options,
82
- fieldIdentifier: options.fieldIdentifier || rule.options.fieldIdentifier,
83
- },
84
- }))
168
+ const resolved = executeRules(rules, value)
85
169
 
86
- const validationRules = generateRules(normalRules)
87
- let hasValidationError = false
88
- validationRules.forEach((validationRule) => {
89
- const result = validationRule(value)
90
- if (result.error) {
91
- errors.value.push(result.error)
92
- hasValidationError = true
170
+ return thenOrSync(resolved, token, (ruleResults) => {
171
+ let hasValidationError = false
172
+ for (const result of ruleResults) {
173
+ if (result.error) {
174
+ errors.value.push(result.error)
175
+ hasValidationError = true
176
+ }
93
177
  }
94
- })
95
178
 
96
- // Si pas d'erreur, ajouter le message de succès ou un message par défaut
97
- // Mais seulement si aucun customSuccessRules n'est défini pour éviter la duplication
98
- if (!hasValidationError && value && options.showSuccessMessages !== false && (!successRules || successRules.length === 0)) {
99
- const customSuccessMessage = rules.find(rule => rule.options.successMessage)?.options.successMessage
100
- if (customSuccessMessage) {
101
- successes.value.push(customSuccessMessage)
179
+ if (!hasValidationError && value && options.showSuccessMessages !== false && successRules.length === 0) {
180
+ addDefaultSuccessMessage(rules)
102
181
  }
103
- else {
104
- const defaultMessage = options.fieldIdentifier ? `Le champ ${options.fieldIdentifier} est valide.` : 'Champ valide'
105
- successes.value.push(defaultMessage)
182
+
183
+ if (!hasValidationError && warningRules.length > 0) {
184
+ const warningResolved = executeRules(warningRules, value, { isWarning: true })
185
+ return thenOrSync(warningResolved, token, (warningResults) => {
186
+ for (const r of warningResults) {
187
+ if (r.warning) warnings.value.push(r.warning)
188
+ }
189
+ return runSuccessRules(hasValidationError, value, successRules, token)
190
+ })
106
191
  }
107
- }
108
192
 
109
- // Validation des règles d'avertissement
110
- if (!hasValidationError) {
111
- const warningValidationRules = generateRules(
112
- warningRules.map(rule => ({
113
- type: rule.type,
114
- options: {
115
- ...rule.options,
116
- isWarning: true,
117
- fieldIdentifier: options.fieldIdentifier || rule.options.fieldIdentifier,
118
- },
119
- })),
120
- )
193
+ return runSuccessRules(hasValidationError, value, successRules, token)
194
+ })
195
+ }
121
196
 
122
- warningValidationRules.forEach((validationRule) => {
123
- const result = validationRule(value)
124
- if (result.warning) {
125
- warnings.value.push(result.warning)
126
- }
127
- })
128
- }
197
+ /** Runs success rules after normal + warning rules. */
198
+ const runSuccessRules = (
199
+ hasValidationError: boolean,
200
+ value: unknown,
201
+ successRules: ValidationRule[],
202
+ token: number,
203
+ ): ValidationResult | Promise<ValidationResult> => {
204
+ if (hasValidationError || hasWarning.value || successRules.length === 0) return buildResult()
129
205
 
130
- // Validation des règles de succès
131
- if (!hasValidationError && !hasWarning.value) {
132
- const successValidationRules = generateRules(
133
- successRules.map(rule => ({
134
- type: rule.type,
135
- options: {
136
- ...rule.options,
137
- isSuccess: true,
138
- fieldIdentifier: options.fieldIdentifier || rule.options.fieldIdentifier,
139
- },
140
- })),
141
- )
206
+ const successResolved = executeRules(successRules, value, { isSuccess: true })
142
207
 
143
- successValidationRules.forEach((validationRule) => {
144
- const result = validationRule(value)
145
- if (result.success && options.showSuccessMessages !== false) {
146
- successes.value.push(result.success)
208
+ return thenOrSync(successResolved, token, (successResults) => {
209
+ for (const r of successResults) {
210
+ if (r.success && options.showSuccessMessages !== false) {
211
+ successes.value.push(r.success)
147
212
  }
148
- })
149
- }
150
-
151
- return {
152
- hasError: hasError.value,
153
- hasWarning: hasWarning.value,
154
- hasSuccess: hasSuccess.value,
155
- state: {
156
- errors: errors.value,
157
- warnings: warnings.value,
158
- successes: successes.value,
159
- },
160
- }
213
+ }
214
+ return buildResult()
215
+ })
161
216
  }
162
217
 
163
- const validateOnSubmit = async (): Promise<boolean> => {
218
+ const validateOnSubmit = (): boolean => {
164
219
  return !hasError.value
165
220
  }
166
221
 
167
222
  return {
168
- // États
169
223
  errors,
170
224
  warnings,
171
225
  successes,
172
226
  hasError,
173
227
  hasWarning,
174
228
  hasSuccess,
175
-
176
- // Méthodes
177
229
  validateField,
178
230
  validateOnSubmit,
179
231
  clearValidation,
@@ -0,0 +1,48 @@
1
+ import { Meta } from '@storybook/blocks'
2
+
3
+ <Meta title="Composants/Composants Vuetify/Introduction" />
4
+
5
+ <div className="header">
6
+ <h1>Composants Vuetify</h1>
7
+ Pour certains composants, nous avons fait le choix d'utiliser directement les composants natifs de Vuetify en leur appliquant un thème via les tokens du design system. Cela permet de bénéficier de toute la puissance et la flexibilité de Vuetify tout en respectant la charte graphique de chaque thème.
8
+ </div>
9
+
10
+ ## Pourquoi utiliser les composants Vuetify directement ?
11
+
12
+ Certains composants sont suffisamment couverts par Vuetify et ne nécessitent pas d'encapsulation supplémentaire. Dans ce cas, nous appliquons simplement les bonnes props Vuetify en combinaison avec les tokens de couleur de chaque thème.
13
+ Cela signifie que vous pouvez utiliser toute l'API Vuetify native sur ces composants, sans restriction.
14
+
15
+ ## Utilisation
16
+
17
+ Pour ces composants, il vous suffit d'utiliser directement le composant Vuetify avec les props adéquates.
18
+
19
+ ### Exemple avec `v-btn`
20
+
21
+ ```html
22
+ <!-- Bouton primaire -->
23
+ <v-btn color="primary">Button</v-btn>
24
+
25
+ <!-- Bouton outlined -->
26
+ <v-btn color="primary" variant="outlined">Button</v-btn>
27
+
28
+ <!-- Bouton tonal -->
29
+ <v-btn color="primary" variant="tonal">Button</v-btn>
30
+
31
+ <!-- Bouton texte -->
32
+ <v-btn color="primary" variant="text">Button</v-btn>
33
+
34
+ <!-- Bouton désactivé -->
35
+ <v-btn color="primary" disabled>Button</v-btn>
36
+ ```
37
+
38
+ ## Props Vuetify disponibles
39
+
40
+ Vous pouvez utiliser n'importe quelle prop reconnue par Vuetify sur ces composants. Par exemple, pour un bouton `v-btn` la liste complète des props est disponible sur la [documentation Vuetify](https://vuetifyjs.com/en/api/v-btn/#props) du composant.
41
+
42
+ ## Thèmes supportés
43
+
44
+ Pour le `v-btn` par exemple les couleurs `primary`, `secondary` et `tertiary` sont définies différemment selon le thème actif.
45
+
46
+ ## Conclusion
47
+
48
+ L'utilisation directe des composants Vuetify avec les thèmes du design system vous offre une flexibilité maximale. Vous bénéficiez de toute l'API Vuetify tout en respectant automatiquement la charte graphique du thème actif. Il vous suffit d'utiliser les bonnes valeurs pour obtenir un rendu cohérent avec le design system.
@@ -0,0 +1,28 @@
1
+ import { Meta, Canvas } from '@storybook/blocks'
2
+ import * as VBreadcrumbsStories from './v-breadcrumbs.stories'
3
+
4
+ <Meta title="Composants/Composants Vuetify/VBreadcrumbs" />
5
+
6
+ <div className="header">
7
+ <h1>VBreadcrumbs</h1>
8
+ Ce composant utilise directement le composant natif `v-breadcrumbs` de Vuetify avec les couleurs du thème actif du design system.
9
+ Pour l'API complète du composant, consulter la [documentation Vuetify](https://vuetifyjs.com/en/api/v-breadcrumbs/#props).
10
+ </div>
11
+
12
+ ## Default
13
+
14
+ <div style={{ padding: '24px' }}>
15
+ <Canvas of={VBreadcrumbsStories.Default} />
16
+ </div>
17
+
18
+ ## Avec divider personnalisé
19
+
20
+ <div style={{ padding: '24px' }}>
21
+ <Canvas of={VBreadcrumbsStories.CustomDivider} />
22
+ </div>
23
+
24
+ ## Désactivé
25
+
26
+ <div style={{ padding: '24px' }}>
27
+ <Canvas of={VBreadcrumbsStories.Disabled} />
28
+ </div>