@cnamts/synapse 1.0.0 → 1.0.2

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 (533) hide show
  1. package/README.md +1 -1
  2. package/dist/DateFilter-YWOTbfeL.js +98 -0
  3. package/dist/NumberFilter-DMmMgALM.js +121 -0
  4. package/dist/PeriodFilter-Bok5BHcn.js +112 -0
  5. package/dist/SelectFilter-BKud2WhN.js +136 -0
  6. package/dist/TextFilter-DvMf2thH.js +114 -0
  7. package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
  8. package/dist/components/Accordion/Accordion.d.ts +2 -1
  9. package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
  10. package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
  11. package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
  12. package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
  13. package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
  14. package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
  15. package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
  16. package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
  17. package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
  18. package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
  19. package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
  20. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
  21. package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
  22. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  23. package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
  24. package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
  25. package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
  26. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
  27. package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
  28. package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
  29. package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
  30. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4295 -0
  31. package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +158 -104
  32. package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +35 -27
  33. package/dist/components/DatePicker/composables/index.d.ts +17 -0
  34. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
  35. package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
  36. package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
  37. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
  38. package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
  39. package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
  40. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
  41. package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
  42. package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
  43. package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
  44. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +19 -0
  45. package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
  46. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +31 -0
  47. package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
  48. package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
  49. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +12 -0
  50. package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
  51. package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
  52. package/dist/components/DatePicker/constants/messages.d.ts +29 -0
  53. package/dist/components/DatePicker/types.d.ts +13 -0
  54. package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
  55. package/dist/components/DownloadBtn/AccessibiliteItems.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/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
  66. package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
  67. package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
  68. package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
  69. package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
  70. package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
  71. package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
  72. package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
  73. package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
  74. package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
  75. package/dist/components/NirField/NirField.d.ts +7 -3
  76. package/dist/components/NirField/nirValidation.d.ts +1 -1
  77. package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
  78. package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
  79. package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
  80. package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
  81. package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
  82. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  83. package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
  84. package/dist/components/PeriodField/PeriodField.d.ts +219 -41
  85. package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
  86. package/dist/components/PhoneField/PhoneField.d.ts +2 -2
  87. package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
  88. package/dist/components/RangeField/RangeField.d.ts +2 -0
  89. package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
  90. package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
  91. package/dist/components/SearchListField/SearchListField.d.ts +9 -0
  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 +2 -0
  98. package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
  99. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +652 -0
  100. package/dist/components/Tables/SyTable/SyTable.d.ts +671 -0
  101. package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
  102. package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
  103. package/dist/components/Tables/common/TableHeader.d.ts +15 -0
  104. package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
  105. package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
  106. package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
  107. package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
  108. package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
  109. package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
  110. package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
  111. package/dist/components/Tables/common/filters/locales.d.ts +4 -0
  112. package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
  113. package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
  114. package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
  115. package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
  116. package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
  117. package/dist/components/Tables/common/formatters.d.ts +17 -0
  118. package/dist/components/Tables/common/locales.d.ts +28 -0
  119. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
  120. package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
  121. package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
  122. package/dist/components/Tables/common/tableFilterUtils.d.ts +3 -0
  123. package/dist/components/Tables/common/tableStorageUtils.d.ts +69 -0
  124. package/dist/components/Tables/common/tableUtils.d.ts +79 -0
  125. package/dist/components/Tables/common/types.d.ts +91 -0
  126. package/dist/components/Tables/common/usePagination.d.ts +22 -0
  127. package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
  128. package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
  129. package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
  130. package/dist/components/Tables/common/useTableItems.d.ts +24 -0
  131. package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
  132. package/dist/components/Tables/index.d.ts +2 -0
  133. package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
  134. package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
  135. package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
  136. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
  137. package/dist/components/index.d.ts +9 -5
  138. package/dist/design-system-v3.js +102 -11944
  139. package/dist/design-system-v3.umd.cjs +22 -4
  140. package/dist/designTokens/index.d.ts +3 -1
  141. package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
  142. package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
  143. package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
  144. package/dist/designTokens/utils/index.d.ts +2 -1
  145. package/dist/main-Cx8qG7YR.js +16344 -0
  146. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
  147. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
  148. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
  149. package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
  150. package/dist/style.css +1 -1
  151. package/dist/utils/rules/isRequired/index.d.ts +1 -1
  152. package/dist/vite-env.d.ts +12 -0
  153. package/package.json +3 -3
  154. package/src/assets/_spacers.scss +37 -1
  155. package/src/assets/_typography.scss +158 -0
  156. package/src/assets/settings.scss +7 -0
  157. package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
  158. package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
  159. package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
  160. package/src/components/Accordion/Accordion.vue +48 -76
  161. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
  162. package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
  163. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
  164. package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
  165. package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
  166. package/src/components/Accordion/composables/useAccordionState.ts +59 -0
  167. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
  168. package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
  169. package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
  170. package/src/components/ChipList/AccessibiliteItems.ts +1 -1
  171. package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
  172. package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
  173. package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
  174. package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
  175. package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
  176. package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
  177. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
  178. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
  179. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
  180. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
  181. package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
  182. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
  183. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
  184. package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
  185. package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
  186. package/src/components/Customs/SySelect/SySelect.vue +292 -39
  187. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +234 -2
  188. package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
  189. package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
  190. package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
  191. package/src/components/DataList/AccessibiliteItems.ts +1 -1
  192. package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
  193. package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
  194. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
  195. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1307 -0
  196. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +769 -204
  197. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
  198. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +943 -0
  199. package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
  200. package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +356 -519
  201. package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +435 -89
  202. package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
  203. package/src/components/DatePicker/{tests → DatePicker/tests}/DatePicker.spec.ts +0 -14
  204. package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
  205. package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
  206. package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
  207. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +320 -0
  208. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
  209. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
  210. package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +10 -7
  211. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +1111 -0
  212. package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
  213. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +782 -0
  214. package/src/components/DatePicker/composables/index.ts +24 -0
  215. package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
  216. package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
  217. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
  218. package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
  219. package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
  220. package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
  221. package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
  222. package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
  223. package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
  224. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
  225. package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
  226. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +456 -0
  227. package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
  228. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +125 -0
  229. package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
  230. package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
  231. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
  232. package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
  233. package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
  234. package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
  235. package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
  236. package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
  237. package/src/components/DatePicker/composables/useDateRangeInput.ts +378 -0
  238. package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
  239. package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
  240. package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
  241. package/src/components/DatePicker/composables/useDisplayedDateString.ts +70 -0
  242. package/src/components/DatePicker/composables/useIconState.ts +53 -0
  243. package/src/components/DatePicker/composables/useInputBlurHandler.ts +165 -0
  244. package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
  245. package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
  246. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +187 -0
  247. package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
  248. package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
  249. package/src/components/DatePicker/constants/messages.ts +50 -0
  250. package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
  251. package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
  252. package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
  253. package/src/components/DatePicker/types.ts +15 -0
  254. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
  255. package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
  256. package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
  257. package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
  258. package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
  259. package/src/components/ErrorPage/ErrorPage.vue +12 -6
  260. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  261. package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
  262. package/src/components/FileList/AccessibiliteItems.ts +1 -1
  263. package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
  264. package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
  265. package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
  266. package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
  267. package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
  268. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
  269. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
  270. package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
  271. package/src/components/FooterBar/FooterBar.vue +2 -1
  272. package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
  273. package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
  274. package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
  275. package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
  276. package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
  277. package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
  278. package/src/components/Logo/Accessibilite.stories.ts +4 -0
  279. package/src/components/Logo/AccessibiliteItems.ts +1 -1
  280. package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
  281. package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
  282. package/src/components/NirField/AccessibiliteItems.ts +1 -1
  283. package/src/components/NirField/NirField.mdx +22 -9
  284. package/src/components/NirField/NirField.stories.ts +26 -2
  285. package/src/components/NirField/NirField.vue +209 -22
  286. package/src/components/NirField/nirValidation.ts +17 -3
  287. package/src/components/NirField/tests/NirField.spec.ts +2 -2
  288. package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
  289. package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
  290. package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
  291. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
  292. package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
  293. package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
  294. package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
  295. package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
  296. package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
  297. package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
  298. package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
  299. package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
  300. package/src/components/PasswordField/PasswordField.stories.ts +4 -0
  301. package/src/components/PasswordField/PasswordField.vue +3 -0
  302. package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
  303. package/src/components/PeriodField/PeriodField.vue +15 -1
  304. package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
  305. package/src/components/PhoneField/PhoneField.stories.ts +15 -15
  306. package/src/components/PhoneField/PhoneField.vue +1 -1
  307. package/src/components/RangeField/AccessibiliteItems.ts +1 -1
  308. package/src/components/RangeField/RangeField.stories.ts +9 -0
  309. package/src/components/RangeField/RangeField.vue +4 -0
  310. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
  311. package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
  312. package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
  313. package/src/components/SearchListField/SearchListField.vue +5 -0
  314. package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
  315. package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
  316. package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
  317. package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
  318. package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
  319. package/src/components/SyTextArea/SyTextArea.vue +3 -0
  320. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
  321. package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
  322. package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
  323. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +700 -0
  324. package/src/components/Tables/SyServerTable/SyServerTable.mdx +170 -0
  325. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +4354 -0
  326. package/src/components/Tables/SyServerTable/SyServerTable.vue +391 -0
  327. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +702 -0
  328. package/src/components/Tables/SyTable/FilterRules.stories.ts +418 -0
  329. package/src/components/Tables/SyTable/SyTable.mdx +139 -0
  330. package/src/components/Tables/SyTable/SyTable.stories.ts +2754 -0
  331. package/src/components/Tables/SyTable/SyTable.vue +397 -0
  332. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +707 -0
  333. package/src/components/Tables/common/SyTableFilter.vue +289 -0
  334. package/src/components/Tables/common/SyTablePagination.vue +375 -0
  335. package/src/components/Tables/common/TableHeader.vue +205 -0
  336. package/src/components/Tables/common/constants/StateEnum.ts +6 -0
  337. package/src/components/Tables/common/filters/DateFilter.vue +140 -0
  338. package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
  339. package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
  340. package/src/components/Tables/common/filters/SelectFilter.vue +235 -0
  341. package/src/components/Tables/common/filters/TextFilter.vue +191 -0
  342. package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
  343. package/src/components/Tables/common/filters/locales.ts +4 -0
  344. package/src/components/Tables/common/filters/logics/date.ts +12 -0
  345. package/src/components/Tables/common/filters/logics/number.ts +48 -0
  346. package/src/components/Tables/common/filters/logics/period.ts +25 -0
  347. package/src/components/Tables/common/filters/logics/select.ts +27 -0
  348. package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
  349. package/src/components/Tables/common/filters/logics/text.ts +62 -0
  350. package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
  351. package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
  352. package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
  353. package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
  354. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
  355. package/src/components/Tables/common/formatters.ts +72 -0
  356. package/src/components/Tables/common/locales.ts +31 -0
  357. package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
  358. package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
  359. package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
  360. package/src/components/Tables/common/tableFilterUtils.ts +75 -0
  361. package/src/components/Tables/common/tableStorageUtils.ts +127 -0
  362. package/src/components/Tables/common/tableStyles.scss +80 -0
  363. package/src/components/Tables/common/tableUtils.ts +102 -0
  364. package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
  365. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
  366. package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
  367. package/src/components/Tables/common/tests/resize.spec.ts +161 -0
  368. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +92 -0
  369. package/src/components/Tables/common/tests/tableUtils.spec.ts +228 -0
  370. package/src/components/Tables/common/types.ts +92 -0
  371. package/src/components/Tables/common/usePagination.ts +83 -0
  372. package/src/components/Tables/common/useTableCheckbox.ts +58 -0
  373. package/src/components/Tables/common/useTableFilter.ts +19 -0
  374. package/src/components/Tables/common/useTableHeaders.ts +88 -0
  375. package/src/components/Tables/common/useTableItems.ts +87 -0
  376. package/src/components/Tables/common/useTableOptions.ts +93 -0
  377. package/src/components/Tables/index.ts +3 -0
  378. package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
  379. package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
  380. package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
  381. package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
  382. package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
  383. package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
  384. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
  385. package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
  386. package/src/components/index.ts +9 -5
  387. package/src/composables/date/useDateFormatDayjs.ts +8 -3
  388. package/src/composables/date/useDateInitializationDayjs.ts +28 -36
  389. package/src/composables/rules/useFieldValidation.ts +1 -2
  390. package/src/designTokens/index.ts +4 -0
  391. package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
  392. package/src/designTokens/tokens/pa/paFonts.ts +140 -0
  393. package/src/designTokens/utils/createFontVariables.ts +143 -0
  394. package/src/designTokens/utils/index.ts +2 -1
  395. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
  396. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
  397. package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
  398. package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
  399. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
  400. package/src/stories/Accessibilite/Introduction.mdx +258 -18
  401. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
  402. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
  403. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
  404. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
  405. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
  406. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
  407. package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
  408. package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
  409. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
  410. package/src/stories/Demarrer/Accueil.stories.ts +32 -8
  411. package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
  412. package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
  413. package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
  414. package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
  415. package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
  416. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
  417. package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
  418. package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
  419. package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
  420. package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
  421. package/src/stories/GuideDuDev/Theme.mdx +41 -0
  422. package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
  423. package/src/utils/rules/isRequired/index.ts +2 -1
  424. package/src/vite-env.d.ts +12 -0
  425. package/src/vuetifyConfig.ts +10 -3
  426. package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  427. package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
  428. package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
  429. package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  430. package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
  431. package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  432. package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  433. package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  434. package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
  435. package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
  436. package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
  437. package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
  438. package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  439. package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
  440. package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  441. package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  442. package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  443. package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
  444. package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
  445. package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
  446. package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
  447. package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  448. package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  449. package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  450. package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
  451. package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  452. package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
  453. package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  454. package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  455. package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
  456. package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
  457. package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
  458. package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
  459. package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
  460. package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
  461. package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
  462. package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
  463. package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
  464. package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
  465. package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
  466. package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
  467. package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
  468. package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
  469. package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
  470. package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
  471. package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
  472. package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
  473. package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
  474. package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
  475. package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
  476. package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
  477. package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
  478. package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
  479. package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
  480. package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
  481. package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
  482. package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
  483. package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
  484. package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
  485. package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
  486. package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
  487. package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
  488. package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
  489. package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
  490. package/src/components/DatePicker/DatePicker.mdx +0 -222
  491. package/src/components/DatePicker/DateTextInput.vue +0 -504
  492. package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
  493. package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
  494. package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
  495. package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
  496. package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
  497. package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
  498. package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
  499. package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
  500. package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
  501. package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
  502. package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
  503. package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
  504. package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
  505. package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
  506. package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
  507. package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  508. package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
  509. package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
  510. package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
  511. package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
  512. package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
  513. package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
  514. package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
  515. package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
  516. package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
  517. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
  518. package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
  519. package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
  520. package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
  521. package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
  522. package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
  523. package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
  524. package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
  525. package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
  526. package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
  527. package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
  528. package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
  529. package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
  530. package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
  531. package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
  532. package/src/stories/DesignTokens/ThemePA.mdx +0 -35
  533. /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
@@ -34,6 +34,14 @@ const meta: Meta<typeof SySelect> = {
34
34
  control: 'boolean',
35
35
  description: 'Permet de vider la sélection',
36
36
  },
37
+ multiple: {
38
+ control: 'boolean',
39
+ description: 'Permet la sélection multiple d\'options',
40
+ },
41
+ chips: {
42
+ control: 'boolean',
43
+ description: 'Affiche les options sélectionnées sous forme de chips',
44
+ },
37
45
  hideMessages: {
38
46
  control: 'boolean',
39
47
  description: 'Masque les messages d\'erreur',
@@ -228,6 +236,158 @@ const items = [
228
236
  },
229
237
  }
230
238
 
239
+ export const MultipleSelection: Story = {
240
+ parameters: {
241
+ docs: {
242
+ description: {
243
+ story: 'Exemple de sélection multiple avec SySelect. Les options dans le menu déroulant sont affichées avec des cases à cocher pour faciliter la sélection multiple.',
244
+ },
245
+ },
246
+ sourceCode: [
247
+ {
248
+ name: 'Template',
249
+ code: `
250
+ <template>
251
+ <SySelect
252
+ v-model="selectedOptions"
253
+ :items="options"
254
+ label="Options"
255
+ multiple
256
+ />
257
+ <div class="mt-4">
258
+ Options sélectionnées: {{ selectedOptions }}
259
+ </div>
260
+ </template>
261
+ `,
262
+ },
263
+ {
264
+ name: 'Script',
265
+ code: `
266
+ <script setup lang="ts">
267
+ import { ref } from 'vue'
268
+ import SySelect from '@cnamts/synapse'
269
+
270
+ const selectedOptions = ref([])
271
+ const options = [
272
+ { text: 'Option 1', value: '1' },
273
+ { text: 'Option 2', value: '2' },
274
+ { text: 'Option 3', value: '3' },
275
+ { text: 'Option 4', value: '4' },
276
+ ]
277
+ </script>
278
+ `,
279
+ },
280
+ ],
281
+ },
282
+ args: {
283
+ 'items': [
284
+ { text: 'Option 1', value: '1' },
285
+ { text: 'Option 2', value: '2' },
286
+ { text: 'Option 3', value: '3' },
287
+ { text: 'Option 4', value: '4' },
288
+ ],
289
+ 'label': 'Sélection multiple',
290
+ 'multiple': true,
291
+ 'clearable': true,
292
+ 'onUpdate:modelValue': fn(),
293
+ },
294
+ render: (args) => {
295
+ return {
296
+ components: { SySelect },
297
+ setup() {
298
+ const selectedOptions = ref([])
299
+
300
+ return { args, selectedOptions }
301
+ },
302
+ template: `
303
+ <div class="pa-4">
304
+ <SySelect
305
+ v-model="selectedOptions"
306
+ v-bind="args"
307
+ />
308
+ <div class="mt-4">
309
+ Options sélectionnées: {{ selectedOptions }}
310
+ </div>
311
+ </div>
312
+ `,
313
+ }
314
+ },
315
+ }
316
+
317
+ export const ChipsDisplay: Story = {
318
+ parameters: {
319
+ docs: {
320
+ description: {
321
+ story: 'Exemple de sélection multiple avec affichage en chips. Les options sélectionnées sont affichées sous forme de chips dans le champ, et les options dans le menu déroulant sont affichées avec des cases à cocher.',
322
+ },
323
+ },
324
+ sourceCode: [
325
+ {
326
+ name: 'Template',
327
+ code: `
328
+ <template>
329
+ <SySelect
330
+ v-model="selectedOptions"
331
+ :items="options"
332
+ label="Options"
333
+ multiple
334
+ chips
335
+ />
336
+ </template>
337
+ `,
338
+ },
339
+ {
340
+ name: 'Script',
341
+ code: `
342
+ <script setup lang="ts">
343
+ import { ref } from 'vue'
344
+ import SySelect from '@cnamts/synapse'
345
+
346
+ const selectedOptions = ref([])
347
+ const options = [
348
+ { text: 'Option 1', value: '1' },
349
+ { text: 'Option 2', value: '2' },
350
+ { text: 'Option 3', value: '3' },
351
+ { text: 'Option 4', value: '4' },
352
+ ]
353
+ </script>
354
+ `,
355
+ },
356
+ ],
357
+ },
358
+ args: {
359
+ 'items': [
360
+ { text: 'Option 1', value: '1' },
361
+ { text: 'Option 2', value: '2' },
362
+ { text: 'Option 3', value: '3' },
363
+ { text: 'Option 4', value: '4' },
364
+ ],
365
+ 'label': 'Sélection avec chips',
366
+ 'multiple': true,
367
+ 'chips': true,
368
+ 'clearable': true,
369
+ 'onUpdate:modelValue': fn(),
370
+ },
371
+ render: (args) => {
372
+ return {
373
+ components: { SySelect },
374
+ setup() {
375
+ const selectedOptions = ref([])
376
+
377
+ return { args, selectedOptions }
378
+ },
379
+ template: `
380
+ <div class="pa-4">
381
+ <SySelect
382
+ v-model="selectedOptions"
383
+ v-bind="args"
384
+ />
385
+ </div>
386
+ `,
387
+ }
388
+ },
389
+ }
390
+
231
391
  export const withCustomError: Story = {
232
392
  parameters: {
233
393
  sourceCode: [
@@ -1,16 +1,27 @@
1
1
  <script setup lang="ts">
2
+ // Prevent display-asterisk from being passed to the DOM
3
+ defineOptions({
4
+ inheritAttrs: false,
5
+ })
2
6
  import { mdiInformation, mdiMenuDown, mdiCloseCircle } from '@mdi/js'
3
- import { ref, watch, onMounted, onUnmounted, computed, type PropType } from 'vue'
7
+ import { ref, watch, onMounted, onUnmounted, computed, nextTick, type PropType } from 'vue'
4
8
  import type { VTextField } from 'vuetify/components'
9
+ import { VChip, VCheckbox } from 'vuetify/components'
5
10
  import { locales } from './locales'
6
11
 
7
12
  export type ItemType = {
8
13
  [key: string]: unknown
9
14
  }
10
15
 
16
+ export type SelectItemValueType = Record<string, unknown> | string | number | null | undefined
17
+ export type SelectItemArrayType = Array<Record<string, unknown> | string | number>
18
+
19
+ // Définition des props avec typage correct pour modelValue
11
20
  const props = defineProps({
12
21
  modelValue: {
13
- type: [Object, String, Number],
22
+ // En Vue, on ne peut pas mettre null directement comme type
23
+ // On utilise PropType pour définir le type complet incluant null
24
+ type: [Object, String, Number, Array] as PropType<Record<string, unknown> | string | number | null | SelectItemArrayType>,
14
25
  default: null,
15
26
  },
16
27
  items: {
@@ -67,7 +78,7 @@
67
78
  },
68
79
  bgColor: {
69
80
  type: String,
70
- default: undefined,
81
+ default: 'white',
71
82
  },
72
83
  readonly: {
73
84
  type: Boolean,
@@ -85,12 +96,21 @@
85
96
  type: String,
86
97
  default: 'undefined',
87
98
  },
99
+ multiple: {
100
+ type: Boolean,
101
+ default: false,
102
+ },
103
+ chips: {
104
+ type: Boolean,
105
+ default: false,
106
+ },
88
107
  })
89
108
 
90
109
  const emit = defineEmits(['update:modelValue'])
91
110
 
92
111
  const isOpen = ref(false)
93
- const selectedItem = ref<Record<string, unknown > | string | number | null | undefined>(props.modelValue)
112
+ // Initialize selectedItem with props.modelValue or empty array for multiple mode
113
+ const selectedItem = ref<SelectItemValueType | SelectItemArrayType>(props.modelValue)
94
114
  const hasError = ref(false)
95
115
 
96
116
  const labelWidth = ref(0)
@@ -101,7 +121,16 @@
101
121
  isOpen.value = !isOpen.value
102
122
  if (isOpen.value) updateListPosition()
103
123
  }
104
- const closeList = () => {
124
+ const closeList = (event?: Event) => {
125
+ // Check if the click is inside the dropdown list
126
+ const target = event?.target as HTMLElement
127
+ const listElement = document.querySelector('.v-list')
128
+
129
+ // In multiple selection mode, don't close the dropdown when clicking on list items
130
+ if (props.multiple && listElement && listElement.contains(target)) {
131
+ return
132
+ }
133
+
105
134
  isOpen.value = false
106
135
  }
107
136
  const inputId = ref(`sy-select-${Math.random().toString(36).substring(7)}`)
@@ -119,21 +148,78 @@
119
148
  }
120
149
  }
121
150
 
122
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- This is a generic type
123
- const selectItem = (item: any) => {
151
+ const selectItem = (item: ItemType | null, event?: Event) => {
152
+ // Stop event propagation to prevent click-outside from triggering
153
+ event?.stopPropagation()
154
+
124
155
  if (item === null) {
125
- selectedItem.value = null
126
- emit('update:modelValue', null)
156
+ selectedItem.value = props.multiple ? [] : null
157
+ emit('update:modelValue', props.multiple ? [] : null)
158
+ isOpen.value = false
159
+ return
160
+ }
161
+
162
+ // Handle default option in multiple mode
163
+ if (props.multiple && isDefaultOption(item)) {
164
+ // Clicking the default option in multiple mode clears all selections
165
+ selectedItem.value = []
166
+ emit('update:modelValue', [])
167
+ isOpen.value = false
168
+ return
127
169
  }
128
- else if (props.returnObject) {
129
- selectedItem.value = item
130
- emit('update:modelValue', item)
170
+
171
+ if (props.multiple) {
172
+ // Initialize as empty array if not already an array
173
+ if (!Array.isArray(selectedItem.value)) {
174
+ selectedItem.value = []
175
+ }
176
+
177
+ const selectedArray = selectedItem.value as SelectItemArrayType
178
+ let valueToCheck: unknown
179
+ let valueToStore: Record<string, unknown> | string | number
180
+
181
+ if (props.returnObject) {
182
+ valueToCheck = item[props.valueKey]
183
+ valueToStore = item
184
+ }
185
+ else {
186
+ valueToCheck = item[props.valueKey]
187
+ valueToStore = item[props.valueKey] as string | number | Record<string, unknown>
188
+ }
189
+
190
+ // Check if item is already selected
191
+ const index = selectedArray.findIndex((selected) => {
192
+ if (props.returnObject) {
193
+ return selected[props.valueKey] === valueToCheck
194
+ }
195
+ return selected === valueToCheck
196
+ })
197
+
198
+ // Toggle selection
199
+ if (index > -1) {
200
+ selectedArray.splice(index, 1)
201
+ }
202
+ else {
203
+ selectedArray.push(valueToStore)
204
+ }
205
+
206
+ emit('update:modelValue', [...selectedArray])
207
+ // Keep dropdown open for multiple selection
208
+ isOpen.value = true
131
209
  }
132
210
  else {
133
- selectedItem.value = item[props.valueKey]
134
- emit('update:modelValue', item[props.valueKey])
211
+ // Single selection mode
212
+ if (props.returnObject) {
213
+ selectedItem.value = item
214
+ emit('update:modelValue', item)
215
+ }
216
+ else {
217
+ selectedItem.value = item[props.valueKey] as SelectItemValueType
218
+ emit('update:modelValue', item[props.valueKey] as SelectItemValueType)
219
+ }
220
+ // Close dropdown for single selection
221
+ isOpen.value = false
135
222
  }
136
- isOpen.value = false
137
223
  }
138
224
 
139
225
  const getItemText = (item: unknown) => {
@@ -142,18 +228,50 @@
142
228
  }
143
229
 
144
230
  const selectedItemText = computed(() => {
145
- if (selectedItem.value) {
231
+ // If chips are enabled and we have selected items, return empty string to hide text
232
+ if (hasChips.value) {
233
+ return ''
234
+ }
235
+
236
+ // For multiple mode, show default option text when nothing is selected
237
+ if (props.multiple) {
238
+ if (!selectedItem.value || (Array.isArray(selectedItem.value) && selectedItem.value.length === 0)) {
239
+ // Find default option and return its text
240
+ const defaultOption = props.items.find(item => isDefaultOption(item))
241
+ if (defaultOption) {
242
+ return defaultOption[props.textKey] as string
243
+ }
244
+ return ''
245
+ }
246
+
247
+ // For multiple selection with items selected, return an array of text values
248
+ const selectedArray = selectedItem.value as SelectItemArrayType
249
+
250
+ return selectedArray.map((selected) => {
251
+ if (props.returnObject) {
252
+ return selected?.[props.textKey]
253
+ }
254
+ return props.items.find((item: ItemType) => item[props.valueKey] === selected)?.[props.textKey] || ''
255
+ }).join(', ')
256
+ }
257
+ else {
258
+ // For single selection
259
+ if (!selectedItem.value) return ''
260
+
146
261
  if (props.returnObject) {
147
- return (selectedItem.value as Record<string, unknown>)[props.textKey]
262
+ return selectedItem.value[props.textKey]
148
263
  }
149
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
150
- return props.items.find((item: any) => item[props.valueKey] === selectedItem.value)?.[props.textKey]
264
+
265
+ return props.items.find(item => item[props.valueKey] === selectedItem.value)?.[props.textKey] || ''
151
266
  }
152
- return ''
153
267
  })
154
268
 
155
269
  const isShouldDisplayAsterisk = computed(() => {
156
- return props.displayAsterisk && props.required
270
+ return props.required && props.displayAsterisk
271
+ })
272
+
273
+ const hasChips = computed(() => {
274
+ return props.chips && props.multiple && Array.isArray(selectedItem.value) && selectedItem.value.length > 0
157
275
  })
158
276
 
159
277
  const labelWithAsterisk = computed(() => {
@@ -170,7 +288,7 @@
170
288
  })
171
289
 
172
290
  const isRequired = computed(() => {
173
- if (props.disableErrorHandling || props.hideMessages) return false
291
+ if (props.disableErrorHandling) return false
174
292
  if (props.readonly) return
175
293
  return (props.required || props.errorMessages.length > 0) && !selectedItem.value
176
294
  })
@@ -188,6 +306,103 @@
188
306
  selectedItem.value = newValue
189
307
  })
190
308
 
309
+ // Function to check if an item is the default option (e.g., "-choisir-")
310
+ const isDefaultOption = (item: ItemType) => {
311
+ // Check if this is the first item and has a placeholder-like text
312
+ const itemText = item[props.textKey] as string
313
+ return itemText.includes('-') && (itemText.includes('choisir') || itemText.includes('sélectionner'))
314
+ }
315
+
316
+ // Function to check if an item is selected
317
+ const isItemSelected = (item: ItemType) => {
318
+ // For default option in multiple mode, show as selected when no other items are selected
319
+ if (props.multiple && isDefaultOption(item)) {
320
+ return !selectedItem.value || (Array.isArray(selectedItem.value) && selectedItem.value.length === 0)
321
+ }
322
+
323
+ if (!selectedItem.value) return false
324
+
325
+ if (props.multiple && Array.isArray(selectedItem.value)) {
326
+ return selectedItem.value.some((selected) => {
327
+ if (props.returnObject) {
328
+ return selected?.[props.valueKey] === item?.[props.valueKey]
329
+ }
330
+ return selected === item?.[props.valueKey]
331
+ })
332
+ }
333
+ else {
334
+ if (props.returnObject) {
335
+ return Boolean(selectedItem.value && selectedItem.value[props.valueKey] === item?.[props.valueKey])
336
+ }
337
+ return selectedItem.value === item?.[props.valueKey]
338
+ }
339
+ }
340
+
341
+ // Function to safely get an item for chip operations
342
+ const safeChipItem = (item: unknown): Record<string, unknown> | string | number => {
343
+ // Handle null/undefined case
344
+ if (item === null || item === undefined) return ''
345
+
346
+ // If it's already a valid type, return it
347
+ if (typeof item === 'string' || typeof item === 'number') return item
348
+
349
+ // If it's an object, return it as a Record
350
+ if (typeof item === 'object') return item as Record<string, unknown>
351
+
352
+ // Default case - convert to string
353
+ return String(item)
354
+ }
355
+
356
+ // Function to get text for a chip
357
+ const getChipText = (item: unknown) => {
358
+ const safeItem = safeChipItem(item)
359
+
360
+ if (typeof safeItem === 'object') {
361
+ // Handle object type
362
+ return (safeItem as Record<string, unknown>)[props.textKey] as string
363
+ }
364
+ // Handle primitive types
365
+ return props.items.find((i: ItemType) => i[props.valueKey] === safeItem)?.[props.textKey] as string || ''
366
+ }
367
+
368
+ // Function to remove a chip
369
+ const removeChip = (item: unknown) => {
370
+ if (!Array.isArray(selectedItem.value)) return
371
+
372
+ const selectedArray = [...selectedItem.value] // Create a copy to avoid mutation issues
373
+ const safeItem = safeChipItem(item)
374
+ let index: number
375
+
376
+ if (props.returnObject) {
377
+ // Handle object type
378
+ const itemValue = typeof safeItem === 'object'
379
+ ? (safeItem as Record<string, unknown>)[props.valueKey]
380
+ : safeItem
381
+ index = selectedArray.findIndex(selected =>
382
+ (selected as Record<string, unknown>)[props.valueKey] === itemValue)
383
+ }
384
+ else {
385
+ index = selectedArray.indexOf(safeItem)
386
+ }
387
+
388
+ if (index > -1) {
389
+ selectedArray.splice(index, 1)
390
+ // Ensure reactivity by creating a completely new array
391
+ const updatedArray = [...selectedArray]
392
+
393
+ // Update the local state first
394
+ selectedItem.value = updatedArray
395
+
396
+ // Then emit the update to the parent
397
+ emit('update:modelValue', updatedArray)
398
+
399
+ // Force update of the UI
400
+ nextTick(() => {
401
+ updateListPosition()
402
+ })
403
+ }
404
+ }
405
+
191
406
  watch([isOpen, hasError], ([newIsOpen, newHasError]) => {
192
407
  if (!newIsOpen) {
193
408
  if (props.disableErrorHandling || props.readonly) {
@@ -219,12 +434,17 @@
219
434
  window.addEventListener('scroll', updateListPosition, true)
220
435
  window.addEventListener('resize', updateListPosition)
221
436
 
222
- if (props.hideMessages) {
223
- const message = document.querySelector('.v-input__details')
224
- if (message) {
225
- message.classList.add('d-sr-only')
437
+ // Use nextTick to ensure the DOM is fully rendered
438
+ nextTick(() => {
439
+ if (input.value && input.value.$el) {
440
+ // Find the input element
441
+ const inputElement = input.value.$el.querySelector('input')
442
+ if (inputElement) {
443
+ // Remove the aria-describedby attribute
444
+ inputElement.removeAttribute('aria-describedby')
445
+ }
226
446
  }
227
- }
447
+ })
228
448
  })
229
449
 
230
450
  onUnmounted(() => {
@@ -245,26 +465,45 @@
245
465
  ref="input"
246
466
  v-model="selectedItemText"
247
467
  v-click-outside="closeList"
248
- :title="labelWithAsterisk"
468
+ :title="$attrs['aria-label'] || labelWithAsterisk"
249
469
  color="primary"
250
470
  tabindex="0"
251
471
  :disabled="disabled"
252
472
  :label="labelWithAsterisk"
253
- :aria-label="labelWithAsterisk"
473
+ :aria-label="$attrs['aria-label'] || labelWithAsterisk"
254
474
  :error-messages="props.disableErrorHandling ? [] : errorMessages"
255
475
  :variant="outlined ? 'outlined' : 'underlined'"
256
- :rules="isRequired && !props.disableErrorHandling && !props.hideMessages ? ['Le champ est requis.'] : []"
257
- :display-asterisk="displayAsterisk"
476
+ :rules="isRequired && !props.disableErrorHandling ? ['Le champ est requis.'] : []"
258
477
  :bg-color="props.bgColor"
259
478
  :density="props.density"
479
+ :active="hasChips || isOpen"
260
480
  readonly
481
+ :hide-details="props.hideMessages"
261
482
  class="sy-select"
262
483
  :width="calculatedWidth"
263
484
  :style="hasError ? { minWidth: `${labelWidth + 18}px`} : {minWidth: `${labelWidth}px`}"
485
+ v-bind="Object.fromEntries(Object.entries($attrs).filter(([key]) => key !== 'display-asterisk'))"
264
486
  @click="toggleMenu"
265
487
  @keydown.enter.prevent="toggleMenu"
266
488
  @keydown.space.prevent="toggleMenu"
267
489
  >
490
+ <template
491
+ v-if="hasChips"
492
+ #default
493
+ >
494
+ <div class="d-flex flex-wrap gap-1">
495
+ <VChip
496
+ v-for="item in selectedItem"
497
+ :key="props.returnObject ? item[props.valueKey] : item"
498
+ size="small"
499
+ class="ma-1"
500
+ closable
501
+ @click:close="removeChip(item)"
502
+ >
503
+ {{ getChipText(item) }}
504
+ </VChip>
505
+ </div>
506
+ </template>
268
507
  <template #append-inner>
269
508
  <VIcon
270
509
  v-if="hasError"
@@ -299,6 +538,7 @@
299
538
  }"
300
539
  bg-color="white"
301
540
  @keydown.esc.prevent="isOpen = false"
541
+ @click.stop
302
542
  >
303
543
  <VListItem
304
544
  v-for="(item, index) in formattedItems"
@@ -306,16 +546,24 @@
306
546
  :ref="'options-' + index"
307
547
  role="option"
308
548
  class="v-list-item"
309
- :aria-selected="props.returnObject
310
- ? selectedItem && selectedItem[props.valueKey] === item[props.valueKey]
311
- : selectedItem === item[props.valueKey]"
549
+ :aria-selected="isItemSelected(item)"
312
550
  :tabindex="index + 1"
313
- :class="{ active: props.returnObject
314
- ? selectedItem && selectedItem[props.valueKey] === item[props.valueKey]
315
- : selectedItem === item[props.valueKey]
316
- }"
317
- @click="selectItem(item)"
551
+ :class="{ active: isItemSelected(item) }"
552
+ @click.stop="(event) => selectItem(item, event)"
318
553
  >
554
+ <template
555
+ v-if="props.multiple && !isDefaultOption(item)"
556
+ #prepend
557
+ >
558
+ <VCheckbox
559
+ :model-value="isItemSelected(item)"
560
+ density="compact"
561
+ hide-details
562
+ color="primary"
563
+ class="mt-0 pt-0 mr-1"
564
+ @click.stop="(event) => selectItem(item, event)"
565
+ />
566
+ </template>
319
567
  <VListItemTitle>
320
568
  {{ getItemText(item) }}
321
569
  </VListItemTitle>
@@ -376,8 +624,13 @@
376
624
  opacity: var(--v-medium-emphasis-opacity) !important;
377
625
  }
378
626
 
627
+ .v-chip {
628
+ margin: 2px;
629
+ }
630
+
379
631
  :deep(.v-field__input) {
380
632
  color: tokens.$grey-darken-20;
633
+ cursor: pointer;
381
634
  }
382
635
 
383
636
  .hidden-label {