@cnamts/synapse 1.0.20 → 1.0.22

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 (414) hide show
  1. package/dist/{DateFilter-XURUmpMl.js → DateFilter-B5n-ZkLi.js} +29 -24
  2. package/dist/{NumberFilter-BZc0O8wV.js → NumberFilter-CtiZ9uj8.js} +1 -1
  3. package/dist/{PeriodFilter-ZNdXcl3p.js → PeriodFilter-DzqiMb-b.js} +1 -1
  4. package/dist/{SelectFilter-DshYU5OK.js → SelectFilter-BOYlF7rX.js} +1 -1
  5. package/dist/{TextFilter-D_c5dRPl.js → TextFilter-BOFRNfcX.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7399 -5967
  7. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
  8. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
  9. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
  10. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
  12. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.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 +2411 -2027
  27. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8889 -7327
  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 +8888 -7334
  31. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +951 -839
  32. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1613 -1357
  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 +1088 -847
  42. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +515 -321
  44. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +162 -0
  45. package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
  46. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
  47. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1668 -5
  48. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  49. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  50. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1609 -4
  51. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1629 -1365
  52. package/dist/components/DataList/DataList.d.ts +1 -1
  53. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3868 -3123
  54. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1946 -1562
  55. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +833 -687
  56. package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
  57. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  58. package/dist/components/DownloadBtn/config.d.ts +1 -1
  59. package/dist/components/ErrorPage/ErrorPage.d.ts +5 -12
  60. package/dist/components/ErrorPage/locales.d.ts +18 -3
  61. package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
  62. package/dist/components/FileUpload/FileUpload.d.ts +6 -4
  63. package/dist/components/FileUpload/locales.d.ts +1 -0
  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 +1 -0
  69. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -0
  70. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +3 -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/MaintenancePage/locales.d.ts +18 -2
  76. package/dist/components/NirField/NirField.d.ts +1659 -1371
  77. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  78. package/dist/components/NotFoundPage/locales.d.ts +20 -4
  79. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  80. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  81. package/dist/components/PeriodField/PeriodField.d.ts +7712 -6216
  82. package/dist/components/PhoneField/PhoneField.d.ts +831 -687
  83. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  84. package/dist/components/StatusPage/StatusPage.d.ts +50 -0
  85. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  86. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  87. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +10 -1
  88. package/dist/components/SyHeading/SyHeading.d.ts +20 -0
  89. package/dist/components/SyTextArea/SyTextArea.d.ts +476 -420
  90. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  91. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  92. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  93. package/dist/components/Tables/common/SyTablePagination.d.ts +269 -170
  94. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  95. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  96. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  97. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  98. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  99. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  100. package/dist/components/Tables/common/types.d.ts +2 -0
  101. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +35 -1212
  102. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  103. package/dist/components/index.d.ts +4 -0
  104. package/dist/components/types.d.ts +2 -0
  105. package/dist/design-system-v3.js +131 -127
  106. package/dist/design-system-v3.umd.cjs +274 -274
  107. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  108. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  109. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  110. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  111. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  112. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  113. package/dist/main-CEl4J8_T.js +37241 -0
  114. package/dist/style.css +1 -1
  115. package/dist/utils/theme/index.d.ts +6 -0
  116. package/dist/vuetifyConfig.d.ts +14 -14
  117. package/package.json +16 -7
  118. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  119. package/src/assets/apTokens.scss +53 -17
  120. package/src/assets/overrides/_icons.scss +12 -2
  121. package/src/assets/overrides/_tooltips.scss +5 -6
  122. package/src/assets/overrides/_typography.scss +17 -2
  123. package/src/assets/overrides/_utilities.scss +49 -3
  124. package/src/assets/tokens.scss +53 -17
  125. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  126. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  127. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  128. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  129. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  130. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  131. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  132. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  133. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  134. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  135. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  136. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  137. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  138. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  139. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  140. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  141. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  142. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  143. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  144. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  145. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  146. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  147. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  148. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  149. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  150. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  151. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  152. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  153. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  154. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  155. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  156. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  157. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  158. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  159. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  160. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  161. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  162. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  163. package/src/components/BackBtn/BackBtn.vue +1 -1
  164. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +36 -18
  165. package/src/components/ChipList/ChipList.vue +4 -2
  166. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  167. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  168. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  169. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  170. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  171. package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
  172. package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +67 -11
  173. package/src/components/CookieBanner/CookieBanner.stories.ts +21 -20
  174. package/src/components/CookieBanner/CookieBanner.vue +35 -10
  175. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +76 -11
  176. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +56 -4
  177. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  178. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  179. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  180. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  181. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  182. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  183. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  184. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  185. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  186. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  187. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  188. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  189. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  190. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  191. package/src/components/Customs/Selects/SySelect/SySelect.vue +17 -0
  192. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  193. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  194. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  195. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
  196. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
  197. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
  198. package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
  199. package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
  200. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
  201. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
  202. package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
  203. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +17 -28
  204. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +1 -1
  205. package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
  206. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  207. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  208. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  209. package/src/components/Customs/SyPagination/SyPagination.vue +20 -5
  210. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  211. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +38 -12
  212. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  213. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
  214. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  215. package/src/components/Customs/SyTextField/SyTextField.vue +39 -5
  216. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  217. package/src/components/DatePicker/CalendarMode/DatePicker.vue +55 -19
  218. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  219. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +44 -3
  220. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  221. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +9 -1
  222. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
  223. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
  224. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  225. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  226. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  227. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  228. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  229. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
  230. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
  231. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
  232. package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
  233. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
  234. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
  235. package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
  236. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  237. package/src/components/DialogBox/DialogBox.vue +12 -5
  238. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  239. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  240. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  241. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  242. package/src/components/DownloadBtn/config.ts +1 -1
  243. package/src/components/ErrorPage/ErrorPage.mdx +6 -16
  244. package/src/components/ErrorPage/ErrorPage.stories.ts +90 -126
  245. package/src/components/ErrorPage/ErrorPage.vue +44 -125
  246. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +83 -6
  247. package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
  248. package/src/components/ErrorPage/locales.ts +21 -3
  249. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
  250. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
  251. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +10 -266
  252. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  253. package/src/components/FileList/FileList.stories.ts +4 -0
  254. package/src/components/FileList/UploadItem/UploadItem.vue +8 -3
  255. package/src/components/FileList/UploadItem/locales.ts +10 -0
  256. package/src/components/FileList/accessibilite/Accessibility.mdx +55 -7
  257. package/src/components/FileUpload/FileUpload.vue +65 -37
  258. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  259. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  260. package/src/components/FileUpload/locales.ts +1 -0
  261. package/src/components/FileUpload/tests/FileUpload.spec.ts +14 -14
  262. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  263. package/src/components/FilterInline/FilterInline.vue +1 -0
  264. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  265. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  266. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  267. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  268. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  269. package/src/components/FooterBar/FooterBar.stories.ts +316 -48
  270. package/src/components/FooterBar/FooterBar.vue +67 -9
  271. package/src/components/FooterBar/config.ts +2 -2
  272. package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
  273. package/src/components/FooterBar/locales.ts +1 -0
  274. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  275. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  276. package/src/components/FooterBar/types.d.ts +1 -0
  277. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  278. package/src/components/HeaderBar/HeaderBar.vue +4 -0
  279. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +7 -2
  280. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  281. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  282. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  283. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  284. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  285. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -0
  286. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  287. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  288. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  289. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  290. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  291. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  292. package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
  293. package/src/components/MaintenancePage/MaintenancePage.vue +42 -7
  294. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +63 -6
  295. package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
  296. package/src/components/MaintenancePage/locales.ts +24 -3
  297. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +76 -3
  298. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +60 -2
  299. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +5 -2
  300. package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
  301. package/src/components/NotFoundPage/NotFoundPage.stories.ts +4 -4
  302. package/src/components/NotFoundPage/NotFoundPage.vue +30 -14
  303. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +80 -6
  304. package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
  305. package/src/components/NotFoundPage/locales.ts +24 -4
  306. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +217 -4
  307. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +123 -12
  308. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -2
  309. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  310. package/src/components/NotificationBar/accessibilite/Accessibility.mdx +68 -8
  311. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  312. package/src/components/PageContainer/PageContainer.vue +4 -2
  313. package/src/components/PageContainer/accessibilite/Accessibility.mdx +67 -0
  314. package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
  315. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  316. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  317. package/src/components/PeriodField/PeriodField.vue +4 -0
  318. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  319. package/src/components/PhoneField/PhoneField.stories.ts +115 -69
  320. package/src/components/PhoneField/PhoneField.vue +152 -83
  321. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  322. package/src/components/PhoneField/indicatifs.ts +2 -2
  323. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +22 -9
  324. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  325. package/src/components/SearchListField/SearchListField.vue +1 -1
  326. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  327. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  328. package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
  329. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
  330. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
  331. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +10 -2
  332. package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +63 -11
  333. package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
  334. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
  335. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
  336. package/src/components/StatusPage/StatusPage.mdx +31 -0
  337. package/src/components/StatusPage/StatusPage.stories.ts +236 -0
  338. package/src/components/StatusPage/StatusPage.vue +167 -0
  339. package/src/components/StatusPage/accessibilite/Accessibility.mdx +100 -0
  340. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +30 -0
  341. package/src/components/StatusPage/tests/StatusPage.spec.ts +53 -0
  342. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +272 -0
  343. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  344. package/src/components/SubHeader/SubHeader.vue +6 -3
  345. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  346. package/src/components/SyAlert/SyAlert.vue +21 -20
  347. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  348. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  349. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  350. package/src/components/SyHeading/SyHeading.vue +18 -0
  351. package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
  352. package/src/components/TableToolbar/TableToolbar.vue +1 -1
  353. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -35
  354. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  355. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  356. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  357. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  358. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  359. package/src/components/Tables/common/types.ts +3 -0
  360. package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
  361. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +118 -14
  362. package/src/components/UploadWorkflow/UploadWorkflow.vue +59 -31
  363. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  364. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  365. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +37 -7
  366. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +139 -112
  367. package/src/components/UploadWorkflow/useFileList.ts +7 -0
  368. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  369. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  370. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  371. package/src/components/index.ts +4 -0
  372. package/src/components/types.ts +4 -0
  373. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  374. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  375. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  376. package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
  377. package/src/composables/rules/useFieldValidation.ts +24 -9
  378. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  379. package/src/composables/useFilterable/useFilterable.ts +7 -1
  380. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  381. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  382. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  383. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  384. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  385. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  386. package/src/directives/rgaaSvgFix.ts +2 -7
  387. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  388. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  389. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  390. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  392. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
  393. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  394. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  395. package/src/stories/DesignTokens/Colors.mdx +8 -59
  396. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  397. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  398. package/src/utils/theme/index.ts +19 -0
  399. package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
  400. package/dist/components/MaintenancePage/index.d.ts +0 -2
  401. package/dist/main-CuI6xaPq.js +0 -36396
  402. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
  403. package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
  404. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
  405. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
  406. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
  407. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
  408. package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
  409. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
  410. package/src/components/MaintenancePage/index.ts +0 -3
  411. package/src/components/PageContainer/Accessibilite/Accessibility.mdx +0 -53
  412. package/src/components/PageContainer/Accessibilite/AccessibilityGuide.mdx +0 -0
  413. package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
  414. /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
@@ -6,6 +6,7 @@ describe('SyPagination', () => {
6
6
  it('renders correctly with default props', () => {
7
7
  const wrapper = mount(SyPagination, {
8
8
  props: {
9
+ headingLevel: 2,
9
10
  modelValue: 1,
10
11
  pages: 10,
11
12
  },
@@ -20,6 +21,7 @@ describe('SyPagination', () => {
20
21
  it('does not render pagination if pages is 1', () => {
21
22
  const wrapper = mount(SyPagination, {
22
23
  props: {
24
+ headingLevel: 2,
23
25
  modelValue: 1,
24
26
  pages: 1,
25
27
  },
@@ -31,6 +33,7 @@ describe('SyPagination', () => {
31
33
  it('emits update:modelValue when page is changed', async () => {
32
34
  const wrapper = mount(SyPagination, {
33
35
  props: {
36
+ headingLevel: 2,
34
37
  modelValue: 1,
35
38
  pages: 10,
36
39
  },
@@ -58,6 +61,7 @@ describe('SyPagination', () => {
58
61
  it('disables previous button on first page', () => {
59
62
  const wrapper = mount(SyPagination, {
60
63
  props: {
64
+ headingLevel: 2,
61
65
  modelValue: 1,
62
66
  pages: 10,
63
67
  },
@@ -70,6 +74,7 @@ describe('SyPagination', () => {
70
74
  it('disables next button on last page', () => {
71
75
  const wrapper = mount(SyPagination, {
72
76
  props: {
77
+ headingLevel: 2,
73
78
  modelValue: 10,
74
79
  pages: 10,
75
80
  },
@@ -82,6 +87,7 @@ describe('SyPagination', () => {
82
87
  it('shows correct aria-current attribute', () => {
83
88
  const wrapper = mount(SyPagination, {
84
89
  props: {
90
+ headingLevel: 2,
85
91
  modelValue: 3,
86
92
  pages: 10,
87
93
  },
@@ -94,6 +100,7 @@ describe('SyPagination', () => {
94
100
  it('respects visible prop for number of visible pages', () => {
95
101
  const wrapper = mount(SyPagination, {
96
102
  props: {
103
+ headingLevel: 2,
97
104
  modelValue: 5,
98
105
  pages: 10,
99
106
  visible: 3,
@@ -113,6 +120,7 @@ describe('SyPagination', () => {
113
120
  it('uses custom label when provided', () => {
114
121
  const wrapper = mount(SyPagination, {
115
122
  props: {
123
+ headingLevel: 2,
116
124
  modelValue: 1,
117
125
  pages: 10,
118
126
  label: 'Test Pagination',
@@ -125,6 +133,7 @@ describe('SyPagination', () => {
125
133
  it('sets aria-controls when provided', () => {
126
134
  const wrapper = mount(SyPagination, {
127
135
  props: {
136
+ headingLevel: 2,
128
137
  modelValue: 1,
129
138
  pages: 10,
130
139
  ariaControls: 'test-content',
@@ -137,6 +146,7 @@ describe('SyPagination', () => {
137
146
  it('uses d-sr-only class for screen reader text', () => {
138
147
  const wrapper = mount(SyPagination, {
139
148
  props: {
149
+ headingLevel: 2,
140
150
  modelValue: 1,
141
151
  pages: 10,
142
152
  },
@@ -149,6 +159,7 @@ describe('SyPagination', () => {
149
159
  it('shows start ellipsis when current page is far from first page', () => {
150
160
  const wrapper = mount(SyPagination, {
151
161
  props: {
162
+ headingLevel: 2,
152
163
  modelValue: 8, // Current page far from first page
153
164
  pages: 10,
154
165
  visible: 3, // Small visible count to ensure ellipsis appears
@@ -163,6 +174,7 @@ describe('SyPagination', () => {
163
174
  it('shows both ellipses when current page is in the middle of a large range', () => {
164
175
  const wrapper = mount(SyPagination, {
165
176
  props: {
177
+ headingLevel: 2,
166
178
  modelValue: 10, // Middle page
167
179
  pages: 20,
168
180
  visible: 3, // Small visible count to ensure ellipsis appears
@@ -1,6 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
 
3
- import { computed, nextTick, onMounted, ref, watch } from 'vue'
3
+ import { computed, nextTick, onMounted, onUpdated, ref, watch } from 'vue'
4
+ import type { VRadioGroup } from 'vuetify/components'
4
5
  import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
5
6
  import { useValidatable } from '@/composables/validation/useValidatable'
6
7
  import { locales } from './locales'
@@ -61,6 +62,7 @@
61
62
  )
62
63
 
63
64
  const emit = defineEmits(['update:modelValue', 'change'])
65
+ const radioGroupRef = ref<VRadioGroup | null>(null)
64
66
  const model = computed({
65
67
  get() {
66
68
  return props.modelValue
@@ -139,24 +141,10 @@
139
141
 
140
142
  watch(model, (newValue) => {
141
143
  if (!props.isValidateOnBlur) {
142
- // Si le formulaire a été soumis et que la valeur change, on valide à nouveau
143
- if (isSubmitted.value) {
144
- const isValid = validateField(newValue)
145
- if (isValid) {
146
- // La validation a réussi, effacer les erreurs
147
- validation.clearValidation()
148
- }
149
- }
150
- else {
151
- // Comportement normal (hors soumission)
152
- const isValid = validateField(newValue)
153
- // Si la validation réussit, s'assurer que les erreurs sont effacées
154
- if (isValid && validation.hasError.value) {
155
- validation.clearValidation()
156
- }
157
- }
144
+ validateField(newValue)
158
145
  }
159
146
  })
147
+
160
148
  const hasError = computed(() => validation.hasError.value)
161
149
  const hasWarning = computed(() => validation.hasWarning.value)
162
150
  const hasSuccess = computed(() => validation.hasSuccess.value)
@@ -184,36 +172,16 @@
184
172
 
185
173
  const removeAriaAttributesForRadio = () => {
186
174
  nextTick(() => {
187
- // Pour aria-disabled sur les radios
188
- const radioInputsDisabled = document.querySelectorAll(
189
- 'input[type="radio"][aria-disabled="false"]',
190
- )
191
- radioInputsDisabled.forEach((input) => {
192
- input.removeAttribute('aria-disabled')
193
- })
194
-
195
- // Observer les futurs changements
196
- const observer = new MutationObserver((mutations) => {
197
- mutations.forEach(() => {
198
- const newRadioInputsDisabled = document.querySelectorAll(
199
- 'input[type="radio"][aria-disabled="false"]',
200
- )
201
- newRadioInputsDisabled.forEach((input) => {
202
- input.removeAttribute('aria-disabled')
203
- })
175
+ if (radioGroupRef.value) {
176
+ const radioInputs = radioGroupRef.value.$el.querySelectorAll('input[type="radio"][aria-disabled="false"]')
177
+ radioInputs.forEach((input: Element) => {
178
+ input.removeAttribute('aria-disabled')
204
179
  })
205
- })
206
-
207
- observer.observe(document.body, {
208
- subtree: true,
209
- childList: true,
210
- attributes: true,
211
- attributeFilter: ['aria-disabled'],
212
- })
180
+ }
213
181
  })
214
182
  }
215
183
 
216
- // Appliquer la correction lors du montage du composant
184
+ // Appliquer la correction lors du montage et de la mise à jour du composant
217
185
  onMounted(() => {
218
186
  removeAriaAttributesForRadio()
219
187
  if (!props.isValidateOnBlur && !props.required) {
@@ -221,6 +189,10 @@
221
189
  }
222
190
  })
223
191
 
192
+ onUpdated(() => {
193
+ removeAriaAttributesForRadio()
194
+ })
195
+
224
196
  // Intégration avec le système de validation du formulaire
225
197
  useValidatable(validateOnSubmit)
226
198
 
@@ -235,6 +207,7 @@
235
207
  <template>
236
208
  <v-radio-group
237
209
  :id="props.id"
210
+ ref="radioGroupRef"
238
211
  v-model="model"
239
212
  :class="{
240
213
  'warning-field': hasWarning && !hasError,
@@ -185,6 +185,10 @@ const meta = {
185
185
  description: 'Texte d\'aide affiché sous le champ',
186
186
  control: 'text',
187
187
  },
188
+ 'maxlength': {
189
+ description: 'Nombre maximal de caractères autorisés dans le champ',
190
+ control: { type: 'text' },
191
+ },
188
192
  'loading': {
189
193
  description: 'Affiche un indicateur de chargement',
190
194
  control: 'boolean',
@@ -90,6 +90,8 @@
90
90
  disableClickButton?: boolean
91
91
  autocomplete?: string
92
92
  helpText?: string
93
+ maxlength?: string | number
94
+ title?: string | false
93
95
  }>(),
94
96
  {
95
97
  modelValue: undefined,
@@ -159,6 +161,8 @@
159
161
  disableClickButton: true,
160
162
  autocomplete: 'off',
161
163
  helpText: '',
164
+ maxlength: undefined,
165
+ title: undefined,
162
166
  },
163
167
  )
164
168
 
@@ -173,6 +177,8 @@
173
177
 
174
178
  const emit = defineEmits([
175
179
  'update:modelValue',
180
+ 'input',
181
+ 'keydown',
176
182
  'clear',
177
183
  'prepend-icon-click',
178
184
  'append-icon-click',
@@ -197,6 +203,11 @@
197
203
  Object.entries(attrs).filter(([key]) => key !== 'display-asterisk'),
198
204
  ) as Record<string, unknown>
199
205
 
206
+ // aria-controls coming from menu activators is invalid on the input itself; drop it
207
+ if ('aria-controls' in filteredAttrs) {
208
+ delete filteredAttrs['aria-controls']
209
+ }
210
+
200
211
  if (!('validate-on' in filteredAttrs) && 'rules' in filteredAttrs && props.isValidateOnBlur) {
201
212
  filteredAttrs['validate-on'] = 'blur lazy'
202
213
  }
@@ -300,7 +311,11 @@
300
311
  }
301
312
  })
302
313
 
303
- const hasError = computed(() => validation.hasError.value || props.hasError)
314
+ const hasError = computed(() =>
315
+ validation.hasError.value
316
+ || (props.errorMessages?.length ?? 0) > 0
317
+ || props.hasError,
318
+ )
304
319
  const hasWarning = computed(() => validation.hasWarning.value || props.hasWarning)
305
320
  const hasSuccess = computed(() => ((validation.hasSuccess.value && !hasError.value && !hasWarning.value) || props.hasSuccess) && props.showSuccessMessages)
306
321
 
@@ -355,7 +370,13 @@
355
370
  return props.helpText && hasMessages.value && !props.areDetailsHidden
356
371
  })
357
372
 
358
- // Accessible label that includes prefix and suffix content for screen readers
373
+ // Use title prop if provided, otherwise fall back to accessible label
374
+ const titleValue = computed(() => {
375
+ // If title is explicitly false, don't show any title
376
+ if (props.title === false) return undefined
377
+ // Otherwise use title if provided, or accessibleLabel as fallback
378
+ return props.title || accessibleLabel.value
379
+ })
359
380
  const accessibleLabel = computed(() => {
360
381
  let label = labelWithAsterisk.value
361
382
 
@@ -449,7 +470,12 @@
449
470
  const describedbyIds = existingIds.join(' ').trim()
450
471
 
451
472
  // Associate input with messages via aria-describedby (preserve existing IDs)
452
- inputElement.setAttribute('aria-describedby', describedbyIds)
473
+ if (describedbyIds) {
474
+ inputElement.setAttribute('aria-describedby', describedbyIds)
475
+ }
476
+ else {
477
+ inputElement.removeAttribute('aria-describedby')
478
+ }
453
479
 
454
480
  // Remove problematic ARIA attributes from details container (parent)
455
481
  if (detailsContainer) {
@@ -517,7 +543,12 @@
517
543
  const describedbyIds = existingIds.join(' ').trim()
518
544
 
519
545
  // Associate input with messages via aria-describedby (preserve existing IDs)
520
- inputElement.setAttribute('aria-describedby', describedbyIds)
546
+ if (describedbyIds) {
547
+ inputElement.setAttribute('aria-describedby', describedbyIds)
548
+ }
549
+ else {
550
+ inputElement.removeAttribute('aria-describedby')
551
+ }
521
552
 
522
553
  // Remove problematic ARIA attributes from details container (parent)
523
554
  if (detailsContainer) {
@@ -579,7 +610,7 @@
579
610
  v-model="model"
580
611
  :autocomplete="props.autocomplete"
581
612
  :active="props.isActive"
582
- :title="accessibleLabel"
613
+ :title="titleValue"
583
614
  :aria-label="accessibleLabel"
584
615
  :aria-required="props.required ? 'true' : undefined"
585
616
  :base-color="props.baseColor"
@@ -600,6 +631,7 @@
600
631
  :hint="showHelpTextAsMessage ? props.helpText : props.hint"
601
632
  :label="labelWithAsterisk"
602
633
  :loading="props.loading"
634
+ :maxlength="props.maxlength"
603
635
  :max-errors="props.maxErrors"
604
636
  :max-width="props.maxWidth"
605
637
  :messages="hasError ? errors : (hasWarning ? warnings : (hasSuccess && props.showSuccessMessages ? successes : []))"
@@ -630,6 +662,8 @@
630
662
  'basic-field': !hasError && !hasWarning && !hasSuccess
631
663
  }"
632
664
  @blur="checkErrorOnBlur"
665
+ @input="(e: Event) => emit('input', e)"
666
+ @keydown="(e: KeyboardEvent) => emit('keydown', e)"
633
667
  >
634
668
  <!-- Prepend -->
635
669
  <template
@@ -38,6 +38,10 @@ const meta = {
38
38
  },
39
39
  },
40
40
  argTypes: {
41
+ 'headingLevel': {
42
+ control: { type: 'select' },
43
+ options: [1, 2, 3, 4, 5, 6],
44
+ },
41
45
  'onUpdate:modelValue': {
42
46
  description: 'Émis lorsque la valeur du champ est mise à jour',
43
47
  table: {
@@ -345,6 +349,7 @@ export const Default: Story = {
345
349
  ],
346
350
  },
347
351
  args: {
352
+ 'headingLevel': 3,
348
353
  'placeholder': 'Sélectionner une date',
349
354
  'format': 'DD/MM/YYYY',
350
355
  'isBirthDate': false,
@@ -417,6 +422,7 @@ export const Required: Story = {
417
422
  ],
418
423
  },
419
424
  args: {
425
+ 'headingLevel': 3,
420
426
  'placeholder': 'Sélectionner une date',
421
427
  'format': 'DD/MM/YYYY',
422
428
  'isBirthDate': false,
@@ -489,6 +495,7 @@ export const DateRange: Story = {
489
495
  ],
490
496
  },
491
497
  args: {
498
+ 'headingLevel': 3,
492
499
  'placeholder': 'Sélectionner une période',
493
500
  'label': 'Sélectionner une période',
494
501
  'format': 'DD/MM/YYYY',
@@ -575,6 +582,7 @@ export const WithCustomPeriod: Story = {
575
582
  ],
576
583
  },
577
584
  args: {
585
+ 'headingLevel': 3,
578
586
  'placeholder': 'Sélectionner une date',
579
587
  'format': 'DD/MM/YYYY',
580
588
  'isBirthDate': false,
@@ -671,6 +679,7 @@ export const WithAppendIcon: Story = {
671
679
  ],
672
680
  },
673
681
  args: {
682
+ 'headingLevel': 3,
674
683
  'placeholder': 'Sélectionner une date',
675
684
  'format': 'DD/MM/YYYY',
676
685
  'dateFormatReturn': '',
@@ -738,6 +747,7 @@ export const WithoutIcon: Story = {
738
747
  ],
739
748
  },
740
749
  args: {
750
+ 'headingLevel': 3,
741
751
  'placeholder': 'Sélectionner une date',
742
752
  'format': 'DD/MM/YYYY',
743
753
  'dateFormatReturn': '',
@@ -805,6 +815,7 @@ export const BirthDate: Story = {
805
815
  ],
806
816
  },
807
817
  args: {
818
+ 'headingLevel': 3,
808
819
  'placeholder': 'Date de naissance',
809
820
  'format': 'DD/MM/YYYY',
810
821
  'dateFormatReturn': '',
@@ -873,6 +884,7 @@ export const WithError: Story = {
873
884
  ],
874
885
  },
875
886
  args: {
887
+ 'headingLevel': 3,
876
888
  'placeholder': 'Sélectionner une date',
877
889
  'format': 'DD/MM/YYYY',
878
890
  'dateFormatReturn': '',
@@ -948,6 +960,7 @@ export const WithWarning: Story = {
948
960
  ],
949
961
  },
950
962
  args: {
963
+ 'headingLevel': 3,
951
964
  'placeholder': 'Date avec avertissement',
952
965
  'format': 'DD/MM/YYYY',
953
966
  'dateFormatReturn': '',
@@ -1026,6 +1039,7 @@ export const WithSuccess: Story = {
1026
1039
  ],
1027
1040
  },
1028
1041
  args: {
1042
+ 'headingLevel': 3,
1029
1043
  'placeholder': 'Date valide',
1030
1044
  'format': 'DD/MM/YYYY',
1031
1045
  'dateFormatReturn': '',
@@ -1222,6 +1236,7 @@ export const WithDateFormatReturn: Story = {
1222
1236
  ],
1223
1237
  },
1224
1238
  args: {
1239
+ 'headingLevel': 3,
1225
1240
  'placeholder': 'Sélectionner une date',
1226
1241
  'format': 'DD/MM/YYYY',
1227
1242
  'dateFormatReturn': '',
@@ -1333,6 +1348,7 @@ export const WithDayjsFormat: Story = {
1333
1348
  ],
1334
1349
  },
1335
1350
  args: {
1351
+ headingLevel: 3,
1336
1352
  placeholder: 'Sélectionner une date',
1337
1353
  format: 'DD/MM/YYYY',
1338
1354
  isBirthDate: false,
@@ -1465,6 +1481,7 @@ export const UTC: Story = {
1465
1481
  ],
1466
1482
  },
1467
1483
  args: {
1484
+ 'headingLevel': 3,
1468
1485
  'placeholder': 'Sélectionner une date',
1469
1486
  'format': 'DD/MM/YYYY',
1470
1487
  'dateFormatReturn': '',
@@ -1496,12 +1513,20 @@ export const UTC: Story = {
1496
1513
 
1497
1514
  const dateString = computed({
1498
1515
  get() {
1499
- return dayjs.utc(utcIso.value).tz(selectedTimeZone.value).format(DISPLAY_FORMAT.value)
1516
+ return dayjs.utc(utcIso.value).format(DISPLAY_FORMAT.value)
1500
1517
  },
1501
1518
  set(v: string) {
1502
- const parsed = dayjs.tz(v, DISPLAY_FORMAT.value, selectedTimeZone.value)
1519
+ const parsed = dayjs.utc(v, DISPLAY_FORMAT.value, true)
1503
1520
  if (!parsed.isValid() || parsed.format(DISPLAY_FORMAT.value) !== v) return
1504
- utcIso.value = parsed.utc().toISOString()
1521
+ utcIso.value = dayjs.utc()
1522
+ .year(parsed.year())
1523
+ .month(parsed.month())
1524
+ .date(parsed.date())
1525
+ .hour(0)
1526
+ .minute(0)
1527
+ .second(0)
1528
+ .millisecond(0)
1529
+ .toISOString()
1505
1530
  args['onUpdate:modelValue']?.(v)
1506
1531
  },
1507
1532
  })
@@ -16,6 +16,7 @@
16
16
  import { mdiCalendarMonthOutline } from '@mdi/js'
17
17
  import type { DateObjectValue } from '../types'
18
18
  import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
19
+ import SyHeading from '@/components/SyHeading/SyHeading.vue'
19
20
 
20
21
  // Initialiser les plugins dayjs
21
22
  dayjs.extend(customParseFormat)
@@ -74,6 +75,8 @@
74
75
  isValidateOnBlur?: boolean
75
76
  hint?: string
76
77
  persistentHint?: boolean
78
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6
79
+
77
80
  }>(), {
78
81
  modelValue: undefined,
79
82
  placeholder: undefined,
@@ -112,6 +115,7 @@
112
115
  isValidateOnBlur: true,
113
116
  hint: undefined,
114
117
  persistentHint: false,
118
+ headingLevel: 3,
115
119
  })
116
120
 
117
121
  // La compatibilité entre isBirthDate et birthDate est gérée directement dans l'appel au composable
@@ -188,16 +192,39 @@
188
192
  warningRules: props.customWarningRules,
189
193
  disableErrorHandling: props.disableErrorHandling,
190
194
  })
191
- const { errors, warnings, successes, validateField, clearValidation } = !props.readonly
192
- ? validation
193
- : {
194
- errors: ref<string[]>([]),
195
- warnings: ref<string[]>([]),
196
- successes: ref<string[]>([]),
197
- validateField: () => {},
198
- clearValidation: () => {},
195
+ const { errors, warnings, successes, validateField: baseValidateField, clearValidation: baseClearValidation } = validation
196
+
197
+ const clearValidation = () => baseClearValidation()
198
+
199
+ watch(() => props.readonly, () => {
200
+ // When toggling readonly, reset validation state to avoid stale success/errors
201
+ errors.value = []
202
+ warnings.value = []
203
+ successes.value = []
204
+ })
205
+
206
+ const validateField = (
207
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- compat signature with useDateValidation
208
+ value: any,
209
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- compat signature with useDateValidation
210
+ rules: any[] = [],
211
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- compat signature with useDateValidation
212
+ warningRules: any[] = [],
213
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- compat signature with useDateValidation
214
+ successRules: any[] = [],
215
+ ): ValidationResult => {
216
+ if (props.readonly) {
217
+ return {
218
+ hasError: false,
219
+ hasWarning: false,
220
+ hasSuccess: false,
221
+ state: { errors: [], warnings: [], successes: [] },
222
+ }
199
223
  }
200
224
 
225
+ return baseValidateField(value, rules, warningRules, successRules) as ValidationResult
226
+ }
227
+
201
228
  const validateFieldForDateValidation = (
202
229
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- compat signature with useDateValidation
203
230
  value: any,
@@ -580,10 +607,11 @@
580
607
  }
581
608
 
582
609
  // Valider les dates au montage, mais sans afficher d'erreur pour le required
583
- // Forcer la validation si il y a des custom rules et que le champ est rempli
584
- const hasCustomRules = props.customRules && props.customRules.length > 0
610
+ // Forcer la validation si il y a des règles (erreur ou warning) et que le champ est rempli
611
+ const hasValidationRules = (props.customRules && props.customRules.length > 0)
612
+ || (props.customWarningRules && props.customWarningRules.length > 0)
585
613
  const hasValue = selectedDates.value !== null && selectedDates.value !== undefined
586
- validateDates(hasCustomRules && hasValue)
614
+ validateDates(hasValidationRules && hasValue)
587
615
 
588
616
  // Après la validation initiale, désactiver le flag
589
617
  nextTick(() => {
@@ -756,8 +784,8 @@
756
784
  textInputValue.value = ''
757
785
  }
758
786
  else if (Array.isArray(newValue) && props.displayRange) {
759
- // Pour les plages de dates, on ne modifie pas directement textInputValue
760
- // car le DateTextInput gère son propre formatage
787
+ // Pour les plages de dates, on ne modifie pas directement textInputValue
788
+ // car le DateTextInput gère son propre formatage
761
789
  }
762
790
  else if (typeof newValue === 'string') {
763
791
  // Pour une date unique
@@ -856,9 +884,7 @@
856
884
  </script>
857
885
 
858
886
  <template>
859
- <div
860
- class="date-picker-container"
861
- >
887
+ <div class="date-picker-container">
862
888
  <template v-if="props.noCalendar">
863
889
  <DateTextInput
864
890
  ref="dateTextInputRef"
@@ -901,6 +927,7 @@
901
927
  <template v-else-if="props.useCombinedMode">
902
928
  <ComplexDatePicker
903
929
  ref="complexDatePickerRef"
930
+ :heading-level="headingLevel"
904
931
  :model-value="props.modelValue"
905
932
  :format="props.format"
906
933
  :date-format-return="props.dateFormatReturn"
@@ -998,6 +1025,7 @@
998
1025
  ref="datePickerRef"
999
1026
  v-model="selectedDates"
1000
1027
  color="primary"
1028
+ control-variant="modal"
1001
1029
  :first-day-of-week="1"
1002
1030
  :multiple="props.displayRange ? 'range' : false"
1003
1031
  :show-adjacent-months="true"
@@ -1019,9 +1047,12 @@
1019
1047
  Sélectionnez une date
1020
1048
  </template>
1021
1049
  <template #header>
1022
- <h3 class="mx-auto my-auto ml-5 mb-4">
1050
+ <SyHeading
1051
+ class="mx-auto my-auto ml-5 mb-4"
1052
+ :level="headingLevel"
1053
+ >
1023
1054
  {{ selectedDates ? displayedDateString : headerDate }}
1024
- </h3>
1055
+ </SyHeading>
1025
1056
  </template>
1026
1057
  <template
1027
1058
  v-if="props.displayTodayButton"
@@ -1186,7 +1217,7 @@
1186
1217
  }
1187
1218
 
1188
1219
  :deep(.v-date-picker-month__day--selected .v-btn:hover) {
1189
- background-color: tokens.$colors-background-accent-contrasted !important;
1220
+ background-color: tokens.$colors-background-accent-primary-contrasted !important;
1190
1221
  }
1191
1222
 
1192
1223
  .fade-enter-active,
@@ -1251,6 +1282,10 @@
1251
1282
  }
1252
1283
  }
1253
1284
 
1285
+ :deep(.v-date-picker-months) {
1286
+ flex: 1;
1287
+ }
1288
+
1254
1289
  :deep(.v-date-picker-months .v-btn__content) {
1255
1290
  font-size: 1rem;
1256
1291
  }
@@ -1279,4 +1314,5 @@
1279
1314
  :deep(.v-picker__body .v-btn--active .v-btn__overlay) {
1280
1315
  opacity: 0;
1281
1316
  }
1317
+
1282
1318
  </style>
@@ -77,8 +77,12 @@ describe('DatePicker', () => {
77
77
  expect(result.length).toBe(2)
78
78
  expect(result[0]).toBeInstanceOf(Date)
79
79
  expect(result[1]).toBeInstanceOf(Date)
80
- expect(result[0]?.toISOString().split('T')[0]).toBe('2023-01-01')
81
- expect(result[1]?.toISOString().split('T')[0]).toBe('2023-01-05')
80
+ expect(result[0]?.getFullYear()).toBe(2023)
81
+ expect(result[0]?.getMonth()).toBe(0)
82
+ expect(result[0]?.getDate()).toBe(1)
83
+ expect(result[1]?.getFullYear()).toBe(2023)
84
+ expect(result[1]?.getMonth()).toBe(0)
85
+ expect(result[1]?.getDate()).toBe(5)
82
86
  })
83
87
 
84
88
  it('initializeSelectedDates returns an empty array for invalid range inputs', () => {
@@ -106,7 +110,9 @@ describe('DatePicker', () => {
106
110
  if (!(result instanceof Date)) {
107
111
  throw new Error('Expected initializeSelectedDates to return a Date for a single valid date')
108
112
  }
109
- expect(result.toISOString().split('T')[0]).toBe('2023-01-01')
113
+ expect(result.getFullYear()).toBe(2023)
114
+ expect(result.getMonth()).toBe(0)
115
+ expect(result.getDate()).toBe(1)
110
116
  })
111
117
 
112
118
  it('initializeSelectedDates returns an empty array when start date is after end date', () => {