@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
@@ -0,0 +1,30 @@
1
+ import { type ValidationRule } from '@/composables/validation/useValidation'
2
+ import { computed } from 'vue'
3
+
4
+ export type ValidationProps = {
5
+ customRules?: ValidationRule[]
6
+ customWarningRules?: ValidationRule[]
7
+ customSuccessRules?: ValidationRule[]
8
+ errorMessages?: string[] | null
9
+ warningMessages?: string[] | null
10
+ successMessages?: string[] | null
11
+ hasError?: boolean
12
+ hasWarning?: boolean
13
+ hasSuccess?: boolean
14
+ showSuccessMessages?: boolean
15
+ }
16
+
17
+ export function useMonthPickerValidation(props: ValidationProps) {
18
+ return computed(() => ({
19
+ customRules: props.customRules,
20
+ customWarningRules: props.customWarningRules,
21
+ customSuccessRules: props.customSuccessRules,
22
+ errorMessages: props.errorMessages,
23
+ warningMessages: props.warningMessages,
24
+ successMessages: props.successMessages,
25
+ hasError: props.hasError,
26
+ hasWarning: props.hasWarning,
27
+ hasSuccess: props.hasSuccess,
28
+ showSuccessMessages: props.showSuccessMessages,
29
+ }))
30
+ }
@@ -65,8 +65,7 @@ import NirField from './NirField.vue';
65
65
 
66
66
  Le composant `NirField` utilise des règles de validation par défaut pour le numéro NIR et la Clé. Voici les règles de validation par défaut :
67
67
 
68
- #### Pour le numéro NIR :
69
-
68
+ <h4 id="ancre-nirtype">Pour le numéro NIR</h4>
70
69
  - Props: `nirType` à simple (par defaut) d'après le [repo](https://github.com/assurance-maladie-digital/nir-validation) :
71
70
 
72
71
  - Le 1er chiffre (1er composant) permet d'identifier le sexe de l'assuré (1 pour un homme et 2 pour une femme) ;
@@ -878,9 +878,6 @@ export const WithNirTooltip: Story = {
878
878
  nirTooltipPosition: 'prepend',
879
879
  },
880
880
  parameters: {
881
- a11y: {
882
- disable: true,
883
- },
884
881
  docs: {
885
882
  description: {
886
883
  story: `
@@ -929,9 +926,6 @@ export const WithKeyTooltip: Story = {
929
926
  keyTooltipPosition: 'append',
930
927
  },
931
928
  parameters: {
932
- a11y: {
933
- disable: true,
934
- },
935
929
  docs: {
936
930
  description: {
937
931
  story: `
@@ -1338,6 +1332,10 @@ export const WithCustomLocale: Story = {
1338
1332
  required: true,
1339
1333
  showSuccessMessages: true,
1340
1334
  customLocale: {
1335
+ numberLabel: 'Numéro de sécurité sociale',
1336
+ keyLabel: 'Clé',
1337
+ numberHint: '',
1338
+ keyHint: '',
1341
1339
  errorRequiredNumber: 'Veuillez renseigner votre numéro de sécurité sociale (13 caractères).',
1342
1340
  errorInvalidNumber: 'Format NIR non reconnu, merci de vérifier.',
1343
1341
  errorRequiredKey: 'La clé (2 chiffres) est requise.',
@@ -1394,4 +1392,70 @@ const value = ref('')
1394
1392
  },
1395
1393
  ],
1396
1394
  },
1395
+
1396
+ }
1397
+
1398
+ export const ComplexNirType: Story = {
1399
+ args: {
1400
+ modelValue: '712125233333340',
1401
+ required: false,
1402
+ numberLabel: 'Numéro de sécurité sociale',
1403
+ keyLabel: 'Clé',
1404
+ displayKey: true,
1405
+ nirType: 'complexe',
1406
+ },
1407
+ parameters: {
1408
+ sourceCode: [
1409
+ {
1410
+ name: 'Template',
1411
+ code: `
1412
+ <template>
1413
+ <NirField
1414
+ v-model="value"
1415
+ :required="false"
1416
+ numberLabel="Numéro de sécurité sociale"
1417
+ keyLabel="Clé"
1418
+ :nirType="complexe"
1419
+ :displayKey="true"
1420
+ />
1421
+ </template>
1422
+ `,
1423
+ },
1424
+ {
1425
+ name: 'Script',
1426
+ code: `
1427
+ <script setup lang="ts">
1428
+ import { NirField } from '@cnamts/synapse'
1429
+ import { ref } from 'vue'
1430
+
1431
+ const value = ref('184027512345674')
1432
+
1433
+ return { value }
1434
+ </script>
1435
+ `,
1436
+ },
1437
+ ],
1438
+ },
1439
+ render: () => ({
1440
+ components: { NirField },
1441
+ setup() {
1442
+ const value = ref('712125233333340')
1443
+
1444
+ return { value }
1445
+ },
1446
+ template: `
1447
+ <div>
1448
+ <p class="mt-2">Cet exemple montre l'utilisation d'un NIR de type complexe<br/>(commençant par 7).</p>
1449
+ <p class="mb-4">Pour plus d'informations sur le NirType voir la <a href="/?path=/docs/composants-formulaires-nirfield--docs#ancre-nirtype">documentation</a>.</p>
1450
+ </div>
1451
+ <NirField
1452
+ v-model="value"
1453
+ :required="false"
1454
+ numberLabel="Numéro de sécurité sociale"
1455
+ keyLabel="Clé"
1456
+ nirType="complexe"
1457
+ :displayKey="true"
1458
+ />
1459
+ `,
1460
+ }),
1397
1461
  }
@@ -1,11 +1,10 @@
1
1
  <script lang="ts" setup>
2
2
  import { ref, watch, computed, nextTick, toRef, onMounted, useId, onBeforeUnmount } from 'vue'
3
3
  import { vMaska } from 'maska/vue'
4
- import { checkNIR, isNIRKeyValid } from './nirValidation'
5
4
  import SyTextField from '../Customs/SyTextField/SyTextField.vue'
6
5
  import { locales } from './locales'
7
- import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
8
- import { useValidatable } from '@/composables/validation/useValidatable'
6
+ import { useValidation } from '@/composables/unifyValidation/useValidation'
7
+ import { useNirValidation, type NirValidationProps } from './useNirValidation'
9
8
 
10
9
  const props = withDefaults(defineProps<{
11
10
  modelValue?: string | undefined | null
@@ -17,22 +16,13 @@
17
16
  keyTooltip?: string
18
17
  nirTooltipPosition?: 'prepend' | 'append'
19
18
  keyTooltipPosition?: 'prepend' | 'append'
20
- required?: boolean
21
19
  displayAsterisk?: boolean
22
- customNumberRules?: ValidationRule[]
23
- customKeyRules?: ValidationRule[]
24
- customNumberWarningRules?: ValidationRule[]
25
- customKeyWarningRules?: ValidationRule[]
26
- customRulesPrecedence?: boolean
27
- showSuccessMessages?: boolean
28
20
  width?: string
29
21
  bgColor?: string
30
- disabled?: boolean
31
22
  density?: 'default' | 'comfortable' | 'compact'
32
23
  hideDetails?: boolean | 'auto'
33
24
  hideSpinButtons?: boolean
34
25
  placeholder?: string
35
- readonly?: boolean
36
26
  variant?: 'filled' | 'outlined' | 'plain' | 'underlined' | 'solo'
37
27
  clearable?: boolean
38
28
  counter?: boolean | number | string
@@ -43,14 +33,15 @@
43
33
  disableErrorHandling?: boolean
44
34
  nirType?: 'simple' | 'complexe'
45
35
  withoutFieldset?: boolean
46
- customLocale?: Partial<Record<keyof typeof locales, string>>
47
- }>(), {
36
+ customLocale?: Record<keyof typeof locales, string>
37
+ } & NirValidationProps>(), {
48
38
  modelValue: undefined,
49
39
  label: 'Identifiant d\'assuré',
50
40
  numberLabel: 'Numéro de sécurité sociale',
51
41
  keyLabel: 'Clé de validation',
52
42
  displayKey: true,
53
43
  nirTooltip: undefined,
44
+ keyRules: () => [],
54
45
  keyTooltip: undefined,
55
46
  nirTooltipPosition: 'append',
56
47
  keyTooltipPosition: 'append',
@@ -68,6 +59,7 @@
68
59
  density: 'default',
69
60
  hideDetails: false,
70
61
  hideSpinButtons: false,
62
+ isValidateOnBlur: true,
71
63
  placeholder: undefined,
72
64
  readonly: false,
73
65
  variant: 'outlined',
@@ -78,16 +70,10 @@
78
70
  persistentHint: false,
79
71
  persistentPlaceholder: false,
80
72
  disableErrorHandling: false,
73
+ numberRules: () => [],
81
74
  nirType: 'simple',
82
75
  withoutFieldset: false,
83
- customLocale: () => ({
84
- errorRequiredNumber: locales.errorRequiredNumber,
85
- errorInvalidNumber: locales.errorInvalidNumber,
86
- errorRequiredKey: locales.errorRequiredKey,
87
- errorInvalidKey: locales.errorInvalidKey,
88
- successNumberValid: locales.successNumberValid,
89
- successKeyValid: locales.successKeyValid,
90
- } as Partial<Record<keyof typeof locales, string>>),
76
+ customLocale: () => locales,
91
77
  })
92
78
 
93
79
  const emit = defineEmits(['update:modelValue'])
@@ -187,112 +173,6 @@
187
173
  }
188
174
  })
189
175
 
190
- // Initialisation des validations
191
- const numberValidation = useValidation({
192
- showSuccessMessages: props.showSuccessMessages,
193
- fieldIdentifier: props.numberLabel,
194
- disableErrorHandling: props.disableErrorHandling,
195
- })
196
-
197
- const keyValidation = useValidation({
198
- showSuccessMessages: props.showSuccessMessages,
199
- fieldIdentifier: props.keyLabel,
200
- disableErrorHandling: props.disableErrorHandling,
201
- })
202
-
203
- // Règles de validation
204
- const defaultNumberRules = computed(() => {
205
- const rules: ValidationRule[] = []
206
- if (props.readonly && props.disabled) return
207
- if (props.required) {
208
- rules.push({
209
- type: 'required',
210
- options: {
211
- message: props.customLocale.errorRequiredNumber,
212
- fieldIdentifier: props.numberLabel,
213
- },
214
- })
215
- }
216
-
217
- // Ajout des règles personnalisées avec prévalence si demandé
218
- if (props.customRulesPrecedence && props.customNumberRules && props.customNumberRules.length > 0) {
219
- rules.push(...props.customNumberRules.map(rule => ({
220
- ...rule,
221
- options: rule.options || {},
222
- })))
223
- }
224
-
225
- // Règle de validation standard du NIR
226
- rules.push({
227
- type: 'custom',
228
- options: {
229
- validate: (value: string) => {
230
- if (!value) return true
231
- // Ne valider que si tous les caractères sont saisis
232
- if (value.length < 13) {
233
- return props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
234
- }
235
- const result = checkNIR(value, props.nirType)
236
- return result ? true : props.customLocale.errorInvalidNumber || locales.errorInvalidNumber
237
- },
238
- message: props.customLocale.errorInvalidNumber,
239
- successMessage: props.customLocale.successNumberValid,
240
- fieldIdentifier: props.numberLabel,
241
- },
242
- })
243
-
244
- // Ajout des règles personnalisées sans prévalence (comportement par défaut)
245
- if (!props.customRulesPrecedence && props.customNumberRules && props.customNumberRules.length > 0) {
246
- rules.push(...props.customNumberRules.map(rule => ({
247
- ...rule,
248
- options: rule.options || {},
249
- })))
250
- }
251
-
252
- return rules
253
- })
254
-
255
- const defaultKeyRules = computed(() => {
256
- const rules: ValidationRule[] = []
257
- if (props.readonly && props.disabled) return
258
- if (props.required) {
259
- rules.push({
260
- type: 'required',
261
- options: {
262
- message: props.customLocale.errorRequiredKey,
263
- fieldIdentifier: props.keyLabel,
264
- },
265
- })
266
- }
267
-
268
- const validateKey = (value: string) => {
269
- if (!value) return true
270
- if (!unmaskedNumberValue.value) return true
271
- const fullNir = unmaskedNumberValue.value + value
272
- return isNIRKeyValid(fullNir)
273
- }
274
-
275
- // Ajout des règles personnalisées
276
- if (props.customKeyRules) {
277
- rules.push(...props.customKeyRules)
278
- }
279
-
280
- // Ajout de la règle de validation par défaut si pas de règle personnalisée avec validation de clé
281
- if (!props.customKeyRules?.some(rule => rule.options.validate)) {
282
- rules.push({
283
- type: 'custom',
284
- options: {
285
- validate: validateKey,
286
- message: props.customLocale.errorInvalidKey,
287
- successMessage: props.customLocale.successKeyValid,
288
- fieldIdentifier: props.keyLabel,
289
- },
290
- })
291
- }
292
-
293
- return rules
294
- })
295
-
296
176
  // Synchronisation avec modelValue
297
177
  watch(modelValueRef, (newValue) => {
298
178
  // Ignorer les mises à jour internes pour éviter les boucles infinies
@@ -343,80 +223,48 @@
343
223
  })
344
224
  }
345
225
 
346
- // État pour suivre si une validation est en cours
347
- const isValidating = ref(false)
348
- const shouldValidateOnBlur = ref(false)
349
-
350
- // Fonction utilitaire pour créer une fonction debounced
351
- const createDebouncedFunction = <T extends (...args: unknown[]) => void>(fn: T, delay: number) => {
352
- let timeout: number | undefined
353
- return (...args: Parameters<T>) => {
354
- window.clearTimeout(timeout)
355
- timeout = window.setTimeout(() => fn(...args), delay)
356
- }
357
- }
358
-
359
- // Validation des champs
360
- const validateFields = async (onBlur = false) => {
361
- // Éviter les validations redondantes
362
- if (isValidating.value) {
363
- shouldValidateOnBlur.value = shouldValidateOnBlur.value || onBlur
364
- return true
365
- }
366
-
367
- isValidating.value = true
368
-
369
- // Valider le numéro
370
- const numberResult = numberValidation.validateField(
371
- unmaskedNumberValue.value,
372
- defaultNumberRules.value,
373
- // N'appliquer les warnings que si le numéro est complet
374
- unmaskedNumberValue.value?.length === 13 ? props.customNumberWarningRules : [],
375
- )
376
-
377
- // Valider la clé si elle est affichée
378
- let keyResult = { hasError: false }
379
- if (props.displayKey) {
380
- keyResult = keyValidation.validateField(
381
- keyValue.value,
382
- defaultKeyRules.value,
383
- // N'appliquer les warnings que si la clé est complète
384
- keyValue.value?.length === 2 ? props.customKeyWarningRules : [],
385
- )
386
- }
387
-
388
- // Si on est en mode blur et qu'il y a des erreurs, focus sur le premier champ en erreur
389
- if (onBlur || shouldValidateOnBlur.value) {
390
- await nextTick()
391
- if (numberResult.hasError) {
392
- numberField.value?.$el?.querySelector?.('input')?.focus()
393
- }
394
- else if (keyResult.hasError) {
395
- keyField.value?.$el?.querySelector?.('input')?.focus()
396
- }
397
- shouldValidateOnBlur.value = false
398
- }
399
-
400
- isValidating.value = false
401
- return !numberResult.hasError && !keyResult.hasError
402
- }
226
+ const {
227
+ numberValidation,
228
+ keyValidation,
229
+ validateFields,
230
+ hasFieldErrors,
231
+ } = useNirValidation(
232
+ numberValue,
233
+ keyValue,
234
+ unmaskedNumberValue,
235
+ unmaskedKeyValue,
236
+ toRef(props, 'readonly'),
237
+ toRef(props, 'disabled'),
238
+ toRef(props, 'required'),
239
+ numberField,
240
+ keyField,
241
+ toRef(props, 'customLocale'),
242
+ toRef(props, 'numberLabel'),
243
+ toRef(props, 'keyLabel'),
244
+ toRef(props, 'customNumberRules'),
245
+ toRef(props, 'customKeyRules'),
246
+ toRef(props, 'customNumberWarningRules'),
247
+ toRef(props, 'customKeyWarningRules'),
248
+ toRef(props, 'displayKey'),
249
+ toRef(props, 'customRulesPrecedence'),
250
+ toRef(props, 'nirType'),
251
+ toRef(props, 'label'),
252
+ toRef(props, 'showSuccessMessages'),
253
+ toRef(props, 'disableErrorHandling'),
254
+ toRef(props, 'isValidateOnBlur'),
255
+ toRef(props, 'useVuetifyValidation'),
256
+ toRef(props, 'numberRules'),
257
+ toRef(props, 'keyRules'),
258
+ )
403
259
 
404
260
  const validateOnSubmit = () => {
405
261
  return validateFields(true)
406
262
  }
407
263
 
408
- const hasNumberErrors = computed(() => numberValidation.hasError.value)
409
- const hasKeyErrors = computed(() => keyValidation.hasError.value)
410
- const hasNumberWarnings = computed(() => numberValidation.hasWarning.value)
411
- const hasKeyWarnings = computed(() => keyValidation.hasWarning.value)
412
- const hasNumberSuccess = computed(() => numberValidation.hasSuccess.value && props.showSuccessMessages)
413
- const hasKeySuccess = computed(() => keyValidation.hasSuccess.value && props.showSuccessMessages)
414
-
415
264
  // Propriétés calculées pour les attributs ARIA et les états d'erreur
416
- const hasFieldErrors = computed(() => hasNumberErrors.value || hasKeyErrors.value)
417
265
  const ariaRequired = computed(() => props.required ? 'true' : undefined)
418
266
  const ariaInvalidNumber = computed(() => hasFieldErrors.value ? 'true' : undefined)
419
- const ariaInvalidKey = computed(() => hasKeyErrors.value ? 'true' : undefined)
267
+ const ariaInvalidKey = computed(() => keyValidation.hasError.value ? 'true' : undefined)
420
268
 
421
269
  const numberLabelWithAsterisk = computed(() => {
422
270
  return props.required && props.displayAsterisk ? `${props.numberLabel} *` : props.numberLabel
@@ -426,21 +274,8 @@
426
274
  return props.required && props.displayAsterisk ? `${props.keyLabel} *` : props.keyLabel
427
275
  })
428
276
 
429
- // Utilisation de debounce pour limiter les validations pendant la saisie
430
- const debouncedValidate = createDebouncedFunction(() => {
431
- validateFields(false)
432
- }, 300) // 300ms de délai
433
-
434
- const handleNumberInput = () => {
435
- emitValue()
436
- // Utiliser la validation debounced pour la saisie
437
- debouncedValidate()
438
- }
439
-
440
277
  const handleKeyInput = () => {
441
278
  emitValue()
442
- // Utiliser la validation debounced pour la saisie
443
- debouncedValidate()
444
279
 
445
280
  // Si on supprime le contenu de la clé, on revient au champ NIR
446
281
  if (props.displayKey && unmaskedKeyValue.value.length === 0) {
@@ -450,18 +285,6 @@
450
285
  }
451
286
  }
452
287
 
453
- const handleNumberBlur = () => {
454
- // Valider sans forcer le focus, pour permettre de quitter le champ
455
- validateFields(false)
456
- // On permet à l'utilisateur de quitter le champ même si la saisie est incomplète
457
- }
458
-
459
- const handleKeyBlur = () => {
460
- // Valider sans forcer le focus, pour permettre de quitter le champ
461
- validateFields(false)
462
- // On permet à l'utilisateur de quitter le champ même si la saisie est incomplète
463
- }
464
-
465
288
  // Gestion des touches pour le champ NIR
466
289
  const handleNumberKeydown = (e: Event) => {
467
290
  const keyEvent = e as KeyboardEvent
@@ -514,25 +337,6 @@
514
337
  }
515
338
  })
516
339
 
517
- // Rendre le composant auto-validable dans un SyForm
518
- useValidatable(
519
- validateOnSubmit,
520
- () => {
521
- try {
522
- numberValidation.clearValidation()
523
- }
524
- catch {
525
- void 0
526
- }
527
- try {
528
- keyValidation.clearValidation()
529
- }
530
- catch {
531
- void 0
532
- }
533
- },
534
- )
535
-
536
340
  defineExpose({
537
341
  validateOnSubmit,
538
342
  numberMask,
@@ -572,13 +376,14 @@
572
376
  :append-icon="nirTooltip && nirTooltipPosition === 'append' ? 'info' : undefined"
573
377
  :prepend-tooltip="nirTooltip && nirTooltipPosition === 'prepend' ? nirTooltip : undefined"
574
378
  :append-tooltip="nirTooltip && nirTooltipPosition === 'append' ? nirTooltip : undefined"
575
- :error="hasNumberErrors"
379
+ :error="numberValidation.errors.value.length > 0"
576
380
  :aria-required="ariaRequired"
577
- :has-error="hasNumberErrors"
578
- :has-warning="hasNumberWarnings"
579
- :has-success="hasNumberSuccess"
381
+ :has-error="numberValidation.hasError.value"
382
+ :has-warning="numberValidation.hasWarning.value"
383
+ :has-success="numberValidation.hasSuccess.value"
580
384
  :aria-invalid="ariaInvalidNumber"
581
385
  :disabled="disabled"
386
+ :disable-error-handling="true"
582
387
  :bg-color="bgColor"
583
388
  :density="props.density"
584
389
  :hide-details="props.hideDetails"
@@ -597,8 +402,7 @@
597
402
  :display-asterisk="false"
598
403
  :aria-describedby="numberFieldErrorId + ' ' + numberFieldWarningId + ' ' + numberFieldSuccessId"
599
404
  :show-success-messages="false"
600
- @input="handleNumberInput"
601
- @blur="handleNumberBlur"
405
+ @input="emitValue"
602
406
  />
603
407
  </div>
604
408
  <div
@@ -619,6 +423,7 @@
619
423
  :disabled="disabled"
620
424
  :bg-color="bgColor"
621
425
  :density="props.density"
426
+ :disable-error-handling="true"
622
427
  :hide-details="props.hideDetails"
623
428
  :hide-spin-buttons="props.hideSpinButtons"
624
429
  :placeholder="props.placeholder"
@@ -629,9 +434,9 @@
629
434
  :persistent-hint="props.persistentHint"
630
435
  :persistent-placeholder="props.persistentPlaceholder"
631
436
  :aria-required="ariaRequired"
632
- :has-error="hasKeyErrors"
633
- :has-warning="hasKeyWarnings"
634
- :has-success="hasKeySuccess"
437
+ :has-error="keyValidation.hasError.value"
438
+ :has-warning="keyValidation.hasWarning.value"
439
+ :has-success="keyValidation.hasSuccess.value"
635
440
  :aria-invalid="ariaInvalidKey"
636
441
  class="key-field"
637
442
  :class="{
@@ -641,7 +446,6 @@
641
446
  :aria-describedby="keyFieldErrorId + ' ' + keyFieldWarningId + ' ' + keyFieldSuccessId"
642
447
  :show-success-messages="false"
643
448
  @input="handleKeyInput"
644
- @blur="handleKeyBlur"
645
449
  />
646
450
  </div>
647
451
  <div
@@ -653,8 +457,8 @@
653
457
  class="sy-number-errors"
654
458
  >
655
459
  <VMessages
656
- v-show="hasNumberErrors"
657
- :active="hasNumberErrors"
460
+ v-show="numberValidation.hasError.value"
461
+ :active="numberValidation.hasError.value"
658
462
  :messages="numberValidation.errors.value"
659
463
  />
660
464
  </div>
@@ -663,8 +467,8 @@
663
467
  class="sy-key-errors"
664
468
  >
665
469
  <VMessages
666
- v-show="hasKeyErrors"
667
- :active="hasKeyErrors"
470
+ v-show="keyValidation.hasError.value"
471
+ :active="keyValidation.hasError.value"
668
472
  :messages="keyValidation.errors.value"
669
473
  />
670
474
  </div>
@@ -673,8 +477,8 @@
673
477
  class="sy-number-warnings"
674
478
  >
675
479
  <VMessages
676
- v-show="hasNumberWarnings"
677
- :active="hasNumberWarnings"
480
+ v-show="numberValidation.hasWarning.value"
481
+ :active="numberValidation.hasWarning.value"
678
482
  :messages="numberValidation.warnings.value"
679
483
  />
680
484
  </div>
@@ -683,8 +487,8 @@
683
487
  class="sy-key-warnings"
684
488
  >
685
489
  <VMessages
686
- v-show="hasKeyWarnings"
687
- :active="hasKeyWarnings"
490
+ v-show="keyValidation.hasWarning.value"
491
+ :active="keyValidation.hasWarning.value"
688
492
  :messages="keyValidation.warnings.value"
689
493
  />
690
494
  </div>
@@ -693,8 +497,8 @@
693
497
  class="sy-number-success"
694
498
  >
695
499
  <VMessages
696
- v-show="hasNumberSuccess && showSuccessMessages"
697
- :active="hasNumberSuccess"
500
+ v-show="numberValidation.hasSuccess.value && showSuccessMessages"
501
+ :active="numberValidation.hasSuccess.value"
698
502
  :messages="numberValidation.successes.value"
699
503
  />
700
504
  </div>
@@ -703,8 +507,8 @@
703
507
  class="sy-key-success"
704
508
  >
705
509
  <VMessages
706
- v-show="hasKeySuccess && showSuccessMessages"
707
- :active="hasKeySuccess"
510
+ v-show="keyValidation.hasSuccess.value && showSuccessMessages"
511
+ :active="keyValidation.hasSuccess.value"
708
512
  :messages="keyValidation.successes.value"
709
513
  />
710
514
  </div>
@@ -11,5 +11,5 @@ import '@/stories/styles/shared.css';
11
11
 
12
12
  <div class="mt-2">
13
13
  <p>Rapport d’audit manuel : <a href="/audits/NirField.xlsx" style={{ color:'#0C41BD' }}>Voir le rapport</a></p>
14
- <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/897" target="_blank" style={{color:'#0C41BD'}}>issue #897</a>)</p>
15
- </div>
14
+ <p style={{ color: 'grey', fontSize: '14px', marginTop: '0px' }}>Correctifs associés (<a href="https://github.com/assurance-maladie-digital/design-system-v3/issues/897" target="_blank" style={{color:'#0C41BD'}}>issue #897</a>)</p>
15
+ </div>
@@ -9,4 +9,4 @@ export const locales = {
9
9
  numberHint: '13 caractères',
10
10
  keyLabel: 'Clé',
11
11
  keyHint: '2 chiffres',
12
- } as const
12
+ }