@cnamts/synapse 1.0.27 → 1.1.1

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 (621) hide show
  1. package/README.md +1 -1
  2. package/dist/{AutocompleteFilter-C9eLKyW8.js → AutocompleteFilter-CGF33skz.js} +3 -3
  3. package/dist/{DateFilter-y-GLkAkn.js → DateFilter-D7-MsKtx.js} +8 -8
  4. package/dist/{NumberFilter-DN6hIBS7.js → NumberFilter-bjQPPfsj.js} +1 -1
  5. package/dist/{PeriodFilter-MoUUp9qS.js → PeriodFilter-B3wJpK8-.js} +1 -1
  6. package/dist/{SelectFilter-bCbrdLmu.js → SelectFilter-BN6DbKAV.js} +1 -1
  7. package/dist/{TextFilter-CvjgEaoM.js → TextFilter-BffP0J2f.js} +4 -4
  8. package/dist/{apLightTheme2026-ug4Y23ns.js → apLightTheme2026-C4ygwMHC.js} +23 -22
  9. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +10 -10
  10. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +4 -4
  11. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +6 -6
  12. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +10 -10
  13. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +10 -10
  14. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +4 -4
  15. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +4 -4
  16. package/dist/components/Captcha/Captcha.d.ts +27 -16
  17. package/dist/components/Captcha/CaptchaForm.d.ts +29 -3
  18. package/dist/components/Captcha/types.d.ts +14 -0
  19. package/dist/components/Captcha/useCaptchaValidation.d.ts +37 -0
  20. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +2 -2
  21. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +33 -13
  22. package/dist/components/Customs/Selects/SelectBtnField/composables/useSelectBtnFieldValidation.d.ts +23 -0
  23. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +85 -313
  24. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +4 -4
  25. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
  26. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +9 -11
  27. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +7 -7
  28. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +18 -49
  29. package/dist/components/Customs/SyCheckBoxGroup/composables/useSyCheckBoxGroupValidation.d.ts +29 -0
  30. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +46 -0
  31. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +19 -54
  32. package/dist/components/Customs/SyCheckbox/composables/useSyCheckboxValidation.d.ts +27 -0
  33. package/dist/components/Customs/SyCheckbox/types.d.ts +49 -0
  34. package/dist/components/Customs/SyIcon/SyIcon.d.ts +77 -1
  35. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +10 -10
  36. package/dist/components/Customs/SyTextField/FieldState.d.ts +5 -0
  37. package/dist/components/Customs/SyTextField/SyTextField.d.ts +19 -79
  38. package/dist/components/Customs/SyTextField/locales.d.ts +7 -0
  39. package/dist/components/Customs/SyTextField/types.d.ts +67 -4
  40. package/dist/components/Customs/SyTextField/useNumberField.d.ts +23 -0
  41. package/dist/components/Customs/SyTextField/useSyTextFieldValidation.d.ts +38 -0
  42. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +170 -622
  43. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +85 -311
  44. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +39 -152
  45. package/dist/components/DialogBox/DialogBox.d.ts +2 -0
  46. package/dist/components/DialogBox/locales.d.ts +1 -0
  47. package/dist/components/FilterInline/FilterInline.d.ts +3 -3
  48. package/dist/components/FilterSideBar/FilterSideBar.d.ts +8 -4
  49. package/dist/components/LunarCalendar/LunarCalendar.d.ts +43 -14
  50. package/dist/components/LunarCalendar/types.d.ts +35 -0
  51. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +11 -12
  52. package/dist/components/MonthPicker/MonthPicker.d.ts +72 -1860
  53. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +21 -1846
  54. package/dist/components/MonthPicker/MonthPickerText/useTextField.d.ts +5 -0
  55. package/dist/components/MonthPicker/locales.d.ts +1 -0
  56. package/dist/components/MonthPicker/types.d.ts +11 -0
  57. package/dist/components/MonthPicker/useMonthPickerValidation.d.ts +37 -24
  58. package/dist/components/NirField/NirField.d.ts +96 -325
  59. package/dist/components/NirField/useNirValidation.d.ts +17 -25
  60. package/dist/components/PageContainer/PageContainer.d.ts +8 -0
  61. package/dist/components/PasswordField/PasswordField.d.ts +18 -37
  62. package/dist/components/PasswordField/locales.d.ts +2 -0
  63. package/dist/components/PasswordField/types.d.ts +16 -0
  64. package/dist/components/PasswordField/usePasswordFieldValidation.d.ts +38 -0
  65. package/dist/components/PeriodField/PeriodField.d.ts +349 -1253
  66. package/dist/components/PhoneField/PhoneField.d.ts +960 -2051
  67. package/dist/components/PhoneField/indicatifs.d.ts +715 -8
  68. package/dist/components/PhoneField/locales.d.ts +7 -0
  69. package/dist/components/PhoneField/types.d.ts +29 -0
  70. package/dist/components/PhoneField/usePhoneFieldValidation.d.ts +45 -0
  71. package/dist/components/PhoneField/usePhoneIndicatifs.d.ts +947 -0
  72. package/dist/components/SearchListField/SearchListField.d.ts +3 -3
  73. package/dist/components/SyTextArea/SyTextArea.d.ts +14 -11
  74. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +7 -7
  75. package/dist/components/Tables/common/SyTablePagination.d.ts +19 -20
  76. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +2 -2
  77. package/dist/composables/unifyValidation/useValidation.d.ts +4 -13
  78. package/dist/composables/useFilterable/useFilterable.d.ts +1 -2
  79. package/dist/design-system-v3.js +19 -19
  80. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +11 -10
  81. package/dist/designTokens/tokens/baseTokens.d.ts +18 -18
  82. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +10 -10
  83. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +11 -10
  84. package/dist/designTokens/tokens/semanticTokens.d.ts +14 -14
  85. package/dist/{main-CI6Q9nmO.js → main-C4wAktOs.js} +14999 -14025
  86. package/dist/synapse.css +1 -1
  87. package/dist/vuetifyConfig.js +27 -25
  88. package/package.json +12 -11
  89. package/src/assets/compat/_legacy-tokens.scss +91 -0
  90. package/src/assets/overrides/_utilities.scss +23 -0
  91. package/src/components/Accordion/Accordion.stories.ts +121 -1
  92. package/src/components/Accordion/tests/Accordion.visual.cy.ts +44 -0
  93. package/src/components/Accordion/tests/__snapshots__/accordion-default.snap.png +0 -0
  94. package/src/components/Accordion/tests/__snapshots__/accordion-disabled-item.snap.png +0 -0
  95. package/src/components/Accordion/tests/__snapshots__/accordion-open-first.snap.png +0 -0
  96. package/src/components/BackBtn/BackBtn.mdx +1 -1
  97. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  98. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  99. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  100. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  101. package/src/components/BackToTopBtn/BackToTopBtn.mdx +0 -1
  102. package/src/components/BackToTopBtn/tests/BackToTopBtn.visual.cy.ts +34 -0
  103. package/src/components/BackToTopBtn/tests/__snapshots__/back-to-top-btn-custom-nudge.snap.png +0 -0
  104. package/src/components/BackToTopBtn/tests/__snapshots__/back-to-top-btn-default.snap.png +0 -0
  105. package/src/components/Captcha/Captcha.stories.ts +134 -31
  106. package/src/components/Captcha/Captcha.vue +95 -28
  107. package/src/components/Captcha/CaptchaForm.vue +51 -22
  108. package/src/components/Captcha/tests/Captcha.focus.spec.ts +214 -0
  109. package/src/components/Captcha/tests/Captcha.spec.ts +233 -24
  110. package/src/components/Captcha/tests/Captcha.visual.cy.ts +45 -0
  111. package/src/components/Captcha/tests/CaptchaForm.spec.ts +82 -0
  112. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +20 -42
  113. package/src/components/Captcha/tests/__snapshots__/captcha-audio-type.snap.png +0 -0
  114. package/src/components/Captcha/tests/__snapshots__/captcha-image-type.snap.png +0 -0
  115. package/src/components/Captcha/tests/__snapshots__/captcha-no-helpdesk.snap.png +0 -0
  116. package/src/components/Captcha/types.ts +15 -0
  117. package/src/components/Captcha/useCaptchaValidation.ts +87 -0
  118. package/src/components/Captcha/validation/validation.stories.ts +1194 -0
  119. package/src/components/ChipList/ChipList.mdx +0 -1
  120. package/src/components/ChipList/tests/ChipList.visual.cy.ts +46 -0
  121. package/src/components/ChipList/tests/__snapshots__/chip-list-default.snap.png +0 -0
  122. package/src/components/ChipList/tests/__snapshots__/chip-list-readonly.snap.png +0 -0
  123. package/src/components/ChipList/tests/__snapshots__/chip-list-state-icons.snap.png +0 -0
  124. package/src/components/CollapsibleList/CollapsibleList.mdx +0 -1
  125. package/src/components/CollapsibleList/tests/CollapsibleList.visual.cy.ts +33 -0
  126. package/src/components/CollapsibleList/tests/__snapshots__/collapsible-list-default.snap.png +0 -0
  127. package/src/components/CollapsibleList/tests/__snapshots__/collapsible-list-no-title.snap.png +0 -0
  128. package/src/components/ContextualMenu/tests/ContextualMenu.visual.cy.ts +35 -0
  129. package/src/components/ContextualMenu/tests/__snapshots__/contextual-menu-default.snap.png +0 -0
  130. package/src/components/ContextualMenu/tests/__snapshots__/contextual-menu-selected.snap.png +0 -0
  131. package/src/components/CookieBanner/CookieBanner.mdx +0 -1
  132. package/src/components/CookieBanner/tests/CookieBanner.visual.cy.ts +29 -0
  133. package/src/components/CookieBanner/tests/__snapshots__/cookie-banner-default.snap.png +0 -0
  134. package/src/components/CookieBanner/tests/__snapshots__/cookie-banner-with-items.snap.png +0 -0
  135. package/src/components/CookiesSelection/tests/CookiesSelection.visual.cy.ts +21 -0
  136. package/src/components/CookiesSelection/tests/__snapshots__/cookies-selection-default.snap.png +0 -0
  137. package/src/components/CopyBtn/CopyBtn.mdx +0 -1
  138. package/src/components/CopyBtn/tests/CopyBtn.visual.cy.ts +24 -0
  139. package/src/components/CopyBtn/tests/__snapshots__/copy-btn-default.snap.png +0 -0
  140. package/src/components/CopyBtn/tests/__snapshots__/copy-btn-no-tooltip.snap.png +0 -0
  141. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +123 -439
  142. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +147 -41
  143. package/src/components/Customs/Selects/SelectBtnField/Validation/Validation.stories.ts +600 -0
  144. package/src/components/Customs/Selects/SelectBtnField/composables/useSelectBtnFieldValidation.ts +87 -0
  145. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +402 -33
  146. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.visual.cy.ts +60 -0
  147. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/SelectBtnField.spec.ts.snap +52 -38
  148. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-default.snap.png +0 -0
  149. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-inline.snap.png +0 -0
  150. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-readonly.snap.png +0 -0
  151. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-selected.snap.png +0 -0
  152. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +1 -1
  153. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +2 -0
  154. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.visual.cy.ts +63 -0
  155. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-default.snap.png +0 -0
  156. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-loading.snap.png +0 -0
  157. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-multiple.snap.png +0 -0
  158. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-with-value.snap.png +0 -0
  159. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +0 -93
  160. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.visual.cy.ts +48 -0
  161. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-default.snap.png +0 -0
  162. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-required.snap.png +0 -0
  163. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-with-value.snap.png +0 -0
  164. package/src/components/Customs/Selects/SySelect/SySelect.vue +22 -47
  165. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +3 -3
  166. package/src/components/Customs/Selects/SySelect/tests/SySelect.visual.cy.ts +77 -0
  167. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-clearable.snap.png +0 -0
  168. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-default.snap.png +0 -0
  169. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-multiple-chips.snap.png +0 -0
  170. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-required.snap.png +0 -0
  171. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-with-value.snap.png +0 -0
  172. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1 -92
  173. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +342 -162
  174. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +77 -129
  175. package/src/components/Customs/SyCheckBoxGroup/Validation/Validation.stories.ts +1008 -0
  176. package/src/components/Customs/SyCheckBoxGroup/composables/useSyCheckBoxGroupValidation.ts +107 -0
  177. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +180 -7
  178. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.visual.cy.ts +55 -0
  179. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-default.snap.png +0 -0
  180. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-disabled.snap.png +0 -0
  181. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-selected.snap.png +0 -0
  182. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-with-label.snap.png +0 -0
  183. package/src/components/Customs/SyCheckBoxGroup/types.ts +49 -0
  184. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +41 -161
  185. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +71 -156
  186. package/src/components/Customs/SyCheckbox/Validation/Validation.stories.ts +654 -0
  187. package/src/components/Customs/SyCheckbox/composables/useSyCheckboxValidation.ts +105 -0
  188. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +106 -0
  189. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.visual.cy.ts +61 -0
  190. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-checked.snap.png +0 -0
  191. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-disabled.snap.png +0 -0
  192. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-indeterminate.snap.png +0 -0
  193. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-required.snap.png +0 -0
  194. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-unchecked.snap.png +0 -0
  195. package/src/components/Customs/SyCheckbox/tests/useSyCheckboxValidation.spec.ts +98 -0
  196. package/src/components/Customs/SyCheckbox/types.ts +51 -0
  197. package/src/components/Customs/SyIcon/SyIcon.vue +19 -1
  198. package/src/components/Customs/SyIcon/tests/SyIcon.visual.cy.ts +83 -0
  199. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-color-error.snap.png +0 -0
  200. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-decorative.snap.png +0 -0
  201. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-informative.snap.png +0 -0
  202. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-role-button.snap.png +0 -0
  203. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-size-large.snap.png +0 -0
  204. package/src/components/Customs/SyIconButton/tests/SyIconButton.visual.cy.ts +55 -0
  205. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-default.snap.png +0 -0
  206. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-disabled.snap.png +0 -0
  207. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-error.snap.png +0 -0
  208. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-large.snap.png +0 -0
  209. package/src/components/Customs/SyPagination/tests/SyPagination.visual.cy.ts +40 -0
  210. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-first-page.snap.png +0 -0
  211. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-middle-page.snap.png +0 -0
  212. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-with-label.snap.png +0 -0
  213. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +0 -1
  214. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +4 -3
  215. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +1 -1
  216. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-asterisk.snap.png +0 -0
  217. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-comfortable.snap.png +0 -0
  218. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-compact.snap.png +0 -0
  219. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-default.snap.png +0 -0
  220. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-disabled.snap.png +0 -0
  221. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-error.snap.png +0 -0
  222. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-no-details.snap.png +0 -0
  223. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-readonly.snap.png +0 -0
  224. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-selected.snap.png +0 -0
  225. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-success.snap.png +0 -0
  226. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-warning.snap.png +0 -0
  227. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +63 -27
  228. package/src/components/Customs/SyTabs/tests/SyTabs.visual.cy.ts +30 -0
  229. package/src/components/Customs/SyTabs/tests/__snapshots__/sy-tabs-default.snap.png +0 -0
  230. package/src/components/Customs/SyTabs/tests/__snapshots__/sy-tabs-second-active.snap.png +0 -0
  231. package/src/components/Customs/SyTextField/FieldState.vue +50 -0
  232. package/src/components/Customs/SyTextField/SyTextField.stories.ts +160 -778
  233. package/src/components/Customs/SyTextField/SyTextField.vue +178 -160
  234. package/src/components/Customs/SyTextField/Validation/Validation.stories.ts +1164 -0
  235. package/src/components/Customs/SyTextField/locales.ts +12 -0
  236. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +174 -8
  237. package/src/components/Customs/SyTextField/tests/SyTextField.visual.cy.ts +116 -0
  238. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-clearable.snap.png +0 -0
  239. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-default.snap.png +0 -0
  240. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number-disabled.snap.png +0 -0
  241. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number-no-spinner.snap.png +0 -0
  242. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number.snap.png +0 -0
  243. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-prepend-icon.snap.png +0 -0
  244. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-readonly.snap.png +0 -0
  245. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-required.snap.png +0 -0
  246. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-with-value.snap.png +0 -0
  247. package/src/components/Customs/SyTextField/types.ts +70 -0
  248. package/src/components/Customs/SyTextField/useNumberField.ts +93 -0
  249. package/src/components/Customs/SyTextField/useSyTextFieldValidation.ts +95 -0
  250. package/src/components/DataList/DataList.mdx +0 -1
  251. package/src/components/DataList/tests/DataList.visual.cy.ts +85 -0
  252. package/src/components/DataList/tests/__snapshots__/data-list-default.snap.png +0 -0
  253. package/src/components/DataList/tests/__snapshots__/data-list-loading.snap.png +0 -0
  254. package/src/components/DataList/tests/__snapshots__/data-list-row.snap.png +0 -0
  255. package/src/components/DataList/tests/__snapshots__/data-list-with-icons.snap.png +0 -0
  256. package/src/components/DataList/tests/__snapshots__/data-list-with-title.snap.png +0 -0
  257. package/src/components/DataListGroup/DataListGroup.mdx +0 -1
  258. package/src/components/DataListGroup/tests/DataListGroup.visual.cy.ts +51 -0
  259. package/src/components/DataListGroup/tests/__snapshots__/data-list-group-default.snap.png +0 -0
  260. package/src/components/DataListGroup/tests/__snapshots__/data-list-group-loading.snap.png +0 -0
  261. package/src/components/DataListItem/tests/DataListItem.visual.cy.ts +53 -0
  262. package/src/components/DataListItem/tests/__snapshots__/data-list-item-chip.snap.png +0 -0
  263. package/src/components/DataListItem/tests/__snapshots__/data-list-item-default.snap.png +0 -0
  264. package/src/components/DataListItem/tests/__snapshots__/data-list-item-placeholder.snap.png +0 -0
  265. package/src/components/DataListItem/tests/__snapshots__/data-list-item-row.snap.png +0 -0
  266. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  267. package/src/components/DatePicker/CalendarMode/DatePicker.vue +7 -7
  268. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  269. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +7 -8
  270. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +1 -1
  271. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +2 -2
  272. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  273. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +10 -10
  274. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +11 -2
  275. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.visual.cy.ts +35 -0
  276. package/src/components/DeclarationAccessibilityPage/tests/__snapshots__/declaration-a11y-page-default.snap.png +0 -0
  277. package/src/components/DeclarationAccessibilityPage/tests/__snapshots__/declaration-a11y-page-full.snap.png +0 -0
  278. package/src/components/DiacriticPicker/DiacriticPicker.mdx +0 -1
  279. package/src/components/DiacriticPicker/tests/DiacriticPicker.visual.cy.ts +24 -0
  280. package/src/components/DiacriticPicker/tests/__snapshots__/diacritic-picker-custom-title.snap.png +0 -0
  281. package/src/components/DiacriticPicker/tests/__snapshots__/diacritic-picker-default.snap.png +0 -0
  282. package/src/components/DialogBox/DialogBox.mdx +0 -1
  283. package/src/components/DialogBox/DialogBox.stories.ts +399 -4
  284. package/src/components/DialogBox/DialogBox.vue +20 -0
  285. package/src/components/DialogBox/locales.ts +1 -0
  286. package/src/components/DialogBox/tests/DialogBox.spec.ts +73 -0
  287. package/src/components/DialogBox/tests/DialogBox.visual.cy.ts +24 -0
  288. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  289. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  290. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  291. package/src/components/DownloadBtn/tests/DownloadBtn.spec.ts +2 -2
  292. package/src/components/DownloadBtn/tests/DownloadBtn.visual.cy.ts +38 -0
  293. package/src/components/DownloadBtn/tests/__snapshots__/download-btn-dark.snap.png +0 -0
  294. package/src/components/DownloadBtn/tests/__snapshots__/download-btn-idle.snap.png +0 -0
  295. package/src/components/ErrorPage/ErrorPage.mdx +1 -1
  296. package/src/components/ErrorPage/tests/ErrorPage.visual.cy.ts +32 -0
  297. package/src/components/ErrorPage/tests/__snapshots__/error-page-custom.snap.png +0 -0
  298. package/src/components/ErrorPage/tests/__snapshots__/error-page-default.snap.png +0 -0
  299. package/src/components/ErrorPage/tests/__snapshots__/error-page-no-btn.snap.png +0 -0
  300. package/src/components/ExternalLinks/ExternalLinks.mdx +0 -1
  301. package/src/components/ExternalLinks/tests/ExternalLinks.visual.cy.ts +30 -0
  302. package/src/components/ExternalLinks/tests/__snapshots__/external-links-default.snap.png +0 -0
  303. package/src/components/ExternalLinks/tests/__snapshots__/external-links-fixed.snap.png +0 -0
  304. package/src/components/FileList/FileList.mdx +0 -1
  305. package/src/components/FileList/tests/FileList.visual.cy.ts +31 -0
  306. package/src/components/FileList/tests/__snapshots__/file-list-default.snap.png +0 -0
  307. package/src/components/FileList/tests/__snapshots__/file-list-with-delete.snap.png +0 -0
  308. package/src/components/FilePreview/accessibilite/Accessibility.mdx +86 -8
  309. package/src/components/FileUpload/tests/FileUpload.visual.cy.ts +36 -0
  310. package/src/components/FileUpload/tests/__snapshots__/file-upload-default.snap.png +0 -0
  311. package/src/components/FileUpload/tests/__snapshots__/file-upload-disabled.snap.png +0 -0
  312. package/src/components/FileUpload/tests/__snapshots__/file-upload-multiple.snap.png +0 -0
  313. package/src/components/FilterInline/FilterInline.mdx +0 -1
  314. package/src/components/FilterInline/FilterInline.stories.ts +2 -0
  315. package/src/components/FilterInline/FilterInline.vue +10 -5
  316. package/src/components/FilterInline/tests/FilterInline.visual.cy.ts +25 -0
  317. package/src/components/FilterInline/tests/__snapshots__/filter-inline-default.snap.png +0 -0
  318. package/src/components/FilterSideBar/FilterSideBar.mdx +8 -1
  319. package/src/components/FilterSideBar/FilterSideBar.stories.ts +136 -1
  320. package/src/components/FilterSideBar/FilterSideBar.vue +30 -8
  321. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +55 -0
  322. package/src/components/FilterSideBar/tests/FilterSideBar.visual.cy.ts +37 -0
  323. package/src/components/FilterSideBar/tests/__snapshots__/filter-sidebar-default.snap.png +0 -0
  324. package/src/components/FilterSideBar/tests/__snapshots__/filter-sidebar-modale.snap.png +0 -0
  325. package/src/components/FooterBar/FooterBar.mdx +0 -1
  326. package/src/components/FooterBar/tests/FooterBar.visual.cy.ts +37 -0
  327. package/src/components/FooterBar/tests/__snapshots__/footer-bar-default.snap.png +0 -0
  328. package/src/components/FooterBar/tests/__snapshots__/footer-bar-no-logo.snap.png +0 -0
  329. package/src/components/FooterBar/tests/__snapshots__/footer-bar-no-social.snap.png +0 -0
  330. package/src/components/FooterBar/tests/__snapshots__/footer-bar-version.snap.png +0 -0
  331. package/src/components/FranceConnectBtn/FranceConnectBtn.mdx +0 -1
  332. package/src/components/FranceConnectBtn/tests/FranceConnectBtn.visual.cy.ts +38 -0
  333. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-dark.snap.png +0 -0
  334. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-default.snap.png +0 -0
  335. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-plus.snap.png +0 -0
  336. package/src/components/HeaderBar/HeaderBar.mdx +0 -1
  337. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +4 -4
  338. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  339. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  340. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  341. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  342. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  343. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  344. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  345. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  346. package/src/components/HeaderLoading/HeaderLoading.mdx +0 -1
  347. package/src/components/HeaderLoading/tests/HeaderLoading.visual.cy.ts +34 -0
  348. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-custom-size.snap.png +0 -0
  349. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-default.snap.png +0 -0
  350. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-standalone.snap.png +0 -0
  351. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +4 -4
  352. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.visual.cy.ts +34 -0
  353. package/src/components/HeaderNavigationBar/tests/__snapshots__/header-navigation-bar-default.snap.png +0 -0
  354. package/src/components/HeaderNavigationBar/tests/__snapshots__/header-navigation-bar-subtitle.snap.png +0 -0
  355. package/src/components/HeaderToolbar/tests/HeaderToolbar.visual.cy.ts +25 -0
  356. package/src/components/HeaderToolbar/tests/__snapshots__/header-toolbar-custom.snap.png +0 -0
  357. package/src/components/HeaderToolbar/tests/__snapshots__/header-toolbar-default.snap.png +0 -0
  358. package/src/components/LangBtn/LangBtn.mdx +0 -1
  359. package/src/components/LangBtn/tests/LangBtn.visual.cy.ts +33 -0
  360. package/src/components/LangBtn/tests/__snapshots__/lang-btn-default.snap.png +0 -0
  361. package/src/components/LangBtn/tests/__snapshots__/lang-btn-english.snap.png +0 -0
  362. package/src/components/LangBtn/tests/__snapshots__/lang-btn-no-arrow.snap.png +0 -0
  363. package/src/components/Logo/Logo.mdx +1 -1
  364. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  365. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  366. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  367. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  368. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  369. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  370. package/src/components/LogoBrandSection/tests/LogoBrandSection.visual.cy.ts +43 -0
  371. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-default.snap.png +0 -0
  372. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-mobile.snap.png +0 -0
  373. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-reduced.snap.png +0 -0
  374. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-with-title.snap.png +0 -0
  375. package/src/components/LunarCalendar/LunarCalendar.mdx +6 -9
  376. package/src/components/LunarCalendar/LunarCalendar.stories.ts +243 -46
  377. package/src/components/LunarCalendar/LunarCalendar.vue +61 -26
  378. package/src/components/LunarCalendar/Validation/Validation.stories.ts +717 -0
  379. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +1 -1
  380. package/src/components/LunarCalendar/tests/LunarCalendar.spec.ts +197 -6
  381. package/src/components/LunarCalendar/tests/LunarCalendar.visual.cy.ts +36 -0
  382. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-default.snap.png +0 -0
  383. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-required.snap.png +0 -0
  384. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-with-value.snap.png +0 -0
  385. package/src/components/LunarCalendar/tests/useLunarCalendarValidation.spec.ts +287 -0
  386. package/src/components/LunarCalendar/types.ts +39 -0
  387. package/src/components/LunarCalendar/useLunarCalendarValidation.ts +115 -39
  388. package/src/components/MaintenancePage/tests/MaintenancePage.visual.cy.ts +22 -0
  389. package/src/components/MaintenancePage/tests/__snapshots__/maintenance-page-custom.snap.png +0 -0
  390. package/src/components/MaintenancePage/tests/__snapshots__/maintenance-page-default.snap.png +0 -0
  391. package/src/components/MonthPicker/MonthPicker.stories.ts +38 -281
  392. package/src/components/MonthPicker/MonthPicker.vue +66 -17
  393. package/src/components/MonthPicker/MonthPickerText/MonthPickerInput.vue +44 -20
  394. package/src/components/MonthPicker/MonthPickerText/useTextField.ts +5 -0
  395. package/src/components/MonthPicker/Validation/Validation.stories.ts +1117 -0
  396. package/src/components/MonthPicker/locales.ts +1 -0
  397. package/src/components/MonthPicker/tests/MonthPicker.spec.ts +353 -2
  398. package/src/components/MonthPicker/tests/MonthPicker.visual.cy.ts +37 -0
  399. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +14 -8
  400. package/src/components/MonthPicker/tests/__snapshots__/month-picker-default.snap.png +0 -0
  401. package/src/components/MonthPicker/tests/__snapshots__/month-picker-disabled.snap.png +0 -0
  402. package/src/components/MonthPicker/tests/__snapshots__/month-picker-readonly.snap.png +0 -0
  403. package/src/components/MonthPicker/tests/__snapshots__/month-picker-with-value.snap.png +0 -0
  404. package/src/components/MonthPicker/types.ts +16 -0
  405. package/src/components/MonthPicker/useMonthPickerValidation.ts +64 -27
  406. package/src/components/NirField/NirField.mdx +120 -66
  407. package/src/components/NirField/NirField.stories.ts +256 -682
  408. package/src/components/NirField/NirField.vue +98 -32
  409. package/src/components/NirField/tests/NirField.spec.ts +135 -14
  410. package/src/components/NirField/tests/NirField.visual.cy.ts +28 -0
  411. package/src/components/NirField/tests/__snapshots__/nir-field-complex.snap.png +0 -0
  412. package/src/components/NirField/tests/__snapshots__/nir-field-default.snap.png +0 -0
  413. package/src/components/NirField/tests/__snapshots__/nir-field-with-key.snap.png +0 -0
  414. package/src/components/NirField/tests/useNirValidation.spec.ts +168 -0
  415. package/src/components/NirField/useNirValidation.ts +44 -19
  416. package/src/components/NirField/validation/Validation.stories.ts +866 -0
  417. package/src/components/NotFoundPage/tests/NotFoundPage.visual.cy.ts +28 -0
  418. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +263 -245
  419. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-custom-btn.snap.png +0 -0
  420. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-default.snap.png +0 -0
  421. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-no-btn.snap.png +0 -0
  422. package/src/components/NotificationBar/NotificationBar.mdx +0 -1
  423. package/src/components/NotificationBar/tests/NotificationBar.visual.cy.ts +54 -0
  424. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-bottom.snap.png +0 -0
  425. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-info.snap.png +0 -0
  426. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-multiple.snap.png +0 -0
  427. package/src/components/PageContainer/PageContainer.mdx +0 -1
  428. package/src/components/PageContainer/PageContainer.stories.ts +170 -2
  429. package/src/components/PageContainer/PageContainer.vue +63 -8
  430. package/src/components/PageContainer/tests/PageContainer.visual.cy.ts +33 -0
  431. package/src/components/PageContainer/tests/__snapshots__/PageContainer.spec.ts.snap +19 -11
  432. package/src/components/PageContainer/tests/__snapshots__/page-container-color.snap.png +0 -0
  433. package/src/components/PageContainer/tests/__snapshots__/page-container-default.snap.png +0 -0
  434. package/src/components/PageContainer/tests/__snapshots__/page-container-md.snap.png +0 -0
  435. package/src/components/PaginatedTable/PaginatedTable.mdx +0 -1
  436. package/src/components/PaginatedTable/accessibilite/Accessibility.mdx +99 -7
  437. package/src/components/PaginatedTable/tests/PaginatedTable.visual.cy.ts +41 -0
  438. package/src/components/PaginatedTable/tests/__snapshots__/paginated-table-default.snap.png +0 -0
  439. package/src/components/PaginatedTable/tests/__snapshots__/paginated-table-server.snap.png +0 -0
  440. package/src/components/PasswordField/PasswordField.mdx +5 -52
  441. package/src/components/PasswordField/PasswordField.stories.ts +74 -931
  442. package/src/components/PasswordField/PasswordField.vue +120 -191
  443. package/src/components/PasswordField/Validation/Validation.stories.ts +1295 -0
  444. package/src/components/PasswordField/locales.ts +2 -0
  445. package/src/components/PasswordField/tests/PasswordField.spec.ts +144 -106
  446. package/src/components/PasswordField/tests/PasswordField.visual.cy.ts +49 -0
  447. package/src/components/PasswordField/tests/__snapshots__/password-field-default.snap.png +0 -0
  448. package/src/components/PasswordField/tests/__snapshots__/password-field-disabled.snap.png +0 -0
  449. package/src/components/PasswordField/tests/__snapshots__/password-field-required.snap.png +0 -0
  450. package/src/components/PasswordField/tests/__snapshots__/password-field-underlined.snap.png +0 -0
  451. package/src/components/PasswordField/types.ts +17 -0
  452. package/src/components/PasswordField/usePasswordFieldValidation.ts +100 -0
  453. package/src/components/PeriodField/PeriodField.mdx +0 -1
  454. package/src/components/PeriodField/PeriodField.stories.ts +3 -1
  455. package/src/components/PeriodField/PeriodField.vue +1 -1
  456. package/src/components/PeriodField/tests/PeriodField.visual.cy.ts +39 -0
  457. package/src/components/PeriodField/tests/__snapshots__/period-field-default.snap.png +0 -0
  458. package/src/components/PeriodField/tests/__snapshots__/period-field-no-calendar.snap.png +0 -0
  459. package/src/components/PeriodField/tests/__snapshots__/period-field-required.snap.png +0 -0
  460. package/src/components/PeriodField/tests/__snapshots__/period-field-with-value.snap.png +0 -0
  461. package/src/components/PhoneField/PhoneField.mdx +2 -3
  462. package/src/components/PhoneField/PhoneField.stories.ts +227 -410
  463. package/src/components/PhoneField/PhoneField.vue +205 -439
  464. package/src/components/PhoneField/indicatifs.ts +1 -1
  465. package/src/components/PhoneField/locales.ts +7 -0
  466. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +0 -1
  467. package/src/components/PhoneField/tests/PhoneField.spec.ts +518 -220
  468. package/src/components/PhoneField/tests/PhoneField.visual.cy.ts +28 -0
  469. package/src/components/PhoneField/tests/__snapshots__/phone-field-default.snap.png +0 -0
  470. package/src/components/PhoneField/tests/__snapshots__/phone-field-with-country-code.snap.png +0 -0
  471. package/src/components/PhoneField/tests/__snapshots__/phone-field-with-value.snap.png +0 -0
  472. package/src/components/PhoneField/types.ts +30 -0
  473. package/src/components/PhoneField/usePhoneFieldValidation.ts +119 -0
  474. package/src/components/PhoneField/usePhoneIndicatifs.ts +89 -0
  475. package/src/components/PhoneField/validation/validation.stories.ts +717 -0
  476. package/src/components/RangeField/RangeField.mdx +0 -1
  477. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  478. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  479. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  480. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  481. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  482. package/src/components/RatingPicker/RatingPicker.mdx +0 -1
  483. package/src/components/RatingPicker/tests/RatingPicker.visual.cy.ts +52 -0
  484. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-emotion.snap.png +0 -0
  485. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-number.snap.png +0 -0
  486. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-readonly.snap.png +0 -0
  487. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-stars.snap.png +0 -0
  488. package/src/components/SearchListField/SearchListField.mdx +1 -1
  489. package/src/components/SearchListField/SearchListField.stories.ts +1 -1
  490. package/src/components/SearchListField/SearchListField.vue +9 -4
  491. package/src/components/SearchListField/tests/SearchListField.spec.ts +127 -0
  492. package/src/components/SearchListField/tests/SearchListField.visual.cy.ts +35 -0
  493. package/src/components/SearchListField/tests/__snapshots__/search-list-field-default.snap.png +0 -0
  494. package/src/components/SearchListField/tests/__snapshots__/search-list-field-with-selection.snap.png +0 -0
  495. package/src/components/SkipLink/tests/SkipLink.visual.cy.ts +16 -0
  496. package/src/components/SkipLink/tests/__snapshots__/skip-link-focused.snap.png +0 -0
  497. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +0 -1
  498. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.visual.cy.ts +33 -0
  499. package/src/components/SocialMediaLinks/tests/__snapshots__/social-media-links-default.snap.png +0 -0
  500. package/src/components/SocialMediaLinks/tests/__snapshots__/social-media-links-no-native-heading.snap.png +0 -0
  501. package/src/components/StatusPage/StatusPage.vue +1 -0
  502. package/src/components/StatusPage/tests/StatusPage.visual.cy.ts +47 -0
  503. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +248 -230
  504. package/src/components/StatusPage/tests/__snapshots__/status-page-default.snap.png +0 -0
  505. package/src/components/StatusPage/tests/__snapshots__/status-page-full.snap.png +0 -0
  506. package/src/components/StatusPage/tests/__snapshots__/status-page-no-btn.snap.png +0 -0
  507. package/src/components/SubHeader/SubHeader.mdx +5 -6
  508. package/src/components/SubHeader/tests/SubHeader.visual.cy.ts +48 -0
  509. package/src/components/SubHeader/tests/__snapshots__/sub-header-default.snap.png +0 -0
  510. package/src/components/SubHeader/tests/__snapshots__/sub-header-loading.snap.png +0 -0
  511. package/src/components/SubHeader/tests/__snapshots__/sub-header-no-back-btn.snap.png +0 -0
  512. package/src/components/SubHeader/tests/__snapshots__/sub-header-with-subtitle.snap.png +0 -0
  513. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  514. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  515. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  516. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  517. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  518. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  519. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  520. package/src/components/SyHeading/tests/SyHeading.visual.cy.ts +33 -0
  521. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-1.snap.png +0 -0
  522. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-2.snap.png +0 -0
  523. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-3.snap.png +0 -0
  524. package/src/components/SyTextArea/SyTextArea.stories.ts +25 -0
  525. package/src/components/SyTextArea/SyTextArea.vue +7 -0
  526. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +1 -1
  527. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +18 -0
  528. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +135 -1
  529. package/src/components/SyTextArea/tests/SyTextArea.visual.cy.ts +48 -0
  530. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-default.snap.png +0 -0
  531. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-filled.snap.png +0 -0
  532. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-required.snap.png +0 -0
  533. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-with-value.snap.png +0 -0
  534. package/src/components/SyTextArea/validation/Validation.stories.ts +6 -86
  535. package/src/components/TableToolbar/tests/TableToolbar.visual.cy.ts +49 -0
  536. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-default.snap.png +0 -0
  537. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-filtered.snap.png +0 -0
  538. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-loading.snap.png +0 -0
  539. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-with-add-btn.snap.png +0 -0
  540. package/src/components/Tables/SyServerTable/SyServerTable.vue +3 -3
  541. package/src/components/Tables/SyServerTable/accessibilite/Accessibility.mdx +114 -7
  542. package/src/components/Tables/SyServerTable/tests/SyServerTable.visual.cy.ts +58 -0
  543. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-default.snap.png +0 -0
  544. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-loading.snap.png +0 -0
  545. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-with-select.snap.png +0 -0
  546. package/src/components/Tables/SyTable/accessibilite/Accessibility.mdx +116 -7
  547. package/src/components/Tables/SyTable/tests/SyTable.visual.cy.ts +70 -0
  548. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-compact.snap.png +0 -0
  549. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-default.snap.png +0 -0
  550. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-striped.snap.png +0 -0
  551. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-with-select.snap.png +0 -0
  552. package/src/components/Tables/common/tableStyles.scss +4 -4
  553. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +19 -13
  554. package/src/components/Tables/common/tests/filterByRange.spec.ts +23 -22
  555. package/src/components/ToolbarContainer/tests/ToolbarContainer.visual.cy.ts +34 -0
  556. package/src/components/ToolbarContainer/tests/__snapshots__/toolbar-container-default.snap.png +0 -0
  557. package/src/components/ToolbarContainer/tests/__snapshots__/toolbar-container-links.snap.png +0 -0
  558. package/src/components/UploadWorkflow/UploadWorkflow.mdx +0 -1
  559. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +1 -2
  560. package/src/components/UploadWorkflow/tests/UploadWorkflow.visual.cy.ts +39 -0
  561. package/src/components/UploadWorkflow/tests/__snapshots__/upload-workflow-default.snap.png +0 -0
  562. package/src/components/UploadWorkflow/tests/__snapshots__/upload-workflow-with-title.snap.png +0 -0
  563. package/src/components/UserMenuBtn/UserMenuBtn.mdx +0 -1
  564. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +177 -0
  565. package/src/components/UserMenuBtn/tests/UserMenuBtn.visual.cy.ts +42 -0
  566. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-default.snap.png +0 -0
  567. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-no-logout.snap.png +0 -0
  568. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-with-name.snap.png +0 -0
  569. package/src/composables/unifyValidation/documentationValidationProps.ts +2 -2
  570. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +2 -2
  571. package/src/composables/unifyValidation/tests/useValidation.spec.ts +13 -1
  572. package/src/composables/unifyValidation/useValidation.ts +41 -31
  573. package/src/composables/useFilterable/useFilterable.spec.ts +105 -142
  574. package/src/composables/useFilterable/useFilterable.ts +6 -17
  575. package/src/composables/useFormFieldErrorHandling.ts +1 -1
  576. package/src/composables/validation/tests/useFormValidation.spec.ts +11 -2
  577. package/src/composables/validation/tests/useValidatable.spec.ts +16 -6
  578. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  579. package/src/composables/validation/useValidation.ts +1 -1
  580. package/src/composantsVuetify/VCard/VCard.mdx +12 -0
  581. package/src/composantsVuetify/VCard/v-card.stories.ts +283 -1
  582. package/src/composantsVuetify/VCarousel/VCarousel.mdx +74 -0
  583. package/src/composantsVuetify/VCarousel/v-carousel.stories.ts +531 -0
  584. package/src/composantsVuetify/VNavigationDrawer/VNavgationDrawer.mdx +53 -0
  585. package/src/composantsVuetify/VNavigationDrawer/v-navigation-drawer.stories.ts +310 -0
  586. package/src/composantsVuetify/VSlideGroup/VSlideGroup.mdx +105 -0
  587. package/src/composantsVuetify/VSlideGroup/v-slide-group.stories.ts +463 -0
  588. package/src/composantsVuetify/VStepper/VStepper.mdx +56 -0
  589. package/src/composantsVuetify/VStepper/v-stepper.stories.ts +563 -0
  590. package/src/designTokens/tokens/amelipro/apLightTheme.ts +1 -0
  591. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  592. package/src/designTokens/tokens/baseColors.ts +1 -1
  593. package/src/designTokens/tokens/baseTokens.ts +18 -18
  594. package/src/designTokens/tokens/pa/paLightTheme.ts +1 -0
  595. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +1 -1
  596. package/src/stories/Components/Components.stories.ts +95 -11
  597. package/src/stories/Demarrer/Releases.stories.ts +59 -2
  598. package/src/stories/DesignTokens/Arrondis.mdx +1 -1
  599. package/src/stories/DesignTokens/Colors.mdx +2 -0
  600. package/src/stories/DesignTokens/Correspondances.mdx +219 -0
  601. package/src/stories/DesignTokens/UtiliserLesTokens.mdx +235 -0
  602. package/src/stories/DesignTokens/colors.stories.ts +582 -569
  603. package/src/stories/EcoConception/EcoBestPracticesDoc.vue +930 -0
  604. package/src/stories/EcoConception/EcoBestPratices.mdx +38 -0
  605. package/src/stories/EcoConception/Introduction.mdx +8 -1
  606. package/src/stories/EcoConception/datas/bonnes_pratiques_essentielles.json +1018 -0
  607. package/src/stories/EcoConception/ecoconception-best-practices.stories.ts +20 -0
  608. package/src/stories/GuideDuDev/Amelipro.mdx +9 -1
  609. package/src/stories/GuideDuDev/Amelipro.stories.ts +1023 -168
  610. package/src/stories/GuideDuDev/PortailAgent.stories.ts +0 -1
  611. package/src/utils/functions/deepCopy/index.ts +2 -3
  612. package/dist/components/Customs/SyCheckbox/locales.d.ts +0 -3
  613. package/dist/components/LunarCalendar/useLunarCalendarRules.d.ts +0 -5
  614. package/dist/components/PhoneField/tests/types.d.ts +0 -18
  615. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +0 -1
  616. package/dist/components/SyHeading/SyHeading.test.d.ts +0 -1
  617. package/src/components/Customs/SyCheckbox/locales.ts +0 -3
  618. package/src/components/Customs/SyTextField/types.d.ts +0 -4
  619. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +0 -184
  620. package/src/components/LunarCalendar/useLunarCalendarRules.ts +0 -96
  621. package/src/components/PhoneField/tests/types.d.ts +0 -19
@@ -9,4 +9,5 @@ export const locales = {
9
9
  yearBtnLabelUnselected: (selectedYear: string) => `Sélectionner une année, nous sommes actuellement en ${selectedYear}`,
10
10
  monthBtnLabelSelected: (selectedMonth: string) => `Sélectionner un mois, le mois sélectionné est ${selectedMonth}`,
11
11
  monthBtnLabelUnselected: (selectedMonth: string) => `Sélectionner un mois, nous sommes actuellement en ${selectedMonth}`,
12
+ fieldRequired: (label?: string) => `${label ? `Le champ ${label}` : 'Ce champ'} est requis.`,
12
13
  }
@@ -84,6 +84,8 @@ describe('mounthpicker', () => {
84
84
 
85
85
  expect(wrapper.find('input').element.value).toBe('11/2025')
86
86
 
87
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
88
+ // @ts-ignore - Vue Test Utils cannot infer props from complex intersection type
87
89
  await wrapper.setProps({ modelValue: '12/2026' })
88
90
  expect(wrapper.find('input').element.value).toBe('12/2026')
89
91
 
@@ -434,6 +436,8 @@ describe('mounthpicker', () => {
434
436
  await yearButton.trigger('keydown', { key: 'ArrowRight' })
435
437
  expect(yearSelector.find('.year-2025').attributes('tabindex')).toBe('0')
436
438
 
439
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
440
+ // @ts-ignore - Vue Test Utils cannot infer props from complex intersection type
437
441
  await wrapper.setProps({ yearsOrder: 'asc' })
438
442
  expect(yearSelector.find('.year-2025').attributes('tabindex')).toBe('0')
439
443
  await yearButton.trigger('keydown', { key: 'ArrowUp' })
@@ -473,6 +477,8 @@ describe('mounthpicker', () => {
473
477
  expect(yearButtons[0]!.text()).toBe('2100')
474
478
  expect(yearButtons[yearButtons.length - 1]!.text()).toBe('1900')
475
479
 
480
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
481
+ // @ts-ignore - Vue Test Utils cannot infer props from complex intersection type
476
482
  await wrapper.setProps({ yearsOrder: 'asc' })
477
483
 
478
484
  const newYearButtons = wrapper.findComponent({ name: 'YearSelector' }).findAll('.year-selector__year')
@@ -1162,7 +1168,7 @@ describe('mounthpicker', () => {
1162
1168
  options: {
1163
1169
  validate: (value: string) => {
1164
1170
  const regex = /^(0[1-9]|1[0-2])\/\d{4}$/
1165
- return regex.test(value) || 'Invalid month/year format. Use MM/YYYY.'
1171
+ return regex.test(value)
1166
1172
  },
1167
1173
  message: 'Invalid month/year format. Use MM/YYYY.',
1168
1174
  },
@@ -1171,6 +1177,7 @@ describe('mounthpicker', () => {
1171
1177
  })
1172
1178
 
1173
1179
  const input = wrapper.find('input')
1180
+ await input.trigger('focus')
1174
1181
  await input.setValue('99/2025')
1175
1182
  await input.trigger('blur')
1176
1183
 
@@ -1189,7 +1196,7 @@ describe('mounthpicker', () => {
1189
1196
  options: {
1190
1197
  validate: (value: string) => {
1191
1198
  const regex = /^(0[1-9]|1[0-2])\/\d{4}$/
1192
- return regex.test(value) || 'Invalid month/year format. Use MM/YYYY.'
1199
+ return regex.test(value)
1193
1200
  },
1194
1201
  message: 'Invalid month/year format. Use MM/YYYY.',
1195
1202
  },
@@ -1239,11 +1246,355 @@ describe('mounthpicker', () => {
1239
1246
  const yearButton = wrapper.findComponent({ name: 'YearSelector' }).find('.year-2025')
1240
1247
  await yearButton.trigger('click')
1241
1248
  await flushPromises()
1249
+ await (wrapper.vm as unknown as { validateOnSubmit: () => Promise<boolean> }).validateOnSubmit()
1250
+ await flushPromises()
1242
1251
 
1243
1252
  expect(wrapper.find('.v-field--error').exists()).toBe(true)
1244
1253
  expect(wrapper.find('.v-input__details').text()).toBe('The year must be 2026 or later.')
1245
1254
 
1246
1255
  wrapper.unmount()
1247
1256
  })
1257
+
1258
+ it('shows error when required field is left empty on blur', async () => {
1259
+ const wrapper = mount(MonthPicker, {
1260
+ props: {
1261
+ label: 'Début du projet',
1262
+ required: true,
1263
+ },
1264
+ })
1265
+ const vm = wrapper.vm as unknown as { errors: string[] }
1266
+
1267
+ const input = wrapper.find('input')
1268
+ await input.trigger('focus')
1269
+ await wrapper.vm.$nextTick()
1270
+ await input.trigger('blur')
1271
+ await wrapper.vm.$nextTick()
1272
+ await flushPromises()
1273
+ await wrapper.vm.$nextTick()
1274
+
1275
+ expect(vm.errors).toContain('Le champ Début du projet est requis.')
1276
+
1277
+ wrapper.unmount()
1278
+ })
1279
+
1280
+ it('validateOnSubmit returns false for empty required field and true for valid value', async () => {
1281
+ const emptyWrapper = mount(MonthPicker, {
1282
+ props: { modelValue: '', required: true, label: 'Début du projet' },
1283
+ })
1284
+ const emptyVm = emptyWrapper.vm as unknown as { validateOnSubmit: () => Promise<boolean>, errors: string[] }
1285
+ const result = await emptyVm.validateOnSubmit()
1286
+ expect(result).toBe(false)
1287
+ expect(emptyVm.errors).toContain('Le champ Début du projet est requis.')
1288
+ emptyWrapper.unmount()
1289
+
1290
+ const validWrapper = mount(MonthPicker, {
1291
+ props: { modelValue: '03/2026', required: true, label: 'Début du projet' },
1292
+ })
1293
+ const validVm = validWrapper.vm as unknown as { validateOnSubmit: () => Promise<boolean> }
1294
+ const validResult = await validVm.validateOnSubmit()
1295
+ expect(validResult).toBe(true)
1296
+ validWrapper.unmount()
1297
+ })
1298
+
1299
+ it('displays external errorMessages, warningMessages, successMessages injected by the parent', async () => {
1300
+ const errorWrapper = mount(MonthPicker, {
1301
+ props: {
1302
+ label: 'Début du projet',
1303
+ modelValue: '03/2026',
1304
+ errorMessages: ['Ce mois est déjà utilisé'],
1305
+ },
1306
+ })
1307
+ const errorMsg = errorWrapper.findAll('.v-messages__message')
1308
+ expect(errorMsg[0]?.text()).toBe('Ce mois est déjà utilisé')
1309
+ errorWrapper.unmount()
1310
+
1311
+ const warningWrapper = mount(MonthPicker, {
1312
+ props: {
1313
+ label: 'Début du projet',
1314
+ modelValue: '03/2026',
1315
+ warningMessages: ['Ce mois est proche d\'une échéance'],
1316
+ },
1317
+ })
1318
+ const warningMsg = warningWrapper.findAll('.v-messages__message')
1319
+ expect(warningMsg[0]?.text()).toBe('Ce mois est proche d\'une échéance')
1320
+ warningWrapper.unmount()
1321
+
1322
+ const successWrapper = mount(MonthPicker, {
1323
+ props: {
1324
+ label: 'Début du projet',
1325
+ modelValue: '03/2026',
1326
+ successMessages: ['Mois accepté'],
1327
+ showSuccessMessages: true,
1328
+ },
1329
+ })
1330
+ const successMsg = successWrapper.findAll('.v-messages__message')
1331
+ expect(successMsg[0]?.text()).toBe('Mois accepté')
1332
+ successWrapper.unmount()
1333
+ })
1334
+
1335
+ it('handles customWarningRules and customSuccessRules', async () => {
1336
+ async function mountAndBlur(modelValue: string) {
1337
+ const wrapper = mount(MonthPicker, {
1338
+ props: {
1339
+ label: 'Début du projet',
1340
+ modelValue,
1341
+ customRules: [{
1342
+ type: 'custom',
1343
+ options: {
1344
+ message: 'Le format doit être MM/YYYY.',
1345
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1346
+ },
1347
+ }],
1348
+ customWarningRules: [{
1349
+ type: 'custom',
1350
+ options: {
1351
+ warningMessage: 'La date est dans le passé.',
1352
+ validate: (value: string) => {
1353
+ const [month, year] = value.split('/').map(Number) as [number, number]
1354
+ const now = new Date()
1355
+ return year > now.getFullYear() || (year === now.getFullYear() && month >= now.getMonth() + 1)
1356
+ },
1357
+ },
1358
+ }],
1359
+ customSuccessRules: [{
1360
+ type: 'custom',
1361
+ options: {
1362
+ successMessage: 'Date valide.',
1363
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1364
+ },
1365
+ }],
1366
+ showSuccessMessages: true,
1367
+ },
1368
+ })
1369
+ await wrapper.find('input').trigger('focus')
1370
+ await wrapper.vm.$nextTick()
1371
+ await wrapper.find('input').trigger('blur')
1372
+ await wrapper.vm.$nextTick()
1373
+ await flushPromises()
1374
+ await wrapper.vm.$nextTick()
1375
+ return wrapper
1376
+ }
1377
+
1378
+ const errorWrapper = await mountAndBlur('99/2025')
1379
+ expect((errorWrapper.vm as unknown as { errors: string[] }).errors).toContain('Le format doit être MM/YYYY.')
1380
+ errorWrapper.unmount()
1381
+
1382
+ const warningWrapper = await mountAndBlur('01/2020')
1383
+ const warningMessages = warningWrapper.findAll('.v-messages__message')
1384
+ expect(warningMessages[0]?.text()).toBe('La date est dans le passé.')
1385
+ warningWrapper.unmount()
1386
+
1387
+ const successWrapper = await mountAndBlur('03/2030')
1388
+ expect((successWrapper.vm as unknown as { successes: string[] }).successes).toContain('Date valide.')
1389
+ successWrapper.unmount()
1390
+ })
1391
+
1392
+ it('sets hasError, hasWarning, hasSuccess based on validation state', async () => {
1393
+ async function mountAndBlur(modelValue: string) {
1394
+ const wrapper = mount(MonthPicker, {
1395
+ props: {
1396
+ label: 'Début du projet',
1397
+ modelValue,
1398
+ customRules: [{
1399
+ type: 'custom',
1400
+ options: {
1401
+ message: 'Le format doit être MM/YYYY.',
1402
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1403
+ },
1404
+ }],
1405
+ customWarningRules: [{
1406
+ type: 'custom',
1407
+ options: {
1408
+ warningMessage: 'La date est dans le passé.',
1409
+ validate: (value: string) => {
1410
+ const [month, year] = value.split('/').map(Number) as [number, number]
1411
+ const now = new Date()
1412
+ return year > now.getFullYear() || (year === now.getFullYear() && month >= now.getMonth() + 1)
1413
+ },
1414
+ },
1415
+ }],
1416
+ customSuccessRules: [{
1417
+ type: 'custom',
1418
+ options: {
1419
+ successMessage: 'Date valide.',
1420
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1421
+ },
1422
+ }],
1423
+ },
1424
+ })
1425
+ await wrapper.find('input').trigger('focus')
1426
+ await wrapper.vm.$nextTick()
1427
+ await wrapper.find('input').trigger('blur')
1428
+ await wrapper.vm.$nextTick()
1429
+ await flushPromises()
1430
+ await wrapper.vm.$nextTick()
1431
+ return wrapper.vm as unknown as { hasError: boolean, hasWarning: boolean, hasSuccess: boolean }
1432
+ }
1433
+
1434
+ expect((await mountAndBlur('99/2025')).hasError).toBe(true)
1435
+ expect((await mountAndBlur('01/2020')).hasWarning).toBe(true)
1436
+ expect((await mountAndBlur('03/2030')).hasSuccess).toBe(true)
1437
+ })
1438
+
1439
+ it('does not show errors when disableErrorHandling is true', async () => {
1440
+ const wrapper = mount(MonthPicker, {
1441
+ props: {
1442
+ label: 'Début du projet',
1443
+ required: true,
1444
+ disableErrorHandling: true,
1445
+ },
1446
+ })
1447
+
1448
+ const input = wrapper.find('input')
1449
+ await input.trigger('focus')
1450
+ await wrapper.vm.$nextTick()
1451
+ await input.trigger('blur')
1452
+ await wrapper.vm.$nextTick()
1453
+ await flushPromises()
1454
+ await wrapper.vm.$nextTick()
1455
+
1456
+ expect(wrapper.find('.v-field--error').exists()).toBe(false)
1457
+ expect((wrapper.vm as unknown as { errors: string[] }).errors).toHaveLength(0)
1458
+
1459
+ wrapper.unmount()
1460
+ })
1461
+
1462
+ it('validates on input when isValidateOnBlur is false', async () => {
1463
+ const wrapper = mount(MonthPicker, {
1464
+ props: {
1465
+ label: 'Début du projet',
1466
+ isValidateOnBlur: false,
1467
+ customRules: [{
1468
+ type: 'custom',
1469
+ options: {
1470
+ message: 'Le format doit être MM/YYYY.',
1471
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1472
+ },
1473
+ }],
1474
+ },
1475
+ })
1476
+
1477
+ const input = wrapper.find('input')
1478
+ await input.setValue('99/2025')
1479
+ await wrapper.vm.$nextTick()
1480
+ await flushPromises()
1481
+ await wrapper.vm.$nextTick()
1482
+
1483
+ expect(wrapper.find('.v-field--error').exists()).toBe(true)
1484
+ expect((wrapper.vm as unknown as { errors: string[] }).errors).toContain('Le format doit être MM/YYYY.')
1485
+
1486
+ wrapper.unmount()
1487
+ })
1488
+
1489
+ it('sets aria-required from the required prop alone (without displaying the asterisk)', async () => {
1490
+ const wrapper = mount(MonthPicker, {
1491
+ props: {
1492
+ label: 'Début du projet',
1493
+ required: true,
1494
+ },
1495
+ })
1496
+
1497
+ const input = wrapper.find('input')
1498
+ expect(input.attributes('aria-required')).toBe('true')
1499
+ // L'astérisque ne s'affiche pas tant que displayAsterisk n'est pas activé
1500
+ expect(wrapper.find('label').text()).not.toContain('*')
1501
+
1502
+ wrapper.unmount()
1503
+ })
1504
+
1505
+ it('displays the asterisk only when both required and displayAsterisk are true', async () => {
1506
+ const wrapper = mount(MonthPicker, {
1507
+ props: {
1508
+ label: 'Début du projet',
1509
+ required: true,
1510
+ displayAsterisk: true,
1511
+ },
1512
+ })
1513
+
1514
+ expect(wrapper.find('label').text()).toContain('*')
1515
+ expect(wrapper.find('input').attributes('aria-required')).toBe('true')
1516
+
1517
+ wrapper.unmount()
1518
+
1519
+ // displayAsterisk sans required : pas d'astérisque
1520
+ const asteriskOnlyWrapper = mount(MonthPicker, {
1521
+ props: {
1522
+ label: 'Début du projet',
1523
+ displayAsterisk: true,
1524
+ },
1525
+ })
1526
+ expect(asteriskOnlyWrapper.find('label').text()).not.toContain('*')
1527
+ asteriskOnlyWrapper.unmount()
1528
+ })
1529
+
1530
+ it('does not set aria-required nor asterisk by default', async () => {
1531
+ const wrapper = mount(MonthPicker, {
1532
+ props: {
1533
+ label: 'Début du projet',
1534
+ },
1535
+ })
1536
+
1537
+ const input = wrapper.find('input')
1538
+ expect(input.attributes('aria-required')).toBeUndefined()
1539
+ expect(wrapper.find('label').text()).not.toContain('*')
1540
+
1541
+ wrapper.unmount()
1542
+ })
1543
+
1544
+ it('displays the validation state icon (error / warning / success)', async () => {
1545
+ async function mountAndBlur(modelValue: string) {
1546
+ const wrapper = mount(MonthPicker, {
1547
+ props: {
1548
+ label: 'Début du projet',
1549
+ modelValue,
1550
+ showSuccessMessages: true,
1551
+ customRules: [{
1552
+ type: 'custom',
1553
+ options: {
1554
+ message: 'Le format doit être MM/YYYY.',
1555
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1556
+ },
1557
+ }],
1558
+ customWarningRules: [{
1559
+ type: 'custom',
1560
+ options: {
1561
+ warningMessage: 'La date est dans le passé.',
1562
+ validate: (value: string) => {
1563
+ const [month, year] = value.split('/').map(Number) as [number, number]
1564
+ const now = new Date()
1565
+ return year > now.getFullYear() || (year === now.getFullYear() && month >= now.getMonth() + 1)
1566
+ },
1567
+ },
1568
+ }],
1569
+ customSuccessRules: [{
1570
+ type: 'custom',
1571
+ options: {
1572
+ successMessage: 'Date valide.',
1573
+ validate: (value: string) => /^(0[1-9]|1[0-2])\/\d{4}$/.test(value),
1574
+ },
1575
+ }],
1576
+ },
1577
+ })
1578
+ await wrapper.find('input').trigger('focus')
1579
+ await wrapper.vm.$nextTick()
1580
+ await wrapper.find('input').trigger('blur')
1581
+ await wrapper.vm.$nextTick()
1582
+ await flushPromises()
1583
+ await wrapper.vm.$nextTick()
1584
+ return wrapper
1585
+ }
1586
+
1587
+ const errorWrapper = await mountAndBlur('99/2025')
1588
+ expect(errorWrapper.find('.field-state-icon.error-icon').exists()).toBe(true)
1589
+ errorWrapper.unmount()
1590
+
1591
+ const warningWrapper = await mountAndBlur('01/2020')
1592
+ expect(warningWrapper.find('.field-state-icon.warning-icon').exists()).toBe(true)
1593
+ warningWrapper.unmount()
1594
+
1595
+ const successWrapper = await mountAndBlur('03/2030')
1596
+ expect(successWrapper.find('.field-state-icon.success-icon').exists()).toBe(true)
1597
+ successWrapper.unmount()
1598
+ })
1248
1599
  })
1249
1600
  })
@@ -0,0 +1,37 @@
1
+ import MonthPicker from '../MonthPicker.vue'
2
+
3
+ describe('MonthPicker - Visual regression tests', () => {
4
+ it('displays the month picker by default', () => {
5
+ cy.mountWithVuetify(MonthPicker)
6
+
7
+ cy.get('.v-text-field').should('be.visible')
8
+ cy.matchImageSnapshot('month-picker-default', cy.get('.v-text-field'))
9
+ })
10
+
11
+ it('displays the month picker with a value', () => {
12
+ cy.mountWithVuetify(MonthPicker, {
13
+ props: { modelValue: '03/2025' },
14
+ })
15
+
16
+ cy.get('.v-text-field').should('be.visible')
17
+ cy.matchImageSnapshot('month-picker-with-value', cy.get('.v-text-field'))
18
+ })
19
+
20
+ it('displays the month picker in disabled state', () => {
21
+ cy.mountWithVuetify(MonthPicker, {
22
+ props: { disabled: true },
23
+ })
24
+
25
+ cy.get('.v-text-field').should('be.visible')
26
+ cy.matchImageSnapshot('month-picker-disabled', cy.get('.v-text-field'))
27
+ })
28
+
29
+ it('displays the month picker in readonly state', () => {
30
+ cy.mountWithVuetify(MonthPicker, {
31
+ props: { readonly: true },
32
+ })
33
+
34
+ cy.get('.v-text-field').should('be.visible')
35
+ cy.matchImageSnapshot('month-picker-readonly', cy.get('.v-text-field'))
36
+ })
37
+ })
@@ -2169,7 +2169,7 @@ exports[`mounthpicker > should open the menu when clicking on the input 1`] = `
2169
2169
  <div class="visual-picker-header">
2170
2170
  <div
2171
2171
  class="visual-picker-header__title"
2172
- id="v-4-title"
2172
+ id="v-6-title"
2173
2173
  >
2174
2174
  Sélectionner un mois
2175
2175
  </div>
@@ -2396,6 +2396,7 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2396
2396
  <div class="sy-textfield-container">
2397
2397
  <div class="
2398
2398
  basic-field
2399
+ help-text-as-hint
2399
2400
  v-input
2400
2401
  v-input--center-affix
2401
2402
  v-input--density-default
@@ -2439,20 +2440,21 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2439
2440
  v-field-label
2440
2441
  v-label
2441
2442
  "
2442
- id="input-v-2-label"
2443
+ id="input-v-4-label"
2443
2444
  >
2444
2445
  <!---->
2445
2446
  Début du projet
2446
2447
  </label>
2447
2448
  <!---->
2448
2449
  <input
2449
- aria-describedby="input-v-2-messages"
2450
+ aria-describedby="input-v-4-messages"
2450
2451
  aria-label="Début du projet"
2451
- aria-labelledby="input-v-2-label"
2452
+ aria-labelledby="input-v-4-label"
2452
2453
  autocomplete="off"
2453
2454
  class="v-field__input"
2454
2455
  direction="horizontal"
2455
- id="input-v-2"
2456
+ id="input-v-4"
2457
+ name="v-1"
2456
2458
  size="1"
2457
2459
  title="Début du projet"
2458
2460
  type="text"
@@ -2466,6 +2468,8 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2466
2468
  <!-- v-if -->
2467
2469
  <!-- v-if -->
2468
2470
  <!-- v-if -->
2471
+ <!-- Boutons d'incrément custom (remplacent le spinner natif, perdu en type=text) -->
2472
+ <!-- v-if -->
2469
2473
  </div>
2470
2474
  <div class="v-field__outline">
2471
2475
  <div class="v-field__outline__start"></div>
@@ -2477,7 +2481,7 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2477
2481
  v-field-label--floating
2478
2482
  v-label
2479
2483
  "
2480
- for="input-v-2"
2484
+ for="input-v-4"
2481
2485
  >
2482
2486
  <!---->
2483
2487
  Début du projet
@@ -2521,7 +2525,7 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2521
2525
  <div
2522
2526
  aria-live="polite"
2523
2527
  class="v-input__details"
2524
- id="input-v-2-messages"
2528
+ id="input-v-4-messages"
2525
2529
  role="alert"
2526
2530
  >
2527
2531
  <transition-group-stub
@@ -2532,7 +2536,9 @@ exports[`mounthpicker > should render mounthpicker 1`] = `
2532
2536
  persisted="false"
2533
2537
  tag="div"
2534
2538
  >
2535
- <!---->
2539
+ <div class="v-messages__message">
2540
+ Format MM/AAAA
2541
+ </div>
2536
2542
  </transition-group-stub>
2537
2543
  <!---->
2538
2544
  </div>
@@ -0,0 +1,16 @@
1
+ import { type TextFieldProps } from './MonthPickerText/useTextField'
2
+ import { type MonthPickerVisualProps } from './MonthPickerVisual/MonthPickerVisualProps'
3
+ import { type FieldValidationProps } from '@/composables/unifyValidation/useValidation'
4
+ import { locales as defaultLocales } from './locales'
5
+
6
+ export type MonthPickerProps =
7
+ TextFieldProps
8
+ & FieldValidationProps
9
+ & Partial<MonthPickerVisualProps>
10
+ & {
11
+ modelValue?: string
12
+ locales?: typeof defaultLocales
13
+ disabled?: boolean
14
+ readonly?: boolean
15
+ displayAsterisk?: boolean
16
+ }
@@ -1,30 +1,67 @@
1
- import { type ValidationRule } from '@/composables/validation/useValidation'
2
- import { computed } from 'vue'
1
+ import type { ValidationRule as SyValidationRule } from '@/composables/validation/useValidation'
2
+ import { useValidation } from '@/composables/unifyValidation/useValidation'
3
+ import { computed, type Ref } from 'vue'
4
+ import type { ValidationRule as VuetifyValidationRule } from 'vuetify'
5
+ import type { locales } from './locales'
3
6
 
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
- }
7
+ export function useMonthPickerValidation(args: {
8
+ modelValue: Ref<unknown>
9
+ readonly: Ref<boolean>
10
+ disabled: Ref<boolean>
11
+ required: Ref<boolean>
12
+ isValidateOnBlur: Ref<boolean>
13
+ showSuccessMessages: Ref<boolean>
14
+ disableErrorHandling: Ref<boolean>
15
+ useVuetifyValidation: Ref<boolean>
16
+ label: Ref<string | undefined>
17
+ rules: Ref<VuetifyValidationRule[] | undefined>
18
+ customRules: Ref<SyValidationRule[]>
19
+ customWarningRules?: Ref<SyValidationRule[]>
20
+ customSuccessRules?: Ref<SyValidationRule[]>
21
+ errorMessages?: Ref<string[] | null | undefined>
22
+ warningMessages?: Ref<string[] | null | undefined>
23
+ successMessages?: Ref<string[] | null | undefined>
24
+ hasErrorProp?: Ref<boolean>
25
+ hasWarningProp?: Ref<boolean>
26
+ hasSuccessProp?: Ref<boolean>
27
+ maxErrors?: Ref<number>
28
+ focused: Ref<boolean>
29
+ locales: Ref<typeof locales>
30
+ }) {
31
+ const allCustomRules = computed<SyValidationRule[]>(() => {
32
+ const base: SyValidationRule[] = args.required.value
33
+ ? [{
34
+ type: 'required',
35
+ options: {
36
+ message: args.locales.value.fieldRequired(args.label.value),
37
+ fieldIdentifier: args.label.value,
38
+ },
39
+ }]
40
+ : []
41
+ return [...base, ...(args.customRules.value ?? [])]
42
+ })
16
43
 
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
- }))
44
+ return useValidation({
45
+ modelValue: args.modelValue,
46
+ readonly: args.readonly,
47
+ disabled: args.disabled,
48
+ required: args.required,
49
+ isValidateOnBlur: args.isValidateOnBlur,
50
+ showSuccessMessages: args.showSuccessMessages,
51
+ disableErrorHandling: args.disableErrorHandling,
52
+ useVuetifyValidation: args.useVuetifyValidation,
53
+ label: args.label,
54
+ rules: args.rules,
55
+ customRules: allCustomRules,
56
+ customWarningRules: args.customWarningRules,
57
+ customSuccessRules: args.customSuccessRules,
58
+ errorMessages: args.errorMessages,
59
+ warningMessages: args.warningMessages,
60
+ successMessages: args.successMessages,
61
+ hasErrorProp: args.hasErrorProp,
62
+ hasWarningProp: args.hasWarningProp,
63
+ hasSuccessProp: args.hasSuccessProp,
64
+ maxErrors: args.maxErrors,
65
+ focused: args.focused,
66
+ })
30
67
  }