@cnamts/synapse 1.0.25 → 1.0.27

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 (393) hide show
  1. package/dist/{AutocompleteFilter-D7qBuCAP.js → AutocompleteFilter-C9eLKyW8.js} +3 -3
  2. package/dist/{DateFilter-BitMWrMU.js → DateFilter-y-GLkAkn.js} +9 -9
  3. package/dist/{NumberFilter-BTLUxw0a.js → NumberFilter-DN6hIBS7.js} +1 -1
  4. package/dist/{PeriodFilter-B5rUIPAC.js → PeriodFilter-MoUUp9qS.js} +1 -1
  5. package/dist/{SelectFilter-l4QnRcuk.js → SelectFilter-bCbrdLmu.js} +1 -1
  6. package/dist/{TextFilter-C9hj6Qrp.js → TextFilter-CvjgEaoM.js} +4 -4
  7. package/dist/apLightTheme2026-ug4Y23ns.js +611 -0
  8. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +2369 -351
  9. package/dist/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.d.ts +18 -0
  10. package/dist/components/Customs/Selects/SyAutocomplete/utils/ariaManager.d.ts +1 -1
  11. package/dist/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.d.ts +3 -1
  12. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +58 -288
  13. package/dist/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.d.ts +1 -0
  14. package/dist/components/Customs/Selects/SySelect/composables/useSySelectValidation.d.ts +15 -0
  15. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +4 -3
  16. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +4 -3
  17. package/dist/components/Customs/SyIconButton/SyIconButton.d.ts +18 -0
  18. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +20 -37
  19. package/dist/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.d.ts +50 -0
  20. package/dist/components/Customs/SyTextField/SyTextField.d.ts +8 -10
  21. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +197 -185
  22. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +91 -82
  23. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +35 -32
  24. package/dist/components/DatePicker/composables/index.d.ts +1 -0
  25. package/dist/components/DatePicker/composables/useDatePickerState.d.ts +3 -3
  26. package/dist/components/DatePicker/composables/useDatePickerValidationBridge.d.ts +51 -0
  27. package/dist/components/DatePicker/composables/useDateTextField.d.ts +2 -2
  28. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +2 -2
  29. package/dist/components/DatePicker/types.d.ts +1 -2
  30. package/dist/components/LunarCalendar/useLunarCalendarValidation.d.ts +1 -0
  31. package/dist/components/MonthPicker/MonthPicker.d.ts +24 -24
  32. package/dist/components/MonthPicker/MonthPickerText/MonthPickerInput.d.ts +24 -24
  33. package/dist/components/NirField/NirField.d.ts +64 -60
  34. package/dist/components/NirField/useNirValidation.d.ts +6 -2
  35. package/dist/components/PasswordField/PasswordField.d.ts +3 -3
  36. package/dist/components/PeriodField/PeriodField.d.ts +338 -314
  37. package/dist/components/PhoneField/PhoneField.d.ts +34 -24
  38. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +0 -3
  39. package/dist/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +3 -1
  40. package/dist/components/RatingPicker/NumberPicker/NumberPicker.d.ts +4 -3
  41. package/dist/components/RatingPicker/RatingPicker.d.ts +18 -5
  42. package/dist/components/RatingPicker/StarsPicker/StarsPicker.d.ts +3 -1
  43. package/dist/components/RatingPicker/useRatingFocus.d.ts +18 -0
  44. package/dist/components/SyTextArea/SyTextArea.d.ts +25 -15
  45. package/dist/components/SyTextArea/composables/useSyTextAreaValidation.d.ts +20 -0
  46. package/dist/components/SyTextArea/locales.d.ts +1 -0
  47. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  48. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  49. package/dist/components/Tables/common/SyTablePagination.d.ts +152 -364
  50. package/dist/components/Tables/common/TableHeader.d.ts +1 -1
  51. package/dist/components/Tables/common/filters/DateFilter.d.ts +4 -4
  52. package/dist/components/Tables/common/types.d.ts +2 -0
  53. package/dist/components/index.d.ts +1 -0
  54. package/dist/composables/date/useDateInitializationDayjs.d.ts +3 -1
  55. package/dist/composables/unifyValidation/documentationValidationProps.d.ts +160 -160
  56. package/dist/composables/unifyValidation/useCustomValidation.d.ts +3 -1
  57. package/dist/composables/unifyValidation/useValidation.d.ts +27 -19
  58. package/dist/composables/unifyValidation/useVuetifyValidation.d.ts +1 -1
  59. package/dist/composables/validation/useValidation.d.ts +1 -0
  60. package/dist/design-system-v3.js +81 -80
  61. package/dist/designTokens/tokens/amelipro/apContextual.d.ts +6 -6
  62. package/dist/designTokens/tokens/amelipro/apDarkTheme.d.ts +3 -1
  63. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +53 -98
  64. package/dist/designTokens/tokens/baseContextualTokens.d.ts +0 -6
  65. package/dist/designTokens/tokens/baseTokens.d.ts +232 -0
  66. package/dist/designTokens/tokens/cnam/cnamContextual.d.ts +6 -6
  67. package/dist/designTokens/tokens/cnam/cnamDarkTheme.d.ts +1 -1
  68. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +57 -99
  69. package/dist/designTokens/tokens/pa/paContextual.d.ts +0 -6
  70. package/dist/designTokens/tokens/pa/paDarkTheme.d.ts +1 -1
  71. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +53 -97
  72. package/dist/designTokens/tokens/pa/paSemantic.d.ts +1 -0
  73. package/dist/designTokens/tokens/semanticTokens.d.ts +112 -0
  74. package/dist/{main-Cpx8Co6H.js → main-CI6Q9nmO.js} +13843 -13478
  75. package/dist/synapse.css +1 -1
  76. package/dist/vuetifyConfig.js +208 -72
  77. package/package.json +10 -7
  78. package/src/assets/overrides/_icons.scss +5 -17
  79. package/src/assets/overrides/_otp.scss +4 -5
  80. package/src/assets/overrides/_typography.scss +2 -1
  81. package/src/assets/overrides/_utilities.scss +1 -42
  82. package/src/components/Accordion/Accordion.vue +2 -0
  83. package/src/components/ChipList/ChipList.vue +30 -18
  84. package/src/components/ChipList/tests/chipList.spec.ts +4 -4
  85. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -1
  86. package/src/components/CookiesSelection/CookiesSelection.vue +2 -1
  87. package/src/components/CopyBtn/CopyBtn.vue +9 -0
  88. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.stories.ts +4 -0
  89. package/src/components/Customs/Selects/SelectBtnField/SelectBtnField.vue +7 -6
  90. package/src/components/Customs/Selects/SelectBtnField/tests/SelectBtnField.spec.ts +223 -0
  91. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.stories.ts +283 -351
  92. package/src/components/Customs/Selects/SyAutocomplete/SyAutocomplete.vue +183 -219
  93. package/src/components/Customs/Selects/SyAutocomplete/composables/useSyAutocompleteValidation.ts +101 -0
  94. package/src/components/Customs/Selects/SyAutocomplete/tests/SyAutocomplete.spec.ts +761 -1
  95. package/src/components/Customs/Selects/SyAutocomplete/utils/ariaManager.ts +3 -1
  96. package/src/components/Customs/Selects/SyAutocomplete/utils/useKeyboardHandler.ts +79 -5
  97. package/src/components/Customs/Selects/SyAutocomplete/validation/Validation.stories.ts +1029 -0
  98. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +52 -217
  99. package/src/components/Customs/Selects/SySelect/SySelect.vue +248 -236
  100. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +3 -0
  101. package/src/components/Customs/Selects/SySelect/composables/useSySelectValidation.ts +64 -0
  102. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +440 -5
  103. package/src/components/Customs/Selects/SySelect/validation/Validation.stories.ts +1026 -0
  104. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +18 -7
  105. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +5 -5
  106. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +8 -8
  107. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +27 -6
  108. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +1 -1
  109. package/src/components/Customs/SyIcon/accessibilite/Accessibility.mdx +0 -6
  110. package/src/components/Customs/SyIcon/utils/tests/iconUtils.spec.ts +107 -0
  111. package/src/components/Customs/SyRadioGroup/SyRadioGroup.mdx +2 -2
  112. package/src/components/Customs/SyRadioGroup/SyRadioGroup.stories.ts +395 -200
  113. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +100 -127
  114. package/src/components/Customs/SyRadioGroup/composables/useSyRadioGroupValidation.ts +127 -0
  115. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.a11y.spec.ts +93 -1
  116. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.spec.ts +146 -9
  117. package/src/components/Customs/SyRadioGroup/tests/SyRadioGroup.visual.cy.ts +165 -0
  118. package/src/components/Customs/SyRadioGroup/validation/Validation.stories.ts +773 -0
  119. package/src/components/Customs/SyTabs/SyTabs.stories.ts +5 -5
  120. package/src/components/Customs/SyTabs/config.ts +3 -3
  121. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +265 -0
  122. package/src/components/Customs/SyTabs/tests/useTabTransition.spec.ts +188 -0
  123. package/src/components/Customs/SyTextField/SyTextField.stories.ts +10 -29
  124. package/src/components/Customs/SyTextField/SyTextField.vue +52 -17
  125. package/src/components/DataList/DataList.stories.ts +1 -1
  126. package/src/components/DataListItem/tests/DataListItem.spec.ts +3 -1
  127. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +1 -1
  128. package/src/components/DatePicker/CalendarMode/DatePicker.vue +52 -154
  129. package/src/components/DatePicker/CalendarMode/tests/DatePicker.coverage.spec.ts +156 -0
  130. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +495 -4
  131. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1 -1
  132. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +55 -73
  133. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +207 -1
  134. package/src/components/DatePicker/ComplexDatePicker/tests/bridge-integration.regression.spec.ts +210 -0
  135. package/src/components/DatePicker/ComplexDatePicker/tests/calendar-navigation.regression.spec.ts +214 -0
  136. package/src/components/DatePicker/ComplexDatePicker/tests/validation-cross.regression.spec.ts +194 -0
  137. package/src/components/DatePicker/ComplexDatePicker/tests/validation-success-messages.regression.spec.ts +83 -0
  138. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  139. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +169 -60
  140. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +1 -1
  141. package/src/components/DatePicker/DateTextInput/tests/DateTextInput.spec.ts +320 -0
  142. package/src/components/DatePicker/composables/index.ts +1 -0
  143. package/src/components/DatePicker/composables/tests/useCalendarKeyboardNavigation.spec.ts +360 -0
  144. package/src/components/DatePicker/composables/tests/useDatePickerValidationBridge.spec.ts +129 -0
  145. package/src/components/DatePicker/composables/useDatePickerState.ts +33 -14
  146. package/src/components/DatePicker/composables/useDatePickerValidationBridge.ts +205 -0
  147. package/src/components/DatePicker/composables/useDateRangeInput.ts +2 -1
  148. package/src/components/DatePicker/composables/useDateSelection.ts +2 -1
  149. package/src/components/DatePicker/composables/useDateTextField.ts +2 -2
  150. package/src/components/DatePicker/composables/useInputBlurHandler.ts +2 -2
  151. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +1 -1
  152. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +1 -1
  153. package/src/components/DatePicker/tests/exposed-methods.coverage.spec.ts +75 -0
  154. package/src/components/DatePicker/types.ts +1 -2
  155. package/src/components/DialogBox/DialogBox.stories.ts +8 -8
  156. package/src/components/DialogBox/DialogBox.vue +1 -1
  157. package/src/components/DialogBox/accessibilite/Accessibility.mdx +86 -22
  158. package/src/components/FileList/UploadItem/UploadItem.vue +4 -4
  159. package/src/components/FileUpload/FileUpload.vue +2 -2
  160. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  161. package/src/components/FilterInline/FilterInline.mdx +2 -2
  162. package/src/components/FilterSideBar/FilterSideBar.stories.ts +1 -1
  163. package/src/components/FilterSideBar/FilterSideBar.vue +4 -3
  164. package/src/components/FooterBar/FooterBar.vue +7 -7
  165. package/src/components/FranceConnectBtn/FranceConnectBtn.vue +1 -1
  166. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderMenuItem/HeaderMenuItem.vue +2 -2
  167. package/src/components/HeaderBar/HeaderBurgerMenu/HeaderSubMenu/HeaderSubMenu.vue +7 -7
  168. package/src/components/HeaderBar/HeaderMenuBtn/HeaderMenuBtn.vue +2 -2
  169. package/src/components/HeaderLoading/tests/HeaderLoading.spec.ts +87 -8
  170. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +3 -3
  171. package/src/components/HeaderNavigationBar/HorizontalNavbar/tests/HorizontalNavbar.spec.ts +589 -0
  172. package/src/components/HeaderToolbar/tests/HeaderToolBar.spec.ts +153 -1
  173. package/src/components/HeaderToolbar/tests/useMobileRightMenu.spec.ts +258 -0
  174. package/src/components/LangBtn/LangBtn.vue +2 -1
  175. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +2 -2
  176. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +1 -1
  177. package/src/components/LunarCalendar/tests/useLunarCalendarRules.spec.ts +184 -0
  178. package/src/components/MonthPicker/MonthPickerVisual/MonthSelector.vue +3 -3
  179. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerFooter.vue +1 -1
  180. package/src/components/MonthPicker/MonthPickerVisual/VisualPickerHeader.vue +2 -2
  181. package/src/components/MonthPicker/MonthPickerVisual/YearSelector.vue +1 -1
  182. package/src/components/NirField/NirField.vue +3 -3
  183. package/src/components/NotificationBar/Notification/Notification.vue +12 -12
  184. package/src/components/NotificationBar/NotificationBar.stories.ts +8 -8
  185. package/src/components/PaginatedTable/PaginatedTable.vue +1 -1
  186. package/src/components/PaginatedTable/Pagination.vue +3 -3
  187. package/src/components/PasswordField/PasswordField.vue +15 -11
  188. package/src/components/PasswordField/tests/PasswordField.spec.ts +3 -3
  189. package/src/components/PhoneField/PhoneField.vue +4 -2
  190. package/src/components/RangeField/RangeSlider/RangeSlider.vue +11 -18
  191. package/src/components/RangeField/RangeSlider/Tooltip/Tooltip.vue +1 -1
  192. package/src/components/RatingPicker/EmotionPicker/EmotionPicker.vue +32 -48
  193. package/src/components/RatingPicker/EmotionPicker/tests/__snapshots__/EmotionPicker.spec.ts.snap +5 -0
  194. package/src/components/RatingPicker/NumberPicker/NumberPicker.vue +48 -53
  195. package/src/components/RatingPicker/NumberPicker/tests/NumberPicker.spec.ts +2 -1
  196. package/src/components/RatingPicker/NumberPicker/tests/__snapshots__/NumberPicker.spec.ts.snap +40 -13
  197. package/src/components/RatingPicker/RatingPicker.stories.ts +65 -88
  198. package/src/components/RatingPicker/RatingPicker.vue +71 -15
  199. package/src/components/RatingPicker/StarsPicker/StarsPicker.vue +28 -37
  200. package/src/components/RatingPicker/StarsPicker/tests/StarsPicker.spec.ts +1 -1
  201. package/src/components/RatingPicker/StarsPicker/tests/__snapshots__/StarsPicker.spec.ts.snap +5 -0
  202. package/src/components/RatingPicker/accessibilite/Accessibility.mdx +137 -9
  203. package/src/components/RatingPicker/tests/RatingPicker.a11y.spec.ts +123 -0
  204. package/src/components/RatingPicker/tests/RatingPicker.spec.ts +3 -2
  205. package/src/components/RatingPicker/tests/__snapshots__/RatingPicker.spec.ts.snap +40 -11
  206. package/src/components/RatingPicker/useRatingFocus.ts +97 -0
  207. package/src/components/StatusPage/tests/StatusPage.spec.ts +149 -0
  208. package/src/components/SubHeader/SubHeader.vue +1 -1
  209. package/src/components/SyAlert/SyAlert.vue +23 -23
  210. package/src/components/SyTextArea/SyTextArea.stories.ts +177 -131
  211. package/src/components/SyTextArea/SyTextArea.vue +257 -74
  212. package/src/components/SyTextArea/composables/useSyTextAreaValidation.ts +81 -0
  213. package/src/components/SyTextArea/locales.ts +1 -0
  214. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +449 -1
  215. package/src/components/SyTextArea/useDefaultValidationRules.ts +2 -7
  216. package/src/components/SyTextArea/validation/Validation.stories.ts +856 -0
  217. package/src/components/TableToolbar/TableToolbar.vue +6 -6
  218. package/src/components/TableToolbar/accessibilite/Accessibility.mdx +81 -7
  219. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +163 -0
  220. package/src/components/Tables/SyServerTable/SyServerTable.vue +3 -2
  221. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +67 -0
  222. package/src/components/Tables/SyTable/SyTable.stories.ts +94 -0
  223. package/src/components/Tables/SyTable/SyTable.vue +3 -2
  224. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +64 -0
  225. package/src/components/Tables/common/SyTableFilter.vue +4 -4
  226. package/src/components/Tables/common/SyTablePagination.vue +1 -0
  227. package/src/components/Tables/common/TableHeader.vue +3 -3
  228. package/src/components/Tables/common/filters/DateFilter.vue +2 -2
  229. package/src/components/Tables/common/filters/logics/tests/NumberFilterLogic.spec.ts +176 -0
  230. package/src/components/Tables/common/filters/logics/tests/SelectFilterLogic.spec.ts +111 -0
  231. package/src/components/Tables/common/tableStyles.scss +6 -6
  232. package/src/components/Tables/common/types.ts +2 -0
  233. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +2 -0
  234. package/src/components/index.ts +1 -0
  235. package/src/composables/date/tests/useDateFormatDayjs.spec.ts +112 -0
  236. package/src/composables/date/tests/{useDateInitialization.spec.ts → useDateInitializationDayjs.spec.ts} +39 -3
  237. package/src/composables/date/tests/useHolidayDay.spec.ts +109 -0
  238. package/src/composables/date/useDateInitializationDayjs.ts +4 -1
  239. package/src/composables/rules/tests/useFieldValidation.spec.ts +374 -0
  240. package/src/composables/tests/useError.spec.ts +30 -0
  241. package/src/composables/tests/useFormFieldErrorHandling.spec.ts +234 -0
  242. package/src/composables/unifyValidation/documentationValidationProps.ts +12 -12
  243. package/src/composables/unifyValidation/tests/documentationValidationProps.spec.ts +177 -0
  244. package/src/composables/unifyValidation/tests/useCustomValidation.spec.ts +32 -1
  245. package/src/composables/unifyValidation/tests/useValidation.spec.ts +28 -2
  246. package/src/composables/unifyValidation/useCustomValidation.ts +34 -12
  247. package/src/composables/unifyValidation/useValidation.ts +55 -27
  248. package/src/composables/unifyValidation/useVuetifyValidation.ts +2 -2
  249. package/src/composables/useFilterable/useFilterable.spec.ts +42 -0
  250. package/src/composables/useFilterable/useFilterable.ts +11 -7
  251. package/src/composables/useFormFieldErrorHandling.ts +6 -3
  252. package/src/composables/validation/tests/useValidation.spec.ts +2 -2
  253. package/src/composables/validation/useValidation.ts +15 -3
  254. package/src/composantsVuetify/VBtn/VBtn.mdx +9 -39
  255. package/src/composantsVuetify/VBtn/v-btn.stories.ts +26 -86
  256. package/src/composantsVuetify/VCard/VCard.mdx +59 -0
  257. package/src/composantsVuetify/VCard/v-card.stories.ts +279 -0
  258. package/src/designTokens/tokens/amelipro/apColors2026.ts +1 -1
  259. package/src/designTokens/tokens/amelipro/apContextual.ts +6 -0
  260. package/src/designTokens/tokens/amelipro/apDarkTheme.ts +2 -2
  261. package/src/designTokens/tokens/amelipro/apLightTheme.ts +72 -100
  262. package/src/designTokens/tokens/amelipro/apSemantic.ts +1 -1
  263. package/src/designTokens/tokens/baseContextualTokens.ts +1 -6
  264. package/src/designTokens/tokens/baseTokens.ts +232 -0
  265. package/src/designTokens/tokens/cnam/cnamContextual.ts +6 -0
  266. package/src/designTokens/tokens/cnam/cnamDarkTheme.ts +2 -2
  267. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +76 -101
  268. package/src/designTokens/tokens/pa/paDarkTheme.ts +2 -2
  269. package/src/designTokens/tokens/pa/paLightTheme.ts +73 -99
  270. package/src/designTokens/tokens/pa/paSemantic.ts +2 -0
  271. package/src/designTokens/tokens/semanticTokens.ts +114 -0
  272. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +61 -91
  273. package/src/stories/Accessibilite/AuditDesignSystem.mdx +5 -8
  274. package/src/stories/Accessibilite/AuditEtContreAudit/Exemptions-derogations.mdx +1 -1
  275. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +11 -8
  276. package/src/stories/Accessibilite/AuditEtContreAudit/RGAA.mdx +6 -7
  277. package/src/stories/Accessibilite/Introduction.mdx +30 -30
  278. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +168 -78
  279. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +13 -6
  280. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +66 -45
  281. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +23 -49
  282. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/FauxPositifs.stories.ts +6 -0
  283. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru/Utilisation.mdx +7 -19
  284. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +18 -20
  285. package/src/stories/Components/Components.stories.ts +59 -6
  286. package/src/stories/DesignTokens/ColorIntegrationExample.vue +2 -3
  287. package/src/stories/DesignTokens/Colors.mdx +6 -8
  288. package/src/stories/DesignTokens/colors.stories.ts +244 -1081
  289. package/src/utils/amelipro/toKebabCase/tests/toKebabCase.spec.ts +52 -0
  290. package/src/utils/formatNir/tests/formatNir.spec.ts +34 -0
  291. package/src/utils/tests/insertAt.spec.ts +44 -0
  292. package/dist/AutocompleteFilter-Df9i5mAl.cjs +0 -1
  293. package/dist/DateFilter-BJD6FMev.cjs +0 -1
  294. package/dist/NumberFilter-DGCzCXzI.cjs +0 -1
  295. package/dist/PeriodFilter-DO_ecTZW.cjs +0 -1
  296. package/dist/SelectFilter-CGwcKWLm.cjs +0 -1
  297. package/dist/TextFilter-B8nf7xoK.cjs +0 -1
  298. package/dist/apLightTheme-CEK4iY3f.cjs +0 -1
  299. package/dist/apLightTheme-DnIM24Lv.js +0 -950
  300. package/dist/composables/date/useDateFormat.d.ts +0 -26
  301. package/dist/composables/date/useDateInitialization.d.ts +0 -18
  302. package/dist/design-system-v3.umd.cjs +0 -1
  303. package/dist/main-ByDPHpae.cjs +0 -1067
  304. package/dist/tooth-11-D3sLWv2n.cjs +0 -1
  305. package/dist/tooth-12-CXrLuH03.cjs +0 -1
  306. package/dist/tooth-13-BSfo5fpT.cjs +0 -1
  307. package/dist/tooth-14-DMzulx0h.cjs +0 -1
  308. package/dist/tooth-15-BKRFVi-9.cjs +0 -1
  309. package/dist/tooth-16-CpuxAbuM.cjs +0 -1
  310. package/dist/tooth-17-BPoahUdg.cjs +0 -1
  311. package/dist/tooth-18-DhHJz8sy.cjs +0 -1
  312. package/dist/tooth-21-Dgd5hn_X.cjs +0 -1
  313. package/dist/tooth-22-C2Tn19sB.cjs +0 -1
  314. package/dist/tooth-23-C9uaaSGb.cjs +0 -1
  315. package/dist/tooth-24-BrK9UGpf.cjs +0 -1
  316. package/dist/tooth-25-CE_EfGNp.cjs +0 -1
  317. package/dist/tooth-26-Ctv4i9Fy.cjs +0 -1
  318. package/dist/tooth-27-C5J7JkWM.cjs +0 -1
  319. package/dist/tooth-28-Z9oWqjo0.cjs +0 -1
  320. package/dist/tooth-31-BrYqmkTi.cjs +0 -1
  321. package/dist/tooth-32-BNNR0oCZ.cjs +0 -1
  322. package/dist/tooth-33-DuxvqO2J.cjs +0 -1
  323. package/dist/tooth-34-BCSCXMB6.cjs +0 -1
  324. package/dist/tooth-35-BLUXkX88.cjs +0 -1
  325. package/dist/tooth-36-IrKHYqlA.cjs +0 -1
  326. package/dist/tooth-37-BYqpdMwo.cjs +0 -1
  327. package/dist/tooth-38-B_eNXXdu.cjs +0 -1
  328. package/dist/tooth-41-Ddva4Ot8.cjs +0 -1
  329. package/dist/tooth-42-szcDqlM0.cjs +0 -1
  330. package/dist/tooth-43-B3ka6rQm.cjs +0 -1
  331. package/dist/tooth-44-CazyQucj.cjs +0 -1
  332. package/dist/tooth-45-B4HQtc8n.cjs +0 -1
  333. package/dist/tooth-46-BPM40gbG.cjs +0 -1
  334. package/dist/tooth-47-Dvr20dlh.cjs +0 -1
  335. package/dist/tooth-48-Bd8ljGsF.cjs +0 -1
  336. package/dist/tooth-51-OBpwCOF3.cjs +0 -1
  337. package/dist/tooth-52-aKxyHcmq.cjs +0 -1
  338. package/dist/tooth-53-vCwJjTOc.cjs +0 -1
  339. package/dist/tooth-54-DsWu2iFy.cjs +0 -1
  340. package/dist/tooth-55-BxC1X2Dn.cjs +0 -1
  341. package/dist/tooth-61-BbLvxMQi.cjs +0 -1
  342. package/dist/tooth-62-CmTkWczP.cjs +0 -1
  343. package/dist/tooth-63-DI7l_2qI.cjs +0 -1
  344. package/dist/tooth-64-B21sOsJh.cjs +0 -1
  345. package/dist/tooth-65-D2ZC2VEr.cjs +0 -1
  346. package/dist/tooth-71-D473PPO5.cjs +0 -1
  347. package/dist/tooth-72-Drh1wnNu.cjs +0 -1
  348. package/dist/tooth-73-DzlwYI23.cjs +0 -1
  349. package/dist/tooth-74-8aGvcZPg.cjs +0 -1
  350. package/dist/tooth-75-BFK7At_r.cjs +0 -1
  351. package/dist/tooth-81-BZmR-I0M.cjs +0 -1
  352. package/dist/tooth-82-euVfUUZV.cjs +0 -1
  353. package/dist/tooth-83-KV010j64.cjs +0 -1
  354. package/dist/tooth-84-BBg1RjhZ.cjs +0 -1
  355. package/dist/tooth-85-Cr-kc1wM.cjs +0 -1
  356. package/dist/vuetifyConfig.umd.cjs +0 -1
  357. package/src/components/BackBtn/tests/__snapshots__/back-btn-custom-bg.snap.png +0 -0
  358. package/src/components/BackBtn/tests/__snapshots__/back-btn-dark-mode.snap.png +0 -0
  359. package/src/components/BackBtn/tests/__snapshots__/back-btn-default.snap.png +0 -0
  360. package/src/components/BackBtn/tests/__snapshots__/back-btn-no-icon.snap.png +0 -0
  361. package/src/components/DatePicker/CalendarMode/tests/DatePicker.events.spec.ts +0 -178
  362. package/src/components/DialogBox/tests/__snapshots__/dialog-box-custom-texts.snap.png +0 -0
  363. package/src/components/DialogBox/tests/__snapshots__/dialog-box-default.snap.png +0 -0
  364. package/src/components/DialogBox/tests/__snapshots__/dialog-box-no-actions.snap.png +0 -0
  365. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated-submenu-open.snap.png +0 -0
  366. package/src/components/HeaderBar/HeaderBurgerMenu/tests/__snapshots__/header-burger-menu-generated.snap.png +0 -0
  367. package/src/components/HeaderBar/tests/__snapshots__/header-bar-custom-width.snap.png +0 -0
  368. package/src/components/HeaderBar/tests/__snapshots__/header-bar-default.snap.png +0 -0
  369. package/src/components/HeaderBar/tests/__snapshots__/header-bar-no-sticky.snap.png +0 -0
  370. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-prepend.snap.png +0 -0
  371. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-side.snap.png +0 -0
  372. package/src/components/HeaderBar/tests/__snapshots__/header-bar-with-subtitle.snap.png +0 -0
  373. package/src/components/Logo/tests/__snapshots__/logo-avatar.snap.png +0 -0
  374. package/src/components/Logo/tests/__snapshots__/logo-dark.snap.png +0 -0
  375. package/src/components/Logo/tests/__snapshots__/logo-default.snap.png +0 -0
  376. package/src/components/Logo/tests/__snapshots__/logo-no-organism.snap.png +0 -0
  377. package/src/components/Logo/tests/__snapshots__/logo-no-signature.snap.png +0 -0
  378. package/src/components/Logo/tests/__snapshots__/logo-risque-pro.snap.png +0 -0
  379. package/src/components/RangeField/tests/__snapshots__/range-field-custom-bg.snap.png +0 -0
  380. package/src/components/RangeField/tests/__snapshots__/range-field-custom-range.snap.png +0 -0
  381. package/src/components/RangeField/tests/__snapshots__/range-field-default.snap.png +0 -0
  382. package/src/components/RangeField/tests/__snapshots__/range-field-step.snap.png +0 -0
  383. package/src/components/RangeField/tests/__snapshots__/range-field-with-label.snap.png +0 -0
  384. package/src/components/SyAlert/tests/__snapshots__/sy-alert-closable.snap.png +0 -0
  385. package/src/components/SyAlert/tests/__snapshots__/sy-alert-error.snap.png +0 -0
  386. package/src/components/SyAlert/tests/__snapshots__/sy-alert-info.snap.png +0 -0
  387. package/src/components/SyAlert/tests/__snapshots__/sy-alert-success.snap.png +0 -0
  388. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-outlined.snap.png +0 -0
  389. package/src/components/SyAlert/tests/__snapshots__/sy-alert-variant-tonal.snap.png +0 -0
  390. package/src/components/SyAlert/tests/__snapshots__/sy-alert-warning.snap.png +0 -0
  391. package/src/composables/date/tests/useDateFormat.spec.ts +0 -67
  392. package/src/composables/date/useDateFormat.ts +0 -110
  393. package/src/composables/date/useDateInitialization.ts +0 -92
@@ -76,7 +76,7 @@ ValidationExamples.parameters = {
76
76
  <script setup>
77
77
  import { computed, ref, watch } from 'vue';vue'
78
78
  import DatePicker from '@/components/DatePicker/CalendarMode/DatePicker.vue'
79
- import { useDateFormat } from '@/composables/date/useDateFormat';vue'
79
+ import { useDateFormat } from '@/composables/date/useDateFormatDayjs'
80
80
 
81
81
  // Exemple 1: Validation de base (required)
82
82
  const date1 = ref('')
@@ -7,16 +7,17 @@
7
7
  useDateInputEditing,
8
8
  useDateAutoClamp,
9
9
  useDateTextField,
10
+ useDatePickerValidationBridge,
10
11
  } from '../composables'
11
12
  import { ref, computed, watch, nextTick, onMounted, toRefs } from 'vue'
12
13
  import SyTextField from '../../Customs/SyTextField/SyTextField.vue'
13
14
  import dayjs from 'dayjs'
14
15
  import customParseFormat from 'dayjs/plugin/customParseFormat'
15
- import { useValidation, type ValidationRule, type ValidationResult } from '@/composables/validation/useValidation'
16
+ import type { ValidationRule, ValidationResult } from '@/composables/validation/useValidation'
16
17
  import { useValidatable } from '@/composables/validation/useValidatable'
17
18
  import { useDateFormat } from '@/composables/date/useDateFormatDayjs'
18
19
  import { DATE_PICKER_MESSAGES } from '../constants/messages'
19
- import type { DateValue } from '@/composables/date/useDateInitializationDayjs'
20
+ import type { DateModelValue } from '@/composables/date/useDateInitializationDayjs'
20
21
  import type { DateObjectValue } from '../types'
21
22
 
22
23
  dayjs.extend(customParseFormat)
@@ -40,7 +41,7 @@
40
41
  isOutlined?: boolean
41
42
  isValidateOnBlur?: boolean
42
43
  label: string
43
- modelValue?: DateValue
44
+ modelValue?: DateModelValue
44
45
  noIcon?: boolean
45
46
  persistentHint?: boolean
46
47
  placeholder?: string
@@ -48,8 +49,10 @@
48
49
  required?: boolean
49
50
  showSuccessMessages?: boolean
50
51
  title?: string | false
52
+ /** @internal Désactive la validation interne quand utilisé dans un parent avec validation */
53
+ skipInternalValidation?: boolean
51
54
  }>(), {
52
- autoClamp: true,
55
+ autoClamp: false,
53
56
  bgColor: 'white',
54
57
  customRules: () => [],
55
58
  customWarningRules: () => [],
@@ -74,14 +77,15 @@
74
77
  required: false,
75
78
  showSuccessMessages: true,
76
79
  title: false,
80
+ skipInternalValidation: false,
77
81
  })
78
82
 
79
83
  const emit = defineEmits<{
80
- (e: 'update:model-value', value: DateValue): void
84
+ (e: 'update:model-value', value: DateModelValue): void
81
85
  (e: 'focus'): void
82
86
  (e: 'blur'): void
83
87
  (e: 'input', value: string): void
84
- (e: 'date-selected', value: DateValue): void
88
+ (e: 'date-selected', value: DateModelValue): void
85
89
  }>()
86
90
 
87
91
  /**
@@ -98,19 +102,42 @@
98
102
 
99
103
  /**
100
104
  * =====================
101
- * Validation setup (safe wrapper for readonly, reactive to toggles)
105
+ * Validation setup (using DatePickerValidationBridge)
102
106
  * =====================
103
107
  */
104
- const baseValidation = useValidation({
108
+ const selectedDates = ref<DateObjectValue>(null)
109
+ const currentRangeIsValid = ref(true)
110
+ const getRangeValidationError = ref('')
111
+ const isUpdatingFromInternal = ref(false)
112
+
113
+ // Quand skipInternalValidation est true, on utilise le readonlyValidation (pas de validation active)
114
+ // pour éviter la double validation avec le parent
115
+ const shouldUseInternalValidation = computed(() => !props.skipInternalValidation && !readonly.value)
116
+
117
+ const bridgeValidation = useDatePickerValidationBridge({
105
118
  showSuccessMessages: props.showSuccessMessages,
106
- fieldIdentifier: props.label || props.placeholder,
107
119
  disableErrorHandling: props.disableErrorHandling,
120
+ noCalendar: true,
121
+ required: props.required,
122
+ displayRange: props.displayRange,
123
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Compatibility with legacy rule format
124
+ customRules: computed(() => shouldUseInternalValidation.value ? props.customRules as any : []),
125
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Compatibility with legacy rule format
126
+ customWarningRules: computed(() => shouldUseInternalValidation.value ? props.customWarningRules as any : []),
127
+ selectedDates,
128
+ isUpdatingFromInternal,
129
+ currentRangeIsValid,
130
+ getRangeValidationError,
131
+ skipValidationWhenReadonly: true,
132
+ readonly: readonly,
133
+ fieldIdentifier: props.label || props.placeholder || 'Date',
108
134
  })
109
135
 
110
136
  const readonlyValidation = {
111
137
  errors: ref<string[]>([]),
112
138
  warnings: ref<string[]>([]),
113
139
  successes: ref<string[]>([]),
140
+ displaySuccesses: computed(() => []),
114
141
  hasError: ref(false),
115
142
  clearValidation: () => {},
116
143
  validateField: () => ({
@@ -121,39 +148,57 @@
121
148
  } as ValidationResult),
122
149
  }
123
150
 
124
- const validationApi = computed(() => (readonly.value ? readonlyValidation : baseValidation))
125
-
126
151
  const errors = computed({
127
- get: () => validationApi.value.errors.value,
128
- set: (value) => { validationApi.value.errors.value = value },
152
+ get: () => readonly.value ? readonlyValidation.errors.value : bridgeValidation.errors.value,
153
+ set: (value) => {
154
+ if (!readonly.value) bridgeValidation.errors.value = value
155
+ },
129
156
  })
130
157
  const warnings = computed({
131
- get: () => validationApi.value.warnings.value,
132
- set: (value) => { validationApi.value.warnings.value = value },
158
+ get: () => readonly.value ? readonlyValidation.warnings.value : bridgeValidation.warnings.value,
159
+ set: (value) => {
160
+ if (!readonly.value) bridgeValidation.warnings.value = value
161
+ },
133
162
  })
134
163
  const successes = computed({
135
- get: () => validationApi.value.successes.value,
136
- set: (value) => { validationApi.value.successes.value = value },
164
+ get: () => readonly.value ? readonlyValidation.successes.value : bridgeValidation.successes.value,
165
+ set: (value) => {
166
+ if (!readonly.value) bridgeValidation.successes.value = value
167
+ },
137
168
  })
138
169
  const hasError = computed(() => {
139
- const api = validationApi.value
140
- // baseValidation exposes a computed hasError, readonly stub exposes a ref
141
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- computed/ref dual shape
142
- return (api as any).hasError?.value ?? api.errors.value.length > 0
170
+ if (readonly.value) return false
171
+ return bridgeValidation.errors.value.length > 0
143
172
  })
144
173
 
145
- const clearValidation = () => validationApi.value.clearValidation()
174
+ const clearValidation = () => {
175
+ if (readonly.value) {
176
+ readonlyValidation.clearValidation()
177
+ }
178
+ else {
179
+ bridgeValidation.clearValidation()
180
+ }
181
+ }
146
182
 
147
183
  const validateField = async (
148
184
  value: unknown,
149
185
  rules?: ValidationRule[],
150
186
  warningRules?: ValidationRule[],
151
- ): Promise<ValidationResult> => await validationApi.value.validateField(value, rules, warningRules)
187
+ ): Promise<ValidationResult> => {
188
+ if (readonly.value) {
189
+ return readonlyValidation.validateField()
190
+ }
191
+ return await bridgeValidation.validateField(value, rules, warningRules)
192
+ }
152
193
 
153
194
  // Agrégation des erreurs internes et externes
154
195
  const errorMessages = computed(() => [...errors.value, ...props.externalErrorMessages])
155
196
  const warningMessages = warnings
156
- const successMessages = successes
197
+ const displaySuccesses = computed(() => {
198
+ if (readonly.value) return []
199
+ return (bridgeValidation.validation as { displaySuccesses?: { value: string[] } }).displaySuccesses?.value ?? []
200
+ })
201
+ const successMessages = displaySuccesses
157
202
 
158
203
  /**
159
204
  * Safe validate utility
@@ -174,7 +219,6 @@
174
219
  * Range input + validations
175
220
  * =====================
176
221
  */
177
- const selectedDates = ref<DateObjectValue>(null)
178
222
  const {
179
223
  handleRangeInput,
180
224
  resetState,
@@ -185,14 +229,22 @@
185
229
  handlePaste: handlePasteRange,
186
230
  } = useDateRangeInput(displayFormat.value, isRange.value, parseDate, formatDate)
187
231
 
188
- const { currentRangeIsValid, getRangeValidationError } = useDateRangeValidation(selectedDates, isRange.value)
232
+ // Note: currentRangeIsValid et getRangeValidationError sont déjà définis pour le Bridge
233
+ // On met juste à jour les refs depuis useDateRangeValidation
234
+ const rangeValidation = useDateRangeValidation(selectedDates, isRange.value)
235
+ watch(() => rangeValidation.currentRangeIsValid.value, (v) => {
236
+ currentRangeIsValid.value = v
237
+ })
238
+ watch(() => rangeValidation.getRangeValidationError.value, (v) => {
239
+ getRangeValidationError.value = v
240
+ })
189
241
 
190
242
  /**
191
243
  * =====================
192
244
  * Format + manual validation
193
245
  * =====================
194
246
  */
195
- const isUpdatingFromInternal = ref(false)
247
+ // isUpdatingFromInternal est déjà déclaré plus haut pour le Bridge
196
248
  const isFocused = ref(false)
197
249
  const hasInteracted = ref(false)
198
250
  const ariaLabel = ref(props.label || props.placeholder || DATE_PICKER_MESSAGES.LABEL_DEFAULT)
@@ -521,6 +573,19 @@
521
573
  const nextCursorPosition = nextEditableIndex(dateFormat, editPosition + 1)
522
574
  updateDateValue(updatedDateText, nextCursorPosition)
523
575
  }
576
+ else if (isEditingLeftDate && separatorIndex !== -1) {
577
+ const rightStartPosition = nextEditableIndex(dateFormat, 0)
578
+ const updatedRightDateText = overwriteAt(rightDateText, rightStartPosition, keyboardEvent.key)
579
+ const nextCursorPosition = nextEditableIndex(dateFormat, rightStartPosition + 1)
580
+
581
+ isOverwriteEditing.value = true
582
+ inputValue.value = `${leftDateText}${rangeSeparator}${updatedRightDateText}`
583
+ requestAnimationFrame(() => {
584
+ const absoluteCursorPosition = separatorIndex + rangeSeparator.length + nextCursorPosition
585
+ inputElement.setSelectionRange(absoluteCursorPosition, absoluteCursorPosition)
586
+ isOverwriteEditing.value = false
587
+ })
588
+ }
524
589
  return
525
590
  }
526
591
 
@@ -576,7 +641,7 @@
576
641
  return formatDate(date, returnFormat.value)
577
642
  }
578
643
 
579
- function emitModel(val: DateValue) {
644
+ function emitModel(val: DateModelValue) {
580
645
  emit('update:model-value', val)
581
646
  }
582
647
 
@@ -657,6 +722,30 @@
657
722
  else handlePasteSingle(evt)
658
723
  }
659
724
 
725
+ function applyAutoClampOnCurrentInput(syncModel = true): boolean {
726
+ if (!props.autoClamp || !inputValue.value) return false
727
+
728
+ const clamped = clampIfNeeded(inputValue.value)
729
+ if (clamped === inputValue.value) return false
730
+
731
+ inputValue.value = clamped
732
+ if (!syncModel) return true
733
+
734
+ // Sync model après clamp uniquement si la valeur a changé.
735
+ isFormatting.value = true
736
+ if (isRange.value) {
737
+ const [startDate, endDate] = parseRangeInput(inputValue.value)
738
+ if (startDate && endDate) emitModel([toReturnFormat(startDate), toReturnFormat(endDate)])
739
+ else if (startDate) emit('date-selected', toReturnFormat(startDate))
740
+ }
741
+ else {
742
+ const parsedDate = parseDate(inputValue.value, displayFormat.value)
743
+ if (parsedDate) emitModel(returnFormat.value !== displayFormat.value ? toReturnFormat(parsedDate) : formatDate(parsedDate, displayFormat.value))
744
+ }
745
+
746
+ return true
747
+ }
748
+
660
749
  async function onFocus() {
661
750
  isFocused.value = true
662
751
  // Si aucun chiffre n'a été saisi (champ vide ou squelette), bootstrap et place le caret au début
@@ -682,18 +771,45 @@
682
771
  return
683
772
  }
684
773
 
774
+ // Le mode overwrite désactive le clamp pendant la frappe pour préserver le curseur.
775
+ // On l'applique donc avant la validation au blur, sinon une date comme 31/04
776
+ // sort en erreur avant d'atteindre la logique d'autoClamp.
777
+ // isFormatting bloque le watcher inputValue pour éviter une double émission du modèle.
778
+ isFormatting.value = true
779
+ applyAutoClampOnCurrentInput(false)
780
+ isFormatting.value = false
781
+
685
782
  if (inputValue.value) {
686
783
  const formatValidationResult = validateDateFormatForSingleOrRange(inputValue.value)
687
784
  const customRulesValidationResult = await safeValidateField(inputValue.value, computed(() => props.customRules).value, computed(() => props.customWarningRules).value)
688
785
 
689
786
  if (formatValidationResult.isValid && !customRulesValidationResult.hasError && !isRange.value) {
690
787
  const parsedDate = dayjs(inputValue.value, displayFormat.value, true).toDate()
788
+ // Guard isFormatting to prevent the modelValue watcher from
789
+ // rewriting inputValue in reaction to our own emit.
790
+ isFormatting.value = true
691
791
  emitModel(returnFormat.value !== displayFormat.value ? dayjs(parsedDate).format(returnFormat.value) : inputValue.value)
692
792
  }
693
793
  else if (formatValidationResult.isValid && !customRulesValidationResult.hasError && isRange.value) {
694
794
  if (typeof inputValue.value === 'string' && inputValue.value.includes(' - ')) {
695
795
  const dateRangeParts = inputValue.value.split(' - ')
696
- if (dateRangeParts.length === 2) emitModel([dateRangeParts[0]!, dateRangeParts[1]!])
796
+ if (dateRangeParts.length === 2) {
797
+ const sd = dayjs(dateRangeParts[0]!, displayFormat.value, true)
798
+ const ed = dayjs(dateRangeParts[1]!, displayFormat.value, true)
799
+ // Guard isFormatting to prevent the modelValue watcher from
800
+ // rewriting inputValue in reaction to our own emit.
801
+ isFormatting.value = true
802
+ if (sd.isValid() && ed.isValid()) {
803
+ const emittedRange: [string, string] = [
804
+ returnFormat.value !== displayFormat.value ? sd.format(returnFormat.value) : dateRangeParts[0]!,
805
+ returnFormat.value !== displayFormat.value ? ed.format(returnFormat.value) : dateRangeParts[1]!,
806
+ ]
807
+ emitModel(emittedRange)
808
+ }
809
+ else {
810
+ emitModel([dateRangeParts[0]!, dateRangeParts[1]!])
811
+ }
812
+ }
697
813
  else emitModel(inputValue.value)
698
814
  }
699
815
  else emitModel(inputValue.value)
@@ -701,29 +817,20 @@
701
817
  else {
702
818
  runRules(inputValue.value)
703
819
  if (!props.disableErrorHandling && formatValidationResult.message) errors.value.push(formatValidationResult.message)
704
- // Only emit null for format errors, not for custom rule errors
705
- if (!formatValidationResult.isValid) {
706
- emitModel(null)
707
- }
708
- // For custom rule errors with valid format, keep the current value
820
+ // Keep the invalid input visible so the user can correct it.
821
+ // Do NOT emit null — that would trigger the modelValue watcher
822
+ // which clears inputValue and hides the error message.
823
+ return
709
824
  }
710
825
  }
711
826
 
712
- // autoClamp au blur
713
- if (props.autoClamp) inputValue.value = clampIfNeeded(inputValue.value)
714
-
715
- // Sync model après clamp
716
- if (isRange.value) {
717
- const [startDate, endDate] = parseRangeInput(inputValue.value)
718
- if (startDate && endDate) emitModel([toReturnFormat(startDate), toReturnFormat(endDate)])
719
- else if (startDate) emit('date-selected', toReturnFormat(startDate))
720
- }
721
- else {
722
- const parsedDate = parseDate(inputValue.value, displayFormat.value)
723
- if (parsedDate) emitModel(returnFormat.value !== displayFormat.value ? toReturnFormat(parsedDate) : formatDate(parsedDate, displayFormat.value))
724
- }
725
-
726
827
  runRules(inputValue.value)
828
+
829
+ // Release isFormatting after the current microtask so that
830
+ // the modelValue watcher (triggered synchronously by emitModel)
831
+ // stays blocked, but future external changes are allowed.
832
+ await nextTick()
833
+ isFormatting.value = false
727
834
  }
728
835
 
729
836
  /**
@@ -874,7 +981,7 @@
874
981
  })).validateDates()
875
982
  }
876
983
  finally {
877
- setTimeout(() => (isUpdatingFromInternal.value = false), 0)
984
+ queueMicrotask(() => (isUpdatingFromInternal.value = false))
878
985
  }
879
986
 
880
987
  if (result.isComplete && result.dates[1]) {
@@ -892,7 +999,7 @@
892
999
 
893
1000
  emit('input', result.formattedValue)
894
1001
  if (result.cursorPosition !== undefined && !isHandlingBackspace.value) {
895
- setTimeout(() => inputEl?.setSelectionRange(result.cursorPosition!, result.cursorPosition!), 0)
1002
+ queueMicrotask(() => inputEl?.setSelectionRange(result.cursorPosition!, result.cursorPosition!))
896
1003
  }
897
1004
  }
898
1005
  else {
@@ -992,7 +1099,7 @@
992
1099
  successes,
993
1100
  })).validateDates()
994
1101
  }
995
- finally { setTimeout(() => (isUpdatingFromInternal.value = false), 0) }
1102
+ finally { queueMicrotask(() => (isUpdatingFromInternal.value = false)) }
996
1103
  inputValue.value = formatRangeForDisplay(sd, ed)
997
1104
  runRules(inputValue.value)
998
1105
  }
@@ -1092,7 +1199,9 @@
1092
1199
  :readonly="props.readonly"
1093
1200
  :variant-style="props.isOutlined ? 'outlined' : 'underlined'"
1094
1201
  :warning-messages="warningMessages"
1095
- :success-messages="props.showSuccessMessages ? successMessages : []"
1202
+ :success-messages="successMessages"
1203
+ :has-success="isOnSuccess"
1204
+ :show-success-messages="props.showSuccessMessages"
1096
1205
  :bg-color="props.bgColor"
1097
1206
  color="primary"
1098
1207
  :is-clearable="!props.readonly"
@@ -1120,10 +1229,10 @@
1120
1229
  }
1121
1230
 
1122
1231
  :deep(.v-field) {
1123
- color: rgb(var(--v-theme-borderWarning)) !important;
1232
+ color: rgb(var(--v-theme-warning)) !important;
1124
1233
 
1125
1234
  .v-field__outline {
1126
- color: rgb(var(--v-theme-borderWarning)) !important;
1235
+ color: rgb(var(--v-theme-warning)) !important;
1127
1236
  }
1128
1237
  }
1129
1238
 
@@ -1131,7 +1240,7 @@
1131
1240
  opacity: 1 !important;
1132
1241
 
1133
1242
  .v-messages__message {
1134
- color: rgb(var(--v-theme-borderWarning)) !important;
1243
+ color: rgb(var(--v-theme-warning)) !important;
1135
1244
  }
1136
1245
  }
1137
1246
  }
@@ -1139,11 +1248,11 @@
1139
1248
  .error-field {
1140
1249
  :deep(.v-input__control),
1141
1250
  :deep(.v-messages__message) {
1142
- color: rgb(var(--v-theme-textError)) !important;
1251
+ color: rgb(var(--v-theme-error)) !important;
1143
1252
  }
1144
1253
 
1145
1254
  .v-field--active & {
1146
- color: rgb(var(--v-theme-borderError)) !important;
1255
+ color: rgb(var(--v-theme-error)) !important;
1147
1256
  }
1148
1257
  }
1149
1258
 
@@ -1155,10 +1264,10 @@
1155
1264
  }
1156
1265
 
1157
1266
  :deep(.v-field) {
1158
- color: rgb(var(--v-theme-borderSuccess)) !important;
1267
+ color: rgb(var(--v-theme-onSuccessVariant)) !important;
1159
1268
 
1160
1269
  .v-field__outline {
1161
- color: rgb(var(--v-theme-borderSuccess)) !important;
1270
+ color: rgb(var(--v-theme-onSuccessVariant)) !important;
1162
1271
  }
1163
1272
  }
1164
1273
 
@@ -1166,7 +1275,7 @@
1166
1275
  opacity: 1 !important;
1167
1276
 
1168
1277
  .v-messages__message {
1169
- color: rgb(var(--v-theme-borderSuccess)) !important;
1278
+ color: rgb(var(--v-theme-onSuccessVariant)) !important;
1170
1279
  }
1171
1280
  }
1172
1281
  }
@@ -196,7 +196,7 @@ const meta = {
196
196
  },
197
197
  'birthDate': {
198
198
  control: 'boolean',
199
- description: 'Alias pour isBirthDate (pour compatibilité avec l\'attribut kebab-case birth-date dans les templates). ⚠️ Utiliser soit birthDate soit isBirthDate, mais pas les deux.',
199
+ description: '⚠️ **DEPRECATED** Utilisez `isBirthDate` à la place.',
200
200
  defaultValue: false,
201
201
  },
202
202
  'isBirthDate': {