@cnamts/synapse 1.0.5 → 1.0.7

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 (364) hide show
  1. package/dist/{DateFilter-BQpRKTju.js → DateFilter-CHDLz2EO.js} +1 -1
  2. package/dist/{NumberFilter-BykSKt2D.js → NumberFilter-DXNQ4Uls.js} +1 -1
  3. package/dist/{PeriodFilter-Cks6NygV.js → PeriodFilter-C8Qf3Jcn.js} +1 -1
  4. package/dist/{SelectFilter-DEL5dHd_.js → SelectFilter-B2Ejs4Cb.js} +1 -1
  5. package/dist/{TextFilter-0RAFj7Oe.js → TextFilter-CfR5_A1S.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordion.d.ts +103 -0
  7. package/dist/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.d.ts +105 -0
  8. package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
  9. package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  10. package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
  11. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
  12. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
  13. package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
  14. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
  15. package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
  16. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
  17. package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +132 -0
  18. package/dist/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
  19. package/dist/components/Amelipro/AmeliproCard/AmeliproCard.d.ts +3 -3
  20. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
  21. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
  22. package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
  23. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
  24. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +126 -0
  25. package/dist/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
  26. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
  27. package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +3 -3
  28. package/dist/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.d.ts +1 -1
  29. package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
  30. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
  31. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  32. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +190 -0
  33. package/dist/components/Amelipro/AmeliproTable/types.d.ts +34 -0
  34. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
  35. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
  36. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
  37. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +2 -2
  38. package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
  39. package/dist/components/Amelipro/types.d.ts +6 -0
  40. package/dist/components/ChipList/ChipList.d.ts +4 -0
  41. package/dist/components/ChipList/locales.d.ts +4 -2
  42. package/dist/components/CookieBanner/CookieBanner.d.ts +1 -1
  43. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
  44. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +454 -8
  45. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +6 -1
  46. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
  47. package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
  48. package/dist/components/Customs/SyTabs/config.d.ts +17 -0
  49. package/dist/components/Customs/SyTabs/types.d.ts +11 -0
  50. package/dist/components/Customs/SyTextField/SyTextField.d.ts +12 -10
  51. package/dist/components/DataList/DataList.d.ts +10 -1
  52. package/dist/components/DataListGroup/DataListGroup.d.ts +10 -1
  53. package/dist/components/DataListItem/DataListItem.d.ts +1 -1
  54. package/dist/components/DataListItem/config.d.ts +1 -1
  55. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4825 -244
  56. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +58 -29
  57. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +28 -10
  58. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +18 -8
  59. package/dist/components/DatePicker/composables/useKeyboardEvents.d.ts +41 -0
  60. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +4 -9
  61. package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
  62. package/dist/components/DatePicker/utils/dateFormattingUtils.d.ts +72 -0
  63. package/dist/components/DatePicker/utils/validationUtils.d.ts +38 -0
  64. package/dist/components/DialogBox/DialogBox.d.ts +219 -0
  65. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.d.ts +9 -3
  66. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.d.ts +6 -1
  67. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.d.ts +11 -1
  68. package/dist/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.d.ts +11 -1
  69. package/dist/components/HeaderBar/HeaderBurgerMenu/locals.d.ts +2 -0
  70. package/dist/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.d.ts +4 -0
  71. package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
  72. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
  73. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
  74. package/dist/components/LangBtn/LangBtn.d.ts +2 -2
  75. package/dist/components/NirField/NirField.d.ts +30 -20
  76. package/dist/components/PeriodField/PeriodField.d.ts +10949 -1783
  77. package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
  78. package/dist/components/PhoneField/indicatifs.d.ts +1 -0
  79. package/dist/components/PhoneField/locales.d.ts +1 -0
  80. package/dist/components/RangeField/RangeField.d.ts +1 -1
  81. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
  82. package/dist/components/SubHeader/SubHeader.d.ts +8 -0
  83. package/dist/components/SubHeader/locales.d.ts +1 -0
  84. package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
  85. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  86. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  87. package/dist/components/Tables/common/SyTablePagination.d.ts +458 -7
  88. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
  89. package/dist/components/Tables/common/types.d.ts +2 -0
  90. package/dist/components/index.d.ts +13 -0
  91. package/dist/composables/index.d.ts +1 -0
  92. package/dist/composables/usePagination.d.ts +16 -0
  93. package/dist/design-system-v3.js +174 -160
  94. package/dist/design-system-v3.umd.cjs +290 -281
  95. package/dist/directives/lockFocus.d.ts +17 -0
  96. package/dist/{main-Co2P_lBt.js → main-C66C1BkG.js} +14406 -11554
  97. package/dist/style.css +1 -1
  98. package/package.json +4 -1
  99. package/src/assets/amelipro/apTheme.scss +149 -0
  100. package/src/assets/amelipro/apTokens.scss +0 -148
  101. package/src/assets/amelipro/icons.ts +38 -11
  102. package/src/assets/overrides/_btns.scss +15 -0
  103. package/src/assets/overrides/_container.scss +36 -0
  104. package/src/assets/overrides/_forms.scss +7 -0
  105. package/src/assets/{_spacers.scss → overrides/_spacers.scss} +0 -7
  106. package/src/assets/overrides/_tables.scss +18 -0
  107. package/src/assets/overrides/_tooltips.scss +10 -0
  108. package/src/assets/overrides/_typography.scss +196 -0
  109. package/src/assets/settings.scss +11 -51
  110. package/src/assets/themes.scss +10 -0
  111. package/src/assets/tokens.scss +9 -156
  112. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +80 -40
  113. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.mdx +15 -0
  114. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.stories.ts +83 -0
  115. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordion.vue +86 -0
  116. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +242 -0
  117. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/AmeliproAccordionTemplate.spec.ts +20 -0
  118. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +124 -0
  119. package/src/components/Amelipro/AmeliproAccordion/__tests__/AmeliproAccordion.spec.ts +20 -0
  120. package/src/components/Amelipro/AmeliproAccordion/__tests__/__snapshots__/AmeliproAccordion.spec.ts.snap +124 -0
  121. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
  122. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
  123. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
  124. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
  125. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
  126. package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  127. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
  128. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
  129. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
  130. package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
  131. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
  132. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
  133. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
  134. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
  135. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
  136. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
  137. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
  138. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
  139. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
  140. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
  141. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
  142. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
  143. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
  144. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
  145. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
  146. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
  147. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
  148. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
  149. package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
  150. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.mdx +15 -0
  151. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.stories.ts +87 -0
  152. package/src/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.vue +233 -0
  153. package/src/components/Amelipro/AmeliproCaptcha/__tests__/AmeliproCaptcha.spec.ts +24 -0
  154. package/src/components/Amelipro/AmeliproCaptcha/__tests__/__snapshots__/AmeliproCaptcha.spec.ts.snap +384 -0
  155. package/src/components/Amelipro/AmeliproCaptcha/types.d.ts +5 -0
  156. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
  157. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
  158. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
  159. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
  160. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
  161. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
  162. package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
  163. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
  164. package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
  165. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
  166. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
  167. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
  168. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
  169. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
  170. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.mdx +15 -0
  171. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.stories.ts +143 -0
  172. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +351 -0
  173. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/AmeliproCustomSelector.spec.ts +50 -0
  174. package/src/components/Amelipro/AmeliproCustomSelector/__tests__/__snapshots__/AmeliproCustomSelector.spec.ts.snap +186 -0
  175. package/src/components/Amelipro/AmeliproCustomSelector/types.d.ts +6 -0
  176. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
  177. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -711
  178. package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
  179. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -711
  180. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
  181. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
  182. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
  183. package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
  184. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
  185. package/src/components/Amelipro/AmeliproTable/AmeliproTable.mdx +22 -0
  186. package/src/components/Amelipro/AmeliproTable/AmeliproTable.stories.ts +550 -0
  187. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +422 -0
  188. package/src/components/Amelipro/AmeliproTable/__tests__/AmeliproTable.spec.ts +72 -0
  189. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +424 -0
  190. package/src/components/Amelipro/AmeliproTable/types.d.ts +34 -0
  191. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
  192. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +12 -1
  193. package/src/components/Amelipro/ServiceMenu/tests/__snapshots__/ServiceMenu.spec.ts.snap +0 -820
  194. package/src/components/Amelipro/types.ts +8 -0
  195. package/src/components/ChipList/Accessibilite.stories.ts +4 -0
  196. package/src/components/ChipList/ChipList.vue +185 -42
  197. package/src/components/ChipList/locales.ts +4 -2
  198. package/src/components/ChipList/tests/chipList.spec.ts +7 -4
  199. package/src/components/CollapsibleList/CollapsibleList.vue +0 -2
  200. package/src/components/CookieBanner/CookieBanner.vue +1 -3
  201. package/src/components/CopyBtn/CopyBtn.vue +9 -2
  202. package/src/components/CopyBtn/tests/CopyBtn.spec.ts +3 -1
  203. package/src/components/Customs/Selects/SelectOverview.mdx +18 -15
  204. package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
  205. package/src/components/Customs/Selects/SySelect/Accessibilite.mdx +7 -0
  206. package/src/components/Customs/Selects/SySelect/Accessibilite.stories.ts +4 -1
  207. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +92 -4
  208. package/src/components/Customs/Selects/SySelect/SySelect.vue +373 -56
  209. package/src/components/Customs/Selects/SySelect/composables/tests/useSySelectKeyboard.spec.ts +14 -5
  210. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +129 -12
  211. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
  212. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
  213. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
  214. package/src/components/Customs/SyIcon/SyIcon.spec.ts +3 -0
  215. package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
  216. package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
  217. package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
  218. package/src/components/Customs/SyTabs/SyTabs.vue +350 -0
  219. package/src/components/Customs/SyTabs/config.ts +17 -0
  220. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
  221. package/src/components/Customs/SyTabs/types.ts +12 -0
  222. package/src/components/Customs/SyTextField/Accessibilite.stories.ts +3 -1
  223. package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
  224. package/src/components/Customs/SyTextField/SyTextField.stories.ts +221 -7
  225. package/src/components/Customs/SyTextField/SyTextField.vue +226 -29
  226. package/src/components/DataList/Accessibilite.stories.ts +4 -0
  227. package/src/components/DataList/DataList.vue +52 -47
  228. package/src/components/DataListGroup/Accessibilite.stories.ts +4 -0
  229. package/src/components/DataListGroup/DataListGroup.vue +32 -15
  230. package/src/components/DataListItem/DataListItem.vue +72 -65
  231. package/src/components/DataListItem/config.ts +1 -1
  232. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
  233. package/src/components/DatePicker/CalendarMode/DatePicker.vue +59 -18
  234. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +174 -0
  235. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +421 -636
  236. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
  237. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
  238. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
  239. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +287 -1
  240. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
  241. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
  242. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +1 -1
  243. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
  244. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
  245. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
  246. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -759
  247. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
  248. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
  249. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +11 -3
  250. package/src/components/DatePicker/composables/useDateInputEditing.ts +119 -225
  251. package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
  252. package/src/components/DatePicker/composables/useKeyboardEvents.ts +149 -0
  253. package/src/components/DatePicker/composables/useManualDateValidation.ts +27 -68
  254. package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
  255. package/src/components/DatePicker/utils/dateFormattingUtils.ts +293 -0
  256. package/src/components/DatePicker/utils/validationUtils.ts +90 -0
  257. package/src/components/DialogBox/Accessibilite.stories.ts +4 -0
  258. package/src/components/DialogBox/DialogBox.stories.ts +22 -10
  259. package/src/components/DialogBox/DialogBox.vue +89 -22
  260. package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
  261. package/src/components/DialogBox/tests/__snapshots__/DialogBox.spec.ts.snap +12 -6
  262. package/src/components/FileUpload/tests/FileUpload.spec.ts +3 -0
  263. package/src/components/FooterBar/FooterBar.vue +1 -0
  264. package/src/components/HeaderBar/Accessibilite.stories.ts +4 -0
  265. package/src/components/HeaderBar/HeaderBar.mdx +47 -22
  266. package/src/components/HeaderBar/HeaderBar.stories.ts +54 -13
  267. package/src/components/HeaderBar/HeaderBar.vue +2 -1
  268. package/src/components/HeaderBar/HeaderBurgerMenu/Accessibilite.stories.ts +4 -0
  269. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.stories.ts +160 -82
  270. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +41 -56
  271. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +10 -3
  272. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +41 -18
  273. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/tests/HeaderMenuSection.spec.ts +7 -2
  274. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.stories.ts +36 -9
  275. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +41 -9
  276. package/src/components/HeaderBar/HeaderBurgerMenu/locals.ts +2 -0
  277. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +1 -1
  278. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/HeaderBurgerMenu.spec.ts.snap +8 -3
  279. package/src/components/HeaderBar/HeaderBurgerMenu/useMenuPosition.ts +50 -0
  280. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +5 -5
  281. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +7 -4
  282. package/src/components/HeaderBar/locales.ts +1 -1
  283. package/src/components/HeaderBar/tests/__snapshots__/HeaderBar.spec.ts.snap +2 -1
  284. package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
  285. package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
  286. package/src/components/HeaderLoading/HeaderLoading.vue +59 -1
  287. package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
  288. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
  289. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
  290. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +276 -21
  291. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +4 -2
  292. package/src/components/LangBtn/LangBtn.vue +0 -3
  293. package/src/components/LogoBrandSection/Accessibilite.stories.ts +4 -1
  294. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +2 -2
  295. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -8
  296. package/src/components/LogoBrandSection/locales.ts +1 -1
  297. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +1 -1
  298. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +6 -4
  299. package/src/components/NirField/NirField.mdx +3 -0
  300. package/src/components/NirField/NirField.vue +15 -6
  301. package/src/components/NirField/tests/NirField.spec.ts +159 -12
  302. package/src/components/PasswordField/PasswordField.mdx +3 -0
  303. package/src/components/PeriodField/PeriodField.mdx +2 -0
  304. package/src/components/PeriodField/PeriodField.stories.ts +195 -0
  305. package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
  306. package/src/components/PhoneField/PhoneField.mdx +3 -1
  307. package/src/components/PhoneField/PhoneField.stories.ts +285 -1
  308. package/src/components/PhoneField/PhoneField.vue +228 -95
  309. package/src/components/PhoneField/indicatifs.ts +102 -102
  310. package/src/components/PhoneField/locales.ts +1 -0
  311. package/src/components/PhoneField/tests/PhoneField.spec.ts +429 -2
  312. package/src/components/SkipLink/SkipLink.vue +3 -31
  313. package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
  314. package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
  315. package/src/components/SubHeader/SubHeader.mdx +1 -0
  316. package/src/components/SubHeader/SubHeader.stories.ts +179 -60
  317. package/src/components/SubHeader/SubHeader.vue +45 -15
  318. package/src/components/SubHeader/locales.ts +1 -0
  319. package/src/components/SyAlert/SyAlert.vue +6 -0
  320. package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
  321. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
  322. package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
  323. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +104 -6
  324. package/src/components/Tables/SyTable/SyTable.mdx +3 -10
  325. package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
  326. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  327. package/src/components/Tables/common/SyTablePagination.vue +13 -6
  328. package/src/components/Tables/common/TableHeader.vue +10 -7
  329. package/src/components/Tables/common/tableAccessibilityUtils.ts +13 -2
  330. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
  331. package/src/components/Tables/common/types.ts +2 -0
  332. package/src/components/Tables/common/useTableAria.ts +17 -1
  333. package/src/components/UserMenuBtn/tests/UserMenuBtn.spec.ts +2 -1
  334. package/src/components/index.ts +13 -0
  335. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +34 -5
  336. package/src/composables/index.ts +3 -0
  337. package/src/composables/useFilterable/useFilterable.ts +23 -1
  338. package/src/composables/usePagination.ts +103 -0
  339. package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
  340. package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
  341. package/src/directives/lockFocus.ts +48 -0
  342. package/src/main.ts +1 -2
  343. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +1 -8
  344. package/src/stories/Accessibilite/{Aculturation/AuditDesignSystem.mdx → AuditDesignSystem.mdx} +1 -1
  345. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.mdx +102 -0
  346. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +219 -0
  347. package/src/stories/Accessibilite/KitDePreAudit/Outils/{Tanaguru.mdx → Tanaguru/Utilisation.mdx} +1 -1
  348. package/src/stories/Components/Components.stories.ts +1 -1
  349. package/src/stories/DesignTokens/ColorIntegrationExample.vue +43 -0
  350. package/src/stories/DesignTokens/Colors.mdx +2 -0
  351. package/src/stories/DesignTokens/colors.stories.ts +9 -0
  352. package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
  353. package/src/stories/Templates/Templates.stories.ts +1 -1
  354. package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
  355. package/src/vuetifyConfig.ts +3 -3
  356. package/dist/components/DataList/locales.d.ts +0 -3
  357. package/dist/directives/letterSpacing.d.ts +0 -27
  358. package/src/assets/_fonts.scss +0 -6
  359. package/src/assets/_typography.scss +0 -157
  360. package/src/components/DataList/locales.ts +0 -3
  361. package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
  362. package/src/directives/letterSpacing.ts +0 -233
  363. /package/src/assets/{_elevations.scss → overrides/_elevations.scss} +0 -0
  364. /package/src/assets/{_radius.scss → overrides/_radius.scss} +0 -0
@@ -0,0 +1,17 @@
1
+ export const config = {
2
+ sheet: {
3
+ theme: 'default',
4
+ dense: false,
5
+ color: '#fff',
6
+ },
7
+ tabs: {
8
+ 'height': '48',
9
+ 'show-arrows': true,
10
+ },
11
+ tab: {
12
+ 'base-color': '#0C419A',
13
+ 'active-color': '#0C419A',
14
+ 'slider-color': '#0C419A',
15
+ 'ripple': false,
16
+ },
17
+ }
@@ -0,0 +1,425 @@
1
+ import { describe, it, expect, vi } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import { nextTick } from 'vue'
4
+ import SyTabs from '@/components/Customs/SyTabs/SyTabs.vue'
5
+ import { vuetify } from '@tests/unit/setup'
6
+
7
+ describe('SyTabs', () => {
8
+ // Données de test
9
+ const testItems = [
10
+ { label: 'Tab 1', value: 'tab1', content: 'Contenu du Tab 1' },
11
+ { label: 'Tab 2', value: 'tab2', content: 'Contenu du Tab 2' },
12
+ { label: 'Tab 3', value: 'tab3', content: 'Contenu du Tab 3' },
13
+ ]
14
+
15
+ // Options de montage par défaut
16
+ const defaultMountOptions = {
17
+ props: {
18
+ items: testItems,
19
+ },
20
+ global: {
21
+ plugins: [vuetify],
22
+ },
23
+ }
24
+
25
+ // Utilitaire pour créer le wrapper avec les options par défaut
26
+ const createWrapper = (options = {}) => {
27
+ return mount(SyTabs, {
28
+ ...defaultMountOptions,
29
+ ...options,
30
+ })
31
+ }
32
+
33
+ // Tests de rendu
34
+ describe('Rendu', () => {
35
+ it('doit afficher correctement les onglets', () => {
36
+ const wrapper = createWrapper()
37
+
38
+ // Vérifier que tous les onglets sont rendus
39
+ const tabButtons = wrapper.findAll('.sy-tabs__button')
40
+ expect(tabButtons.length).toBe(testItems.length)
41
+
42
+ // Vérifier le texte des onglets
43
+ testItems.forEach((item, index) => {
44
+ expect(tabButtons[index].text()).toBe(item.label.toUpperCase())
45
+ })
46
+ })
47
+
48
+ it('doit afficher le contenu de l\'onglet actif', () => {
49
+ const wrapper = createWrapper()
50
+
51
+ // Par défaut, le premier onglet devrait être actif
52
+ const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
53
+ expect(visiblePanel.exists()).toBe(true)
54
+ expect(visiblePanel.text()).toContain(testItems[0].content)
55
+ })
56
+
57
+ it('doit ajouter la classe active au bouton d\'onglet actif', () => {
58
+ const wrapper = createWrapper()
59
+
60
+ // Le premier onglet devrait avoir la classe active
61
+ const activeTab = wrapper.find('.sy-tabs__button--active')
62
+ expect(activeTab.exists()).toBe(true)
63
+ expect(activeTab.text()).toBe(testItems[0].label.toUpperCase())
64
+ })
65
+ })
66
+
67
+ // Tests des props
68
+ describe('Props', () => {
69
+ it('doit respecter la prop modelValue numérique', async () => {
70
+ const wrapper = createWrapper({
71
+ props: {
72
+ ...defaultMountOptions.props,
73
+ modelValue: 1,
74
+ },
75
+ })
76
+
77
+ await nextTick()
78
+
79
+ // Vérifier que le deuxième onglet est actif
80
+ const activeTab = wrapper.find('.sy-tabs__button--active')
81
+ expect(activeTab.text()).toBe(testItems[1].label.toUpperCase())
82
+
83
+ // Vérifier que le bon panneau est affiché
84
+ const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
85
+ expect(visiblePanel.attributes('id')).toBe('panel-1')
86
+ })
87
+
88
+ it('doit respecter la prop modelValue de type string', async () => {
89
+ const wrapper = createWrapper({
90
+ props: {
91
+ ...defaultMountOptions.props,
92
+ modelValue: 'tab2',
93
+ },
94
+ })
95
+
96
+ await nextTick()
97
+
98
+ // Vérifier que le bon onglet est actif
99
+ const activeTab = wrapper.find('.sy-tabs__button--active')
100
+ expect(activeTab.text()).toBe(testItems[1].label.toUpperCase())
101
+ })
102
+ })
103
+
104
+ // Tests d'interaction
105
+ describe('Interaction', () => {
106
+ it('doit changer d\'onglet actif au clic', async () => {
107
+ const wrapper = createWrapper()
108
+
109
+ // Cliquer sur le deuxième onglet
110
+ const secondTab = wrapper.findAll('.sy-tabs__button')[1]
111
+ await secondTab.trigger('click')
112
+
113
+ // Vérifier que le deuxième onglet est maintenant actif
114
+ expect(secondTab.classes()).toContain('sy-tabs__button--active')
115
+
116
+ // Vérifier que l'événement update:modelValue a été émis
117
+ const emitted = wrapper.emitted('update:modelValue')
118
+ expect(emitted).toBeTruthy()
119
+ if (emitted) {
120
+ expect(emitted[0]).toEqual([1])
121
+ }
122
+
123
+ // Vérifier que le bon panneau est visible
124
+ const visiblePanel = wrapper.find('.sy-tabs-panel:not([hidden])')
125
+ expect(visiblePanel.attributes('id')).toBe('panel-1')
126
+ })
127
+
128
+ it('doit émettre l\'événement update:modelValue avec la bonne valeur', async () => {
129
+ const wrapper = createWrapper({
130
+ props: {
131
+ ...defaultMountOptions.props,
132
+ modelValue: 'tab1',
133
+ },
134
+ })
135
+
136
+ // Cliquer sur le troisième onglet
137
+ const thirdTab = wrapper.findAll('.sy-tabs__button')[2]
138
+ await thirdTab.trigger('click')
139
+
140
+ // Vérifier que l'événement update:modelValue a été émis avec la bonne valeur
141
+ const emitted = wrapper.emitted('update:modelValue')
142
+ expect(emitted).toBeTruthy()
143
+ if (emitted) {
144
+ expect(emitted[0]).toEqual(['tab3'])
145
+ }
146
+ })
147
+ })
148
+
149
+ // Tests d'accessibilité et navigation clavier
150
+ describe('Accessibilité et navigation clavier', () => {
151
+ it('doit contenir les attributs ARIA appropriés', () => {
152
+ const wrapper = createWrapper()
153
+
154
+ // Vérifier les attributs ARIA du tablist
155
+ const nav = wrapper.find('[role="tablist"]')
156
+ expect(nav.exists()).toBe(true)
157
+ expect(nav.attributes('aria-label')).toBeDefined()
158
+
159
+ // Vérifier les attributs ARIA des onglets
160
+ const firstTab = wrapper.findAll('[role="tab"]')[0]
161
+ expect(firstTab.attributes('aria-selected')).toBe('true')
162
+ expect(firstTab.attributes('aria-controls')).toBe('panel-0')
163
+
164
+ // Vérifier les attributs ARIA des panneaux
165
+ const firstPanel = wrapper.find('[role="tabpanel"]')
166
+ expect(firstPanel.attributes('aria-labelledby')).toBe('tab-0')
167
+ })
168
+
169
+ it('doit activer un onglet avec les touches Enter/Space', async () => {
170
+ const wrapper = createWrapper()
171
+
172
+ // Simuler une pression de touche Enter sur le deuxième onglet
173
+ const secondTab = wrapper.findAll('.sy-tabs__button')[1]
174
+ await secondTab.trigger('keydown', {
175
+ key: 'Enter',
176
+ })
177
+
178
+ // Vérifier que le deuxième onglet est actif
179
+ expect(secondTab.classes()).toContain('sy-tabs__button--active')
180
+ })
181
+
182
+ it('doit naviguer vers l\'onglet de gauche avec ArrowLeft', async () => {
183
+ // Mock pour document.getElementById
184
+ const mockElement = {
185
+ focus: vi.fn(),
186
+ }
187
+ document.getElementById = vi.fn().mockImplementation((id) => {
188
+ if (id === 'tab-0') {
189
+ return mockElement
190
+ }
191
+ return null
192
+ })
193
+
194
+ const wrapper = createWrapper({
195
+ props: {
196
+ ...defaultMountOptions.props,
197
+ modelValue: 1, // Commencer au deuxième onglet
198
+ },
199
+ })
200
+
201
+ // Accéder directement à l'instance du composant
202
+ const vm = wrapper.vm as unknown as { handleArrowNavigation: (event: KeyboardEvent, activeIndex: number) => void }
203
+
204
+ // Créer un événement avec preventDefault
205
+ const event = new KeyboardEvent('keydown', { key: 'ArrowLeft' })
206
+ event.preventDefault = vi.fn()
207
+
208
+ // Appeler directement la méthode handleArrowNavigation
209
+ vm.handleArrowNavigation(event, 1) // 1 = deuxième onglet (index actif)
210
+
211
+ // Vérifier que l'événement a été émis avec la bonne valeur
212
+ const emitted = wrapper.emitted('update:modelValue')
213
+ expect(emitted).toBeTruthy()
214
+ // Type guard pour TypeScript
215
+ if (emitted) {
216
+ expect(emitted[0]).toEqual([0])
217
+ }
218
+ })
219
+
220
+ it('doit naviguer vers l\'onglet de droite avec ArrowRight', async () => {
221
+ // Mock pour document.getElementById qui filtre les appels non pertinents
222
+ const mockElement = {
223
+ focus: vi.fn(),
224
+ }
225
+
226
+ // Mock complet qui retourne mockElement uniquement pour tab-1
227
+ document.getElementById = vi.fn().mockImplementation((id) => {
228
+ if (id === 'tab-1') {
229
+ return mockElement
230
+ }
231
+ return null
232
+ })
233
+
234
+ const wrapper = createWrapper()
235
+
236
+ // Simuler une navigation avec flèche droite
237
+ const activeTab = wrapper.find('.sy-tabs__button--active')
238
+ await activeTab.trigger('keydown', {
239
+ key: 'ArrowRight',
240
+ preventDefault: vi.fn(),
241
+ })
242
+
243
+ // Vérifier l'émission de l'événement
244
+ const emitted = wrapper.emitted('update:modelValue')
245
+ expect(emitted).toBeTruthy()
246
+ if (emitted) {
247
+ expect(emitted[0]).toEqual([1])
248
+ }
249
+ })
250
+
251
+ it('doit naviguer vers le premier onglet avec Home', async () => {
252
+ // Mock pour document.getElementById qui filtre les appels non pertinents
253
+ const mockElement = {
254
+ focus: vi.fn(),
255
+ }
256
+
257
+ // Mock complet qui retourne mockElement uniquement pour tab-0
258
+ document.getElementById = vi.fn().mockImplementation((id) => {
259
+ if (id === 'tab-0') {
260
+ return mockElement
261
+ }
262
+ return null
263
+ })
264
+
265
+ const wrapper = createWrapper({
266
+ props: {
267
+ ...defaultMountOptions.props,
268
+ modelValue: 2, // Commencer au dernier onglet
269
+ },
270
+ })
271
+
272
+ // Simuler une navigation avec Home
273
+ const activeTab = wrapper.find('.sy-tabs__button--active')
274
+ await activeTab.trigger('keydown', {
275
+ key: 'Home',
276
+ preventDefault: vi.fn(),
277
+ })
278
+
279
+ // Vérifier l'émission de l'événement
280
+ const emitted = wrapper.emitted('update:modelValue')
281
+ expect(emitted).toBeTruthy()
282
+ if (emitted) {
283
+ expect(emitted[0]).toEqual([0])
284
+ }
285
+ })
286
+
287
+ it('doit naviguer vers le dernier onglet avec End', async () => {
288
+ // Mock pour document.getElementById qui filtre les appels non pertinents
289
+ const mockElement = {
290
+ focus: vi.fn(),
291
+ }
292
+
293
+ // Mock complet qui retourne mockElement uniquement pour tab-2
294
+ document.getElementById = vi.fn().mockImplementation((id) => {
295
+ if (id === 'tab-2') {
296
+ return mockElement
297
+ }
298
+ return null
299
+ })
300
+
301
+ const wrapper = createWrapper()
302
+
303
+ // Simuler une navigation avec End
304
+ const activeTab = wrapper.find('.sy-tabs__button--active')
305
+ await activeTab.trigger('keydown', {
306
+ key: 'End',
307
+ preventDefault: vi.fn(),
308
+ })
309
+
310
+ // Vérifier l'émission de l'événement
311
+ const emitted = wrapper.emitted('update:modelValue')
312
+ expect(emitted).toBeTruthy()
313
+ if (emitted) {
314
+ expect(emitted[0]).toEqual([2])
315
+ }
316
+ })
317
+ })
318
+
319
+ // Tests de la boucle de navigation
320
+ describe('Boucle de navigation', () => {
321
+ it('doit boucler vers le dernier onglet avec ArrowLeft depuis le premier', async () => {
322
+ // Mock pour document.getElementById qui filtre les appels non pertinents
323
+ const mockElement = {
324
+ focus: vi.fn(),
325
+ }
326
+
327
+ // Mock complet qui retourne mockElement uniquement pour le dernier tab
328
+ const lastTabIndex = testItems.length - 1
329
+ document.getElementById = vi.fn().mockImplementation((id) => {
330
+ if (id === `tab-${lastTabIndex}`) {
331
+ return mockElement
332
+ }
333
+ return null
334
+ })
335
+
336
+ const wrapper = createWrapper()
337
+
338
+ // Simuler une navigation avec flèche gauche depuis le premier onglet
339
+ const firstTab = wrapper.findAll('.sy-tabs__button')[0]
340
+ await firstTab.trigger('keydown', {
341
+ key: 'ArrowLeft',
342
+ preventDefault: vi.fn(),
343
+ })
344
+
345
+ // Vérifier l'émission de l'événement
346
+ const emitted = wrapper.emitted('update:modelValue')
347
+ expect(emitted).toBeTruthy()
348
+ if (emitted) {
349
+ expect(emitted[0]).toEqual([lastTabIndex])
350
+ }
351
+ })
352
+
353
+ it('doit boucler vers le premier onglet avec ArrowRight depuis le dernier', async () => {
354
+ // Mock pour document.getElementById
355
+ const mockElement = {
356
+ focus: vi.fn(),
357
+ }
358
+ document.getElementById = vi.fn().mockImplementation((id) => {
359
+ if (id === 'tab-0') {
360
+ return mockElement
361
+ }
362
+ return null
363
+ })
364
+
365
+ const lastIndex = testItems.length - 1
366
+ const wrapper = createWrapper({
367
+ props: {
368
+ ...defaultMountOptions.props,
369
+ modelValue: lastIndex,
370
+ },
371
+ })
372
+
373
+ // Accéder directement à l'instance du composant
374
+ const vm = wrapper.vm as unknown as { handleArrowNavigation: (event: KeyboardEvent, activeIndex: number) => void }
375
+
376
+ // Créer un événement avec preventDefault
377
+ const event = new KeyboardEvent('keydown', { key: 'ArrowRight' })
378
+ event.preventDefault = vi.fn()
379
+
380
+ // Appeler directement la méthode handleArrowNavigation
381
+ vm.handleArrowNavigation(event, lastIndex) // dernier onglet
382
+
383
+ // Vérifier l'émission de l'événement
384
+ const emitted = wrapper.emitted('update:modelValue')
385
+ expect(emitted).toBeTruthy()
386
+ if (emitted) {
387
+ expect(emitted[0]).toEqual([0])
388
+ }
389
+ })
390
+ })
391
+
392
+ // Tests avec différentes configurations
393
+ describe('Configurations personnalisées', () => {
394
+ it('doit permettre de personnaliser les options', () => {
395
+ // Modifier la stratégie de test puisque Vuetify gère les props différemment
396
+ // Nous allons vérifier l'application des styles plutôt que les props directement
397
+ const wrapper = createWrapper({
398
+ props: {
399
+ ...defaultMountOptions.props,
400
+ vuetifyOptions: {
401
+ sheet: {
402
+ dense: true,
403
+ color: 'primary',
404
+ },
405
+ tabs: {
406
+ height: '60',
407
+ },
408
+ },
409
+ },
410
+ })
411
+
412
+ // Vérifier la structure du composant
413
+ const sheet = wrapper.findComponent({ name: 'VSheet' })
414
+ expect(sheet.exists()).toBe(true)
415
+
416
+ // Vérifier que les tabs existent
417
+ const tabList = wrapper.find('.sy-tabs__list')
418
+ expect(tabList.exists()).toBe(true)
419
+
420
+ // Vérifier que tous les items sont rendus
421
+ const tabItems = wrapper.findAll('.sy-tabs__item')
422
+ expect(tabItems.length).toBe(testItems.length)
423
+ })
424
+ })
425
+ })
@@ -0,0 +1,12 @@
1
+ import type { RouteLocationRaw } from 'vue-router'
2
+
3
+ export interface TabItem {
4
+ label: string
5
+ value: string | number
6
+ content?: string
7
+ disabled?: boolean
8
+ /** URL pour navigation directe */
9
+ href?: string
10
+ /** Cible pour vue-router */
11
+ to?: RouteLocationRaw
12
+ }
@@ -222,7 +222,9 @@ export const Legende: StoryObj = {
222
222
  rapport</a></p>
223
223
  <p style="color: grey; font-size: 14px">Correctifs associés (<a
224
224
  href="https://github.com/assurance-maladie-digital/design-system/issues/4028" target="_blank"
225
- style="color:#0C41BD;">issue #4028</a>)</p>
225
+ style="color:#0C41BD;">issue #4028</a>, <a
226
+ href="https://github.com/assurance-maladie-digital/design-system-v3/pull/935" target="_blank"
227
+ style="color:#0C41BD;">issue #935</a>)</p>
226
228
  </div>
227
229
  `,
228
230
  }
@@ -63,3 +63,6 @@ Le champ adapte automatiquement son apparence selon son état :
63
63
  </template>
64
64
  `}
65
65
  />
66
+
67
+ <a href="/?path=/docs/guide-du-dev-guide-de-validation-des-formulaires--docs" className="action-link">Pour plus d'informations sur la validation, consultez le guide de validation des formulaires.</a>
68
+