@cnamts/synapse 1.0.23 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (574) hide show
  1. package/README.md +27 -5
  2. package/dist/AutocompleteFilter-D7qBuCAP.js +114 -0
  3. package/dist/AutocompleteFilter-Df9i5mAl.cjs +1 -0
  4. package/dist/DateFilter-BJD6FMev.cjs +1 -0
  5. package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BitMWrMU.js} +1 -1
  6. package/dist/{NumberFilter-vP38Wp6j.js → NumberFilter-BTLUxw0a.js} +3 -3
  7. package/dist/NumberFilter-DGCzCXzI.cjs +1 -0
  8. package/dist/{PeriodFilter-Ba1uYUnT.js → PeriodFilter-B5rUIPAC.js} +1 -1
  9. package/dist/PeriodFilter-DO_ecTZW.cjs +1 -0
  10. package/dist/SelectFilter-CGwcKWLm.cjs +1 -0
  11. package/dist/SelectFilter-l4QnRcuk.js +135 -0
  12. package/dist/TextFilter-B8nf7xoK.cjs +1 -0
  13. package/dist/{TextFilter-B84dpnoq.js → TextFilter-C9hj6Qrp.js} +7 -7
  14. package/dist/apLightTheme-CEK4iY3f.cjs +1 -0
  15. package/dist/apLightTheme-DnIM24Lv.js +950 -0
  16. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  17. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  18. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  19. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  20. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +60 -60
  21. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  22. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  23. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7501 -10095
  24. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +21 -21
  25. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +41 -41
  26. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  27. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  28. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +117 -151
  29. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +5 -5
  30. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -16
  31. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +8 -8
  32. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +31 -506
  33. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
  34. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  35. package/dist/components/Customs/SyTextField/SyTextField.d.ts +69 -89
  36. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -791
  37. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -412
  38. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -160
  39. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  40. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  41. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +1 -0
  42. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  43. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  44. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  45. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  46. package/dist/components/FileList/FileList.d.ts +6 -0
  47. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  48. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +17 -17
  49. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  50. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  51. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  52. package/dist/components/MonthPicker/MonthPicker.d.ts +86 -127
  53. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -126
  54. package/dist/components/NirField/NirField.d.ts +202 -278
  55. package/dist/components/NirField/locales.d.ts +10 -10
  56. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  57. package/dist/components/PasswordField/PasswordField.d.ts +8 -9
  58. package/dist/components/PeriodField/PeriodField.d.ts +1352 -1680
  59. package/dist/components/PhoneField/PhoneField.d.ts +88 -129
  60. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  61. package/dist/components/SyTextArea/SyTextArea.d.ts +34 -14
  62. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  63. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +10 -6
  64. package/dist/components/Tables/SyTable/SyTable.d.ts +10 -6
  65. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  66. package/dist/components/Tables/common/SyTablePagination.d.ts +19 -19
  67. package/dist/components/Tables/common/TableHeader.d.ts +5 -0
  68. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  69. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  70. package/dist/components/Tables/common/locales.d.ts +3 -0
  71. package/dist/components/Tables/common/types.d.ts +21 -3
  72. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  73. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  74. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  75. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  76. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  77. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +7 -6
  78. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  79. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  80. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  81. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  82. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  83. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  84. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  85. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  86. package/dist/composables/validation/useValidation.d.ts +19 -9
  87. package/dist/design-system-v3.d.ts +2 -0
  88. package/dist/design-system-v3.js +186 -187
  89. package/dist/design-system-v3.umd.cjs +1 -1066
  90. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  91. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  92. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  93. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  94. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  95. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  96. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  97. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  98. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  99. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  100. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  101. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  102. package/dist/designTokens/utils/index.d.ts +2 -2
  103. package/dist/main-ByDPHpae.cjs +1067 -0
  104. package/dist/main-Cpx8Co6H.js +38869 -0
  105. package/dist/main.d.ts +0 -1
  106. package/dist/synapse.css +1 -0
  107. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  108. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  109. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  110. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  111. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  112. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  113. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  114. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  115. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  116. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  117. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  118. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  119. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  120. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  121. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  122. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  123. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  124. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  125. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  126. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  127. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  128. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  129. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  130. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  131. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  132. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  133. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  134. package/dist/tooth-44-CazyQucj.cjs +1 -0
  135. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  136. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  137. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  138. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  139. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  140. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  141. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  142. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  143. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  144. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  145. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  146. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  147. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  148. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  149. package/dist/tooth-71-D473PPO5.cjs +1 -0
  150. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  151. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  152. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  153. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  154. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  155. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  156. package/dist/tooth-83-KV010j64.cjs +1 -0
  157. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  158. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  159. package/dist/utils/functions/classToHex.d.ts +1 -1
  160. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  161. package/dist/vuetifyConfig.js +522 -0
  162. package/dist/vuetifyConfig.umd.cjs +1 -0
  163. package/package.json +37 -20
  164. package/src/assets/amelipro/apTokens2026.scss +5 -5
  165. package/src/assets/overrides/_breakpoints.scss +25 -0
  166. package/src/assets/overrides/_btns.scss +0 -8
  167. package/src/assets/overrides/_forms.scss +1 -3
  168. package/src/assets/overrides/_icons.scss +14 -10
  169. package/src/assets/overrides/_otp.scss +41 -0
  170. package/src/assets/overrides/_tables.scss +11 -20
  171. package/src/assets/overrides/_tooltips.scss +17 -7
  172. package/src/assets/overrides/_typography.scss +35 -47
  173. package/src/assets/overrides/_utilities.scss +43 -47
  174. package/src/assets/themes.scss +1 -0
  175. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  176. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  177. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  178. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  179. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  180. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  181. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  182. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  183. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  184. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  185. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  186. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  187. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  188. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  189. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  190. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  191. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  192. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  193. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  194. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  195. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  196. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  197. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  198. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  199. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  200. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  201. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  202. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  203. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  204. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  205. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  206. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  207. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +2 -2
  208. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  209. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  210. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  211. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  212. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  213. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  214. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  215. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  216. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  217. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  218. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  219. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  220. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  221. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  222. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  223. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  224. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  225. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  226. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  227. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  228. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  229. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  230. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  231. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  232. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  233. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  234. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  235. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  236. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  237. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  238. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  239. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  240. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  241. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  242. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  243. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  244. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  245. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  246. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  247. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  248. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  249. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  250. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  251. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  252. package/src/components/Captcha/Captcha.vue +1 -3
  253. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  254. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +12 -12
  255. package/src/components/ChipList/ChipList.stories.ts +0 -15
  256. package/src/components/ChipList/ChipList.vue +19 -17
  257. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  258. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  259. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +0 -2
  260. package/src/components/CopyBtn/CopyBtn.vue +1 -3
  261. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  262. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +0 -9
  263. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  264. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  265. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +28 -7
  266. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  267. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +209 -0
  268. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +14 -10
  269. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  270. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +12 -15
  271. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  272. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +1 -39
  273. package/src/components/Customs/Selects/SySelect/SySelect.vue +274 -71
  274. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  275. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +89 -0
  276. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  277. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  278. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  279. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +45 -11
  280. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +53 -3
  281. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  282. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  283. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  284. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  285. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  286. package/src/components/Customs/SyTabs/SyTabs.stories.ts +32 -33
  287. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  288. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  289. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  290. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  291. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  292. package/src/components/Customs/SyTextField/SyTextField.stories.ts +50 -68
  293. package/src/components/Customs/SyTextField/SyTextField.vue +156 -161
  294. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +32 -0
  295. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +120 -11
  296. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  297. package/src/components/DatePicker/CalendarMode/DatePicker.vue +342 -237
  298. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  299. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  300. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  301. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +215 -175
  302. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  303. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +33 -10
  304. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  305. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  306. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  307. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  308. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  309. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +71 -67
  310. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  311. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  312. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  313. package/src/components/DatePicker/composables/index.ts +1 -0
  314. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  315. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  316. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  317. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  318. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  319. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  320. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  321. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  322. package/src/components/DatePicker/composables/useDatePickerState.ts +24 -0
  323. package/src/components/DatePicker/composables/useDateTextField.ts +6 -6
  324. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  325. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  326. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  327. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  328. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  329. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  330. package/src/components/DialogBox/DialogBox.vue +3 -5
  331. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  332. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  333. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  334. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  335. package/src/components/FileList/FileList.vue +9 -2
  336. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  337. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  338. package/src/components/FileUpload/FileUpload.vue +3 -5
  339. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  340. package/src/components/FilterInline/FilterInline.vue +1 -3
  341. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  342. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  343. package/src/components/FilterSideBar/FilterSideBar.vue +7 -0
  344. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  345. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  346. package/src/components/FooterBar/FooterBar.vue +9 -13
  347. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  348. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  349. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  350. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  351. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  352. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  353. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  354. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  355. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  356. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  357. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  358. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  359. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  360. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  361. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  362. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  363. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  364. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  365. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  366. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  367. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  368. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  369. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  370. package/src/components/LangBtn/LangBtn.vue +2 -4
  371. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  372. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -0
  373. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  374. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  375. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  376. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  377. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  378. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  379. package/src/components/LogoBrandSection/LogoBrandSection.vue +2 -2
  380. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  381. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  382. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  383. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  384. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +2 -1
  385. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +7 -7
  386. package/src/components/NirField/NirField.stories.ts +6 -2
  387. package/src/components/NirField/NirField.vue +67 -265
  388. package/src/components/NirField/accessibilite/Accessibility.mdx +102 -7
  389. package/src/components/NirField/locales.ts +1 -1
  390. package/src/components/NirField/tests/NirField.spec.ts +124 -0
  391. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  392. package/src/components/NirField/useNirValidation.ts +277 -0
  393. package/src/components/NotificationBar/Notification/Notification.vue +5 -7
  394. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  395. package/src/components/PaginatedTable/PaginatedTable.vue +2 -3
  396. package/src/components/PaginatedTable/Pagination.vue +3 -5
  397. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  398. package/src/components/PasswordField/PasswordField.vue +26 -34
  399. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  400. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  401. package/src/components/PeriodField/PeriodField.vue +57 -57
  402. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  403. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  404. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  405. package/src/components/PhoneField/PhoneField.vue +8 -9
  406. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  407. package/src/components/RangeField/RangeField.vue +6 -0
  408. package/src/components/RangeField/RangeSlider/RangeSlider.vue +0 -2
  409. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  410. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  411. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  412. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  413. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  414. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  415. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  416. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +6 -8
  417. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +3 -5
  418. package/src/components/SearchListField/SearchListField.vue +0 -2
  419. package/src/components/SkipLink/SkipLink.vue +2 -4
  420. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  421. package/src/components/SubHeader/SubHeader.vue +1 -1
  422. package/src/components/SyAlert/SyAlert.vue +7 -9
  423. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  424. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  425. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  426. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  427. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  428. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  429. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  430. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  431. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  432. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  433. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  434. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  435. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  436. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  437. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  438. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +839 -1
  439. package/src/components/Tables/SyServerTable/SyServerTable.vue +154 -95
  440. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +81 -0
  441. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +390 -0
  442. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  443. package/src/components/Tables/SyTable/SyTable.stories.ts +556 -1
  444. package/src/components/Tables/SyTable/SyTable.vue +136 -60
  445. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +79 -0
  446. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +382 -0
  447. package/src/components/Tables/common/SyTableFilter.vue +49 -4
  448. package/src/components/Tables/common/SyTablePagination.vue +142 -19
  449. package/src/components/Tables/common/TableHeader.vue +45 -4
  450. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  451. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  452. package/src/components/Tables/common/filters/SelectFilter.vue +11 -12
  453. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  454. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  455. package/src/components/Tables/common/filters/locales.ts +0 -1
  456. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  457. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  458. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  459. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  460. package/src/components/Tables/common/locales.ts +3 -0
  461. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  462. package/src/components/Tables/common/tableStyles.scss +60 -19
  463. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  464. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  465. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  466. package/src/components/Tables/common/types.ts +15 -4
  467. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  468. package/src/components/Tables/common/usePagination.ts +13 -0
  469. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  470. package/src/components/Tables/common/useTableHeaders.ts +52 -30
  471. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  472. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  473. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  474. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  475. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  476. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  477. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  478. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  479. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  480. package/src/composables/rules/useFieldValidation.ts +34 -17
  481. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  482. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  483. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  484. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  485. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  486. package/src/composables/unifyValidation/useValidation.ts +190 -0
  487. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  488. package/src/composables/useFormFieldErrorHandling.ts +4 -7
  489. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  490. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  491. package/src/composables/validation/useFormValidation.ts +20 -13
  492. package/src/composables/validation/useValidatable.ts +8 -1
  493. package/src/composables/validation/useValidation.ts +151 -99
  494. package/src/composantsVuetify/Introduction.mdx +48 -0
  495. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  496. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  497. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  498. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  499. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  500. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  501. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  502. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  503. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  504. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  505. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  506. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  507. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  508. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  509. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  510. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  511. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  512. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  513. package/src/designTokens/tokens/amelipro/apLightTheme.ts +1 -1
  514. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  515. package/src/designTokens/tokens/baseColors.ts +129 -0
  516. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  517. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  518. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  519. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +1 -1
  520. package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
  521. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  522. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  523. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  524. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  525. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  526. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  527. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  528. package/src/designTokens/utils/index.ts +2 -2
  529. package/src/main.ts +0 -2
  530. package/src/stories/Accessibilite/AuditDesignSystem.mdx +0 -11
  531. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  532. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  533. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +8 -1
  534. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +51 -10
  535. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +16 -9
  536. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +48 -58
  537. package/src/stories/Components/Components.stories.ts +113 -9
  538. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  539. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  540. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  541. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  542. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  543. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  544. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  545. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  546. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  547. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  548. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  549. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  550. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  551. package/src/stories/styles/accessibility-guide.css +3 -3
  552. package/src/utils/functions/classToHex.ts +6 -34
  553. package/src/utils/functions/createHexResolver.ts +45 -0
  554. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  555. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  556. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  557. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  558. package/dist/SelectFilter-BioGT6Nn.js +0 -136
  559. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  560. package/dist/main-aLKwdMi1.js +0 -37886
  561. package/dist/style.css +0 -1
  562. package/src/assets/apTokens.scss +0 -343
  563. package/src/assets/overrides/_container.scss +0 -36
  564. package/src/assets/tokens.scss +0 -388
  565. package/src/components/DatePicker/Accessibilite.mdx +0 -14
  566. package/src/designTokens/apColors.md +0 -66
  567. package/src/designTokens/cnamColors.md +0 -193
  568. package/src/designTokens/paColors.md +0 -66
  569. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  570. package/src/designTokens/tokens/json/primitives.json +0 -209
  571. package/src/designTokens/tokens/json/semantic.json +0 -120
  572. package/src/designTokens/utils/convertGaps.ts +0 -11
  573. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  574. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -135,6 +135,45 @@ describe('TableHeader', () => {
135
135
  expect(wrapper.find('.sort-order-indicator').exists()).toBe(false)
136
136
  })
137
137
 
138
+ it('wraps the column title when resizable columns are enabled', () => {
139
+ const column = {
140
+ title: 'A very long column title',
141
+ key: 'test',
142
+ value: 'test',
143
+ sortable: true,
144
+ }
145
+
146
+ const wrapper = mount(TableHeader, {
147
+ props: {
148
+ column,
149
+ headerParams: {
150
+ sortBy: [],
151
+ getSortIcon: () => 'mdi-arrow-up',
152
+ toggleSort: () => {},
153
+ columns: [
154
+ {
155
+ key: 'test',
156
+ value: 'test',
157
+ title: 'A very long column title',
158
+ sortable: true,
159
+ },
160
+ ],
161
+ headers: [],
162
+ someSelected: false,
163
+ allSelected: false,
164
+ selectAll: () => {},
165
+ isSorted: () => false,
166
+ },
167
+ table: { $el: { offsetWidth: 800 } } as unknown as VDataTable,
168
+ wrapTitle: true,
169
+ },
170
+ })
171
+
172
+ expect(wrapper.find('.col-title').classes()).toContain('col-title--wrap')
173
+ expect(wrapper.find('.v-data-table-header__content').classes()).toContain('v-data-table-header__content--wrap')
174
+ expect(wrapper.find('.v-data-table-header__content').classes()).not.toContain('h-100')
175
+ })
176
+
138
177
  // Test for correct sort order when multiple columns are sorted
139
178
  it('displays correct sort order numbers for multiple sorted columns', async () => {
140
179
  const columns = [
@@ -1,4 +1,4 @@
1
- import { mount } from '@vue/test-utils'
1
+ import { flushPromises, mount } from '@vue/test-utils'
2
2
  import { afterAll, describe, expect, it, vi } from 'vitest'
3
3
  import SyTable from '../../SyTable/SyTable.vue'
4
4
  import DateFilter from '../filters/DateFilter.vue'
@@ -189,6 +189,7 @@ describe('SyTable - filterByRange', () => {
189
189
  })
190
190
 
191
191
  await endDate.setValue('01/01/1995')
192
+ await flushPromises()
192
193
 
193
194
  filteredNames = ['Alice']
194
195
  filteredNames.forEach((element) => {
@@ -3,12 +3,12 @@ export type SortOptions = {
3
3
  order: 'desc' | 'asc'
4
4
  }
5
5
 
6
- export type FilterType = 'text' | 'number' | 'date' | 'period' | 'select' | 'custom'
6
+ export type FilterType = 'text' | 'number' | 'date' | 'period' | 'select' | 'autocomplete' | 'custom'
7
7
  type FilterValue =
8
8
  | string
9
9
  | number
10
10
  | Date
11
- | Array<string | number | Date>
11
+ | Array<string | number | Date | Record<string, unknown>>
12
12
  | { from: string | null, to: string | null }
13
13
  | Record<string, unknown>
14
14
  | null
@@ -53,6 +53,7 @@ export type DataTableHeaders = {
53
53
  maxWidth?: string | number
54
54
  minWidth?: string | number
55
55
  headerProps?: Record<string, unknown>
56
+ cellProps?: Record<string, unknown>
56
57
  }
57
58
 
58
59
  // Type to handle both Vuetify internal headers and our custom headers
@@ -74,7 +75,8 @@ export type TableColumnHeader = {
74
75
  children?: unknown[]
75
76
  maxWidth?: string | number
76
77
  minWidth?: string | number
77
- headerProps?: Record<string, unknown>
78
+ headerProps?: unknown
79
+ cellProps?: unknown
78
80
  [key: string]: unknown // Allow for any additional properties from Vuetify
79
81
  }
80
82
 
@@ -93,12 +95,17 @@ export type SyTableProps = {
93
95
  headers?: DataTableHeaders[]
94
96
  showSelect?: boolean
95
97
  showSelectSingle?: boolean
98
+ stickySelect?: boolean
96
99
  showExpand?: boolean
97
100
  selectionKey?: string
98
101
  multiSort?: boolean
99
102
  mustSort?: boolean
100
103
  itemsPerPageOptions?: number[]
101
104
  headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
105
+ pinnedColumns?: Array<string | { key: string, side?: 'left' | 'right' }>
106
+ pinnedColumnKey?: string
107
+ clickableRow?: boolean
108
+ pageInput?: boolean
102
109
  }
103
110
 
104
111
  export type SyServerTableProps = {
@@ -116,11 +123,15 @@ export type SyServerTableProps = {
116
123
  headers?: DataTableHeaders[]
117
124
  showSelect?: boolean
118
125
  showSelectSingle?: boolean
126
+ stickySelect?: boolean
119
127
  showExpand?: boolean
120
128
  selectionKey?: string
121
129
  multiSort?: boolean
122
130
  mustSort?: boolean
123
131
  itemsPerPageOptions?: number[]
124
132
  headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
125
-
133
+ pinnedColumns?: Array<string | { key: string, side?: 'left' | 'right' }>
134
+ pinnedColumnKey?: string
135
+ clickableRow?: boolean
136
+ pageInput?: boolean
126
137
  }
@@ -0,0 +1,103 @@
1
+ import { computed, type ComputedRef, type Ref } from 'vue'
2
+
3
+ type ClickableTableItem = Record<string, unknown>
4
+
5
+ type TableRowData = {
6
+ index: number
7
+ item: ClickableTableItem
8
+ internalItem: unknown
9
+ }
10
+
11
+ type TableRowEventHandler<TEvent extends Event> = ((event: TEvent) => void) | Array<(event: TEvent) => void>
12
+ type TableRowProps = Record<string, unknown>
13
+ export type ClickableTableRowPropsInput = TableRowProps | ((data: TableRowData) => TableRowProps) | undefined
14
+
15
+ function callEventHandler<TEvent extends Event>(handler: TableRowEventHandler<TEvent> | unknown, event: TEvent): void {
16
+ if (Array.isArray(handler)) {
17
+ handler.forEach((currentHandler) => {
18
+ currentHandler(event)
19
+ })
20
+ return
21
+ }
22
+
23
+ if (typeof handler === 'function') {
24
+ handler(event)
25
+ }
26
+ }
27
+
28
+ function resolveRowProps(rowProps: ClickableTableRowPropsInput, data: TableRowData): TableRowProps {
29
+ if (typeof rowProps === 'function') {
30
+ return rowProps(data)
31
+ }
32
+
33
+ return rowProps ?? {}
34
+ }
35
+
36
+ function isElementInteractive(element: HTMLElement | null): boolean {
37
+ if (!element) {
38
+ return false
39
+ }
40
+
41
+ return Boolean(element.closest('a, button, input, select, textarea, summary, [role="button"], [role="link"], [role="checkbox"], [role="menuitem"], [contenteditable="true"], [data-sy-row-click-ignore]'))
42
+ }
43
+
44
+ function isFromNestedInteractiveElement(event: Event): boolean {
45
+ const target = event.target as HTMLElement | null
46
+ const currentTarget = event.currentTarget as HTMLElement | null
47
+
48
+ if (!target || !currentTarget || target === currentTarget) {
49
+ return false
50
+ }
51
+
52
+ return isElementInteractive(target)
53
+ }
54
+
55
+ export function useClickableTableRow({
56
+ clickableRow,
57
+ rowProps,
58
+ onRowClick,
59
+ }: {
60
+ clickableRow: Ref<boolean>
61
+ rowProps: ComputedRef<ClickableTableRowPropsInput>
62
+ onRowClick: (item: ClickableTableItem) => void
63
+ }) {
64
+ const clickableRowProps = computed<ClickableTableRowPropsInput>(() => {
65
+ if (!clickableRow.value) {
66
+ return rowProps.value
67
+ }
68
+
69
+ return (data: TableRowData) => {
70
+ const baseRowProps = resolveRowProps(rowProps.value, data)
71
+
72
+ return {
73
+ ...baseRowProps,
74
+ 'class': ['sy-table__clickable-row', baseRowProps.class].filter(Boolean),
75
+ 'data-clickable-row': true,
76
+ 'tabindex': baseRowProps.tabindex ?? 0,
77
+ 'onClick': (event: MouseEvent) => {
78
+ callEventHandler(baseRowProps.onClick as TableRowEventHandler<MouseEvent> | unknown, event)
79
+
80
+ if (!event.defaultPrevented && !isFromNestedInteractiveElement(event)) {
81
+ onRowClick(data.item)
82
+ }
83
+ },
84
+ 'onKeydown': (event: KeyboardEvent) => {
85
+ callEventHandler(baseRowProps.onKeydown as TableRowEventHandler<KeyboardEvent> | unknown, event)
86
+
87
+ if (event.defaultPrevented || isFromNestedInteractiveElement(event)) {
88
+ return
89
+ }
90
+
91
+ if (event.key === 'Enter' || event.key === ' ') {
92
+ event.preventDefault()
93
+ onRowClick(data.item)
94
+ }
95
+ },
96
+ }
97
+ }
98
+ })
99
+
100
+ return {
101
+ clickableRowProps,
102
+ }
103
+ }
@@ -11,9 +11,11 @@ import type { DataOptions } from './types'
11
11
  export function usePagination({
12
12
  options,
13
13
  itemsLength,
14
+ updateOptions,
14
15
  }: {
15
16
  options: Ref<Partial<DataOptions>>
16
17
  itemsLength: Ref<number>
18
+ updateOptions: (opts: Partial<DataOptions>) => void
17
19
  }) {
18
20
  // Flag to indicate an ongoing items-per-page update cycle
19
21
  const isUpdatingItemsPerPage = ref(false)
@@ -58,11 +60,22 @@ export function usePagination({
58
60
  isUpdatingItemsPerPage.value = false
59
61
  }
60
62
 
63
+ function onUpdateOptions(newOptions: Partial<DataOptions>) {
64
+ if (isUpdatingItemsPerPage.value && typeof newOptions.itemsPerPage !== 'undefined') {
65
+ const rest = { ...newOptions }
66
+ delete (rest as Record<string, unknown>).itemsPerPage
67
+ updateOptions(rest)
68
+ return
69
+ }
70
+ updateOptions(newOptions)
71
+ }
72
+
61
73
  return {
62
74
  page,
63
75
  pageCount,
64
76
  itemsPerPageValue,
65
77
  updateItemsPerPage,
66
78
  isUpdatingItemsPerPage,
79
+ onUpdateOptions,
67
80
  }
68
81
  }
@@ -0,0 +1,237 @@
1
+ import { computed, nextTick, onMounted, onUnmounted, ref, type Ref } from 'vue'
2
+ import type { DataTableHeaders, TableColumnHeader } from './types'
3
+
4
+ // Fonction de throttling simple pour optimiser les performances
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ const useThrottleFn = <T extends (...args: any[]) => void>(fn: T, delay: number): T => {
7
+ let lastCall = 0
8
+ return ((...args: Parameters<T>) => {
9
+ const now = Date.now()
10
+ if (now - lastCall >= delay) {
11
+ lastCall = now
12
+ return fn(...args)
13
+ }
14
+ }) as T
15
+ }
16
+
17
+ interface UsePinnedColumnsOptions {
18
+ displayHeaders: Ref<DataTableHeaders[] | undefined>
19
+ reactiveColumnWidths: Ref<Record<string, number | string>>
20
+ pinnedColumns: Ref<Array<string | { key: string, side?: 'left' | 'right' }> | undefined>
21
+ pinnedColumnKey: Ref<string | undefined>
22
+ stickySelect: Ref<boolean>
23
+ showSelect: Ref<boolean>
24
+ showSelectSingle: Ref<boolean>
25
+ tableRef: Ref<{ $el?: Element } | undefined>
26
+ }
27
+
28
+ export function usePinnedColumns({
29
+ displayHeaders,
30
+ reactiveColumnWidths,
31
+ pinnedColumns,
32
+ pinnedColumnKey,
33
+ stickySelect,
34
+ showSelect,
35
+ showSelectSingle,
36
+ tableRef,
37
+ }: UsePinnedColumnsOptions) {
38
+ const tableWrapperEl = ref<HTMLElement | null>(null)
39
+ const showPinnedLeftShadow = ref(false)
40
+ const showPinnedRightShadow = ref(false)
41
+
42
+ // Stocker la référence de la fonction pour éviter les fuites mémoire
43
+ const updatePinnedShadowsRef = ref<(() => void) | null>(null)
44
+
45
+ const parseWidthPx = (val: unknown): number => {
46
+ if (typeof val === 'number' && Number.isFinite(val)) return val
47
+ if (typeof val === 'string') {
48
+ const trimmed = val.trim()
49
+ if (trimmed.endsWith('px')) {
50
+ const n = Number.parseFloat(trimmed.slice(0, -2))
51
+ return Number.isFinite(n) ? n : 0
52
+ }
53
+ const n = Number.parseFloat(trimmed)
54
+ return Number.isFinite(n) ? n : 0
55
+ }
56
+ return 0
57
+ }
58
+
59
+ const normalizedPinnedColumns = computed(() => {
60
+ const raw = pinnedColumns.value ?? (pinnedColumnKey.value ? [pinnedColumnKey.value] : [])
61
+ return raw.map((c) => {
62
+ if (typeof c === 'string') return { key: c, side: 'left' as const }
63
+ return { key: c.key, side: c.side ?? 'left' as const }
64
+ })
65
+ })
66
+
67
+ const pinnedLeftKeys = computed(() =>
68
+ normalizedPinnedColumns.value.filter(c => c.side !== 'right').map(c => c.key),
69
+ )
70
+
71
+ const pinnedRightKeys = computed(() =>
72
+ normalizedPinnedColumns.value.filter(c => c.side === 'right').map(c => c.key),
73
+ )
74
+
75
+ const stickySelectActive = computed(() => Boolean(stickySelect.value) && (showSelect.value || showSelectSingle.value))
76
+ const hasPinnedSelectLeft = computed(() => pinnedLeftKeys.value.includes('data-table-select') || stickySelectActive.value)
77
+
78
+ const getColumnWidthPx = (headersList: TableColumnHeader[], key: string): number => {
79
+ if (key === 'data-table-select' || key === 'data-table-expand' || key === 'data-table-group') return 48
80
+ const storedWidth = reactiveColumnWidths.value[key]
81
+ if (storedWidth != null) return parseWidthPx(storedWidth)
82
+ const h = headersList.find(x => (x.key ?? x.value) === key)
83
+ return parseWidthPx(h?.width ?? h?.minWidth ?? h?.maxWidth)
84
+ }
85
+
86
+ const pinnedMeta = computed(() => {
87
+ const headersList = displayHeaders.value
88
+ if (!headersList) return { left: {} as Record<string, number>, right: {} as Record<string, number>, totalLeft: 0, totalRight: 0 }
89
+
90
+ const left: Record<string, number> = {}
91
+ let accLeft = 0
92
+ if (hasPinnedSelectLeft.value) {
93
+ left['data-table-select'] = 0
94
+ accLeft = getColumnWidthPx(headersList as TableColumnHeader[], 'data-table-select')
95
+ }
96
+ for (const h of headersList) {
97
+ const key = (h.key ?? h.value) as string | undefined
98
+ if (!key) continue
99
+ if (pinnedLeftKeys.value.includes(key)) {
100
+ left[key] = accLeft
101
+ accLeft += getColumnWidthPx(headersList as TableColumnHeader[], key)
102
+ }
103
+ }
104
+
105
+ const right: Record<string, number> = {}
106
+ let accRight = 0
107
+ for (const h of [...headersList].reverse()) {
108
+ const key = (h.key ?? h.value) as string | undefined
109
+ if (!key) continue
110
+ if (pinnedRightKeys.value.includes(key)) {
111
+ right[key] = accRight
112
+ accRight += getColumnWidthPx(headersList as TableColumnHeader[], key)
113
+ }
114
+ }
115
+
116
+ return { left, right, totalLeft: accLeft, totalRight: accRight }
117
+ })
118
+
119
+ const updatePinnedShadows = () => {
120
+ const el = tableWrapperEl.value
121
+ if (!el) return
122
+ const max = el.scrollWidth - el.clientWidth
123
+ showPinnedLeftShadow.value = pinnedMeta.value.totalLeft > 0 && el.scrollLeft > 0
124
+ showPinnedRightShadow.value = pinnedMeta.value.totalRight > 0 && max > 0 && el.scrollLeft < max - 1
125
+ }
126
+
127
+ // Fonction pour trouver le wrapper du tableau avec retry
128
+ const findTableWrapper = (): HTMLElement | null => {
129
+ const el = tableRef.value?.$el as HTMLElement | undefined
130
+ return el?.querySelector('.v-table__wrapper') as HTMLElement | null
131
+ }
132
+
133
+ // Initialiser la référence de la fonction
134
+ updatePinnedShadowsRef.value = updatePinnedShadows
135
+
136
+ // Appliquer le throttling pour optimiser les performances (60fps)
137
+ const updatePinnedShadowsThrottled = useThrottleFn(updatePinnedShadows, 16)
138
+
139
+ const pinnedEdgeVars = computed<Record<string, string>>(() => {
140
+ const { totalLeft, totalRight } = pinnedMeta.value
141
+ return {
142
+ ...(totalLeft > 0 ? { '--sy-pinned-left-edge': `${totalLeft}px` } : {}),
143
+ ...(totalRight > 0 ? { '--sy-pinned-right-edge': `${totalRight}px` } : {}),
144
+ }
145
+ })
146
+
147
+ // Only cellProps are needed here — headerProps are applied inline in the #headers slot template
148
+ const displayHeadersWithPinned = computed(() => {
149
+ const headersList = displayHeaders.value
150
+ if (!headersList) return headersList
151
+
152
+ const leftOffsets = pinnedMeta.value.left
153
+ const rightOffsets = pinnedMeta.value.right
154
+
155
+ if (Object.keys(leftOffsets).length === 0 && Object.keys(rightOffsets).length === 0) return headersList
156
+
157
+ return headersList.map((h) => {
158
+ const key = (h.key ?? h.value) as string | undefined
159
+ if (!key) return h
160
+
161
+ const left = leftOffsets[key]
162
+ const right = rightOffsets[key]
163
+ if (left === undefined && right === undefined) return h
164
+
165
+ const cellProps = (h.cellProps ?? {}) as Record<string, unknown>
166
+ const cellStyle = (cellProps.style ?? {}) as Record<string, string | number>
167
+
168
+ const stickyCellStyle: Record<string, string | number> = {
169
+ position: 'sticky',
170
+ zIndex: 'var(--sy-table-z-pinned-cell)',
171
+ background: 'rgb(var(--v-theme-surface))',
172
+ }
173
+
174
+ const sideClass = left !== undefined ? 'sy-table__pinned--left' : 'sy-table__pinned--right'
175
+ if (left !== undefined) {
176
+ stickyCellStyle.left = `${left}px`
177
+ }
178
+ else if (right !== undefined) {
179
+ stickyCellStyle.right = `${right}px`
180
+ }
181
+
182
+ return {
183
+ ...h,
184
+ cellProps: {
185
+ ...cellProps,
186
+ class: ['sy-table__pinned', sideClass, 'v-data-table-column--fixed', cellProps.class].filter(Boolean),
187
+ style: { ...cellStyle, ...stickyCellStyle },
188
+ },
189
+ }
190
+ })
191
+ })
192
+
193
+ onMounted(() => {
194
+ nextTick(() => {
195
+ let attempts = 0
196
+ const maxAttempts = 5
197
+
198
+ const tryFindWrapper = () => {
199
+ tableWrapperEl.value = findTableWrapper()
200
+ if (tableWrapperEl.value || attempts >= maxAttempts) {
201
+ if (tableWrapperEl.value && updatePinnedShadowsRef.value) {
202
+ updatePinnedShadowsRef.value()
203
+ tableWrapperEl.value.addEventListener('scroll', updatePinnedShadowsThrottled, { passive: true })
204
+ }
205
+ if (updatePinnedShadowsRef.value) {
206
+ window.addEventListener('resize', updatePinnedShadowsThrottled)
207
+ }
208
+ }
209
+ else {
210
+ attempts++
211
+ setTimeout(tryFindWrapper, 50)
212
+ }
213
+ }
214
+
215
+ tryFindWrapper()
216
+ })
217
+ })
218
+
219
+ onUnmounted(() => {
220
+ if (tableWrapperEl.value && updatePinnedShadowsRef.value) {
221
+ tableWrapperEl.value.removeEventListener('scroll', updatePinnedShadowsThrottled)
222
+ }
223
+ if (updatePinnedShadowsRef.value) {
224
+ window.removeEventListener('resize', updatePinnedShadowsThrottled)
225
+ }
226
+ updatePinnedShadowsRef.value = null
227
+ })
228
+
229
+ return {
230
+ showPinnedLeftShadow,
231
+ showPinnedRightShadow,
232
+ hasPinnedSelectLeft,
233
+ pinnedMeta,
234
+ pinnedEdgeVars,
235
+ displayHeadersWithPinned,
236
+ }
237
+ }
@@ -18,8 +18,38 @@ export function useTableHeaders({
18
18
  storedHeaders?: DataTableHeaders[]
19
19
  filterInputConfig?: Record<string, unknown>
20
20
  }) {
21
- // Process headers to ensure they have title property
22
- const normalizedHeaders = computed(() => {
21
+ function normalizeHeader(header: DataTableHeaders): DataTableHeaders {
22
+ const mapped = {
23
+ ...header,
24
+ title: header.title ?? header.text,
25
+ } as TableColumnHeader
26
+
27
+ // Si maxWidth est défini sans width → applique-le à width
28
+ if (mapped.maxWidth != null && mapped.width == null) {
29
+ mapped.width = mapped.maxWidth
30
+ }
31
+
32
+ // Si maxWidth est défini → l'appliquer aussi aux <td> via cellProps
33
+ if (mapped.maxWidth != null) {
34
+ const existingCellProps = (mapped.cellProps ?? {}) as Record<string, unknown>
35
+ const existingStyle = (existingCellProps.style ?? {}) as Record<string, unknown>
36
+ const multilineStyle = {
37
+ ...existingStyle,
38
+ maxWidth: mapped.maxWidth,
39
+ whiteSpace: 'normal',
40
+ overflowWrap: 'anywhere',
41
+ wordBreak: 'break-word',
42
+ }
43
+ const baseProps = { ...existingCellProps, style: multilineStyle }
44
+ mapped.cellProps = () => ({
45
+ ...baseProps,
46
+ })
47
+ }
48
+
49
+ return mapped as unknown as DataTableHeaders
50
+ }
51
+
52
+ const mergedHeaders = computed(() => {
23
53
  const incoming = headersProp?.value
24
54
  const stored = Array.isArray(storedHeaders) ? storedHeaders : undefined
25
55
 
@@ -61,27 +91,11 @@ export function useTableHeaders({
61
91
  headers = (stored ?? incoming) as DataTableHeaders[]
62
92
  }
63
93
 
64
- // Normalisation finale
65
- return headers.map((header) => {
66
- const mapped = {
67
- ...header,
68
- title: header.title ?? header.text,
69
- } as TableColumnHeader
70
-
71
- // Si maxWidth est défini sans width → applique-le à width
72
- if (mapped.maxWidth != null && mapped.width == null) {
73
- mapped.width = mapped.maxWidth
74
- }
75
-
76
- return mapped as unknown as DataTableHeaders
77
- })
94
+ return headers
78
95
  })
79
96
 
80
- // Get filterable headers
81
- const filterableHeaders = computed(() => {
82
- if (!normalizedHeaders.value) return []
83
- return normalizedHeaders.value.filter(header => header.filterable)
84
- })
97
+ // Process headers to ensure they have title property and regenerate cellProps after reordering
98
+ const normalizedHeaders = computed(() => mergedHeaders.value?.map(normalizeHeader))
85
99
 
86
100
  /**
87
101
  * Enhance header with filter type and configuration
@@ -112,27 +126,35 @@ export function useTableHeaders({
112
126
  internalHeaders.value = newHeaders
113
127
  }, { immediate: true, deep: true })
114
128
 
129
+ const normalizedInternalHeaders = computed(() => internalHeaders.value?.map(normalizeHeader))
130
+
131
+ // Get filterable headers
132
+ const filterableHeaders = computed(() => {
133
+ if (!normalizedInternalHeaders.value) return []
134
+ return normalizedInternalHeaders.value.filter(header => header.filterable)
135
+ })
136
+
115
137
  /**
116
138
  * Get header by key
117
139
  */
118
140
  function getHeaderByKey(key: string): TableColumnHeader | undefined {
119
- return normalizedHeaders.value?.find(header => header.key === key)
141
+ return normalizedInternalHeaders.value?.find(header => header.key === key)
120
142
  }
121
143
 
122
144
  /**
123
145
  * Get original header from a rendered column (match by key or value)
124
146
  */
125
147
  function getHeaderForColumn(column: TableColumnHeader): TableColumnHeader | undefined {
126
- if (!normalizedHeaders.value) return undefined
127
- const key = column.key as string | undefined
148
+ if (!normalizedInternalHeaders.value) return undefined
149
+ const key = column.key ?? undefined
128
150
  if (key) {
129
- const byKey = normalizedHeaders.value.find(h => h.key === key)
151
+ const byKey = normalizedInternalHeaders.value.find(h => h.key === key)
130
152
  if (byKey) return byKey
131
153
  }
132
- // Fallback: try matching by value when key is not present or didnt match
133
- const val = column.value as string | undefined
154
+ // Fallback: try matching by value when key is not present or didn't match
155
+ const val = typeof column.value === 'string' ? column.value : undefined
134
156
  if (val) {
135
- const byValue = normalizedHeaders.value.find(h => h.value === val)
157
+ const byValue = normalizedInternalHeaders.value.find(h => h.value === val)
136
158
  if (byValue) return byValue
137
159
  }
138
160
  return undefined
@@ -142,8 +164,8 @@ export function useTableHeaders({
142
164
  * The headers filtered by visibility and sorted by order
143
165
  */
144
166
  const displayHeaders = computed(() => {
145
- if (!internalHeaders.value) return undefined
146
- const filteredHeaders = internalHeaders.value.filter(header => header.hidden !== true)
167
+ if (!normalizedInternalHeaders.value) return undefined
168
+ const filteredHeaders = normalizedInternalHeaders.value.filter(header => header.hidden !== true)
147
169
  return sortHeaders(filteredHeaders)
148
170
  })
149
171
 
@@ -0,0 +1,41 @@
1
+ import { nextTick, onMounted, onUnmounted, ref } from 'vue'
2
+ import { locales } from './locales'
3
+
4
+ export function useTableRowCheckboxAccessibility({
5
+ uniqueTableId,
6
+ }: {
7
+ uniqueTableId: string
8
+ }) {
9
+ const timeouts = ref<ReturnType<typeof setTimeout>[]>([])
10
+
11
+ const accessibilityRowCheckboxes = () => {
12
+ nextTick(() => {
13
+ const timeoutId = setTimeout(() => {
14
+ if (typeof document === 'undefined') return
15
+
16
+ const tableElement = document.getElementById(uniqueTableId)
17
+ if (!tableElement) return
18
+
19
+ const rowCheckboxes = tableElement.querySelectorAll('td .v-selection-control input[type="checkbox"]')
20
+ rowCheckboxes.forEach((checkbox, index) => {
21
+ const rowLabel = `${locales.selectRow} ${index + 1}`
22
+ checkbox.setAttribute('aria-label', rowLabel)
23
+ checkbox.setAttribute('title', rowLabel)
24
+ })
25
+ }, 100)
26
+
27
+ timeouts.value.push(timeoutId)
28
+ })
29
+ }
30
+
31
+ onMounted(() => {
32
+ accessibilityRowCheckboxes()
33
+ })
34
+
35
+ onUnmounted(() => {
36
+ timeouts.value.forEach(clearTimeout)
37
+ timeouts.value = []
38
+ })
39
+
40
+ return { accessibilityRowCheckboxes }
41
+ }
@@ -30,6 +30,7 @@
30
30
  }
31
31
  >(),
32
32
  {
33
+ uploadList: () => [],
33
34
  sectionTitle: undefined,
34
35
  showFilePreview: false,
35
36
  infoText: '',