@cnamts/synapse 1.0.24 → 1.0.26

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 (493) hide show
  1. package/README.md +27 -5
  2. package/dist/{AutocompleteFilter-BWLR3U7W.js → AutocompleteFilter-BPR-a55G.js} +1 -1
  3. package/dist/{DateFilter-BpwFexzi.js → DateFilter-CknrJWs2.js} +2 -2
  4. package/dist/{NumberFilter-Bz_NTdX9.js → NumberFilter-DJ-yNlzv.js} +1 -1
  5. package/dist/{PeriodFilter-DX_wy9g-.js → PeriodFilter-CiB5Oa9Z.js} +1 -1
  6. package/dist/{SelectFilter-xqiPtPgX.js → SelectFilter-EiafX97M.js} +2 -2
  7. package/dist/{TextFilter-BBl3JFqK.js → TextFilter-BzOmpdxj.js} +1 -1
  8. package/dist/{apLightTheme-D1P4jcD0.js → apLightTheme-DS0Uy44H.js} +446 -723
  9. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +14 -8
  10. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +60 -289
  11. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +1 -0
  12. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -0
  13. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1 -0
  14. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  15. package/dist/components/Customs/SyTextField/SyTextField.d.ts +0 -2
  16. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +54 -73
  17. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +31 -40
  18. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +9 -14
  19. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +4 -3
  20. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  21. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  22. package/dist/components/DatePicker/types.d.ts +1 -2
  23. package/dist/components/FileList/FileList.d.ts +6 -0
  24. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  25. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +13 -13
  26. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  27. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  28. package/dist/components/MonthPicker/MonthPicker.d.ts +2 -7
  29. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +2 -7
  30. package/dist/components/NirField/NirField.d.ts +12 -20
  31. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  32. package/dist/components/PeriodField/PeriodField.d.ts +110 -150
  33. package/dist/components/PhoneField/PhoneField.d.ts +12 -7
  34. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  35. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  36. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  37. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  38. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  39. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +1 -0
  40. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  41. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  42. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  43. package/dist/components/Tables/common/SyTablePagination.d.ts +154 -364
  44. package/dist/components/Tables/common/TableHeader.d.ts +6 -1
  45. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  46. package/dist/components/Tables/common/locales.d.ts +3 -0
  47. package/dist/components/Tables/common/types.d.ts +2 -0
  48. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +1 -0
  49. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  50. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  51. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  52. package/dist/composables/unifyValidation/useValidation.d.ts +12 -6
  53. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  54. package/dist/composables/validation/useValidation.d.ts +6 -1
  55. package/dist/design-system-v3.js +2 -2
  56. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  57. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  58. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  59. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +2 -0
  60. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  61. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  62. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  63. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  64. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +2 -0
  65. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  66. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  67. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  68. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  69. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  70. package/dist/designTokens/utils/index.d.ts +2 -2
  71. package/dist/{main-BtTqyn4z.js → main-BsJ9ec3i.js} +16021 -15715
  72. package/dist/synapse.css +1 -1
  73. package/dist/utils/functions/classToHex.d.ts +1 -1
  74. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  75. package/dist/vuetifyConfig.js +113 -152
  76. package/package.json +35 -23
  77. package/src/assets/amelipro/apTokens2026.scss +5 -5
  78. package/src/assets/overrides/_breakpoints.scss +25 -0
  79. package/src/assets/overrides/_btns.scss +0 -2
  80. package/src/assets/overrides/_forms.scss +1 -3
  81. package/src/assets/overrides/_icons.scss +5 -22
  82. package/src/assets/overrides/_otp.scss +40 -0
  83. package/src/assets/overrides/_tables.scss +11 -20
  84. package/src/assets/overrides/_tooltips.scss +17 -7
  85. package/src/assets/overrides/_typography.scss +35 -37
  86. package/src/assets/overrides/_utilities.scss +43 -47
  87. package/src/assets/themes.scss +1 -0
  88. package/src/components/Accordion/Accordion.vue +2 -0
  89. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  90. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  91. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  92. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  93. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  94. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  95. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  96. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  97. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  98. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  99. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  100. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  101. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  102. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  103. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  104. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  105. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  106. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  107. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  108. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  109. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  110. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  111. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  112. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  113. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  114. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  115. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  116. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  117. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  118. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  119. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  120. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  121. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  122. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  123. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  124. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  125. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  126. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  127. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  128. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  129. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  130. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  131. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  132. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  133. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  134. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  135. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  136. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  137. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  138. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  139. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  140. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  141. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  142. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  143. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  144. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  145. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  146. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  147. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  148. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  149. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  150. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  151. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  152. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  153. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  154. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  155. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  156. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  157. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  158. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  159. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  160. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  161. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  162. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  163. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  164. package/src/components/Captcha/Captcha.vue +1 -3
  165. package/src/components/ChipList/ChipList.vue +14 -16
  166. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -3
  167. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  168. package/src/components/CopyBtn/CopyBtn.vue +10 -3
  169. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  170. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  171. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  172. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +8 -4
  173. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  174. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +66 -0
  175. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +4 -6
  176. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +414 -135
  177. package/src/components/Customs/Selects/SySelect/SySelect.vue +502 -257
  178. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  179. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +278 -4
  180. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +3 -3
  181. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  182. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +52 -2
  183. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +18 -3
  184. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  185. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +23 -5
  186. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  187. package/src/components/Customs/SyTabs/SyTabs.stories.ts +34 -35
  188. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  189. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  190. package/src/components/Customs/SyTabs/config.ts +3 -3
  191. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  192. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  193. package/src/components/Customs/SyTextField/SyTextField.stories.ts +21 -41
  194. package/src/components/Customs/SyTextField/SyTextField.vue +34 -9
  195. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  196. package/src/components/DatePicker/CalendarMode/DatePicker.vue +29 -28
  197. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  198. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +28 -23
  199. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +24 -1
  200. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  201. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +65 -33
  202. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  203. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  204. package/src/components/DatePicker/composables/useDatePickerState.ts +56 -13
  205. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  206. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  207. package/src/components/DatePicker/composables/useDateTextField.ts +2 -3
  208. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  209. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  210. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  211. package/src/components/DatePicker/types.ts +1 -2
  212. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  213. package/src/components/DialogBox/DialogBox.vue +3 -5
  214. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  215. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  216. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  217. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  218. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  219. package/src/components/FileList/FileList.vue +9 -2
  220. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  221. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  222. package/src/components/FileUpload/FileUpload.vue +3 -5
  223. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  224. package/src/components/FilterInline/FilterInline.vue +1 -3
  225. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  226. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  227. package/src/components/FilterSideBar/FilterSideBar.vue +9 -1
  228. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  229. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  230. package/src/components/FooterBar/FooterBar.vue +9 -13
  231. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  232. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  233. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  234. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  235. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  236. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  237. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  238. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  239. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  240. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  241. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  242. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  243. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  244. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  245. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  246. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  247. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  248. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  249. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  250. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  251. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  252. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  253. package/src/components/LangBtn/LangBtn.vue +4 -5
  254. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -0
  255. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  256. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  257. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  258. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  259. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  260. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  261. package/src/components/LogoBrandSection/LogoBrandSection.vue +2 -2
  262. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  263. package/src/components/NirField/NirField.stories.ts +2 -2
  264. package/src/components/NirField/NirField.vue +3 -5
  265. package/src/components/NirField/accessibilite/Accessibility.mdx +100 -5
  266. package/src/components/NirField/tests/NirField.spec.ts +118 -0
  267. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  268. package/src/components/NirField/useNirValidation.ts +38 -32
  269. package/src/components/NotificationBar/Notification/Notification.vue +7 -9
  270. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  271. package/src/components/PaginatedTable/PaginatedTable.vue +3 -4
  272. package/src/components/PaginatedTable/Pagination.vue +4 -6
  273. package/src/components/PasswordField/PasswordField.vue +15 -13
  274. package/src/components/PhoneField/PhoneField.vue +7 -5
  275. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -20
  276. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  277. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  278. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  279. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  280. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  281. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  282. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  283. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +38 -56
  284. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  285. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  286. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  287. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  288. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  289. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  290. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +31 -42
  291. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  292. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  293. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  294. package/src/components/RatingPicker/tests/RatingPicker.a11y.spect.ts +123 -0
  295. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  296. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  297. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  298. package/src/components/SearchListField/SearchListField.vue +0 -2
  299. package/src/components/SkipLink/SkipLink.vue +2 -4
  300. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  301. package/src/components/SubHeader/SubHeader.vue +1 -1
  302. package/src/components/SyAlert/SyAlert.vue +7 -9
  303. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  304. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  305. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  306. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  307. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  308. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  309. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  310. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  311. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  312. package/src/components/SyTextArea/SyTextArea.vue +32 -1
  313. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  314. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +166 -0
  315. package/src/components/Tables/SyServerTable/SyServerTable.vue +10 -8
  316. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +23 -0
  317. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +268 -0
  318. package/src/components/Tables/SyTable/SyTable.stories.ts +104 -0
  319. package/src/components/Tables/SyTable/SyTable.vue +10 -8
  320. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +22 -0
  321. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +274 -0
  322. package/src/components/Tables/common/SyTableFilter.vue +31 -6
  323. package/src/components/Tables/common/SyTablePagination.vue +143 -19
  324. package/src/components/Tables/common/TableHeader.vue +41 -4
  325. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  326. package/src/components/Tables/common/filters/SelectFilter.vue +1 -1
  327. package/src/components/Tables/common/locales.ts +3 -0
  328. package/src/components/Tables/common/tableStyles.scss +16 -19
  329. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  330. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  331. package/src/components/Tables/common/types.ts +2 -0
  332. package/src/components/Tables/common/useTableHeaders.ts +49 -27
  333. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  334. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  335. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  336. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  337. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  338. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +81 -0
  339. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  340. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  341. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  342. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +2 -1
  343. package/src/composables/unifyValidation/tests/useValidation.spec.ts +22 -0
  344. package/src/composables/unifyValidation/useCustomValidation.ts +16 -4
  345. package/src/composables/unifyValidation/useValidation.ts +46 -15
  346. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  347. package/src/composables/useFormFieldErrorHandling.ts +4 -1
  348. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  349. package/src/composables/validation/useValidation.ts +32 -4
  350. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  351. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  352. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  353. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  354. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  355. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  356. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  357. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  358. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  359. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  360. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  361. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  362. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  363. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  364. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  365. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  366. package/src/designTokens/tokens/amelipro/apLightTheme.ts +4 -1
  367. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  368. package/src/designTokens/tokens/baseColors.ts +129 -0
  369. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  370. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  371. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  372. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +4 -1
  373. package/src/designTokens/tokens/cnam/cnamSemantic.ts +1 -1
  374. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  375. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  376. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  377. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  378. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  379. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  380. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  381. package/src/designTokens/utils/index.ts +2 -2
  382. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  383. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -19
  384. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  385. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  386. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  387. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  388. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  389. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  390. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +176 -79
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +67 -19
  392. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +78 -50
  393. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  394. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  395. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  396. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +55 -67
  397. package/src/stories/Components/Components.stories.ts +92 -4
  398. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  399. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  400. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  401. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  402. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  403. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  404. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  405. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  406. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  407. package/src/stories/styles/accessibility-guide.css +3 -3
  408. package/src/utils/functions/classToHex.ts +6 -34
  409. package/src/utils/functions/createHexResolver.ts +45 -0
  410. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  411. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  412. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  413. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  414. package/dist/AutocompleteFilter-D9jzRzAL.cjs +0 -1
  415. package/dist/DateFilter-DTUl8hb1.cjs +0 -1
  416. package/dist/NumberFilter-MAEojdk0.cjs +0 -1
  417. package/dist/PeriodFilter-CC4WgIhl.cjs +0 -1
  418. package/dist/SelectFilter-BR3fvl-a.cjs +0 -1
  419. package/dist/TextFilter-CCfYFl5F.cjs +0 -1
  420. package/dist/apLightTheme-CFSRrjv2.cjs +0 -1
  421. package/dist/composables/date/useDateFormat.d.ts +0 -26
  422. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  423. package/dist/design-system-v3.umd.cjs +0 -1
  424. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  425. package/dist/main-C1e3eoxd.cjs +0 -1067
  426. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  427. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  428. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  429. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  430. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  431. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  432. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  433. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  434. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  435. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  436. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  437. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  438. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  439. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  440. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  441. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  442. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  443. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  444. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  445. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  446. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  447. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  448. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  449. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  450. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  451. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  452. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  453. package/dist/tooth-44-CazyQucj.cjs +0 -1
  454. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  455. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  456. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  457. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  458. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  459. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  460. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  461. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  462. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  463. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  464. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  465. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  466. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  467. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  468. package/dist/tooth-71-D473PPO5.cjs +0 -1
  469. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  470. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  471. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  472. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  473. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  474. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  475. package/dist/tooth-83-KV010j64.cjs +0 -1
  476. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  477. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  478. package/dist/vuetifyConfig.umd.cjs +0 -1
  479. package/src/assets/apTokens.scss +0 -343
  480. package/src/assets/overrides/_container.scss +0 -36
  481. package/src/assets/tokens.scss +0 -388
  482. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  483. package/src/composables/date/useDateFormat.ts +0 -110
  484. package/src/composables/date/useDateInitialization.ts +0 -92
  485. package/src/designTokens/apColors.md +0 -66
  486. package/src/designTokens/cnamColors.md +0 -193
  487. package/src/designTokens/paColors.md +0 -66
  488. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  489. package/src/designTokens/tokens/json/primitives.json +0 -209
  490. package/src/designTokens/tokens/json/semantic.json +0 -120
  491. package/src/designTokens/utils/convertGaps.ts +0 -11
  492. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  493. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -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,
@@ -277,6 +275,13 @@
277
275
  return 'rgba(0, 0, 0, 1)'
278
276
  })
279
277
 
278
+ const clearButtonColorClass = computed(() => {
279
+ if (hasError.value) return 'error-field'
280
+ if (hasWarning.value) return 'warning-field'
281
+ if (hasSuccess.value) return 'success-field'
282
+ return 'text-iconBase'
283
+ })
284
+
280
285
  const handlePrependIconClick = () => {
281
286
  emit('prepend-icon-click')
282
287
  }
@@ -348,7 +353,7 @@
348
353
  const validationIcon = computed(() => {
349
354
  if (hasError.value) return ICONS['error']
350
355
  if (hasWarning.value) return ICONS['warning']
351
- if (hasSuccess.value && props.showSuccessMessages) return ICONS['success']
356
+ if (hasSuccess.value) return ICONS['success']
352
357
  return null
353
358
  })
354
359
 
@@ -363,7 +368,7 @@
363
368
  // Détermine s'il y a des messages d'erreur ou d'état
364
369
  const hasMessages = computed(() => {
365
370
  if (props.disableErrorHandling) return false
366
- return (props.errorMessages?.length ?? 0) > 0 || hasError.value || hasWarning.value || hasSuccess.value
371
+ return (props.errorMessages?.length ?? 0) > 0 || hasError.value || hasWarning.value || (hasSuccess.value && props.showSuccessMessages)
367
372
  })
368
373
 
369
374
  // Détermine si le helpText doit être affiché à la position du message ou en dessous
@@ -636,7 +641,7 @@
636
641
  :maxlength="props.maxlength"
637
642
  :max-errors="props.maxErrors"
638
643
  :max-width="props.maxWidth"
639
- :messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess && props.showSuccessMessages ? successes : []))"
644
+ :messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess ? (props.showSuccessMessages ? successes : []) : messages))"
640
645
  :min-width="props.minWidth"
641
646
  :name="props.name"
642
647
  :persistent-clear="props.displayPersistentClear"
@@ -780,7 +785,8 @@
780
785
  <!-- Keyboard-focusable clear button -->
781
786
  <VBtn
782
787
  v-if="showClear"
783
- class="v-btn v-btn--density-compact mr-1 text-iconBase"
788
+ class="v-btn v-btn--density-compact mr-1"
789
+ :class="clearButtonColorClass"
784
790
  :aria-label="props.label ? `Vider ${props.label}` : 'Vider'"
785
791
  :title="props.label ? `Vider ${props.label}` : 'Vider'"
786
792
  :icon="mdiClose"
@@ -851,7 +857,11 @@
851
857
  :deep(.v-field) {
852
858
  color: rgb(var(--v-theme-borderWarning)) !important;
853
859
 
860
+ --v-medium-emphasis-opacity: 1;
861
+
854
862
  .v-field__outline {
863
+ --v-field-border-opacity: 1;
864
+
855
865
  color: rgb(var(--v-theme-borderWarning)) !important;
856
866
  }
857
867
  }
@@ -865,6 +875,13 @@
865
875
  }
866
876
  }
867
877
 
878
+ /* stylelint-disable-next-line selector-class-pattern */
879
+ .text-iconBase {
880
+ :deep(.v-icon__svg) {
881
+ fill: rgb(var(--v-theme-borderAccentPrimary)) !important;
882
+ }
883
+ }
884
+
868
885
  .error-field {
869
886
  :deep(.v-input__details > .v-icon),
870
887
  :deep(.v-input__prepend > .v-icon),
@@ -872,10 +889,16 @@
872
889
  opacity: 1 !important;
873
890
  }
874
891
 
892
+ :deep(.v-icon__svg) {
893
+ fill: rgb(var(--v-theme-textError)) !important;
894
+ }
895
+
875
896
  :deep(.v-field) {
876
897
  color: rgb(var(--v-theme-borderError)) !important;
877
898
 
878
899
  .v-field__outline {
900
+ --v-field-border-opacity: 1;
901
+
879
902
  color: rgb(var(--v-theme-borderError)) !important;
880
903
  }
881
904
  }
@@ -906,6 +929,8 @@
906
929
  --v-medium-emphasis-opacity: 1;
907
930
 
908
931
  .v-field__outline {
932
+ --v-field-border-opacity: 1;
933
+
909
934
  color: rgb(var(--v-theme-borderSuccess)) !important;
910
935
  }
911
936
  }
@@ -925,13 +950,13 @@
925
950
  }
926
951
 
927
952
  :deep(.v-field--focused .v-field__outline) {
928
- color: rgb(var(--v-theme-accentPrimary)) !important;
953
+ color: rgb(var(--v-theme-borderAccentPrimary)) !important;
929
954
  opacity: 1 !important;
930
955
  }
931
956
 
932
957
  :deep(.v-input__prepend .v-icon:focus-visible),
933
958
  :deep(.v-input__append .v-icon:focus-visible) {
934
- outline: 2px solid rgb(var(--v-theme-accentPrimary));
959
+ outline: 2px solid rgb(var(--v-theme-borderAccentPrimary));
935
960
  outline-offset: 2px;
936
961
  opacity: 1;
937
962
  }
@@ -939,7 +964,7 @@
939
964
 
940
965
  .help-text-below {
941
966
  color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
942
- font-size: 14px;
967
+ font-size: var(--v-fontSize-liensEtLibelles);
943
968
  line-height: 1.2;
944
969
  }
945
970
 
@@ -172,7 +172,7 @@ const meta = {
172
172
  },
173
173
  'birthDate': {
174
174
  control: 'boolean',
175
- description: 'Alias pour isBirthDate (pour compatibilité avec l\'attribut kebab-case birth-date dans les templates). ⚠️ Utiliser soit birthDate soit isBirthDate, mais pas les deux.',
175
+ description: '⚠️ **DEPRECATED** Utilisez `isBirthDate` à la place.',
176
176
  defaultValue: false,
177
177
  },
178
178
  'isOutlined': {
@@ -7,7 +7,7 @@
7
7
  import { useValidation, type ValidationResult, type ValidationRule } from '@/composables/validation/useValidation'
8
8
  import { useValidatable } from '@/composables/validation/useValidatable'
9
9
  import { useDateFormat } from '@/composables/date/useDateFormatDayjs'
10
- import { useDateInitialization, type DateValue, type DateInput } from '@/composables/date/useDateInitializationDayjs'
10
+ import { useDateInitialization, type DateModelValue, type DateInput } from '@/composables/date/useDateInitializationDayjs'
11
11
  import { useDatePickerAccessibility } from '@/composables/date/useDatePickerAccessibility'
12
12
  import { useWeekendDays, useTodayButton, useDatePickerViewMode, useDateSelection, useMonthButtonCustomization, useDisplayedDateString, useAsteriskDisplay, useDateValidation, useDatePickerState, useHolidayHighlighting, useCalendarKeyboardNavigation, useDatePickerFocusTrap } from '../composables'
13
13
  import { DATE_PICKER_MESSAGES } from '../constants/messages'
@@ -40,7 +40,8 @@
40
40
  const props = withDefaults(defineProps<{
41
41
  autoClamp?: boolean
42
42
  bgColor?: string
43
- birthDate?: boolean // Alias pour isBirthDate pour compatibilité avec l'attribut kebab-case birth-date
43
+ /** @deprecated Utilisez isBirthDate à la place */
44
+ birthDate?: boolean
44
45
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
46
  customRules?: { type: string, options: any }[]
46
47
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -241,12 +242,12 @@
241
242
  }
242
243
 
243
244
  const emit = defineEmits<{
244
- (e: 'update:modelValue', value: DateValue): void
245
+ (e: 'update:modelValue', value: DateModelValue): void
245
246
  (e: 'closed'): void
246
247
  (e: 'focus'): void
247
248
  (e: 'blur'): void
248
- (e: 'input', value: DateValue): void
249
- (e: 'date-selected', value: DateValue): void
249
+ (e: 'input', value: DateModelValue): void
250
+ (e: 'date-selected', value: DateModelValue): void
250
251
  }>()
251
252
 
252
253
  const validation = useValidation({
@@ -309,7 +310,8 @@
309
310
 
310
311
  const errorMessages = errors
311
312
  const warningMessages = warnings
312
- const successMessages = successes
313
+ const successMessages = validation.displaySuccesses
314
+ const isOnSuccess = computed(() => successes.value.length > 0 && errors.value.length === 0 && warnings.value.length === 0)
313
315
 
314
316
  // Variable pour éviter les mises à jour récursives
315
317
  const isUpdatingFromInternal = ref(false)
@@ -392,7 +394,7 @@
392
394
  }
393
395
 
394
396
  // Fonction centralisée pour mettre à jour le modèle
395
- const updateModel = async (value: DateValue) => {
397
+ const updateModel = async (value: DateModelValue) => {
396
398
  // Éviter les mises à jour inutiles
397
399
  if (JSON.stringify(value) === JSON.stringify(props.modelValue)) return
398
400
 
@@ -434,7 +436,7 @@
434
436
  if (Array.isArray(newValue) && props.displayRange && newValue.length >= 2 && props.noCalendar) {
435
437
  // Cas spécifique noCalendar + displayRange : conserver la chaîne de plage complète
436
438
  const start = newValue[0]
437
- const end = newValue[1]
439
+ const end = newValue[newValue.length - 1]
438
440
  if (start && end) {
439
441
  textInputValue.value = `${formatDate(start, props.format)} - ${formatDate(end, props.format)}`
440
442
  }
@@ -465,7 +467,7 @@
465
467
  })
466
468
 
467
469
  // Utilisation du composable pour gérer la sélection de dates
468
- const { updateSelectedDates, rangeBoundaryDates, resetRange } = useDateSelection(
470
+ const { updateSelectedDates, rangeBoundaryDates, generateDateRange, resetRange } = useDateSelection(
469
471
  parseDate,
470
472
  selectedDates,
471
473
  props.format,
@@ -490,10 +492,11 @@
490
492
  initializeSelectedDates,
491
493
  validateDates,
492
494
  updateModel,
495
+ generateDateRange,
493
496
  })
494
497
 
495
498
  // Gestionnaire pour les mises à jour du DateTextInput en mode no-calendar
496
- const handleDateTextInputUpdate = async (value: DateValue) => {
499
+ const handleDateTextInputUpdate = async (value: DateModelValue) => {
497
500
  if (isUpdatingFromInternal.value) return
498
501
 
499
502
  try {
@@ -514,7 +517,7 @@
514
517
  const endDate = parseDate(endDateStr, props.dateFormatReturn || props.format)
515
518
 
516
519
  if (startDate && endDate) {
517
- selectedDates.value = [startDate, endDate]
520
+ selectedDates.value = generateDateRange(startDate, endDate)
518
521
  displayFormattedDate.value = `${formatDate(startDate, props.format)} - ${formatDate(endDate, props.format)}`
519
522
  }
520
523
  }
@@ -535,7 +538,7 @@
535
538
  }
536
539
 
537
540
  // Gestionnaire pour les événements date-selected du DateTextInput
538
- const handleDateTextInputSelection = async (value: DateValue) => {
541
+ const handleDateTextInputSelection = async (value: DateModelValue) => {
539
542
  if (isUpdatingFromInternal.value) return
540
543
 
541
544
  // Mettre à jour le modèle avec la valeur sélectionnée
@@ -774,7 +777,6 @@
774
777
 
775
778
  // Utilisation du composable pour gérer le mode d'affichage du CalendarMode
776
779
  const { currentViewMode, handleViewModeUpdate, handleYearUpdate, handleMonthUpdate, resetViewMode } = useDatePickerViewMode(
777
- // Fonction qui retourne la valeur actuelle de isBirthDate (combinaison de isBirthDate et birthDate)
778
780
  () => props.isBirthDate || props.birthDate,
779
781
  // Fonction qui retourne l'état de la date sélectionnée
780
782
  () => selectedDates.value,
@@ -1061,7 +1063,8 @@
1061
1063
  :class="[getMessageClasses(), 'label-hidden-on-focus']"
1062
1064
  :error-messages="errorMessages"
1063
1065
  :warning-messages="warningMessages"
1064
- :success-messages="props.showSuccessMessages ? successMessages : []"
1066
+ :success-messages="successMessages"
1067
+ :has-success="isOnSuccess"
1065
1068
  :disabled="props.disabled"
1066
1069
  :disable-click-button="false"
1067
1070
  :readonly="true"
@@ -1170,8 +1173,6 @@
1170
1173
  </template>
1171
1174
 
1172
1175
  <style lang="scss" scoped>
1173
- @use '@/assets/tokens';
1174
-
1175
1176
  .date-picker-title {
1176
1177
  display: block;
1177
1178
  text-transform: lowercase;
@@ -1185,7 +1186,7 @@
1185
1186
  /* Style pour les jours fériés */
1186
1187
  :deep(.holiday-day) {
1187
1188
  background-color: rgb(255 193 7 / 10%);
1188
- border: 2px dotted tokens.$neutral-black;
1189
+ border: 2px dotted rgb(var(--v-theme-grey-darken60));
1189
1190
  border-radius: 50%;
1190
1191
  }
1191
1192
 
@@ -1216,13 +1217,13 @@
1216
1217
  .v-messages__message--success {
1217
1218
  :deep(.v-input__control),
1218
1219
  :deep(.v-messages__message) {
1219
- color: tokens.$colors-text-success !important;
1220
+ color: rgb(var(--v-theme-textSuccess)) !important;
1220
1221
 
1221
1222
  --v-medium-emphasis-opacity: 1;
1222
1223
  }
1223
1224
 
1224
1225
  .v-field--active & {
1225
- color: tokens.$colors-border-success !important;
1226
+ color: rgb(var(--v-theme-borderSuccess)) !important;
1226
1227
  }
1227
1228
  }
1228
1229
 
@@ -1240,38 +1241,38 @@
1240
1241
 
1241
1242
  .v-messages__message--error {
1242
1243
  :deep(.v-input__control) {
1243
- color: tokens.$colors-text-error !important;
1244
+ color: rgb(var(--v-theme-textError)) !important;
1244
1245
 
1245
1246
  --v-medium-emphasis-opacity: 1;
1246
1247
  }
1247
1248
 
1248
1249
  :deep(.v-messages__message) {
1249
- color: tokens.$colors-text-error !important;
1250
+ color: rgb(var(--v-theme-textError)) !important;
1250
1251
  }
1251
1252
 
1252
1253
  .v-field--active & {
1253
- color: tokens.$colors-border-error !important;
1254
+ color: rgb(var(--v-theme-borderError)) !important;
1254
1255
  }
1255
1256
  }
1256
1257
 
1257
1258
  .v-messages__message--warning {
1258
1259
  :deep(.v-input__control) {
1259
- color: tokens.$colors-text-warning !important;
1260
+ color: rgb(var(--v-theme-textWarning)) !important;
1260
1261
 
1261
1262
  --v-medium-emphasis-opacity: 1;
1262
1263
  }
1263
1264
 
1264
1265
  :deep(.v-messages__message) {
1265
- color: tokens.$colors-text-warning !important;
1266
+ color: rgb(var(--v-theme-textWarning)) !important;
1266
1267
  }
1267
1268
 
1268
1269
  .v-field--active & {
1269
- color: tokens.$colors-text-warning !important;
1270
+ color: rgb(var(--v-theme-textWarning)) !important;
1270
1271
  }
1271
1272
  }
1272
1273
 
1273
1274
  :deep(.v-btn__content) {
1274
- font-size: tokens.$font-size-body-text + 3;
1275
+ font-size: var(--v-fontSize-corpsDeTexte) + 3;
1275
1276
  font-weight: bold;
1276
1277
  }
1277
1278
 
@@ -1307,7 +1308,7 @@
1307
1308
  }
1308
1309
 
1309
1310
  :deep(.v-date-picker-month__day .v-btn:hover) {
1310
- background-color: tokens.$colors-background-main;
1311
+ background-color: rgb(var(--v-theme-backgroundMain));
1311
1312
  }
1312
1313
 
1313
1314
  :deep(.v-date-picker-month__day--selected, .v-date-picker-month__day--adjacent) {
@@ -1315,7 +1316,7 @@
1315
1316
  }
1316
1317
 
1317
1318
  :deep(.v-date-picker-month__day--selected .v-btn:hover) {
1318
- background-color: tokens.$colors-background-accent-primary-contrasted !important;
1319
+ background-color: rgb(var(--v-theme-backgroundAccentContrasted)) !important;
1319
1320
  }
1320
1321
 
1321
1322
  .fade-enter-active,
@@ -309,7 +309,7 @@ const meta = {
309
309
  },
310
310
  'birthDate': {
311
311
  control: 'boolean',
312
- description: 'Alias pour isBirthDate (pour compatibilité avec l\'attribut kebab-case birth-date dans les templates). ⚠️ Utiliser soit birthDate soit isBirthDate, mais pas les deux.',
312
+ description: '⚠️ **DEPRECATED** Utilisez `isBirthDate` à la place.',
313
313
  defaultValue: false,
314
314
  },
315
315
  'useCombinedMode': {