@cnamts/synapse 0.0.16-alpha → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/dist/DateFilter-BmRuzQ9Z.js +98 -0
  2. package/dist/NumberFilter-CnIPDHqx.js +121 -0
  3. package/dist/PeriodFilter-CZwZ8CnQ.js +112 -0
  4. package/dist/SelectFilter-Cj-GW2Cc.js +97 -0
  5. package/dist/TextFilter-DTxZHJwX.js +114 -0
  6. package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
  7. package/dist/components/Accordion/Accordion.d.ts +39 -0
  8. package/dist/components/Accordion/config.d.ts +9 -0
  9. package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
  10. package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
  11. package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
  12. package/dist/components/ChipList/ChipList.d.ts +1 -1
  13. package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
  14. package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
  15. package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
  16. package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
  17. package/dist/components/CopyBtn/CopyBtn.d.ts +2 -0
  18. package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
  19. package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
  20. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +12 -0
  21. package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
  22. package/dist/components/Customs/SySelect/SySelect.d.ts +43 -16
  23. package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
  24. package/dist/components/Customs/SyTextField/SyTextField.d.ts +17 -17
  25. package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
  26. package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
  27. package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
  28. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4162 -0
  29. package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +176 -136
  30. package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +48 -42
  31. package/dist/components/DatePicker/composables/index.d.ts +15 -0
  32. package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
  33. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
  34. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
  35. package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
  36. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
  37. package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
  38. package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
  39. package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
  40. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +16 -0
  41. package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
  42. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +30 -0
  43. package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
  44. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
  45. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +9 -0
  46. package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
  47. package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
  48. package/dist/components/DatePicker/constants/messages.d.ts +29 -0
  49. package/dist/components/DatePicker/types.d.ts +13 -0
  50. package/dist/components/DiacriticPicker/DiacriticPicker.d.ts +27 -0
  51. package/dist/components/DiacriticPicker/config.d.ts +14 -0
  52. package/dist/components/DiacriticPicker/locales.d.ts +6 -0
  53. package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
  54. package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
  55. package/dist/components/DownloadBtn/DownloadBtn.d.ts +1 -1
  56. package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
  57. package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
  58. package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
  59. package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
  60. package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
  61. package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
  62. package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
  63. package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
  64. package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
  65. package/dist/components/FooterBar/FooterBar.d.ts +1 -1
  66. package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
  67. package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
  68. package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
  69. package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
  70. package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
  71. package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
  72. package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
  73. package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
  74. package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
  75. package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
  76. package/dist/components/NirField/NirField.d.ts +34 -32
  77. package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
  78. package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
  79. package/dist/components/NotificationBar/NotificationBar.d.ts +1 -1
  80. package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
  81. package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
  82. package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
  83. package/dist/components/PasswordField/PasswordField.d.ts +1 -1
  84. package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
  85. package/dist/components/PeriodField/PeriodField.d.ts +235 -101
  86. package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
  87. package/dist/components/PhoneField/PhoneField.d.ts +1 -0
  88. package/dist/components/PhoneField/tests/types.d.ts +18 -0
  89. package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
  90. package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
  91. package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
  92. package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
  93. package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
  94. package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
  95. package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
  96. package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
  97. package/dist/components/SyTextArea/SyTextArea.d.ts +900 -0
  98. package/dist/components/SyTextArea/locales.d.ts +3 -0
  99. package/dist/components/SyTextArea/trimStartOnUpdate.d.ts +1 -0
  100. package/dist/components/SyTextArea/useTextActions.d.ts +13 -0
  101. package/dist/components/SyTextArea/wrapText.d.ts +1 -0
  102. package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
  103. package/dist/components/TableToolbar/TableToolbar.d.ts +10 -4
  104. package/dist/components/TableToolbar/config.d.ts +3 -2
  105. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +647 -0
  106. package/dist/components/Tables/SyTable/SyTable.d.ts +666 -0
  107. package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
  108. package/dist/components/Tables/common/TableHeader.d.ts +33 -0
  109. package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
  110. package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
  111. package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
  112. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
  113. package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
  114. package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
  115. package/dist/components/Tables/common/formatters.d.ts +17 -0
  116. package/dist/components/Tables/common/locales.d.ts +7 -0
  117. package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
  118. package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -0
  119. package/dist/components/Tables/common/tableStorageUtils.d.ts +29 -0
  120. package/dist/components/Tables/common/tableUtils.d.ts +42 -0
  121. package/dist/components/Tables/common/types.d.ts +80 -0
  122. package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
  123. package/dist/components/Tables/index.d.ts +2 -0
  124. package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
  125. package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
  126. package/dist/components/index.d.ts +6 -1
  127. package/dist/composables/date/useHolidayDay.d.ts +36 -0
  128. package/dist/design-system-v3.js +100 -11271
  129. package/dist/design-system-v3.umd.cjs +22 -1
  130. package/dist/designTokens/index.d.ts +3 -1
  131. package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
  132. package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
  133. package/dist/designTokens/tokens/pa/paLightTheme.d.ts +1 -32
  134. package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
  135. package/dist/designTokens/utils/index.d.ts +2 -1
  136. package/dist/main-WDqeoGM-.js +14788 -0
  137. package/dist/style.css +1 -1
  138. package/dist/utils/rules/index.d.ts +1 -0
  139. package/dist/utils/rules/isHolidayDay/index.d.ts +11 -0
  140. package/dist/utils/rules/isHolidayDay/locales.d.ts +2 -0
  141. package/dist/utils/rules/isRequired/index.d.ts +1 -1
  142. package/dist/vite-env.d.ts +12 -0
  143. package/package.json +2 -1
  144. package/src/assets/_spacers.scss +37 -1
  145. package/src/assets/_typography.scss +158 -0
  146. package/src/assets/settings.scss +19 -0
  147. package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
  148. package/src/components/Accordion/Accordion.mdx +69 -0
  149. package/src/components/Accordion/Accordion.stories.ts +262 -0
  150. package/src/components/Accordion/Accordion.vue +319 -0
  151. package/src/components/Accordion/config.ts +9 -0
  152. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +155 -0
  153. package/src/components/Accordion/tests/accordion.spec.ts +492 -0
  154. package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
  155. package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
  156. package/src/components/ChipList/AccessibiliteItems.ts +1 -1
  157. package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
  158. package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
  159. package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
  160. package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
  161. package/src/components/CopyBtn/CopyBtn.stories.ts +189 -0
  162. package/src/components/CopyBtn/CopyBtn.vue +29 -1
  163. package/src/components/CopyBtn/tests/CopyBtn.spec.ts +102 -0
  164. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
  165. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
  166. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +155 -1
  167. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +97 -14
  168. package/src/components/Customs/SyInputSelect/tests/SyInputSelect.spec.ts +386 -106
  169. package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
  170. package/src/components/Customs/SySelect/SySelect.stories.ts +121 -2
  171. package/src/components/Customs/SySelect/SySelect.vue +25 -6
  172. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +294 -3
  173. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
  174. package/src/components/Customs/SyTextField/SyTextField.vue +5 -3
  175. package/src/components/DataList/AccessibiliteItems.ts +1 -1
  176. package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
  177. package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
  178. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
  179. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1097 -0
  180. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +497 -180
  181. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +941 -0
  182. package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
  183. package/src/components/DatePicker/{tests → DatePicker}/DatePicker.spec.ts +1 -1
  184. package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +115 -400
  185. package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +314 -83
  186. package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
  187. package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
  188. package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
  189. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +310 -0
  190. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
  191. package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +8 -7
  192. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +916 -0
  193. package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
  194. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +572 -0
  195. package/src/components/DatePicker/composables/index.ts +22 -0
  196. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
  197. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
  198. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
  199. package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
  200. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
  201. package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
  202. package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
  203. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
  204. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
  205. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
  206. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +278 -0
  207. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
  208. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +100 -0
  209. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
  210. package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
  211. package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
  212. package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
  213. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
  214. package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
  215. package/src/components/DatePicker/composables/useDateRangeInput.ts +375 -0
  216. package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
  217. package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
  218. package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
  219. package/src/components/DatePicker/composables/useDisplayedDateString.ts +58 -0
  220. package/src/components/DatePicker/composables/useIconState.ts +53 -0
  221. package/src/components/DatePicker/composables/useInputBlurHandler.ts +101 -0
  222. package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
  223. package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
  224. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +89 -0
  225. package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
  226. package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
  227. package/src/components/DatePicker/constants/messages.ts +50 -0
  228. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  229. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
  230. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
  231. package/src/components/DatePicker/playground/DatePickerHolidayRule.vue +130 -0
  232. package/src/components/DatePicker/types.ts +15 -0
  233. package/src/components/DiacriticPicker/DiacriticPicker.mdx +104 -0
  234. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +447 -0
  235. package/src/components/DiacriticPicker/DiacriticPicker.vue +262 -0
  236. package/src/components/DiacriticPicker/config.ts +15 -0
  237. package/src/components/DiacriticPicker/locales.ts +6 -0
  238. package/src/components/DiacriticPicker/tests/DiatriticPicker.spec.ts +132 -0
  239. package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
  240. package/src/components/DialogBox/DialogBox.vue +1 -3
  241. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
  242. package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
  243. package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
  244. package/src/components/FileList/AccessibiliteItems.ts +1 -1
  245. package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
  246. package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
  247. package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
  248. package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
  249. package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
  250. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
  251. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
  252. package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
  253. package/src/components/FooterBar/FooterBar.vue +2 -1
  254. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
  255. package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
  256. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
  257. package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
  258. package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
  259. package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
  260. package/src/components/Logo/Accessibilite.stories.ts +4 -0
  261. package/src/components/Logo/AccessibiliteItems.ts +1 -1
  262. package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
  263. package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
  264. package/src/components/NirField/AccessibiliteItems.ts +1 -1
  265. package/src/components/NirField/NirField.stories.ts +172 -0
  266. package/src/components/NirField/NirField.vue +15 -7
  267. package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
  268. package/src/components/NotificationBar/Accessibilite.stories.ts +1 -1
  269. package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
  270. package/src/components/NotificationBar/NotificationBar.stories.ts +14 -0
  271. package/src/components/NotificationBar/NotificationBar.vue +26 -3
  272. package/src/components/NotificationBar/{options.ts → config.ts} +0 -1
  273. package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
  274. package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
  275. package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
  276. package/src/components/PaginatedTable/PaginatedTable.vue +51 -24
  277. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
  278. package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
  279. package/src/components/PasswordField/PasswordField.stories.ts +4 -3
  280. package/src/components/PasswordField/PasswordField.vue +26 -18
  281. package/src/components/PasswordField/tests/PasswordField.spec.ts +1 -10
  282. package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
  283. package/src/components/PeriodField/PeriodField.vue +13 -1
  284. package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
  285. package/src/components/PhoneField/PhoneField.stories.ts +143 -0
  286. package/src/components/PhoneField/PhoneField.vue +88 -30
  287. package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +266 -0
  288. package/src/components/PhoneField/tests/PhoneField.spec.ts +248 -28
  289. package/src/components/PhoneField/tests/types.d.ts +19 -0
  290. package/src/components/RangeField/AccessibiliteItems.ts +1 -1
  291. package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
  292. package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
  293. package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
  294. package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
  295. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
  296. package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
  297. package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
  298. package/src/components/SyTextArea/SyTextArea.mdx +17 -0
  299. package/src/components/SyTextArea/SyTextArea.stories.ts +322 -0
  300. package/src/components/SyTextArea/SyTextArea.vue +113 -0
  301. package/src/components/SyTextArea/locales.ts +3 -0
  302. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +194 -0
  303. package/src/components/SyTextArea/trimStartOnUpdate.ts +12 -0
  304. package/src/components/SyTextArea/useTextActions.ts +52 -0
  305. package/src/components/SyTextArea/wrapText.ts +42 -0
  306. package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
  307. package/src/components/TableToolbar/TableToolbar.mdx +86 -1
  308. package/src/components/TableToolbar/TableToolbar.stories.ts +509 -107
  309. package/src/components/TableToolbar/TableToolbar.vue +25 -8
  310. package/src/components/TableToolbar/config.ts +3 -2
  311. package/src/components/TableToolbar/tests/__snapshots__/TableToolbar.spec.ts.snap +35 -12
  312. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +83 -0
  313. package/src/components/Tables/SyServerTable/SyServerTable.mdx +160 -0
  314. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +2887 -0
  315. package/src/components/Tables/SyServerTable/SyServerTable.vue +302 -0
  316. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +450 -0
  317. package/src/components/Tables/SyServerTable/tests/__snapshots__/SyServerTable.spec.ts.snap +521 -0
  318. package/src/components/Tables/SyTable/FilterRules.stories.ts +235 -0
  319. package/src/components/Tables/SyTable/SyTable.mdx +129 -0
  320. package/src/components/Tables/SyTable/SyTable.stories.ts +1966 -0
  321. package/src/components/Tables/SyTable/SyTable.vue +317 -0
  322. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +345 -0
  323. package/src/components/Tables/SyTable/tests/__snapshots__/SyTable.spec.ts.snap +521 -0
  324. package/src/components/Tables/common/SyTableFilter.vue +342 -0
  325. package/src/components/Tables/common/TableHeader.vue +221 -0
  326. package/src/components/Tables/common/constants/StateEnum.ts +6 -0
  327. package/src/components/Tables/common/filters/DateFilter.vue +140 -0
  328. package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
  329. package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
  330. package/src/components/Tables/common/filters/SelectFilter.vue +126 -0
  331. package/src/components/Tables/common/filters/TextFilter.vue +191 -0
  332. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
  333. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
  334. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
  335. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
  336. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
  337. package/src/components/Tables/common/formatters.ts +72 -0
  338. package/src/components/Tables/common/locales.ts +7 -0
  339. package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
  340. package/src/components/Tables/common/tableFilterUtils.ts +327 -0
  341. package/src/components/Tables/common/tableStorageUtils.ts +102 -0
  342. package/src/components/Tables/common/tableStyles.scss +54 -0
  343. package/src/components/Tables/common/tableUtils.ts +115 -0
  344. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
  345. package/src/components/Tables/common/tests/resize.spec.ts +161 -0
  346. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +106 -0
  347. package/src/components/Tables/common/tests/tableUtils.spec.ts +272 -0
  348. package/src/components/Tables/common/types.ts +81 -0
  349. package/src/components/Tables/common/useTableFilter.ts +19 -0
  350. package/src/components/Tables/index.ts +3 -0
  351. package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
  352. package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
  353. package/src/components/index.ts +6 -1
  354. package/src/composables/date/useDateFormatDayjs.ts +8 -3
  355. package/src/composables/date/useDateInitializationDayjs.ts +28 -36
  356. package/src/composables/date/useHolidayDay.ts +98 -0
  357. package/src/composables/rules/useFieldValidation.ts +16 -4
  358. package/src/composables/validation/useValidation.ts +2 -1
  359. package/src/designTokens/index.ts +4 -0
  360. package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
  361. package/src/designTokens/tokens/pa/paFonts.ts +140 -0
  362. package/src/designTokens/tokens/pa/paLightTheme.ts +10 -41
  363. package/src/designTokens/utils/createFontVariables.ts +143 -0
  364. package/src/designTokens/utils/index.ts +2 -1
  365. package/src/stories/Accessibilite/Introduction.mdx +5 -2
  366. package/src/stories/Demarrer/Accueil.stories.ts +12 -3
  367. package/src/stories/DesignTokens/colors.stories.ts +100 -41
  368. package/src/utils/rules/index.ts +1 -0
  369. package/src/utils/rules/isHolidayDay/IsHolidayDay.mdx +52 -0
  370. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +129 -0
  371. package/src/utils/rules/isHolidayDay/index.ts +36 -0
  372. package/src/utils/rules/isHolidayDay/locales.ts +5 -0
  373. package/src/utils/rules/isHolidayDay/tests/isHolidayDay.spec.ts +35 -0
  374. package/src/utils/rules/isRequired/index.ts +2 -1
  375. package/src/vite-env.d.ts +12 -0
  376. package/src/vuetifyConfig.ts +10 -3
  377. package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  378. package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
  379. package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
  380. package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  381. package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
  382. package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  383. package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  384. package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  385. package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  386. package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
  387. package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
  388. package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
  389. package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  390. package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
  391. package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  392. package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  393. package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  394. package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
  395. package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
  396. package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
  397. package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
  398. package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  399. package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  400. package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  401. package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  402. package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  403. package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
  404. package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  405. package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  406. package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
  407. package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
  408. package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
  409. package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
  410. package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  411. package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  412. package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
  413. package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
  414. package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
  415. package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
  416. package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
  417. package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
  418. package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  419. package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
  420. package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
  421. package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
  422. package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  423. package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
  424. package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
  425. package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  426. package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
  427. package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  428. package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
  429. package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
  430. package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
  431. package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
  432. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
  433. package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
  434. package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
  435. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
  436. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
  437. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
  438. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
  439. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
  440. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
  441. package/src/components/DatePicker/DatePicker.mdx +0 -222
  442. package/src/components/DatePicker/DateTextInput.vue +0 -493
  443. package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
  444. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
  445. package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
  446. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
  447. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
  448. package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
  449. package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
  450. package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
  451. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
  452. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
  453. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
  454. package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
  455. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
  456. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
  457. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
  458. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  459. package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
  460. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
  461. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
  462. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
  463. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
  464. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
  465. package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
  466. package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
  467. package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
  468. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
  469. package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
  470. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
  471. package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
  472. package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
  473. package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
  474. package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
  475. package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
  476. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
  477. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
  478. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
  479. package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  480. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
  481. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
  482. /package/dist/components/NotificationBar/{options.d.ts → config.d.ts} +0 -0
@@ -61,6 +61,10 @@
61
61
  type: Boolean,
62
62
  default: false,
63
63
  },
64
+ density: {
65
+ type: String as PropType<'default' | 'comfortable' | 'compact' | undefined>,
66
+ default: 'default',
67
+ },
64
68
  bgColor: {
65
69
  type: String,
66
70
  default: undefined,
@@ -73,6 +77,14 @@
73
77
  type: Boolean,
74
78
  default: false,
75
79
  },
80
+ hideMessages: {
81
+ type: Boolean,
82
+ default: false,
83
+ },
84
+ width: {
85
+ type: String,
86
+ default: 'undefined',
87
+ },
76
88
  })
77
89
 
78
90
  const emit = defineEmits(['update:modelValue'])
@@ -100,9 +112,8 @@
100
112
  const rect = input.value.$el.getBoundingClientRect()
101
113
  listStyles.value = {
102
114
  position: 'fixed',
103
- top: `${rect.bottom}px`,
115
+ top: props.density === 'compact' ? `${rect.bottom + 22}px` : `${rect.bottom}px`,
104
116
  left: `${rect.left}px`,
105
- width: `${rect.width}px`,
106
117
  zIndex: '999',
107
118
  }
108
119
  }
@@ -159,21 +170,27 @@
159
170
  })
160
171
 
161
172
  const isRequired = computed(() => {
162
- // Si la gestion des erreurs est désactivée, on ne considère jamais le champ comme requis
163
173
  if (props.disableErrorHandling) return false
174
+ if (props.readonly) return
164
175
  return (props.required || props.errorMessages.length > 0) && !selectedItem.value
165
176
  })
166
177
 
167
178
  const input = ref<InstanceType<typeof VTextField> | null>(null)
168
179
 
180
+ const calculatedWidth = computed(() => {
181
+ const baseWidth = props.width ? Number(props.width) : 0
182
+ const selectedText = typeof selectedItemText.value === 'string' ? selectedItemText.value : ''
183
+ const clearableAdjustment = props.clearable ? 4 : 0
184
+ return `${baseWidth + selectedText.length * (4 + clearableAdjustment)}px`
185
+ })
186
+
169
187
  watch(() => props.modelValue, (newValue) => {
170
188
  selectedItem.value = newValue
171
189
  })
172
190
 
173
191
  watch([isOpen, hasError], ([newIsOpen, newHasError]) => {
174
192
  if (!newIsOpen) {
175
- // Si la gestion des erreurs est désactivée, on ne met jamais hasError à true
176
- if (props.disableErrorHandling) {
193
+ if (props.disableErrorHandling || props.readonly) {
177
194
  hasError.value = false
178
195
  }
179
196
  else {
@@ -186,7 +203,6 @@
186
203
  })
187
204
 
188
205
  watch(() => props.errorMessages, (newValue) => {
189
- // Si la gestion des erreurs est désactivée, on ne met jamais hasError à true
190
206
  if (!props.disableErrorHandling) {
191
207
  hasError.value = newValue.length > 0
192
208
  }
@@ -233,8 +249,11 @@
233
249
  :rules="isRequired && !props.disableErrorHandling ? ['Le champ est requis.'] : []"
234
250
  :display-asterisk="displayAsterisk"
235
251
  :bg-color="props.bgColor"
252
+ :density="props.density"
236
253
  readonly
254
+ :hide-details="props.hideMessages"
237
255
  class="sy-select"
256
+ :width="calculatedWidth"
238
257
  :style="hasError ? { minWidth: `${labelWidth + 18}px`} : {minWidth: `${labelWidth}px`}"
239
258
  @click="toggleMenu"
240
259
  @keydown.enter.prevent="toggleMenu"
@@ -50,12 +50,14 @@ describe('SySelect.vue', () => {
50
50
  it('renders error messages when provided', () => {
51
51
  const errorMessages = ['Error 1']
52
52
  const wrapper = mount(SySelect, {
53
- props: { errorMessages },
53
+ props: { errorMessages, hideMessages: false },
54
54
  global: {
55
55
  plugins: [vuetify],
56
56
  },
57
57
  })
58
- expect(wrapper.find('.v-messages__message').text()).toContain('Error 1')
58
+ const message = wrapper.find('.v-messages__message')
59
+ expect(message.exists()).toBe(true)
60
+ expect(message.text()).toContain('Error 1')
59
61
  })
60
62
 
61
63
  it('does not render error messages when not provided', () => {
@@ -192,14 +194,303 @@ describe('SySelect.vue', () => {
192
194
  expect(wrapper.emitted()['update:modelValue'][0]).toEqual(['1'])
193
195
  })
194
196
 
195
- it('closes the menu when v-click-outside directive is called', async () => {
197
+ it('ferme le menu avec la méthode closeList', async () => {
196
198
  const wrapper = mount(SySelect, {
199
+ props: {
200
+ items: [{ text: 'Option 1', value: '1' }],
201
+ },
202
+ global: {
203
+ plugins: [vuetify],
204
+ },
205
+ })
206
+
207
+ await wrapper.find('.sy-select').trigger('click')
208
+ await wrapper.vm.$nextTick()
209
+
210
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
211
+ const instance = wrapper.vm as any
212
+ expect(instance.isOpen).toBe(true)
213
+
214
+ instance.closeList()
215
+ await wrapper.vm.$nextTick()
216
+
217
+ expect(instance.isOpen).toBe(false)
218
+ })
219
+
220
+ describe('Affichage de l\'astérisque', () => {
221
+ it('affiche l\'astérisque quand displayAsterisk et required sont true', () => {
222
+ const wrapper = mount(SySelect, {
223
+ props: {
224
+ displayAsterisk: true,
225
+ required: true,
226
+ label: 'Test Label',
227
+ },
228
+ global: {
229
+ plugins: [vuetify],
230
+ },
231
+ })
232
+
233
+ const html = wrapper.html()
234
+ expect(html).toContain('Test Label *')
235
+ })
236
+
237
+ it('n\'affiche pas l\'astérisque quand displayAsterisk est false', () => {
238
+ const wrapper = mount(SySelect, {
239
+ props: {
240
+ displayAsterisk: false,
241
+ required: true,
242
+ label: 'Test Label',
243
+ },
244
+ global: {
245
+ plugins: [vuetify],
246
+ },
247
+ })
248
+
249
+ const html = wrapper.html()
250
+ expect(html).not.toContain('Test Label *')
251
+ expect(html).toContain('Test Label')
252
+ })
253
+
254
+ it('n\'affiche pas l\'astérisque quand required est false', () => {
255
+ const wrapper = mount(SySelect, {
256
+ props: {
257
+ displayAsterisk: true,
258
+ required: false,
259
+ label: 'Test Label',
260
+ },
261
+ global: {
262
+ plugins: [vuetify],
263
+ },
264
+ })
265
+
266
+ const html = wrapper.html()
267
+ expect(html).not.toContain('Test Label *')
268
+ expect(html).toContain('Test Label')
269
+ })
270
+ })
271
+
272
+ describe('Mode readonly', () => {
273
+ it('empêche l\'ouverture du menu en mode readonly', async () => {
274
+ const wrapper = mount(SySelect, {
275
+ props: {
276
+ readonly: true,
277
+ items: [{ text: 'Option 1', value: '1' }],
278
+ },
279
+ global: {
280
+ plugins: [vuetify],
281
+ },
282
+ })
283
+
284
+ await wrapper.find('.sy-select').trigger('click')
285
+ await wrapper.vm.$nextTick()
286
+
287
+ expect(wrapper.find('.v-list').exists()).toBe(false)
288
+
289
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
290
+ const instance = wrapper.vm as any
291
+ expect(instance.isOpen).toBe(false)
292
+ })
293
+
294
+ it('affiche correctement le champ en mode readonly', () => {
295
+ const wrapper = mount(SySelect, {
296
+ props: {
297
+ readonly: true,
298
+ modelValue: { text: 'Option 1', value: '1' },
299
+ textKey: 'text',
300
+ returnObject: true,
301
+ },
302
+ global: {
303
+ plugins: [vuetify],
304
+ },
305
+ })
306
+
307
+ expect(wrapper.find('.v-input--readonly').exists()).toBe(true)
308
+
309
+ expect(wrapper.html()).toContain('Option 1')
310
+ })
311
+ })
312
+
313
+ describe('Option clearable', () => {
314
+ it('affiche l\'icône de suppression quand clearable est true et qu\'une valeur est sélectionnée', async () => {
315
+ const wrapper = mount(SySelect, {
316
+ props: {
317
+ clearable: true,
318
+ modelValue: { text: 'Option 1', value: '1' },
319
+ returnObject: true,
320
+ },
321
+ global: {
322
+ plugins: [vuetify],
323
+ },
324
+ })
325
+
326
+ expect(wrapper.find('.sy-select__clear-icon').exists()).toBe(true)
327
+ })
328
+
329
+ it('n\'affiche pas l\'icône de suppression quand clearable est false', () => {
330
+ const wrapper = mount(SySelect, {
331
+ props: {
332
+ clearable: false,
333
+ modelValue: { text: 'Option 1', value: '1' },
334
+ returnObject: true,
335
+ },
336
+ global: {
337
+ plugins: [vuetify],
338
+ },
339
+ })
340
+
341
+ expect(wrapper.find('.v-icon.mdi-close-circle').exists()).toBe(false)
342
+ })
343
+
344
+ it('efface la valeur sélectionnée avec la méthode selectItem', async () => {
345
+ const wrapper = mount(SySelect, {
346
+ props: {
347
+ clearable: true,
348
+ modelValue: { text: 'Option 1', value: '1' },
349
+ returnObject: true,
350
+ },
351
+ global: {
352
+ plugins: [vuetify],
353
+ },
354
+ })
355
+
356
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
357
+ const instance = wrapper.vm as any
358
+ instance.selectItem(null)
359
+ await wrapper.vm.$nextTick()
360
+
361
+ expect(wrapper.emitted()['update:modelValue'][0]).toEqual([null])
362
+ })
363
+ })
364
+
365
+ describe('Validation', () => {
366
+ it('affiche une erreur pour un champ requis sans valeur', async () => {
367
+ const wrapper = mount(SySelect, {
368
+ props: {
369
+ required: true,
370
+ label: 'Test Label',
371
+ modelValue: undefined,
372
+ },
373
+ global: {
374
+ plugins: [vuetify],
375
+ },
376
+ })
377
+
378
+ await wrapper.find('.sy-select').trigger('click')
379
+ await wrapper.vm.$nextTick()
380
+ await wrapper.find('.sy-select').trigger('click')
381
+ await wrapper.vm.$nextTick()
382
+
383
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
384
+ const instance = wrapper.vm as any
385
+ expect(instance.hasError).toBe(true)
386
+ })
387
+
388
+ it('n\'affiche pas d\'erreur pour un champ requis avec une valeur', async () => {
389
+ const wrapper = mount(SySelect, {
390
+ props: {
391
+ required: true,
392
+ label: 'Test Label',
393
+ modelValue: { text: 'Option 1', value: '1' },
394
+ returnObject: true,
395
+ },
396
+ global: {
397
+ plugins: [vuetify],
398
+ },
399
+ })
400
+
401
+ await wrapper.find('.sy-select').trigger('click')
402
+ await wrapper.vm.$nextTick()
403
+ await wrapper.find('.sy-select').trigger('click')
404
+ await wrapper.vm.$nextTick()
405
+
406
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
407
+ const instance = wrapper.vm as any
408
+ expect(instance.hasError).toBe(false)
409
+ })
410
+
411
+ it('n\'affiche pas d\'erreur quand disableErrorHandling est true', async () => {
412
+ const wrapper = mount(SySelect, {
413
+ props: {
414
+ required: true,
415
+ label: 'Test Label',
416
+ modelValue: undefined,
417
+ disableErrorHandling: true,
418
+ },
419
+ global: {
420
+ plugins: [vuetify],
421
+ },
422
+ })
423
+
424
+ await wrapper.find('.sy-select').trigger('click')
425
+ await wrapper.vm.$nextTick()
426
+ await wrapper.find('.sy-select').trigger('click')
427
+ await wrapper.vm.$nextTick()
428
+
429
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
430
+ const instance = wrapper.vm as any
431
+ expect(instance.hasError).toBe(false)
432
+ })
433
+ })
434
+
435
+ describe('Comportement du menu', () => {
436
+ it('ouvre et ferme le menu au clic', async () => {
437
+ const wrapper = mount(SySelect, {
438
+ props: {
439
+ items: [{ text: 'Option 1', value: '1' }],
440
+ },
441
+ global: {
442
+ plugins: [vuetify],
443
+ },
444
+ })
445
+
446
+ expect(wrapper.find('.v-list').exists()).toBe(false)
447
+
448
+ await wrapper.find('.sy-select').trigger('click')
449
+ await wrapper.vm.$nextTick()
450
+
451
+ expect(wrapper.find('.v-list').exists()).toBe(true)
452
+
453
+ await wrapper.find('.sy-select').trigger('click')
454
+ await wrapper.vm.$nextTick()
455
+
456
+ expect(wrapper.find('.v-list').exists()).toBe(false)
457
+ })
458
+
459
+ it('met à jour isOpen quand on ouvre le menu', async () => {
460
+ const wrapper = mount(SySelect, {
461
+ props: {
462
+ items: [{ text: 'Option 1', value: '1' }],
463
+ },
464
+ global: {
465
+ plugins: [vuetify],
466
+ },
467
+ })
468
+
469
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
470
+ const instance = wrapper.vm as any
471
+ expect(instance.isOpen).toBe(false)
472
+
473
+ await wrapper.find('.sy-select').trigger('click')
474
+ await wrapper.vm.$nextTick()
475
+
476
+ expect(instance.isOpen).toBe(true)
477
+ })
478
+ })
479
+
480
+ it('ferme le menu après un clic sur le sélecteur', async () => {
481
+ const wrapper = mount(SySelect, {
482
+ props: {
483
+ items: [{ text: 'Option 1', value: '1' }],
484
+ },
197
485
  global: {
198
486
  plugins: [vuetify],
199
487
  },
200
488
  })
489
+
201
490
  await wrapper.find('.sy-select').trigger('click')
491
+ await wrapper.vm.$nextTick()
202
492
  expect(wrapper.find('.v-list').exists()).toBe(true)
493
+
203
494
  await wrapper.find('.sy-select').trigger('mouseleave')
204
495
  await wrapper.find('.sy-select').trigger('click')
205
496
  await wrapper.vm.$nextTick()
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -212,7 +212,11 @@
212
212
  )
213
213
 
214
214
  const validateField = (value: string | number | null) => {
215
- // Si le champ est vide et non requis, on ne fait pas de validation
215
+ if (props.readonly) {
216
+ validation.clearValidation()
217
+ return true
218
+ }
219
+
216
220
  if (!value && !props.required) {
217
221
  validation.clearValidation()
218
222
  return true
@@ -247,7 +251,6 @@
247
251
  }
248
252
  })
249
253
 
250
- // Computed pour l'affichage des états
251
254
  const hasError = computed(() => validation.hasError.value)
252
255
  const hasWarning = computed(() => validation.hasWarning.value)
253
256
  const hasSuccess = computed(() => validation.hasSuccess.value)
@@ -256,7 +259,6 @@
256
259
  const warnings = computed(() => validation.warnings.value)
257
260
  const successes = computed(() => validation.successes.value)
258
261
 
259
- // Computed pour les icônes
260
262
  const appendInnerIconColor = computed(() => {
261
263
  if (props.appendInnerIcon === 'error') return 'error'
262
264
  if (props.appendInnerIcon === 'success') return 'success'
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -1,4 +1,4 @@
1
- import { ExpertiseLevelEnum } from './constants/ExpertiseLevelEnum'
1
+ import { ExpertiseLevelEnum } from '@/common/constants/ExpertiseLevelEnum'
2
2
 
3
3
  export const AccessibiliteItemsIndeterminate = [
4
4
  {
@@ -0,0 +1,212 @@
1
+ import {Meta, Canvas, Controls, Source} from '@storybook/blocks';
2
+ import * as DatePickerStories from "./ComplexDatePicker.stories.ts";
3
+
4
+ <Meta of={DatePickerStories}/>
5
+
6
+ # DatePicker - Mode combiné
7
+
8
+ Le DatePicker en mode combiné (`useCombinedMode: true`) permet d'utiliser à la fois le calendrier interactif et la saisie manuelle avec formatage automatique.
9
+
10
+ ## Description
11
+
12
+ Cette variante du DatePicker est particulièrement utile lorsque :
13
+ - Vous souhaitez offrir plusieurs méthodes de saisie de date aux utilisateurs
14
+ - Vous avez besoin du formatage automatique intelligent des dates pendant la saisie
15
+ - Vous voulez conserver l'interaction avec le calendrier pour une meilleure expérience utilisateur
16
+
17
+ Le formatage automatique intelligent ajoute les séparateurs (/, -, etc.) pendant la saisie en fonction du format spécifié.
18
+
19
+ <Canvas story={{height: '550px'}} of={DatePickerStories.Default}/>
20
+
21
+ ## Propriétés spécifiques
22
+
23
+ Propriétés applicables pour le mode combiné :
24
+
25
+ <Controls of={DatePickerStories.Default}/>
26
+
27
+
28
+ # Fonctionnalités spécifiques
29
+
30
+ ## Formatage automatique des dates
31
+
32
+ Le composant ComplexDatePicker offre un formatage automatique intelligent des dates pendant la saisie. Les séparateurs sont automatiquement ajoutés lors de la saisie des chiffres, en s'adaptant au format spécifié (DD/MM/YYYY, MM/DD/YYYY, YYYY-MM-DD, etc.).
33
+
34
+ <Canvas of={DatePickerStories.AutoFormattingInput}/>
35
+
36
+ ## Désactivation de l'interaction avec le calendrier
37
+
38
+ La propriété `disablePickerInteraction` permet d'utiliser le champ de saisie avec formatage automatique sans que le calendrier n'apparaisse au clic sur l'input ou sur l'icône. Cette option est utile pour les cas où on souhaite uniquement la saisie manuelle.
39
+
40
+ <Canvas of={DatePickerStories.DisablePickerInteraction}/>
41
+
42
+ ## Formats de date personnalisés
43
+
44
+ Le composant supporte différents formats de date et détecte automatiquement le séparateur utilisé dans le format (/, -, ., etc.) pour l'appliquer lors de la saisie.
45
+
46
+ <Canvas of={DatePickerStories.CustomDateFormat}/>
47
+
48
+ ## Mode lecture seule
49
+
50
+ Le composant peut être configuré en mode lecture seule, ce qui empêche toute modification de la valeur.
51
+
52
+ <Canvas of={DatePickerStories.ReadonlyMode}/>
53
+
54
+ ## Plages de dates
55
+
56
+ Le composant permet la sélection de plages de dates avec validation automatique.
57
+
58
+ <Canvas of={DatePickerStories.DateRange}/>
59
+
60
+ ### DatePicker avec période personnalisée
61
+
62
+
63
+ <div
64
+ style={{
65
+ border: '2px solid #FF0000',
66
+ padding: '1rem',
67
+ borderRadius: '4px',
68
+ marginBottom: '1rem',
69
+ }}
70
+ >
71
+ <strong>Note importante</strong>
72
+ <ul>
73
+ <li>La prop <code>period</code> permet de définir une période de dates valides. Les dates en dehors de cette période ne seront pas visibles dans le calendrier.</li>
74
+ <li>Le format de la prop <code>period</code> est <code>MM/DD/YYYY</code>.</li>
75
+ </ul>
76
+ </div>
77
+
78
+ <Canvas of={DatePickerStories.WithCustomPeriod}/>
79
+
80
+ ## Personnalisation des icônes
81
+
82
+ Vous pouvez personnaliser la position de l'icône du calendrier (au début ou à la fin du champ).
83
+
84
+ <Canvas of={DatePickerStories.WithCustomIcons}/>
85
+
86
+ ## Activation par le champ de texte
87
+
88
+ La propriété `textFieldActivator` permet d'ouvrir le calendrier en cliquant n'importe où sur le champ de texte.
89
+
90
+ <Canvas of={DatePickerStories.WithTextFieldActivator}/>
91
+
92
+
93
+ # Validation et règles personnalisées
94
+
95
+ Le composant prend en charge des règles de validation personnalisées pour vérifier les dates saisies.
96
+
97
+ <Canvas of={DatePickerStories.WithValidation}/>
98
+
99
+ ## Formats de retour différents
100
+
101
+ Vous pouvez spécifier un format différent pour la valeur de retour avec la propriété `dateFormatReturn`.
102
+
103
+ <Canvas of={DatePickerStories.WithDateFormatReturn}/>
104
+
105
+ ## Intégration dans un formulaire
106
+
107
+ Le composant s'intègre facilement dans un formulaire avec validation à la soumission.
108
+
109
+ <Canvas of={DatePickerStories.WithFormSubmission}/>
110
+
111
+ # Méthodes exposées
112
+
113
+ Le composant expose plusieurs méthodes qui peuvent être utilisées via une référence :
114
+
115
+ ### validateOnSubmit
116
+ - **Description** : Valide le champ lors de la soumission d'un formulaire
117
+ - **Retour** : `boolean` - Indique si la validation a réussi
118
+
119
+ ### clearValidation
120
+ - **Description** : Efface les messages de validation
121
+
122
+ ### validateDates
123
+ - **Description** : Valide les dates sélectionnées
124
+
125
+ ### openDatePicker
126
+ - **Description** : Ouvre le calendrier programmatiquement
127
+
128
+ ### toggleDatePicker
129
+ - **Description** : Bascule l'état d'ouverture du calendrier
130
+
131
+ ### Exemple d'utilisation
132
+
133
+ <Source
134
+ dark code={`
135
+ <script setup lang="ts">
136
+ import { ref } from 'vue'
137
+ import { DatePicker } from '@cnamts/synapse'
138
+
139
+ const date = ref('')
140
+ const datePicker = ref(null)
141
+
142
+ const submitForm = () => {
143
+ const isValid = datePicker.value.validateOnSubmit()
144
+ if (isValid) {
145
+ // Traitement du formulaire
146
+ }
147
+ }
148
+ </script>
149
+
150
+ <template>
151
+ <form @submit.prevent="submitForm">
152
+ <DatePicker
153
+ ref="datePicker"
154
+ v-model="date"
155
+ placeholder="Date requise"
156
+ format="DD/MM/YYYY"
157
+ useCombinedMode
158
+ required
159
+ />
160
+ <button type="submit">Soumettre</button>
161
+ </form>
162
+ </template>
163
+ `}
164
+ />
165
+
166
+ ### Exemple avec période personnalisée
167
+
168
+ <Source
169
+ dark code={`
170
+ <script setup lang="ts">
171
+ import { ref } from 'vue'
172
+ import { DatePicker } from '@cnamts/synapse'
173
+
174
+ const date = ref('')
175
+ </script>
176
+
177
+ <template>
178
+ <DatePicker
179
+ v-model="date"
180
+ placeholder="Sélectionner une date (1995-2005)"
181
+ format="DD/MM/YYYY"
182
+ useCombinedMode
183
+ :period="{
184
+ min: '01/01/1995',
185
+ max: '31/12/2005'
186
+ }"
187
+ />
188
+ </template>
189
+ `}
190
+ />
191
+
192
+ # Événements
193
+
194
+ Le composant émet plusieurs événements :
195
+
196
+ ### update:modelValue
197
+ - **Payload** : `string | string[]` - La nouvelle valeur du champ
198
+
199
+ ### closed
200
+ - **Description** : Émis lorsque le calendrier est fermé
201
+
202
+ ### focus
203
+ - **Description** : Émis lorsque le champ reçoit le focus
204
+
205
+ ### blur
206
+ - **Description** : Émis lorsque le champ perd le focus
207
+
208
+ ### input
209
+ - **Payload** : `string` - La valeur saisie dans le champ
210
+
211
+ ### date-selected
212
+ - **Payload** : `Date | Date[] | null` - La date ou les dates sélectionnées