@cnamts/synapse 1.0.22 → 1.0.24

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 (426) hide show
  1. package/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
  2. package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
  3. package/dist/{DateFilter-B5n-ZkLi.js → DateFilter-BpwFexzi.js} +1 -1
  4. package/dist/DateFilter-DTUl8hb1.cjs +1 -0
  5. package/dist/{NumberFilter-CtiZ9uj8.js → NumberFilter-Bz_NTdX9.js} +3 -3
  6. package/dist/NumberFilter-MAEojdk0.cjs +1 -0
  7. package/dist/PeriodFilter-CC4WgIhl.cjs +1 -0
  8. package/dist/{PeriodFilter-DzqiMb-b.js → PeriodFilter-DX_wy9g-.js} +1 -1
  9. package/dist/SelectFilter-BR3fvl-a.cjs +1 -0
  10. package/dist/SelectFilter-xqiPtPgX.js +135 -0
  11. package/dist/{TextFilter-BOFRNfcX.js → TextFilter-BBl3JFqK.js} +7 -7
  12. package/dist/TextFilter-CCfYFl5F.cjs +1 -0
  13. package/dist/apLightTheme-CFSRrjv2.cjs +1 -0
  14. package/dist/apLightTheme-D1P4jcD0.js +1231 -0
  15. package/dist/components/Accordion/Accordion.d.ts +13 -2
  16. package/dist/components/Accordion/composables/useAccordionState.d.ts +2 -1
  17. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  18. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  19. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
  20. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  23. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +61 -61
  24. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  25. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  26. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7506 -10100
  27. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +22 -22
  28. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +42 -42
  29. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  30. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  31. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +130 -147
  32. package/dist/components/Customs/Selects/SyAutocomplete/locales.d.ts +5 -0
  33. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +6 -6
  34. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +13 -17
  35. package/dist/components/Customs/Selects/SySelect/locales.d.ts +1 -0
  36. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +9 -9
  37. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +29 -507
  38. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +29 -507
  39. package/dist/components/Customs/SyTextField/SyTextField.d.ts +64 -81
  40. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +640 -780
  41. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +322 -407
  42. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +114 -156
  43. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  44. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  45. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  46. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  47. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  48. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  49. package/dist/components/ErrorPage/ErrorPage.d.ts +3 -1
  50. package/dist/components/FileList/UploadItem/UploadItem.d.ts +6 -0
  51. package/dist/components/FileList/UploadItem/locales.d.ts +1 -4
  52. package/dist/components/FileUpload/FileUploadContent.d.ts +2 -0
  53. package/dist/components/FileUpload/validateFiles.d.ts +2 -1
  54. package/dist/components/HeaderBar/HeaderBar.d.ts +2 -1
  55. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +2 -1
  56. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +6 -5
  57. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  58. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  59. package/dist/components/MonthPicker/MonthPicker.d.ts +1903 -0
  60. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +1863 -0
  61. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +21 -0
  62. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.d.ts +21 -0
  63. package/dist/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.d.ts +12 -0
  64. package/dist/components/MonthPicker/MonthPickerVisual/MonthSelector.d.ts +11 -0
  65. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.d.ts +6 -0
  66. package/dist/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.d.ts +14 -0
  67. package/dist/components/MonthPicker/MonthPickerVisual/YearSelector.d.ts +14 -0
  68. package/dist/components/MonthPicker/MonthPickerVisual/useMonthGrid.d.ts +9 -0
  69. package/dist/components/MonthPicker/MonthPickerVisual/useYearGrid.d.ts +8 -0
  70. package/dist/components/MonthPicker/MonthPickerVisual/utils.d.ts +8 -0
  71. package/dist/components/MonthPicker/locales.d.ts +12 -0
  72. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +25 -0
  73. package/dist/components/NirField/NirField.d.ts +209 -271
  74. package/dist/components/NirField/locales.d.ts +10 -10
  75. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  76. package/dist/components/NotificationBar/Notification/Notification.d.ts +3 -0
  77. package/dist/components/PasswordField/PasswordField.d.ts +9 -10
  78. package/dist/components/PeriodField/PeriodField.d.ts +1379 -1659
  79. package/dist/components/PhoneField/PhoneField.d.ts +90 -125
  80. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  81. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +1 -1
  82. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +1 -0
  83. package/dist/components/SyHeading/SyHeading.d.ts +4 -2
  84. package/dist/components/SyHeading/SyHeading.test.d.ts +1 -0
  85. package/dist/components/SyTextArea/SyTextArea.d.ts +35 -15
  86. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  87. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +11 -8
  88. package/dist/components/Tables/SyTable/SyTable.d.ts +11 -8
  89. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  90. package/dist/components/Tables/common/SyTablePagination.d.ts +21 -23
  91. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  92. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  93. package/dist/components/Tables/common/types.d.ts +19 -3
  94. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  95. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  96. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  97. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  98. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  99. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
  100. package/dist/components/index.d.ts +1 -0
  101. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  102. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  103. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  104. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  105. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  106. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  107. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  108. package/dist/composables/validation/useValidation.d.ts +15 -9
  109. package/dist/design-system-v3.d.ts +2 -0
  110. package/dist/design-system-v3.js +196 -194
  111. package/dist/design-system-v3.umd.cjs +1 -1066
  112. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +5 -0
  113. package/dist/{main-CEl4J8_T.js → main-BtTqyn4z.js} +16983 -15576
  114. package/dist/main-C1e3eoxd.cjs +1067 -0
  115. package/dist/synapse.css +1 -0
  116. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  117. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  118. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  119. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  120. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  121. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  122. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  123. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  124. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  125. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  126. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  127. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  128. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  129. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  130. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  131. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  132. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  133. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  134. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  135. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  136. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  137. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  138. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  139. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  140. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  141. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  142. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  143. package/dist/tooth-44-CazyQucj.cjs +1 -0
  144. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  145. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  146. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  147. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  148. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  149. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  150. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  151. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  152. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  153. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  154. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  155. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  156. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  157. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  158. package/dist/tooth-71-D473PPO5.cjs +1 -0
  159. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  160. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  161. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  162. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  163. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  164. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  165. package/dist/tooth-83-KV010j64.cjs +1 -0
  166. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  167. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  168. package/dist/vuetifyConfig.js +561 -0
  169. package/dist/vuetifyConfig.umd.cjs +1 -0
  170. package/package.json +18 -6
  171. package/src/assets/apTokens.scss +2 -2
  172. package/src/assets/overrides/_btns.scss +2 -0
  173. package/src/assets/overrides/_forms.scss +9 -0
  174. package/src/assets/overrides/_icons.scss +41 -4
  175. package/src/assets/overrides/_tables.scss +19 -0
  176. package/src/assets/overrides/_typography.scss +0 -10
  177. package/src/components/Accordion/Accordion.mdx +23 -9
  178. package/src/components/Accordion/Accordion.stories.ts +153 -3
  179. package/src/components/Accordion/Accordion.vue +7 -6
  180. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +40 -12
  181. package/src/components/Accordion/composables/useAccordionState.ts +3 -4
  182. package/src/components/Accordion/tests/accordion.spec.ts +131 -19
  183. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  184. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  185. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.mdx +3 -1
  186. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.stories.ts +8 -0
  187. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  188. package/src/components/BackBtn/accessibilite/Accessibility.mdx +62 -10
  189. package/src/components/BackToTopBtn/BackToTopBtn.stories.ts +9 -3
  190. package/src/components/BackToTopBtn/accessibilite/Accessibility.mdx +86 -6
  191. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  192. package/src/components/Captcha/tests/Captcha.spec.ts +0 -29
  193. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +14 -122
  194. package/src/components/ChipList/ChipList.stories.ts +0 -15
  195. package/src/components/ChipList/ChipList.vue +5 -1
  196. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  197. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  198. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +124 -10
  199. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +379 -93
  200. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +162 -84
  201. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibilite.stories.ts +40 -1
  202. package/src/components/Customs/Selects/SyAutocomplete/accessibilite/Accessibility.mdx +7 -1
  203. package/src/components/Customs/Selects/SyAutocomplete/locales.ts +5 -0
  204. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +96 -0
  205. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +377 -9
  206. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +27 -13
  207. package/src/components/Customs/Selects/SyAutocomplete/utils/useSelectionLogic.ts +9 -10
  208. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  209. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
  210. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  211. package/src/components/Customs/Selects/SySelect/SySelect.vue +60 -14
  212. package/src/components/Customs/Selects/SySelect/locales.ts +1 -0
  213. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
  214. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  215. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  216. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
  217. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
  218. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  219. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  220. package/src/components/Customs/SyIcon/SyIcon.vue +1 -1
  221. package/src/components/Customs/SyIcon/tests/SyIcon.a11y.spec.ts +20 -0
  222. package/src/components/Customs/SyIconButton/SyIconButton.mdx +46 -0
  223. package/src/components/Customs/SyIconButton/SyIconButton.stories.ts +184 -0
  224. package/src/components/Customs/SyIconButton/SyIconButton.vue +38 -0
  225. package/src/components/Customs/SyIconButton/accessibilite/Accessibility.mdx +64 -0
  226. package/src/components/Customs/SyIconButton/tests/SyIconButton.a11y.spec.ts +87 -0
  227. package/src/components/Customs/SyIconButton/tests/SyIconButton.spec.ts +152 -0
  228. package/src/components/Customs/SyIconButton/tests/__snapshots__/SyIconButton.spec.ts.snap +61 -0
  229. package/src/components/Customs/SyPagination/SyPagination.vue +5 -5
  230. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  231. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  232. package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
  233. package/src/components/Customs/SyTextField/SyTextField.vue +174 -159
  234. package/src/components/Customs/SyTextField/accessibilite/Accessibility.mdx +67 -9
  235. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +47 -0
  236. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +155 -10
  237. package/src/components/DataList/accessibilite/Accessibility.mdx +79 -11
  238. package/src/components/DataListGroup/accessibilite/Accessibility.mdx +80 -11
  239. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  240. package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
  241. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  242. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  243. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  244. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
  245. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  246. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
  247. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  248. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  249. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  250. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  251. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  252. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
  253. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  254. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  255. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  256. package/src/components/DatePicker/composables/index.ts +1 -0
  257. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  258. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  259. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  260. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  261. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  262. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  263. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  264. package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
  265. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  266. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  267. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  268. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  269. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +25 -0
  270. package/src/components/ErrorPage/ErrorPage.stories.ts +113 -19
  271. package/src/components/ErrorPage/ErrorPage.vue +17 -2
  272. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +17 -0
  273. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +21 -1
  274. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +0 -1
  275. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +23 -0
  276. package/src/components/FileList/FileList.stories.ts +51 -1
  277. package/src/components/FileList/UploadItem/UploadItem.vue +13 -6
  278. package/src/components/FileList/UploadItem/locales.ts +3 -12
  279. package/src/components/FileList/accessibilite/Accessibility.mdx +3 -0
  280. package/src/components/FileUpload/FileUpload.vue +2 -1
  281. package/src/components/FileUpload/FileUploadContent.vue +2 -1
  282. package/src/components/FileUpload/tests/FileUpload.spec.ts +47 -0
  283. package/src/components/FileUpload/validateFiles.ts +5 -2
  284. package/src/components/FranceConnectBtn/accessibilite/Accessibility.mdx +62 -9
  285. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  286. package/src/components/HeaderBar/HeaderBar.vue +2 -1
  287. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +2 -1
  288. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -1
  289. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  290. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  291. package/src/components/LunarCalendar/accessibilite/Accessibility.mdx +74 -8
  292. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +163 -0
  293. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  294. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  295. package/src/components/MaintenancePage/MaintenancePage.vue +1 -1
  296. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +4 -5
  297. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +0 -1
  298. package/src/components/MonthPicker/MonthPicker.mdx +35 -0
  299. package/src/components/MonthPicker/MonthPicker.stories.ts +527 -0
  300. package/src/components/MonthPicker/MonthPicker.vue +79 -0
  301. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +89 -0
  302. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +27 -0
  303. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisual.vue +154 -0
  304. package/src/components/MonthPicker/MonthPickerVisual/MonthPickerVisualProps.ts +13 -0
  305. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +137 -0
  306. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +60 -0
  307. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +149 -0
  308. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +143 -0
  309. package/src/components/MonthPicker/MonthPickerVisual/useMonthGrid.ts +45 -0
  310. package/src/components/MonthPicker/MonthPickerVisual/useYearGrid.ts +45 -0
  311. package/src/components/MonthPicker/MonthPickerVisual/utils.ts +17 -0
  312. package/src/components/MonthPicker/accessibilite/Accessibility.mdx +59 -0
  313. package/src/components/MonthPicker/locales.ts +12 -0
  314. package/src/components/MonthPicker/tests/MonthPicker.a11y.spec.ts +71 -0
  315. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +1249 -0
  316. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2545 -0
  317. package/src/components/MonthPicker/useMonthPickerValidation.ts +30 -0
  318. package/src/components/NirField/NirField.mdx +1 -2
  319. package/src/components/NirField/NirField.stories.ts +70 -6
  320. package/src/components/NirField/NirField.vue +64 -260
  321. package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
  322. package/src/components/NirField/locales.ts +1 -1
  323. package/src/components/NirField/tests/NirField.spec.ts +6 -0
  324. package/src/components/NirField/useNirValidation.ts +271 -0
  325. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +2 -3
  326. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +22 -14
  327. package/src/components/NotificationBar/Notification/Notification.vue +3 -1
  328. package/src/components/NotificationBar/NotificationBar.stories.ts +154 -0
  329. package/src/components/NotificationBar/tests/NotificationBar.a11y.spec.ts +26 -0
  330. package/src/components/NotificationBar/tests/NotificationBar.spec.ts +60 -0
  331. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  332. package/src/components/PasswordField/PasswordField.vue +18 -24
  333. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  334. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  335. package/src/components/PeriodField/PeriodField.vue +57 -57
  336. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  337. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  338. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  339. package/src/components/PhoneField/PhoneField.vue +5 -6
  340. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  341. package/src/components/RangeField/RangeField.vue +6 -0
  342. package/src/components/RangeField/accessibilite/Accessibility.mdx +79 -11
  343. package/src/components/SkipLink/tests/SkipLink.a11y.spec.ts +23 -0
  344. package/src/components/StatusPage/StatusPage.stories.ts +118 -0
  345. package/src/components/StatusPage/StatusPage.vue +5 -3
  346. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +22 -0
  347. package/src/components/StatusPage/tests/StatusPage.spec.ts +22 -0
  348. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +22 -14
  349. package/src/components/SubHeader/tests/SubHeader.a11y.spec.ts +20 -0
  350. package/src/components/SyAlert/SyAlert.vue +1 -0
  351. package/src/components/SyAlert/accessibilite/Accessibility.mdx +79 -9
  352. package/src/components/SyAlert/tests/SyAlert.a11y.spec.ts +23 -0
  353. package/src/components/SyHeading/SyHeading.a11y.test.ts +149 -0
  354. package/src/components/SyHeading/SyHeading.test.ts +115 -0
  355. package/src/components/SyHeading/SyHeading.vue +5 -3
  356. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  357. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  358. package/src/components/SyTextArea/accessibilite/Accessibility.mdx +80 -8
  359. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +151 -0
  360. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  361. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  362. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  363. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
  364. package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
  365. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
  366. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
  367. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  368. package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
  369. package/src/components/Tables/SyTable/SyTable.vue +130 -56
  370. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
  371. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
  372. package/src/components/Tables/common/SyTableFilter.vue +22 -2
  373. package/src/components/Tables/common/TableHeader.vue +5 -1
  374. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  375. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  376. package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
  377. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  378. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  379. package/src/components/Tables/common/filters/locales.ts +0 -1
  380. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  381. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  382. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  383. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  384. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  385. package/src/components/Tables/common/tableStyles.scss +48 -4
  386. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  387. package/src/components/Tables/common/types.ts +13 -4
  388. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  389. package/src/components/Tables/common/usePagination.ts +13 -0
  390. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  391. package/src/components/Tables/common/useTableHeaders.ts +3 -3
  392. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  393. package/src/components/ToolbarContainer/tests/ToolbarContainer.a11y.spec.ts +126 -0
  394. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +2 -2
  395. package/src/components/index.ts +1 -0
  396. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  397. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  398. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  399. package/src/composables/rules/useFieldValidation.ts +34 -17
  400. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  401. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  402. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  403. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  404. package/src/composables/unifyValidation/useValidation.ts +190 -0
  405. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  406. package/src/composables/useFormFieldErrorHandling.ts +15 -9
  407. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  408. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  409. package/src/composables/validation/useFormValidation.ts +20 -13
  410. package/src/composables/validation/useValidatable.ts +8 -1
  411. package/src/composables/validation/useValidation.ts +135 -99
  412. package/src/composantsVuetify/Introduction.mdx +48 -0
  413. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  414. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  415. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  416. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  417. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -1
  418. package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
  419. package/src/stories/Components/Components.stories.ts +74 -9
  420. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  421. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  422. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  423. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  424. package/dist/SelectFilter-BOYlF7rX.js +0 -136
  425. package/dist/style.css +0 -1
  426. package/src/components/DatePicker/Accessibilite.mdx +0 -14
@@ -52,8 +52,8 @@ export const Required: StoryObj = {
52
52
  const datePicker1 = ref()
53
53
  const date1 = ref('')
54
54
 
55
- const handleSubmit = () => {
56
- const isValid1 = datePicker1.value?.validateOnSubmit()
55
+ const handleSubmit = async () => {
56
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
57
57
 
58
58
  if (!isValid1) {
59
59
  alert('Corrigez les erreurs avant de soumettre !')
@@ -72,8 +72,8 @@ export const Required: StoryObj = {
72
72
  const datePicker1 = ref()
73
73
  const date1 = ref(null)
74
74
 
75
- const handleSubmit = () => {
76
- const isValid1 = datePicker1.value?.validateOnSubmit()
75
+ const handleSubmit = async () => {
76
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
77
77
 
78
78
  if (!isValid1) {
79
79
  alert('Corrigez les erreurs avant de soumettre !')
@@ -114,6 +114,104 @@ export const Required: StoryObj = {
114
114
  }),
115
115
  }
116
116
 
117
+ export const NotRequired: StoryObj = {
118
+ parameters: {
119
+ sourceCode: [
120
+ {
121
+ name: 'Template',
122
+ code: `
123
+ <template>
124
+ <v-form @submit.prevent="handleSubmit">
125
+ <div style="display: flex; flex-direction: column; gap: 16px;">
126
+ <div>
127
+ <h3 class="mb-4">Avec calendrier</h3>
128
+ <DatePicker
129
+ ref="datePicker1"
130
+ v-model="date1"
131
+ format="DD/MM/YYYY"
132
+ placeholder="Date requise"
133
+ useCombinedMode
134
+ />
135
+ </div>
136
+ </div>
137
+ <button type="submit" style="margin-top: 16px; padding: 8px 16px; background-color:#0c419a; color: white; border: none; border-radius: 4px; cursor: pointer;">
138
+ Soumettre
139
+ </button>
140
+ </v-form>
141
+ </template>
142
+ `,
143
+ },
144
+ {
145
+ name: 'Script',
146
+ code: `
147
+ <script setup lang="ts">
148
+ import { ref } from 'vue'
149
+ import { DatePicker } from '@cnamts/synapse'
150
+
151
+ const datePicker1 = ref()
152
+ const date1 = ref('')
153
+
154
+ const handleSubmit = async () => {
155
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
156
+
157
+ if (!isValid1) {
158
+ alert('Corrigez les erreurs avant de soumettre !')
159
+ } else {
160
+ alert('Formulaire soumis avec succès !')
161
+ }
162
+ }
163
+ </script>
164
+ `,
165
+ },
166
+ ],
167
+ },
168
+ render: () => ({
169
+ components: { DatePicker },
170
+ setup() {
171
+ const datePicker1 = ref()
172
+ const date1 = ref(null)
173
+
174
+ const handleSubmit = async () => {
175
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
176
+
177
+ if (!isValid1) {
178
+ alert('Corrigez les erreurs avant de soumettre !')
179
+ }
180
+ else {
181
+ alert('Formulaire soumis avec succès !')
182
+ }
183
+ }
184
+
185
+ return {
186
+ datePicker1,
187
+ date1,
188
+ handleSubmit,
189
+ }
190
+ },
191
+ template: `
192
+ <div class="d-flex flex-wrap align-center pa-4">
193
+ <form @submit.prevent="handleSubmit" style="width: 100%;">
194
+ <div style="display: flex; flex-direction: column; gap: 16px;">
195
+ <div>
196
+ <DatePicker
197
+ ref="datePicker1"
198
+ v-model="date1"
199
+ format="DD/MM/YYYY"
200
+ placeholder="Date requise"
201
+ useCombinedMode
202
+ :is-validate-on-blur="false"
203
+ />
204
+ </div>
205
+ </div>
206
+ <button type="submit" style="margin-top: 16px; padding: 8px 16px; background-color:#0c419a; color: white; border: none; border-radius: 4px; cursor: pointer;">
207
+ Soumettre
208
+ </button>
209
+ </form>
210
+ </div>
211
+ `,
212
+ }),
213
+ }
214
+
117
215
  export const WithCustomRulesAndRequired: StoryObj = {
118
216
  parameters: {
119
217
  sourceCode: [
@@ -154,8 +252,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
154
252
  const datePicker1 = ref()
155
253
  const date1 = ref('01/01/2100')
156
254
 
157
- const handleSubmit = () => {
158
- const isValid1 = datePicker1.value?.validateOnSubmit()
255
+ const handleSubmit = async () => {
256
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
159
257
 
160
258
  if (!isValid1) {
161
259
  alert('Corrigez les erreurs avant de soumettre !')
@@ -174,8 +272,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
174
272
  const datePicker1 = ref()
175
273
  const date1 = ref('01/01/2100')
176
274
 
177
- const handleSubmit = () => {
178
- const isValid1 = datePicker1.value?.validateOnSubmit()
275
+ const handleSubmit = async () => {
276
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
179
277
 
180
278
  if (!isValid1) {
181
279
  alert('Corrigez les erreurs avant de soumettre !')
@@ -52,8 +52,8 @@ export const Required: StoryObj = {
52
52
  const datePicker1 = ref()
53
53
  const date1 = ref('')
54
54
 
55
- const handleSubmit = () => {
56
- const isValid1 = datePicker1.value?.validateOnSubmit()
55
+ const handleSubmit = async () => {
56
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
57
57
 
58
58
  if (!isValid1) {
59
59
  alert('Corrigez les erreurs avant de soumettre !')
@@ -72,8 +72,8 @@ export const Required: StoryObj = {
72
72
  const datePicker1 = ref()
73
73
  const date1 = ref('')
74
74
 
75
- const handleSubmit = () => {
76
- const isValid1 = datePicker1.value?.validateOnSubmit()
75
+ const handleSubmit = async () => {
76
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
77
77
  if (!isValid1) {
78
78
  alert('Corrigez les erreurs avant de soumettre !')
79
79
  }
@@ -131,7 +131,7 @@ export const WithCustomRulesAndRequired: StoryObj = {
131
131
  placeholder="Date requise"
132
132
  noCalendar
133
133
  :customRules="[
134
- { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd'hui' } },
134
+ { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd\\'hui' } },
135
135
  ]"
136
136
  />
137
137
  </div>
@@ -153,8 +153,8 @@ export const WithCustomRulesAndRequired: StoryObj = {
153
153
  const datePicker1 = ref()
154
154
  const date1 = ref('01/01/2100')
155
155
 
156
- const handleSubmit = () => {
157
- const isValid1 = datePicker1.value?.validateOnSubmit()
156
+ const handleSubmit = async (): Promise<void> => {
157
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
158
158
 
159
159
  if (!isValid1) {
160
160
  alert('Corrigez les erreurs avant de soumettre !')
@@ -170,11 +170,11 @@ export const WithCustomRulesAndRequired: StoryObj = {
170
170
  render: () => ({
171
171
  components: { DatePicker },
172
172
  setup() {
173
- const datePicker1 = ref()
173
+ const datePicker1 = ref<typeof DatePicker>()
174
174
  const date1 = ref('01/01/2100')
175
175
 
176
- const handleSubmit = () => {
177
- const isValid1 = datePicker1.value?.validateOnSubmit()
176
+ const handleSubmit = async (): Promise<void> => {
177
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
178
178
 
179
179
  if (!isValid1) {
180
180
  alert('Corrigez les erreurs avant de soumettre !')
@@ -197,13 +197,14 @@ export const WithCustomRulesAndRequired: StoryObj = {
197
197
  <div>
198
198
  <DatePicker
199
199
  ref="datePicker1"
200
+ label="Date"
200
201
  v-model="date1"
201
202
  required
202
203
  format="DD/MM/YYYY"
203
204
  placeholder="Date requise"
204
205
  noCalendar
205
206
  :custom-rules="[
206
- { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourdhui' } },
207
+ { type: 'notAfterToday', options: { message: 'La date ne peut pas être après aujourd\\'hui' } },
207
208
  ]"
208
209
  />
209
210
  </div>
@@ -63,9 +63,9 @@ export const Required: StoryObj = {
63
63
  const datePicker2 = ref()
64
64
  const date2 = ref('')
65
65
 
66
- const handleSubmit = () => {
67
- const isValid1 = datePicker1.value?.validateOnSubmit()
68
- const isValid2 = datePicker2.value?.validateOnSubmit()
66
+ const handleSubmit = async () => {
67
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
68
+ const isValid2 = await datePicker2.value?.validateOnSubmit()
69
69
 
70
70
  if (!isValid1 || !isValid2) {
71
71
  alert('Corrigez les erreurs avant de soumettre !')
@@ -87,9 +87,9 @@ export const Required: StoryObj = {
87
87
  const datePicker2 = ref()
88
88
  const date2 = ref('')
89
89
 
90
- const handleSubmit = () => {
91
- const isValid1 = datePicker1.value?.validateOnSubmit()
92
- const isValid2 = datePicker2.value?.validateOnSubmit()
90
+ const handleSubmit = async () => {
91
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
92
+ const isValid2 = await datePicker2.value?.validateOnSubmit()
93
93
 
94
94
  if (!isValid1 || !isValid2) {
95
95
  alert('Corrigez les erreurs avant de soumettre !')
@@ -197,9 +197,9 @@ export const WithCustomRulesAndRequired: StoryObj = {
197
197
  const datePicker2 = ref()
198
198
  const date2 = ref('01/01/2100')
199
199
 
200
- const handleSubmit = () => {
201
- const isValid1 = datePicker1.value?.validateOnSubmit()
202
- const isValid2 = datePicker2.value?.validateOnSubmit()
200
+ const handleSubmit = async (): Promise<void> => {
201
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
202
+ const isValid2 = await datePicker2.value?.validateOnSubmit()
203
203
 
204
204
  if (!isValid1 || !isValid2) {
205
205
  alert('Corrigez les erreurs avant de soumettre !')
@@ -221,9 +221,9 @@ export const WithCustomRulesAndRequired: StoryObj = {
221
221
  const datePicker2 = ref()
222
222
  const date2 = ref('01/01/2100')
223
223
 
224
- const handleSubmit = () => {
225
- const isValid1 = datePicker1.value?.validateOnSubmit()
226
- const isValid2 = datePicker2.value?.validateOnSubmit()
224
+ const handleSubmit = async (): Promise<void> => {
225
+ const isValid1 = await datePicker1.value?.validateOnSubmit()
226
+ const isValid2 = await datePicker2.value?.validateOnSubmit()
227
227
 
228
228
  if (!isValid1 || !isValid2) {
229
229
  alert('Corrigez les erreurs avant de soumettre !')
@@ -180,9 +180,6 @@ type Story = StoryObj<typeof meta>
180
180
 
181
181
  export const Default: Story = {
182
182
  parameters: {
183
- a11y: {
184
- disable: true,
185
- },
186
183
  sourceCode: [
187
184
  {
188
185
  name: 'Template',
@@ -240,9 +237,6 @@ export const Default: Story = {
240
237
 
241
238
  export const WithInitialValue: Story = {
242
239
  parameters: {
243
- a11y: {
244
- disable: true,
245
- },
246
240
  sourceCode: [
247
241
  {
248
242
  name: 'Template',
@@ -299,9 +293,6 @@ export const WithInitialValue: Story = {
299
293
 
300
294
  export const WithCustomFormat: Story = {
301
295
  parameters: {
302
- a11y: {
303
- disable: true,
304
- },
305
296
  sourceCode: [
306
297
  {
307
298
  name: 'Template',
@@ -356,9 +347,6 @@ export const WithCustomFormat: Story = {
356
347
 
357
348
  export const WithValidation: Story = {
358
349
  parameters: {
359
- a11y: {
360
- disable: true,
361
- },
362
350
  sourceCode: [
363
351
  {
364
352
  name: 'Template',
@@ -21,64 +21,59 @@
21
21
 
22
22
  dayjs.extend(customParseFormat)
23
23
 
24
- /**
25
- * =====================
26
- * Props / Emits
27
- * =====================
28
- */
29
24
  const props = withDefaults(defineProps<{
30
- modelValue?: DateValue
31
- placeholder?: string
32
- format?: string
25
+ autoClamp?: boolean
26
+ bgColor?: string
27
+ customRules?: ValidationRule[]
28
+ customWarningRules?: ValidationRule[]
33
29
  dateFormatReturn?: string
34
- label: string
35
- required?: boolean
30
+ density?: 'default' | 'comfortable' | 'compact'
31
+ disableErrorHandling?: boolean
36
32
  disabled?: boolean
37
- readonly?: boolean
38
- title?: string | false
39
- isOutlined?: boolean
40
- displayIcon?: boolean
41
33
  displayAppendIcon?: boolean
42
- noIcon?: boolean
43
- customRules?: ValidationRule[]
44
- customWarningRules?: ValidationRule[]
34
+ displayIcon?: boolean
45
35
  displayPrependIcon?: boolean
46
- disableErrorHandling?: boolean
47
- showSuccessMessages?: boolean
48
- bgColor?: string
49
36
  displayRange?: boolean
50
- autoClamp?: boolean
51
- isValidateOnBlur?: boolean
52
- density?: 'default' | 'comfortable' | 'compact'
37
+ externalErrorMessages?: string[]
38
+ format?: string
53
39
  hint?: string
40
+ isOutlined?: boolean
41
+ isValidateOnBlur?: boolean
42
+ label: string
43
+ modelValue?: DateValue
44
+ noIcon?: boolean
54
45
  persistentHint?: boolean
55
- externalErrorMessages?: string[]
46
+ placeholder?: string
47
+ readonly?: boolean
48
+ required?: boolean
49
+ showSuccessMessages?: boolean
50
+ title?: string | false
56
51
  }>(), {
57
- modelValue: undefined,
58
- placeholder: undefined,
59
- format: DATE_PICKER_MESSAGES.FORMAT_DEFAULT,
52
+ autoClamp: true,
53
+ bgColor: 'white',
54
+ customRules: () => [],
55
+ customWarningRules: () => [],
60
56
  dateFormatReturn: undefined,
61
- required: false,
57
+ density: 'default',
58
+ disableErrorHandling: false,
62
59
  disabled: false,
63
- readonly: false,
64
- title: false,
65
- isOutlined: true,
66
- displayIcon: true,
67
60
  displayAppendIcon: false,
68
- noIcon: false,
69
- customRules: () => [],
70
- customWarningRules: () => [],
61
+ displayIcon: true,
71
62
  displayPrependIcon: true,
72
- disableErrorHandling: false,
73
- showSuccessMessages: true,
74
- bgColor: 'white',
75
63
  displayRange: false,
76
- autoClamp: true,
77
- isValidateOnBlur: true,
78
- density: 'default',
64
+ externalErrorMessages: () => [],
65
+ format: DATE_PICKER_MESSAGES.FORMAT_DEFAULT,
79
66
  hint: undefined,
67
+ isOutlined: true,
68
+ isValidateOnBlur: true,
69
+ modelValue: undefined,
70
+ noIcon: false,
80
71
  persistentHint: false,
81
- externalErrorMessages: () => [],
72
+ placeholder: undefined,
73
+ readonly: false,
74
+ required: false,
75
+ showSuccessMessages: true,
76
+ title: false,
82
77
  })
83
78
 
84
79
  const emit = defineEmits<{
@@ -149,11 +144,11 @@
149
144
 
150
145
  const clearValidation = () => validationApi.value.clearValidation()
151
146
 
152
- const validateField = (
147
+ const validateField = async (
153
148
  value: unknown,
154
149
  rules?: ValidationRule[],
155
150
  warningRules?: ValidationRule[],
156
- ): ValidationResult => validationApi.value.validateField(value, rules, warningRules)
151
+ ): Promise<ValidationResult> => await validationApi.value.validateField(value, rules, warningRules)
157
152
 
158
153
  // Agrégation des erreurs internes et externes
159
154
  const errorMessages = computed(() => [...errors.value, ...props.externalErrorMessages])
@@ -163,15 +158,15 @@
163
158
  /**
164
159
  * Safe validate utility
165
160
  */
166
- const safeValidateField = (
161
+ const safeValidateField = async (
167
162
  value: unknown,
168
163
  rules?: ValidationRule[],
169
164
  warningRules?: ValidationRule[],
170
- ): ValidationResult => {
165
+ ): Promise<ValidationResult> => {
171
166
  if (readonly.value) {
172
167
  return { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
173
168
  }
174
- return validateField(value, rules, warningRules) ?? { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
169
+ return await validateField(value, rules, warningRules) ?? { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [], warnings: [], successes: [] } }
175
170
  }
176
171
 
177
172
  /**
@@ -200,7 +195,7 @@
200
195
  const isUpdatingFromInternal = ref(false)
201
196
  const isFocused = ref(false)
202
197
  const hasInteracted = ref(false)
203
- const ariaLabel = ref('')
198
+ const ariaLabel = ref(props.label || props.placeholder || DATE_PICKER_MESSAGES.LABEL_DEFAULT)
204
199
 
205
200
  const { validateDateFormat: _validateDateFormat } = useDateFormatValidation({
206
201
  format: displayFormat.value,
@@ -231,7 +226,9 @@
231
226
  const isValidating = ref(false)
232
227
 
233
228
  const updateDisplayValue = (dateDisplayText: string) => (inputValue.value = dateDisplayText)
234
- const updateAriaLabel = (ariaLabelText: string) => (ariaLabel.value = ariaLabelText)
229
+ const updateAriaLabel = (ariaLabelText: string) => {
230
+ ariaLabel.value = ariaLabelText || props.label || props.placeholder || DATE_PICKER_MESSAGES.LABEL_DEFAULT
231
+ }
235
232
 
236
233
  const { formatDateInput, handlePaste: handlePasteSingle, isHandlingBackspace } = useDateInputEditing({
237
234
  format: displayFormat.value,
@@ -583,9 +580,18 @@
583
580
  emit('update:model-value', val)
584
581
  }
585
582
 
586
- function runRules(value: string): boolean {
583
+ async function runRules(value: string): Promise<boolean> {
587
584
  clearValidation()
588
- if (!value) {
585
+
586
+ // Vérifier si la valeur est vide ou est un squelette (ex: "__//____" pour DD/MM/YYYY)
587
+ // Un squelette ne contient que des underscores, des espaces et les séparateurs du format
588
+ const formatSeparators = props.format.replace(/[A-Za-z]/g, '')
589
+ // Créer un pattern qui autorise uniquement underscores, espaces et séparateurs du format
590
+ const allowedChars = ['_', ' ', ...new Set(formatSeparators.split(''))].map(char => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('')
591
+ const skeletonPattern = new RegExp(`^[${allowedChars}]+$`)
592
+ const isEmptyOrSkeleton = !value || value.trim() === '' || skeletonPattern.test(value)
593
+
594
+ if (isEmptyOrSkeleton) {
589
595
  if (required.value && hasInteracted.value && !readonly.value && !props.disableErrorHandling) {
590
596
  errors.value.push(DATE_PICKER_MESSAGES.ERROR_REQUIRED)
591
597
  return false
@@ -602,7 +608,7 @@
602
608
 
603
609
  if (isRange.value && value.includes(' - ')) {
604
610
  const [startDateText, endDateText] = value.split(' - ')
605
- if (startDateText && !endDateText) return !!validateManualInput(startDateText)
611
+ if (startDateText && !endDateText) return !!(await validateManualInput(startDateText))
606
612
 
607
613
  if (startDateText && endDateText) {
608
614
  const formatValidationResult = validateDateFormatForSingleOrRange(value)
@@ -618,14 +624,14 @@
618
624
  errors.value.push(DATE_PICKER_MESSAGES.ERROR_END_BEFORE_START)
619
625
  return false
620
626
  }
621
- safeValidateField(startDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
622
- if (errors.value.length === 0) safeValidateField(endDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
627
+ await safeValidateField(startDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
628
+ if (errors.value.length === 0) await safeValidateField(endDate, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
623
629
  }
624
630
  }
625
631
  return !hasError.value
626
632
  }
627
633
 
628
- return !!validateManualInput(value)
634
+ return !!(await validateManualInput(value))
629
635
  }
630
636
 
631
637
  /**
@@ -660,7 +666,7 @@
660
666
  emit('focus')
661
667
  }
662
668
 
663
- function onBlur() {
669
+ async function onBlur() {
664
670
  isFocused.value = false
665
671
  hasInteracted.value = true
666
672
 
@@ -678,7 +684,7 @@
678
684
 
679
685
  if (inputValue.value) {
680
686
  const formatValidationResult = validateDateFormatForSingleOrRange(inputValue.value)
681
- const customRulesValidationResult = safeValidateField(inputValue.value, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
687
+ const customRulesValidationResult = await safeValidateField(inputValue.value, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
682
688
 
683
689
  if (formatValidationResult.isValid && !customRulesValidationResult.hasError && !isRange.value) {
684
690
  const parsedDate = dayjs(inputValue.value, displayFormat.value, true).toDate()
@@ -683,6 +683,7 @@ export const WithErrorDisabled: Story = {
683
683
  v-model="date1"
684
684
  format="DD/MM/YYYY"
685
685
  placeholder="Date requise sans erreur"
686
+ label="Date requise sans erreur"
686
687
  required
687
688
  no-icon
688
689
  no-calendar
@@ -695,6 +696,7 @@ export const WithErrorDisabled: Story = {
695
696
  v-model="date2"
696
697
  format="DD/MM/YYYY"
697
698
  placeholder="Date requise avec erreur"
699
+ label="Date requise avec erreur"
698
700
  required
699
701
  no-icon
700
702
  no-calendar
@@ -745,6 +747,7 @@ export const WithErrorDisabled: Story = {
745
747
  v-model="date2"
746
748
  format="DD/MM/YYYY"
747
749
  placeholder="Date requise avec erreur"
750
+ label="Date requise avec erreur"
748
751
  required
749
752
  no-icon
750
753
  no-calendar
@@ -0,0 +1,66 @@
1
+ import { Meta, Story } from '@storybook/addon-docs'
2
+ import * as Stories from '../NoCalendar.stories.ts'
3
+ import AccessibilityIcon from '@/common/imgs/accessibility-svgrepo-com.svg'
4
+ import '@/stories/styles/shared.css'
5
+ import {
6
+ AccessibilityGuideLayout,
7
+ CriteriaSection,
8
+ CriteriaCard,
9
+ DemoSection,
10
+ BestPracticesSection,
11
+ ResourcesSection,
12
+ } from '@/stories/accessibility/AccessibilityGuideLayout.mdx'
13
+
14
+ <Meta of={Stories} />
15
+
16
+ <AccessibilityGuideLayout
17
+ componentName="DateTextInput (saisie manuelle)"
18
+ iconSrc={AccessibilityIcon}
19
+ >
20
+ <CriteriaSection>
21
+ <CriteriaCard title="Structure sémantique" icon="🔍">
22
+ <ul>
23
+ <li><strong>Rôle</strong> : input type="text" (role implicite <code>textbox</code>), <code>aria-required</code> synchronisé quand <code>required</code>.</li>
24
+ <li><strong>Association</strong> : label natif ou <code>aria-label</code> / <code>aria-labelledby</code> pour les champs sans libellé visible (libellé calculé dynamiquement selon label/placeholder).</li>
25
+ <li><strong>Descriptions</strong> : <code>aria-describedby</code> relie aides contextuelles/hints et messages d’erreur/succès/avertissements.</li>
26
+ <li><strong>États</strong> : <code>aria-invalid</code>, <code>aria-disabled</code>, <code>aria-readonly</code> et zones de messages reflètent la validation et les props.</li>
27
+ </ul>
28
+ </CriteriaCard>
29
+
30
+ <CriteriaCard title="Saisie et clavier" icon="⌨️">
31
+ <ul>
32
+ <li><strong>Tab</strong> : entrée et sortie du champ sans piège de focus (pas de panneau).</li>
33
+ <li><strong>Masque léger</strong> : l’option <code>autoClamp</code> ajoute les séparateurs mais n’empêche pas la saisie ni la navigation au clavier (retours chariot, flèches, copier/coller conservés).</li>
34
+ <li><strong>Raccourcis</strong> : <kbd>Ctrl/Cmd+A</kbd>, <kbd>Ctrl/Cmd+C</kbd>, <kbd>Ctrl/Cmd+V</kbd> restent utilisables pour éditer la valeur.</li>
35
+ <li><strong>Plage de dates</strong> : la chaîne <code>start - end</code> est éditable (séparateur conservé), aucune navigation forcée.</li>
36
+ <li><strong>Lecture seule</strong> : aucune validation ni effacement, bouton clear désactivé.</li>
37
+ </ul>
38
+ </CriteriaCard>
39
+
40
+ <CriteriaCard title="Messages et retours" icon="📣">
41
+ <ul>
42
+ <li><strong>Statuts</strong> : erreurs/avertissements/succès affichés sous le champ (zone annoncée via <code>aria-live</code> si activé côté navigateur/lecteur).</li>
43
+ <li><strong>Formats attendus</strong> : placeholder et hint expliquent la structure (JJ/MM/AAAA…).</li>
44
+ <li><strong>Validation manuelle</strong> : <code>customRules</code> / <code>customWarningRules</code> exposent des messages dédiés.</li>
45
+ </ul>
46
+ </CriteriaCard>
47
+ </CriteriaSection>
48
+
49
+ <DemoSection title="Saisie clavier et autoClamp">
50
+ <Story of={Stories.AutoClampFeature} />
51
+ </DemoSection>
52
+
53
+ <BestPracticesSection>
54
+ - Fournir un libellé explicite ou <code>aria-label</code> quand le label visuel est masqué ou tronqué.
55
+ - Afficher un placeholder cohérent avec le format attendu et conserver un hint persistent pour les formats non standards.
56
+ - En lecture seule, désactiver les actions d’ouverture/validation et laisser l’icône décorative optionnelle mais non interactive.
57
+ - En mode plage, préciser dans le hint l’ordre attendu (début puis fin) et conserver la séparatrice <code>" - "</code>.
58
+ - Avec <code>autoClamp</code>, signaler que les séparateurs sont ajoutés automatiquement sans bloquer les corrections clavier.
59
+ </BestPracticesSection>
60
+
61
+ <ResourcesSection>
62
+ - Stories : <code>Default</code> (champ requis), <code>AutoClampFeature</code> (saisie assistée), <code>DifferentFormats</code> (formats multiples), <code>CustomRules</code> / <code>WarningRules</code> (messages dédiés), <code>Range</code> (plage éditable).
63
+ - Spécification WAI-ARIA : rôle textbox et gestion de <code>aria-invalid</code> / <code>aria-required</code> / <code>aria-describedby</code>.
64
+ - Tests axe : <code>DateTextInput.a11y.spec.ts</code> (scénario champ requis, vérifie les attributs aria et les messages).
65
+ </ResourcesSection>
66
+ </AccessibilityGuideLayout>