@cnamts/synapse 1.0.26 → 1.1.0

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 (612) hide show
  1. package/README.md +1 -1
  2. package/dist/{AutocompleteFilter-BPR-a55G.js → AutocompleteFilter-DXd4szWO.js} +1 -1
  3. package/dist/{DateFilter-CknrJWs2.js → DateFilter-BD59Kgwf.js} +1 -1
  4. package/dist/{NumberFilter-DJ-yNlzv.js → NumberFilter-BSMZE7uw.js} +1 -1
  5. package/dist/{PeriodFilter-CiB5Oa9Z.js → PeriodFilter-keUdSSk0.js} +1 -1
  6. package/dist/{SelectFilter-EiafX97M.js → SelectFilter-Dhvvwazl.js} +1 -1
  7. package/dist/{TextFilter-BzOmpdxj.js → TextFilter-CU8FpXz0.js} +1 -1
  8. package/dist/apLightTheme2026-DbS7BPUf.js +612 -0
  9. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +4 -4
  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 +4 -4
  13. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +4 -4
  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/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +2 -2
  17. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2275 -487
  18. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
  19. package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
  20. package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
  21. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
  22. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +12 -15
  23. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
  24. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
  25. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +4 -4
  26. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +6 -6
  27. package/dist/components/Customs/SyIcon/SyIcon.d.ts +77 -1
  28. package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
  29. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +23 -41
  30. package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
  31. package/dist/components/Customs/SyTextField/SyTextField.d.ts +20 -80
  32. package/dist/components/Customs/SyTextField/locales.d.ts +7 -0
  33. package/dist/components/Customs/SyTextField/types.d.ts +67 -4
  34. package/dist/components/Customs/SyTextField/useNumberField.d.ts +23 -0
  35. package/dist/components/Customs/SyTextField/useSyTextFieldValidation.d.ts +38 -0
  36. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +253 -694
  37. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +121 -339
  38. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +54 -164
  39. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  40. package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
  41. package/dist/components/FilterInline/FilterInline.d.ts +3 -3
  42. package/dist/components/FilterSideBar/FilterSideBar.d.ts +4 -4
  43. package/dist/components/MonthPicker/MonthPicker.d.ts +49 -162
  44. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +49 -162
  45. package/dist/components/NirField/NirField.d.ts +120 -351
  46. package/dist/components/NirField/useNirValidation.d.ts +10 -20
  47. package/dist/components/PasswordField/PasswordField.d.ts +21 -40
  48. package/dist/components/PasswordField/locales.d.ts +2 -0
  49. package/dist/components/PasswordField/types.d.ts +16 -0
  50. package/dist/components/PasswordField/usePasswordFieldValidation.d.ts +38 -0
  51. package/dist/components/PeriodField/PeriodField.d.ts +485 -1365
  52. package/dist/components/PhoneField/PhoneField.d.ts +49 -162
  53. package/dist/components/SearchListField/SearchListField.d.ts +3 -3
  54. package/dist/components/SyTextArea/SyTextArea.d.ts +30 -17
  55. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
  56. package/dist/components/SyTextArea/locales.d.ts +1 -0
  57. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +1 -0
  58. package/dist/components/Tables/SyTable/SyTable.d.ts +1 -0
  59. package/dist/components/Tables/common/SyTablePagination.d.ts +33 -34
  60. package/dist/components/Tables/common/types.d.ts +2 -0
  61. package/dist/components/index.d.ts +1 -0
  62. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
  63. package/dist/composables/unifyValidation/useValidation.d.ts +17 -23
  64. package/dist/composables/useFilterable/useFilterable.d.ts +1 -2
  65. package/dist/design-system-v3.js +81 -80
  66. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
  67. package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
  68. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +54 -100
  69. package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
  70. package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
  71. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
  72. package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
  73. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -101
  74. package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
  75. package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
  76. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +54 -97
  77. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
  78. package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
  79. package/dist/main-D8ryUoS5.js +39481 -0
  80. package/dist/synapse.css +1 -1
  81. package/dist/vuetifyConfig.js +212 -74
  82. package/package.json +8 -5
  83. package/src/assets/overrides/_icons.scss +5 -4
  84. package/src/assets/overrides/_otp.scss +4 -4
  85. package/src/assets/overrides/_typography.scss +2 -1
  86. package/src/assets/overrides/_utilities.scss +1 -42
  87. package/src/components/Accordion/tests/Accordion.visual.cy.ts +44 -0
  88. package/src/components/Accordion/tests/__snapshots__/accordion-default.snap.png +0 -0
  89. package/src/components/Accordion/tests/__snapshots__/accordion-disabled-item.snap.png +0 -0
  90. package/src/components/Accordion/tests/__snapshots__/accordion-open-first.snap.png +0 -0
  91. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  92. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  93. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  94. package/src/components/BackToTopBtn/tests/BackToTopBtn.visual.cy.ts +34 -0
  95. package/src/components/BackToTopBtn/tests/__snapshots__/back-to-top-btn-custom-nudge.snap.png +0 -0
  96. package/src/components/BackToTopBtn/tests/__snapshots__/back-to-top-btn-default.snap.png +0 -0
  97. package/src/components/Captcha/tests/Captcha.visual.cy.ts +45 -0
  98. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +4 -0
  99. package/src/components/Captcha/tests/__snapshots__/captcha-audio-type.snap.png +0 -0
  100. package/src/components/Captcha/tests/__snapshots__/captcha-image-type.snap.png +0 -0
  101. package/src/components/Captcha/tests/__snapshots__/captcha-no-helpdesk.snap.png +0 -0
  102. package/src/components/ChipList/ChipList.vue +30 -18
  103. package/src/components/ChipList/tests/ChipList.visual.cy.ts +46 -0
  104. package/src/components/ChipList/tests/__snapshots__/chip-list-default.snap.png +0 -0
  105. package/src/components/ChipList/tests/__snapshots__/chip-list-readonly.snap.png +0 -0
  106. package/src/components/ChipList/tests/__snapshots__/chip-list-state-icons.snap.png +0 -0
  107. package/src/components/ChipList/tests/chipList.spec.ts +4 -4
  108. package/src/components/CollapsibleList/tests/CollapsibleList.visual.cy.ts +33 -0
  109. package/src/components/CollapsibleList/tests/__snapshots__/collapsible-list-default.snap.png +0 -0
  110. package/src/components/CollapsibleList/tests/__snapshots__/collapsible-list-no-title.snap.png +0 -0
  111. package/src/components/ContextualMenu/tests/ContextualMenu.visual.cy.ts +35 -0
  112. package/src/components/ContextualMenu/tests/__snapshots__/contextual-menu-default.snap.png +0 -0
  113. package/src/components/ContextualMenu/tests/__snapshots__/contextual-menu-selected.snap.png +0 -0
  114. package/src/components/CookieBanner/tests/CookieBanner.visual.cy.ts +29 -0
  115. package/src/components/CookieBanner/tests/__snapshots__/cookie-banner-default.snap.png +0 -0
  116. package/src/components/CookieBanner/tests/__snapshots__/cookie-banner-with-items.snap.png +0 -0
  117. package/src/components/CookiesSelection/tests/CookiesSelection.visual.cy.ts +21 -0
  118. package/src/components/CookiesSelection/tests/__snapshots__/cookies-selection-default.snap.png +0 -0
  119. package/src/components/CopyBtn/CopyBtn.vue +2 -2
  120. package/src/components/CopyBtn/tests/CopyBtn.visual.cy.ts +24 -0
  121. package/src/components/CopyBtn/tests/__snapshots__/copy-btn-default.snap.png +0 -0
  122. package/src/components/CopyBtn/tests/__snapshots__/copy-btn-no-tooltip.snap.png +0 -0
  123. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
  124. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
  125. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
  126. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.visual.cy.ts +60 -0
  127. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-default.snap.png +0 -0
  128. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-inline.snap.png +0 -0
  129. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-readonly.snap.png +0 -0
  130. package/src/components/Customs/Selects/SelectBtnField/tests/__snapshots__/select-btn-field-selected.snap.png +0 -0
  131. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
  132. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +183 -219
  133. package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
  134. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +763 -1
  135. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.visual.cy.ts +63 -0
  136. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-default.snap.png +0 -0
  137. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-loading.snap.png +0 -0
  138. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-multiple.snap.png +0 -0
  139. package/src/components/Customs/Selects/SyAutocomplete/tests/__snapshots__/sy-autocomplete-with-value.snap.png +0 -0
  140. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
  141. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
  142. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +936 -0
  143. package/src/components/Customs/Selects/SyInputSelect/tests/SyInputSelect.visual.cy.ts +48 -0
  144. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-default.snap.png +0 -0
  145. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-required.snap.png +0 -0
  146. package/src/components/Customs/Selects/SyInputSelect/tests/__snapshots__/sy-input-select-with-value.snap.png +0 -0
  147. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +9 -491
  148. package/src/components/Customs/Selects/SySelect/SySelect.vue +68 -126
  149. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
  150. package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
  151. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +199 -3
  152. package/src/components/Customs/Selects/SySelect/tests/SySelect.visual.cy.ts +77 -0
  153. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-clearable.snap.png +0 -0
  154. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-default.snap.png +0 -0
  155. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-multiple-chips.snap.png +0 -0
  156. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-required.snap.png +0 -0
  157. package/src/components/Customs/Selects/SySelect/tests/__snapshots__/sy-select-with-value.snap.png +0 -0
  158. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +935 -0
  159. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
  160. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +3 -3
  161. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.visual.cy.ts +55 -0
  162. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-default.snap.png +0 -0
  163. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-disabled.snap.png +0 -0
  164. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-selected.snap.png +0 -0
  165. package/src/components/Customs/SyCheckBoxGroup/tests/__snapshots__/sy-checkbox-group-with-label.snap.png +0 -0
  166. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
  167. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +9 -17
  168. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
  169. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.visual.cy.ts +61 -0
  170. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-checked.snap.png +0 -0
  171. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-disabled.snap.png +0 -0
  172. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-indeterminate.snap.png +0 -0
  173. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-required.snap.png +0 -0
  174. package/src/components/Customs/SyCheckbox/tests/__snapshots__/sy-checkbox-unchecked.snap.png +0 -0
  175. package/src/components/Customs/SyIcon/SyIcon.vue +19 -1
  176. package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
  177. package/src/components/Customs/SyIcon/tests/SyIcon.visual.cy.ts +83 -0
  178. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-color-error.snap.png +0 -0
  179. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-decorative.snap.png +0 -0
  180. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-informative.snap.png +0 -0
  181. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-role-button.snap.png +0 -0
  182. package/src/components/Customs/SyIcon/tests/__snapshots__/sy-icon-size-large.snap.png +0 -0
  183. package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
  184. package/src/components/Customs/SyIconButton/tests/SyIconButton.visual.cy.ts +55 -0
  185. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-default.snap.png +0 -0
  186. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-disabled.snap.png +0 -0
  187. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-error.snap.png +0 -0
  188. package/src/components/Customs/SyIconButton/tests/__snapshots__/sy-icon-button-large.snap.png +0 -0
  189. package/src/components/Customs/SyPagination/tests/SyPagination.visual.cy.ts +40 -0
  190. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-first-page.snap.png +0 -0
  191. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-middle-page.snap.png +0 -0
  192. package/src/components/Customs/SyPagination/tests/__snapshots__/sy-pagination-with-label.snap.png +0 -0
  193. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
  194. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -201
  195. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +83 -127
  196. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
  197. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
  198. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
  199. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
  200. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-asterisk.snap.png +0 -0
  201. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-comfortable.snap.png +0 -0
  202. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-compact.snap.png +0 -0
  203. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-default.snap.png +0 -0
  204. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-disabled.snap.png +0 -0
  205. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-error.snap.png +0 -0
  206. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-no-details.snap.png +0 -0
  207. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-readonly.snap.png +0 -0
  208. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-selected.snap.png +0 -0
  209. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-success.snap.png +0 -0
  210. package/src/components/Customs/SyRadioGroup/tests/__snapshots__/sy-radio-group-warning.snap.png +0 -0
  211. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +809 -0
  212. package/src/components/Customs/SyTabs/config.ts +3 -3
  213. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
  214. package/src/components/Customs/SyTabs/tests/SyTabs.visual.cy.ts +30 -0
  215. package/src/components/Customs/SyTabs/tests/__snapshots__/sy-tabs-default.snap.png +0 -0
  216. package/src/components/Customs/SyTabs/tests/__snapshots__/sy-tabs-second-active.snap.png +0 -0
  217. package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
  218. package/src/components/Customs/SyTextField/SyTextField.stories.ts +166 -803
  219. package/src/components/Customs/SyTextField/SyTextField.vue +191 -168
  220. package/src/components/Customs/SyTextField/Validation/Validation.stories.ts +1164 -0
  221. package/src/components/Customs/SyTextField/locales.ts +12 -0
  222. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +174 -8
  223. package/src/components/Customs/SyTextField/tests/SyTextField.visual.cy.ts +116 -0
  224. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-clearable.snap.png +0 -0
  225. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-default.snap.png +0 -0
  226. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number-disabled.snap.png +0 -0
  227. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number-no-spinner.snap.png +0 -0
  228. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-number.snap.png +0 -0
  229. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-prepend-icon.snap.png +0 -0
  230. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-readonly.snap.png +0 -0
  231. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-required.snap.png +0 -0
  232. package/src/components/Customs/SyTextField/tests/__snapshots__/sy-text-field-with-value.snap.png +0 -0
  233. package/src/components/Customs/SyTextField/types.ts +70 -0
  234. package/src/components/Customs/SyTextField/useNumberField.ts +93 -0
  235. package/src/components/Customs/SyTextField/useSyTextFieldValidation.ts +104 -0
  236. package/src/components/DataList/DataList.stories.ts +1 -1
  237. package/src/components/DataList/tests/DataList.visual.cy.ts +85 -0
  238. package/src/components/DataList/tests/__snapshots__/data-list-default.snap.png +0 -0
  239. package/src/components/DataList/tests/__snapshots__/data-list-loading.snap.png +0 -0
  240. package/src/components/DataList/tests/__snapshots__/data-list-row.snap.png +0 -0
  241. package/src/components/DataList/tests/__snapshots__/data-list-with-icons.snap.png +0 -0
  242. package/src/components/DataList/tests/__snapshots__/data-list-with-title.snap.png +0 -0
  243. package/src/components/DataListGroup/tests/DataListGroup.visual.cy.ts +51 -0
  244. package/src/components/DataListGroup/tests/__snapshots__/data-list-group-default.snap.png +0 -0
  245. package/src/components/DataListGroup/tests/__snapshots__/data-list-group-loading.snap.png +0 -0
  246. package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
  247. package/src/components/DataListItem/tests/DataListItem.visual.cy.ts +53 -0
  248. package/src/components/DataListItem/tests/__snapshots__/data-list-item-chip.snap.png +0 -0
  249. package/src/components/DataListItem/tests/__snapshots__/data-list-item-default.snap.png +0 -0
  250. package/src/components/DataListItem/tests/__snapshots__/data-list-item-placeholder.snap.png +0 -0
  251. package/src/components/DataListItem/tests/__snapshots__/data-list-item-row.snap.png +0 -0
  252. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  253. package/src/components/DatePicker/CalendarMode/DatePicker.vue +43 -148
  254. package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
  255. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
  256. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  257. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +51 -71
  258. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +206 -0
  259. package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
  260. package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
  261. package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
  262. package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
  263. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +1 -1
  264. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +131 -56
  265. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  266. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
  267. package/src/components/DatePicker/composables/index.ts +1 -0
  268. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
  269. package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
  270. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +10 -10
  271. package/src/components/DatePicker/composables/useCalendarKeyboardNavigation.ts +11 -2
  272. package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
  273. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
  274. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
  275. package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
  276. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.visual.cy.ts +35 -0
  277. package/src/components/DeclarationAccessibilityPage/tests/__snapshots__/declaration-a11y-page-default.snap.png +0 -0
  278. package/src/components/DeclarationAccessibilityPage/tests/__snapshots__/declaration-a11y-page-full.snap.png +0 -0
  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.vue +1 -1
  283. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  284. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  285. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  286. package/src/components/DownloadBtn/tests/DownloadBtn.spec.ts +2 -2
  287. package/src/components/DownloadBtn/tests/DownloadBtn.visual.cy.ts +38 -0
  288. package/src/components/DownloadBtn/tests/__snapshots__/download-btn-dark.snap.png +0 -0
  289. package/src/components/DownloadBtn/tests/__snapshots__/download-btn-idle.snap.png +0 -0
  290. package/src/components/ErrorPage/tests/ErrorPage.visual.cy.ts +32 -0
  291. package/src/components/ErrorPage/tests/__snapshots__/error-page-custom.snap.png +0 -0
  292. package/src/components/ErrorPage/tests/__snapshots__/error-page-default.snap.png +0 -0
  293. package/src/components/ErrorPage/tests/__snapshots__/error-page-no-btn.snap.png +0 -0
  294. package/src/components/ExternalLinks/tests/ExternalLinks.visual.cy.ts +30 -0
  295. package/src/components/ExternalLinks/tests/__snapshots__/external-links-default.snap.png +0 -0
  296. package/src/components/ExternalLinks/tests/__snapshots__/external-links-fixed.snap.png +0 -0
  297. package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
  298. package/src/components/FileList/tests/FileList.visual.cy.ts +31 -0
  299. package/src/components/FileList/tests/__snapshots__/file-list-default.snap.png +0 -0
  300. package/src/components/FileList/tests/__snapshots__/file-list-with-delete.snap.png +0 -0
  301. package/src/components/FilePreview/accessibilite/Accessibility.mdx +86 -8
  302. package/src/components/FileUpload/FileUpload.vue +2 -2
  303. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  304. package/src/components/FileUpload/tests/FileUpload.visual.cy.ts +36 -0
  305. package/src/components/FileUpload/tests/__snapshots__/file-upload-default.snap.png +0 -0
  306. package/src/components/FileUpload/tests/__snapshots__/file-upload-disabled.snap.png +0 -0
  307. package/src/components/FileUpload/tests/__snapshots__/file-upload-multiple.snap.png +0 -0
  308. package/src/components/FilterInline/FilterInline.mdx +2 -2
  309. package/src/components/FilterInline/FilterInline.stories.ts +2 -0
  310. package/src/components/FilterInline/FilterInline.vue +10 -5
  311. package/src/components/FilterInline/tests/FilterInline.visual.cy.ts +25 -0
  312. package/src/components/FilterInline/tests/__snapshots__/filter-inline-default.snap.png +0 -0
  313. package/src/components/FilterSideBar/FilterSideBar.stories.ts +5 -2
  314. package/src/components/FilterSideBar/FilterSideBar.vue +13 -8
  315. package/src/components/FilterSideBar/tests/FilterSideBar.visual.cy.ts +37 -0
  316. package/src/components/FilterSideBar/tests/__snapshots__/filter-sidebar-default.snap.png +0 -0
  317. package/src/components/FilterSideBar/tests/__snapshots__/filter-sidebar-modale.snap.png +0 -0
  318. package/src/components/FooterBar/FooterBar.vue +7 -7
  319. package/src/components/FooterBar/tests/FooterBar.visual.cy.ts +37 -0
  320. package/src/components/FooterBar/tests/__snapshots__/footer-bar-default.snap.png +0 -0
  321. package/src/components/FooterBar/tests/__snapshots__/footer-bar-no-logo.snap.png +0 -0
  322. package/src/components/FooterBar/tests/__snapshots__/footer-bar-no-social.snap.png +0 -0
  323. package/src/components/FooterBar/tests/__snapshots__/footer-bar-version.snap.png +0 -0
  324. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  325. package/src/components/FranceConnectBtn/tests/FranceConnectBtn.visual.cy.ts +38 -0
  326. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-dark.snap.png +0 -0
  327. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-default.snap.png +0 -0
  328. package/src/components/FranceConnectBtn/tests/__snapshots__/france-connect-btn-plus.snap.png +0 -0
  329. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
  330. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
  331. package/src/components/HeaderBar/HeaderBurgerMenu/tests/HeaderBurgerMenu.spec.ts +4 -4
  332. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  333. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
  334. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  335. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  336. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  337. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  338. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  339. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  340. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
  341. package/src/components/HeaderLoading/tests/HeaderLoading.visual.cy.ts +34 -0
  342. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-custom-size.snap.png +0 -0
  343. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-default.snap.png +0 -0
  344. package/src/components/HeaderLoading/tests/__snapshots__/header-loading-standalone.snap.png +0 -0
  345. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
  346. package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
  347. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +4 -4
  348. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.visual.cy.ts +34 -0
  349. package/src/components/HeaderNavigationBar/tests/__snapshots__/header-navigation-bar-default.snap.png +0 -0
  350. package/src/components/HeaderNavigationBar/tests/__snapshots__/header-navigation-bar-subtitle.snap.png +0 -0
  351. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
  352. package/src/components/HeaderToolbar/tests/HeaderToolbar.visual.cy.ts +25 -0
  353. package/src/components/HeaderToolbar/tests/__snapshots__/header-toolbar-custom.snap.png +0 -0
  354. package/src/components/HeaderToolbar/tests/__snapshots__/header-toolbar-default.snap.png +0 -0
  355. package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
  356. package/src/components/LangBtn/tests/LangBtn.visual.cy.ts +33 -0
  357. package/src/components/LangBtn/tests/__snapshots__/lang-btn-default.snap.png +0 -0
  358. package/src/components/LangBtn/tests/__snapshots__/lang-btn-english.snap.png +0 -0
  359. package/src/components/LangBtn/tests/__snapshots__/lang-btn-no-arrow.snap.png +0 -0
  360. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  361. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  362. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  363. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  364. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  365. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
  366. package/src/components/LogoBrandSection/tests/LogoBrandSection.visual.cy.ts +43 -0
  367. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
  368. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-default.snap.png +0 -0
  369. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-mobile.snap.png +0 -0
  370. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-reduced.snap.png +0 -0
  371. package/src/components/LogoBrandSection/tests/__snapshots__/logo-brand-section-with-title.snap.png +0 -0
  372. package/src/components/LunarCalendar/tests/LunarCalendar.visual.cy.ts +36 -0
  373. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-default.snap.png +0 -0
  374. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-required.snap.png +0 -0
  375. package/src/components/LunarCalendar/tests/__snapshots__/lunar-calendar-with-value.snap.png +0 -0
  376. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
  377. package/src/components/MaintenancePage/tests/MaintenancePage.visual.cy.ts +22 -0
  378. package/src/components/MaintenancePage/tests/__snapshots__/maintenance-page-custom.snap.png +0 -0
  379. package/src/components/MaintenancePage/tests/__snapshots__/maintenance-page-default.snap.png +0 -0
  380. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
  381. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
  382. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
  383. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
  384. package/src/components/MonthPicker/tests/MonthPicker.visual.cy.ts +37 -0
  385. package/src/components/MonthPicker/tests/__snapshots__/MonthPicker.spec.ts.snap +2 -0
  386. package/src/components/MonthPicker/tests/__snapshots__/month-picker-default.snap.png +0 -0
  387. package/src/components/MonthPicker/tests/__snapshots__/month-picker-disabled.snap.png +0 -0
  388. package/src/components/MonthPicker/tests/__snapshots__/month-picker-readonly.snap.png +0 -0
  389. package/src/components/MonthPicker/tests/__snapshots__/month-picker-with-value.snap.png +0 -0
  390. package/src/components/NirField/NirField.stories.ts +40 -682
  391. package/src/components/NirField/NirField.vue +101 -35
  392. package/src/components/NirField/tests/NirField.spec.ts +135 -14
  393. package/src/components/NirField/tests/NirField.visual.cy.ts +28 -0
  394. package/src/components/NirField/tests/__snapshots__/nir-field-complex.snap.png +0 -0
  395. package/src/components/NirField/tests/__snapshots__/nir-field-default.snap.png +0 -0
  396. package/src/components/NirField/tests/__snapshots__/nir-field-with-key.snap.png +0 -0
  397. package/src/components/NirField/tests/useNirValidation.spec.ts +168 -0
  398. package/src/components/NirField/useNirValidation.ts +28 -2
  399. package/src/components/NirField/validation/Validation.stories.ts +866 -0
  400. package/src/components/NotFoundPage/tests/NotFoundPage.visual.cy.ts +28 -0
  401. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-custom-btn.snap.png +0 -0
  402. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-default.snap.png +0 -0
  403. package/src/components/NotFoundPage/tests/__snapshots__/not-found-page-no-btn.snap.png +0 -0
  404. package/src/components/NotificationBar/Notification/Notification.vue +12 -12
  405. package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
  406. package/src/components/NotificationBar/tests/NotificationBar.visual.cy.ts +54 -0
  407. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-bottom.snap.png +0 -0
  408. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-info.snap.png +0 -0
  409. package/src/components/NotificationBar/tests/__snapshots__/notification-bar-multiple.snap.png +0 -0
  410. package/src/components/PageContainer/tests/PageContainer.visual.cy.ts +33 -0
  411. package/src/components/PageContainer/tests/__snapshots__/page-container-color.snap.png +0 -0
  412. package/src/components/PageContainer/tests/__snapshots__/page-container-default.snap.png +0 -0
  413. package/src/components/PageContainer/tests/__snapshots__/page-container-md.snap.png +0 -0
  414. package/src/components/PaginatedTable/Pagination.vue +2 -2
  415. package/src/components/PaginatedTable/accessibilite/Accessibility.mdx +99 -7
  416. package/src/components/PaginatedTable/tests/PaginatedTable.visual.cy.ts +41 -0
  417. package/src/components/PaginatedTable/tests/__snapshots__/paginated-table-default.snap.png +0 -0
  418. package/src/components/PaginatedTable/tests/__snapshots__/paginated-table-server.snap.png +0 -0
  419. package/src/components/PasswordField/PasswordField.mdx +5 -52
  420. package/src/components/PasswordField/PasswordField.stories.ts +74 -931
  421. package/src/components/PasswordField/PasswordField.vue +128 -199
  422. package/src/components/PasswordField/Validation/Validation.stories.ts +1295 -0
  423. package/src/components/PasswordField/locales.ts +2 -0
  424. package/src/components/PasswordField/tests/PasswordField.spec.ts +147 -109
  425. package/src/components/PasswordField/tests/PasswordField.visual.cy.ts +49 -0
  426. package/src/components/PasswordField/tests/__snapshots__/password-field-default.snap.png +0 -0
  427. package/src/components/PasswordField/tests/__snapshots__/password-field-disabled.snap.png +0 -0
  428. package/src/components/PasswordField/tests/__snapshots__/password-field-required.snap.png +0 -0
  429. package/src/components/PasswordField/tests/__snapshots__/password-field-underlined.snap.png +0 -0
  430. package/src/components/PasswordField/types.ts +17 -0
  431. package/src/components/PasswordField/usePasswordFieldValidation.ts +100 -0
  432. package/src/components/PeriodField/PeriodField.stories.ts +3 -1
  433. package/src/components/PeriodField/PeriodField.vue +1 -1
  434. package/src/components/PeriodField/tests/PeriodField.visual.cy.ts +39 -0
  435. package/src/components/PeriodField/tests/__snapshots__/period-field-default.snap.png +0 -0
  436. package/src/components/PeriodField/tests/__snapshots__/period-field-no-calendar.snap.png +0 -0
  437. package/src/components/PeriodField/tests/__snapshots__/period-field-required.snap.png +0 -0
  438. package/src/components/PeriodField/tests/__snapshots__/period-field-with-value.snap.png +0 -0
  439. package/src/components/PhoneField/PhoneField.vue +2 -2
  440. package/src/components/PhoneField/tests/PhoneField.spec.ts +1 -0
  441. package/src/components/PhoneField/tests/PhoneField.visual.cy.ts +28 -0
  442. package/src/components/PhoneField/tests/__snapshots__/phone-field-default.snap.png +0 -0
  443. package/src/components/PhoneField/tests/__snapshots__/phone-field-with-country-code.snap.png +0 -0
  444. package/src/components/PhoneField/tests/__snapshots__/phone-field-with-value.snap.png +0 -0
  445. package/src/components/RangeField/RangeSlider/RangeSlider.vue +2 -2
  446. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  447. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  448. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  449. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  450. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  451. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  452. package/src/components/RatingPicker/tests/RatingPicker.visual.cy.ts +52 -0
  453. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-emotion.snap.png +0 -0
  454. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-number.snap.png +0 -0
  455. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-readonly.snap.png +0 -0
  456. package/src/components/RatingPicker/tests/__snapshots__/rating-picker-stars.snap.png +0 -0
  457. package/src/components/SearchListField/SearchListField.mdx +1 -1
  458. package/src/components/SearchListField/SearchListField.stories.ts +1 -1
  459. package/src/components/SearchListField/SearchListField.vue +9 -4
  460. package/src/components/SearchListField/tests/SearchListField.spec.ts +127 -0
  461. package/src/components/SearchListField/tests/SearchListField.visual.cy.ts +35 -0
  462. package/src/components/SearchListField/tests/__snapshots__/search-list-field-default.snap.png +0 -0
  463. package/src/components/SearchListField/tests/__snapshots__/search-list-field-with-selection.snap.png +0 -0
  464. package/src/components/SkipLink/tests/SkipLink.visual.cy.ts +16 -0
  465. package/src/components/SkipLink/tests/__snapshots__/skip-link-focused.snap.png +0 -0
  466. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.visual.cy.ts +33 -0
  467. package/src/components/SocialMediaLinks/tests/__snapshots__/social-media-links-default.snap.png +0 -0
  468. package/src/components/SocialMediaLinks/tests/__snapshots__/social-media-links-no-native-heading.snap.png +0 -0
  469. package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
  470. package/src/components/StatusPage/tests/StatusPage.visual.cy.ts +47 -0
  471. package/src/components/StatusPage/tests/__snapshots__/status-page-default.snap.png +0 -0
  472. package/src/components/StatusPage/tests/__snapshots__/status-page-full.snap.png +0 -0
  473. package/src/components/StatusPage/tests/__snapshots__/status-page-no-btn.snap.png +0 -0
  474. package/src/components/SubHeader/SubHeader.vue +1 -1
  475. package/src/components/SubHeader/tests/SubHeader.visual.cy.ts +48 -0
  476. package/src/components/SubHeader/tests/__snapshots__/sub-header-default.snap.png +0 -0
  477. package/src/components/SubHeader/tests/__snapshots__/sub-header-loading.snap.png +0 -0
  478. package/src/components/SubHeader/tests/__snapshots__/sub-header-no-back-btn.snap.png +0 -0
  479. package/src/components/SubHeader/tests/__snapshots__/sub-header-with-subtitle.snap.png +0 -0
  480. package/src/components/SyAlert/SyAlert.vue +23 -23
  481. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  482. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  483. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  484. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  485. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  486. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  487. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  488. package/src/components/SyHeading/tests/SyHeading.visual.cy.ts +33 -0
  489. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-1.snap.png +0 -0
  490. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-2.snap.png +0 -0
  491. package/src/components/SyHeading/tests/__snapshots__/sy-heading-level-3.snap.png +0 -0
  492. package/src/components/SyTextArea/SyTextArea.stories.ts +202 -131
  493. package/src/components/SyTextArea/SyTextArea.vue +242 -83
  494. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
  495. package/src/components/SyTextArea/locales.ts +1 -0
  496. package/src/components/SyTextArea/tests/SyTextArea.a11y.spec.ts +18 -0
  497. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +583 -1
  498. package/src/components/SyTextArea/tests/SyTextArea.visual.cy.ts +48 -0
  499. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-default.snap.png +0 -0
  500. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-filled.snap.png +0 -0
  501. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-required.snap.png +0 -0
  502. package/src/components/SyTextArea/tests/__snapshots__/sy-textarea-with-value.snap.png +0 -0
  503. package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
  504. package/src/components/SyTextArea/validation/Validation.stories.ts +776 -0
  505. package/src/components/TableToolbar/TableToolbar.vue +6 -6
  506. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
  507. package/src/components/TableToolbar/tests/TableToolbar.visual.cy.ts +49 -0
  508. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-default.snap.png +0 -0
  509. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-filtered.snap.png +0 -0
  510. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-loading.snap.png +0 -0
  511. package/src/components/TableToolbar/tests/__snapshots__/table-toolbar-with-add-btn.snap.png +0 -0
  512. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
  513. package/src/components/Tables/SyServerTable/SyServerTable.vue +5 -4
  514. package/src/components/Tables/SyServerTable/accessibilite/Accessibility.mdx +114 -7
  515. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  516. package/src/components/Tables/SyServerTable/tests/SyServerTable.visual.cy.ts +58 -0
  517. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-default.snap.png +0 -0
  518. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-loading.snap.png +0 -0
  519. package/src/components/Tables/SyServerTable/tests/__snapshots__/sy-server-table-with-select.snap.png +0 -0
  520. package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
  521. package/src/components/Tables/SyTable/SyTable.vue +2 -1
  522. package/src/components/Tables/SyTable/accessibilite/Accessibility.mdx +116 -7
  523. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
  524. package/src/components/Tables/SyTable/tests/SyTable.visual.cy.ts +70 -0
  525. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-compact.snap.png +0 -0
  526. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-default.snap.png +0 -0
  527. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-striped.snap.png +0 -0
  528. package/src/components/Tables/SyTable/tests/__snapshots__/sy-table-with-select.snap.png +0 -0
  529. package/src/components/Tables/common/TableHeader.vue +2 -2
  530. package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
  531. package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
  532. package/src/components/Tables/common/tableStyles.scss +10 -10
  533. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +8 -1
  534. package/src/components/Tables/common/tests/filterByRange.spec.ts +23 -22
  535. package/src/components/Tables/common/types.ts +2 -0
  536. package/src/components/ToolbarContainer/tests/ToolbarContainer.visual.cy.ts +34 -0
  537. package/src/components/ToolbarContainer/tests/__snapshots__/toolbar-container-default.snap.png +0 -0
  538. package/src/components/ToolbarContainer/tests/__snapshots__/toolbar-container-links.snap.png +0 -0
  539. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +3 -2
  540. package/src/components/UploadWorkflow/tests/UploadWorkflow.visual.cy.ts +39 -0
  541. package/src/components/UploadWorkflow/tests/__snapshots__/upload-workflow-default.snap.png +0 -0
  542. package/src/components/UploadWorkflow/tests/__snapshots__/upload-workflow-with-title.snap.png +0 -0
  543. package/src/components/UserMenuBtn/tests/UserMenuBtn.visual.cy.ts +42 -0
  544. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-default.snap.png +0 -0
  545. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-no-logout.snap.png +0 -0
  546. package/src/components/UserMenuBtn/tests/__snapshots__/user-menu-btn-with-name.snap.png +0 -0
  547. package/src/components/index.ts +1 -0
  548. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +31 -0
  549. package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
  550. package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
  551. package/src/composables/tests/useError.spec.ts +30 -0
  552. package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
  553. package/src/composables/unifyValidation/documentationValidationProps.ts +6 -6
  554. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
  555. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +30 -0
  556. package/src/composables/unifyValidation/tests/useValidation.spec.ts +6 -2
  557. package/src/composables/unifyValidation/useCustomValidation.ts +19 -9
  558. package/src/composables/unifyValidation/useValidation.ts +35 -32
  559. package/src/composables/useFilterable/useFilterable.spec.ts +139 -134
  560. package/src/composables/useFilterable/useFilterable.ts +17 -24
  561. package/src/composables/useFormFieldErrorHandling.ts +3 -3
  562. package/src/composables/validation/tests/useFormValidation.spec.ts +11 -2
  563. package/src/composables/validation/tests/useValidatable.spec.ts +16 -6
  564. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  565. package/src/composables/validation/useValidation.ts +1 -1
  566. package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
  567. package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
  568. package/src/composantsVuetify/VCard/VCard.mdx +8 -0
  569. package/src/composantsVuetify/VCard/v-card.stories.ts +191 -1
  570. package/src/composantsVuetify/VStepper/VStepper.mdx +56 -0
  571. package/src/composantsVuetify/VStepper/v-stepper.stories.ts +563 -0
  572. package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
  573. package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
  574. package/src/designTokens/tokens/amelipro/apLightTheme.ts +73 -103
  575. package/src/designTokens/tokens/amelipro/apSemantic.ts +2 -2
  576. package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
  577. package/src/designTokens/tokens/baseTokens.ts +232 -0
  578. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
  579. package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
  580. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -104
  581. package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
  582. package/src/designTokens/tokens/pa/paLightTheme.ts +74 -99
  583. package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
  584. package/src/designTokens/tokens/semanticTokens.ts +114 -0
  585. package/src/stories/Accessibilite/DesignSystem/a11y-status.json +1 -1
  586. package/src/stories/Components/Components.stories.ts +68 -13
  587. package/src/stories/Demarrer/Releases.stories.ts +45 -2
  588. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
  589. package/src/stories/DesignTokens/Colors.mdx +8 -8
  590. package/src/stories/DesignTokens/colors.stories.ts +257 -1081
  591. package/src/stories/EcoConception/EcoBestPracticesDoc.vue +930 -0
  592. package/src/stories/EcoConception/EcoBestPratices.mdx +38 -0
  593. package/src/stories/EcoConception/Introduction.mdx +8 -1
  594. package/src/stories/EcoConception/datas/bonnes_pratiques_essentielles.json +1018 -0
  595. package/src/stories/EcoConception/ecoconception-best-practices.stories.ts +20 -0
  596. package/src/stories/GuideDuDev/Amelipro.mdx +9 -1
  597. package/src/stories/GuideDuDev/Amelipro.stories.ts +955 -168
  598. package/src/stories/GuideDuDev/PortailAgent.stories.ts +0 -1
  599. package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
  600. package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
  601. package/src/utils/functions/deepCopy/index.ts +2 -3
  602. package/src/utils/tests/insertAt.spec.ts +44 -0
  603. package/dist/apLightTheme-DS0Uy44H.js +0 -954
  604. package/dist/components/Customs/SyCheckbox/locales.d.ts +0 -3
  605. package/dist/components/RatingPicker/tests/RatingPicker.a11y.spect.d.ts +0 -1
  606. package/dist/components/SyHeading/SyHeading.a11y.test.d.ts +0 -1
  607. package/dist/components/SyHeading/SyHeading.test.d.ts +0 -1
  608. package/dist/main-BsJ9ec3i.js +0 -38954
  609. package/src/components/Customs/SyCheckbox/locales.ts +0 -3
  610. package/src/components/Customs/SyTextField/types.d.ts +0 -4
  611. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
  612. /package/src/components/RatingPicker/tests/{RatingPicker.a11y.spect.ts → RatingPicker.a11y.spec.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi } from 'vitest'
1
+ import { describe, it, expect } from 'vitest'
2
2
  import useFilterable, { type FilterItem, type FilterProp } from './useFilterable'
3
3
  import type { ChipItem } from '@/components/ChipList/types'
4
4
  import { nextTick, ref } from 'vue'
@@ -6,10 +6,7 @@ import { nextTick, ref } from 'vue'
6
6
  describe('Filterable', () => {
7
7
  describe('formatFilterName', () => {
8
8
  it('preserves existing behavior for names with spaces', () => {
9
- const { formatFilterName } = useFilterable(
10
- ref([]),
11
- () => {},
12
- )
9
+ const { formatFilterName } = useFilterable(ref([]))
13
10
 
14
11
  const name = formatFilterName('Test Name')
15
12
  expect(name).toBe('test-name')
@@ -19,10 +16,7 @@ describe('Filterable', () => {
19
16
  })
20
17
 
21
18
  it('preserves existing behavior for names with special characters', () => {
22
- const { formatFilterName } = useFilterable(
23
- ref([]),
24
- () => {},
25
- )
19
+ const { formatFilterName } = useFilterable(ref([]))
26
20
 
27
21
  const nameWithSpecialChars = formatFilterName('Filter@Name#Test')
28
22
  expect(nameWithSpecialChars).toBe('filternametest')
@@ -32,10 +26,7 @@ describe('Filterable', () => {
32
26
  })
33
27
 
34
28
  it('fixes camelCase issue by preserving case for single words', () => {
35
- const { formatFilterName } = useFilterable(
36
- ref([]),
37
- () => {},
38
- )
29
+ const { formatFilterName } = useFilterable(ref([]))
39
30
 
40
31
  const camelCaseName = formatFilterName('totoCase')
41
32
  expect(camelCaseName).toBe('totoCase')
@@ -48,10 +39,7 @@ describe('Filterable', () => {
48
39
  })
49
40
 
50
41
  it('handles edge cases correctly', () => {
51
- const { formatFilterName } = useFilterable(
52
- ref([]),
53
- () => {},
54
- )
42
+ const { formatFilterName } = useFilterable(ref([]))
55
43
 
56
44
  // Single lowercase word
57
45
  expect(formatFilterName('name')).toBe('name')
@@ -69,10 +57,7 @@ describe('Filterable', () => {
69
57
 
70
58
  describe('getChips', () => {
71
59
  it('uses the formatChip function to compute the chip', () => {
72
- const { getChips, getFilterCount } = useFilterable(
73
- ref([]),
74
- () => {},
75
- )
60
+ const { getChips, getFilterCount } = useFilterable(ref([]))
76
61
 
77
62
  const filter = {
78
63
  name: 'Test',
@@ -100,10 +85,7 @@ describe('Filterable', () => {
100
85
  })
101
86
 
102
87
  it('returns an empty array when the value is an empty string', () => {
103
- const { getChips, getFilterCount } = useFilterable(
104
- ref([]),
105
- () => {},
106
- )
88
+ const { getChips, getFilterCount } = useFilterable(ref([]))
107
89
 
108
90
  const filter = {
109
91
  name: 'Test',
@@ -118,10 +100,7 @@ describe('Filterable', () => {
118
100
  })
119
101
 
120
102
  it('returns the correct text when the value is a string', () => {
121
- const { getChips, getFilterCount } = useFilterable(
122
- ref([]),
123
- () => {},
124
- )
103
+ const { getChips, getFilterCount } = useFilterable(ref([]))
125
104
 
126
105
  const filter = {
127
106
  name: 'Test',
@@ -141,10 +120,7 @@ describe('Filterable', () => {
141
120
  })
142
121
 
143
122
  it('returns the correct text when the value is a number', () => {
144
- const { getChips, getFilterCount } = useFilterable(
145
- ref([]),
146
- () => {},
147
- )
123
+ const { getChips, getFilterCount } = useFilterable(ref([]))
148
124
 
149
125
  const filter = {
150
126
  name: 'Test',
@@ -164,10 +140,7 @@ describe('Filterable', () => {
164
140
  })
165
141
 
166
142
  it('returns the correct text when the value is a period field object', () => {
167
- const { getChips, getFilterCount } = useFilterable(
168
- ref([]),
169
- () => {},
170
- )
143
+ const { getChips, getFilterCount } = useFilterable(ref([]))
171
144
 
172
145
  const filter = {
173
146
  name: 'Test',
@@ -193,10 +166,7 @@ describe('Filterable', () => {
193
166
  })
194
167
 
195
168
  it('returns an empty array when the value is a period field object with null values', () => {
196
- const { getChips, getFilterCount } = useFilterable(
197
- ref([]),
198
- () => {},
199
- )
169
+ const { getChips, getFilterCount } = useFilterable(ref([]))
200
170
 
201
171
  const filter = {
202
172
  name: 'Test',
@@ -213,11 +183,44 @@ describe('Filterable', () => {
213
183
  expect(filterCount).toBe(0)
214
184
  })
215
185
 
186
+ it('returns a chip when only from is set', () => {
187
+ const { getChips, getFilterCount } = useFilterable(ref([]))
188
+
189
+ const filter = {
190
+ name: 'Test',
191
+ value: {
192
+ from: '2024-01-01',
193
+ to: null,
194
+ },
195
+ }
196
+
197
+ const chips = getChips(filter)
198
+ const filterCount = getFilterCount(filter)
199
+
200
+ expect(chips).toEqual([{ text: '2024-01-01 –', value: { from: '2024-01-01', to: null } }])
201
+ expect(filterCount).toBe(1)
202
+ })
203
+
204
+ it('returns a chip when only to is set', () => {
205
+ const { getChips, getFilterCount } = useFilterable(ref([]))
206
+
207
+ const filter = {
208
+ name: 'Test',
209
+ value: {
210
+ from: null,
211
+ to: '2024-12-31',
212
+ },
213
+ }
214
+
215
+ const chips = getChips(filter)
216
+ const filterCount = getFilterCount(filter)
217
+
218
+ expect(chips).toEqual([{ text: '– 2024-12-31', value: { from: null, to: '2024-12-31' } }])
219
+ expect(filterCount).toBe(1)
220
+ })
221
+
216
222
  it('returns the correct text when the value is an object', () => {
217
- const { getChips, getFilterCount } = useFilterable(
218
- ref([]),
219
- () => {},
220
- )
223
+ const { getChips, getFilterCount } = useFilterable(ref([]))
221
224
 
222
225
  const filter = {
223
226
  name: 'Test',
@@ -248,10 +251,7 @@ describe('Filterable', () => {
248
251
  })
249
252
 
250
253
  it('returns the correct text when the value is an array', () => {
251
- const { getChips, getFilterCount } = useFilterable(
252
- ref([]),
253
- () => {},
254
- )
254
+ const { getChips, getFilterCount } = useFilterable(ref([]))
255
255
 
256
256
  const filter = {
257
257
  name: 'Test',
@@ -275,10 +275,7 @@ describe('Filterable', () => {
275
275
  })
276
276
 
277
277
  it('returns the correct text when the value is an array of objects', () => {
278
- const { getChips, getFilterCount } = useFilterable(
279
- ref([]),
280
- () => {},
281
- )
278
+ const { getChips, getFilterCount } = useFilterable(ref([]))
282
279
 
283
280
  const filter = {
284
281
  name: 'Test',
@@ -313,10 +310,7 @@ describe('Filterable', () => {
313
310
  })
314
311
 
315
312
  it('returns the correct text when the value is an array of objects with text properties', () => {
316
- const { getChips, getFilterCount } = useFilterable(
317
- ref([]),
318
- () => {},
319
- )
313
+ const { getChips, getFilterCount } = useFilterable(ref([]))
320
314
 
321
315
  const filter = {
322
316
  name: 'Test',
@@ -351,10 +345,7 @@ describe('Filterable', () => {
351
345
  })
352
346
 
353
347
  it('returns the correct text when the value is an array of objects with text and value properties', () => {
354
- const { getChips, getFilterCount } = useFilterable(
355
- ref([]),
356
- () => {},
357
- )
348
+ const { getChips, getFilterCount } = useFilterable(ref([]))
358
349
 
359
350
  const filter = {
360
351
  name: 'Test',
@@ -393,10 +384,7 @@ describe('Filterable', () => {
393
384
  })
394
385
 
395
386
  it('returns an empty array when the value is undefined', () => {
396
- const { getChips, getFilterCount } = useFilterable(
397
- ref([]),
398
- () => {},
399
- )
387
+ const { getChips, getFilterCount } = useFilterable(ref([]))
400
388
 
401
389
  const filter = {} as FilterItem
402
390
 
@@ -410,10 +398,7 @@ describe('Filterable', () => {
410
398
 
411
399
  describe('removeChip', () => {
412
400
  it('removes the chip from the filter', () => {
413
- const { removeChip } = useFilterable(
414
- ref([]),
415
- () => {},
416
- )
401
+ const { removeChip } = useFilterable(ref([]))
417
402
 
418
403
  const filter = {
419
404
  name: 'Test',
@@ -431,10 +416,7 @@ describe('Filterable', () => {
431
416
  })
432
417
 
433
418
  it('removes the chip from the filter when the value is a number', () => {
434
- const { removeChip } = useFilterable(
435
- ref([]),
436
- () => {},
437
- )
419
+ const { removeChip } = useFilterable(ref([]))
438
420
 
439
421
  const filter = {
440
422
  name: 'Test',
@@ -452,10 +434,7 @@ describe('Filterable', () => {
452
434
  })
453
435
 
454
436
  it('removes the chip from the filter when the value is an object', () => {
455
- const { removeChip } = useFilterable(
456
- ref([]),
457
- () => {},
458
- )
437
+ const { removeChip } = useFilterable(ref([]))
459
438
 
460
439
  const filter = {
461
440
  name: 'Test',
@@ -482,10 +461,7 @@ describe('Filterable', () => {
482
461
  })
483
462
 
484
463
  it('removes the chip from the filter when the value is a period field object', () => {
485
- const { removeChip } = useFilterable(
486
- ref([]),
487
- () => {},
488
- )
464
+ const { removeChip } = useFilterable(ref([]))
489
465
 
490
466
  const periodFilter = {
491
467
  name: 'Test',
@@ -509,10 +485,7 @@ describe('Filterable', () => {
509
485
  })
510
486
 
511
487
  it('removes the chip from the filter when the value is a period field object with null values', () => {
512
- const { removeChip } = useFilterable(
513
- ref([]),
514
- () => {},
515
- )
488
+ const { removeChip } = useFilterable(ref([]))
516
489
 
517
490
  const periodFilter = {
518
491
  name: 'Test',
@@ -536,10 +509,7 @@ describe('Filterable', () => {
536
509
  })
537
510
 
538
511
  it('removes the chip from the filter when the value is an array', () => {
539
- const { removeChip } = useFilterable(
540
- ref([]),
541
- () => {},
542
- )
512
+ const { removeChip } = useFilterable(ref([]))
543
513
 
544
514
  const arrayFilter = {
545
515
  name: 'Test',
@@ -557,10 +527,7 @@ describe('Filterable', () => {
557
527
  })
558
528
 
559
529
  it('removes the chip from the filter when the value is an array of objects', () => {
560
- const { removeChip } = useFilterable(
561
- ref([]),
562
- () => {},
563
- )
530
+ const { removeChip } = useFilterable(ref([]))
564
531
 
565
532
  const arrayFilter = {
566
533
  name: 'Test',
@@ -591,10 +558,7 @@ describe('Filterable', () => {
591
558
  })
592
559
 
593
560
  it('removes the chip from the filter when the value is an empty array', () => {
594
- const { removeChip } = useFilterable(
595
- ref([]),
596
- () => {},
597
- )
561
+ const { removeChip } = useFilterable(ref([]))
598
562
 
599
563
  const arrayFilter = {
600
564
  name: 'Test',
@@ -612,10 +576,7 @@ describe('Filterable', () => {
612
576
  })
613
577
 
614
578
  it('removes the chip from the filter when the value is an array of strings', () => {
615
- const { removeChip } = useFilterable(
616
- ref([]),
617
- () => {},
618
- )
579
+ const { removeChip } = useFilterable(ref([]))
619
580
 
620
581
  const arrayFilter = {
621
582
  name: 'Test',
@@ -635,10 +596,7 @@ describe('Filterable', () => {
635
596
 
636
597
  describe('resetFilter', () => {
637
598
  it('resets the filter', () => {
638
- const { resetFilter } = useFilterable(
639
- ref([]),
640
- () => {},
641
- )
599
+ const { resetFilter } = useFilterable(ref([]))
642
600
 
643
601
  const filter = {
644
602
  name: 'Test',
@@ -652,42 +610,89 @@ describe('Filterable', () => {
652
610
  })
653
611
 
654
612
  describe('resetAllFilters', () => {
655
- it('resets all filters', async () => {
656
- const filters = ref<FilterProp>([])
657
- const emitsFunction = vi.fn()
658
- const { resetAllFilters } = useFilterable(
659
- filters,
660
- emitsFunction,
661
- )
662
-
663
- filters.value = [
664
- {
665
- name: 'Test',
666
- value: 'test',
667
- },
668
- {
669
- name: 'Test 2',
670
- value: 'test 2',
671
- },
613
+ it('sets all filter values to undefined', async () => {
614
+ const model = ref<FilterProp>([
615
+ { name: 'Test', value: 'test' },
616
+ { name: 'Test 2', value: 'test 2' },
617
+ ])
618
+ const { filters, resetAllFilters } = useFilterable(model)
619
+
620
+ resetAllFilters()
621
+
622
+ expect(filters.value.every(f => f.value === undefined)).toBe(true)
623
+ })
624
+ })
625
+
626
+ describe('model sync (full replacement)', () => {
627
+ it('initializes filters with a deep copy of the model on mount', () => {
628
+ const model = ref<FilterProp>([
629
+ { name: 'folder', value: ['cardio'] },
630
+ ])
631
+
632
+ const { filters } = useFilterable(model)
633
+
634
+ expect(filters.value).toEqual([{ name: 'folder', value: ['cardio'] }])
635
+ // Ensure it is a deep copy, not the same object reference
636
+ expect(filters.value[0]).not.toBe(model.value[0])
637
+ })
638
+
639
+ it('replaces local pending state when model updates another filter externally', async () => {
640
+ const model = ref<FilterProp>([
641
+ { name: 'folder', value: undefined },
642
+ { name: 'profession', value: undefined },
643
+ ])
644
+
645
+ const { filters } = useFilterable(model)
646
+
647
+ // Simulate a local pending selection in FilterSideBar (not yet applied)
648
+ filters.value.find(f => f.name === 'profession')!.value = ['infirmier']
649
+
650
+ // FilterInline updates 'folder' in the shared model
651
+ model.value = [
652
+ { name: 'folder', value: ['cardiologie'] },
653
+ { name: 'profession', value: undefined },
672
654
  ]
655
+ await nextTick()
656
+
657
+ // Current behavior: full model deep-copy on external change resets local pending state
658
+ expect(filters.value.find(f => f.name === 'profession')?.value).toBeUndefined()
659
+ // 'folder' must reflect the external change
660
+ expect(filters.value.find(f => f.name === 'folder')?.value).toEqual(['cardiologie'])
661
+ })
662
+
663
+ it('replaces local state when the model externally changes the same filter', async () => {
664
+ const model = ref<FilterProp>([
665
+ { name: 'folder', value: ['old-value'] },
666
+ ])
667
+
668
+ const { filters } = useFilterable(model)
669
+
670
+ // User has a local pending selection (not yet applied)
671
+ filters.value.find(f => f.name === 'folder')!.value = ['local-pending']
673
672
 
673
+ // External update changes the same filter
674
+ model.value = [{ name: 'folder', value: ['new-external'] }]
674
675
  await nextTick()
675
676
 
676
- resetAllFilters()
677
+ expect(filters.value.find(f => f.name === 'folder')?.value).toEqual(['new-external'])
678
+ })
677
679
 
678
- expect(emitsFunction).toHaveBeenCalledTimes(1)
679
- const emittedCall = emitsFunction.mock.calls[0]
680
- expect(emittedCall?.[0]).toBe('update:modelValue')
680
+ it('replaces local pending state even when model content is identical', async () => {
681
+ const model = ref<FilterProp>([
682
+ { name: 'folder', value: undefined },
683
+ ])
681
684
 
682
- // Use JSON serialization for robust comparison in CI environments
683
- const emittedArray = emittedCall?.[1]
684
- const expectedArray = [
685
- { name: 'Test', value: undefined },
686
- { name: 'Test 2', value: undefined },
687
- ]
685
+ const { filters } = useFilterable(model)
686
+
687
+ // User has local pending state
688
+ filters.value.find(f => f.name === 'folder')!.value = ['local']
689
+
690
+ // Re-assign the model with the same content (e.g. echo from own emit)
691
+ model.value = [{ name: 'folder', value: undefined }]
692
+ await nextTick()
688
693
 
689
- // Compare as JSON strings to avoid reference/prototype issues
690
- expect(JSON.stringify(emittedArray)).toBe(JSON.stringify(expectedArray))
694
+ // Current behavior: update is applied from model, local pending state is replaced
695
+ expect(filters.value.find(f => f.name === 'folder')?.value).toBeUndefined()
691
696
  })
692
697
  })
693
698
  })
@@ -1,4 +1,4 @@
1
- import { ref, watch, type Ref } from 'vue'
1
+ import { ref, toRaw, watch, type Ref } from 'vue'
2
2
  import type { ChipItem } from '@/components/ChipList/types'
3
3
  import slugify from 'slugify'
4
4
  import { deepCopy } from '@/utils/functions/deepCopy'
@@ -13,11 +13,11 @@ export type FilterItem = {
13
13
 
14
14
  export type FilterProp = FilterItem[]
15
15
 
16
- export default function useFilterable(model: Ref<FilterProp>, emits) {
16
+ export default function useFilterable(model: Ref<FilterProp>) {
17
17
  const filters = ref<FilterProp>([])
18
18
 
19
19
  watch(model, (newFilters) => {
20
- filters.value = deepCopy(newFilters)
20
+ filters.value = deepCopy(toRaw(newFilters))
21
21
  }, { deep: true, immediate: true })
22
22
 
23
23
  function getFilterCount(filter: FilterItem): number {
@@ -98,16 +98,20 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
98
98
  = typedValue.from !== undefined && typedValue.to !== undefined
99
99
 
100
100
  if (isPeriodField) {
101
- if (typedValue.from === null || typedValue.to === null) {
101
+ const hasFrom = typedValue.from !== null
102
+ const hasTo = typedValue.to !== null
103
+
104
+ if (!hasFrom && !hasTo) {
102
105
  return []
103
106
  }
104
107
 
105
- return [
106
- {
107
- text: `${typedValue.from} – ${typedValue.to}`,
108
- value: typedValue,
109
- },
110
- ]
108
+ const text = hasFrom && hasTo
109
+ ? `${typedValue.from} – ${typedValue.to}`
110
+ : hasFrom
111
+ ? `${typedValue.from} –`
112
+ : `– ${typedValue.to}`
113
+
114
+ return [{ text, value: typedValue }]
111
115
  }
112
116
 
113
117
  // Handle single select objects (VSelect with return-object but without multiple)
@@ -168,7 +172,6 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
168
172
  : undefined
169
173
 
170
174
  filter.value = newValue
171
- updateValue()
172
175
 
173
176
  return
174
177
  }
@@ -183,7 +186,6 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
183
186
 
184
187
  if (isPeriodField) {
185
188
  filter.value = undefined
186
- updateValue()
187
189
 
188
190
  return
189
191
  }
@@ -193,7 +195,7 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
193
195
  if (hasSelectStructure) {
194
196
  // For single select objects, clear the entire value
195
197
  filter.value = undefined
196
- updateValue()
198
+
197
199
  return
198
200
  }
199
201
 
@@ -201,29 +203,20 @@ export default function useFilterable(model: Ref<FilterProp>, emits) {
201
203
  delete typedValue[chipValue]
202
204
  filter.value = typedValue
203
205
  }
204
- updateValue()
205
206
  }
206
207
 
207
208
  function resetFilter(filter: FilterItem): void {
208
209
  filter.value = undefined
209
- updateValue()
210
210
  }
211
211
 
212
212
  function resetAllFilters(): void {
213
- filters.value.forEach((filter) => {
214
- filter.value = undefined
213
+ filters.value.forEach((filter: FilterItem) => {
214
+ resetFilter(filter)
215
215
  })
216
-
217
- updateValue()
218
- }
219
-
220
- function updateValue(): void {
221
- emits('update:modelValue', filters.value)
222
216
  }
223
217
 
224
218
  return {
225
219
  filters,
226
- updateValue,
227
220
  removeChip,
228
221
  resetFilter,
229
222
  resetAllFilters,
@@ -38,7 +38,7 @@ export const useFormFieldErrorHandling = (
38
38
  emitUpdate?: () => void,
39
39
  ): UseFormFieldErrorHandlingReturn => {
40
40
  const validation = useValidation({
41
- showSuccessMessages: props.showSuccessMessages ?? true,
41
+ showSuccessMessages: props.showSuccessMessages ?? false,
42
42
  fieldIdentifier: props.label,
43
43
  disableErrorHandling: props.disableErrorHandling ?? false,
44
44
  })
@@ -84,8 +84,8 @@ export const useFormFieldErrorHandling = (
84
84
 
85
85
  const result = await validation.validateField(
86
86
  value,
87
- [...defaultRules.value, ...props.customRules!],
88
- props.customWarningRules!,
87
+ [...defaultRules.value, ...(props.customRules ?? [])],
88
+ props.customWarningRules ?? [],
89
89
  )
90
90
 
91
91
  return !result.hasError
@@ -1,6 +1,6 @@
1
- import { describe, it, expect, vi } from 'vitest'
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
2
  import { defineComponent, h } from 'vue'
3
- import { mount } from '@vue/test-utils'
3
+ import { mount, flushPromises } from '@vue/test-utils'
4
4
  import { useFormValidation, useValidatableComponent } from '../useFormValidation'
5
5
  import type { ValidatableComponent } from '../useFormValidation'
6
6
 
@@ -35,6 +35,15 @@ const ParentWithForm = defineComponent({
35
35
  })
36
36
 
37
37
  describe('useFormValidation', () => {
38
+ beforeEach(() => {
39
+ lastChildApi = null
40
+ vi.clearAllMocks()
41
+ })
42
+
43
+ afterEach(async () => {
44
+ await flushPromises()
45
+ })
46
+
38
47
  it('registers components and avoids duplicates', () => {
39
48
  lastChildApi = null
40
49
 
@@ -1,14 +1,21 @@
1
1
  /* eslint-disable vue/one-component-per-file */
2
- import { describe, it, expect, vi } from 'vitest'
2
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
3
3
  import { defineComponent, h } from 'vue'
4
- import { mount } from '@vue/test-utils'
4
+ import { mount, flushPromises } from '@vue/test-utils'
5
5
  import { useFormValidation } from '../useFormValidation'
6
6
  import { useValidatable } from '../useValidatable'
7
7
 
8
8
  type FormValidationApi = ReturnType<typeof useFormValidation>
9
9
 
10
10
  describe('useValidatable', () => {
11
- it('registers component on mount and unregisters on unmount', () => {
11
+ beforeEach(() => {
12
+ vi.clearAllMocks()
13
+ })
14
+
15
+ afterEach(async () => {
16
+ await flushPromises()
17
+ })
18
+ it('registers component on mount and unregisters on unmount', async () => {
12
19
  const ChildComponent = defineComponent({
13
20
  name: 'ValidatableChild',
14
21
  setup() {
@@ -63,10 +70,11 @@ describe('useValidatable', () => {
63
70
  expect(childVm.reset).toHaveBeenCalledTimes(1)
64
71
 
65
72
  wrapper.unmount()
73
+ await flushPromises()
66
74
  expect(form.validatableComponents.value).toHaveLength(0)
67
75
  })
68
76
 
69
- it('does nothing harmful when no form provider is present', () => {
77
+ it('does nothing harmful when no form provider is present', async () => {
70
78
  const OrphanComponent = defineComponent({
71
79
  name: 'OrphanValidatable',
72
80
  setup() {
@@ -80,11 +88,13 @@ describe('useValidatable', () => {
80
88
  },
81
89
  })
82
90
 
83
- const mountOrphan = () => {
91
+ const mountOrphan = async () => {
84
92
  const wrapper = mount(OrphanComponent)
93
+ await flushPromises()
85
94
  wrapper.unmount()
95
+ await flushPromises()
86
96
  }
87
97
 
88
- expect(mountOrphan).not.toThrow()
98
+ await expect(mountOrphan()).resolves.not.toThrow()
89
99
  })
90
100
  })
@@ -14,7 +14,7 @@ describe('useValidation', () => {
14
14
  })
15
15
 
16
16
  it('should handle basic validation rules', async () => {
17
- const validation = useValidation()
17
+ const validation = useValidation({ showSuccessMessages: true })
18
18
  const rules = [{
19
19
  type: 'required',
20
20
  options: {
@@ -206,7 +206,7 @@ describe('useValidation', () => {
206
206
 
207
207
  it('should discard a slow async validation when a newer one is triggered after', async () => {
208
208
  vi.useFakeTimers()
209
- const validation = useValidation()
209
+ const validation = useValidation({ showSuccessMessages: true })
210
210
 
211
211
  // Slow rule: resolves after 100ms with an error
212
212
  const slowRules = [{
@@ -55,7 +55,7 @@ export interface ValidationResult {
55
55
  * @param options Options de configuration de la validation
56
56
  * @returns Un objet contenant les états et méthodes de validation
57
57
  */
58
- export function useValidation(options: ValidationOptions = { showSuccessMessages: true }) {
58
+ export function useValidation(options: ValidationOptions = { showSuccessMessages: false }) {
59
59
  const errors = ref<string[]>([])
60
60
  const warnings = ref<string[]>([])
61
61
  const successes = ref<string[]>([])