@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
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi, afterEach, beforeAll } from 'vitest'
1
+ import { describe, it, expect, vi, afterEach, beforeAll, beforeEach } from 'vitest'
2
2
  import { mount } from '@vue/test-utils'
3
3
 
4
4
  import { vuetify } from '@tests/unit/setup'
@@ -70,11 +70,42 @@ describe('SyServerTable', () => {
70
70
  }
71
71
  })
72
72
 
73
- afterEach(() => {
73
+ // Store wrapper references to unmount them after each test
74
+ let activeWrappers: ReturnType<typeof mount>[] = []
75
+ // Helper pour attendre que les opérations asynchrones soient terminées
76
+ async function flushPromises() {
77
+ return new Promise(resolve => setTimeout(resolve, 0))
78
+ }
79
+
80
+ beforeEach(() => {
81
+ // Reset LocalStorageUtility mock implementation before each test
82
+ vi.mocked(LocalStorageUtility.prototype.getItem).mockReturnValue(null)
83
+ vi.mocked(LocalStorageUtility.prototype.setItem).mockImplementation(() => {})
84
+ vi.mocked(LocalStorageUtility.prototype.removeItem).mockImplementation(() => {})
85
+ })
86
+
87
+ afterEach(async () => {
88
+ // Attendre que toutes les promesses soient résolues avant de démonter
89
+ await flushPromises()
90
+
91
+ // Properly unmount all components to prevent memory leaks -> attachTo: document.body
92
+ for (const wrapper of activeWrappers) {
93
+ if (wrapper && typeof wrapper.unmount === 'function') {
94
+ wrapper.unmount()
95
+ // Attendre après chaque démontage pour permettre le nettoyage
96
+ await flushPromises()
97
+ }
98
+ }
99
+ activeWrappers = []
100
+
101
+ // Reset all mocks
74
102
  vi.resetAllMocks()
103
+
104
+ // Attendre une dernière fois pour s'assurer que tout est nettoyé
105
+ await flushPromises()
75
106
  })
76
107
 
77
- it('renders correctly with default props', () => {
108
+ it('renders correctly with default props', async () => {
78
109
  const wrapper = mount(SyServerTable, {
79
110
  props: {
80
111
  options: {} as DataOptions,
@@ -90,12 +121,19 @@ describe('SyServerTable', () => {
90
121
  },
91
122
  })
92
123
 
124
+ // Attendre que tous les effets asynchrones soient terminés
125
+ await wrapper.vm.$nextTick()
126
+ await flushPromises()
127
+
93
128
  expect(wrapper.find('.sy-server-table').exists()).toBe(true)
94
129
  expect(wrapper.find('table').exists()).toBe(true)
95
130
  expect(wrapper.text()).toContain('John Doe')
131
+
132
+ // Ajouter le wrapper à la liste pour le démontage
133
+ activeWrappers.push(wrapper)
96
134
  })
97
135
 
98
- it('accepts both old and new headers format', () => {
136
+ it('accepts both old and new headers format', async () => {
99
137
  const wrapper = mount(SyServerTable, {
100
138
  props: {
101
139
  options: {} as DataOptions,
@@ -146,12 +184,21 @@ describe('SyServerTable', () => {
146
184
  },
147
185
  })
148
186
 
187
+ // Attendre que le composant soit monté et les effets initiaux terminés
188
+ await wrapper.vm.$nextTick()
189
+ await flushPromises()
190
+
191
+ // Modifier les props et attendre la mise à jour
149
192
  await wrapper.setProps({
150
193
  options: {
151
194
  sortBy: [{ key: 'name', order: 'desc' }],
152
195
  },
153
196
  })
154
197
 
198
+ // Attendre que tous les effets asynchrones soient terminés
199
+ await wrapper.vm.$nextTick()
200
+ await flushPromises()
201
+
155
202
  expect(setItemMock).toHaveBeenCalledWith(
156
203
  'server-table-test-server-storage',
157
204
  expect.objectContaining({
@@ -164,6 +211,9 @@ describe('SyServerTable', () => {
164
211
  itemsLength: 10,
165
212
  }),
166
213
  )
214
+
215
+ // Ajouter le wrapper à la liste pour le démontage
216
+ activeWrappers.push(wrapper)
167
217
  })
168
218
 
169
219
  it('emits update:options event when sorting changes', async () => {
@@ -182,16 +232,27 @@ describe('SyServerTable', () => {
182
232
  },
183
233
  })
184
234
 
235
+ // Attendre que le composant soit monté et les effets initiaux terminés
236
+ await wrapper.vm.$nextTick()
237
+ await flushPromises()
238
+
185
239
  // Simulate a sort event from VDataTableServer
186
240
  await wrapper.findComponent({ name: 'VDataTableServer' }).vm.$emit('update:options', {
187
241
  sortBy: [{ key: 'name', order: 'asc' }],
188
242
  })
189
243
 
244
+ // Attendre que tous les effets asynchrones soient terminés
245
+ await wrapper.vm.$nextTick()
246
+ await flushPromises()
247
+
190
248
  const emittedOptions = wrapper.emitted('update:options')
191
249
  expect(emittedOptions).toBeTruthy()
250
+
251
+ // Ajouter le wrapper à la liste pour le démontage
252
+ activeWrappers.push(wrapper)
192
253
  })
193
254
 
194
- it('passes itemsPerPage prop correctly', () => {
255
+ it('passes itemsPerPage prop correctly', async () => {
195
256
  const wrapper = mount(SyServerTable, {
196
257
  props: {
197
258
  options: { itemsPerPage: 5 } as DataOptions,
@@ -207,11 +268,18 @@ describe('SyServerTable', () => {
207
268
  },
208
269
  })
209
270
 
271
+ // Attendre que tous les effets asynchrones soient terminés
272
+ await wrapper.vm.$nextTick()
273
+ await flushPromises()
274
+
210
275
  const dataTableServer = wrapper.findComponent({ name: 'VDataTableServer' })
211
276
  expect(dataTableServer.props('itemsPerPage')).toBe(5)
277
+
278
+ // Ajouter le wrapper à la liste pour le démontage
279
+ activeWrappers.push(wrapper)
212
280
  })
213
281
 
214
- it('passes serverItemsLength correctly', () => {
282
+ it('passes serverItemsLength correctly', async () => {
215
283
  const wrapper = mount(SyServerTable, {
216
284
  props: {
217
285
  options: {} as DataOptions,
@@ -227,8 +295,15 @@ describe('SyServerTable', () => {
227
295
  },
228
296
  })
229
297
 
298
+ // Attendre que tous les effets asynchrones soient terminés
299
+ await wrapper.vm.$nextTick()
300
+ await flushPromises()
301
+
230
302
  const dataTableServer = wrapper.findComponent({ name: 'VDataTableServer' })
231
303
  expect(dataTableServer.props('itemsLength')).toBe(25)
304
+
305
+ // Ajouter le wrapper à la liste pour le démontage
306
+ activeWrappers.push(wrapper)
232
307
  })
233
308
 
234
309
  it('should show filters when showFilters prop is true', async () => {
@@ -263,8 +338,14 @@ describe('SyServerTable', () => {
263
338
  })
264
339
 
265
340
  await wrapper.vm.$nextTick()
341
+ // Attendre que tous les effets asynchrones soient terminés
342
+ await flushPromises()
343
+
266
344
  const filterComponents = wrapper.findAllComponents({ name: 'SyTableFilter' })
267
345
  expect(filterComponents.length).toBeGreaterThan(0)
346
+
347
+ // Ajouter le wrapper à la liste pour le démontage
348
+ activeWrappers.push(wrapper)
268
349
  })
269
350
 
270
351
  it('updates filters when SyTableFilter emits update:filters', async () => {
@@ -289,17 +370,29 @@ describe('SyServerTable', () => {
289
370
  },
290
371
  })
291
372
 
373
+ // Attendre que le composant soit monté et les effets initiaux terminés
374
+ await wrapper.vm.$nextTick()
375
+ await flushPromises()
376
+
292
377
  const filterComponent = wrapper.findComponent(SyTableFilter)
293
378
  await filterComponent.vm.$emit('update:filters', [{ key: 'name', value: 'Jane', type: 'text' }])
294
379
 
380
+ // Attendre que tous les effets d'émission soient terminés
381
+ await wrapper.vm.$nextTick()
382
+ await flushPromises()
383
+
295
384
  // Check that the component emitted an update:options event with the correct filters
296
385
  const emitted = wrapper.emitted('update:options')
297
386
  expect(emitted).toBeTruthy()
387
+
298
388
  if (emitted) {
299
389
  const lastEmitted = emitted[emitted.length - 1][0] as { filters?: FilterOption[] }
300
390
  expect(lastEmitted).toHaveProperty('filters')
301
391
  expect(lastEmitted.filters).toEqual([{ key: 'name', value: 'Jane', type: 'text' }])
302
392
  }
393
+
394
+ // Ajouter le wrapper à la liste pour le démontage
395
+ activeWrappers.push(wrapper)
303
396
  })
304
397
 
305
398
  it('should show reset filters button when filters are applied', async () => {
@@ -407,6 +500,11 @@ describe('SyServerTable', () => {
407
500
  },
408
501
  })
409
502
 
503
+ // Attendre que le composant soit monté et les effets initiaux terminés
504
+ await wrapper.vm.$nextTick()
505
+ await flushPromises()
506
+
507
+ // Modifier les props et attendre la mise à jour
410
508
  await wrapper.setProps({
411
509
  serverItemsLength: 20,
412
510
  })
@@ -24,38 +24,33 @@ Pour gérer individuellement le stockage des options pour différents tableaux,
24
24
  ### Tri des colonnes
25
25
 
26
26
  Le composant permet de trier les données par colonne en cliquant sur l'en-tête de la colonne.
27
- <Canvas story={{height: '550px'}} of={SyTable.SortBy} />
28
27
 
29
28
  Le multi-tri est également supporté. Vous pouvez activer cette fonctionnalité en utilisant la prop `multi-sort`.
30
- <Canvas story={{height: '550px'}} of={SyTable.MultiSort} />
31
29
 
32
30
  ### Filtres des colonnes
33
31
 
34
32
  Le composant permet d'appliquer des filtres sur les colonnes. Vous pouvez définir des filtres personnalisés pour chaque colonne en utilisant la prop `show-filters`. Voir d'autres exemples de filtres dans les stories.
35
- <Canvas story={{height: '550px'}} of={SyTable.FilterByText} />
36
33
 
37
34
  ### Resize des colonnes
38
35
 
39
36
  Le composant peut permettre de redimensionner les colonnes en utilisant la prop `resizable-columns`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
40
- <Canvas story={{height: '550px'}} of={SyTable.ResizableColumns} />
41
37
 
42
38
  ### Réorganisation des colonnes
43
39
 
44
40
  Le composant permet de cacher ou réorganiser l'ordre des colonnes en utilisant la prop `enable-column-controls`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
45
- <Canvas story={{height: '550px'}} of={SyTable.ColumnControls} />
46
41
 
47
42
  ### Selection des lignes
48
43
 
49
44
  Le composant permet de sélectionner des lignes individuellement ou en masse. Vous pouvez activer la sélection en utilisant la prop `show-select`.
50
- <Canvas story={{height: '550px'}} of={SyTable.RowSelection} />
51
45
 
52
46
  ### Slot item
53
47
  Le composant permet de personnaliser l'affichage des contenus en utilisant le slot `item`. Vous pouvez définir la structure de chaque contenu en fonction de vos besoins.
54
- <Canvas story={{height: '550px'}} of={SyTable.SlotItem} />
55
48
 
56
49
  ### Slot headers
57
50
  Le composant permet de personnaliser l'affichage des en-têtes de colonnes en utilisant le slot `headers`. Vous pouvez définir la structure de chaque en-tête en fonction de vos besoins.
58
- <Canvas story={{height: '550px'}} of={SyTable.SlotHeaders} />
51
+
52
+ ### Items par page options
53
+ Le composant permet de personnaliser le nombre possible d'éléments par page en utilisant la prop `items-per-page-options`. Vous pouvez spécifier un tableau d'options pour permettre de choisir le nombre d'éléments affichés par page.
59
54
 
60
55
  ### Accessibilité
61
56
 
@@ -139,8 +134,6 @@ Le composant améliore l'accessibilité en ajoutant automatiquement :
139
134
 
140
135
  Pour utiliser plusieurs tableaux sur une même page avec des options indépendantes, utilisez la prop `suffix` pour chaque tableau.
141
136
 
142
- <Canvas of={SyTable.ManyTables} />
143
-
144
137
  ## Bonnes pratiques
145
138
 
146
139
  - Utilisez des en-têtes clairs et descriptifs pour chaque colonne
@@ -61,6 +61,15 @@ const meta = {
61
61
  type: { summary: 'DataOptions', detail: '{ page: number, itemsPerPage: number, sortBy: SortOptions[], groupBy?: SortOptions[], multiSort?: boolean, mustSort?: boolean, filters?: FilterOption[] }' },
62
62
  },
63
63
  },
64
+ itemsPerPageOptions: {
65
+ description: 'Limite les options disponibles dans le sélecteur "itemsPerPage"',
66
+ control: { type: 'object' },
67
+ table: {
68
+ category: 'props',
69
+ type: { summary: 'number[]' },
70
+ defaultValue: { summary: 'undefined' },
71
+ },
72
+ },
64
73
  suffix: {
65
74
  description: 'Suffixe permettant de gérer individuellement le stockage des options d\'un tableau d\'une page à l\'autre. Ce prop est obligatoire pour garantir un stockage unique pour chaque tableau.',
66
75
  control: { type: 'text' },
@@ -3359,3 +3368,236 @@ export const SlotHeaders: Story = {
3359
3368
  }
3360
3369
  },
3361
3370
  }
3371
+
3372
+ export const ItemsPerPageOptions: Story = {
3373
+ parameters: {
3374
+ sourceCode: [
3375
+ {
3376
+ name: 'Template',
3377
+ code: `
3378
+ <template>
3379
+ <SyTable
3380
+ v-model:options="options"
3381
+ :headers="headers"
3382
+ :items="items"
3383
+ :items-per-page-options="[5, 10, 15]"
3384
+ suffix="items-per-page-options-table"
3385
+ />
3386
+ </template>
3387
+ `,
3388
+ },
3389
+ {
3390
+ name: 'Script',
3391
+ code: `
3392
+ <script setup lang="ts">
3393
+ import { ref } from 'vue'
3394
+ import { SyTable } from '@cnamts/synapse'
3395
+
3396
+ const options = ref({
3397
+ itemsPerPage: 5,
3398
+ })
3399
+
3400
+ const headers = ref([
3401
+ {
3402
+ title: 'Nom',
3403
+ key: 'lastname',
3404
+ },
3405
+ {
3406
+ title: 'Prénom',
3407
+ key: 'firstname',
3408
+ },
3409
+ {
3410
+ title: 'Email',
3411
+ value: 'email',
3412
+ },
3413
+ ])
3414
+
3415
+ const items = ref([
3416
+ {
3417
+ firstname: 'Virginie',
3418
+ lastname: 'Beauchesne',
3419
+ email: 'virginie.beauchesne@example.com',
3420
+ },
3421
+ {
3422
+ firstname: 'Simone',
3423
+ lastname: 'Bellefeuille',
3424
+ email: 'simone.bellefeuille@example.com',
3425
+ },
3426
+ {
3427
+ firstname: 'Étienne',
3428
+ lastname: 'Salois',
3429
+ email: 'etienne.salois@example.com',
3430
+ },
3431
+ {
3432
+ firstname: 'Thierry',
3433
+ lastname: 'Bobu',
3434
+ email: 'thierry.bobu@example.com',
3435
+ },
3436
+ {
3437
+ firstname: 'Bernadette',
3438
+ lastname: 'Langelier',
3439
+ email: 'bernadette.langelier@exemple.com',
3440
+ },
3441
+ {
3442
+ firstname: 'Agate',
3443
+ lastname: 'Roy',
3444
+ email: 'agate.roy@exemple.com',
3445
+ },
3446
+ {
3447
+ firstname: 'Théo',
3448
+ lastname: 'Garnier',
3449
+ email: 'theo.garnier@exemple.com',
3450
+ },
3451
+ {
3452
+ firstname: 'Clara',
3453
+ lastname: 'Moreau',
3454
+ email: 'clara.moreau@exemple.com',
3455
+ },
3456
+ {
3457
+ firstname: 'Lucas',
3458
+ lastname: 'Lefebvre',
3459
+ email: 'lucas.lefebre@exemple.com',
3460
+ },
3461
+ {
3462
+ firstname: 'Emma',
3463
+ lastname: 'Dubois',
3464
+ email: 'emma.dubois@exemple.com',
3465
+ },
3466
+ {
3467
+ firstname: 'Julien',
3468
+ lastname: 'Martin',
3469
+ email: 'julien.martin@exemple.com',
3470
+ },
3471
+ {
3472
+ firstname: 'Sophie',
3473
+ lastname: 'Bernard',
3474
+ email: 'sophie.bernard@exemple.com',
3475
+ },
3476
+ {
3477
+ firstname: 'Antoine',
3478
+ lastname: 'Lemoine',
3479
+ email: 'antoine.lemoine@exemple.com',
3480
+ },
3481
+ {
3482
+ firstname: 'Camille',
3483
+ lastname: 'Rousseau',
3484
+ email: 'camille.rousseau@exemple.com',
3485
+ },
3486
+ ])
3487
+ </script>
3488
+ `,
3489
+ },
3490
+ ],
3491
+ },
3492
+ args: {
3493
+ 'headers': [
3494
+ {
3495
+ title: 'Nom',
3496
+ key: 'lastname',
3497
+ },
3498
+ {
3499
+ title: 'Prénom',
3500
+ key: 'firstname',
3501
+ },
3502
+ {
3503
+ title: 'Email',
3504
+ value: 'email',
3505
+ },
3506
+ ],
3507
+ 'items': [
3508
+ {
3509
+ firstname: 'Virginie',
3510
+ lastname: 'Beauchesne',
3511
+ email: 'virginie.beauchesne@example.com',
3512
+ },
3513
+ {
3514
+ firstname: 'Simone',
3515
+ lastname: 'Bellefeuille',
3516
+ email: 'simone.bellefeuille@example.com',
3517
+ },
3518
+ {
3519
+ firstname: 'Étienne',
3520
+ lastname: 'Salois',
3521
+ email: 'etienne.salois@example.com',
3522
+ },
3523
+ {
3524
+ firstname: 'Thierry',
3525
+ lastname: 'Bobu',
3526
+ email: 'thierry.bobu@example.com',
3527
+ },
3528
+ {
3529
+ firstname: 'Bernadette',
3530
+ lastname: 'Langelier',
3531
+ email: 'bernadette.langelier@exemple.com',
3532
+ },
3533
+ {
3534
+ firstname: 'Agate',
3535
+ lastname: 'Roy',
3536
+ email: 'agate.roy@exemple.com',
3537
+ },
3538
+ {
3539
+ firstname: 'Théo',
3540
+ lastname: 'Garnier',
3541
+ email: 'theo.garnier@exemple.com',
3542
+ },
3543
+ {
3544
+ firstname: 'Clara',
3545
+ lastname: 'Moreau',
3546
+ email: 'clara.moreau@exemple.com',
3547
+ },
3548
+ {
3549
+ firstname: 'Lucas',
3550
+ lastname: 'Lefebvre',
3551
+ email: 'lucas.lefebre@exemple.com',
3552
+ },
3553
+ {
3554
+ firstname: 'Emma',
3555
+ lastname: 'Dubois',
3556
+ email: 'emma.dubois@exemple.com',
3557
+ },
3558
+ {
3559
+ firstname: 'Julien',
3560
+ lastname: 'Martin',
3561
+ email: 'julien.martin@exemple.com',
3562
+ },
3563
+ {
3564
+ firstname: 'Sophie',
3565
+ lastname: 'Bernard',
3566
+ email: 'sophie.bernard@exemple.com',
3567
+ },
3568
+ {
3569
+ firstname: 'Antoine',
3570
+ lastname: 'Lemoine',
3571
+ email: 'antoine.lemoine@exemple.com',
3572
+ },
3573
+ {
3574
+ firstname: 'Camille',
3575
+ lastname: 'Rousseau',
3576
+ email: 'camille.rousseau@exemple.com',
3577
+ },
3578
+ ],
3579
+ 'options': {
3580
+ itemsPerPage: 5,
3581
+ },
3582
+ 'itemsPerPageOptions': [5, 10, 15],
3583
+ 'caption': '',
3584
+ 'suffix': 'default-table',
3585
+ 'density': 'default',
3586
+ 'striped': false,
3587
+ 'onUpdate:options': fn(),
3588
+ },
3589
+ render: (args) => {
3590
+ return {
3591
+ components: { SyTable },
3592
+ setup() {
3593
+ return { args }
3594
+ },
3595
+ template: `
3596
+ <SyTable
3597
+ v-model:options="args.options"
3598
+ v-bind="args"
3599
+ />
3600
+ `,
3601
+ }
3602
+ },
3603
+ }
@@ -29,6 +29,7 @@
29
29
  showSelect: false,
30
30
  multiSort: false,
31
31
  mustSort: false,
32
+ itemsPerPageOptions: undefined,
32
33
  })
33
34
 
34
35
  const emit = defineEmits<{
@@ -421,6 +422,7 @@
421
422
  :items-per-page="itemsPerPageValue"
422
423
  :page-count="pageCount"
423
424
  :items-length="filteredItems.length"
425
+ :items-per-page-options="props.itemsPerPageOptions"
424
426
  @update:page="page = $event"
425
427
  @update:items-per-page="updateItemsPerPage"
426
428
  />
@@ -9,7 +9,10 @@
9
9
 
10
10
  // Items per page options - standard options and current value
11
11
  const itemsPerPageOptions = computed(() => {
12
- const standardOptions = [5, 10, 25, 50, 100]
12
+ // Use provided itemsPerPageOptions or default standard options
13
+ const baseOptions = props.itemsPerPageOptions || [5, 10, 25, 50, 100]
14
+ // Filter out -1 from base options since we'll handle it separately
15
+ const standardOptions = [...baseOptions.filter(option => option !== -1)]
13
16
 
14
17
  // Add the current itemsPerPage if it's not already in the standard options
15
18
  // and it's not -1 (which represents "Tous")
@@ -25,11 +28,14 @@
25
28
  value,
26
29
  }))
27
30
 
28
- // Add "Tous" option to display all elements
29
- options.push({
30
- text: locales.pagination.all,
31
- value: -1,
32
- })
31
+ // Add "Tous" option only if not limited by itemsPerPageOptions
32
+ // or if explicitly allowed (by including -1 in itemsPerPageOptions)
33
+ if (!props.itemsPerPageOptions || props.itemsPerPageOptions.includes(-1)) {
34
+ options.push({
35
+ text: locales.pagination.all,
36
+ value: -1,
37
+ })
38
+ }
33
39
 
34
40
  return options
35
41
  })
@@ -39,6 +45,7 @@
39
45
  pageCount: number
40
46
  itemsPerPage: number
41
47
  itemsLength: number
48
+ itemsPerPageOptions?: number[]
42
49
  }>()
43
50
 
44
51
  const emit = defineEmits<{
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { computed, nextTick, onMounted, ref, inject, watch, type Ref } from 'vue'
2
+ import { computed, nextTick, onMounted, ref, inject, watch, type Ref, onUnmounted } from 'vue'
3
3
  import type { VDataTable, VDataTableServer } from 'vuetify/components'
4
4
  import { locales } from './locales'
5
5
 
@@ -106,16 +106,19 @@
106
106
  }
107
107
 
108
108
  const tableWidth = ref(0)
109
- onMounted(async () => {
110
- await nextTick()
109
+ function updateTableWidth() {
111
110
  if (props.table) {
112
111
  tableWidth.value = props.table.$el.offsetWidth
113
112
  }
113
+ }
114
+ onMounted(async () => {
115
+ await nextTick()
116
+ updateTableWidth()
114
117
  })
115
- window.addEventListener('resize', () => {
116
- if (props.table) {
117
- tableWidth.value = props.table.$el.offsetWidth
118
- }
118
+ window.addEventListener('resize', updateTableWidth)
119
+
120
+ onUnmounted(() => {
121
+ window.removeEventListener('resize', updateTableWidth)
119
122
  })
120
123
 
121
124
  function resizeKeyboardColumn(increment: number) {
@@ -1,4 +1,4 @@
1
- import { onMounted } from 'vue'
1
+ import { onMounted, onUnmounted, ref } from 'vue'
2
2
 
3
3
  /**
4
4
  * Utility function to enhance table accessibility
@@ -8,6 +8,8 @@ export function useTableAccessibility({
8
8
  }: {
9
9
  tableId: string
10
10
  }) {
11
+ // Référence pour stocker et nettoyer les timeouts
12
+ const accessibilityTimeouts = ref<ReturnType<typeof setTimeout>[]>([])
11
13
  function setupAccessibility() {
12
14
  onMounted(() => {
13
15
  const captionElement = document.querySelector(`#${tableId} caption`)
@@ -31,11 +33,12 @@ export function useTableAccessibility({
31
33
  }
32
34
 
33
35
  // Check again after a delay
34
- setTimeout(() => {
36
+ const timeoutId = setTimeout(() => {
35
37
  if (element.hasAttribute('aria-controls')) {
36
38
  element.removeAttribute('aria-controls')
37
39
  }
38
40
  }, 500)
41
+ accessibilityTimeouts.value.push(timeoutId)
39
42
  })
40
43
 
41
44
  const fieldLabels = document.querySelectorAll(`#${tableId} .v-field`)
@@ -53,6 +56,14 @@ export function useTableAccessibility({
53
56
  th[i].setAttribute('scope', 'col')
54
57
  }
55
58
  })
59
+
60
+ // Nettoyer tous les timeouts lors du démontage du composant
61
+ onUnmounted(() => {
62
+ accessibilityTimeouts.value.forEach((timeoutId) => {
63
+ clearTimeout(timeoutId)
64
+ })
65
+ accessibilityTimeouts.value = []
66
+ })
56
67
  }
57
68
 
58
69
  return {