@cnamts/synapse 1.0.21 → 1.0.23

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 (449) hide show
  1. package/dist/{DateFilter-uN8OURoP.js → DateFilter-Dc-gSGwk.js} +29 -24
  2. package/dist/{NumberFilter-sm1dQNQi.js → NumberFilter-vP38Wp6j.js} +1 -1
  3. package/dist/{PeriodFilter-Cklsxnh9.js → PeriodFilter-Ba1uYUnT.js} +1 -1
  4. package/dist/{SelectFilter-CWefj27Z.js → SelectFilter-BioGT6Nn.js} +1 -1
  5. package/dist/{TextFilter-Ddyj885L.js → TextFilter-B84dpnoq.js} +1 -1
  6. package/dist/components/Accordion/Accordion.d.ts +13 -2
  7. package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
  8. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7405 -5973
  9. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
  10. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
  12. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +1 -1
  14. package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +1 -1
  15. package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +8 -8
  17. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +3 -3
  18. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +1 -1
  19. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +1 -1
  20. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +16 -20
  22. package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +1 -1
  23. package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +1 -1
  24. package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1610 -1354
  26. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +2413 -2029
  27. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8885 -7323
  28. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  29. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -6
  30. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +8884 -7330
  31. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +950 -838
  32. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1614 -1358
  33. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +223 -203
  34. package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +3 -3
  35. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +3 -7
  36. package/dist/components/CollapsibleList/CollapsibleList.d.ts +4 -1
  37. package/dist/components/CookieBanner/CookieBanner.d.ts +303 -273
  38. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +1297 -1156
  39. package/dist/components/CookiesSelection/CookiesSelection.d.ts +404 -377
  40. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +1 -1
  41. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +1108 -846
  42. package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +514 -320
  44. package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
  45. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +40 -38
  46. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +920 -800
  47. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  48. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  49. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +906 -794
  50. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1634 -1367
  51. package/dist/components/DataList/DataList.d.ts +1 -1
  52. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3869 -3120
  53. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1947 -1561
  54. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +831 -684
  55. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  56. package/dist/components/DownloadBtn/config.d.ts +1 -1
  57. package/dist/components/ErrorPage/ErrorPage.d.ts +6 -0
  58. package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
  59. package/dist/components/FileList/UploadItem/locales.d.ts +1 -0
  60. package/dist/components/FileUpload/FileUpload.d.ts +4 -4
  61. package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
  62. package/dist/components/FileUpload/locales.d.ts +1 -0
  63. package/dist/components/FileUpload/validateFiles.d.ts +2 -1
  64. package/dist/components/FilterSideBar/FilterSideBar.d.ts +418 -366
  65. package/dist/components/FooterBar/FooterBar.d.ts +13 -1
  66. package/dist/components/FooterBar/locales.d.ts +1 -0
  67. package/dist/components/FooterBar/types.d.ts +1 -0
  68. package/dist/components/HeaderBar/HeaderBar.d.ts +2 -0
  69. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -0
  70. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +4 -6
  71. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +1031 -643
  72. package/dist/components/LangBtn/LangBtn.d.ts +277 -239
  73. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +4 -0
  74. package/dist/components/MaintenancePage/MaintenancePage.d.ts +16 -1
  75. package/dist/components/MonthPicker/MonthPicker.d.ts +1939 -0
  76. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1899 -0
  77. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
  78. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
  79. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
  80. package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
  81. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
  82. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
  83. package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
  84. package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
  85. package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
  86. package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
  87. package/dist/components/MonthPicker/locales.d.ts +12 -0
  88. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
  89. package/dist/components/NirField/NirField.d.ts +1669 -1379
  90. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  91. package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
  92. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  93. package/dist/components/PeriodField/PeriodField.d.ts +7696 -6192
  94. package/dist/components/PhoneField/PhoneField.d.ts +829 -684
  95. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  96. package/dist/components/StatusPage/StatusPage.d.ts +12 -1
  97. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  98. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  99. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +9 -0
  100. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
  101. package/dist/components/SyHeading/SyHeading.d.ts +22 -0
  102. package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
  103. package/dist/components/SyTextArea/SyTextArea.d.ts +475 -419
  104. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  105. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  106. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  107. package/dist/components/Tables/common/SyTablePagination.d.ts +263 -164
  108. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  109. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  110. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  111. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  112. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  113. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  114. package/dist/components/Tables/common/types.d.ts +2 -0
  115. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +24 -1211
  116. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  117. package/dist/components/index.d.ts +2 -0
  118. package/dist/components/types.d.ts +2 -0
  119. package/dist/design-system-v3.js +111 -107
  120. package/dist/design-system-v3.umd.cjs +158 -158
  121. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  122. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  123. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
  124. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  125. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  126. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  127. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  128. package/dist/main-aLKwdMi1.js +37886 -0
  129. package/dist/main.d.ts +1 -0
  130. package/dist/style.css +1 -1
  131. package/dist/vuetifyConfig.d.ts +14 -14
  132. package/package.json +21 -9
  133. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  134. package/src/assets/apTokens.scss +53 -17
  135. package/src/assets/overrides/_btns.scss +8 -0
  136. package/src/assets/overrides/_forms.scss +9 -0
  137. package/src/assets/overrides/_icons.scss +43 -4
  138. package/src/assets/overrides/_tables.scss +19 -0
  139. package/src/assets/overrides/_tooltips.scss +5 -6
  140. package/src/assets/overrides/_typography.scss +17 -2
  141. package/src/assets/overrides/_utilities.scss +49 -3
  142. package/src/assets/tokens.scss +53 -17
  143. package/src/components/Accordion/Accordion.mdx +23 -9
  144. package/src/components/Accordion/Accordion.stories.ts +153 -3
  145. package/src/components/Accordion/Accordion.vue +7 -6
  146. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  147. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
  148. package/src/components/Accordion/composables/useAccordionState.ts +3 -4
  149. package/src/components/Accordion/tests/accordion.spec.ts +131 -19
  150. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  151. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  152. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  153. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  154. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  155. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  156. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  157. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  158. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  159. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  160. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  161. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  162. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  163. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  164. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  165. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  166. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  167. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  168. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  169. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  170. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  171. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  172. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  173. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  174. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  175. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  176. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
  177. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
  178. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  179. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  180. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  181. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  182. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  183. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  184. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  185. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  186. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  187. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  188. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  189. package/src/components/BackBtn/BackBtn.vue +1 -1
  190. package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
  191. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
  192. package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
  193. package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
  194. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +18 -108
  195. package/src/components/ChipList/ChipList.vue +4 -2
  196. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  197. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  198. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  199. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  200. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  201. package/src/components/CookieBanner/CookieBanner.stories.ts +10 -0
  202. package/src/components/CookieBanner/CookieBanner.vue +15 -5
  203. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +9 -0
  204. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +10 -2
  205. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  206. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  207. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  208. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  209. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  210. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  211. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  212. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  213. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  214. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  215. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  216. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +133 -10
  217. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
  218. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +144 -83
  219. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
  220. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
  221. package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
  222. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
  223. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +234 -9
  224. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +13 -3
  225. package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
  226. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  227. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  228. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  229. package/src/components/Customs/Selects/SySelect/SySelect.vue +63 -3
  230. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  231. package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
  232. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  233. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  234. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +1 -1
  235. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  236. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  237. package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
  238. package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
  239. package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
  240. package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
  241. package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
  242. package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
  243. package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
  244. package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
  245. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  246. package/src/components/Customs/SyPagination/SyPagination.vue +25 -10
  247. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  248. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +53 -0
  249. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  250. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  251. package/src/components/Customs/SyTextField/SyTextField.vue +59 -7
  252. package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
  253. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +15 -0
  254. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +36 -0
  255. package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
  256. package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
  257. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  258. package/src/components/DatePicker/CalendarMode/DatePicker.vue +20 -8
  259. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  260. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  261. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  262. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +34 -0
  263. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.a11y.spec.ts +27 -0
  264. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  265. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  266. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  267. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  268. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  269. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  270. package/src/components/DialogBox/DialogBox.vue +12 -5
  271. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  272. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  273. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  274. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  275. package/src/components/DownloadBtn/config.ts +1 -1
  276. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
  277. package/src/components/ErrorPage/ErrorPage.stories.ts +176 -47
  278. package/src/components/ErrorPage/ErrorPage.vue +21 -0
  279. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +15 -0
  280. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
  281. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
  282. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +1 -0
  283. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
  284. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  285. package/src/components/FileList/FileList.stories.ts +55 -1
  286. package/src/components/FileList/UploadItem/UploadItem.vue +17 -5
  287. package/src/components/FileList/UploadItem/locales.ts +3 -2
  288. package/src/components/FileList/accessibilite/Accessibility.mdx +58 -7
  289. package/src/components/FileUpload/FileUpload.vue +62 -38
  290. package/src/components/FileUpload/FileUploadContent.vue +3 -2
  291. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  292. package/src/components/FileUpload/locales.ts +1 -0
  293. package/src/components/FileUpload/tests/FileUpload.spec.ts +61 -14
  294. package/src/components/FileUpload/validateFiles.ts +5 -2
  295. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  296. package/src/components/FilterInline/FilterInline.vue +1 -0
  297. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  298. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  299. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  300. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  301. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  302. package/src/components/FooterBar/FooterBar.stories.ts +298 -34
  303. package/src/components/FooterBar/FooterBar.vue +67 -9
  304. package/src/components/FooterBar/config.ts +2 -2
  305. package/src/components/FooterBar/locales.ts +1 -0
  306. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  307. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  308. package/src/components/FooterBar/types.d.ts +1 -0
  309. package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
  310. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  311. package/src/components/HeaderBar/HeaderBar.vue +5 -0
  312. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +8 -2
  313. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  314. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  315. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  316. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  317. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  318. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +3 -0
  319. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  320. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  321. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  322. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  323. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  324. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  325. package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
  326. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
  327. package/src/components/MaintenancePage/MaintenancePage.vue +33 -6
  328. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +3 -1
  329. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +3 -2
  330. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +18 -1
  331. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +1 -0
  332. package/src/components/MonthPicker/MonthPicker.mdx +35 -0
  333. package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
  334. package/src/components/MonthPicker/MonthPicker.vue +79 -0
  335. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
  336. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
  337. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
  338. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
  339. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
  340. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
  341. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
  342. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
  343. package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
  344. package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
  345. package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
  346. package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
  347. package/src/components/MonthPicker/locales.ts +12 -0
  348. package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
  349. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1248 -0
  350. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
  351. package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
  352. package/src/components/NirField/NirField.mdx +1 -2
  353. package/src/components/NirField/NirField.stories.ts +66 -6
  354. package/src/components/NotFoundPage/NotFoundPage.stories.ts +1 -1
  355. package/src/components/NotFoundPage/NotFoundPage.vue +16 -5
  356. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +2 -0
  357. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +49 -0
  358. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +24 -2
  359. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +24 -14
  360. package/src/components/NotificationBar/Notification/Notification.vue +3 -1
  361. package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
  362. package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
  363. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
  364. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  365. package/src/components/PageContainer/PageContainer.vue +4 -2
  366. package/src/components/PageContainer/accessibilite/Accessibility.mdx +31 -17
  367. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  368. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  369. package/src/components/PeriodField/PeriodField.vue +4 -0
  370. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  371. package/src/components/PhoneField/PhoneField.stories.ts +73 -35
  372. package/src/components/PhoneField/PhoneField.vue +152 -83
  373. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  374. package/src/components/PhoneField/indicatifs.ts +2 -2
  375. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +47 -0
  376. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  377. package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
  378. package/src/components/SearchListField/SearchListField.vue +1 -1
  379. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  380. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  381. package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
  382. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +1 -1
  383. package/src/components/StatusPage/StatusPage.mdx +10 -1
  384. package/src/components/StatusPage/StatusPage.stories.ts +161 -0
  385. package/src/components/StatusPage/StatusPage.vue +29 -5
  386. package/src/components/StatusPage/accessibilite/Accessibility.mdx +24 -5
  387. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +23 -0
  388. package/src/components/StatusPage/tests/StatusPage.spec.ts +25 -0
  389. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +24 -14
  390. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  391. package/src/components/SubHeader/SubHeader.vue +6 -3
  392. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  393. package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
  394. package/src/components/SyAlert/SyAlert.vue +22 -20
  395. package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
  396. package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
  397. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  398. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  399. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  400. package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
  401. package/src/components/SyHeading/SyHeading.test.ts +115 -0
  402. package/src/components/SyHeading/SyHeading.vue +20 -0
  403. package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
  404. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
  405. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -30
  406. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  407. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  408. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  409. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  410. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  411. package/src/components/Tables/common/types.ts +3 -0
  412. package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
  413. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +11 -11
  414. package/src/components/UploadWorkflow/UploadWorkflow.vue +30 -13
  415. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  416. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  417. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +7 -25
  418. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +146 -123
  419. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  420. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  421. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  422. package/src/components/index.ts +2 -0
  423. package/src/components/types.ts +4 -0
  424. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  425. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  426. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  427. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  428. package/src/composables/useFilterable/useFilterable.ts +7 -1
  429. package/src/composables/useFormFieldErrorHandling.ts +11 -2
  430. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  431. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  432. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
  433. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  434. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  435. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  436. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  437. package/src/directives/rgaaSvgFix.ts +2 -7
  438. package/src/main.ts +2 -0
  439. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  440. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  441. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  442. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  443. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  444. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  445. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  446. package/src/stories/DesignTokens/Colors.mdx +8 -59
  447. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  448. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  449. package/dist/main-CWniLr0s.js +0 -36919
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
2
  import { mount, flushPromises } from '@vue/test-utils'
3
- import { VMenu, VChip } from 'vuetify/components'
3
+ import { VMenu } from 'vuetify/components'
4
4
 
5
5
  import SyAutocomplete from '../SyAutocomplete.vue'
6
6
  import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
@@ -128,13 +128,13 @@ describe('SyAutocomplete', () => {
128
128
 
129
129
  // Some environments can emit a follow-up input event with the previous DOM value.
130
130
  // Ensure it doesn't re-populate the query after selection.
131
- textField.vm.$emit('update:modelValue', 'Option 1, Opt')
131
+ textField.vm.$emit('update:modelValue', 'Opt')
132
132
  await flushPromises()
133
133
  await wrapper.vm.$nextTick()
134
134
 
135
- // Query should be cleared, leaving only selected label prefix in input
135
+ // Search and input should be cleared; selected items render as inline labels, not in input value
136
136
  expect(wrapper.vm.search).toBe('')
137
- expect(getInputEl()!.value).toBe('Option 1, ')
137
+ expect(getInputEl()!.value).toBe('')
138
138
  })
139
139
 
140
140
  it('displays chips in multiple mode', async () => {
@@ -150,12 +150,13 @@ describe('SyAutocomplete', () => {
150
150
  textKey: 'text',
151
151
  valueKey: 'value',
152
152
  },
153
+ attachTo: document.body,
153
154
  })
154
155
 
155
156
  await wrapper.vm.$nextTick()
156
- const chips = wrapper.findAllComponents(VChip)
157
+ const chips = wrapper.findAll('.v-chip')
157
158
  expect(chips.length).toBe(1)
158
- expect(chips[0]!.text()).toBe('Option 1')
159
+ expect(chips[0]!.text()).toContain('Option 1')
159
160
  })
160
161
 
161
162
  it('removes chip when close button is clicked', async () => {
@@ -171,14 +172,15 @@ describe('SyAutocomplete', () => {
171
172
  textKey: 'text',
172
173
  valueKey: 'value',
173
174
  },
175
+ attachTo: document.body,
174
176
  })
175
177
 
176
178
  await wrapper.vm.$nextTick()
177
- const chip = wrapper.findComponent(VChip)
178
- await chip.vm.$emit('click:close')
179
+ const closeBtn = wrapper.find('.v-chip__close')
180
+ await closeBtn.trigger('click')
179
181
  await wrapper.vm.$nextTick()
180
182
 
181
- expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([[]])
183
+ expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([null])
182
184
  })
183
185
 
184
186
  it('shows clear button when clearable and has selection', async () => {
@@ -298,6 +300,181 @@ describe('SyAutocomplete', () => {
298
300
  expect(isMenuOverlayActive()).toBe(false)
299
301
  })
300
302
 
303
+ describe('selectionText', () => {
304
+ const selectionText = (selected: unknown[]) => `${selected.length} élément${selected.length > 1 ? 's' : ''} sélectionné${selected.length > 1 ? 's' : ''}`
305
+
306
+ it('displays custom text in prepend-inner when items are selected', async () => {
307
+ wrapper.unmount()
308
+ wrapper = mount(SyAutocomplete, {
309
+ props: {
310
+ modelValue: ['1', '2'],
311
+ items,
312
+ multiple: true,
313
+ selectionText,
314
+ label: 'Test selectionText',
315
+ textKey: 'text',
316
+ valueKey: 'value',
317
+ menuId,
318
+ },
319
+ attachTo: document.body,
320
+ })
321
+ await wrapper.vm.$nextTick()
322
+
323
+ const selectionTextEl = wrapper.find('.sy-autocomplete__selection-text')
324
+ expect(selectionTextEl.exists()).toBe(true)
325
+ expect(selectionTextEl.text()).toBe('2 éléments sélectionnés')
326
+ expect(getInputEl()?.value).toBe('')
327
+ })
328
+
329
+ it('does not display selection text element when no items are selected', async () => {
330
+ wrapper.unmount()
331
+ wrapper = mount(SyAutocomplete, {
332
+ props: {
333
+ modelValue: [],
334
+ items,
335
+ multiple: true,
336
+ selectionText,
337
+ label: 'Test selectionText vide',
338
+ textKey: 'text',
339
+ valueKey: 'value',
340
+ menuId,
341
+ },
342
+ attachTo: document.body,
343
+ })
344
+ await wrapper.vm.$nextTick()
345
+
346
+ expect(wrapper.find('.sy-autocomplete__selection-text').exists()).toBe(false)
347
+ })
348
+
349
+ it('keeps custom text visible when menu is open', async () => {
350
+ wrapper.unmount()
351
+ wrapper = mount(SyAutocomplete, {
352
+ props: {
353
+ modelValue: ['1', '2'],
354
+ items,
355
+ multiple: true,
356
+ selectionText,
357
+ label: 'Test selectionText ouvert',
358
+ textKey: 'text',
359
+ valueKey: 'value',
360
+ menuId,
361
+ },
362
+ attachTo: document.body,
363
+ })
364
+ await wrapper.vm.$nextTick()
365
+
366
+ const input = wrapper.find('input')
367
+ await input.trigger('click')
368
+ await flushPromises()
369
+ await wrapper.vm.$nextTick()
370
+
371
+ // Custom text still visible in prepend-inner, input empty for searching
372
+ expect(wrapper.find('.sy-autocomplete__selection-text').text()).toBe('2 éléments sélectionnés')
373
+ expect(getInputEl()?.value).toBe('')
374
+ })
375
+
376
+ it('updates custom text when selection changes', async () => {
377
+ wrapper.unmount()
378
+ wrapper = mount(SyAutocomplete, {
379
+ props: {
380
+ modelValue: ['1'],
381
+ items,
382
+ multiple: true,
383
+ selectionText,
384
+ label: 'Test selectionText update',
385
+ textKey: 'text',
386
+ valueKey: 'value',
387
+ menuId,
388
+ },
389
+ attachTo: document.body,
390
+ })
391
+ await wrapper.vm.$nextTick()
392
+ expect(wrapper.find('.sy-autocomplete__selection-text').text()).toBe('1 élément sélectionné')
393
+
394
+ await wrapper.setProps({ modelValue: ['1', '2', '3'] })
395
+ await wrapper.vm.$nextTick()
396
+ expect(wrapper.find('.sy-autocomplete__selection-text').text()).toBe('3 éléments sélectionnés')
397
+ })
398
+ })
399
+
400
+ describe('loading', () => {
401
+ it('shows progress bar when loading is true', async () => {
402
+ wrapper.unmount()
403
+ wrapper = mount(SyAutocomplete, {
404
+ props: {
405
+ modelValue: null,
406
+ items,
407
+ label: 'Test Loading',
408
+ textKey: 'text',
409
+ valueKey: 'value',
410
+ loading: true,
411
+ menuId,
412
+ },
413
+ attachTo: document.body,
414
+ })
415
+
416
+ await wrapper.vm.$nextTick()
417
+ const progressBar = wrapper.find('.v-progress-linear')
418
+ expect(progressBar.exists()).toBe(true)
419
+ })
420
+
421
+ it('does not show progress bar when loading is false', async () => {
422
+ await wrapper.vm.$nextTick()
423
+ const progressBar = wrapper.find('.v-progress-linear')
424
+ expect(progressBar.exists()).toBe(false)
425
+ })
426
+
427
+ it('hides no-data message while loading', async () => {
428
+ wrapper.unmount()
429
+ wrapper = mount(SyAutocomplete, {
430
+ props: {
431
+ modelValue: null,
432
+ items: [],
433
+ label: 'Test Loading No Data',
434
+ textKey: 'text',
435
+ valueKey: 'value',
436
+ loading: true,
437
+ menuId,
438
+ },
439
+ attachTo: document.body,
440
+ })
441
+
442
+ const input = wrapper.find('input')
443
+ await input.trigger('click')
444
+ await flushPromises()
445
+ await wrapper.vm.$nextTick()
446
+
447
+ // No-data item should not appear while loading
448
+ const noDataItem = document.body.querySelector(`#${menuId} .v-list-item`)
449
+ expect(noDataItem).toBeNull()
450
+ })
451
+
452
+ it('shows no-data message once loading is done and items is empty', async () => {
453
+ wrapper.unmount()
454
+ wrapper = mount(SyAutocomplete, {
455
+ props: {
456
+ modelValue: null,
457
+ items: [],
458
+ label: 'Test Loading Done',
459
+ textKey: 'text',
460
+ valueKey: 'value',
461
+ loading: false,
462
+ menuId,
463
+ },
464
+ attachTo: document.body,
465
+ })
466
+
467
+ const input = wrapper.find('input')
468
+ await input.trigger('click')
469
+ await flushPromises()
470
+ await wrapper.vm.$nextTick()
471
+
472
+ const listItems = document.body.querySelectorAll(`#${menuId} .v-list-item`)
473
+ const texts = Array.from(listItems).map(el => el.textContent?.trim())
474
+ expect(texts).toContain('Aucune option')
475
+ })
476
+ })
477
+
301
478
  it('selects and deselects items in multiple mode (mouse + keyboard)', async () => {
302
479
  wrapper.unmount()
303
480
  wrapper = mount(SyAutocomplete, {
@@ -342,4 +519,52 @@ describe('SyAutocomplete', () => {
342
519
  option0 = getOption(0)
343
520
  expect(option0?.getAttribute('aria-selected')).toBe('false')
344
521
  })
522
+
523
+ describe('hideDetails', () => {
524
+ it('hides the details zone when hideDetails is true', async () => {
525
+ wrapper.unmount()
526
+ wrapper = mount(SyAutocomplete, {
527
+ props: {
528
+ modelValue: null,
529
+ items,
530
+ label: 'Test hideDetails',
531
+ textKey: 'text',
532
+ valueKey: 'value',
533
+ hideDetails: true,
534
+ menuId,
535
+ },
536
+ attachTo: document.body,
537
+ })
538
+
539
+ await wrapper.vm.$nextTick()
540
+ expect(wrapper.find('.v-input__details').exists()).toBe(false)
541
+ })
542
+
543
+ it('shows the details zone when hideDetails is false', async () => {
544
+ await wrapper.vm.$nextTick()
545
+ expect(wrapper.find('.v-input__details').exists()).toBe(true)
546
+ })
547
+
548
+ it('does not show error messages when hideDetails is true even with validation errors', async () => {
549
+ wrapper.unmount()
550
+ wrapper = mount(SyAutocomplete, {
551
+ props: {
552
+ modelValue: null,
553
+ items,
554
+ label: 'Test hideDetails + erreur',
555
+ textKey: 'text',
556
+ valueKey: 'value',
557
+ hideDetails: true,
558
+ hasError: true,
559
+ errorMessages: ['Erreur de validation'],
560
+ menuId,
561
+ },
562
+ attachTo: document.body,
563
+ })
564
+
565
+ await wrapper.vm.$nextTick()
566
+ expect(wrapper.find('.v-input__details').exists()).toBe(false)
567
+ expect(wrapper.find('.v-messages').exists()).toBe(false)
568
+ })
569
+ })
345
570
  })
@@ -145,9 +145,19 @@ export const ariaManager = {
145
145
  popupRendered,
146
146
  },
147
147
  )
148
- const labelToApply = inputLabel || inputEl.getAttribute('aria-label') || inputEl.getAttribute('placeholder') || ''
149
- if (labelToApply) {
150
- inputEl.setAttribute('aria-label', labelToApply)
148
+ const labelledById = inputEl.getAttribute('aria-labelledby')
149
+ const labelElement = labelledById ? document.getElementById(labelledById) : null
150
+ const labelElementHasText = Boolean(labelElement?.textContent?.trim())
151
+ if (labelElementHasText) {
152
+ // aria-labelledby references a visible label — aria-label is redundant and causes validator errors
153
+ inputEl.removeAttribute('aria-label')
154
+ }
155
+ else {
156
+ // No visible label element (e.g. chips mode with label="") — use aria-label as fallback
157
+ const labelToApply = inputLabel || inputEl.getAttribute('aria-label') || inputEl.getAttribute('placeholder') || ''
158
+ if (labelToApply) {
159
+ inputEl.setAttribute('aria-label', labelToApply)
160
+ }
151
161
  }
152
162
  inputEl.setAttribute('aria-haspopup', 'listbox')
153
163
  if (!popupRendered) {
@@ -19,15 +19,9 @@ export function useSelectionLogic(
19
19
  emit: EmitFunction,
20
20
  ) {
21
21
  const resetValue = () => {
22
- if (props.multiple) {
23
- selected.value = []
24
- emit('update:modelValue', [])
25
- }
26
- else {
27
- selected.value = null
28
- search.value = ''
29
- emit('update:modelValue', null)
30
- }
22
+ selected.value = null
23
+ search.value = ''
24
+ emit('update:modelValue', null)
31
25
  }
32
26
 
33
27
  const updateMultipleSelection = (valueKeyValue: string | number, valueToStore: ItemType | string | number) => {
@@ -44,7 +38,12 @@ export function useSelectionLogic(
44
38
  arr.push(valueToStore)
45
39
  }
46
40
  selected.value = arr as SelectArray
47
- emit('update:modelValue', arr as SelectArray)
41
+ if (arr.length === 0) {
42
+ emit('update:modelValue', null)
43
+ }
44
+ else {
45
+ emit('update:modelValue', arr as SelectArray)
46
+ }
48
47
  }
49
48
 
50
49
  const updateSingleSelection = (valueToStore: SelectValue, item: ItemType) => {
@@ -3,6 +3,7 @@ import SyInputSelect from './SyInputSelect.vue'
3
3
  import { VBtn, VMenu, VList, VListItem, VListItemTitle, VForm } from 'vuetify/components'
4
4
  import { ref } from 'vue'
5
5
  import SyAlert from '../../../SyAlert/SyAlert.vue'
6
+ import { createDeprecationNotice } from '@/stories/DeprecationNotice/DeprecationNotice'
6
7
 
7
8
  const meta = {
8
9
  title: 'Composants/Formulaires/Selects/SyInputSelect',
@@ -601,16 +602,9 @@ const validateForm = () => {
601
602
  },
602
603
  }
603
604
 
604
- // depreciation notice
605
605
  export const DeprecationNotice = {
606
- render: () => ({
607
- components: { SyAlert },
608
- template: `
609
- <SyAlert type="warning" variant="tonal" :closable="false">
610
- <b>Ce composant est déprécié</b>, il ne sera plus maintenu ou mis à jour.<br/>
611
- Nous vous recommandons d'utiliser à la place le composant <a class="text-primary" href="/?path=/docs/composants-formulaires-selects-syselect--docs"><code>SySelect</code></a>.
612
- </SyAlert>
613
- `,
614
- }),
606
+ ...createDeprecationNotice([
607
+ { label: 'SySelect', url: '/?path=/docs/composants-formulaires-selects-syselect--docs' },
608
+ ]),
615
609
  tags: ['!dev'],
616
610
  }
@@ -25,7 +25,6 @@ Il est basé sur un `v-textfield`.</p>
25
25
  import { SySelect } from '@cnamts/synapse'
26
26
 
27
27
  const selectedValue = ref(undefined)
28
- import '../../../../stories/styles/shared.css';
29
28
 
30
29
  const items = [
31
30
  { text: 'Option 1', value: '1' },
@@ -116,7 +116,7 @@ type Story = StoryObj<typeof meta>
116
116
  export const Default: Story = {
117
117
  parameters: {
118
118
  a11y: {
119
- disable: true,
119
+ disable: false,
120
120
  },
121
121
  sourceCode: [
122
122
  {
@@ -189,7 +189,7 @@ export const Default: Story = {
189
189
  export const HelpText: Story = {
190
190
  parameters: {
191
191
  a11y: {
192
- disable: true,
192
+ disable: false,
193
193
  },
194
194
  sourceCode: [
195
195
  {
@@ -266,7 +266,7 @@ export const HelpText: Story = {
266
266
  export const Required: Story = {
267
267
  parameters: {
268
268
  a11y: {
269
- disable: true,
269
+ disable: false,
270
270
  },
271
271
  sourceCode: [
272
272
  {
@@ -327,7 +327,7 @@ export const Required: Story = {
327
327
  export const RequiredWithAsterisk: Story = {
328
328
  parameters: {
329
329
  a11y: {
330
- disable: true,
330
+ disable: false,
331
331
  },
332
332
  docs: {
333
333
  description: {
@@ -395,7 +395,7 @@ const items = [
395
395
  export const SlotPrepend: Story = {
396
396
  parameters: {
397
397
  a11y: {
398
- disable: true,
398
+ disable: false,
399
399
  },
400
400
  sourceCode: [
401
401
  {
@@ -462,7 +462,7 @@ export const SlotPrepend: Story = {
462
462
  export const SlotAppend: Story = {
463
463
  parameters: {
464
464
  a11y: {
465
- disable: true,
465
+ disable: false,
466
466
  },
467
467
  sourceCode: [
468
468
  {
@@ -562,7 +562,7 @@ export const WithTooltips: Story = {
562
562
  },
563
563
  parameters: {
564
564
  a11y: {
565
- disable: true,
565
+ disable: false,
566
566
  },
567
567
  docs: {
568
568
  description: {
@@ -777,7 +777,7 @@ const options = [
777
777
  export const withCustomError: Story = {
778
778
  parameters: {
779
779
  a11y: {
780
- disable: true,
780
+ disable: false,
781
781
  },
782
782
  sourceCode: [
783
783
  {
@@ -855,7 +855,7 @@ export const withCustomError: Story = {
855
855
  export const withCustomKey: Story = {
856
856
  parameters: {
857
857
  a11y: {
858
- disable: true,
858
+ disable: false,
859
859
  },
860
860
  sourceCode: [
861
861
  {
@@ -936,7 +936,7 @@ export const Info: Story = {
936
936
  export const FormValidation: Story = {
937
937
  parameters: {
938
938
  a11y: {
939
- disable: true,
939
+ disable: false,
940
940
  },
941
941
  docs: {
942
942
  description: {
@@ -414,6 +414,11 @@
414
414
  return ''
415
415
  }
416
416
 
417
+ // If inline labels are shown, return empty string to hide input text
418
+ if (hasMultipleSelections.value) {
419
+ return ''
420
+ }
421
+
417
422
  // For multiple mode, show default option text when nothing is selected
418
423
  if (props.multiple) {
419
424
  if (!selectedItem.value || (Array.isArray(selectedItem.value) && selectedItem.value.length === 0)) {
@@ -457,6 +462,10 @@
457
462
  return props.chips && props.multiple && Array.isArray(selectedItem.value) && selectedItem.value.length > 0
458
463
  })
459
464
 
465
+ const hasMultipleSelections = computed(() => {
466
+ return !props.chips && props.multiple && Array.isArray(selectedItem.value) && (selectedItem.value as unknown[]).length > 0
467
+ })
468
+
460
469
  const hasSelectionToClear = computed(() => {
461
470
  return props.multiple
462
471
  ? (((selectedItem.value as unknown[] | null | undefined)?.length) ?? 0) > 0
@@ -904,7 +913,10 @@
904
913
  <template #activator="{ props: activatorProps }">
905
914
  <div
906
915
  class="sy-select"
907
- :class="{ 'sy-select--clearable': props.clearable }"
916
+ :class="{
917
+ 'sy-select--clearable': props.clearable,
918
+ 'sy-select--with-chips': hasChips,
919
+ }"
908
920
  >
909
921
  <VTextField
910
922
  :id="inputId"
@@ -920,7 +932,7 @@
920
932
  :rules="isRequired && !props.disableErrorHandling ? ['Le champ est requis.'] : []"
921
933
  :bg-color="props.bgColor"
922
934
  :density="props.density"
923
- :active="hasChips || isOpen"
935
+ :active="hasChips || hasMultipleSelections || isOpen"
924
936
  readonly
925
937
  :hide-details="props.hideMessages && !showHelpTextAsMessage"
926
938
  :hint="showHelpTextAsMessage ? props.helpText : ''"
@@ -955,12 +967,21 @@
955
967
  size="small"
956
968
  class="ma-1"
957
969
  closable
958
- :close-label="`Supprimer ${getChipText(item)}`"
970
+ :close-label="locales.removeChip(getChipText(item))"
959
971
  @click:close="removeChip(item)"
960
972
  >
961
973
  {{ getChipText(item) }}
962
974
  </VChip>
963
975
  </div>
976
+ <template v-else-if="hasMultipleSelections">
977
+ <span
978
+ v-for="item in (selectedItem as unknown[])"
979
+ :key="props.returnObject && item ? String((item as ItemType)[props.valueKey]) : String(item)"
980
+ class="sy-select__label"
981
+ >
982
+ {{ getChipText(item) }}
983
+ </span>
984
+ </template>
964
985
  <!-- Prepend -->
965
986
  <template
966
987
  v-if="$slots.prepend || props.prependIcon || props.prependTooltip"
@@ -1048,8 +1069,21 @@
1048
1069
  <VList
1049
1070
  :id="uniqueMenuId"
1050
1071
  ref="list"
1072
+ class="v-list"
1073
+ role="listbox"
1051
1074
  :aria-label="$attrs['aria-label'] || labelWithAsterisk"
1052
1075
  :title="$attrs['aria-label'] || labelWithAsterisk"
1076
+ :style="{
1077
+ minWidth: `${textInput?.$el.offsetWidth}px`
1078
+ }"
1079
+ bg-color="white"
1080
+ tabindex="0"
1081
+ @keydown.esc.prevent="closeList"
1082
+ @keydown.tab="handleTabKey"
1083
+ @keydown.enter.prevent="handleEnterKey"
1084
+ @keydown.down.prevent="handleDownKey"
1085
+ @keydown.up.prevent="handleUpKey"
1086
+ @keydown.home.prevent="handleHomeKey"
1053
1087
  @keydown.end.prevent="handleEndKey"
1054
1088
  @keydown.page-up.prevent="handlePageUpKey"
1055
1089
  @keydown.page-down.prevent="handlePageDownKey"
@@ -1184,6 +1218,10 @@
1184
1218
  background-color: rgb(0 0 0 / 8%);
1185
1219
  }
1186
1220
 
1221
+ .v-list-item :deep(.v-list-item__overlay) {
1222
+ background-color: transparent;
1223
+ }
1224
+
1187
1225
  /* Permettre le passage à la ligne pour les textes longs dans la liste déroulante */
1188
1226
  .v-list-item-title {
1189
1227
  white-space: normal;
@@ -1210,6 +1248,11 @@
1210
1248
  opacity: var(--v-medium-emphasis-opacity) !important;
1211
1249
  }
1212
1250
 
1251
+ /* Style spécifique pour les chips */
1252
+ :deep(.v-chip .v-chip__close .v-icon__svg) {
1253
+ fill: inherit !important;
1254
+ }
1255
+
1213
1256
  .sy-select__clear-button {
1214
1257
  position: absolute;
1215
1258
  background: transparent;
@@ -1232,6 +1275,18 @@
1232
1275
  margin: 2px;
1233
1276
  }
1234
1277
 
1278
+ .sy-select__label {
1279
+ align-self: center;
1280
+ white-space: nowrap;
1281
+ flex-shrink: 0;
1282
+ font-size: inherit;
1283
+
1284
+ &:not(:last-of-type)::after {
1285
+ content: ',';
1286
+ margin-right: 4px;
1287
+ }
1288
+ }
1289
+
1235
1290
  .sy-select :deep(.v-field__input) {
1236
1291
  opacity: 1;
1237
1292
  color: tokens.$grey-darken-20 !important;
@@ -1257,4 +1312,9 @@
1257
1312
  position: absolute;
1258
1313
  white-space: nowrap;
1259
1314
  }
1315
+
1316
+ .sy-select--with-chips :deep(.v-field__input input) {
1317
+ position: absolute;
1318
+ z-index: -1;
1319
+ }
1260
1320
  </style>
@@ -61,10 +61,10 @@ export function useSySelectKeyboard(options: UseSySelectKeyboardOptions) {
61
61
  allItems.forEach((item) => {
62
62
  if (item !== element) {
63
63
  item.classList.remove('keyboard-focused')
64
+ item.setAttribute('tabindex', '-1')
64
65
  }
65
66
  })
66
67
 
67
- element.setAttribute('tabindex', '0')
68
68
  element.setAttribute('tabindex', focusListItem ? '0' : '-1')
69
69
  if (focusListItem) {
70
70
  element.focus()
@@ -1,3 +1,4 @@
1
1
  export const locales = {
2
2
  clear: 'Effacer la sélection',
3
+ removeChip: (label: string) => `Supprimer ${label}`,
3
4
  }
@@ -26,9 +26,7 @@ describe('SySelect – accessibility (axe)', () => {
26
26
 
27
27
  // Ouvrir le menu pour inclure la liste déroulante dans l’analyse axe
28
28
  const activator = wrapper.find('.sy-select')
29
- if (activator.exists()) {
30
- await activator.trigger('click')
31
- }
29
+ await activator.trigger('click')
32
30
 
33
31
  const results = await axe(document.body)
34
32
  assertNoA11yViolations(results, 'SySelect – required select with menu open', {