@cnamts/synapse 1.0.24 → 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 (367) hide show
  1. package/README.md +27 -5
  2. package/dist/{AutocompleteFilter-BWLR3U7W.js → AutocompleteFilter-D7qBuCAP.js} +1 -1
  3. package/dist/{AutocompleteFilter-D9jzRzAL.cjs → AutocompleteFilter-Df9i5mAl.cjs} +1 -1
  4. package/dist/{DateFilter-DTUl8hb1.cjs → DateFilter-BJD6FMev.cjs} +1 -1
  5. package/dist/{DateFilter-BpwFexzi.js → DateFilter-BitMWrMU.js} +1 -1
  6. package/dist/{NumberFilter-Bz_NTdX9.js → NumberFilter-BTLUxw0a.js} +1 -1
  7. package/dist/{NumberFilter-MAEojdk0.cjs → NumberFilter-DGCzCXzI.cjs} +1 -1
  8. package/dist/{PeriodFilter-DX_wy9g-.js → PeriodFilter-B5rUIPAC.js} +1 -1
  9. package/dist/{PeriodFilter-CC4WgIhl.cjs → PeriodFilter-DO_ecTZW.cjs} +1 -1
  10. package/dist/{SelectFilter-BR3fvl-a.cjs → SelectFilter-CGwcKWLm.cjs} +1 -1
  11. package/dist/{SelectFilter-xqiPtPgX.js → SelectFilter-l4QnRcuk.js} +2 -2
  12. package/dist/{TextFilter-CCfYFl5F.cjs → TextFilter-B8nf7xoK.cjs} +1 -1
  13. package/dist/{TextFilter-BBl3JFqK.js → TextFilter-C9hj6Qrp.js} +1 -1
  14. package/dist/apLightTheme-CEK4iY3f.cjs +1 -0
  15. package/dist/{apLightTheme-D1P4jcD0.js → apLightTheme-DnIM24Lv.js} +441 -722
  16. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +10 -6
  17. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +3 -0
  18. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  19. package/dist/components/Customs/SyTextField/SyTextField.d.ts +4 -4
  20. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4 -24
  21. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +2 -12
  22. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +1 -6
  23. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +1 -0
  24. package/dist/components/FileList/FileList.d.ts +6 -0
  25. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  26. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +13 -13
  27. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  28. package/dist/components/MonthPicker/MonthPicker.d.ts +1 -6
  29. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1 -6
  30. package/dist/components/NirField/NirField.d.ts +4 -16
  31. package/dist/components/PeriodField/PeriodField.d.ts +8 -48
  32. package/dist/components/PhoneField/PhoneField.d.ts +1 -6
  33. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
  34. package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
  35. package/dist/components/Tables/common/SyTablePagination.d.ts +2 -0
  36. package/dist/components/Tables/common/TableHeader.d.ts +5 -0
  37. package/dist/components/Tables/common/locales.d.ts +3 -0
  38. package/dist/components/Tables/common/types.d.ts +2 -0
  39. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +1 -0
  40. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  41. package/dist/composables/validation/useValidation.d.ts +5 -1
  42. package/dist/design-system-v3.js +2 -2
  43. package/dist/design-system-v3.umd.cjs +1 -1
  44. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  45. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  46. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  47. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  48. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  49. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  50. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  51. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  52. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  53. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  54. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  55. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  56. package/dist/designTokens/utils/index.d.ts +2 -2
  57. package/dist/main-ByDPHpae.cjs +1067 -0
  58. package/dist/main-Cpx8Co6H.js +38869 -0
  59. package/dist/synapse.css +1 -1
  60. package/dist/utils/functions/classToHex.d.ts +1 -1
  61. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  62. package/dist/vuetifyConfig.js +113 -152
  63. package/dist/vuetifyConfig.umd.cjs +1 -1
  64. package/package.json +29 -18
  65. package/src/assets/amelipro/apTokens2026.scss +5 -5
  66. package/src/assets/overrides/_breakpoints.scss +25 -0
  67. package/src/assets/overrides/_btns.scss +0 -2
  68. package/src/assets/overrides/_forms.scss +1 -3
  69. package/src/assets/overrides/_icons.scss +7 -11
  70. package/src/assets/overrides/_otp.scss +41 -0
  71. package/src/assets/overrides/_tables.scss +11 -20
  72. package/src/assets/overrides/_tooltips.scss +17 -7
  73. package/src/assets/overrides/_typography.scss +35 -37
  74. package/src/assets/overrides/_utilities.scss +43 -47
  75. package/src/assets/themes.scss +1 -0
  76. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  77. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  78. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  79. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  80. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  81. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  82. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  83. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  84. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  85. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  86. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  87. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  88. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  89. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  90. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  91. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  92. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  93. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  94. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  95. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  96. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  97. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  98. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  99. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  100. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  101. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  102. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  103. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  104. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  105. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  106. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  107. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  108. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  109. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  110. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  111. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  112. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  113. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  114. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  115. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  116. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  117. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  118. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  119. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  120. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  121. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  122. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  123. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  124. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  125. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  126. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  127. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  128. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  129. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  130. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  131. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  132. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  133. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  134. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  135. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  136. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  137. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  138. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  139. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  140. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  141. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  142. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  143. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  144. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  145. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  146. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  147. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  148. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  149. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  150. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  151. package/src/components/Captcha/Captcha.vue +1 -3
  152. package/src/components/ChipList/ChipList.vue +14 -16
  153. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +0 -2
  154. package/src/components/CopyBtn/CopyBtn.vue +1 -3
  155. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  156. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  157. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  158. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +7 -3
  159. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  160. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +66 -0
  161. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +4 -6
  162. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +1 -39
  163. package/src/components/Customs/Selects/SySelect/SySelect.vue +263 -63
  164. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  165. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +35 -0
  166. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  167. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +29 -0
  168. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +18 -3
  169. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  170. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  171. package/src/components/Customs/SyTabs/SyTabs.stories.ts +32 -33
  172. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  173. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  174. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  175. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  176. package/src/components/Customs/SyTextField/SyTextField.stories.ts +21 -41
  177. package/src/components/Customs/SyTextField/SyTextField.vue +4 -6
  178. package/src/components/DatePicker/CalendarMode/DatePicker.vue +12 -14
  179. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +20 -16
  180. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +23 -0
  181. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +8 -10
  182. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  183. package/src/components/DatePicker/composables/useDatePickerState.ts +24 -0
  184. package/src/components/DatePicker/composables/useDateTextField.ts +0 -1
  185. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  186. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  187. package/src/components/DialogBox/DialogBox.vue +3 -5
  188. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  189. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  190. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  191. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  192. package/src/components/FileList/FileList.vue +9 -2
  193. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  194. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  195. package/src/components/FileUpload/FileUpload.vue +3 -5
  196. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  197. package/src/components/FilterInline/FilterInline.vue +1 -3
  198. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  199. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  200. package/src/components/FilterSideBar/FilterSideBar.vue +7 -0
  201. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  202. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  203. package/src/components/FooterBar/FooterBar.vue +9 -13
  204. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  205. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  206. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  207. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  208. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  209. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  210. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  211. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  212. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  213. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  214. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  215. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  216. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  217. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  218. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  219. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  220. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  221. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  222. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  223. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  224. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  225. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  226. package/src/components/LangBtn/LangBtn.vue +2 -4
  227. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -0
  228. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  229. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  230. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  231. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  232. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  233. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  234. package/src/components/LogoBrandSection/LogoBrandSection.vue +2 -2
  235. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  236. package/src/components/NirField/NirField.stories.ts +2 -2
  237. package/src/components/NirField/NirField.vue +3 -5
  238. package/src/components/NirField/accessibilite/Accessibility.mdx +100 -5
  239. package/src/components/NirField/tests/NirField.spec.ts +118 -0
  240. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  241. package/src/components/NirField/useNirValidation.ts +38 -32
  242. package/src/components/NotificationBar/Notification/Notification.vue +5 -7
  243. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  244. package/src/components/PaginatedTable/PaginatedTable.vue +2 -3
  245. package/src/components/PaginatedTable/Pagination.vue +3 -5
  246. package/src/components/PasswordField/PasswordField.vue +8 -10
  247. package/src/components/PhoneField/PhoneField.vue +3 -3
  248. package/src/components/RangeField/RangeSlider/RangeSlider.vue +0 -2
  249. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  250. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  251. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  252. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  253. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  254. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  255. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  256. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +6 -8
  257. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +3 -5
  258. package/src/components/SearchListField/SearchListField.vue +0 -2
  259. package/src/components/SkipLink/SkipLink.vue +2 -4
  260. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  261. package/src/components/SubHeader/SubHeader.vue +1 -1
  262. package/src/components/SyAlert/SyAlert.vue +7 -9
  263. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  264. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  265. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  266. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  267. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  268. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  269. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  270. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  271. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  272. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  273. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +166 -0
  274. package/src/components/Tables/SyServerTable/SyServerTable.vue +9 -7
  275. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +23 -0
  276. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +268 -0
  277. package/src/components/Tables/SyTable/SyTable.stories.ts +104 -0
  278. package/src/components/Tables/SyTable/SyTable.vue +9 -7
  279. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +22 -0
  280. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +274 -0
  281. package/src/components/Tables/common/SyTableFilter.vue +27 -2
  282. package/src/components/Tables/common/SyTablePagination.vue +142 -19
  283. package/src/components/Tables/common/TableHeader.vue +40 -3
  284. package/src/components/Tables/common/filters/SelectFilter.vue +1 -1
  285. package/src/components/Tables/common/locales.ts +3 -0
  286. package/src/components/Tables/common/tableStyles.scss +16 -19
  287. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  288. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  289. package/src/components/Tables/common/types.ts +2 -0
  290. package/src/components/Tables/common/useTableHeaders.ts +49 -27
  291. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  292. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  293. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  294. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  295. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  296. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  297. package/src/composables/validation/useValidation.ts +17 -1
  298. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  299. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  300. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  301. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  302. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  303. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  304. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  305. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  306. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  307. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  308. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  309. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  310. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  311. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  312. package/src/designTokens/tokens/amelipro/apLightTheme.ts +1 -1
  313. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  314. package/src/designTokens/tokens/baseColors.ts +129 -0
  315. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  316. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  317. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  318. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +1 -1
  319. package/src/designTokens/tokens/cnam/cnamSemantic.ts +1 -1
  320. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  321. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  322. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  323. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  324. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  325. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  326. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  327. package/src/designTokens/utils/index.ts +2 -2
  328. package/src/stories/Accessibilite/AuditDesignSystem.mdx +0 -11
  329. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  330. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  331. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +8 -1
  332. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +51 -10
  333. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -9
  334. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +48 -58
  335. package/src/stories/Components/Components.stories.ts +40 -1
  336. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  337. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  338. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  339. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  340. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  341. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  342. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  343. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  344. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  345. package/src/stories/styles/accessibility-guide.css +3 -3
  346. package/src/utils/functions/classToHex.ts +6 -34
  347. package/src/utils/functions/createHexResolver.ts +45 -0
  348. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  349. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  350. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  351. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  352. package/dist/apLightTheme-CFSRrjv2.cjs +0 -1
  353. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  354. package/dist/main-BtTqyn4z.js +0 -38648
  355. package/dist/main-C1e3eoxd.cjs +0 -1067
  356. package/src/assets/apTokens.scss +0 -343
  357. package/src/assets/overrides/_container.scss +0 -36
  358. package/src/assets/tokens.scss +0 -388
  359. package/src/designTokens/apColors.md +0 -66
  360. package/src/designTokens/cnamColors.md +0 -193
  361. package/src/designTokens/paColors.md +0 -66
  362. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  363. package/src/designTokens/tokens/json/primitives.json +0 -209
  364. package/src/designTokens/tokens/json/semantic.json +0 -120
  365. package/src/designTokens/utils/convertGaps.ts +0 -11
  366. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  367. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -32,10 +32,11 @@ import '@/stories/styles/shared.css';
32
32
  <h3>Structure sémantique</h3>
33
33
  </div>
34
34
  <ul>
35
- <li><strong>Rôles ARIA appropriés</strong> : <code>role="tablist"</code> pour la liste d'onglets, <code>role="tab"</code> pour chaque onglet et <code>role="tabpanel"</code> pour chaque panneau de contenu</li>
36
- <li><strong>État des onglets</strong> : <code>aria-selected</code> avec les valeurs <code>true</code> ou <code>false</code> pour indiquer l'onglet actif</li>
37
- <li><strong>Relations entre éléments</strong> : <code>aria-controls</code> pour associer chaque onglet à son panneau, et <code>aria-labelledby</code> pour associer chaque panneau à son onglet</li>
38
- <li><strong>Navigation structurée</strong> : Utilisation d'éléments <code>&lt;nav&gt;</code> et <code>&lt;ul&gt;</code> pour créer une structure de navigation sémantique et accessible</li>
35
+ <li><strong>Rôles et sémantique adaptatifs</strong> : Utilisation dynamique de <code>role="tablist"</code> / <code>role="tab"</code> / <code>role="tabpanel"</code> (mode Onglets) ou de la balise native <code>&lt;nav role="navigation"&gt;</code> (mode Navigation)</li>
36
+ <li><strong>État de l'élément actif</strong> : Utilisation de <code>aria-selected="true"</code> (mode Onglets) ou <code>aria-current="page"</code> (mode Navigation)</li>
37
+ <li><strong>Relations programmatiques</strong> : <code>aria-controls</code> et <code>aria-labelledby</code> lient les onglets à leurs panneaux respectifs (uniquement en mode Onglets)</li>
38
+ <li><strong>Nommage accessible</strong> : Le conteneur principal possède un <code>aria-label</code> dynamique (<em>"Onglets de navigation"</em> ou <em>"Menu de navigation"</em> selon le mode)</li>
39
+ <li><strong>Structure HTML aplatie</strong> : Les éléments interactifs (boutons ou liens) sont contenus directement dans leur parent sémantique (<code>&lt;div&gt;</code> ou <code>&lt;nav&gt;</code>) sans balises de liste (<code>&lt;ul&gt;</code>) superflues, optimisant l'arbre d'accessibilité</li>
39
40
  </ul>
40
41
  </div>
41
42
 
@@ -60,10 +61,11 @@ import '@/stories/styles/shared.css';
60
61
  <h3>États et retours d'information</h3>
61
62
  </div>
62
63
  <ul>
63
- <li><strong>État de sélection</strong> : <code>aria-selected="true"</code> indique l'onglet actif aux technologies d'assistance</li>
64
- <li><strong>Visibilité des panneaux</strong> : L'attribut <code>hidden</code> sur les panneaux inactifs les rend invisibles aux lecteurs d'écran</li>
65
- <li><strong>Indication visuelle</strong> : Styles distinctifs pour l'onglet actif (couleur, bordure inférieure)</li>
66
- <li><strong>Association explicite</strong> : Chaque panneau de contenu est clairement associé à son onglet via <code>aria-labelledby</code></li>
64
+ <li><strong>État de sélection</strong> : <code>aria-selected="true"</code> ou <code>aria-current="page"</code> indique l'élément actif aux technologies d'assistance</li>
65
+ <li><strong>Éléments désactivés</strong> : Utilisation de l'attribut natif <code>disabled</code> (pour les boutons) ou <code>aria-disabled="true"</code> (pour les liens), qui sont par ailleurs exclus de la navigation au clavier (flèches)</li>
66
+ <li><strong>Visibilité des panneaux</strong> : L'attribut HTML <code>hidden</code> sur les panneaux inactifs les retire correctement de l'arbre d'accessibilité</li>
67
+ <li><strong>Indication visuelle</strong> : Styles distinctifs pour l'onglet actif (couleur de texte, barre de soulignement animée)</li>
68
+ <li><strong>Focus visible</strong> : Un <code>outline</code> de 3px est appliqué lors de la navigation au clavier (<code>:focus-visible</code>)</li>
67
69
  </ul>
68
70
  </div>
69
71
 
@@ -81,25 +83,52 @@ import '@/stories/styles/shared.css';
81
83
  </div>
82
84
  </div>
83
85
 
86
+ <div className="adaptive-mode-section">
87
+ <h2>Mode adaptatif (Onglets vs Navigation)</h2>
88
+ <div className="section-description">
89
+ Le composant SyTabs détecte automatiquement son contexte d'utilisation et adapte sa structure sémantique en conséquence :
90
+ </div>
91
+
92
+ <div className="criteria-card">
93
+ <div className="criteria-header">
94
+ <span className="criteria-icon">📑</span>
95
+ <h3>Mode Onglets (par défaut)</h3>
96
+ </div>
97
+ <p>Utilisé pour permuter du contenu local sans changer d'URL.</p>
98
+ <ul>
99
+ <li>Utilise le modèle WAI-ARIA complet pour les onglets (<code>role="tablist"</code>, <code>role="tab"</code>, <code>role="tabpanel"</code>).</li>
100
+ <li>L'activation de l'onglet par les flèches du clavier est <strong>automatique</strong>.</li>
101
+ </ul>
102
+ </div>
103
+
104
+ <div className="criteria-card">
105
+ <div className="criteria-header">
106
+ <span className="criteria-icon">🧭</span>
107
+ <h3>Mode Navigation (Routing)</h3>
108
+ </div>
109
+ <p>Activé automatiquement si au moins un onglet utilise les attributs <code>to</code> ou <code>href</code>.</p>
110
+ <ul>
111
+ <li>Utilise une sémantique de navigation standard (<code>&lt;nav role="navigation"&gt;</code>) au lieu des rôles ARIA d'onglets pour éviter la confusion des utilisateurs de lecteurs d'écran.</li>
112
+ <li>Indique l'élément actif via <code>aria-current="page"</code> au lieu de <code>aria-selected</code>.</li>
113
+ <li>L'activation au clavier est <strong>manuelle</strong> : les flèches déplacent le focus sans déclencher le lien, la touche Entrée valide le choix.</li>
114
+ <li>Les rôles <code>tabpanel</code> ne sont pas générés car ce concept n'est pas applicable à la navigation entre différentes pages.</li>
115
+ </ul>
116
+ </div>
117
+ </div>
118
+
84
119
  <div className="automatic-section">
85
- <h2>Activation automatique des onglets</h2>
120
+ <h2>Activation automatique (Mode Onglets)</h2>
86
121
  <div className="section-description">
87
- Le composant SyTabs implémente un modèle d'activation automatique, ce qui signifie que :
122
+ En <strong>Mode Onglets</strong>, le composant implémente un modèle d'activation automatique :
88
123
  </div>
89
124
  <ul>
90
- <li>La sélection d'un nouvel onglet via la navigation par flèches active immédiatement cet onglet</li>
91
- <li>Le contenu du panneau associé est affiché sans nécessiter une action supplémentaire</li>
92
- <li>Le focus reste sur l'onglet activé pour permettre de continuer la navigation par clavier</li>
125
+ <li>La sélection d'un nouvel onglet via la navigation par flèches (Gauche/Droite) active immédiatement cet onglet</li>
126
+ <li>Le contenu du panneau associé est affiché sans nécessiter une action supplémentaire (Entrée/Espace)</li>
127
+ <li>Le focus reste sur l'onglet activé pour permettre de continuer la navigation au clavier</li>
93
128
  </ul>
94
129
  <div className="section-description">
95
- Cette implémentation suit les meilleures pratiques WAI-ARIA pour les interfaces à onglets :
130
+ <em>Note : En Mode Navigation (Routing), l'activation est manuelle (déplacement du focus avec les flèches, puis validation avec Entrée) pour éviter les redirections inattendues.</em>
96
131
  </div>
97
- <ul>
98
- <li>Réduction du nombre d'actions nécessaires pour naviguer entre les contenus</li>
99
- <li>Mise à jour dynamique de l'attribut <code>aria-selected</code> pour informer des changements</li>
100
- <li>Gestion efficace du focus pour éviter les sauts d'interface désorientants</li>
101
- <li>Mise à jour de l'affichage des panneaux avec l'attribut <code>hidden</code> pour les panneaux inactifs</li>
102
- </ul>
103
132
  </div>
104
133
 
105
134
  <div className="demo-section">
@@ -112,9 +141,9 @@ import '@/stories/styles/shared.css';
112
141
  </div>
113
142
 
114
143
  <div className="tab-panel-section">
115
- <h2>Relation onglet-panneau</h2>
144
+ <h2>Relation onglet-panneau (Mode Onglets)</h2>
116
145
  <div className="section-description">
117
- Le composant SyTabs établit une relation claire entre chaque onglet et son panneau de contenu associé :
146
+ Lorsqu'il n'est pas utilisé pour la navigation de pages, le composant établit une relation programmatique stricte :
118
147
  </div>
119
148
  <ul>
120
149
  <li>Chaque onglet (<code>role="tab"</code>) est associé à un panneau de contenu via <code>aria-controls</code></li>
@@ -132,6 +161,13 @@ import '@/stories/styles/shared.css';
132
161
  </div>
133
162
  </div>
134
163
 
164
+ <div className="warning-section">
165
+ <h2>Note d'audit (Faux positif Tanaguru)</h2>
166
+ <p>
167
+ Un faux positif (éléments interactifs non atteignables en navigation clavier) est remonté par Tanaguru. En réalité, le composant gère intentionnellement le focus via un <em>roving tabindex</em> dans ses deux modes (Onglets et Navigation) pour une meilleure ergonomie : seul l'élément actif est dans l'ordre de tabulation classique (Tab), les autres éléments étant atteignables via les touches fléchées. Une vérification manuelle au clavier confirme que tous les éléments sont parfaitement accessibles et activables, conformément aux comportements attendus.
168
+ </p>
169
+ </div>
170
+
135
171
  <div className="best-practices">
136
172
  <h2>Bonnes pratiques d'utilisation</h2>
137
173
  <ul>
@@ -195,11 +231,15 @@ import '@/stories/styles/shared.css';
195
231
  }
196
232
 
197
233
  .criteria-section h2,
234
+ .adaptive-mode-section h2,
198
235
  .demo-section h2,
199
236
  .tri-state-section h2,
200
237
  .parent-child-section h2,
201
238
  .best-practices h2,
202
- .resources-section h2 {
239
+ .automatic-section h2,
240
+ .tab-panel-section h2,
241
+ .resources-section h2,
242
+ .warning-section h2 {
203
243
  border-bottom: 2px solid #eaecef;
204
244
  padding-bottom: 10px;
205
245
  margin-top: 30px;
@@ -207,6 +247,12 @@ import '@/stories/styles/shared.css';
207
247
  color: #0077cc;
208
248
  }
209
249
 
250
+ .warning-section h2 {
251
+ color: #856404;
252
+ border-bottom-color: #ffeeba;
253
+ margin-top: 0;
254
+ }
255
+
210
256
  .criteria-card {
211
257
  background-color: #fff;
212
258
  border-radius: 8px;
@@ -257,6 +303,20 @@ import '@/stories/styles/shared.css';
257
303
  margin-bottom: 30px;
258
304
  }
259
305
 
306
+ .warning-section {
307
+ background-color: #fff3cd;
308
+ border-left: 5px solid #ffeeba;
309
+ padding: 20px;
310
+ border-radius: 8px;
311
+ margin-bottom: 40px;
312
+ }
313
+
314
+ .warning-section p {
315
+ color: #856404;
316
+ line-height: 1.6;
317
+ margin: 0;
318
+ }
319
+
260
320
  .tri-state-section p,
261
321
  .parent-child-section p {
262
322
  line-height: 1.6;
@@ -0,0 +1,88 @@
1
+ // @vitest-environment jsdom
2
+
3
+ import { describe, it } from 'vitest'
4
+ import { mount } from '@vue/test-utils'
5
+ import { axe } from 'vitest-axe'
6
+ import { assertNoA11yViolations } from '@tests/unit/accessibility/axeUtils'
7
+ import SyTabs from '../SyTabs.vue'
8
+
9
+ // Mock RouterLink component since SyTabs uses it
10
+ const RouterLink = {
11
+ name: 'RouterLink',
12
+ props: ['to'],
13
+ template: '<a :href="to"><slot /></a>',
14
+ }
15
+
16
+ const testItems = [
17
+ { label: 'Tab 1', value: 'tab1', content: 'Contenu du Tab 1' },
18
+ { label: 'Tab 2', value: 'tab2', content: 'Contenu du Tab 2' },
19
+ { label: 'Tab 3', value: 'tab3', content: 'Contenu du Tab 3', disabled: true },
20
+ ]
21
+
22
+ describe('SyTabs – accessibility (axe)', () => {
23
+ it('has no obvious axe violations in default state', async () => {
24
+ const wrapper = mount(SyTabs, {
25
+ props: {
26
+ items: testItems,
27
+ },
28
+ global: {
29
+ components: { RouterLink },
30
+ mocks: {
31
+ $router: {},
32
+ },
33
+ },
34
+ })
35
+
36
+ const results = await axe(wrapper.element as HTMLElement)
37
+ assertNoA11yViolations(results, 'SyTabs – default state', {
38
+ ignoreRules: ['region'],
39
+ })
40
+ })
41
+
42
+ it('has no obvious axe violations after switching tabs', async () => {
43
+ const wrapper = mount(SyTabs, {
44
+ props: {
45
+ items: testItems,
46
+ },
47
+ global: {
48
+ components: { RouterLink },
49
+ mocks: {
50
+ $router: {},
51
+ },
52
+ },
53
+ })
54
+
55
+ const tabs = wrapper.findAll('[role="tab"]')
56
+ if (tabs.length > 1) {
57
+ await tabs[1]?.trigger('click')
58
+ }
59
+
60
+ const results = await axe(wrapper.element as HTMLElement)
61
+ assertNoA11yViolations(results, 'SyTabs – after switching tabs', {
62
+ ignoreRules: ['region'],
63
+ })
64
+ })
65
+
66
+ it('has no obvious axe violations in navigation mode', async () => {
67
+ const wrapper = mount(SyTabs, {
68
+ props: {
69
+ items: [
70
+ { label: 'Nav 1', value: 'nav1', to: '/path-1' },
71
+ { label: 'Nav 2', value: 'nav2', href: 'https://example.com' },
72
+ { label: 'Nav 3', value: 'nav3', to: '/path-3', disabled: true },
73
+ ],
74
+ },
75
+ global: {
76
+ components: { RouterLink },
77
+ mocks: {
78
+ $router: {},
79
+ },
80
+ },
81
+ })
82
+
83
+ const results = await axe(wrapper.element as HTMLElement)
84
+ assertNoA11yViolations(results, 'SyTabs – navigation mode', {
85
+ ignoreRules: ['region'],
86
+ })
87
+ })
88
+ })
@@ -162,6 +162,51 @@ describe('SyTabs', () => {
162
162
  })
163
163
  })
164
164
 
165
+ // Tests du mode Navigation
166
+ describe('Mode Navigation', () => {
167
+ const navItems = [
168
+ { label: 'Nav 1', value: 'nav1', to: '/path-1' },
169
+ { label: 'Nav 2', value: 'nav2', href: 'https://example.com' },
170
+ { label: 'Nav 3', value: 'nav3', to: '/path-3', disabled: true },
171
+ ]
172
+
173
+ it('doit utiliser la sémantique de navigation', () => {
174
+ const wrapper = createWrapper({
175
+ props: {
176
+ ...defaultMountOptions.props,
177
+ items: navItems,
178
+ },
179
+ })
180
+
181
+ // Vérifier les attributs du conteneur
182
+ const nav = wrapper.find('nav[role="navigation"]')
183
+ expect(nav.exists()).toBe(true)
184
+ expect(nav.attributes('aria-label')).toBeDefined()
185
+
186
+ // Vérifier les attributs des liens
187
+ const buttons = wrapper.findAll('.sy-tabs__button')
188
+ expect(buttons[0]!.attributes('role')).toBeUndefined()
189
+ expect(buttons[0]!.attributes('aria-current')).toBe('page')
190
+ expect(buttons[0]!.attributes('aria-selected')).toBeUndefined()
191
+ expect(buttons[0]!.attributes('aria-controls')).toBeUndefined()
192
+
193
+ expect(buttons[1]!.attributes('aria-current')).toBeUndefined()
194
+ })
195
+
196
+ it('ne doit pas générer les rôles tabpanel pour les panneaux', () => {
197
+ const wrapper = createWrapper({
198
+ props: {
199
+ ...defaultMountOptions.props,
200
+ items: navItems,
201
+ },
202
+ })
203
+
204
+ const panel = wrapper.find('.sy-tabs-panel')
205
+ expect(panel.attributes('role')).toBeUndefined()
206
+ expect(panel.attributes('aria-labelledby')).toBeUndefined()
207
+ })
208
+ })
209
+
165
210
  // Tests d'accessibilité et navigation clavier
166
211
  describe('Accessibilité et navigation clavier', () => {
167
212
  it('doit contenir les attributs ARIA appropriés', () => {
@@ -434,7 +479,7 @@ describe('SyTabs', () => {
434
479
  expect(tabList.exists()).toBe(true)
435
480
 
436
481
  // Vérifier que tous les items sont rendus
437
- const tabItems = wrapper.findAll('.sy-tabs__item')
482
+ const tabItems = wrapper.findAll('.sy-tabs__button')
438
483
  expect(tabItems.length).toBe(testItems.length)
439
484
  })
440
485
  })
@@ -4,6 +4,8 @@ import { VIcon } from 'vuetify/components'
4
4
  import { ref, watch } from 'vue'
5
5
  import { mdiAccountBox } from '@mdi/js'
6
6
  import { VBtn } from 'vuetify/components'
7
+ import { getValidationDocumentation } from '@/composables/unifyValidation/documentationValidationProps'
8
+ import { fn } from '@storybook/test'
7
9
 
8
10
  const meta = {
9
11
  title: 'Composants/Formulaires/SyTextField',
@@ -15,7 +17,6 @@ const meta = {
15
17
  ],
16
18
  parameters: {
17
19
  layout: 'fullscreen',
18
- controls: { exclude: ['modelValue', 'appendInnerIconColor', 'errorMessages', 'warningMessages', 'successMessages'] },
19
20
  docs: {
20
21
  description: {
21
22
  component: `SyTextField`,
@@ -23,6 +24,7 @@ const meta = {
23
24
  },
24
25
  },
25
26
  argTypes: {
27
+ ...getValidationDocumentation('string'),
26
28
  'modelValue': { control: 'text' },
27
29
  'label': {
28
30
  description: 'Texte affiché comme label du champ',
@@ -62,27 +64,6 @@ const meta = {
62
64
  options: ['default', 'comfortable', 'compact'],
63
65
  description: 'Densité du champ',
64
66
  },
65
- 'customRules': {
66
- description: 'Règles de validation personnalisées',
67
- control: 'object',
68
- },
69
- 'customWarningRules': {
70
- description: 'Règles d\'avertissement personnalisées',
71
- control: 'object',
72
- },
73
- 'showSuccessMessages': {
74
- description: 'Afficher les messages de succès',
75
- control: 'boolean',
76
- },
77
- 'isValidateOnBlur': {
78
- description: 'Vérifie la validité lors de la perte de focus',
79
- control: 'boolean',
80
- default: true,
81
- },
82
- 'disableErrorHandling': {
83
- control: 'boolean',
84
- description: 'Désactive complètement la validation des règles et l\'affichage des erreurs',
85
- },
86
67
  'isActive': {
87
68
  description: 'Force l\'état actif du champ (label flottant et styles visuels)',
88
69
  control: 'boolean',
@@ -107,31 +88,16 @@ const meta = {
107
88
  options: ['top', 'bottom', 'start', 'end'],
108
89
  default: 'top',
109
90
  },
110
- 'required': {
111
- description: 'Indique si le champ est obligatoire',
112
- control: 'boolean',
113
- default: false,
114
- },
115
91
  'displayAsterisk': {
116
92
  description: 'Affiche un astérisque à côté du label',
117
93
  control: 'boolean',
118
94
  default: false,
119
95
  },
120
- 'disabled': {
121
- description: 'Désactive le champ',
122
- control: 'boolean',
123
- default: false,
124
- },
125
96
  'disableClickButton': {
126
97
  description: 'Désactive le click sur les icônes append et prepend',
127
98
  control: 'boolean',
128
99
  default: true,
129
100
  },
130
- 'readonly': {
131
- description: 'Rend le champ en lecture seule',
132
- control: 'boolean',
133
- default: false,
134
- },
135
101
  'baseColor': {
136
102
  description: 'Couleur de base du champ (par défaut hérite de color)',
137
103
  control: 'text',
@@ -193,10 +159,6 @@ const meta = {
193
159
  description: 'Affiche un indicateur de chargement',
194
160
  control: 'boolean',
195
161
  },
196
- 'maxErrors': {
197
- description: 'Nombre maximum de messages d\'erreur à afficher',
198
- control: { type: 'text' },
199
- },
200
162
  'maxWidth': {
201
163
  description: 'Largeur maximale du champ',
202
164
  control: { type: 'text' },
@@ -323,6 +285,24 @@ const meta = {
323
285
  category: 'slots',
324
286
  },
325
287
  },
288
+ 'showDivider': {
289
+ description: 'Affiche une ligne de séparation entre le champ et les icônes prepend-inner et append-inner',
290
+ control: 'boolean',
291
+ table: {
292
+ type: { summary: 'boolean' },
293
+ defaultValue: { summary: 'false' },
294
+ category: 'props',
295
+ },
296
+ },
297
+ },
298
+ args: {
299
+ 'onUpdate:modelValue': fn(),
300
+ 'onKeydown': fn(),
301
+ 'onClear': fn(),
302
+ 'onPrependIconClick': fn(),
303
+ 'onAppendIconClick': fn(),
304
+ 'onFocus': fn(),
305
+ 'onBlur': fn(),
326
306
  },
327
307
  } as Meta<typeof SyTextField>
328
308
 
@@ -44,7 +44,6 @@
44
44
  direction?: 'horizontal' | 'vertical'
45
45
  isDirty?: boolean
46
46
  disabled?: boolean
47
- isOnError?: boolean
48
47
  isFlat?: boolean
49
48
  isFocused?: boolean
50
49
  areDetailsHidden?: boolean | 'auto'
@@ -101,7 +100,6 @@
101
100
  density: 'default',
102
101
  direction: 'horizontal',
103
102
  isDirty: false,
104
- isOnError: false,
105
103
  isFlat: false,
106
104
  isFocused: false,
107
105
  areDetailsHidden: false,
@@ -636,7 +634,7 @@
636
634
  :maxlength="props.maxlength"
637
635
  :max-errors="props.maxErrors"
638
636
  :max-width="props.maxWidth"
639
- :messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess && props.showSuccessMessages ? successes : []))"
637
+ :messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess && props.showSuccessMessages ? successes : messages))"
640
638
  :min-width="props.minWidth"
641
639
  :name="props.name"
642
640
  :persistent-clear="props.displayPersistentClear"
@@ -925,13 +923,13 @@
925
923
  }
926
924
 
927
925
  :deep(.v-field--focused .v-field__outline) {
928
- color: rgb(var(--v-theme-accentPrimary)) !important;
926
+ color: rgb(var(--v-theme-borderAccentPrimary)) !important;
929
927
  opacity: 1 !important;
930
928
  }
931
929
 
932
930
  :deep(.v-input__prepend .v-icon:focus-visible),
933
931
  :deep(.v-input__append .v-icon:focus-visible) {
934
- outline: 2px solid rgb(var(--v-theme-accentPrimary));
932
+ outline: 2px solid rgb(var(--v-theme-borderAccentPrimary));
935
933
  outline-offset: 2px;
936
934
  opacity: 1;
937
935
  }
@@ -939,7 +937,7 @@
939
937
 
940
938
  .help-text-below {
941
939
  color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
942
- font-size: 14px;
940
+ font-size: var(--v-fontSize-liensEtLibelles);
943
941
  line-height: 1.2;
944
942
  }
945
943
 
@@ -1170,8 +1170,6 @@
1170
1170
  </template>
1171
1171
 
1172
1172
  <style lang="scss" scoped>
1173
- @use '@/assets/tokens';
1174
-
1175
1173
  .date-picker-title {
1176
1174
  display: block;
1177
1175
  text-transform: lowercase;
@@ -1185,7 +1183,7 @@
1185
1183
  /* Style pour les jours fériés */
1186
1184
  :deep(.holiday-day) {
1187
1185
  background-color: rgb(255 193 7 / 10%);
1188
- border: 2px dotted tokens.$neutral-black;
1186
+ border: 2px dotted rgb(var(--v-theme-grey-darken60));
1189
1187
  border-radius: 50%;
1190
1188
  }
1191
1189
 
@@ -1216,13 +1214,13 @@
1216
1214
  .v-messages__message--success {
1217
1215
  :deep(.v-input__control),
1218
1216
  :deep(.v-messages__message) {
1219
- color: tokens.$colors-text-success !important;
1217
+ color: rgb(var(--v-theme-textSuccess)) !important;
1220
1218
 
1221
1219
  --v-medium-emphasis-opacity: 1;
1222
1220
  }
1223
1221
 
1224
1222
  .v-field--active & {
1225
- color: tokens.$colors-border-success !important;
1223
+ color: rgb(var(--v-theme-borderSuccess)) !important;
1226
1224
  }
1227
1225
  }
1228
1226
 
@@ -1240,38 +1238,38 @@
1240
1238
 
1241
1239
  .v-messages__message--error {
1242
1240
  :deep(.v-input__control) {
1243
- color: tokens.$colors-text-error !important;
1241
+ color: rgb(var(--v-theme-textError)) !important;
1244
1242
 
1245
1243
  --v-medium-emphasis-opacity: 1;
1246
1244
  }
1247
1245
 
1248
1246
  :deep(.v-messages__message) {
1249
- color: tokens.$colors-text-error !important;
1247
+ color: rgb(var(--v-theme-textError)) !important;
1250
1248
  }
1251
1249
 
1252
1250
  .v-field--active & {
1253
- color: tokens.$colors-border-error !important;
1251
+ color: rgb(var(--v-theme-borderError)) !important;
1254
1252
  }
1255
1253
  }
1256
1254
 
1257
1255
  .v-messages__message--warning {
1258
1256
  :deep(.v-input__control) {
1259
- color: tokens.$colors-text-warning !important;
1257
+ color: rgb(var(--v-theme-textWarning)) !important;
1260
1258
 
1261
1259
  --v-medium-emphasis-opacity: 1;
1262
1260
  }
1263
1261
 
1264
1262
  :deep(.v-messages__message) {
1265
- color: tokens.$colors-text-warning !important;
1263
+ color: rgb(var(--v-theme-textWarning)) !important;
1266
1264
  }
1267
1265
 
1268
1266
  .v-field--active & {
1269
- color: tokens.$colors-text-warning !important;
1267
+ color: rgb(var(--v-theme-textWarning)) !important;
1270
1268
  }
1271
1269
  }
1272
1270
 
1273
1271
  :deep(.v-btn__content) {
1274
- font-size: tokens.$font-size-body-text + 3;
1272
+ font-size: var(--v-fontSize-corpsDeTexte) + 3;
1275
1273
  font-weight: bold;
1276
1274
  }
1277
1275
 
@@ -1307,7 +1305,7 @@
1307
1305
  }
1308
1306
 
1309
1307
  :deep(.v-date-picker-month__day .v-btn:hover) {
1310
- background-color: tokens.$colors-background-main;
1308
+ background-color: rgb(var(--v-theme-backgroundMain));
1311
1309
  }
1312
1310
 
1313
1311
  :deep(.v-date-picker-month__day--selected, .v-date-picker-month__day--adjacent) {
@@ -1315,7 +1313,7 @@
1315
1313
  }
1316
1314
 
1317
1315
  :deep(.v-date-picker-month__day--selected .v-btn:hover) {
1318
- background-color: tokens.$colors-background-accent-primary-contrasted !important;
1316
+ background-color: rgb(var(--v-theme-backgroundAccentContrasted)) !important;
1319
1317
  }
1320
1318
 
1321
1319
  .fade-enter-active,