@cnamts/synapse 1.0.24 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/README.md +27 -5
  2. package/dist/{AutocompleteFilter-BWLR3U7W.js → AutocompleteFilter-BPR-a55G.js} +1 -1
  3. package/dist/{DateFilter-BpwFexzi.js → DateFilter-CknrJWs2.js} +2 -2
  4. package/dist/{NumberFilter-Bz_NTdX9.js → NumberFilter-DJ-yNlzv.js} +1 -1
  5. package/dist/{PeriodFilter-DX_wy9g-.js → PeriodFilter-CiB5Oa9Z.js} +1 -1
  6. package/dist/{SelectFilter-xqiPtPgX.js → SelectFilter-EiafX97M.js} +2 -2
  7. package/dist/{TextFilter-BBl3JFqK.js → TextFilter-BzOmpdxj.js} +1 -1
  8. package/dist/{apLightTheme-D1P4jcD0.js → apLightTheme-DS0Uy44H.js} +446 -723
  9. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +14 -8
  10. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +60 -289
  11. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +1 -0
  12. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -0
  13. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1 -0
  14. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  15. package/dist/components/Customs/SyTextField/SyTextField.d.ts +0 -2
  16. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +54 -73
  17. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +31 -40
  18. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +9 -14
  19. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +4 -3
  20. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  21. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  22. package/dist/components/DatePicker/types.d.ts +1 -2
  23. package/dist/components/FileList/FileList.d.ts +6 -0
  24. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  25. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +13 -13
  26. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  27. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  28. package/dist/components/MonthPicker/MonthPicker.d.ts +2 -7
  29. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +2 -7
  30. package/dist/components/NirField/NirField.d.ts +12 -20
  31. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  32. package/dist/components/PeriodField/PeriodField.d.ts +110 -150
  33. package/dist/components/PhoneField/PhoneField.d.ts +12 -7
  34. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  35. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  36. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  37. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  38. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  39. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +1 -0
  40. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  41. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  42. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  43. package/dist/components/Tables/common/SyTablePagination.d.ts +154 -364
  44. package/dist/components/Tables/common/TableHeader.d.ts +6 -1
  45. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  46. package/dist/components/Tables/common/locales.d.ts +3 -0
  47. package/dist/components/Tables/common/types.d.ts +2 -0
  48. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +1 -0
  49. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  50. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  51. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  52. package/dist/composables/unifyValidation/useValidation.d.ts +12 -6
  53. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  54. package/dist/composables/validation/useValidation.d.ts +6 -1
  55. package/dist/design-system-v3.js +2 -2
  56. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  57. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  58. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  59. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +2 -0
  60. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  61. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  62. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  63. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  64. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +2 -0
  65. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  66. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  67. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  68. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  69. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  70. package/dist/designTokens/utils/index.d.ts +2 -2
  71. package/dist/{main-BtTqyn4z.js → main-BsJ9ec3i.js} +16021 -15715
  72. package/dist/synapse.css +1 -1
  73. package/dist/utils/functions/classToHex.d.ts +1 -1
  74. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  75. package/dist/vuetifyConfig.js +113 -152
  76. package/package.json +35 -23
  77. package/src/assets/amelipro/apTokens2026.scss +5 -5
  78. package/src/assets/overrides/_breakpoints.scss +25 -0
  79. package/src/assets/overrides/_btns.scss +0 -2
  80. package/src/assets/overrides/_forms.scss +1 -3
  81. package/src/assets/overrides/_icons.scss +5 -22
  82. package/src/assets/overrides/_otp.scss +40 -0
  83. package/src/assets/overrides/_tables.scss +11 -20
  84. package/src/assets/overrides/_tooltips.scss +17 -7
  85. package/src/assets/overrides/_typography.scss +35 -37
  86. package/src/assets/overrides/_utilities.scss +43 -47
  87. package/src/assets/themes.scss +1 -0
  88. package/src/components/Accordion/Accordion.vue +2 -0
  89. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  90. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  91. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  92. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  93. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  94. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  95. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  96. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  97. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  98. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  99. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  100. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  101. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  102. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  103. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  104. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  105. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  106. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  107. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  108. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  109. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  110. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  111. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  112. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  113. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  114. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  115. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  116. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  117. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  118. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  119. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  120. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  121. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  122. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  123. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  124. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  125. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  126. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  127. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  128. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  129. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  130. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  131. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  132. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  133. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  134. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  135. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  136. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  137. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  138. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  139. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  140. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  141. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  142. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  143. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  144. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  145. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  146. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  147. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  148. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  149. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  150. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  151. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  152. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  153. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  154. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  155. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  156. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  157. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  158. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  159. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  160. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  161. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  162. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  163. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  164. package/src/components/Captcha/Captcha.vue +1 -3
  165. package/src/components/ChipList/ChipList.vue +14 -16
  166. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -3
  167. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  168. package/src/components/CopyBtn/CopyBtn.vue +10 -3
  169. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  170. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  171. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  172. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +8 -4
  173. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  174. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +66 -0
  175. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +4 -6
  176. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +414 -135
  177. package/src/components/Customs/Selects/SySelect/SySelect.vue +502 -257
  178. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  179. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +278 -4
  180. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +3 -3
  181. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  182. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +52 -2
  183. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +18 -3
  184. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  185. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +23 -5
  186. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  187. package/src/components/Customs/SyTabs/SyTabs.stories.ts +34 -35
  188. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  189. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  190. package/src/components/Customs/SyTabs/config.ts +3 -3
  191. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  192. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  193. package/src/components/Customs/SyTextField/SyTextField.stories.ts +21 -41
  194. package/src/components/Customs/SyTextField/SyTextField.vue +34 -9
  195. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  196. package/src/components/DatePicker/CalendarMode/DatePicker.vue +29 -28
  197. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  198. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +28 -23
  199. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +24 -1
  200. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  201. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +65 -33
  202. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  203. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  204. package/src/components/DatePicker/composables/useDatePickerState.ts +56 -13
  205. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  206. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  207. package/src/components/DatePicker/composables/useDateTextField.ts +2 -3
  208. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  209. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  210. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  211. package/src/components/DatePicker/types.ts +1 -2
  212. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  213. package/src/components/DialogBox/DialogBox.vue +3 -5
  214. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  215. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  216. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  217. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  218. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  219. package/src/components/FileList/FileList.vue +9 -2
  220. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  221. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  222. package/src/components/FileUpload/FileUpload.vue +3 -5
  223. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  224. package/src/components/FilterInline/FilterInline.vue +1 -3
  225. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  226. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  227. package/src/components/FilterSideBar/FilterSideBar.vue +9 -1
  228. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  229. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  230. package/src/components/FooterBar/FooterBar.vue +9 -13
  231. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  232. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  233. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  234. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  235. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  236. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  237. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  238. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  239. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  240. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  241. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  242. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  243. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  244. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  245. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  246. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  247. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  248. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  249. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  250. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  251. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  252. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  253. package/src/components/LangBtn/LangBtn.vue +4 -5
  254. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -0
  255. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  256. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  257. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  258. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  259. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  260. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  261. package/src/components/LogoBrandSection/LogoBrandSection.vue +2 -2
  262. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  263. package/src/components/NirField/NirField.stories.ts +2 -2
  264. package/src/components/NirField/NirField.vue +3 -5
  265. package/src/components/NirField/accessibilite/Accessibility.mdx +100 -5
  266. package/src/components/NirField/tests/NirField.spec.ts +118 -0
  267. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  268. package/src/components/NirField/useNirValidation.ts +38 -32
  269. package/src/components/NotificationBar/Notification/Notification.vue +7 -9
  270. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  271. package/src/components/PaginatedTable/PaginatedTable.vue +3 -4
  272. package/src/components/PaginatedTable/Pagination.vue +4 -6
  273. package/src/components/PasswordField/PasswordField.vue +15 -13
  274. package/src/components/PhoneField/PhoneField.vue +7 -5
  275. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -20
  276. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  277. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  278. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  279. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  280. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  281. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  282. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  283. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +38 -56
  284. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  285. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  286. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  287. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  288. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  289. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  290. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +31 -42
  291. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  292. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  293. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  294. package/src/components/RatingPicker/tests/RatingPicker.a11y.spect.ts +123 -0
  295. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  296. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  297. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  298. package/src/components/SearchListField/SearchListField.vue +0 -2
  299. package/src/components/SkipLink/SkipLink.vue +2 -4
  300. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  301. package/src/components/SubHeader/SubHeader.vue +1 -1
  302. package/src/components/SyAlert/SyAlert.vue +7 -9
  303. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  304. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  305. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  306. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  307. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  308. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  309. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  310. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  311. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  312. package/src/components/SyTextArea/SyTextArea.vue +32 -1
  313. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  314. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +166 -0
  315. package/src/components/Tables/SyServerTable/SyServerTable.vue +10 -8
  316. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +23 -0
  317. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +268 -0
  318. package/src/components/Tables/SyTable/SyTable.stories.ts +104 -0
  319. package/src/components/Tables/SyTable/SyTable.vue +10 -8
  320. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +22 -0
  321. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +274 -0
  322. package/src/components/Tables/common/SyTableFilter.vue +31 -6
  323. package/src/components/Tables/common/SyTablePagination.vue +143 -19
  324. package/src/components/Tables/common/TableHeader.vue +41 -4
  325. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  326. package/src/components/Tables/common/filters/SelectFilter.vue +1 -1
  327. package/src/components/Tables/common/locales.ts +3 -0
  328. package/src/components/Tables/common/tableStyles.scss +16 -19
  329. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  330. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  331. package/src/components/Tables/common/types.ts +2 -0
  332. package/src/components/Tables/common/useTableHeaders.ts +49 -27
  333. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  334. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  335. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  336. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  337. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  338. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +81 -0
  339. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  340. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  341. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  342. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +2 -1
  343. package/src/composables/unifyValidation/tests/useValidation.spec.ts +22 -0
  344. package/src/composables/unifyValidation/useCustomValidation.ts +16 -4
  345. package/src/composables/unifyValidation/useValidation.ts +46 -15
  346. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  347. package/src/composables/useFormFieldErrorHandling.ts +4 -1
  348. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  349. package/src/composables/validation/useValidation.ts +32 -4
  350. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  351. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  352. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  353. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  354. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  355. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  356. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  357. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  358. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  359. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  360. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  361. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  362. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  363. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  364. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  365. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  366. package/src/designTokens/tokens/amelipro/apLightTheme.ts +4 -1
  367. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  368. package/src/designTokens/tokens/baseColors.ts +129 -0
  369. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  370. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  371. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  372. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +4 -1
  373. package/src/designTokens/tokens/cnam/cnamSemantic.ts +1 -1
  374. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  375. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  376. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  377. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  378. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  379. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  380. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  381. package/src/designTokens/utils/index.ts +2 -2
  382. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  383. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -19
  384. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  385. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  386. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  387. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  388. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  389. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  390. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +176 -79
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +67 -19
  392. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +78 -50
  393. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  394. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  395. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  396. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +55 -67
  397. package/src/stories/Components/Components.stories.ts +92 -4
  398. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  399. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  400. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  401. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  402. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  403. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  404. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  405. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  406. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  407. package/src/stories/styles/accessibility-guide.css +3 -3
  408. package/src/utils/functions/classToHex.ts +6 -34
  409. package/src/utils/functions/createHexResolver.ts +45 -0
  410. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  411. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  412. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  413. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  414. package/dist/AutocompleteFilter-D9jzRzAL.cjs +0 -1
  415. package/dist/DateFilter-DTUl8hb1.cjs +0 -1
  416. package/dist/NumberFilter-MAEojdk0.cjs +0 -1
  417. package/dist/PeriodFilter-CC4WgIhl.cjs +0 -1
  418. package/dist/SelectFilter-BR3fvl-a.cjs +0 -1
  419. package/dist/TextFilter-CCfYFl5F.cjs +0 -1
  420. package/dist/apLightTheme-CFSRrjv2.cjs +0 -1
  421. package/dist/composables/date/useDateFormat.d.ts +0 -26
  422. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  423. package/dist/design-system-v3.umd.cjs +0 -1
  424. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  425. package/dist/main-C1e3eoxd.cjs +0 -1067
  426. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  427. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  428. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  429. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  430. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  431. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  432. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  433. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  434. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  435. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  436. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  437. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  438. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  439. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  440. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  441. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  442. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  443. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  444. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  445. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  446. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  447. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  448. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  449. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  450. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  451. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  452. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  453. package/dist/tooth-44-CazyQucj.cjs +0 -1
  454. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  455. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  456. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  457. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  458. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  459. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  460. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  461. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  462. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  463. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  464. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  465. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  466. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  467. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  468. package/dist/tooth-71-D473PPO5.cjs +0 -1
  469. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  470. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  471. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  472. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  473. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  474. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  475. package/dist/tooth-83-KV010j64.cjs +0 -1
  476. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  477. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  478. package/dist/vuetifyConfig.umd.cjs +0 -1
  479. package/src/assets/apTokens.scss +0 -343
  480. package/src/assets/overrides/_container.scss +0 -36
  481. package/src/assets/tokens.scss +0 -388
  482. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  483. package/src/composables/date/useDateFormat.ts +0 -110
  484. package/src/composables/date/useDateInitialization.ts +0 -92
  485. package/src/designTokens/apColors.md +0 -66
  486. package/src/designTokens/cnamColors.md +0 -193
  487. package/src/designTokens/paColors.md +0 -66
  488. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  489. package/src/designTokens/tokens/json/primitives.json +0 -209
  490. package/src/designTokens/tokens/json/semantic.json +0 -120
  491. package/src/designTokens/utils/convertGaps.ts +0 -11
  492. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  493. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, onMounted, provide, ref, toRef, useAttrs, watch } from 'vue'
3
- import type { VDataTable } from 'vuetify/components'
3
+ import type { VDataTable } from 'vuetify/components/VDataTable'
4
4
  import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
5
5
  import SyTableFilter from '../common/SyTableFilter.vue'
6
6
  import TableHeader from '../common/TableHeader.vue'
@@ -40,6 +40,7 @@
40
40
  itemsPerPageOptions: undefined,
41
41
  headingLevel: 2,
42
42
  clickableRow: false,
43
+ pageInput: false,
43
44
  })
44
45
 
45
46
  const emit = defineEmits<{
@@ -318,6 +319,7 @@
318
319
  :column="column"
319
320
  :header-props-raw="(getHeaderForColumn(column)?.headerProps as any)"
320
321
  :resizable-columns="props.resizableColumns"
322
+ :wrap-title="props.resizableColumns || !!getHeaderForColumn(column)?.maxWidth"
321
323
  >
322
324
  <template
323
325
  v-for="slotName in Object.keys($slots)"
@@ -344,9 +346,9 @@
344
346
  >
345
347
  <th
346
348
  :style="{
347
- ...(getHeaderForColumn(column)?.maxWidth ? { maxWidth: getHeaderForColumn(column)?.maxWidth as any } : {}),
349
+ ...(getHeaderForColumn(column)?.maxWidth && !props.resizableColumns ? { maxWidth: getHeaderForColumn(column)?.maxWidth as any } : {}),
348
350
  ...(getHeaderForColumn(column)?.minWidth ? { minWidth: getHeaderForColumn(column)?.minWidth as any } : {}),
349
- ...(getHeaderForColumn(column)?.width ? { width: getHeaderForColumn(column)?.width as any } : {}),
351
+ width: (reactiveColumnWidths[column.key!] || getHeaderForColumn(column)?.width) as any || undefined,
350
352
  }"
351
353
  >
352
354
  <SyTableFilter
@@ -462,6 +464,7 @@
462
464
  :page-count="pageCount"
463
465
  :items-length="filteredItems.length"
464
466
  :items-per-page-options="props.itemsPerPageOptions"
467
+ :page-input="props.pageInput"
465
468
  @update:page="updateOptions({ page: $event })"
466
469
  @update:items-per-page="updateItemsPerPage"
467
470
  />
@@ -473,7 +476,6 @@
473
476
 
474
477
  <style lang="scss" scoped>
475
478
  @use '@/components/Tables/common/tableStyles' as *;
476
- @use '@/assets/tokens';
477
479
 
478
480
  .sy-table :deep() {
479
481
  @include tablestyles;
@@ -482,7 +484,7 @@
482
484
 
483
485
  @mixin striped-rows {
484
486
  .v-table tbody tr:nth-child(even) {
485
- background-color: rgba(tokens.$primary-base, 0.05);
487
+ background-color: rgba(var(--v-theme-primary), 0.05);
486
488
  }
487
489
  }
488
490
 
@@ -500,11 +502,11 @@
500
502
  }
501
503
 
502
504
  .sy-table--pinned-left-shadow :deep(.sy-table__pinned--left) {
503
- box-shadow: 2px 0 6px -4px rgba(tokens.$grey-base, 0.6);
505
+ box-shadow: 2px 0 6px -4px rgba(var(--v-theme-grey-base), 0.6);
504
506
  }
505
507
 
506
508
  .sy-table--pinned-right-shadow :deep(.sy-table__pinned--right) {
507
- box-shadow: -2px 0 6px -4px rgba(tokens.$grey-base, 0.6);
509
+ box-shadow: -2px 0 6px -4px rgba(var(--v-theme-grey-base), 0.6);
508
510
  }
509
511
 
510
512
  .sy-table--pinned-select-left :deep(.v-data-table__th--select),
@@ -545,7 +547,7 @@
545
547
  .sy-table--pinned-left-shadow.sy-table--pinned-select-left :deep(.v-table__wrapper > table > tbody > tr:not(.v-data-table-rows-loading) > .v-data-table__td:first-child),
546
548
  .sy-table--pinned-left-shadow.sy-table--pinned-select-left :deep(.v-data-table__tbody .v-data-table__tr:not(.v-data-table-rows-loading) > .v-data-table__td:first-child),
547
549
  .sy-table--pinned-left-shadow.sy-table--pinned-select-left :deep(.v-data-table__tbody tr:not(.v-data-table-rows-loading) > td:first-child) {
548
- box-shadow: 2px 0 6px -4px rgba(tokens.$grey-base, 0.6);
550
+ box-shadow: 2px 0 6px -4px rgba(var(--v-theme-grey-base), 0.6);
549
551
  }
550
552
  /* stylelint-enable @stylistic/max-line-length */
551
553
 
@@ -36,6 +36,28 @@ describe('SyTable - accessibility (axe)', () => {
36
36
  }
37
37
  })
38
38
 
39
+ it('has no obvious axe violations with pageInput enabled', async () => {
40
+ const manyItems = Array.from({ length: 11 }, (_, i) => ({ id: i + 1, name: `User ${i + 1}`, age: 20 + i }))
41
+
42
+ const wrapper = mount(SyTable, {
43
+ props: {
44
+ options: {} as DataOptions,
45
+ suffix: 'a11y-page-input-test',
46
+ pageInput: true,
47
+ headers,
48
+ items: manyItems,
49
+ },
50
+ attachTo: document.body,
51
+ })
52
+
53
+ await wrapper.vm.$nextTick()
54
+
55
+ const results = await axe(wrapper.element as HTMLElement)
56
+ assertNoA11yViolations(results, 'SyTable - pageInput', {
57
+ ignoreRules: ['region', 'aria-prohibited-attr'],
58
+ })
59
+ })
60
+
39
61
  it('has no obvious axe violations when rows are clickable and contain nested actions', async () => {
40
62
  const wrapper = mount(SyTable, {
41
63
  props: {
@@ -892,4 +892,278 @@ describe('SyTable selectionKey', () => {
892
892
  const result = itemValue(item as unknown as Record<string, unknown>)
893
893
  expect(result).toBe(item) // same object reference
894
894
  })
895
+
896
+ describe('maxWidth truncation', () => {
897
+ const truncateHeaders = [
898
+ {
899
+ title: 'Nom de la colonne super longue',
900
+ key: 'nom',
901
+ maxWidth: '100px',
902
+ },
903
+ {
904
+ title: 'Prénom',
905
+ key: 'prenom',
906
+ },
907
+ ]
908
+
909
+ const truncateItems = [
910
+ { nom: 'Valeur très longue qui dépasse la largeur maximale', prenom: 'Court' },
911
+ ]
912
+
913
+ it('applies maxWidth and wraps the header title on <th> when maxWidth is set', async () => {
914
+ const wrapper = mount(SyTable, {
915
+ props: {
916
+ suffix: 'truncate-test',
917
+ headers: truncateHeaders,
918
+ items: truncateItems,
919
+ },
920
+ attachTo: document.body,
921
+ })
922
+
923
+ await wrapper.vm.$nextTick()
924
+ await vi.dynamicImportSettled()
925
+
926
+ const ths = wrapper.findAll('tr.headers th')
927
+ const truncatedTh = ths.find(th => (th.attributes('style') || '').includes('max-width'))
928
+
929
+ expect(truncatedTh).toBeDefined()
930
+ expect(truncatedTh!.attributes('style')).toContain('max-width: 100px')
931
+ expect(truncatedTh!.attributes('style')).not.toContain('overflow: hidden')
932
+ expect(truncatedTh!.attributes('title')).toBeUndefined()
933
+ expect(truncatedTh!.find('.col-title').classes()).toContain('col-title--wrap')
934
+ })
935
+
936
+ it('does not apply multiline header styles on <th> without maxWidth', async () => {
937
+ const wrapper = mount(SyTable, {
938
+ props: {
939
+ suffix: 'no-truncate-test',
940
+ headers: truncateHeaders,
941
+ items: truncateItems,
942
+ },
943
+ attachTo: document.body,
944
+ })
945
+
946
+ await wrapper.vm.$nextTick()
947
+ await vi.dynamicImportSettled()
948
+
949
+ const ths = wrapper.findAll('tr.headers th')
950
+ const normalTh = ths.find(th => !(th.attributes('style') || '').includes('max-width'))
951
+
952
+ expect(normalTh).toBeDefined()
953
+ expect(normalTh!.attributes('title')).toBeUndefined()
954
+ expect(normalTh!.find('.col-title').classes()).not.toContain('col-title--wrap')
955
+ })
956
+
957
+ it('applies multiline styles on <td> when maxWidth is set', async () => {
958
+ const wrapper = mount(SyTable, {
959
+ props: {
960
+ suffix: 'truncate-td-test',
961
+ headers: truncateHeaders,
962
+ items: truncateItems,
963
+ },
964
+ attachTo: document.body,
965
+ })
966
+
967
+ await wrapper.vm.$nextTick()
968
+ await vi.dynamicImportSettled()
969
+
970
+ const tds = wrapper.findAll('tbody tr td')
971
+ const truncatedTd = tds.find(td => (td.attributes('style') || '').includes('max-width'))
972
+
973
+ expect(truncatedTd).toBeDefined()
974
+ expect(truncatedTd!.attributes('style')).toContain('max-width: 100px')
975
+ expect(truncatedTd!.attributes('style')).toContain('white-space: normal')
976
+ expect(truncatedTd!.attributes('style')).toContain('overflow-wrap: anywhere')
977
+ expect(truncatedTd!.attributes('style')).toContain('word-break: break-word')
978
+ expect(truncatedTd!.attributes('style')).not.toContain('overflow: hidden')
979
+ expect(truncatedTd!.attributes('title')).toBeUndefined()
980
+ })
981
+
982
+ it('applies maxWidth without truncation on filter row <th> when maxWidth is set with showFilters', async () => {
983
+ const wrapper = mount(SyTable, {
984
+ props: {
985
+ suffix: 'truncate-filter-test',
986
+ showFilters: true,
987
+ headers: truncateHeaders,
988
+ items: truncateItems,
989
+ },
990
+ attachTo: document.body,
991
+ })
992
+
993
+ await wrapper.vm.$nextTick()
994
+ await vi.dynamicImportSettled()
995
+
996
+ const filterThs = wrapper.findAll('tr.filters th')
997
+ const truncatedFilterTh = filterThs.find(th => (th.attributes('style') || '').includes('max-width'))
998
+
999
+ expect(truncatedFilterTh).toBeDefined()
1000
+ expect(truncatedFilterTh!.attributes('style')).toContain('max-width: 100px')
1001
+ expect(truncatedFilterTh!.attributes('style')).not.toContain('overflow: hidden')
1002
+ })
1003
+
1004
+ it('keeps multiline td styles after reordering a maxWidth column with column controls', async () => {
1005
+ const mockOrganizeColumns = {
1006
+ name: 'OrganizeColumns',
1007
+ props: ['headers'],
1008
+ template: '<div></div>',
1009
+ emits: ['update:headers'],
1010
+ }
1011
+
1012
+ const wrapper = mount(SyTable, {
1013
+ props: {
1014
+ suffix: 'truncate-reorder-test',
1015
+ headers: truncateHeaders.map((header, index) => ({
1016
+ ...header,
1017
+ order: index + 1,
1018
+ })),
1019
+ items: truncateItems,
1020
+ enableColumnControls: true,
1021
+ },
1022
+ global: {
1023
+ stubs: {
1024
+ OrganizeColumns: mockOrganizeColumns,
1025
+ },
1026
+ },
1027
+ attachTo: document.body,
1028
+ })
1029
+
1030
+ const organizeColumnsComponent = wrapper.findComponent({ name: 'OrganizeColumns' })
1031
+ const reorderedHeaders = JSON.parse(JSON.stringify([
1032
+ { ...truncateHeaders[0], order: 2 },
1033
+ { ...truncateHeaders[1], order: 1 },
1034
+ ]))
1035
+
1036
+ organizeColumnsComponent.vm.$emit('update:headers', reorderedHeaders)
1037
+ await wrapper.vm.$nextTick()
1038
+ await vi.dynamicImportSettled()
1039
+
1040
+ const tds = wrapper.findAll('tbody tr td')
1041
+ expect(tds[0]!.text()).toBe('Court')
1042
+ expect(tds[1]!.text()).toBe('Valeur très longue qui dépasse la largeur maximale')
1043
+ expect(tds[1]!.attributes('style')).toContain('max-width: 100px')
1044
+ expect(tds[1]!.attributes('style')).toContain('white-space: normal')
1045
+ expect(tds[1]!.attributes('style')).toContain('overflow-wrap: anywhere')
1046
+ })
1047
+ })
1048
+ })
1049
+
1050
+ describe('SyTable pageInput', () => {
1051
+ const manyItems = Array.from({ length: 11 }, (_, i) => ({
1052
+ id: i + 1,
1053
+ name: `User ${i + 1}`,
1054
+ age: 20 + i,
1055
+ }))
1056
+
1057
+ it('does not render page-input when pageInput is false', () => {
1058
+ const wrapper = mount(SyTable, {
1059
+ props: {
1060
+ options: { itemsPerPage: 5 } as DataOptions,
1061
+ suffix: 'page-input-test',
1062
+ pageInput: false,
1063
+ },
1064
+ attrs: { items: manyItems, headers },
1065
+ })
1066
+
1067
+ expect(wrapper.find('.page-input').exists()).toBe(false)
1068
+ })
1069
+
1070
+ it('renders page-input field when pageInput is true and pageCount > 1', async () => {
1071
+ const wrapper = mount(SyTable, {
1072
+ props: {
1073
+ options: { itemsPerPage: 5 } as DataOptions,
1074
+ suffix: 'page-input-test',
1075
+ pageInput: true,
1076
+ },
1077
+ attrs: { items: manyItems, headers },
1078
+ })
1079
+
1080
+ await wrapper.vm.$nextTick()
1081
+ await vi.dynamicImportSettled()
1082
+
1083
+ expect(wrapper.find('.page-input').exists()).toBe(true)
1084
+ expect(wrapper.find('.page-input__field').exists()).toBe(true)
1085
+ expect(wrapper.find('.page-input__label').exists()).toBe(true)
1086
+ })
1087
+
1088
+ it('page-input field has correct min/max attributes', async () => {
1089
+ const wrapper = mount(SyTable, {
1090
+ props: {
1091
+ options: { itemsPerPage: 5 } as DataOptions,
1092
+ suffix: 'page-input-test',
1093
+ pageInput: true,
1094
+ },
1095
+ attrs: { items: manyItems, headers },
1096
+ })
1097
+
1098
+ await wrapper.vm.$nextTick()
1099
+ await vi.dynamicImportSettled()
1100
+
1101
+ const input = wrapper.find('.page-input__field')
1102
+ expect(input.attributes('min')).toBe('1')
1103
+ expect(input.attributes('max')).toBe('3')
1104
+ expect(input.attributes('type')).toBe('number')
1105
+ })
1106
+
1107
+ it('page-input field has accessible aria-label', async () => {
1108
+ const wrapper = mount(SyTable, {
1109
+ props: {
1110
+ options: { itemsPerPage: 5 } as DataOptions,
1111
+ suffix: 'page-input-test',
1112
+ pageInput: true,
1113
+ },
1114
+ attrs: { items: manyItems, headers },
1115
+ })
1116
+
1117
+ await wrapper.vm.$nextTick()
1118
+ await vi.dynamicImportSettled()
1119
+
1120
+ const input = wrapper.find('.page-input__field')
1121
+ expect(input.attributes('aria-label')).toContain('3')
1122
+ })
1123
+
1124
+ it('navigates to page on Enter key', async () => {
1125
+ const wrapper = mount(SyTable, {
1126
+ props: {
1127
+ options: { itemsPerPage: 5 } as DataOptions,
1128
+ suffix: 'page-input-test',
1129
+ pageInput: true,
1130
+ },
1131
+ attrs: { items: manyItems, headers },
1132
+ })
1133
+
1134
+ await wrapper.vm.$nextTick()
1135
+ await vi.dynamicImportSettled()
1136
+
1137
+ const input = wrapper.find('.page-input__field')
1138
+ await input.setValue(2)
1139
+ await input.trigger('keydown', { key: 'Enter' })
1140
+
1141
+ const emitted = wrapper.emitted('update:options')
1142
+ expect(emitted).toBeTruthy()
1143
+ const lastEmit = emitted![emitted!.length - 1]![0] as DataOptions
1144
+ expect(lastEmit.page).toBe(2)
1145
+ })
1146
+
1147
+ it('clamps out-of-range values on blur', async () => {
1148
+ const wrapper = mount(SyTable, {
1149
+ props: {
1150
+ options: { itemsPerPage: 5 } as DataOptions,
1151
+ suffix: 'page-input-test',
1152
+ pageInput: true,
1153
+ },
1154
+ attrs: { items: manyItems, headers },
1155
+ })
1156
+
1157
+ await wrapper.vm.$nextTick()
1158
+ await vi.dynamicImportSettled()
1159
+
1160
+ const input = wrapper.find('.page-input__field')
1161
+ await input.setValue(99)
1162
+ await input.trigger('blur')
1163
+
1164
+ const emitted = wrapper.emitted('update:options')
1165
+ expect(emitted).toBeTruthy()
1166
+ const lastEmit = emitted![emitted!.length - 1]![0] as DataOptions
1167
+ expect(lastEmit.page).toBe(3)
1168
+ })
895
1169
  })
@@ -2,7 +2,7 @@
2
2
  import { ref, watch, provide, computed } from 'vue'
3
3
  import type { FilterOption, TableColumnHeader } from './types'
4
4
  import { filterItems } from './tableFilterUtils'
5
- import type { DateValue } from '@/composables/date/useDateInitializationDayjs'
5
+ import type { DateModelValue } from '@/composables/date/useDateInitializationDayjs'
6
6
  import getFilterComponent from './filters/getFilterComponent'
7
7
 
8
8
  const props = defineProps({
@@ -59,7 +59,7 @@
59
59
  const filtersMap = ref<{
60
60
  text: Record<string, string>
61
61
  number: Record<string, number>
62
- date: Record<string, DateValue>
62
+ date: Record<string, DateModelValue>
63
63
  period: Record<string, { from: string | null, to: string | null }>
64
64
  select: Record<string, string | number | Record<string, unknown> | undefined>
65
65
  autocomplete: Record<string, string | number | Record<string, unknown> | Array<string | number | Record<string, unknown>> | undefined>
@@ -93,7 +93,7 @@
93
93
  filtersMap.value.number[key] = value as number
94
94
  break
95
95
  case 'date':
96
- filtersMap.value.date[key] = value as DateValue
96
+ filtersMap.value.date[key] = value as DateModelValue
97
97
  break
98
98
  case 'period':
99
99
  if (value && typeof value === 'object' && 'from' in value && 'to' in value) {
@@ -184,7 +184,7 @@
184
184
  filtersMap.value.select[key] = value as string | number | Record<string, unknown> | undefined
185
185
  }
186
186
  else if (header.filterType === 'date') {
187
- filtersMap.value.date[key] = value as DateValue
187
+ filtersMap.value.date[key] = value as DateModelValue
188
188
  }
189
189
  else if (header.filterType === 'period') {
190
190
  filtersMap.value.period[key] = value as { from: string | null, to: string | null }
@@ -297,13 +297,38 @@
297
297
  flex-wrap: wrap;
298
298
  gap: 16px;
299
299
  padding: 16px 0;
300
- background-color: var(--v-theme-surface);
301
300
  border-bottom: 1px solid var(--v-border-color);
302
301
 
303
302
  &-item {
304
- min-width: 200px;
303
+ min-width: 0;
304
+ width: 100%;
305
305
  flex: 1;
306
306
  }
307
+
308
+ :deep(.v-field) {
309
+ height: auto;
310
+ min-height: var(--v-input-control-height, 56px);
311
+ }
312
+
313
+ :deep(.v-field__field),
314
+ :deep(.v-field__input) {
315
+ min-width: 0;
316
+ }
317
+
318
+ :deep(.sy-select .v-field__input),
319
+ :deep(.sy-autocomplete .v-field__input) {
320
+ flex-wrap: wrap;
321
+ }
322
+
323
+ :deep(.sy-select__label),
324
+ :deep(.sy-autocomplete__label),
325
+ :deep(.sy-autocomplete__selection-text) {
326
+ white-space: normal;
327
+ overflow-wrap: anywhere;
328
+ word-break: break-word;
329
+ line-height: 1.25;
330
+ flex-shrink: 1;
331
+ }
307
332
  }
308
333
 
309
334
  </style>
@@ -11,9 +11,11 @@
11
11
  itemsLength: number
12
12
  itemsPerPageOptions?: number[]
13
13
  headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
14
+ pageInput?: boolean
14
15
  }>(), {
15
16
  itemsPerPageOptions: undefined,
16
17
  headingLevel: 2,
18
+ pageInput: false,
17
19
  })
18
20
 
19
21
  // Reference to the SySelect component
@@ -91,6 +93,34 @@
91
93
  localItemsPerPage.value = newValue
92
94
  })
93
95
 
96
+ /**
97
+ * Page input field logic
98
+ */
99
+ const pageInputValue = ref<number | null>(props.page)
100
+
101
+ watch(() => props.page, (newPage) => {
102
+ pageInputValue.value = newPage
103
+ })
104
+
105
+ function commitPageInput() {
106
+ const enteredPage = pageInputValue.value
107
+ if (enteredPage === null || !Number.isInteger(enteredPage)) {
108
+ pageInputValue.value = props.page
109
+ return
110
+ }
111
+ const targetPage = Math.min(Math.max(1, enteredPage), props.pageCount)
112
+ pageInputValue.value = targetPage
113
+ if (targetPage !== props.page) {
114
+ emit('update:page', targetPage)
115
+ }
116
+ }
117
+
118
+ function handlePageInputKeydown(e: KeyboardEvent) {
119
+ if (e.key === 'Enter') {
120
+ commitPageInput()
121
+ }
122
+ }
123
+
94
124
  // Remove aria-describedby attribute after component is mounted
95
125
  onMounted(() => {
96
126
  // Use nextTick to ensure the DOM is fully rendered
@@ -120,26 +150,57 @@
120
150
  }}
121
151
  </div>
122
152
 
123
- <SyPagination
153
+ <div
124
154
  v-if="pageCount > 1"
125
- :model-value="page"
126
- :pages="pageCount"
127
- :heading-level="headingLevel"
128
- :visible="5"
129
- :label="locales.pagination.paginationNavAriaLabel"
130
- class="pagination"
131
- @update:model-value="goToPage"
155
+ class="pagination-controls"
132
156
  >
133
- <template #previous>
134
- <span>{{ locales.pagination.previous }}</span>
135
- </template>
136
- <template #page-number="{ page: pageNum }">
137
- {{ locales.pagination.pageText(pageNum) }}
138
- </template>
139
- <template #next>
140
- <span>{{ locales.pagination.next }}</span>
141
- </template>
142
- </SyPagination>
157
+ <SyPagination
158
+ :model-value="page"
159
+ :pages="pageCount"
160
+ :heading-level="headingLevel"
161
+ :visible="5"
162
+ :label="locales.pagination.paginationNavAriaLabel"
163
+ class="pagination"
164
+ @update:model-value="goToPage"
165
+ >
166
+ <template #previous>
167
+ <span>{{ locales.pagination.previous }}</span>
168
+ </template>
169
+ <template #page-number="{ page: pageNum }">
170
+ {{ locales.pagination.pageText(pageNum) }}
171
+ </template>
172
+ <template #next>
173
+ <span>{{ locales.pagination.next }}</span>
174
+ </template>
175
+ </SyPagination>
176
+
177
+ <div
178
+ v-if="pageInput"
179
+ class="page-input"
180
+ >
181
+ <div class="page-input__control">
182
+ <span class="page-input__label">
183
+ {{ locales.pagination.pageInputLabel }}
184
+ </span>
185
+ <input
186
+ v-model.number="pageInputValue"
187
+ type="number"
188
+ :min="1"
189
+ :max="pageCount"
190
+ class="page-input__field"
191
+ :aria-label="locales.pagination.pageInputAriaLabel(pageCount)"
192
+ @blur="commitPageInput"
193
+ @keydown="handlePageInputKeydown"
194
+ >
195
+ </div>
196
+ <span
197
+ class="page-input__total"
198
+ aria-hidden="true"
199
+ >
200
+ {{ locales.pagination.pageOf(pageCount) }}
201
+ </span>
202
+ </div>
203
+ </div>
143
204
 
144
205
  <div class="rows-per-page">
145
206
  <span class="rows-per-page-label">{{ locales.pagination.itemsPerPageText }}</span>
@@ -150,6 +211,7 @@
150
211
  :items="formatedItemsPerPageOptions"
151
212
  hide-details
152
213
  hide-messages
214
+ disable-error-handling
153
215
  density="compact"
154
216
  class="rows-per-page-select"
155
217
  :aria-label="locales.pagination.itemsPerPageText"
@@ -163,7 +225,7 @@
163
225
  </template>
164
226
 
165
227
  <style lang="scss" scoped>
166
- @use '@/assets/tokens';
228
+ @use '@/assets/overrides/breakpoints' as bp;
167
229
 
168
230
  .sy-table-pagination {
169
231
  display: flex;
@@ -212,5 +274,67 @@
212
274
  gap: 0.5rem;
213
275
  align-items: center;
214
276
  }
277
+
278
+ .pagination-controls {
279
+ display: flex;
280
+ flex-wrap: wrap;
281
+ align-items: center;
282
+ justify-content: center;
283
+ gap: 0.75rem;
284
+ }
285
+
286
+ .page-input {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 0.5rem;
290
+ padding-inline-start: 1.75rem;
291
+ border-inline-start: 1px solid rgb(0 0 0 / 12%);
292
+
293
+ @media #{bp.$down-xs} {
294
+ padding-inline-start: 0;
295
+ border-inline-start: 0;
296
+ }
297
+
298
+ &__control {
299
+ display: flex;
300
+ align-items: center;
301
+ gap: 0.5rem;
302
+ }
303
+
304
+ &__label {
305
+ font-size: 0.875rem;
306
+ color: rgb(0 0 0 / 60%);
307
+ white-space: nowrap;
308
+ }
309
+
310
+ &__field {
311
+ width: 56px;
312
+ height: 32px;
313
+ padding: 0 8px;
314
+ border: 1px solid rgb(var(--v-theme-primary));
315
+ border-radius: 4px;
316
+ font-size: 0.875rem;
317
+ text-align: center;
318
+ color: inherit;
319
+ background: rgb(var(--v-theme-surface));
320
+ appearance: textfield;
321
+
322
+ &::-webkit-inner-spin-button,
323
+ &::-webkit-outer-spin-button {
324
+ appearance: none;
325
+ }
326
+
327
+ &:focus-visible {
328
+ outline: 2px solid rgb(var(--v-theme-primary));
329
+ outline-offset: 2px;
330
+ }
331
+ }
332
+
333
+ &__total {
334
+ font-size: 0.875rem;
335
+ color: rgb(0 0 0 / 60%);
336
+ white-space: nowrap;
337
+ }
338
+ }
215
339
  }
216
340
  </style>