@cnamts/synapse 1.0.23 → 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 (292) hide show
  1. package/dist/AutocompleteFilter-BWLR3U7W.js +114 -0
  2. package/dist/AutocompleteFilter-D9jzRzAL.cjs +1 -0
  3. package/dist/{DateFilter-Dc-gSGwk.js → DateFilter-BpwFexzi.js} +1 -1
  4. package/dist/DateFilter-DTUl8hb1.cjs +1 -0
  5. package/dist/{NumberFilter-vP38Wp6j.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-Ba1uYUnT.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-B84dpnoq.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/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7022 -9616
  16. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +2 -2
  17. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +2 -2
  18. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +40 -40
  19. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +60 -60
  20. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +7168 -9762
  21. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +7501 -10095
  23. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +21 -21
  24. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +41 -41
  25. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +2 -2
  26. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +20 -498
  27. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +108 -146
  28. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +5 -5
  29. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -16
  30. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +8 -8
  31. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +28 -506
  32. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +28 -506
  33. package/dist/components/Customs/SyTextField/SyTextField.d.ts +65 -85
  34. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +627 -771
  35. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +315 -402
  36. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +112 -155
  37. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  38. package/dist/components/DatePicker/composables/useDatePickerFocusTrap.d.ts +11 -0
  39. package/dist/components/DatePicker/composables/useDateTextField.d.ts +4 -4
  40. package/dist/components/DatePicker/composables/useDateValidation.d.ts +3 -3
  41. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  42. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +2 -2
  43. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +4 -4
  44. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +20 -28
  45. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +3 -3
  46. package/dist/components/MonthPicker/MonthPicker.d.ts +86 -122
  47. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +85 -121
  48. package/dist/components/NirField/NirField.d.ts +206 -270
  49. package/dist/components/NirField/locales.d.ts +10 -10
  50. package/dist/components/NirField/useNirValidation.d.ts +64 -0
  51. package/dist/components/PasswordField/PasswordField.d.ts +8 -9
  52. package/dist/components/PeriodField/PeriodField.d.ts +1352 -1640
  53. package/dist/components/PhoneField/PhoneField.d.ts +88 -124
  54. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +12 -12
  55. package/dist/components/SyTextArea/SyTextArea.d.ts +34 -14
  56. package/dist/components/SyTextArea/useDefaultValidationRules.d.ts +11 -0
  57. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +9 -6
  58. package/dist/components/Tables/SyTable/SyTable.d.ts +9 -6
  59. package/dist/components/Tables/common/SyTableFilter.d.ts +2 -3
  60. package/dist/components/Tables/common/SyTablePagination.d.ts +17 -19
  61. package/dist/components/Tables/common/filters/AutocompleteFilter.d.ts +120 -0
  62. package/dist/components/Tables/common/filters/locales.d.ts +0 -1
  63. package/dist/components/Tables/common/types.d.ts +19 -3
  64. package/dist/components/Tables/common/useClickableTableRow.d.ts +17 -0
  65. package/dist/components/Tables/common/usePagination.d.ts +3 -1
  66. package/dist/components/Tables/common/usePinnedColumns.d.ts +31 -0
  67. package/dist/components/Tables/common/useTableHeaders.d.ts +2 -0
  68. package/dist/components/Tables/common/useTableRowCheckboxAccessibility.d.ts +5 -0
  69. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +6 -6
  70. package/dist/composables/date/useDatePickerAccessibility.d.ts +1 -1
  71. package/dist/composables/rules/useFieldValidation.d.ts +4 -4
  72. package/dist/composables/unifyValidation/useCustomValidation.d.ts +8 -0
  73. package/dist/composables/unifyValidation/useValidation.d.ts +102 -0
  74. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +18 -0
  75. package/dist/composables/useFormFieldErrorHandling.d.ts +2 -2
  76. package/dist/composables/validation/useFormValidation.d.ts +11 -2
  77. package/dist/composables/validation/useValidation.d.ts +15 -9
  78. package/dist/design-system-v3.d.ts +2 -0
  79. package/dist/design-system-v3.js +186 -187
  80. package/dist/design-system-v3.umd.cjs +1 -1066
  81. package/dist/{main-aLKwdMi1.js → main-BtTqyn4z.js} +16434 -15672
  82. package/dist/main-C1e3eoxd.cjs +1067 -0
  83. package/dist/main.d.ts +0 -1
  84. package/dist/synapse.css +1 -0
  85. package/dist/tooth-11-D3sLWv2n.cjs +1 -0
  86. package/dist/tooth-12-CXrLuH03.cjs +1 -0
  87. package/dist/tooth-13-BSfo5fpT.cjs +1 -0
  88. package/dist/tooth-14-DMzulx0h.cjs +1 -0
  89. package/dist/tooth-15-BKRFVi-9.cjs +1 -0
  90. package/dist/tooth-16-CpuxAbuM.cjs +1 -0
  91. package/dist/tooth-17-BPoahUdg.cjs +1 -0
  92. package/dist/tooth-18-DhHJz8sy.cjs +1 -0
  93. package/dist/tooth-21-Dgd5hn_X.cjs +1 -0
  94. package/dist/tooth-22-C2Tn19sB.cjs +1 -0
  95. package/dist/tooth-23-C9uaaSGb.cjs +1 -0
  96. package/dist/tooth-24-BrK9UGpf.cjs +1 -0
  97. package/dist/tooth-25-CE_EfGNp.cjs +1 -0
  98. package/dist/tooth-26-Ctv4i9Fy.cjs +1 -0
  99. package/dist/tooth-27-C5J7JkWM.cjs +1 -0
  100. package/dist/tooth-28-Z9oWqjo0.cjs +1 -0
  101. package/dist/tooth-31-BrYqmkTi.cjs +1 -0
  102. package/dist/tooth-32-BNNR0oCZ.cjs +1 -0
  103. package/dist/tooth-33-DuxvqO2J.cjs +1 -0
  104. package/dist/tooth-34-BCSCXMB6.cjs +1 -0
  105. package/dist/tooth-35-BLUXkX88.cjs +1 -0
  106. package/dist/tooth-36-IrKHYqlA.cjs +1 -0
  107. package/dist/tooth-37-BYqpdMwo.cjs +1 -0
  108. package/dist/tooth-38-B_eNXXdu.cjs +1 -0
  109. package/dist/tooth-41-Ddva4Ot8.cjs +1 -0
  110. package/dist/tooth-42-szcDqlM0.cjs +1 -0
  111. package/dist/tooth-43-B3ka6rQm.cjs +1 -0
  112. package/dist/tooth-44-CazyQucj.cjs +1 -0
  113. package/dist/tooth-45-B4HQtc8n.cjs +1 -0
  114. package/dist/tooth-46-BPM40gbG.cjs +1 -0
  115. package/dist/tooth-47-Dvr20dlh.cjs +1 -0
  116. package/dist/tooth-48-Bd8ljGsF.cjs +1 -0
  117. package/dist/tooth-51-OBpwCOF3.cjs +1 -0
  118. package/dist/tooth-52-aKxyHcmq.cjs +1 -0
  119. package/dist/tooth-53-vCwJjTOc.cjs +1 -0
  120. package/dist/tooth-54-DsWu2iFy.cjs +1 -0
  121. package/dist/tooth-55-BxC1X2Dn.cjs +1 -0
  122. package/dist/tooth-61-BbLvxMQi.cjs +1 -0
  123. package/dist/tooth-62-CmTkWczP.cjs +1 -0
  124. package/dist/tooth-63-DI7l_2qI.cjs +1 -0
  125. package/dist/tooth-64-B21sOsJh.cjs +1 -0
  126. package/dist/tooth-65-D2ZC2VEr.cjs +1 -0
  127. package/dist/tooth-71-D473PPO5.cjs +1 -0
  128. package/dist/tooth-72-Drh1wnNu.cjs +1 -0
  129. package/dist/tooth-73-DzlwYI23.cjs +1 -0
  130. package/dist/tooth-74-8aGvcZPg.cjs +1 -0
  131. package/dist/tooth-75-BFK7At_r.cjs +1 -0
  132. package/dist/tooth-81-BZmR-I0M.cjs +1 -0
  133. package/dist/tooth-82-euVfUUZV.cjs +1 -0
  134. package/dist/tooth-83-KV010j64.cjs +1 -0
  135. package/dist/tooth-84-BBg1RjhZ.cjs +1 -0
  136. package/dist/tooth-85-Cr-kc1wM.cjs +1 -0
  137. package/dist/vuetifyConfig.js +561 -0
  138. package/dist/vuetifyConfig.umd.cjs +1 -0
  139. package/package.json +10 -4
  140. package/src/assets/overrides/_btns.scss +0 -6
  141. package/src/assets/overrides/_icons.scss +9 -1
  142. package/src/assets/overrides/_typography.scss +0 -10
  143. package/src/components/Amelipro/AmeliproAutoCompleteField/__tests__/__snapshots__/AmeliproAutoCompleteField.spec.ts.snap +2 -2
  144. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  145. package/src/components/Amelipro/AmeliproTextArea/__tests__/__snapshots__/AmeliproTextArea.spec.ts.snap +2 -2
  146. package/src/components/Captcha/accessibilite/Accessibility.mdx +86 -8
  147. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +12 -12
  148. package/src/components/ChipList/ChipList.stories.ts +0 -15
  149. package/src/components/ChipList/ChipList.vue +5 -1
  150. package/src/components/ChipList/accessibilite/Accessibility.mdx +83 -10
  151. package/src/components/ChipList/tests/ChipList.a11y.spec.ts +41 -0
  152. package/src/components/Customs/Selects/SelectBtnField/accessibilite/Accessibility.mdx +0 -9
  153. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +22 -5
  154. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +143 -0
  155. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +14 -10
  156. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -4
  157. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +8 -9
  158. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.spec.ts +10 -10
  159. package/src/components/Customs/Selects/SySelect/SySelect.vue +14 -11
  160. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +54 -0
  161. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +6 -9
  162. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +10 -16
  163. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +16 -11
  164. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +35 -0
  165. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.a11y.spec.ts +134 -2
  166. package/src/components/Customs/SyForm/SyForm.stories.ts +31 -5
  167. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -7
  168. package/src/components/Customs/SyTextField/SyTextField.mdx +1 -1
  169. package/src/components/Customs/SyTextField/SyTextField.stories.ts +29 -27
  170. package/src/components/Customs/SyTextField/SyTextField.vue +154 -157
  171. package/src/components/Customs/SyTextField/tests/SyTextField.a11y.spec.ts +32 -0
  172. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +120 -11
  173. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +62 -58
  174. package/src/components/DatePicker/CalendarMode/DatePicker.vue +330 -223
  175. package/src/components/DatePicker/CalendarMode/accessibilite/Accessibility.mdx +82 -0
  176. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +141 -0
  177. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +2 -56
  178. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +195 -159
  179. package/src/components/DatePicker/ComplexDatePicker/accessibilite/Accessibility.mdx +76 -0
  180. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +10 -10
  181. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +8 -8
  182. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +106 -8
  183. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +12 -11
  184. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +12 -12
  185. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +0 -12
  186. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +63 -57
  187. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +3 -0
  188. package/src/components/DatePicker/DateTextInput/accessibilite/Accessibility.mdx +66 -0
  189. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +52 -1
  190. package/src/components/DatePicker/composables/index.ts +1 -0
  191. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +109 -65
  192. package/src/components/DatePicker/composables/tests/useDatePickerFocusTrap.spec.ts +138 -0
  193. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +74 -18
  194. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +39 -0
  195. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +91 -0
  196. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +442 -36
  197. package/src/components/DatePicker/composables/useDatePickerFocusTrap.ts +92 -0
  198. package/src/components/DatePicker/composables/useDateTextField.ts +7 -6
  199. package/src/components/DatePicker/composables/useDateValidation.ts +36 -35
  200. package/src/components/DatePicker/composables/useInputBlurHandler.ts +3 -3
  201. package/src/components/DatePicker/composables/useManualDateValidation.ts +6 -2
  202. package/src/components/DiacriticPicker/accessibilite/Accessibility.mdx +76 -8
  203. package/src/components/HeaderBar/HeaderBar.stories.ts +14 -2
  204. package/src/components/Logo/accessibilite/Accessibility.mdx +73 -11
  205. package/src/components/LogoBrandSection/accessibilite/Accessibility.mdx +85 -9
  206. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +3 -1
  207. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +4 -5
  208. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +2 -1
  209. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +7 -7
  210. package/src/components/NirField/NirField.stories.ts +4 -0
  211. package/src/components/NirField/NirField.vue +64 -260
  212. package/src/components/NirField/accessibilite/Accessibility.mdx +2 -2
  213. package/src/components/NirField/locales.ts +1 -1
  214. package/src/components/NirField/tests/NirField.spec.ts +6 -0
  215. package/src/components/NirField/useNirValidation.ts +271 -0
  216. package/src/components/PasswordField/PasswordField.stories.ts +4 -4
  217. package/src/components/PasswordField/PasswordField.vue +18 -24
  218. package/src/components/PasswordField/tests/PasswordField.spec.ts +6 -3
  219. package/src/components/PeriodField/PeriodField.stories.ts +4 -4
  220. package/src/components/PeriodField/PeriodField.vue +57 -57
  221. package/src/components/PeriodField/__tests__/PeriodField.async.spec.ts +32 -0
  222. package/src/components/PeriodField/accessibilite/Accessibility.mdx +68 -8
  223. package/src/components/PeriodField/tests/PeriodField.spec.ts +28 -2
  224. package/src/components/PhoneField/PhoneField.vue +5 -6
  225. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  226. package/src/components/RangeField/RangeField.vue +6 -0
  227. package/src/components/SyTextArea/SyTextArea.stories.ts +138 -2
  228. package/src/components/SyTextArea/SyTextArea.vue +53 -23
  229. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +126 -3
  230. package/src/components/SyTextArea/useDefaultValidationRules.ts +74 -0
  231. package/src/components/Tables/SyServerTable/SyServerTable.mdx +25 -0
  232. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +673 -1
  233. package/src/components/Tables/SyServerTable/SyServerTable.vue +148 -91
  234. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +58 -0
  235. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +122 -0
  236. package/src/components/Tables/SyTable/SyTable.mdx +25 -0
  237. package/src/components/Tables/SyTable/SyTable.stories.ts +452 -1
  238. package/src/components/Tables/SyTable/SyTable.vue +130 -56
  239. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +57 -0
  240. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +108 -0
  241. package/src/components/Tables/common/SyTableFilter.vue +22 -2
  242. package/src/components/Tables/common/TableHeader.vue +5 -1
  243. package/src/components/Tables/common/filters/AutocompleteFilter.vue +160 -0
  244. package/src/components/Tables/common/filters/NumberFilter.vue +1 -1
  245. package/src/components/Tables/common/filters/SelectFilter.vue +10 -11
  246. package/src/components/Tables/common/filters/TextFilter.vue +1 -1
  247. package/src/components/Tables/common/filters/getFilterComponent.ts +8 -1
  248. package/src/components/Tables/common/filters/locales.ts +0 -1
  249. package/src/components/Tables/common/filters/tests/AutocompleteFilter.a11y.spec.ts +110 -0
  250. package/src/components/Tables/common/filters/tests/AutocompleteFilter.spec.ts +203 -0
  251. package/src/components/Tables/common/filters/tests/SelectFilter.a11y.spec.ts +104 -0
  252. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +152 -16
  253. package/src/components/Tables/common/tableFilterUtils.ts +3 -0
  254. package/src/components/Tables/common/tableStyles.scss +48 -4
  255. package/src/components/Tables/common/tests/filterByRange.spec.ts +2 -1
  256. package/src/components/Tables/common/types.ts +13 -4
  257. package/src/components/Tables/common/useClickableTableRow.ts +103 -0
  258. package/src/components/Tables/common/usePagination.ts +13 -0
  259. package/src/components/Tables/common/usePinnedColumns.ts +237 -0
  260. package/src/components/Tables/common/useTableHeaders.ts +3 -3
  261. package/src/components/Tables/common/useTableRowCheckboxAccessibility.ts +41 -0
  262. package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +2 -6
  263. package/src/composables/date/useDatePickerAccessibility.ts +42 -207
  264. package/src/composables/rules/tests/useFieldValidation.spec.ts +120 -120
  265. package/src/composables/rules/useFieldValidation.ts +34 -17
  266. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +601 -0
  267. package/src/composables/unifyValidation/tests/useValidation.spec.ts +2048 -0
  268. package/src/composables/unifyValidation/tests/useVuetifyValidation.spec.ts +184 -0
  269. package/src/composables/unifyValidation/useCustomValidation.ts +95 -0
  270. package/src/composables/unifyValidation/useValidation.ts +190 -0
  271. package/src/composables/unifyValidation/useVuetifyValidation.ts +54 -0
  272. package/src/composables/useFormFieldErrorHandling.ts +4 -7
  273. package/src/composables/validation/tests/useFormValidation.spec.ts +14 -0
  274. package/src/composables/validation/tests/useValidation.spec.ts +116 -21
  275. package/src/composables/validation/useFormValidation.ts +20 -13
  276. package/src/composables/validation/useValidatable.ts +8 -1
  277. package/src/composables/validation/useValidation.ts +135 -99
  278. package/src/composantsVuetify/Introduction.mdx +48 -0
  279. package/src/composantsVuetify/VBtn/VBtn.mdx +72 -0
  280. package/src/composantsVuetify/VBtn/v-btn.stories.ts +121 -0
  281. package/src/composantsVuetify/VTooltip/VTooltip.mdx +32 -0
  282. package/src/composantsVuetify/VTooltip/v-tooltip.stories.ts +95 -0
  283. package/src/designTokens/tokens/cnam/cnamSemantic.ts +2 -2
  284. package/src/main.ts +0 -2
  285. package/src/stories/Components/Components.stories.ts +74 -9
  286. package/src/stories/Demarrer/Accueil.stories.ts +3 -3
  287. package/src/stories/GuideDuDev/Amelipro.mdx +15 -0
  288. package/src/stories/GuideDuDev/Amelipro.stories.ts +209 -0
  289. package/src/stories/GuideDuDev/vuetifyOptions.mdx +3 -3
  290. package/dist/SelectFilter-BioGT6Nn.js +0 -136
  291. package/dist/style.css +0 -1
  292. package/src/components/DatePicker/Accessibilite.mdx +0 -14
@@ -11,15 +11,15 @@
11
11
  mdiAlertCircle,
12
12
  mdiCalendar,
13
13
  } from '@mdi/js'
14
- import { computed, onMounted, ref, watch, nextTick, useAttrs, type ComponentPublicInstance } from 'vue'
14
+ import { computed, onMounted, ref, watch, nextTick, useAttrs, type ComponentPublicInstance, toRef } from 'vue'
15
15
  import type { IconType, VariantStyle, ColorType } from '@/types/vuetifyTypes'
16
- import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
17
- import { useValidatable } from '@/composables/validation/useValidatable'
18
16
  import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
17
+ import type { ValidationRule } from '@/composables/validation/useValidation'
18
+ import { useValidation, validationPropsDefaults, type FieldValidationProps } from '@/composables/unifyValidation/useValidation'
19
19
 
20
20
  const props = withDefaults(
21
21
  defineProps<{
22
- modelValue?: string | number | null
22
+ modelValue?: string | number | null | undefined
23
23
  prependIcon?: IconType
24
24
  appendIcon?: IconType
25
25
  prependInnerIcon?: IconType
@@ -32,10 +32,6 @@
32
32
  isClearable?: boolean
33
33
  showDivider?: boolean
34
34
  label?: string
35
- required?: boolean
36
- errorMessages?: string[] | null
37
- warningMessages?: string[] | null
38
- successMessages?: string[] | null
39
35
  readonly?: boolean
40
36
  isActive?: boolean
41
37
  baseColor?: string
@@ -56,7 +52,6 @@
56
52
  hint?: string
57
53
  id?: string
58
54
  loading?: string | boolean
59
- maxErrors?: string | number
60
55
  maxWidth?: string | number
61
56
  messages?: string | string[]
62
57
  minWidth?: string | number
@@ -70,9 +65,6 @@
70
65
  isReversed?: boolean
71
66
  role?: string
72
67
  rounded?: string | number | boolean
73
- hasError?: boolean
74
- hasWarning?: boolean
75
- hasSuccess?: boolean
76
68
  isOnSingleLine?: boolean
77
69
  suffix?: string
78
70
  theme?: string
@@ -81,18 +73,12 @@
81
73
  width?: string | number
82
74
  displayAsterisk?: boolean
83
75
  noIcon?: boolean
84
- customRules?: ValidationRule[]
85
- customWarningRules?: ValidationRule[]
86
- customSuccessRules?: ValidationRule[]
87
- showSuccessMessages?: boolean
88
- isValidateOnBlur?: boolean
89
- disableErrorHandling?: boolean
90
76
  disableClickButton?: boolean
91
77
  autocomplete?: string
92
78
  helpText?: string
93
79
  maxlength?: string | number
94
80
  title?: string | false
95
- }>(),
81
+ } & FieldValidationProps>(),
96
82
  {
97
83
  modelValue: undefined,
98
84
  prependIcon: undefined,
@@ -105,10 +91,6 @@
105
91
  variantStyle: 'outlined',
106
92
  color: 'primary',
107
93
  label: '',
108
- errorMessages: null,
109
- warningMessages: null,
110
- successMessages: null,
111
- readonly: false,
112
94
  isClearable: false,
113
95
  isActive: false,
114
96
  baseColor: undefined,
@@ -119,7 +101,6 @@
119
101
  density: 'default',
120
102
  direction: 'horizontal',
121
103
  isDirty: false,
122
- disabled: false,
123
104
  isOnError: false,
124
105
  isFlat: false,
125
106
  isFocused: false,
@@ -128,13 +109,10 @@
128
109
  hint: undefined,
129
110
  id: undefined,
130
111
  loading: false,
131
- maxErrors: undefined,
132
112
  maxWidth: undefined,
133
113
  messages: undefined,
134
114
  minWidth: undefined,
135
115
  name: undefined,
136
- hasError: false,
137
- hasWarning: false,
138
116
  displayPersistentClear: false,
139
117
  displayPersistentCounter: false,
140
118
  displayPersistentHint: false,
@@ -152,17 +130,12 @@
152
130
  width: undefined,
153
131
  displayAsterisk: false,
154
132
  noIcon: false,
155
- customRules: () => [],
156
- customWarningRules: () => [],
157
- customSuccessRules: () => [],
158
- showSuccessMessages: true,
159
- isValidateOnBlur: true,
160
- disableErrorHandling: false,
161
133
  disableClickButton: true,
162
134
  autocomplete: 'off',
163
135
  helpText: '',
164
136
  maxlength: undefined,
165
137
  title: undefined,
138
+ ...validationPropsDefaults,
166
139
  },
167
140
  )
168
141
 
@@ -182,8 +155,35 @@
182
155
  'clear',
183
156
  'prepend-icon-click',
184
157
  'append-icon-click',
158
+ 'focus',
159
+ 'blur',
185
160
  ])
186
161
 
162
+ const NUMBER_ALLOWED_CHARACTERS_PATTERN = /[^0-9eE+.-]/g
163
+ const NUMBER_ALLOWED_SINGLE_CHARACTER_PATTERN = /^[0-9eE+.-]$/
164
+ const TEL_ALLOWED_CHARACTERS_PATTERN = /[^0-9+().\-\s]/g
165
+ const TEL_ALLOWED_SINGLE_CHARACTER_PATTERN = /^[0-9+().\-\s]$/
166
+
167
+ const sanitizeNumberValue = (value: string | number | null | undefined) => {
168
+ if (props.type !== 'number' || typeof value !== 'string') {
169
+ return value
170
+ }
171
+
172
+ return value.replace(NUMBER_ALLOWED_CHARACTERS_PATTERN, '')
173
+ }
174
+
175
+ const sanitizeTelValue = (value: string | number | null | undefined) => {
176
+ if (props.type !== 'tel' || typeof value !== 'string') {
177
+ return value
178
+ }
179
+
180
+ return value.replace(TEL_ALLOWED_CHARACTERS_PATTERN, '')
181
+ }
182
+
183
+ const sanitizeTypedValue = (value: string | number | null | undefined) => {
184
+ return sanitizeTelValue(sanitizeNumberValue(value))
185
+ }
186
+
187
187
  const lastEmittedModelValue = ref(props.modelValue)
188
188
 
189
189
  const model = computed({
@@ -191,12 +191,51 @@
191
191
  return props.modelValue
192
192
  },
193
193
  set(value) {
194
- emit('update:modelValue', value)
195
- lastEmittedModelValue.value = value
194
+ const sanitizedValue = sanitizeTypedValue(value)
195
+ emit('update:modelValue', sanitizedValue)
196
+ lastEmittedModelValue.value = sanitizedValue
196
197
  },
197
198
  })
198
199
 
199
200
  const attrs = useAttrs()
201
+ const focused = ref(false)
202
+ // Construction des règles de validation
203
+ const defaultRules = computed<ValidationRule[]>(() => props.required
204
+ ? [{
205
+ type: 'required',
206
+ options: {
207
+ message: `Le champ ${props.label || 'ce champ'} est requis.`,
208
+ fieldIdentifier: props.label,
209
+ },
210
+ }]
211
+ : [],
212
+ )
213
+ const { validate, errors, warnings, successes, hasError, hasWarning, hasSuccess } = useValidation({
214
+ modelValue: model,
215
+ readonly: toRef(props, 'readonly'),
216
+ disabled: toRef(props, 'disabled'),
217
+ required: toRef(props, 'required'),
218
+ isValidateOnBlur: toRef(props, 'isValidateOnBlur'),
219
+ showSuccessMessages: toRef(props, 'showSuccessMessages'),
220
+ disableErrorHandling: toRef(props, 'disableErrorHandling'),
221
+ useVuetifyValidation: toRef(props, 'useVuetifyValidation'),
222
+ label: toRef(props, 'label'),
223
+ rules: toRef(props, 'rules'),
224
+ customRules: computed(() => {
225
+ const customRules = props.customRules ? props.customRules : []
226
+ return [...defaultRules.value, ...customRules]
227
+ }),
228
+ customWarningRules: toRef(props, 'customWarningRules'),
229
+ customSuccessRules: toRef(props, 'customSuccessRules'),
230
+ errorMessages: toRef(props, 'errorMessages'),
231
+ warningMessages: toRef(props, 'warningMessages'),
232
+ successMessages: toRef(props, 'successMessages'),
233
+ hasErrorProp: toRef(props, 'hasError'),
234
+ hasWarningProp: toRef(props, 'hasWarning'),
235
+ hasSuccessProp: toRef(props, 'hasSuccess'),
236
+ maxErrors: toRef(props, 'maxErrors'),
237
+ focused: focused,
238
+ })
200
239
 
201
240
  const forwardedAttrs = computed(() => {
202
241
  const filteredAttrs = Object.fromEntries(
@@ -215,8 +254,6 @@
215
254
  return filteredAttrs
216
255
  })
217
256
 
218
- const isBlurred = ref(false)
219
-
220
257
  const showClear = computed(() => {
221
258
  if (!props.isClearable) return false
222
259
  if (props.disabled) return false
@@ -227,102 +264,12 @@
227
264
  model.value = ''
228
265
  }
229
266
 
230
- // Initialisation du composable de validation
231
- const validation = useValidation({
232
- customRules: props.customRules,
233
- warningRules: props.customWarningRules,
234
- successRules: props.customSuccessRules,
235
- showSuccessMessages: props.showSuccessMessages,
236
- fieldIdentifier: props.label,
237
- disableErrorHandling: props.disableErrorHandling,
238
- })
239
-
240
- // Synchronisation des messages externes
241
- watch(() => props.errorMessages, (newVal) => {
242
- validation.errors.value = newVal || []
243
- }, { immediate: true })
244
-
245
- watch(() => props.warningMessages, (newVal) => {
246
- validation.warnings.value = newVal || []
247
- }, { immediate: true })
248
-
249
- watch(() => props.successMessages, (newVal) => {
250
- validation.successes.value = newVal || []
251
- }, { immediate: true })
252
-
253
- // Construction des règles de validation
254
- const defaultRules = computed<ValidationRule[]>(() => props.required
255
- ? [{
256
- type: 'required',
257
- options: {
258
- message: `Le champ ${props.label || 'ce champ'} est requis.`,
259
- fieldIdentifier: props.label,
260
- },
261
- }]
262
- : [],
263
- )
264
-
265
- // Check if customRules contains a 'required' rule
266
- const hasCustomRequiredRule = () => {
267
- return props.customRules.some(rule => rule.type === 'required')
268
- }
269
-
270
- const validateField = (value: string | number | null) => {
271
- if (props.readonly) {
272
- validation.clearValidation()
273
- return true
274
- }
275
-
276
- // Don't short-circuit if a custom required rule exists
277
- if (!value && !props.required && !hasCustomRequiredRule()) {
278
- validation.clearValidation()
279
- return true
280
- }
281
-
282
- const result = validation.validateField(
283
- value,
284
- [...defaultRules.value, ...props.customRules],
285
- props.customWarningRules,
286
- )
287
-
288
- return !result.hasError
289
- }
290
-
291
- const validateOnSubmit = () => {
292
- isBlurred.value = true
293
- return validateField(model.value ?? null)
294
- }
295
-
296
- const checkErrorOnBlur = () => {
297
- isBlurred.value = true
298
- validateField(model.value ?? null)
299
- if (model.value !== lastEmittedModelValue.value) {
300
- emit('update:modelValue', model.value)
301
- lastEmittedModelValue.value = model.value
302
- }
303
- }
304
-
305
267
  watch(model, (newValue) => {
306
- if (!props.isValidateOnBlur) {
307
- validateField(newValue ?? null)
308
- }
309
268
  if (props.isClearable && newValue === '') {
310
269
  emit('clear')
311
270
  }
312
271
  })
313
272
 
314
- const hasError = computed(() =>
315
- validation.hasError.value
316
- || (props.errorMessages?.length ?? 0) > 0
317
- || props.hasError,
318
- )
319
- const hasWarning = computed(() => validation.hasWarning.value || props.hasWarning)
320
- const hasSuccess = computed(() => ((validation.hasSuccess.value && !hasError.value && !hasWarning.value) || props.hasSuccess) && props.showSuccessMessages)
321
-
322
- const errors = computed(() => [...validation.errors.value, ...(props.errorMessages || [])])
323
- const warnings = computed(() => validation.warnings.value)
324
- const successes = computed(() => validation.successes.value)
325
-
326
273
  const iconColor = computed(() => {
327
274
  if (hasError.value) return 'error'
328
275
  if (hasWarning.value) return 'warning'
@@ -338,6 +285,66 @@
338
285
  emit('append-icon-click')
339
286
  }
340
287
 
288
+ const handleInput = (event: Event) => {
289
+ if (props.type === 'number' || props.type === 'tel') {
290
+ const target = event.target as HTMLInputElement | null
291
+
292
+ if (target) {
293
+ const sanitizedValue = sanitizeTypedValue(target.value)
294
+ if (typeof sanitizedValue === 'string' && target.value !== sanitizedValue) {
295
+ target.value = sanitizedValue
296
+ }
297
+ }
298
+ }
299
+
300
+ emit('input', event)
301
+ }
302
+
303
+ const handleBeforeInput = (event: InputEvent) => {
304
+ if (props.type !== 'number' && props.type !== 'tel') {
305
+ return
306
+ }
307
+
308
+ if (!event.data) {
309
+ return
310
+ }
311
+
312
+ const allowedPattern = props.type === 'number'
313
+ ? NUMBER_ALLOWED_SINGLE_CHARACTER_PATTERN
314
+ : TEL_ALLOWED_SINGLE_CHARACTER_PATTERN
315
+
316
+ if (!allowedPattern.test(event.data)) {
317
+ event.preventDefault()
318
+ }
319
+ }
320
+
321
+ const handleKeydown = (event: KeyboardEvent) => {
322
+ if ((props.type === 'number' || props.type === 'tel') && !event.ctrlKey && !event.metaKey && !event.altKey) {
323
+ const allowedNonCharacterKeys = [
324
+ 'Backspace',
325
+ 'Delete',
326
+ 'Tab',
327
+ 'Escape',
328
+ 'Enter',
329
+ 'ArrowLeft',
330
+ 'ArrowRight',
331
+ 'ArrowUp',
332
+ 'ArrowDown',
333
+ 'Home',
334
+ 'End',
335
+ ]
336
+ const allowedPattern = props.type === 'number'
337
+ ? NUMBER_ALLOWED_SINGLE_CHARACTER_PATTERN
338
+ : TEL_ALLOWED_SINGLE_CHARACTER_PATTERN
339
+
340
+ if (!allowedNonCharacterKeys.includes(event.key) && event.key.length === 1 && !allowedPattern.test(event.key)) {
341
+ event.preventDefault()
342
+ }
343
+ }
344
+
345
+ emit('keydown', event)
346
+ }
347
+
341
348
  const validationIcon = computed(() => {
342
349
  if (hasError.value) return ICONS['error']
343
350
  if (hasWarning.value) return ICONS['warning']
@@ -402,9 +409,6 @@
402
409
 
403
410
  const syTextFieldRef = ref<ComponentPublicInstance | null>(null)
404
411
 
405
- // Intégration avec le système de validation du formulaire
406
- useValidatable(validateOnSubmit, validation.clearValidation)
407
-
408
412
  onMounted(() => {
409
413
  nextTick(() => {
410
414
  const removeSvgRole = () => {
@@ -596,9 +600,7 @@
596
600
  })
597
601
 
598
602
  defineExpose({
599
- validation,
600
- validateOnSubmit,
601
- checkErrorOnBlur,
603
+ validateOnSubmit: validate,
602
604
  })
603
605
  </script>
604
606
 
@@ -652,6 +654,7 @@
652
654
  :theme="props.theme"
653
655
  :tile="props.isTiled"
654
656
  :type="props.type"
657
+ :inputmode="props.type === 'number' ? 'decimal' : (props.type === 'tel' ? 'tel' : undefined)"
655
658
  :variant="props.variantStyle"
656
659
  :width="props.width"
657
660
  v-bind="forwardedAttrs"
@@ -661,9 +664,11 @@
661
664
  'success-field': hasSuccess,
662
665
  'basic-field': !hasError && !hasWarning && !hasSuccess
663
666
  }"
664
- @blur="checkErrorOnBlur"
665
- @input="(e: Event) => emit('input', e)"
666
- @keydown="(e: KeyboardEvent) => emit('keydown', e)"
667
+ @focus="focused = true; emit('focus')"
668
+ @blur="focused = false; emit('blur')"
669
+ @beforeinput="handleBeforeInput"
670
+ @input="handleInput"
671
+ @keydown="handleKeydown"
667
672
  >
668
673
  <!-- Prepend -->
669
674
  <template
@@ -826,14 +831,6 @@
826
831
  </template>
827
832
 
828
833
  <style lang="scss" scoped>
829
- @use '@/assets/tokens';
830
-
831
- // :deep(.v-field__input input::placeholder),
832
- // :deep(input.v-field__input::placeholder),
833
- // :deep(textarea.v-field__input::placeholder) {
834
- // opacity: 0;
835
- // }
836
-
837
834
  .sy-textfield-container {
838
835
  display: flex;
839
836
  flex-direction: column;
@@ -848,14 +845,14 @@
848
845
  }
849
846
 
850
847
  :deep(.v-icon__svg) {
851
- fill: tokens.$colors-text-warning !important;
848
+ fill: rgb(var(--v-theme-textWarning)) !important;
852
849
  }
853
850
 
854
851
  :deep(.v-field) {
855
- color: tokens.$colors-border-warning !important;
852
+ color: rgb(var(--v-theme-borderWarning)) !important;
856
853
 
857
854
  .v-field__outline {
858
- color: tokens.$colors-border-warning !important;
855
+ color: rgb(var(--v-theme-borderWarning)) !important;
859
856
  }
860
857
  }
861
858
 
@@ -863,7 +860,7 @@
863
860
  opacity: 1 !important;
864
861
 
865
862
  .v-messages__message {
866
- color: tokens.$colors-border-warning !important;
863
+ color: rgb(var(--v-theme-borderWarning)) !important;
867
864
  }
868
865
  }
869
866
  }
@@ -876,10 +873,10 @@
876
873
  }
877
874
 
878
875
  :deep(.v-field) {
879
- color: tokens.$colors-border-error !important;
876
+ color: rgb(var(--v-theme-borderError)) !important;
880
877
 
881
878
  .v-field__outline {
882
- color: tokens.$colors-border-error !important;
879
+ color: rgb(var(--v-theme-borderError)) !important;
883
880
  }
884
881
  }
885
882
 
@@ -887,7 +884,7 @@
887
884
  opacity: 1 !important;
888
885
 
889
886
  .v-messages__message {
890
- color: tokens.$colors-border-error !important;
887
+ color: rgb(var(--v-theme-borderError)) !important;
891
888
  }
892
889
  }
893
890
  }
@@ -900,16 +897,16 @@
900
897
  }
901
898
 
902
899
  :deep(.v-icon__svg) {
903
- fill: tokens.$colors-text-success !important;
900
+ fill: rgb(var(--v-theme-textSuccess)) !important;
904
901
  }
905
902
 
906
903
  :deep(.v-field) {
907
- color: tokens.$colors-border-success !important;
904
+ color: rgb(var(--v-theme-borderSuccess)) !important;
908
905
 
909
906
  --v-medium-emphasis-opacity: 1;
910
907
 
911
908
  .v-field__outline {
912
- color: tokens.$colors-border-success !important;
909
+ color: rgb(var(--v-theme-borderSuccess)) !important;
913
910
  }
914
911
  }
915
912
 
@@ -917,7 +914,7 @@
917
914
  opacity: 1 !important;
918
915
 
919
916
  .v-messages__message {
920
- color: tokens.$colors-border-success !important;
917
+ color: rgb(var(--v-theme-borderSuccess)) !important;
921
918
  }
922
919
  }
923
920
  }
@@ -928,13 +925,13 @@
928
925
  }
929
926
 
930
927
  :deep(.v-field--focused .v-field__outline) {
931
- color: tokens.$primary-base !important;
928
+ color: rgb(var(--v-theme-accentPrimary)) !important;
932
929
  opacity: 1 !important;
933
930
  }
934
931
 
935
932
  :deep(.v-input__prepend .v-icon:focus-visible),
936
933
  :deep(.v-input__append .v-icon:focus-visible) {
937
- outline: 2px solid tokens.$primary-base;
934
+ outline: 2px solid rgb(var(--v-theme-accentPrimary));
938
935
  outline-offset: 2px;
939
936
  opacity: 1;
940
937
  }
@@ -39,4 +39,36 @@ describe('SyTextField – accessibility (axe)', () => {
39
39
  ignoreRules: ['region'],
40
40
  })
41
41
  })
42
+
43
+ it('has no obvious axe violations for number input', async () => {
44
+ const wrapper = mount(SyTextField, {
45
+ props: {
46
+ label: 'Montant',
47
+ modelValue: '12.5',
48
+ type: 'number',
49
+ helpText: 'Saisissez un montant numerique',
50
+ },
51
+ })
52
+
53
+ const results = await axe(wrapper.element as HTMLElement)
54
+ assertNoA11yViolations(results, 'SyTextField – number input', {
55
+ ignoreRules: ['region'],
56
+ })
57
+ })
58
+
59
+ it('has no obvious axe violations for tel input', async () => {
60
+ const wrapper = mount(SyTextField, {
61
+ props: {
62
+ label: 'Telephone',
63
+ modelValue: '+33 1 23 45 67 89',
64
+ type: 'tel',
65
+ helpText: 'Saisissez un numero de telephone',
66
+ },
67
+ })
68
+
69
+ const results = await axe(wrapper.element as HTMLElement)
70
+ assertNoA11yViolations(results, 'SyTextField – tel input', {
71
+ ignoreRules: ['region'],
72
+ })
73
+ })
42
74
  })