@cnamts/synapse 1.0.20 → 1.0.22

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 (414) hide show
  1. package/dist/{DateFilter-XURUmpMl.js → DateFilter-B5n-ZkLi.js} +29 -24
  2. package/dist/{NumberFilter-BZc0O8wV.js → NumberFilter-CtiZ9uj8.js} +1 -1
  3. package/dist/{PeriodFilter-ZNdXcl3p.js → PeriodFilter-DzqiMb-b.js} +1 -1
  4. package/dist/{SelectFilter-DshYU5OK.js → SelectFilter-BOYlF7rX.js} +1 -1
  5. package/dist/{TextFilter-D_c5dRPl.js → TextFilter-BOFRNfcX.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +7399 -5967
  7. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +1 -1
  8. package/dist/components/Amelipro/AmeliproCallback/AmeliproCallback.d.ts +1 -1
  9. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +10 -14
  10. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +1 -1
  11. package/dist/components/Amelipro/AmeliproCheckbox/AmeliproCheckbox.d.ts +1 -1
  12. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +1 -1
  13. package/dist/components/Amelipro/AmeliproCustomSelector/AmeliproCustomSelector.d.ts +1 -1
  14. package/dist/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.d.ts +1 -1
  15. package/dist/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproFooter/AmeliproFooter.d.ts +8 -8
  17. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeader.d.ts +3 -3
  18. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBar.d.ts +1 -1
  19. package/dist/components/Amelipro/AmeliproHeader/AmeliproHeaderBar/AmeliproHeaderBrandSection/AmeliproHeaderBrandSection.d.ts +1 -1
  20. package/dist/components/Amelipro/AmeliproIcon/AmeliproIcon.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +16 -20
  22. package/dist/components/Amelipro/AmeliproMenu/AmeliproMenu.d.ts +1 -1
  23. package/dist/components/Amelipro/AmeliproPagination/AmeliproPaginationBtn/AmeliproPaginationBtn.d.ts +1 -1
  24. package/dist/components/Amelipro/AmeliproPatientBanner/AmeliproPatientBanner.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/AmeliproPostalAddressCityRow.d.ts +1610 -1354
  26. package/dist/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressField.d.ts +2411 -2027
  27. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +8889 -7327
  28. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  29. package/dist/components/Amelipro/AmeliproStepper/AmeliproStepper.d.ts +2 -6
  30. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +8888 -7334
  31. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +951 -839
  32. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +1613 -1357
  33. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +223 -203
  34. package/dist/components/Amelipro/AmeliproTransmission/AmeliproTransmission.d.ts +3 -3
  35. package/dist/components/Amelipro/StructureMenu/StructureTabs/StructureTabs.d.ts +3 -7
  36. package/dist/components/CollapsibleList/CollapsibleList.d.ts +4 -1
  37. package/dist/components/CookieBanner/CookieBanner.d.ts +303 -273
  38. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +1297 -1156
  39. package/dist/components/CookiesSelection/CookiesSelection.d.ts +404 -377
  40. package/dist/components/Customs/Selects/SelectBtnField/SelectBtnField.d.ts +1 -1
  41. package/dist/components/Customs/Selects/SyAutocomplete/SyAutocomplete.d.ts +1088 -847
  42. package/dist/components/Customs/Selects/SyInputSelect/SyInputSelect.d.ts +1 -1
  43. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +515 -321
  44. package/dist/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.d.ts +162 -0
  45. package/dist/components/Customs/SyCheckBoxGroup/locales.d.ts +3 -0
  46. package/dist/components/Customs/SyCheckBoxGroup/types.d.ts +10 -0
  47. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +1668 -5
  48. package/dist/components/Customs/SyForm/SyForm.d.ts +356 -348
  49. package/dist/components/Customs/SyPagination/SyPagination.d.ts +11 -1
  50. package/dist/components/Customs/SyRadioGroup/SyRadioGroup.d.ts +1609 -4
  51. package/dist/components/Customs/SyTextField/SyTextField.d.ts +1629 -1365
  52. package/dist/components/DataList/DataList.d.ts +1 -1
  53. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +3868 -3123
  54. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1946 -1562
  55. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +833 -687
  56. package/dist/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.d.ts +60 -0
  57. package/dist/components/DialogBox/DialogBox.d.ts +482 -416
  58. package/dist/components/DownloadBtn/config.d.ts +1 -1
  59. package/dist/components/ErrorPage/ErrorPage.d.ts +5 -12
  60. package/dist/components/ErrorPage/locales.d.ts +18 -3
  61. package/dist/components/FileList/UploadItem/locales.d.ts +4 -0
  62. package/dist/components/FileUpload/FileUpload.d.ts +6 -4
  63. package/dist/components/FileUpload/locales.d.ts +1 -0
  64. package/dist/components/FilterSideBar/FilterSideBar.d.ts +418 -366
  65. package/dist/components/FooterBar/FooterBar.d.ts +13 -1
  66. package/dist/components/FooterBar/locales.d.ts +1 -0
  67. package/dist/components/FooterBar/types.d.ts +1 -0
  68. package/dist/components/HeaderBar/HeaderBar.d.ts +1 -0
  69. package/dist/components/HeaderBar/HeaderLogo/HeaderLogo.d.ts +1 -0
  70. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +3 -6
  71. package/dist/components/HeaderToolbar/HeaderToolbar.d.ts +1031 -643
  72. package/dist/components/LangBtn/LangBtn.d.ts +277 -239
  73. package/dist/components/LogoBrandSection/LogoBrandSection.d.ts +4 -0
  74. package/dist/components/MaintenancePage/MaintenancePage.d.ts +16 -1
  75. package/dist/components/MaintenancePage/locales.d.ts +18 -2
  76. package/dist/components/NirField/NirField.d.ts +1659 -1371
  77. package/dist/components/NotFoundPage/NotFoundPage.d.ts +9 -3
  78. package/dist/components/NotFoundPage/locales.d.ts +20 -4
  79. package/dist/components/PageContainer/PageContainer.d.ts +3 -1
  80. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  81. package/dist/components/PeriodField/PeriodField.d.ts +7712 -6216
  82. package/dist/components/PhoneField/PhoneField.d.ts +831 -687
  83. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +4 -12
  84. package/dist/components/StatusPage/StatusPage.d.ts +50 -0
  85. package/dist/components/SubHeader/SubHeader.d.ts +2 -0
  86. package/dist/components/SyAlert/SyAlert.d.ts +74 -70
  87. package/dist/components/SyBtnMenu/SyBtnMenu.d.ts +10 -1
  88. package/dist/components/SyHeading/SyHeading.d.ts +20 -0
  89. package/dist/components/SyTextArea/SyTextArea.d.ts +476 -420
  90. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +759 -468
  91. package/dist/components/Tables/SyTable/SyTable.d.ts +761 -470
  92. package/dist/components/Tables/common/SyTableFilter.d.ts +1 -1
  93. package/dist/components/Tables/common/SyTablePagination.d.ts +269 -170
  94. package/dist/components/Tables/common/filters/DateFilter.d.ts +10 -1
  95. package/dist/components/Tables/common/filters/NumberFilter.d.ts +1 -1
  96. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +1 -1
  97. package/dist/components/Tables/common/filters/SelectFilter.d.ts +1 -1
  98. package/dist/components/Tables/common/filters/TextFilter.d.ts +1 -1
  99. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +166 -138
  100. package/dist/components/Tables/common/types.d.ts +2 -0
  101. package/dist/components/UploadWorkflow/UploadWorkflow.d.ts +35 -1212
  102. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +1 -0
  103. package/dist/components/index.d.ts +4 -0
  104. package/dist/components/types.d.ts +2 -0
  105. package/dist/design-system-v3.js +131 -127
  106. package/dist/design-system-v3.umd.cjs +274 -274
  107. package/dist/designTokens/tokens/amelipro/apLightTheme.d.ts +26 -14
  108. package/dist/designTokens/tokens/amelipro/apSemantic.d.ts +19 -13
  109. package/dist/designTokens/tokens/cnam/cnamLightTheme.d.ts +28 -15
  110. package/dist/designTokens/tokens/cnam/cnamSemantic.d.ts +20 -13
  111. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +26 -15
  112. package/dist/designTokens/tokens/pa/paSemantic.d.ts +19 -13
  113. package/dist/main-CEl4J8_T.js +37241 -0
  114. package/dist/style.css +1 -1
  115. package/dist/utils/theme/index.d.ts +6 -0
  116. package/dist/vuetifyConfig.d.ts +14 -14
  117. package/package.json +16 -7
  118. package/src/assets/amelipro/img/logo-amelipro.svg +9 -0
  119. package/src/assets/apTokens.scss +53 -17
  120. package/src/assets/overrides/_icons.scss +12 -2
  121. package/src/assets/overrides/_tooltips.scss +5 -6
  122. package/src/assets/overrides/_typography.scss +17 -2
  123. package/src/assets/overrides/_utilities.scss +49 -3
  124. package/src/assets/tokens.scss +53 -17
  125. package/src/components/Accordion/accessibilite/Accessibility.mdx +5 -4
  126. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/AmeliproAccordionTemplate.vue +2 -2
  127. package/src/components/Amelipro/AmeliproAccordion/AmeliproAccordionTemplate/__tests__/__snapshots__/AmeliproAccordionTemplate.spec.ts.snap +0 -2
  128. package/src/components/Amelipro/AmeliproAccordionFrieze/AmeliproAccordionFrieze.vue +2 -2
  129. package/src/components/Amelipro/AmeliproAccordionFrieze/__tests__/__snapshots__/AmeliproAccordionFrieze.spec.ts.snap +14 -56
  130. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +1 -1
  131. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +15 -23
  132. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +1 -1
  133. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +15 -3
  134. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +0 -2
  135. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +0 -98
  136. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.mdx +1 -1
  137. package/src/components/Amelipro/AmeliproContentLayout/AmeliproContentLayout.stories.ts +5 -16
  138. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.mdx +3 -1
  139. package/src/components/Amelipro/AmeliproCopyBtn/AmeliproCopyBtn.stories.ts +7 -0
  140. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/AmeliproTooth.vue +0 -1
  141. package/src/components/Amelipro/AmeliproDentalChart/AmeliproTooth/tests/__snapshots__/AmeliproTooth.spec.ts.snap +0 -1
  142. package/src/components/Amelipro/AmeliproDentalChart/tests/__snapshots__/AmeliproDentalChart.spec.ts.snap +0 -52
  143. package/src/components/Amelipro/AmeliproDialog/__tests__/__snapshots__/AmeliproDialog.spec.ts.snap +6 -0
  144. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.mdx +3 -1
  145. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.stories.ts +19 -0
  146. package/src/components/Amelipro/AmeliproErrorTemplate/AmeliproErrorTemplate.vue +2 -2
  147. package/src/components/Amelipro/AmeliproFirstLogin/AmeliproFirstLogin.vue +3 -4
  148. package/src/components/Amelipro/AmeliproFirstLogin/__tests__/__snapshots__/AmeliproFirstLogin.spec.ts.snap +2 -13
  149. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.mdx +3 -1
  150. package/src/components/Amelipro/AmeliproFooter/AmeliproFooter.stories.ts +7 -0
  151. package/src/components/Amelipro/AmeliproMenu/__tests__/__snapshots__/AmeliproMenu.spec.ts.snap +8 -0
  152. package/src/components/Amelipro/AmeliproPatientLogged/__tests__/__snapshots__/AmeliproPatientLogged.spec.ts.snap +9 -2
  153. package/src/components/Amelipro/AmeliproPostalAddressField/AmeliproPostalAddressCityRow/__tests__/__snapshots__/AmeliproPostalAddressCityRow.spec.ts.snap +28 -10
  154. package/src/components/Amelipro/AmeliproPostalAddressField/__tests__/__snapshots__/AmeliproPostalAddressField.spec.ts.snap +44 -8
  155. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +1 -1
  156. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +15 -3
  157. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +1 -1
  158. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +0 -1
  159. package/src/components/Amelipro/AmeliproTooltips/__tests__/__snapshots__/AmeliproTooltips.spec.ts.snap +6 -0
  160. package/src/components/Amelipro/AmeliproUpload/__tests__/__snapshots__/AmeliproUpload.spec.ts.snap +2 -4
  161. package/src/components/Amelipro/StructureMenu/StructureList/__tests__/__snapshots__/StructureList.spec.ts.snap +0 -2
  162. package/src/components/Amelipro/UserMenu/__tests__/__snapshots__/UserMenu.spec.ts.snap +8 -0
  163. package/src/components/BackBtn/BackBtn.vue +1 -1
  164. package/src/components/Captcha/tests/__snapshots__/Captcha.spec.ts.snap +36 -18
  165. package/src/components/ChipList/ChipList.vue +4 -2
  166. package/src/components/CollapsibleList/CollapsibleList.stories.ts +8 -3
  167. package/src/components/CollapsibleList/CollapsibleList.vue +14 -6
  168. package/src/components/CollapsibleList/accessibilite/Accessibility.mdx +19 -6
  169. package/src/components/CollapsibleList/tests/CollapsibleList.a11y.spec.ts +1 -0
  170. package/src/components/CollapsibleList/tests/CollapsibleList.spec.ts +2 -0
  171. package/src/components/ContextualMenu/ContextualMenu.stories.ts +0 -3
  172. package/src/components/ContextualMenu/accessibilite/Accessibility.mdx +67 -11
  173. package/src/components/CookieBanner/CookieBanner.stories.ts +21 -20
  174. package/src/components/CookieBanner/CookieBanner.vue +35 -10
  175. package/src/components/CookieBanner/accessibilite/Accessibility.mdx +76 -11
  176. package/src/components/CookieBanner/tests/CookieBanner.spec.ts +56 -4
  177. package/src/components/CookieBanner/tests/__snapshots__/CookieBanner.spec.ts.snap +21 -15
  178. package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +17 -8
  179. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.a11y.spec.ts +1 -0
  180. package/src/components/CookiesSelection/CookiesInformation/tests/CookiesInformation.spec.ts +5 -0
  181. package/src/components/CookiesSelection/CookiesSelection.vue +7 -2
  182. package/src/components/CookiesSelection/tests/CookiesSelection.a11y.spec.ts +1 -0
  183. package/src/components/CookiesSelection/tests/CookiesSelection.spec.ts +5 -0
  184. package/src/components/CookiesSelection/tests/__snapshots__/CookiesSelection.spec.ts.snap +21 -15
  185. package/src/components/CopyBtn/CopyBtn.vue +6 -4
  186. package/src/components/CopyBtn/accessibilite/Accessibility.mdx +82 -11
  187. package/src/components/CopyBtn/tests/__snapshots__/CopyBtn.spec.ts.snap +5 -1
  188. package/src/components/Customs/Selects/SyInputSelect/SyInputSelect.stories.ts +4 -10
  189. package/src/components/Customs/Selects/SySelect/SySelect.mdx +0 -1
  190. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +10 -10
  191. package/src/components/Customs/Selects/SySelect/SySelect.vue +17 -0
  192. package/src/components/Customs/Selects/SySelect/composables/useSySelectKeyboard.ts +1 -1
  193. package/src/components/Customs/Selects/SySelect/tests/SySelect.a11y.spec.ts +1 -3
  194. package/src/components/Customs/Selects/SySelect/tests/SySelect.spec.ts +72 -0
  195. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.mdx +32 -0
  196. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.stories.ts +856 -0
  197. package/src/components/Customs/SyCheckBoxGroup/SyCheckBoxGroup.vue +334 -0
  198. package/src/components/Customs/SyCheckBoxGroup/accessibilite/Accessibility.mdx +243 -0
  199. package/src/components/Customs/SyCheckBoxGroup/locales.ts +3 -0
  200. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.a11y.spec.ts +30 -0
  201. package/src/components/Customs/SyCheckBoxGroup/tests/SyCheckBoxGroup.spec.ts +152 -0
  202. package/src/components/Customs/SyCheckBoxGroup/types.ts +10 -0
  203. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +17 -28
  204. package/src/components/Customs/SyCheckbox/accessibilite/Accessibility.mdx +1 -1
  205. package/src/components/Customs/SyForm/SyForm.a11y.spec.ts +1 -1
  206. package/src/components/Customs/SyIcon/SyIcon.a11y.spec.ts +31 -2
  207. package/src/components/Customs/SyIcon/SyIcon.vue +9 -5
  208. package/src/components/Customs/SyPagination/SyPagination.stories.ts +14 -2
  209. package/src/components/Customs/SyPagination/SyPagination.vue +20 -5
  210. package/src/components/Customs/SyPagination/accessibilite/Accessibility.mdx +79 -8
  211. package/src/components/Customs/SyPagination/tests/SyPagination.a11y.spec.ts +38 -12
  212. package/src/components/Customs/SyPagination/tests/SyPagination.spec.ts +12 -0
  213. package/src/components/Customs/SyRadioGroup/SyRadioGroup.vue +16 -43
  214. package/src/components/Customs/SyTextField/SyTextField.stories.ts +4 -0
  215. package/src/components/Customs/SyTextField/SyTextField.vue +39 -5
  216. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +28 -3
  217. package/src/components/DatePicker/CalendarMode/DatePicker.vue +55 -19
  218. package/src/components/DatePicker/CalendarMode/tests/DatePicker.spec.ts +9 -3
  219. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +44 -3
  220. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +70 -47
  221. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.a11y.spec.ts +9 -1
  222. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +48 -21
  223. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +98 -0
  224. package/src/components/DatePicker/docExamples/BidirectionalComplexValidation.vue +23 -9
  225. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +21 -8
  226. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +50 -22
  227. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +48 -10
  228. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +16 -3
  229. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.mdx +83 -0
  230. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.stories.ts +502 -0
  231. package/src/components/DeclarationAccessibilityPage/DeclarationAccessibilityPage.vue +428 -0
  232. package/src/components/DeclarationAccessibilityPage/accessibilite/Accessibility.mdx +75 -0
  233. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.a11y.spec.ts +53 -0
  234. package/src/components/DeclarationAccessibilityPage/tests/DeclarationAccessibilityPage.spec.ts +59 -0
  235. package/src/components/DiacriticPicker/DiacriticPicker.vue +20 -1
  236. package/src/components/DialogBox/DialogBox.stories.ts +13 -0
  237. package/src/components/DialogBox/DialogBox.vue +12 -5
  238. package/src/components/DialogBox/accessibilite/Accessibility.mdx +27 -7
  239. package/src/components/DialogBox/tests/DialogBox.a11y.spec.ts +1 -0
  240. package/src/components/DialogBox/tests/DialogBox.spec.ts +40 -6
  241. package/src/components/DownloadBtn/accessibilite/Accessibility.mdx +73 -11
  242. package/src/components/DownloadBtn/config.ts +1 -1
  243. package/src/components/ErrorPage/ErrorPage.mdx +6 -16
  244. package/src/components/ErrorPage/ErrorPage.stories.ts +90 -126
  245. package/src/components/ErrorPage/ErrorPage.vue +44 -125
  246. package/src/components/ErrorPage/accessibilite/Accessibility.mdx +83 -6
  247. package/src/components/ErrorPage/assets/error-ap.svg +1774 -0
  248. package/src/components/ErrorPage/locales.ts +21 -3
  249. package/src/components/ErrorPage/tests/ErrorPage.a11y.spec.ts +5 -13
  250. package/src/components/ErrorPage/tests/ErrorPage.spec.ts +2 -41
  251. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +10 -266
  252. package/src/components/ExternalLinks/tests/__snapshots__/ExternalLinks.spec.ts.snap +13 -2
  253. package/src/components/FileList/FileList.stories.ts +4 -0
  254. package/src/components/FileList/UploadItem/UploadItem.vue +8 -3
  255. package/src/components/FileList/UploadItem/locales.ts +10 -0
  256. package/src/components/FileList/accessibilite/Accessibility.mdx +55 -7
  257. package/src/components/FileUpload/FileUpload.vue +65 -37
  258. package/src/components/FileUpload/FileUploadContent.vue +1 -1
  259. package/src/components/FileUpload/accessibilite/Accessibility.mdx +48 -5
  260. package/src/components/FileUpload/locales.ts +1 -0
  261. package/src/components/FileUpload/tests/FileUpload.spec.ts +14 -14
  262. package/src/components/FilterInline/FilterInline.stories.ts +0 -15
  263. package/src/components/FilterInline/FilterInline.vue +1 -0
  264. package/src/components/FilterInline/accessibilite/Accessibility.mdx +70 -7
  265. package/src/components/FilterInline/tests/__snapshots__/FilterInline.spec.ts.snap +3 -3
  266. package/src/components/FilterSideBar/FilterSideBar.stories.ts +0 -3
  267. package/src/components/FilterSideBar/FilterSideBar.vue +2 -1
  268. package/src/components/FilterSideBar/accessibilite/Accessibility.mdx +70 -9
  269. package/src/components/FooterBar/FooterBar.stories.ts +316 -48
  270. package/src/components/FooterBar/FooterBar.vue +67 -9
  271. package/src/components/FooterBar/config.ts +2 -2
  272. package/src/components/FooterBar/defaultSocialMediaLinks.ts +6 -4
  273. package/src/components/FooterBar/locales.ts +1 -0
  274. package/src/components/FooterBar/tests/FooterBarConfig.spec.ts +1 -1
  275. package/src/components/FooterBar/tests/__snapshots__/FooterBar.spec.ts.snap +6 -25
  276. package/src/components/FooterBar/types.d.ts +1 -0
  277. package/src/components/HeaderBar/HeaderBar.stories.ts +23 -1
  278. package/src/components/HeaderBar/HeaderBar.vue +4 -0
  279. package/src/components/HeaderBar/HeaderLogo/HeaderLogo.vue +7 -2
  280. package/src/components/HeaderBar/HeaderLogo/tests/HeaderLogo.spec.ts +5 -0
  281. package/src/components/HeaderBar/accessibilite/Accessibility.mdx +24 -5
  282. package/src/components/HeaderBar/tests/HeaderBar.a11y.spec.ts +1 -0
  283. package/src/components/HeaderBar/tests/HeaderBar.spec.ts +3 -0
  284. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +4 -0
  285. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +2 -0
  286. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +3 -0
  287. package/src/components/LogoBrandSection/LogoBrandSection.stories.ts +22 -0
  288. package/src/components/LogoBrandSection/LogoBrandSection.vue +13 -5
  289. package/src/components/LogoBrandSection/tests/LogoBrandSection.a11y.spec.ts +2 -0
  290. package/src/components/LogoBrandSection/tests/LogoBrandSection.spec.ts +44 -0
  291. package/src/components/LogoBrandSection/tests/__snapshots__/LogoBrandSection.spec.ts.snap +2 -0
  292. package/src/components/MaintenancePage/MaintenancePage.mdx +1 -1
  293. package/src/components/MaintenancePage/MaintenancePage.vue +42 -7
  294. package/src/components/MaintenancePage/accessibilite/Accessibility.mdx +63 -6
  295. package/src/components/MaintenancePage/assets/maintenance-ap.svg +1718 -0
  296. package/src/components/MaintenancePage/locales.ts +24 -3
  297. package/src/components/MaintenancePage/tests/MaintenancePage.a11y.spec.ts +76 -3
  298. package/src/components/MaintenancePage/tests/MaintenancePage.spec.ts +60 -2
  299. package/src/components/MaintenancePage/tests/__snapshots__/MaintenancePage.spec.ts.snap +5 -2
  300. package/src/components/NotFoundPage/NotFoundPage.mdx +1 -1
  301. package/src/components/NotFoundPage/NotFoundPage.stories.ts +4 -4
  302. package/src/components/NotFoundPage/NotFoundPage.vue +30 -14
  303. package/src/components/NotFoundPage/accessibilite/Accessibility.mdx +80 -6
  304. package/src/components/NotFoundPage/assets/not-found-ap.svg +2061 -0
  305. package/src/components/NotFoundPage/locales.ts +24 -4
  306. package/src/components/NotFoundPage/tests/NotFoundPage.a11y.spec.ts +217 -4
  307. package/src/components/NotFoundPage/tests/NotFoundPage.spec.ts +123 -12
  308. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +4 -2
  309. package/src/components/NotificationBar/NotificationBar.mdx +2 -2
  310. package/src/components/NotificationBar/accessibilite/Accessibility.mdx +68 -8
  311. package/src/components/PageContainer/PageContainer.stories.ts +47 -0
  312. package/src/components/PageContainer/PageContainer.vue +4 -2
  313. package/src/components/PageContainer/accessibilite/Accessibility.mdx +67 -0
  314. package/src/components/PageContainer/tests/PageContainer.a11y.spec.ts +14 -7
  315. package/src/components/PaginatedTable/PaginatedTable.mdx +3 -3
  316. package/src/components/PaginatedTable/PaginatedTable.stories.ts +9 -1
  317. package/src/components/PeriodField/PeriodField.vue +4 -0
  318. package/src/components/PeriodField/tests/PeriodField.a11y.spec.ts +10 -1
  319. package/src/components/PhoneField/PhoneField.stories.ts +115 -69
  320. package/src/components/PhoneField/PhoneField.vue +152 -83
  321. package/src/components/PhoneField/accessibilite/Accessibility.mdx +306 -9
  322. package/src/components/PhoneField/indicatifs.ts +2 -2
  323. package/src/components/PhoneField/tests/PhoneField.a11y.spec.ts +22 -9
  324. package/src/components/PhoneField/tests/PhoneField.spec.ts +82 -5
  325. package/src/components/SearchListField/SearchListField.vue +1 -1
  326. package/src/components/SearchListField/accessibilite/Accessibility.mdx +69 -9
  327. package/src/components/SearchListField/tests/SearchListField.a11y.spec.ts +37 -0
  328. package/src/components/SocialMediaLinks/DefaultSocialMediaLinks.ts +6 -4
  329. package/src/components/SocialMediaLinks/SocialMediaLinks.mdx +7 -5
  330. package/src/components/SocialMediaLinks/SocialMediaLinks.stories.ts +17 -13
  331. package/src/components/SocialMediaLinks/SocialMediaLinks.vue +10 -2
  332. package/src/components/SocialMediaLinks/accessibilite/Accessibility.mdx +63 -11
  333. package/src/components/SocialMediaLinks/tests/DefaultSocialMediaLinks.spec.ts +5 -5
  334. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.a11y.spec.ts +59 -0
  335. package/src/components/SocialMediaLinks/tests/SocialMediaLinks.spec.ts +9 -7
  336. package/src/components/StatusPage/StatusPage.mdx +31 -0
  337. package/src/components/StatusPage/StatusPage.stories.ts +236 -0
  338. package/src/components/StatusPage/StatusPage.vue +167 -0
  339. package/src/components/StatusPage/accessibilite/Accessibility.mdx +100 -0
  340. package/src/components/StatusPage/tests/StatusPage.a11y.spec.ts +30 -0
  341. package/src/components/StatusPage/tests/StatusPage.spec.ts +53 -0
  342. package/src/components/StatusPage/tests/__snapshots__/StatusPage.spec.ts.snap +272 -0
  343. package/src/components/SubHeader/SubHeader.stories.ts +16 -0
  344. package/src/components/SubHeader/SubHeader.vue +6 -3
  345. package/src/components/SubHeader/accessibilite/Accessibility.mdx +27 -6
  346. package/src/components/SyAlert/SyAlert.vue +21 -20
  347. package/src/components/SyBtnMenu/SyBtnMenu.vue +33 -17
  348. package/src/components/SyBtnMenu/tests/SyBtnMenu.a11y.spec.ts +38 -0
  349. package/src/components/SyBtnMenu/tests/SyBtnMenu.spec.ts +41 -0
  350. package/src/components/SyHeading/SyHeading.vue +18 -0
  351. package/src/components/TableToolbar/TableToolbar.stories.ts +6 -6
  352. package/src/components/TableToolbar/TableToolbar.vue +1 -1
  353. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +96 -35
  354. package/src/components/Tables/SyServerTable/SyServerTable.vue +2 -0
  355. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  356. package/src/components/Tables/common/SyTablePagination.vue +16 -10
  357. package/src/components/Tables/common/filters/DateFilter.vue +5 -0
  358. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +40 -24
  359. package/src/components/Tables/common/types.ts +3 -0
  360. package/src/components/UploadWorkflow/UploadWorkflow.mdx +11 -1
  361. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +118 -14
  362. package/src/components/UploadWorkflow/UploadWorkflow.vue +59 -31
  363. package/src/components/UploadWorkflow/accessibilite/Accessibility.mdx +56 -5
  364. package/src/components/UploadWorkflow/accessibilite/UploadWorkflow.a11y.spec.ts +110 -0
  365. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +37 -7
  366. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +139 -112
  367. package/src/components/UploadWorkflow/useFileList.ts +7 -0
  368. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +53 -31
  369. package/src/components/UserMenuBtn/UserMenuBtn.vue +4 -1
  370. package/src/components/UserMenuBtn/accessibilite/Accessibility.mdx +72 -8
  371. package/src/components/index.ts +4 -0
  372. package/src/components/types.ts +4 -0
  373. package/src/composables/date/tests/useDateInitialization.spec.ts +22 -1
  374. package/src/composables/date/useDateInitializationDayjs.ts +4 -7
  375. package/src/composables/date/useDatePickerAccessibility.ts +2 -3
  376. package/src/composables/rules/tests/useFieldValidation.spec.ts +39 -3
  377. package/src/composables/rules/useFieldValidation.ts +24 -9
  378. package/src/composables/useFilterable/useFilterable.spec.ts +52 -2
  379. package/src/composables/useFilterable/useFilterable.ts +7 -1
  380. package/src/designTokens/tokens/amelipro/apLightTheme.ts +27 -15
  381. package/src/designTokens/tokens/amelipro/apSemantic.ts +21 -15
  382. package/src/designTokens/tokens/cnam/cnamLightTheme.ts +28 -15
  383. package/src/designTokens/tokens/cnam/cnamSemantic.ts +21 -14
  384. package/src/designTokens/tokens/pa/paLightTheme.ts +27 -16
  385. package/src/designTokens/tokens/pa/paSemantic.ts +19 -13
  386. package/src/directives/rgaaSvgFix.ts +2 -7
  387. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/Exemptions-derogations.mdx +1 -1
  388. package/src/stories/Accessibilite/AuditEtContreAudit/Introduction.mdx +188 -0
  389. package/src/stories/Accessibilite/{Audit → AuditEtContreAudit}/RGAA.mdx +1 -1
  390. package/src/stories/Accessibilite/Introduction.mdx +22 -3
  391. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +21 -22
  392. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +7 -0
  393. package/src/stories/DeprecationNotice/DeprecationNotice.ts +41 -0
  394. package/src/stories/DesignTokens/ColorDisplay.vue +12 -5
  395. package/src/stories/DesignTokens/Colors.mdx +8 -59
  396. package/src/stories/DesignTokens/colors.stories.ts +1862 -1071
  397. package/src/stories/EcoConception/EcoGuideComponent.vue +10 -4
  398. package/src/utils/theme/index.ts +19 -0
  399. package/src/utils/theme/tests/useThemeLocales.spec.ts +245 -0
  400. package/dist/components/MaintenancePage/index.d.ts +0 -2
  401. package/dist/main-CuI6xaPq.js +0 -36396
  402. package/src/components/Customs/SyTabs/tests/SyTabs.a11y.spec.ts +0 -51
  403. package/src/components/DataListItem/tests/DataListItem.a11y.spec.ts +0 -31
  404. package/src/components/DatePicker/CalendarMode/tests/DatePicker.a11y.spec.ts +0 -27
  405. package/src/components/DownloadBtn/tests/DownloadBtn.a11y.spec.ts +0 -26
  406. package/src/components/ExternalLinks/tests/ExternalLinks.a11y.spec.ts +0 -39
  407. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.a11y.spec.ts +0 -45
  408. package/src/components/HeaderToolbar/tests/HeaderToolbar.a11y.spec.ts +0 -25
  409. package/src/components/LunarCalendar/tests/LunarCalendar.a11y.spec.ts +0 -31
  410. package/src/components/MaintenancePage/index.ts +0 -3
  411. package/src/components/PageContainer/Accessibilite/Accessibility.mdx +0 -53
  412. package/src/components/PageContainer/Accessibilite/AccessibilityGuide.mdx +0 -0
  413. package/src/components/PaginatedTable/tests/PaginatedTable.a11y.spec.ts +0 -43
  414. /package/src/components/NotFoundPage/assets/{not-found.svg → not-found-cnam.svg} +0 -0
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
  import { computed, ref, watch, nextTick } from 'vue'
3
3
  import type { PropType } from 'vue'
4
- import { mdiPhone } from '@mdi/js'
4
+ import { mdiAlertOutline, mdiCheck, mdiInformation, mdiPhone } from '@mdi/js'
5
5
  import { indicatifs } from './indicatifs'
6
6
  import { Mask } from 'maska'
7
7
  import { locales } from './locales'
@@ -10,11 +10,6 @@
10
10
  import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
11
11
  import { useValidation, type ValidationRule } from '@/composables/validation/useValidation'
12
12
  import { useValidatable } from '@/composables/validation/useValidatable'
13
- import {
14
- mdiAlertOutline,
15
- mdiCheck,
16
- mdiInformation,
17
- } from '@mdi/js'
18
13
 
19
14
  type DisplayFormat = 'code' | 'code-abbreviation' | 'code-country' | 'country' | 'abbreviation'
20
15
  type Indicatif = {
@@ -61,33 +56,77 @@
61
56
  const phoneMask = ref('## ## ## ## ##')
62
57
  const onBlur = ref(false)
63
58
 
64
- function formatPhoneNumber(value: string): string {
65
- if (!value) return ''
66
- const cleaned = value.replace(/\D/g, '')
67
- return cleaned.replace(/(.{2})/g, '$1 ').trim()
59
+ const buildDefaultMask = (length: number): string =>
60
+ '#'.repeat(length || 10).replace(/(.{2})/g, '$1 ').trim()
61
+
62
+ const toTrimmedDigits = (value: string, maxDigits: number): string => {
63
+ return value.replace(/\D/g, '').slice(0, maxDigits)
68
64
  }
69
65
 
70
- const computedValue = computed(() => formatPhoneNumber(phoneNumber.value))
66
+ // Cache the Mask instance — recreated only when phoneMask changes, not on every keystroke
67
+ const maskInstance = computed(() => new Mask({ mask: phoneMask.value }))
68
+ const applyMask = (digits: string): string => maskInstance.value.masked(digits)
69
+
70
+ // phoneNumber is always masked, so this is just a stable public alias
71
+ const computedValue = computed(() => phoneNumber.value)
71
72
 
72
73
  watch(() => props.modelValue, (newVal) => {
73
74
  if (newVal) {
74
75
  // Apply mask to incoming value to ensure consistent formatting
75
- const mask = new Mask({ mask: phoneMask.value })
76
- phoneNumber.value = mask.masked(newVal)
76
+ const digits = toTrimmedDigits(newVal, counter.value)
77
+ phoneNumber.value = applyMask(digits)
77
78
  }
78
79
  else {
79
80
  phoneNumber.value = ''
80
81
  }
81
82
  }, { immediate: true })
82
83
 
83
- watch(dialCode, (newVal) => {
84
- emit('update:selectedDialCode', newVal)
85
- if (typeof newVal === 'object' && newVal !== null) {
86
- counter.value = newVal.phoneLength || 10
87
- phoneMask.value = newVal.mask || '#'.repeat(newVal.phoneLength || 10).replace(/(.{2})/g, '$1 ').trim()
88
- const mask = new Mask({ mask: phoneMask.value })
89
- const maskedValue = mask.masked(phoneNumber.value)
84
+ const isIndicatifLike = (value: unknown): value is Indicatif => {
85
+ return typeof value === 'object'
86
+ && value !== null
87
+ && 'code' in value
88
+ && 'phoneLength' in value
89
+ }
90
+
91
+ watch(dialCode, async (newVal) => {
92
+ // Storybook / composants parents peuvent fournir un objet indicatif "stale" (mask/phoneLength obsolètes).
93
+ // On normalise donc TOUJOURS l'indicatif à partir de la liste dialCodeOptions
94
+ const dialCodeValue = typeof newVal === 'object' && newVal !== null
95
+ ? newVal.code
96
+ : newVal
97
+ const resolvedDialCode = dialCodeOptions.value.find(opt => opt.code === dialCodeValue)
98
+ ?? (isIndicatifLike(newVal) ? newVal : null)
99
+ const placeholdersCount = (resolvedDialCode?.mask?.match(/#/g) || []).length
100
+ const normalizedDialCode = resolvedDialCode
101
+ ? {
102
+ ...resolvedDialCode,
103
+ // Si le mask n'est pas cohérent avec phoneLength (ex: 10 placeholders mais phoneLength=9),
104
+ // on reconstruit un mask de secours à partir de phoneLength.
105
+ mask: resolvedDialCode.mask && placeholdersCount === resolvedDialCode.phoneLength
106
+ ? resolvedDialCode.mask
107
+ : buildDefaultMask(resolvedDialCode.phoneLength),
108
+ }
109
+ : null
110
+
111
+ emit('update:selectedDialCode', normalizedDialCode ?? newVal)
112
+
113
+ if (normalizedDialCode) {
114
+ counter.value = normalizedDialCode.phoneLength || 10
115
+ phoneMask.value = normalizedDialCode.mask || buildDefaultMask(normalizedDialCode.phoneLength)
116
+ const digits = toTrimmedDigits(phoneNumber.value, counter.value)
117
+ const maskedValue = applyMask(digits)
118
+ phoneNumber.value = maskedValue
90
119
  emit('update:modelValue', maskedValue)
120
+
121
+ await nextTick()
122
+ await nextTick()
123
+
124
+ // Le changement d'indicatif modifie les règles (longueur attendue), donc on revalide immédiatement
125
+ // si une valeur est déjà saisie. Objectif: messages à jour sans nécessiter un nouveau blur.
126
+ if (!shouldDisableErrorHandling.value && phoneNumber.value) {
127
+ onBlur.value = true
128
+ runValidation()
129
+ }
91
130
  }
92
131
  })
93
132
 
@@ -128,14 +167,13 @@
128
167
  // Sauvegarder la position du curseur
129
168
  const cursorPosition = inputElement.selectionStart || 0
130
169
 
131
- // Appliquer le masque
132
- const mask = new Mask({ mask: phoneMask.value })
133
- const maskedValue = mask.masked(input)
170
+ // Appliquer le masque (en tronquant au nombre de chiffres attendu)
171
+ const digits = toTrimmedDigits(input, counter.value)
172
+ const maskedValue = applyMask(digits)
134
173
 
135
174
  // Mettre à jour la valeur
136
175
  phoneNumber.value = maskedValue
137
176
  emit('update:modelValue', maskedValue)
138
- emit('change', maskedValue)
139
177
 
140
178
  // Restaurer la position du curseur sur le prochain cycle de rendu
141
179
  nextTick(() => {
@@ -144,6 +182,31 @@
144
182
  })
145
183
  }
146
184
 
185
+ const handlePhoneModelUpdate = (value: string | number | null) => {
186
+ const digits = toTrimmedDigits(String(value ?? ''), counter.value)
187
+ const maskedValue = applyMask(digits)
188
+ phoneNumber.value = maskedValue
189
+ emit('update:modelValue', maskedValue)
190
+ }
191
+
192
+ const handlePhoneKeydown = (event: KeyboardEvent) => {
193
+ if (counter.value <= 0) return
194
+ if (!event.key || !/\d/.test(event.key)) return
195
+
196
+ const inputElement = event.target as HTMLInputElement | null
197
+ const selectionStart = inputElement?.selectionStart ?? null
198
+ const selectionEnd = inputElement?.selectionEnd ?? null
199
+ const hasSelection
200
+ = selectionStart !== null
201
+ && selectionEnd !== null
202
+ && selectionEnd > selectionStart
203
+
204
+ const currentDigitsCount = phoneNumber.value.replace(/\D/g, '').length
205
+ if (currentDigitsCount >= counter.value && !hasSelection) {
206
+ event.preventDefault()
207
+ }
208
+ }
209
+
147
210
  const mergedDialCodes = computed(() =>
148
211
  props.useCustomIndicatifsOnly ? props.customIndicatifs : [...indicatifs, ...props.customIndicatifs],
149
212
  )
@@ -152,68 +215,53 @@
152
215
  mergedDialCodes.value.map(ind => ({
153
216
  ...ind,
154
217
  displayText: generateDisplayText(ind),
155
- plainDisplayText: generatePlainDisplayText(ind),
218
+ plainDisplayText: generateDisplayText(ind, true),
156
219
  })),
157
220
  )
158
221
 
159
222
  watch(() => props.readonly, () => {
160
223
  if (onBlur.value && !shouldDisableErrorHandling.value) {
161
- const cleanedValue = phoneNumber.value.replace(/\s/g, '')
162
- validation.validateField(cleanedValue, validationRules.value)
224
+ runValidation()
163
225
  }
164
226
  })
165
227
 
228
+ const getFranceDefault = () =>
229
+ dialCodeOptions.value.find(opt => opt.code === '+33') ?? ''
230
+
166
231
  // Watcher pour initialiser dialCode à partir de props.dialCodeModel
167
232
  watch(() => props.dialCodeModel, (newVal) => {
168
233
  if (!newVal) {
169
- dialCode.value = ''
234
+ // Par défaut, pré-sélectionner la France (+33) quand l'indicatif est activé
235
+ dialCode.value = props.withCountryCode ? getFranceDefault() : ''
170
236
  return
171
237
  }
172
238
 
173
- // Si c'est un objet, on cherche l'indicatif correspondant dans la liste des options
174
239
  if (typeof newVal === 'object') {
175
- // On cherche l'indicatif avec le même code
176
- const matchingOption = dialCodeOptions.value.find((opt) => {
177
- return opt.code === newVal.code
178
- })
179
-
180
- if (matchingOption) {
181
- // On utilise directement l'objet de la liste pour éviter les problèmes de référence
182
- dialCode.value = matchingOption
183
- }
184
- else {
185
- dialCode.value = newVal
186
- }
240
+ const matchingOption = dialCodeOptions.value.find(opt => opt.code === newVal.code)
241
+ dialCode.value = matchingOption ?? newVal
187
242
  }
188
243
  else {
189
- // Si c'est une chaîne ou autre chose, on l'utilise directement
190
244
  dialCode.value = newVal
191
245
  }
192
246
  }, { immediate: true })
193
247
 
194
- function generateDisplayText(ind: Indicatif): string {
248
+ function generateDisplayText(ind: Indicatif, plain = false): string {
195
249
  const countryName = ind.countryFr || ind.country
196
- const format = {
250
+ const abbr = plain ? ind.abbreviation : `<abbr title="${countryName}">${ind.abbreviation}</abbr>`
251
+ const format: Record<DisplayFormat, string> = {
197
252
  'code': ind.code,
198
- 'code-abbreviation': `${ind.code} (<abbr title="${countryName}">${ind.abbreviation}</abbr>)`,
253
+ 'code-abbreviation': `${ind.code} (${abbr})`,
199
254
  'code-country': `${ind.code} ${countryName}`,
200
255
  'country': countryName,
201
- 'abbreviation': `<abbr title="${countryName}">${ind.abbreviation}</abbr>`,
256
+ 'abbreviation': abbr,
202
257
  }
203
- return format[props.displayFormat] || ind.code
258
+ return format[props.displayFormat] ?? ind.code
204
259
  }
205
260
 
206
- function generatePlainDisplayText(ind: Indicatif): string {
207
- const countryName = ind.countryFr || ind.country
208
- const format = {
209
- 'code': ind.code,
210
- 'code-abbreviation': `${ind.code} (${ind.abbreviation})`,
211
- 'code-country': `${ind.code} ${countryName}`,
212
- 'country': countryName,
213
- 'abbreviation': ind.abbreviation,
214
- }
215
- return format[props.displayFormat] || ind.code
216
- }
261
+ const phoneFieldIdentifier = computed(() => props.withCountryCode
262
+ ? locales.phoneNumberWithoutCountryLabel
263
+ : locales.label,
264
+ )
217
265
 
218
266
  const validationRules = computed<ValidationRule[]>(() => {
219
267
  const rules = [{
@@ -222,7 +270,8 @@
222
270
  length: counter.value,
223
271
  ignoreSpace: true,
224
272
  message: `Le numéro de téléphone doit contenir ${counter.value} chiffres.`,
225
- fieldIdentifier: locales.label,
273
+ successMessage: `Le champ ${phoneFieldIdentifier.value} est valide.`,
274
+ fieldIdentifier: phoneFieldIdentifier.value,
226
275
  },
227
276
  }] as ValidationRule[]
228
277
 
@@ -232,8 +281,8 @@
232
281
  options: {
233
282
  length: counter.value,
234
283
  ignoreSpace: true,
235
- message: `Le champ ${locales.label} est requis.`,
236
- fieldIdentifier: locales.label,
284
+ message: `Le champ ${phoneFieldIdentifier.value} est requis.`,
285
+ fieldIdentifier: phoneFieldIdentifier.value,
237
286
  },
238
287
  })
239
288
  }
@@ -253,13 +302,17 @@
253
302
  const validation = useValidation({
254
303
  customRules: validationRules.value,
255
304
  showSuccessMessages: true,
256
- fieldIdentifier: locales.label,
257
305
  disableErrorHandling: shouldDisableErrorHandling.value,
258
306
  })
259
307
 
260
308
  const hasError = computed(() => !shouldDisableErrorHandling.value && validation.hasError.value)
261
309
  const hasWarning = computed(() => !shouldDisableErrorHandling.value && validation.hasWarning.value)
262
- const hasSuccess = computed(() => !shouldDisableErrorHandling.value && validation.hasSuccess.value)
310
+ const hasSuccess = computed(() =>
311
+ !shouldDisableErrorHandling.value
312
+ && !hasError.value
313
+ && !hasWarning.value
314
+ && validation.hasSuccess.value,
315
+ )
263
316
 
264
317
  const iconColor = computed(() => {
265
318
  if (shouldDisableErrorHandling.value) return '#222324'
@@ -271,32 +324,46 @@
271
324
 
272
325
  const errors = computed(() => shouldDisableErrorHandling.value ? [] : validation.errors.value)
273
326
  const warnings = computed(() => shouldDisableErrorHandling.value ? [] : validation.warnings.value)
274
- const successes = computed(() => shouldDisableErrorHandling.value ? [] : validation.successes.value)
327
+ const successes = computed(() =>
328
+ shouldDisableErrorHandling.value || hasError.value || hasWarning.value
329
+ ? []
330
+ : validation.successes.value,
331
+ )
275
332
 
276
- const showHelpTextBelow = computed(() => {
277
- // Display help text below by default if it exists
278
- return props.helpText && props.helpText.trim() !== ''
279
- })
333
+ const showHelpTextBelow = computed(() => !!props.helpText?.trim())
334
+
335
+ const runValidation = (): void => {
336
+ const cleanedValue = phoneNumber.value.replace(/\s/g, '')
337
+ validation.validateField(cleanedValue, validationRules.value)
338
+ }
280
339
 
281
340
  function validateInputOnBlur() {
341
+ emit('change', phoneNumber.value)
342
+
282
343
  if (!props.isValidatedOnBlur || shouldDisableErrorHandling.value) return
283
344
 
284
345
  onBlur.value = true
285
- const cleanedValue = phoneNumber.value.replace(/\s/g, '')
286
- validation.validateField(cleanedValue, validationRules.value)
346
+ runValidation()
287
347
  }
288
348
 
289
349
  watch(phoneNumber, (newValue) => {
290
- if ((!props.isValidatedOnBlur || onBlur.value) && !shouldDisableErrorHandling.value) {
350
+ if (shouldDisableErrorHandling.value) return
351
+
352
+ if (!props.isValidatedOnBlur) {
353
+ // Validation en temps réel (isValidatedOnBlur=false)
291
354
  const cleanedValue = newValue.replace(/\s/g, '')
292
355
  validation.validateField(cleanedValue, validationRules.value)
293
356
  }
357
+ else if (onBlur.value) {
358
+ // Après un premier blur, effacer les erreurs pendant la frappe —
359
+ // la revalidation se fera au prochain blur (comme SyTextField)
360
+ validation.clearValidation()
361
+ }
294
362
  })
295
363
 
296
364
  watch(validationRules, () => {
297
365
  if (onBlur.value && !shouldDisableErrorHandling.value) {
298
- const cleanedValue = phoneNumber.value.replace(/\s/g, '')
299
- validation.validateField(cleanedValue, validationRules.value)
366
+ runValidation()
300
367
  }
301
368
  })
302
369
 
@@ -310,9 +377,7 @@
310
377
  }
311
378
 
312
379
  onBlur.value = true
313
-
314
- const cleanedValue = phoneNumber.value.replace(/\s/g, '')
315
- validation.validateField(cleanedValue, validationRules.value)
380
+ runValidation()
316
381
 
317
382
  if (props.withCountryCode && props.countryCodeRequired && !dialCode.value) {
318
383
  validation.errors.value.push(`Le champ ${locales.indicatifLabel} est requis.`)
@@ -331,9 +396,10 @@
331
396
  phoneNumber.value = ''
332
397
  emit('update:modelValue', '')
333
398
 
334
- // Clear dial code and restore defaults
335
- dialCode.value = ''
336
- emit('update:selectedDialCode', '')
399
+ // Reset dial code : France par défaut si indicatif activé, sinon vide
400
+ const defaultDialCode = props.withCountryCode ? getFranceDefault() : ''
401
+ dialCode.value = defaultDialCode
402
+ emit('update:selectedDialCode', defaultDialCode)
337
403
  counter.value = 10
338
404
  phoneMask.value = '## ## ## ## ##'
339
405
 
@@ -402,7 +468,7 @@
402
468
  ref="phoneField"
403
469
  :model-value="phoneNumber"
404
470
  :counter="counter"
405
- :counter-value="(value: string) => value.replace(/\s/g, '').length"
471
+ :counter-value="(value: string) => value.replace(/\D/g, '').length"
406
472
  :label="withCountryCode ? locales.phoneNumberWithoutCountryLabel : locales.label"
407
473
  :required="required"
408
474
  :aria-required="required"
@@ -410,6 +476,7 @@
410
476
  :error-messages="errors"
411
477
  :warning-messages="warnings"
412
478
  :success-messages="successes"
479
+ :disable-error-handling="shouldDisableErrorHandling"
413
480
  :variant="outlined ? 'outlined' : 'underlined'"
414
481
  :display-asterisk="displayAsterisk"
415
482
  :readonly="readonly"
@@ -425,24 +492,26 @@
425
492
  color="primary"
426
493
  type="tel"
427
494
  @blur="validateInputOnBlur"
495
+ @update:model-value="handlePhoneModelUpdate"
428
496
  @input="handlePhoneInput"
497
+ @keydown="handlePhoneKeydown"
429
498
  >
430
499
  <template #append-inner>
431
500
  <div class="d-flex align-center">
432
501
  <SyIcon
433
- v-if="hasError && !shouldDisableErrorHandling"
502
+ v-if="hasError"
434
503
  color="error"
435
504
  :icon="mdiInformation"
436
505
  decorative
437
506
  />
438
507
  <SyIcon
439
- v-else-if="hasWarning && !shouldDisableErrorHandling"
508
+ v-else-if="hasWarning"
440
509
  color="warning"
441
510
  :icon="mdiAlertOutline"
442
511
  decorative
443
512
  />
444
513
  <SyIcon
445
- v-else-if="hasSuccess && !shouldDisableErrorHandling"
514
+ v-else-if="hasSuccess"
446
515
  color="success"
447
516
  :icon="mdiCheck"
448
517
  decorative