@cnamts/synapse 1.0.24 → 1.0.26

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 (493) hide show
  1. package/README.md +27 -5
  2. package/dist/{AutocompleteFilter-BWLR3U7W.js → AutocompleteFilter-BPR-a55G.js} +1 -1
  3. package/dist/{DateFilter-BpwFexzi.js → DateFilter-CknrJWs2.js} +2 -2
  4. package/dist/{NumberFilter-Bz_NTdX9.js → NumberFilter-DJ-yNlzv.js} +1 -1
  5. package/dist/{PeriodFilter-DX_wy9g-.js → PeriodFilter-CiB5Oa9Z.js} +1 -1
  6. package/dist/{SelectFilter-xqiPtPgX.js → SelectFilter-EiafX97M.js} +2 -2
  7. package/dist/{TextFilter-BBl3JFqK.js → TextFilter-BzOmpdxj.js} +1 -1
  8. package/dist/{apLightTheme-D1P4jcD0.js → apLightTheme-DS0Uy44H.js} +446 -723
  9. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +14 -8
  10. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +60 -289
  11. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +1 -0
  12. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -0
  13. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1 -0
  14. package/dist/components/Customs/SyTabs/SyTabs.d.ts +13 -11
  15. package/dist/components/Customs/SyTextField/SyTextField.d.ts +0 -2
  16. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +54 -73
  17. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +31 -40
  18. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +9 -14
  19. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +4 -3
  20. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  21. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  22. package/dist/components/DatePicker/types.d.ts +1 -2
  23. package/dist/components/FileList/FileList.d.ts +6 -0
  24. package/dist/components/FilterSideBar/FilterSideBar.d.ts +2 -0
  25. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +13 -13
  26. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +3 -3
  27. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  28. package/dist/components/MonthPicker/MonthPicker.d.ts +2 -7
  29. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +2 -7
  30. package/dist/components/NirField/NirField.d.ts +12 -20
  31. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  32. package/dist/components/PeriodField/PeriodField.d.ts +110 -150
  33. package/dist/components/PhoneField/PhoneField.d.ts +12 -7
  34. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  35. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  36. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  37. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  38. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  39. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +1 -0
  40. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  41. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  42. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  43. package/dist/components/Tables/common/SyTablePagination.d.ts +154 -364
  44. package/dist/components/Tables/common/TableHeader.d.ts +6 -1
  45. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  46. package/dist/components/Tables/common/locales.d.ts +3 -0
  47. package/dist/components/Tables/common/types.d.ts +2 -0
  48. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +1 -0
  49. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  50. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +230 -0
  51. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  52. package/dist/composables/unifyValidation/useValidation.d.ts +12 -6
  53. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  54. package/dist/composables/validation/useValidation.d.ts +6 -1
  55. package/dist/design-system-v3.js +2 -2
  56. package/dist/designTokens/tokens/amelipro/apColors.d.ts +10 -10
  57. package/dist/designTokens/tokens/amelipro/apColors2026.d.ts +1 -2
  58. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +44 -0
  59. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +2 -0
  60. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +1 -1
  61. package/dist/designTokens/tokens/baseColors.d.ts +127 -0
  62. package/dist/designTokens/tokens/baseContextualTokens.d.ts +50 -0
  63. package/dist/designTokens/tokens/cnam/cnamColors.d.ts +10 -10
  64. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +2 -0
  65. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +1 -1
  66. package/dist/designTokens/tokens/pa/paColors.d.ts +1 -166
  67. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -1
  68. package/dist/designTokens/utils/buildColorClassMap.d.ts +12 -0
  69. package/dist/designTokens/utils/createFlattenTheme.d.ts +1 -3
  70. package/dist/designTokens/utils/index.d.ts +2 -2
  71. package/dist/{main-BtTqyn4z.js → main-BsJ9ec3i.js} +16021 -15715
  72. package/dist/synapse.css +1 -1
  73. package/dist/utils/functions/classToHex.d.ts +1 -1
  74. package/dist/utils/functions/createHexResolver.d.ts +16 -0
  75. package/dist/vuetifyConfig.js +113 -152
  76. package/package.json +35 -23
  77. package/src/assets/amelipro/apTokens2026.scss +5 -5
  78. package/src/assets/overrides/_breakpoints.scss +25 -0
  79. package/src/assets/overrides/_btns.scss +0 -2
  80. package/src/assets/overrides/_forms.scss +1 -3
  81. package/src/assets/overrides/_icons.scss +5 -22
  82. package/src/assets/overrides/_otp.scss +40 -0
  83. package/src/assets/overrides/_tables.scss +11 -20
  84. package/src/assets/overrides/_tooltips.scss +17 -7
  85. package/src/assets/overrides/_typography.scss +35 -37
  86. package/src/assets/overrides/_utilities.scss +43 -47
  87. package/src/assets/themes.scss +1 -0
  88. package/src/components/Accordion/Accordion.vue +2 -0
  89. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +20 -20
  90. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +12 -14
  91. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +4 -6
  92. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +5 -5
  93. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +4 -6
  94. package/src/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.vue +4 -6
  95. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +4 -6
  96. package/src/components/Amelipro/AmeliproBreadcrumb/AmeliproBreadcrumb.vue +1 -3
  97. package/src/components/Amelipro/AmeliproBtn/AmeliproBtn.vue +4 -6
  98. package/src/components/Amelipro/AmeliproCallback/AmeliproCallback.vue +2 -2
  99. package/src/components/Amelipro/AmeliproCard/AmeliproCard.vue +31 -31
  100. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +5 -7
  101. package/src/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.vue +13 -15
  102. package/src/components/Amelipro/AmeliproCheckboxGroup/AmeliproCheckboxGroup.vue +23 -23
  103. package/src/components/Amelipro/AmeliproChips/AmeliproChips.vue +1 -3
  104. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +17 -12
  105. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +2 -2
  106. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.vue +4 -6
  107. package/src/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.vue +13 -13
  108. package/src/components/Amelipro/AmeliproDentalChart/AmeliproDentalChart.vue +4 -2
  109. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +4 -4
  110. package/src/components/Amelipro/AmeliproDialog/AmeliproDialog.vue +5 -7
  111. package/src/components/Amelipro/AmeliproDisclosure/AmeliproDisclosure.vue +1 -3
  112. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -4
  113. package/src/components/Amelipro/AmeliproFilePreview/AmeliproFilePreview.vue +4 -6
  114. package/src/components/Amelipro/AmeliproFilters/AmeliproFilters.vue +13 -13
  115. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -5
  116. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.vue +1 -3
  117. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +2 -4
  118. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.vue +1 -3
  119. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.vue +20 -16
  120. package/src/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/__tests__/__snapshots__/AmeliproHeaderBrandSection.spec.ts.snap +1 -1
  121. package/src/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.vue +2 -4
  122. package/src/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.vue +5 -7
  123. package/src/components/Amelipro/AmeliproIllustratedRadioGroup/AmeliproIllustratedRadioGroup.vue +6 -8
  124. package/src/components/Amelipro/AmeliproMailTile/AmeliproMailTile.vue +14 -14
  125. package/src/components/Amelipro/AmeliproMenu/AmeliproMenu.vue +11 -13
  126. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproDropdownMenu/AmeliproDropdownMenu.vue +2 -4
  127. package/src/components/Amelipro/AmeliproMessagingLayout/AmeliproMessagingLayout.vue +8 -8
  128. package/src/components/Amelipro/AmeliproMultipleFoldingCard/AmeliproMultipleFoldingCard.vue +40 -40
  129. package/src/components/Amelipro/AmeliproNumberedCard/AmeliproNumberedCard.vue +27 -27
  130. package/src/components/Amelipro/AmeliproOnboarding/AmeliproOnboarding.vue +3 -5
  131. package/src/components/Amelipro/AmeliproPageLayout/AmeliproPageLayout.vue +2 -4
  132. package/src/components/Amelipro/AmeliproPagination/AmeliproPagination.vue +2 -4
  133. package/src/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.vue +3 -5
  134. package/src/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.vue +1 -3
  135. package/src/components/Amelipro/AmeliproPatientLogged/AmeliproPatientLogged.vue +2 -4
  136. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLogin.vue +4 -4
  137. package/src/components/Amelipro/AmeliproPatientLogin/AmeliproPatientLoginForm/AmeliproPatientLoginForm.vue +1 -3
  138. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.vue +3 -5
  139. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.vue +3 -5
  140. package/src/components/Amelipro/AmeliproRadioGroup/AmeliproRadioGroup.vue +23 -23
  141. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +4 -6
  142. package/src/components/Amelipro/AmeliproSelect/AmeliproSelect.vue +12 -22
  143. package/src/components/Amelipro/AmeliproStateTile/AmeliproStateTile.vue +10 -12
  144. package/src/components/Amelipro/AmeliproStepper/AmeliproStepper.vue +17 -17
  145. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +8 -10
  146. package/src/components/Amelipro/AmeliproTabs/AmeliproTabBtn/AmeliproTabBtn.vue +6 -8
  147. package/src/components/Amelipro/AmeliproTabs/AmeliproTabs.vue +4 -4
  148. package/src/components/Amelipro/AmeliproTextArea/AmeliproTextArea.vue +4 -6
  149. package/src/components/Amelipro/AmeliproTextField/AmeliproTextField.vue +7 -9
  150. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.vue +3 -5
  151. package/src/components/Amelipro/AmeliproTooltips/AmeliproTooltips.vue +0 -2
  152. package/src/components/Amelipro/AmeliproUpload/AmeliproUpload.vue +6 -6
  153. package/src/components/Amelipro/ServiceMenu/ServiceMenu.vue +2 -2
  154. package/src/components/Amelipro/StructureMenu/StructureBtn/StructureBtn.vue +4 -4
  155. package/src/components/Amelipro/StructureMenu/StructureItem/StructureItem.vue +4 -6
  156. package/src/components/Amelipro/StructureMenu/StructureMenu.vue +2 -2
  157. package/src/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.vue +2 -2
  158. package/src/components/Amelipro/UserMenu/UserMenu.vue +1 -3
  159. package/src/components/BackBtn/tests/BackBtn.visual.cy.ts +43 -0
  160. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  161. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  162. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  163. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  164. package/src/components/Captcha/Captcha.vue +1 -3
  165. package/src/components/ChipList/ChipList.vue +14 -16
  166. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -3
  167. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  168. package/src/components/CopyBtn/CopyBtn.vue +10 -3
  169. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +17 -17
  170. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +31 -0
  171. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +66 -0
  172. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +8 -4
  173. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.a11y.spec.ts +18 -0
  174. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +66 -0
  175. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.vue +4 -6
  176. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +414 -135
  177. package/src/components/Customs/Selects/SySelect/SySelect.vue +502 -257
  178. package/src/components/Customs/Selects/SySelect/accessibilite/Accessibility.mdx +199 -269
  179. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +278 -4
  180. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +3 -3
  181. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +5 -0
  182. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +52 -2
  183. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +18 -3
  184. package/src/components/Customs/SyPagination/SyPagination.vue +0 -2
  185. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +23 -5
  186. package/src/components/Customs/SyTabs/SyTabs.mdx +0 -58
  187. package/src/components/Customs/SyTabs/SyTabs.stories.ts +34 -35
  188. package/src/components/Customs/SyTabs/SyTabs.vue +87 -67
  189. package/src/components/Customs/SyTabs/accessibilite/Accessibility.mdx +83 -23
  190. package/src/components/Customs/SyTabs/config.ts +3 -3
  191. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +88 -0
  192. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +46 -1
  193. package/src/components/Customs/SyTextField/SyTextField.stories.ts +21 -41
  194. package/src/components/Customs/SyTextField/SyTextField.vue +34 -9
  195. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  196. package/src/components/DatePicker/CalendarMode/DatePicker.vue +29 -28
  197. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  198. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +28 -23
  199. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +24 -1
  200. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  201. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +65 -33
  202. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  203. package/src/components/DatePicker/composables/tests/useDatePickerState.spec.ts +53 -0
  204. package/src/components/DatePicker/composables/useDatePickerState.ts +56 -13
  205. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  206. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  207. package/src/components/DatePicker/composables/useDateTextField.ts +2 -3
  208. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  209. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +9 -8
  210. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +1 -1
  211. package/src/components/DatePicker/types.ts +1 -2
  212. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  213. package/src/components/DialogBox/DialogBox.vue +3 -5
  214. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  215. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +76 -0
  216. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  217. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  218. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  219. package/src/components/FileList/FileList.vue +9 -2
  220. package/src/components/FileList/UploadItem/UploadItem.vue +11 -13
  221. package/src/components/FileList/tests/FileList.spec.ts +47 -0
  222. package/src/components/FileUpload/FileUpload.vue +3 -5
  223. package/src/components/FileUpload/FileUploadContent.vue +3 -5
  224. package/src/components/FilterInline/FilterInline.vue +1 -3
  225. package/src/components/FilterSideBar/FilterSideBar.mdx +44 -1
  226. package/src/components/FilterSideBar/FilterSideBar.stories.ts +105 -1
  227. package/src/components/FilterSideBar/FilterSideBar.vue +9 -1
  228. package/src/components/FilterSideBar/tests/FilterSideBar.a11y.spec.ts +54 -1
  229. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +42 -0
  230. package/src/components/FooterBar/FooterBar.vue +9 -13
  231. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  232. package/src/components/HeaderBar/HeaderBar.vue +2 -3
  233. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderBurgerMenu.vue +2 -3
  234. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -3
  235. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuSection/HeaderMenuSection.vue +0 -1
  236. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +8 -9
  237. package/src/components/HeaderBar/HeaderBurgerMenu/menu.scss +0 -8
  238. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.visual.cy.ts +196 -0
  239. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  240. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  241. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +0 -1
  242. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +6 -7
  243. package/src/components/HeaderBar/tests/HeaderBar.visual.cy.ts +81 -0
  244. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  245. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  246. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  247. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  248. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  249. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  250. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +12 -3
  251. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +15 -8
  252. package/src/components/HeaderToolbar/HeaderToolbar.vue +6 -7
  253. package/src/components/LangBtn/LangBtn.vue +4 -5
  254. package/src/components/Logo/tests/Logo.visual.cy.ts +57 -0
  255. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  256. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  257. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  258. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  259. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  260. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  261. package/src/components/LogoBrandSection/LogoBrandSection.vue +2 -2
  262. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +1 -1
  263. package/src/components/NirField/NirField.stories.ts +2 -2
  264. package/src/components/NirField/NirField.vue +3 -5
  265. package/src/components/NirField/accessibilite/Accessibility.mdx +100 -5
  266. package/src/components/NirField/tests/NirField.spec.ts +118 -0
  267. package/src/components/NirField/tests/useNirValidation.spec.ts +449 -0
  268. package/src/components/NirField/useNirValidation.ts +38 -32
  269. package/src/components/NotificationBar/Notification/Notification.vue +7 -9
  270. package/src/components/NotificationBar/NotificationBar.vue +1 -3
  271. package/src/components/PaginatedTable/PaginatedTable.vue +3 -4
  272. package/src/components/PaginatedTable/Pagination.vue +4 -6
  273. package/src/components/PasswordField/PasswordField.vue +15 -13
  274. package/src/components/PhoneField/PhoneField.vue +7 -5
  275. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -20
  276. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  277. package/src/components/RangeField/tests/RangeField.visual.cy.ts +65 -0
  278. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  279. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  280. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  281. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  282. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  283. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +38 -56
  284. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  285. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  286. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  287. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  288. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  289. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  290. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +31 -42
  291. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  292. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  293. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  294. package/src/components/RatingPicker/tests/RatingPicker.a11y.spect.ts +123 -0
  295. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  296. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  297. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  298. package/src/components/SearchListField/SearchListField.vue +0 -2
  299. package/src/components/SkipLink/SkipLink.vue +2 -4
  300. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +6 -6
  301. package/src/components/SubHeader/SubHeader.vue +1 -1
  302. package/src/components/SyAlert/SyAlert.vue +7 -9
  303. package/src/components/SyAlert/tests/SyAlert.visual.cy.ts +46 -0
  304. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  305. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  306. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  307. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  308. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  309. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  310. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  311. package/src/components/SyBtnMenu/SyBtnMenu.vue +2 -4
  312. package/src/components/SyTextArea/SyTextArea.vue +32 -1
  313. package/src/components/TableToolbar/TableToolbar.vue +6 -8
  314. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +166 -0
  315. package/src/components/Tables/SyServerTable/SyServerTable.vue +10 -8
  316. package/src/components/Tables/SyServerTable/tests/SyServerTable.a11y.spec.ts +23 -0
  317. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +268 -0
  318. package/src/components/Tables/SyTable/SyTable.stories.ts +104 -0
  319. package/src/components/Tables/SyTable/SyTable.vue +10 -8
  320. package/src/components/Tables/SyTable/tests/SyTable.a11y.spec.ts +22 -0
  321. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +274 -0
  322. package/src/components/Tables/common/SyTableFilter.vue +31 -6
  323. package/src/components/Tables/common/SyTablePagination.vue +143 -19
  324. package/src/components/Tables/common/TableHeader.vue +41 -4
  325. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  326. package/src/components/Tables/common/filters/SelectFilter.vue +1 -1
  327. package/src/components/Tables/common/locales.ts +3 -0
  328. package/src/components/Tables/common/tableStyles.scss +16 -19
  329. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +18 -0
  330. package/src/components/Tables/common/tests/TableHeader.spec.ts +39 -0
  331. package/src/components/Tables/common/types.ts +2 -0
  332. package/src/components/Tables/common/useTableHeaders.ts +49 -27
  333. package/src/components/UploadWorkflow/UploadWorkflow.vue +1 -0
  334. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +23 -0
  335. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +66 -0
  336. package/src/components/UploadWorkflow/useFileList.ts +3 -0
  337. package/src/components/UserMenuBtn/UserMenuBtn.vue +1 -3
  338. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +81 -0
  339. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  340. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  341. package/src/composables/unifyValidation/documentationValidationProps.ts +235 -0
  342. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +2 -1
  343. package/src/composables/unifyValidation/tests/useValidation.spec.ts +22 -0
  344. package/src/composables/unifyValidation/useCustomValidation.ts +16 -4
  345. package/src/composables/unifyValidation/useValidation.ts +46 -15
  346. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  347. package/src/composables/useFormFieldErrorHandling.ts +4 -1
  348. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  349. package/src/composables/validation/useValidation.ts +32 -4
  350. package/src/composantsVuetify/VBreadcrumbs/VBreadcrumbs.mdx +28 -0
  351. package/src/composantsVuetify/VBreadcrumbs/v-breadcrumbs.stories.ts +108 -0
  352. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  353. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  354. package/src/composantsVuetify/VOtpInput/VOtpInput.mdx +39 -0
  355. package/src/composantsVuetify/VOtpInput/v-otp-input.stories.ts +56 -0
  356. package/src/composantsVuetify/VSkeletonLoader/VSkeletonLoader.mdx +42 -0
  357. package/src/composantsVuetify/VSkeletonLoader/v-skeleton-loader.stories.ts +77 -0
  358. package/src/composantsVuetify/VSwitch/VSwitch.mdx +47 -0
  359. package/src/composantsVuetify/VSwitch/v-switch.stories.ts +166 -0
  360. package/src/designTokens/tests/buildColorClassMap.spec.ts +31 -0
  361. package/src/designTokens/tests/generateScssTokens.spec.ts +12 -0
  362. package/src/designTokens/tests/themeUtils.spec.ts +53 -0
  363. package/src/designTokens/tokens/amelipro/apColors.ts +8 -130
  364. package/src/designTokens/tokens/amelipro/apColors2026.ts +3 -15
  365. package/src/designTokens/tokens/amelipro/apContextual.ts +55 -47
  366. package/src/designTokens/tokens/amelipro/apLightTheme.ts +4 -1
  367. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  368. package/src/designTokens/tokens/baseColors.ts +129 -0
  369. package/src/designTokens/tokens/baseContextualTokens.ts +52 -0
  370. package/src/designTokens/tokens/cnam/cnamColors.ts +3 -125
  371. package/src/designTokens/tokens/cnam/cnamContextual.ts +4 -48
  372. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +4 -1
  373. package/src/designTokens/tokens/cnam/cnamSemantic.ts +1 -1
  374. package/src/designTokens/tokens/pa/paColors.ts +2 -166
  375. package/src/designTokens/tokens/pa/paContextual.ts +3 -48
  376. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -1
  377. package/src/designTokens/tokens/pa/paSemantic.ts +2 -2
  378. package/src/designTokens/utils/buildColorClassMap.ts +34 -0
  379. package/src/designTokens/utils/convertSemanticsToken.ts +8 -11
  380. package/src/designTokens/utils/createFlattenTheme.ts +15 -7
  381. package/src/designTokens/utils/index.ts +2 -2
  382. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  383. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -19
  384. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  385. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  386. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  387. package/src/stories/Accessibilite/DesignSystem/Avancement.mdx +433 -0
  388. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +692 -0
  389. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  390. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +176 -79
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +67 -19
  392. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +78 -50
  393. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  394. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  395. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  396. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +55 -67
  397. package/src/stories/Components/Components.stories.ts +92 -4
  398. package/src/stories/Demarrer/EnrichirLeDesignSystem.mdx +4 -9
  399. package/src/stories/Demarrer/EnrichirLeDesignSystem.stories.ts +28 -0
  400. package/src/stories/Demarrer/Releases.stories.ts +48 -5
  401. package/src/stories/DesignTokens/ColorDisplay.vue +6 -5
  402. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -4
  403. package/src/stories/DesignTokens/colors.stories.ts +5 -6
  404. package/src/stories/GuideDuDev/CreateVuetifyInstance.mdx +95 -0
  405. package/src/stories/GuideDuDev/Theme.mdx +36 -26
  406. package/src/stories/GuideDuDev/moduleDeNotification.mdx +3 -2
  407. package/src/stories/styles/accessibility-guide.css +3 -3
  408. package/src/utils/functions/classToHex.ts +6 -34
  409. package/src/utils/functions/createHexResolver.ts +45 -0
  410. package/src/utils/functions/tests/classToHex.spec.ts +36 -0
  411. package/src/utils/functions/tests/convertToHex.spec.ts +31 -0
  412. package/src/utils/functions/tests/createHexResolver.spec.ts +66 -0
  413. package/src/utils/functions/tests/isCssColor.spec.ts +48 -0
  414. package/dist/AutocompleteFilter-D9jzRzAL.cjs +0 -1
  415. package/dist/DateFilter-DTUl8hb1.cjs +0 -1
  416. package/dist/NumberFilter-MAEojdk0.cjs +0 -1
  417. package/dist/PeriodFilter-CC4WgIhl.cjs +0 -1
  418. package/dist/SelectFilter-BR3fvl-a.cjs +0 -1
  419. package/dist/TextFilter-CCfYFl5F.cjs +0 -1
  420. package/dist/apLightTheme-CFSRrjv2.cjs +0 -1
  421. package/dist/composables/date/useDateFormat.d.ts +0 -26
  422. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  423. package/dist/design-system-v3.umd.cjs +0 -1
  424. package/dist/designTokens/utils/convertGaps.d.ts +0 -5
  425. package/dist/main-C1e3eoxd.cjs +0 -1067
  426. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  427. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  428. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  429. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  430. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  431. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  432. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  433. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  434. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  435. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  436. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  437. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  438. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  439. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  440. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  441. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  442. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  443. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  444. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  445. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  446. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  447. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  448. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  449. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  450. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  451. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  452. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  453. package/dist/tooth-44-CazyQucj.cjs +0 -1
  454. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  455. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  456. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  457. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  458. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  459. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  460. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  461. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  462. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  463. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  464. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  465. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  466. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  467. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  468. package/dist/tooth-71-D473PPO5.cjs +0 -1
  469. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  470. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  471. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  472. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  473. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  474. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  475. package/dist/tooth-83-KV010j64.cjs +0 -1
  476. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  477. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  478. package/dist/vuetifyConfig.umd.cjs +0 -1
  479. package/src/assets/apTokens.scss +0 -343
  480. package/src/assets/overrides/_container.scss +0 -36
  481. package/src/assets/tokens.scss +0 -388
  482. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  483. package/src/composables/date/useDateFormat.ts +0 -110
  484. package/src/composables/date/useDateInitialization.ts +0 -92
  485. package/src/designTokens/apColors.md +0 -66
  486. package/src/designTokens/cnamColors.md +0 -193
  487. package/src/designTokens/paColors.md +0 -66
  488. package/src/designTokens/tokens/json/contextual-tokens.json +0 -156
  489. package/src/designTokens/tokens/json/primitives.json +0 -209
  490. package/src/designTokens/tokens/json/semantic.json +0 -120
  491. package/src/designTokens/utils/convertGaps.ts +0 -11
  492. package/src/stories/Accessibilite/Avancement/Avancement.mdx +0 -533
  493. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +0 -306
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
- import { initializeSelectedDates, type DateInput } from '../useDateInitialization'
2
+ import { initializeSelectedDates, type DateInput } from '../useDateInitializationDayjs'
3
3
 
4
- describe('useDateInitialization', () => {
4
+ describe('useDateInitializationDayjs', () => {
5
5
  describe('initializeSelectedDates', () => {
6
6
  it('returns null when modelValue is null or undefined', () => {
7
7
  expect(initializeSelectedDates(null, 'DD/MM/YYYY')).toBeNull()
@@ -70,7 +70,7 @@ describe('useDateInitialization', () => {
70
70
  expect(result1).toBeInstanceOf(Date)
71
71
  expect((result1 as Date).getDate()).toBe(15)
72
72
 
73
- // Date au format d'affichage quand le format de retour est différen
73
+ // Date au format d'affichage quand le format de retour est différent
74
74
  const result2 = initializeSelectedDates('15/01/2023', 'DD/MM/YYYY', 'YYYY-MM-DD')
75
75
  expect(result2).toBeInstanceOf(Date)
76
76
  expect((result2 as Date).getDate()).toBe(15)
@@ -97,6 +97,42 @@ describe('useDateInitialization', () => {
97
97
  })
98
98
  })
99
99
 
100
+ it('creates dates at midnight (00:00:00.000)', () => {
101
+ const result = initializeSelectedDates('15/06/2023', 'DD/MM/YYYY') as Date
102
+ expect(result.getHours()).toBe(0)
103
+ expect(result.getMinutes()).toBe(0)
104
+ expect(result.getSeconds()).toBe(0)
105
+ expect(result.getMilliseconds()).toBe(0)
106
+ })
107
+
108
+ it('creates dates at midnight for arrays too', () => {
109
+ const result = initializeSelectedDates(['01/03/2023', '15/03/2023'], 'DD/MM/YYYY') as Date[]
110
+ result.forEach((date) => {
111
+ expect(date.getHours()).toBe(0)
112
+ expect(date.getMinutes()).toBe(0)
113
+ expect(date.getSeconds()).toBe(0)
114
+ })
115
+ })
116
+
117
+ it('handles range array with different return format', () => {
118
+ const result = initializeSelectedDates(['2023-01-10', '2023-01-20'], 'DD/MM/YYYY', 'YYYY-MM-DD')
119
+ expect(Array.isArray(result)).toBe(true)
120
+ const dates = result as Date[]
121
+ expect(dates).toHaveLength(2)
122
+ expect(dates[0]?.getDate()).toBe(10)
123
+ expect(dates[1]?.getDate()).toBe(20)
124
+ })
125
+
126
+ it('accepts a range where both dates are equal', () => {
127
+ const result = initializeSelectedDates(['15/01/2023', '15/01/2023'], 'DD/MM/YYYY')
128
+ expect(Array.isArray(result)).toBe(true)
129
+ expect(result).toHaveLength(2)
130
+ })
131
+
132
+ it('returns null for empty string input', () => {
133
+ expect(initializeSelectedDates('', 'DD/MM/YYYY')).toBeNull()
134
+ })
135
+
100
136
  it('returns null for object input', () => {
101
137
  const result = initializeSelectedDates({}, 'DD/MM/YYYY')
102
138
  expect(result).toBeNull()
@@ -14,7 +14,10 @@ dayjs.extend(timezone)
14
14
  dayjs.locale('fr')
15
15
 
16
16
  // Types
17
- export type DateValue = string | [string, string] | null
17
+ export type DateModelValue = string | [string, string] | null
18
+
19
+ /** @deprecated Utilisez DateModelValue à la place */
20
+ export type DateValue = DateModelValue
18
21
  export type DateInput = string | string[] | null | object
19
22
 
20
23
  /**
@@ -0,0 +1,235 @@
1
+ const RuleGeneralType = `'required' | 'custom'`
2
+ const StringRuleType = `'minLength' | 'maxLength' | 'exactLength' | 'email' | 'matchPattern'`
3
+ const NumberRuleType = `'min' | 'max'`
4
+ const DateRuleType = `'noWeekend' | 'noBeforeToday' | 'notAfterToday' | 'notBeforeDate' | 'notAfterDate' | 'dateExact' | 'isHolidayDay'`
5
+
6
+ function generateBuiltInRuleType(type: 'base' | 'date' | 'number' | 'string' | 'all' = 'all') {
7
+ switch (type) {
8
+ case 'base':
9
+ return RuleGeneralType
10
+ case 'date':
11
+ return `${RuleGeneralType} | ${DateRuleType}`
12
+ case 'number':
13
+ return `${RuleGeneralType} | ${NumberRuleType}`
14
+ case 'string':
15
+ return `${RuleGeneralType} | ${StringRuleType}`
16
+ case 'all':
17
+ return `${RuleGeneralType} | ${NumberRuleType} | ${StringRuleType} | ${DateRuleType}`
18
+ }
19
+ }
20
+
21
+ export function getValidationDocumentation(type: 'date' | 'number' | 'string' | 'all' = 'all') {
22
+ const builtInRuleType = generateBuiltInRuleType(type)
23
+
24
+ return {
25
+ readonly: {
26
+ description: 'Permet de rendre le champ en lecture seule, le champ deviens grisé.',
27
+ control: 'boolean',
28
+ table: {
29
+ type: { summary: 'boolean' },
30
+ defaultValue: { summary: 'false' },
31
+ category: 'props',
32
+ },
33
+ },
34
+ disabled: {
35
+ description: 'Désactive le champ sans changement visuel pour l\'utilisateur.',
36
+ control: 'boolean',
37
+ table: {
38
+ type: { summary: 'boolean' },
39
+ defaultValue: { summary: 'false' },
40
+ category: 'props',
41
+ },
42
+ },
43
+ required: {
44
+ description: 'Indique que le champ est requis.',
45
+ control: 'boolean',
46
+ table: {
47
+ type: { summary: 'boolean' },
48
+ defaultValue: { summary: 'false' },
49
+ category: 'props',
50
+ },
51
+ },
52
+ isValidateOnBlur: {
53
+ description: 'Détermine si la validation doit être déclenchée lors de la saisie ou du blur de l\'input.',
54
+ control: 'boolean',
55
+ table: {
56
+ type: { summary: 'boolean' },
57
+ defaultValue: { summary: 'true' },
58
+ category: 'props',
59
+ },
60
+ },
61
+ showSuccessMessages: {
62
+ description: 'Affiche les messages de succès lorsque la validation est réussie. Si la prop est à `false` cela cache uniquement les messages texte, l\'état visuel reste actif.',
63
+ control: 'boolean',
64
+ table: {
65
+ type: { summary: 'boolean' },
66
+ defaultValue: { summary: 'true' },
67
+ category: 'props',
68
+ },
69
+ },
70
+ disableErrorHandling: {
71
+ description: 'Désactive la gestion des erreurs, utile lorsque vous souhaitez gérer les erreurs manuellement.',
72
+ control: 'boolean',
73
+ table: {
74
+ type: { summary: 'boolean' },
75
+ defaultValue: { summary: 'false' },
76
+ category: 'props',
77
+ },
78
+ },
79
+ useVuetifyValidation: {
80
+ description: 'Indique si la validation doit être gérée par Vuetify (true) ou par Synapse (false).',
81
+ control: 'boolean',
82
+ table: {
83
+ type: { summary: 'boolean' },
84
+ defaultValue: { summary: 'false' },
85
+ category: 'props',
86
+ },
87
+ },
88
+ label: {
89
+ description: 'Le label du champ.',
90
+ control: 'text',
91
+ table: {
92
+ type: { summary: 'string' },
93
+ category: 'props',
94
+ },
95
+ },
96
+ rules: {
97
+ description: 'Les règles de validation Vuetify à appliquer au champ si useVuetifyValidation est true.',
98
+ control: 'object',
99
+ table: {
100
+ type: {
101
+ summary: 'array',
102
+ detail: `
103
+ (value: unknown) => boolean | string
104
+ `,
105
+ },
106
+ category: 'props',
107
+ },
108
+ },
109
+ customRules: {
110
+ description: 'Les règles de validation personnalisées d\'erreur (bloquantes) à appliquer au champ. Elles sont évaluées à partir de la valeur du champ.',
111
+ control: 'object',
112
+ table: {
113
+ type: {
114
+ summary: 'array',
115
+ detail: `
116
+ {
117
+ type: ${builtInRuleType},
118
+ options: {
119
+ validate: (value: unknown) => boolean | string,
120
+ message: string,
121
+ [key: string]: unknown
122
+ }
123
+ }
124
+ `,
125
+ },
126
+ category: 'props',
127
+ },
128
+ },
129
+ customWarningRules: {
130
+ description: 'Les règles de validation personnalisées d\'avertissement (non bloquantes) à appliquer au champ. Elles sont évaluées à partir de la valeur du champ.',
131
+ control: 'object',
132
+ table: {
133
+ type: {
134
+ summary: 'array',
135
+ detail: `
136
+ {
137
+ type: ${builtInRuleType},
138
+ options: {
139
+ validate: (value: unknown) => boolean | string,
140
+ message: string,
141
+ [key: string]: unknown
142
+ }
143
+ }
144
+ `,
145
+ },
146
+ category: 'props',
147
+ },
148
+ },
149
+ customSuccessRules: {
150
+ description: 'Les règles de validation personnalisées de succès à appliquer au champ. Elles sont évaluées à partir de la valeur du champ.',
151
+ control: 'object',
152
+ table: {
153
+ type: {
154
+ summary: 'array',
155
+ detail: `
156
+ {
157
+ type: ${builtInRuleType},
158
+ options: {
159
+ validate: (value: unknown) => boolean | string,
160
+ message: string,
161
+ [key: string]: unknown
162
+ }
163
+ }
164
+ `,
165
+ },
166
+ category: 'props',
167
+ },
168
+ },
169
+ errorMessages: {
170
+ description: 'Permet d\'injecter des messages d\'erreur depuis le parent. Aucun calcul de validation n\'est exécuté.',
171
+ control: 'object',
172
+ table: {
173
+ type: { summary: 'array<string>' },
174
+ category: 'props',
175
+ },
176
+ },
177
+ warningMessages: {
178
+ description: 'Permet d\'injecter des messages d\'avertissement depuis le parent. Aucun calcul de validation n\'est exécuté.',
179
+ control: 'object',
180
+ table: {
181
+ type: { summary: 'array<string>' },
182
+ category: 'props',
183
+ },
184
+ },
185
+ successMessages: {
186
+ description: 'Permet d\'injecter des messages de succès depuis le parent. Aucun calcul de validation n\'est exécuté.',
187
+ control: 'object',
188
+ table: {
189
+ type: { summary: 'array<string>' },
190
+ category: 'props',
191
+ },
192
+ },
193
+ hasError: {
194
+ description: 'Indique si le champ a une erreur, peut être utilisé pour forcer l\'état d\'erreur.',
195
+ control: 'boolean',
196
+ table: {
197
+ type: { summary: 'boolean' },
198
+ category: 'props',
199
+ },
200
+ },
201
+ hasWarning: {
202
+ description: 'Indique si le champ a un avertissement, peut être utilisé pour forcer l\'état d\'avertissement.',
203
+ control: 'boolean',
204
+ table: {
205
+ type: { summary: 'boolean' },
206
+ category: 'props',
207
+ },
208
+ },
209
+ hasSuccess: {
210
+ description: 'Indique si le champ a un succès, peut être utilisé pour forcer l\'état de succès.',
211
+ control: 'boolean',
212
+ table: {
213
+ type: { summary: 'boolean' },
214
+ category: 'props',
215
+ },
216
+ },
217
+ hideDetails: {
218
+ description: 'Masque la section des détails (messages d\'erreur, compteur)',
219
+ control: 'boolean',
220
+ table: {
221
+ type: { summary: 'boolean' },
222
+ defaultValue: { summary: 'false' },
223
+ category: 'props',
224
+ },
225
+ },
226
+ maxErrors: {
227
+ description: 'Le nombre maximum d\'erreurs à afficher, applicable uniquement si useVuetifyValidation est true.',
228
+ control: 'number',
229
+ table: {
230
+ type: { summary: 'number' },
231
+ category: 'props',
232
+ },
233
+ },
234
+ }
235
+ }
@@ -468,7 +468,8 @@ describe('useCustomValidation', () => {
468
468
  args.disableErrorHandling,
469
469
  ),
470
470
  )
471
- await result.validate()
471
+ const validationResult = await result.validate()
472
+ expect(validationResult.hasSuccess).toBe(true)
472
473
  expect(args.successes.value).toEqual([])
473
474
  })
474
475
 
@@ -1490,6 +1490,7 @@ describe('useValidation (unifyValidation)', () => {
1490
1490
  const { result } = withSetup(() => useValidation(params as Parameters<typeof useValidation>[0]))
1491
1491
 
1492
1492
  await result.validate()
1493
+ expect(result.hasSuccess.value).toBe(true)
1493
1494
  expect(result.successes.value).toContain('Succès externe')
1494
1495
  })
1495
1496
 
@@ -1510,9 +1511,30 @@ describe('useValidation (unifyValidation)', () => {
1510
1511
  const { result } = withSetup(() => useValidation(params as Parameters<typeof useValidation>[0]))
1511
1512
 
1512
1513
  await result.validate()
1514
+ expect(result.hasSuccess.value).toBe(true)
1513
1515
  expect(result.successes.value).not.toContain('Succès interne')
1514
1516
  expect(result.successes.value).toContain('Succès externe')
1515
1517
  })
1518
+
1519
+ it('keeps hasSuccess true when inner success messages are hidden', async () => {
1520
+ const params = makeParams({
1521
+ modelValue: ref('ok'),
1522
+ showSuccessMessages: ref(false),
1523
+ customRules: ref([]),
1524
+ customSuccessRules: ref([{
1525
+ type: 'custom',
1526
+ options: {
1527
+ validate: (value: unknown) => value === 'ok',
1528
+ successMessage: 'Succès interne',
1529
+ },
1530
+ }]),
1531
+ })
1532
+ const { result } = withSetup(() => useValidation(params as Parameters<typeof useValidation>[0]))
1533
+
1534
+ await result.validate()
1535
+ expect(result.hasSuccess.value).toBe(true)
1536
+ expect(result.successes.value).toEqual([])
1537
+ })
1516
1538
  })
1517
1539
 
1518
1540
  describe('rules concurrences', () => {
@@ -1,6 +1,6 @@
1
1
  import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
2
2
  import { useValidatable } from '@/composables/validation/useValidatable'
3
- import { watch } from 'vue'
3
+ import { ref, watch } from 'vue'
4
4
  import type { Ref } from 'vue'
5
5
 
6
6
  /**
@@ -15,13 +15,15 @@ export function useCustomValidation(
15
15
  warnings: Ref<string[]>,
16
16
  successes: Ref<string[]>,
17
17
  showSuccessMessages: Ref<boolean>,
18
- label: Ref<string>,
18
+ label: Ref<string | undefined>,
19
19
  focused: Ref<boolean>,
20
20
  isValidateOnBlur: Ref<boolean>,
21
21
  disableErrorHandling: Ref<boolean>,
22
22
  readonly?: Ref<boolean>,
23
23
  disabled?: Ref<boolean>,
24
24
  ) {
25
+ const hasSuccess = ref(false)
26
+
25
27
  let validator = useValidation({
26
28
  showSuccessMessages: showSuccessMessages.value,
27
29
  fieldIdentifier: label.value,
@@ -37,7 +39,7 @@ export function useCustomValidation(
37
39
  disableErrorHandling: disableErrorHandling.value,
38
40
  })
39
41
 
40
- const isDirty = errors.value.length > 0 || warnings.value.length > 0 || successes.value.length > 0
42
+ const isDirty = errors.value.length > 0 || warnings.value.length > 0 || successes.value.length > 0 || hasSuccess.value
41
43
  if (isDirty) {
42
44
  validate()
43
45
  }
@@ -50,6 +52,7 @@ export function useCustomValidation(
50
52
  errors.value = []
51
53
  warnings.value = []
52
54
  successes.value = []
55
+ hasSuccess.value = false
53
56
  return { hasError: false, hasWarning: false, hasSuccess: false, state: { errors: [] as string[], warnings: [] as string[], successes: [] as string[] } }
54
57
  }
55
58
 
@@ -63,6 +66,7 @@ export function useCustomValidation(
63
66
  errors.value = result.state.errors
64
67
  warnings.value = result.state.warnings
65
68
  successes.value = result.state.successes
69
+ hasSuccess.value = result.hasSuccess
66
70
 
67
71
  return result
68
72
  }
@@ -75,6 +79,7 @@ export function useCustomValidation(
75
79
  errors.value = []
76
80
  warnings.value = []
77
81
  successes.value = []
82
+ hasSuccess.value = false
78
83
  },
79
84
  () => modelValue.value = undefined,
80
85
  )
@@ -91,5 +96,12 @@ export function useCustomValidation(
91
96
  }
92
97
  })
93
98
 
94
- return { validate }
99
+ function clearValidation() {
100
+ errors.value = []
101
+ warnings.value = []
102
+ successes.value = []
103
+ hasSuccess.value = false
104
+ }
105
+
106
+ return { validate, hasSuccess, clearValidation }
95
107
  }
@@ -12,15 +12,21 @@ export interface FieldValidationProps {
12
12
  isValidateOnBlur?: boolean
13
13
  showSuccessMessages?: boolean
14
14
  disableErrorHandling?: boolean
15
- // When true (Vuetify native mode), the controller should not handle errors/successes
15
+ // Quand cette prop vaut true (mode natif Vuetify), c'est Vuetify qui gère les erreurs, avertissements et succès
16
16
  useVuetifyValidation?: boolean
17
- label: string
17
+ label?: string
18
18
  rules?: VuetifyValidationRule[]
19
+ // Règles de validation personnalisées d'erreur (bloquantes), évaluées à partir de la valeur du champ
19
20
  customRules?: SyValidationRule[]
21
+ // Règles de validation personnalisées d'avertissement (non bloquantes), évaluées à partir de la valeur du champ
20
22
  customWarningRules?: SyValidationRule[]
23
+ // Règles de validation personnalisées de succès, évaluées à partir de la valeur du champ
21
24
  customSuccessRules?: SyValidationRule[]
25
+ // Messages d'erreur injectés par le parent ; ils n'exécutent aucune logique de validation
22
26
  errorMessages?: string[] | null
27
+ // Messages d'avertissement injectés par le parent ; ils n'exécutent aucune logique de validation
23
28
  warningMessages?: string[] | null
29
+ // Messages de succès injectés par le parent ; ils n'exécutent aucune logique de validation
24
30
  successMessages?: string[] | null
25
31
  hasError?: boolean
26
32
  hasWarning?: boolean
@@ -29,9 +35,13 @@ export interface FieldValidationProps {
29
35
  }
30
36
 
31
37
  /**
32
- * Entrypoint to handle validation in fields components.
33
- * It handles both Vuetify native validation (if useVuetifyValidation is true) and Synapse custom validation (if customRules are provided).
34
- * It also provides a unified interface to handle errors, warnings and successes, and to trigger validation on demand.
38
+ * Point d'entrée de la validation pour les composants de champ.
39
+ * Gère à la fois la validation native Vuetify (si useVuetifyValidation vaut true)
40
+ * et la validation custom Synapse (si customRules/customWarningRules/customSuccessRules sont fournis).
41
+ * customRules correspond aux règles d'erreur bloquantes.
42
+ * errorMessages/warningMessages/successMessages sont des messages externes injectés par le parent
43
+ * et ne déclenchent aucun calcul de validation.
44
+ * Expose aussi une interface unifiée pour les erreurs, avertissements, succès et la validation à la demande.
35
45
  */
36
46
  export const validationPropsDefaults = {
37
47
  readonly: false,
@@ -61,7 +71,7 @@ export function useValidation(params: {
61
71
  isValidateOnBlur: Ref<boolean>
62
72
  showSuccessMessages: Ref<boolean>
63
73
  disableErrorHandling: Ref<boolean>
64
- label: Ref<string>
74
+ label: Ref<string | undefined>
65
75
  focused: Ref<boolean>
66
76
  errorMessages?: Ref<string[] | null | undefined>
67
77
  warningMessages?: Ref<string[] | null | undefined>
@@ -95,13 +105,15 @@ export function useValidation(params: {
95
105
  errors: ref<string[]>([]),
96
106
  warnings: ref<string[]>([]),
97
107
  successes: ref<string[]>([]),
98
- hasError: computed(() => false),
99
- hasWarning: computed(() => false),
100
- hasSuccess: computed(() => false),
108
+ hasError: computed(() => params.hasErrorProp?.value ?? false),
109
+ hasWarning: computed(() => params.hasWarningProp?.value ?? false),
110
+ hasSuccess: computed(() => params.hasSuccessProp?.value ?? false),
101
111
  validate: async () => true,
112
+ clearValidation: () => {},
102
113
  }
103
114
  }
104
- const innerErrors = ref<string[]>([])
115
+ const vuetifyErrors = ref<string[]>([])
116
+ const customErrors = ref<string[]>([])
105
117
  const innerWarnings = ref<string[]>([])
106
118
  const innerSuccesses = ref<string[]>([])
107
119
 
@@ -112,7 +124,7 @@ export function useValidation(params: {
112
124
  params.modelValue,
113
125
  params.rules,
114
126
  params.disabled,
115
- innerErrors,
127
+ vuetifyErrors,
116
128
  params.hasErrorProp || ref(false),
117
129
  computed(() => params.errorMessages?.value || []),
118
130
  params.focused,
@@ -129,7 +141,7 @@ export function useValidation(params: {
129
141
  params.customRules,
130
142
  params.customWarningRules,
131
143
  params.customSuccessRules,
132
- innerErrors,
144
+ customErrors,
133
145
  innerWarnings,
134
146
  innerSuccesses,
135
147
  params.showSuccessMessages,
@@ -143,7 +155,8 @@ export function useValidation(params: {
143
155
 
144
156
  async function validate(): Promise<boolean> {
145
157
  if (params.readonly.value || params.disabled.value || params.disableErrorHandling.value) {
146
- innerErrors.value = []
158
+ vuetifyErrors.value = []
159
+ customErrors.value = []
147
160
  innerWarnings.value = []
148
161
  innerSuccesses.value = []
149
162
 
@@ -162,7 +175,8 @@ export function useValidation(params: {
162
175
  }
163
176
 
164
177
  const errors = computed(() => [...new Set([
165
- ...innerErrors.value,
178
+ ...vuetifyErrors.value,
179
+ ...customErrors.value,
166
180
  ...(params.errorMessages?.value || []),
167
181
  ])])
168
182
  const warnings = computed(() => [...new Set([
@@ -173,10 +187,26 @@ export function useValidation(params: {
173
187
  ...(params.showSuccessMessages.value ? innerSuccesses.value : []),
174
188
  ...(params.successMessages?.value || []),
175
189
  ])])
190
+ const internalHasSuccess = computed(() => customValidator.hasSuccess.value)
176
191
 
177
192
  const hasError = computed(() => errors.value.length > 0 || params.hasErrorProp?.value)
178
193
  const hasWarning = computed(() => warnings.value.length > 0 || params.hasWarningProp?.value)
179
- const hasSuccess = computed(() => (successes.value.length > 0 && !hasError.value && !hasWarning.value) || params.hasSuccessProp?.value)
194
+ // TODO: vérifier si c'est la meilleure approche pour supprimer le succès en mode Vuetify
195
+ const hasSuccess = computed(() => {
196
+ if (toValue(params.useVuetifyValidation)) {
197
+ return params.hasSuccessProp?.value ?? false
198
+ }
199
+ return (
200
+ (internalHasSuccess.value || (params.successMessages?.value?.length ?? 0) > 0)
201
+ && !hasError.value
202
+ && !hasWarning.value
203
+ ) || (params.hasSuccessProp?.value ?? false)
204
+ })
205
+
206
+ function clearValidation() {
207
+ vuetifyErrors.value = []
208
+ customValidator.clearValidation()
209
+ }
180
210
 
181
211
  return {
182
212
  errors,
@@ -186,5 +216,6 @@ export function useValidation(params: {
186
216
  hasWarning,
187
217
  hasSuccess,
188
218
  validate,
219
+ clearValidation,
189
220
  }
190
221
  }
@@ -12,8 +12,8 @@ export function useVuetifyValidation(
12
12
  errorMessages: Ref<string[]>,
13
13
  focused: Ref<boolean>,
14
14
  maxErrors: Ref<number> | undefined,
15
- name: Ref<string>,
16
- label: Ref<string>,
15
+ name: Ref<string | undefined>,
16
+ label: Ref<string | undefined>,
17
17
  readonly: Ref<boolean>,
18
18
  validateOn: Ref<'input' | 'blur' | 'submit'>,
19
19
  ) {
@@ -123,7 +123,10 @@ export const useFormFieldErrorHandling = (
123
123
 
124
124
  const hasError = computed(() => validation.hasError.value || (props.hasError ?? false))
125
125
  const hasWarning = computed(() => validation.hasWarning.value || (props.hasWarning ?? false))
126
- const hasSuccess = computed(() => ((validation.hasSuccess.value && !hasError.value && !hasWarning.value) || (props.hasSuccess ?? false)) && (props.showSuccessMessages ?? true))
126
+ const hasSuccess = computed(() =>
127
+ (validation.hasSuccess.value && !hasError.value && !hasWarning.value)
128
+ || (props.hasSuccess ?? false),
129
+ )
127
130
 
128
131
  const errors = computed(() => [...validation.errors.value, ...(props.errorMessages || [])])
129
132
  const warnings = computed(() => validation.warnings.value)
@@ -90,7 +90,7 @@ describe('useValidation', () => {
90
90
  expect(validResult.hasSuccess).toBe(true)
91
91
  })
92
92
 
93
- it('should respect showSuccessMessages option', async () => {
93
+ it('keeps the success state when showSuccessMessages is false while hiding messages', async () => {
94
94
  const validation = useValidation({ showSuccessMessages: false })
95
95
  const rules = [{
96
96
  type: 'required',
@@ -101,7 +101,7 @@ describe('useValidation', () => {
101
101
  }]
102
102
 
103
103
  const result = await validation.validateField('test', rules)
104
- expect(result.hasSuccess).toBe(false)
104
+ expect(result.hasSuccess).toBe(true)
105
105
  expect(result.state.successes).toEqual([])
106
106
  })
107
107