@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
@@ -0,0 +1,2754 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { fn } from '@storybook/test'
3
+ import { ref } from 'vue'
4
+ import SyTable from './SyTable.vue'
5
+ import type { DataOptions, FilterType } from '../common/types'
6
+ import type { VDataTable } from 'vuetify/components'
7
+ import dayjs from 'dayjs'
8
+
9
+ const meta = {
10
+ title: 'Composants/Tableaux/SyTable',
11
+ component: SyTable,
12
+ decorators: [
13
+ () => ({
14
+ template: '<div style="padding: 20px;"><story/></div>',
15
+ }),
16
+ ],
17
+ parameters: {
18
+ layout: 'fullscreen',
19
+ },
20
+ argTypes: {
21
+ headers: {
22
+ description: 'Liste des colonnes du tableau (voir : https://vuetifyjs.com/en/api/v-data-table/#props-headers)',
23
+ control: { type: 'object' },
24
+ table: {
25
+ category: 'props',
26
+ },
27
+ },
28
+ items: {
29
+ description: 'Liste des éléments à afficher dans le tableau',
30
+ control: { type: 'object' },
31
+ table: {
32
+ category: 'props',
33
+ defaultValue: {
34
+ summary: '[]',
35
+ },
36
+ },
37
+ },
38
+ density: {
39
+ description: 'Définit la densité du tableau',
40
+ control: { type: 'select' },
41
+ options: ['default', 'comfortable', 'compact'],
42
+ table: {
43
+ category: 'props',
44
+ type: { summary: 'string', detail: `'default' | 'comfortable' | 'compact'` },
45
+ },
46
+ },
47
+ striped: {
48
+ description: 'Affiche les lignes du tableau avec un fond rayé',
49
+ control: { type: 'boolean' },
50
+ table: {
51
+ category: 'props',
52
+ type: { summary: 'boolean' },
53
+ },
54
+ },
55
+ options: {
56
+ description: 'Options de configuration du tableau',
57
+ name: 'v-model:options',
58
+ control: { type: 'object' },
59
+ table: {
60
+ category: 'props',
61
+ type: { summary: 'DataOptions', detail: '{ page: number, itemsPerPage: number, sortBy: SortOptions[], groupBy?: SortOptions[], multiSort?: boolean, mustSort?: boolean, filters?: FilterOption[] }' },
62
+ },
63
+ },
64
+ suffix: {
65
+ description: 'Suffixe permettant de gérer individuellement le stockage des options d\'un tableau d\'une page à l\'autre. Ce prop est obligatoire pour garantir un stockage unique pour chaque tableau.',
66
+ control: { type: 'text' },
67
+ table: {
68
+ category: 'props',
69
+ type: { summary: 'string' },
70
+ },
71
+ required: true,
72
+ },
73
+ resizableColumns: {
74
+ description: 'Permet de redimensionner les colonnes du tableau',
75
+ },
76
+ caption: {
77
+ description: 'Texte de la légende du tableau',
78
+ control: { type: 'text' },
79
+ },
80
+ showFilters: {
81
+ description: 'Affiche les filtres au-dessus du tableau',
82
+ control: { type: 'boolean' },
83
+ },
84
+ enableColumnControls: {
85
+ description: 'Allow the users to re-organize the columns',
86
+ table: {
87
+ defaultValue: {
88
+ summary: 'false',
89
+ },
90
+ type: { summary: 'boolean' },
91
+ category: 'props',
92
+ },
93
+ control: { type: 'boolean' },
94
+ },
95
+ showSelect: {
96
+ description: 'Affiche des cases à cocher pour sélectionner des lignes',
97
+ control: { type: 'boolean' },
98
+ table: {
99
+ category: 'props',
100
+ type: { summary: 'boolean' },
101
+ },
102
+ },
103
+ },
104
+ } satisfies Meta<typeof SyTable & typeof VDataTable>
105
+
106
+ export default meta
107
+
108
+ type Story = StoryObj<typeof meta>
109
+
110
+ export const Default: Story = {
111
+ parameters: {
112
+ sourceCode: [
113
+ {
114
+ name: 'Template',
115
+ code: `
116
+ <template>
117
+ <SyTable
118
+ v-model:options="options"
119
+ :headers="headers"
120
+ :items="items"
121
+ suffix="default-table"
122
+ />
123
+ </template>
124
+ `,
125
+ },
126
+ {
127
+ name: 'Script',
128
+ code: `
129
+ <script setup lang="ts">
130
+ import { ref } from 'vue'
131
+ import { SyTable } from '@cnamts/synapse'
132
+
133
+ const options = ref({
134
+ itemsPerPage: 4,
135
+ })
136
+
137
+ const headers = ref([
138
+ {
139
+ title: 'Nom',
140
+ key: 'lastname',
141
+ },
142
+ {
143
+ title: 'Prénom',
144
+ key: 'firstname',
145
+ },
146
+ {
147
+ title: 'Email',
148
+ value: 'email',
149
+ },
150
+ ])
151
+
152
+ const items = ref([
153
+ {
154
+ firstname: 'Virginie',
155
+ lastname: 'Beauchesne',
156
+ email: 'virginie.beauchesne@example.com',
157
+ },
158
+ {
159
+ firstname: 'Simone',
160
+ lastname: 'Bellefeuille',
161
+ email: 'simone.bellefeuille@example.com',
162
+ },
163
+ {
164
+ firstname: 'Étienne',
165
+ lastname: 'Salois',
166
+ email: 'etienne.salois@example.com',
167
+ },
168
+ {
169
+ firstname: 'Thierry',
170
+ lastname: 'Bobu',
171
+ email: 'thierry.bobu@example.com',
172
+ },
173
+ {
174
+ firstname: 'Bernadette',
175
+ lastname: 'Langelier',
176
+ email: 'bernadette.langelier@exemple.com'
177
+ },
178
+ {
179
+ firstname: 'Agate',
180
+ lastname: 'Roy',
181
+ email: 'agate.roy@exemple.com'
182
+ }
183
+ ])
184
+ </script>
185
+ `,
186
+ },
187
+ ],
188
+ },
189
+ args: {
190
+ 'headers': [
191
+ {
192
+ title: 'Nom',
193
+ key: 'lastname',
194
+ },
195
+ {
196
+ title: 'Prénom',
197
+ key: 'firstname',
198
+ },
199
+ {
200
+ title: 'Email',
201
+ value: 'email',
202
+ },
203
+ ],
204
+ 'items': [
205
+ {
206
+ firstname: 'Virginie',
207
+ lastname: 'Beauchesne',
208
+ email: 'virginie.beauchesne@example.com',
209
+ },
210
+ {
211
+ firstname: 'Simone',
212
+ lastname: 'Bellefeuille',
213
+ email: 'simone.bellefeuille@example.com',
214
+ },
215
+ {
216
+ firstname: 'Étienne',
217
+ lastname: 'Salois',
218
+ email: 'etienne.salois@example.com',
219
+ },
220
+ {
221
+ firstname: 'Thierry',
222
+ lastname: 'Bobu',
223
+ email: 'thierry.bobu@example.com',
224
+ },
225
+ {
226
+ firstname: 'Bernadette',
227
+ lastname: 'Langelier',
228
+ email: 'bernadette.langelier@exemple.com',
229
+ },
230
+ {
231
+ firstname: 'Agate',
232
+ lastname: 'Roy',
233
+ email: 'agate.roy@exemple.com',
234
+ },
235
+ ],
236
+ 'options': {
237
+ itemsPerPage: 4,
238
+ },
239
+ 'caption': '',
240
+ 'suffix': 'default-table',
241
+ 'density': 'default',
242
+ 'striped': false,
243
+ 'onUpdate:options': fn(),
244
+ },
245
+ render: (args) => {
246
+ return {
247
+ components: { SyTable },
248
+ setup() {
249
+ return { args }
250
+ },
251
+ template: `
252
+ <SyTable
253
+ v-model:options="args.options"
254
+ v-bind="args"
255
+ />
256
+ `,
257
+ }
258
+ },
259
+ }
260
+
261
+ export const SortBy: Story = {
262
+ parameters: {
263
+ sourceCode: [
264
+ {
265
+ name: 'Template',
266
+ code: `
267
+ <template>
268
+ <SyTable
269
+ v-model:options="options"
270
+ :headers="headers"
271
+ :items="items"
272
+ show-filters
273
+ suffix="sort-table"
274
+ />
275
+ </template>
276
+ `,
277
+ },
278
+ {
279
+ name: 'Script',
280
+ code: `
281
+ <script setup lang="ts">
282
+ import { ref } from 'vue'
283
+ import { SyTable } from '@cnamts/synapse'
284
+
285
+ const options = ref({
286
+ itemsPerPage: 4,
287
+ sortBy: [
288
+ {
289
+ key: 'lastname',
290
+ order: 'desc',
291
+ },
292
+ ],
293
+ })
294
+
295
+ const headers = ref([
296
+ {
297
+ title: 'Nom',
298
+ key: 'lastname',
299
+ },
300
+ {
301
+ title: 'Prénom',
302
+ key: 'firstname',
303
+ },
304
+ {
305
+ title: 'Email',
306
+ value: 'email',
307
+ },
308
+ ])
309
+
310
+ const items = ref([
311
+ {
312
+ firstname: 'Virginie',
313
+ lastname: 'Beauchesne',
314
+ email: 'virginie.beauchesne@example.com',
315
+ },
316
+ {
317
+ firstname: 'Simone',
318
+ lastname: 'Bellefeuille',
319
+ email: 'simone.bellefeuille@example.com',
320
+ },
321
+ {
322
+ firstname: 'Étienne',
323
+ lastname: 'Salois',
324
+ email: 'etienne.salois@example.com',
325
+ },
326
+ {
327
+ firstname: 'Thierry',
328
+ lastname: 'Bobu',
329
+ email: 'thierry.bobu@example.com',
330
+ },
331
+ {
332
+ firstname: 'Bernadette',
333
+ lastname: 'Langelier',
334
+ email: 'bernadette.langelier@exemple.com'
335
+ },
336
+ {
337
+ firstname: 'Agate',
338
+ lastname: 'Roy',
339
+ email: 'agate.roy@exemple.com'
340
+ }
341
+ ])
342
+ </script>
343
+ `,
344
+ },
345
+ ],
346
+ },
347
+ args: {
348
+ 'headers': [
349
+ {
350
+ title: 'Nom',
351
+ key: 'lastname',
352
+ },
353
+ {
354
+ title: 'Prénom',
355
+ key: 'firstname',
356
+ },
357
+ {
358
+ title: 'Email',
359
+ value: 'email',
360
+ },
361
+ ],
362
+ 'items': [
363
+ {
364
+ firstname: 'Virginie',
365
+ lastname: 'Beauchesne',
366
+ email: 'virginie.beauchesne@example.com',
367
+ },
368
+ {
369
+ firstname: 'Simone',
370
+ lastname: 'Bellefeuille',
371
+ email: 'simone.bellefeuille@example.com',
372
+ },
373
+ {
374
+ firstname: 'Étienne',
375
+ lastname: 'Salois',
376
+ email: 'etienne.salois@example.com',
377
+ },
378
+ {
379
+ firstname: 'Thierry',
380
+ lastname: 'Bobu',
381
+ email: 'thierry.bobu@example.com',
382
+ },
383
+ {
384
+ firstname: 'Bernadette',
385
+ lastname: 'Langelier',
386
+ email: 'bernadette.langelier@exemple.com',
387
+ },
388
+ {
389
+ firstname: 'Agate',
390
+ lastname: 'Roy',
391
+ email: 'agate.roy@exemple.com',
392
+ },
393
+ ],
394
+ 'caption': '',
395
+ 'options': {
396
+ itemsPerPage: 4,
397
+ sortBy: [
398
+ {
399
+ key: 'lastname',
400
+ order: 'desc',
401
+ },
402
+ ],
403
+ },
404
+ 'suffix': 'sort-table',
405
+ 'density': 'default',
406
+ 'striped': false,
407
+ 'onUpdate:options': fn(),
408
+ },
409
+ render: (args) => {
410
+ return {
411
+ components: { SyTable },
412
+ setup() {
413
+ return { args }
414
+ },
415
+ template: `
416
+ <SyTable
417
+ v-model:options="args.options"
418
+ v-bind="args"
419
+ />
420
+ `,
421
+ }
422
+ },
423
+ }
424
+
425
+ export const FilterByText: Story = {
426
+ parameters: {
427
+ sourceCode: [
428
+ {
429
+ name: 'Template',
430
+ code: `
431
+ <template>
432
+ <SyTable
433
+ v-model:options="options"
434
+ :headers="headers"
435
+ :items="items"
436
+ show-filters
437
+ suffix="filter-text-table"
438
+ />
439
+ </template>
440
+ `,
441
+ },
442
+ {
443
+ name: 'Script',
444
+ code: `
445
+ <script setup lang="ts">
446
+ import { ref } from 'vue'
447
+ import { SyTable } from '@cnamts/synapse'
448
+
449
+ const options = ref({
450
+ itemsPerPage: 4,
451
+ filters: []
452
+ })
453
+
454
+ const headers = ref([
455
+ {
456
+ title: 'Nom',
457
+ key: 'lastname',
458
+ filterable: true,
459
+ filterType: 'text'
460
+ },
461
+ {
462
+ title: 'Prénom',
463
+ key: 'firstname',
464
+ filterable: true,
465
+ filterType: 'text'
466
+ },
467
+ {
468
+ title: 'Email',
469
+ value: 'email',
470
+ filterable: true,
471
+ filterType: 'text'
472
+ },
473
+ ])
474
+
475
+ const items = ref([
476
+ {
477
+ firstname: 'Virginie',
478
+ lastname: 'Beauchesne',
479
+ email: 'virginie.beauchesne@example.com',
480
+ },
481
+ {
482
+ firstname: 'Simone',
483
+ lastname: 'Bellefeuille',
484
+ email: 'simone.bellefeuille@example.com',
485
+ },
486
+ {
487
+ firstname: 'Étienne',
488
+ lastname: 'Salois',
489
+ email: 'etienne.salois@example.com',
490
+ },
491
+ {
492
+ firstname: 'Thierry',
493
+ lastname: 'Bobu',
494
+ email: 'thierry.bobu@example.com',
495
+ },
496
+ {
497
+ firstname: 'Bernadette',
498
+ lastname: 'Langelier',
499
+ email: 'bernadette.langelier@exemple.com'
500
+ },
501
+ {
502
+ firstname: 'Agate',
503
+ lastname: 'Roy',
504
+ email: 'agate.roy@exemple.com'
505
+ }
506
+ ])
507
+ </script>
508
+ `,
509
+ },
510
+ ],
511
+ },
512
+ args: {
513
+ 'headers': [
514
+ {
515
+ title: 'Nom',
516
+ key: 'lastname',
517
+ filterable: true,
518
+ filterType: 'text',
519
+ },
520
+ {
521
+ title: 'Prénom',
522
+ key: 'firstname',
523
+ filterable: true,
524
+ filterType: 'text',
525
+ },
526
+ {
527
+ title: 'Email',
528
+ value: 'email',
529
+ filterable: true,
530
+ filterType: 'text',
531
+ },
532
+ ],
533
+ 'items': [
534
+ {
535
+ firstname: 'Virginie',
536
+ lastname: 'Beauchesne',
537
+ email: 'virginie.beauchesne@example.com',
538
+ },
539
+ {
540
+ firstname: 'Simone',
541
+ lastname: 'Bellefeuille',
542
+ email: 'simone.bellefeuille@example.com',
543
+ },
544
+ {
545
+ firstname: 'Étienne',
546
+ lastname: 'Salois',
547
+ email: 'etienne.salois@example.com',
548
+ },
549
+ {
550
+ firstname: 'Thierry',
551
+ lastname: 'Bobu',
552
+ email: 'thierry.bobu@example.com',
553
+ },
554
+ {
555
+ firstname: 'Bernadette',
556
+ lastname: 'Langelier',
557
+ email: 'bernadette.langelier@exemple.com',
558
+ },
559
+ {
560
+ firstname: 'Agate',
561
+ lastname: 'Roy',
562
+ email: 'agate.roy@exemple.com',
563
+ },
564
+ ],
565
+ 'caption': '',
566
+ 'options': {
567
+ itemsPerPage: 4,
568
+ filters: [],
569
+ },
570
+ 'showFilters': true,
571
+ 'suffix': 'filter-text-table',
572
+ 'density': 'default',
573
+ 'striped': false,
574
+ 'onUpdate:options': fn(),
575
+ },
576
+ render: (args) => {
577
+ return {
578
+ components: { SyTable },
579
+ setup() {
580
+ // Create reactive references
581
+ const options = ref(args.options)
582
+ const items = ref(args.items)
583
+
584
+ return {
585
+ args,
586
+ options,
587
+ items,
588
+ }
589
+ },
590
+ template: `
591
+ <SyTable
592
+ v-model:options="args.options"
593
+ v-bind="args"
594
+ suffix="filter-text-table"
595
+ />
596
+ `,
597
+ }
598
+ },
599
+ }
600
+
601
+ export const FilterByNumber: Story = {
602
+ parameters: {
603
+ sourceCode: [
604
+ {
605
+ name: 'Template',
606
+ code: `
607
+ <template>
608
+ <SyTable
609
+ v-model:options="options"
610
+ :headers="headers"
611
+ :items="items"
612
+ show-filters
613
+ suffix="filter-number-table"
614
+ />
615
+ </template>
616
+ `,
617
+ },
618
+ {
619
+ name: 'Script',
620
+ code: `
621
+ <script setup lang="ts">
622
+ import { ref } from 'vue'
623
+ import { SyTable } from '@cnamts/synapse'
624
+
625
+ const options = ref({
626
+ itemsPerPage: 5,
627
+ filters: []
628
+ })
629
+
630
+ const headers = ref([
631
+ {
632
+ title: 'Nom',
633
+ key: 'name',
634
+ filterable: true,
635
+ filterType: 'text'
636
+ },
637
+ {
638
+ title: 'Âge',
639
+ key: 'age',
640
+ filterable: true,
641
+ filterType: 'number'
642
+ },
643
+ {
644
+ title: 'Salaire',
645
+ key: 'salary',
646
+ filterable: true,
647
+ filterType: 'number'
648
+ },
649
+ ])
650
+
651
+ const items = ref([
652
+ {
653
+ name: 'Jean Dupont',
654
+ age: 32,
655
+ salary: 45000,
656
+ },
657
+ {
658
+ name: 'Marie Martin',
659
+ age: 28,
660
+ salary: 52000,
661
+ },
662
+ {
663
+ name: 'Pierre Durand',
664
+ age: 45,
665
+ salary: 65000,
666
+ },
667
+ {
668
+ name: 'Sophie Petit',
669
+ age: 36,
670
+ salary: 48000,
671
+ },
672
+ {
673
+ name: 'Thomas Leroy',
674
+ age: 41,
675
+ salary: 58000,
676
+ },
677
+ ])
678
+ </script>
679
+ `,
680
+ },
681
+ ],
682
+ },
683
+ args: {
684
+ 'headers': [
685
+ {
686
+ title: 'Nom',
687
+ key: 'name',
688
+ filterable: true,
689
+ filterType: 'text',
690
+ },
691
+ {
692
+ title: 'Âge',
693
+ key: 'age',
694
+ filterable: true,
695
+ filterType: 'number',
696
+ },
697
+ {
698
+ title: 'Salaire',
699
+ key: 'salary',
700
+ filterable: true,
701
+ filterType: 'number',
702
+ },
703
+ ],
704
+ 'items': [
705
+ {
706
+ name: 'Jean Dupont',
707
+ age: 32,
708
+ salary: 45000,
709
+ },
710
+ {
711
+ name: 'Marie Martin',
712
+ age: 28,
713
+ salary: 52000,
714
+ },
715
+ {
716
+ name: 'Pierre Durand',
717
+ age: 45,
718
+ salary: 65000,
719
+ },
720
+ {
721
+ name: 'Sophie Petit',
722
+ age: 36,
723
+ salary: 48000,
724
+ },
725
+ {
726
+ name: 'Thomas Leroy',
727
+ age: 41,
728
+ salary: 58000,
729
+ },
730
+ ],
731
+ 'caption': '',
732
+ 'options': {
733
+ itemsPerPage: 5,
734
+ filters: [],
735
+ },
736
+ 'showFilters': true,
737
+ 'suffix': 'filter-number-table',
738
+ 'density': 'default',
739
+ 'striped': false,
740
+ 'onUpdate:options': fn(),
741
+ },
742
+ render: (args) => {
743
+ return {
744
+ components: { SyTable },
745
+ setup() {
746
+ // Create reactive references
747
+ const options = ref(args.options)
748
+ const items = ref(args.items)
749
+
750
+ return {
751
+ args,
752
+ options,
753
+ items,
754
+ }
755
+ },
756
+ template: `
757
+ <SyTable
758
+ v-model:options="args.options"
759
+ v-bind="args"
760
+ suffix="filter-number-table"
761
+ />
762
+ `,
763
+ }
764
+ },
765
+ }
766
+
767
+ export const FilterBySelect: Story = {
768
+ parameters: {
769
+ sourceCode: [
770
+ {
771
+ name: 'Template',
772
+ code: `
773
+ <template>
774
+ <SyTable
775
+ v-model:options="options"
776
+ :headers="headers"
777
+ :items="items"
778
+ show-filters
779
+ suffix="filter-select-table"
780
+ />
781
+ </template>
782
+ `,
783
+ },
784
+ {
785
+ name: 'Script',
786
+ code: `
787
+ <script setup lang="ts">
788
+ import { ref } from 'vue'
789
+ import { SyTable } from '@cnamts/synapse'
790
+
791
+ const options = ref({
792
+ itemsPerPage: 5,
793
+ filters: []
794
+ })
795
+
796
+ const headers = ref([
797
+ {
798
+ title: 'Nom',
799
+ key: 'name',
800
+ filterable: true,
801
+ filterType: 'text'
802
+ },
803
+ {
804
+ title: 'Département',
805
+ key: 'department',
806
+ filterable: true,
807
+ filterType: 'select',
808
+ hideMessages: true,
809
+ filterOptions: [
810
+ { text: 'RH', value: 'RH' },
811
+ { text: 'IT', value: 'IT' },
812
+ { text: 'Finance', value: 'Finance' },
813
+ { text: 'Marketing', value: 'Marketing' },
814
+ ]
815
+ },
816
+ {
817
+ title: 'Statut',
818
+ key: 'status',
819
+ filterable: true,
820
+ filterType: 'select',
821
+ hideMessages: true,
822
+ filterOptions: [
823
+ { text: 'Actif', value: 'Actif' },
824
+ { text: 'En congé', value: 'En congé' },
825
+ { text: 'Inactif', value: 'Inactif' },
826
+ ]
827
+ },
828
+ ])
829
+
830
+ const items = ref([
831
+ {
832
+ name: 'Jean Dupont',
833
+ department: 'RH',
834
+ status: 'Actif',
835
+ },
836
+ {
837
+ name: 'Marie Martin',
838
+ department: 'IT',
839
+ status: 'En congé',
840
+ },
841
+ {
842
+ name: 'Pierre Durand',
843
+ department: 'Finance',
844
+ status: 'Actif',
845
+ },
846
+ {
847
+ name: 'Sophie Petit',
848
+ department: 'Marketing',
849
+ status: 'Actif',
850
+ },
851
+ {
852
+ name: 'Thomas Leroy',
853
+ department: 'IT',
854
+ status: 'Inactif',
855
+ },
856
+ ])
857
+ </script>
858
+ `,
859
+ },
860
+ ],
861
+ },
862
+ args: {
863
+ 'headers': [
864
+ {
865
+ title: 'Nom',
866
+ key: 'name',
867
+ filterable: true,
868
+ filterType: 'text',
869
+ },
870
+ {
871
+ title: 'Département',
872
+ key: 'department',
873
+ filterable: true,
874
+ filterType: 'select',
875
+ hideMessages: true,
876
+ filterOptions: [
877
+ { text: 'RH', value: 'RH' },
878
+ { text: 'IT', value: 'IT' },
879
+ { text: 'Finance', value: 'Finance' },
880
+ { text: 'Marketing', value: 'Marketing' },
881
+ ],
882
+ },
883
+ {
884
+ title: 'Statut',
885
+ key: 'status',
886
+ filterable: true,
887
+ filterType: 'select',
888
+ hideMessages: true,
889
+ filterOptions: [
890
+ { text: 'Actif', value: 'Actif' },
891
+ { text: 'En congé', value: 'En congé' },
892
+ { text: 'Inactif', value: 'Inactif' },
893
+ ],
894
+ },
895
+ ],
896
+ 'items': [
897
+ {
898
+ name: 'Jean Dupont',
899
+ department: 'RH',
900
+ status: 'Actif',
901
+ },
902
+ {
903
+ name: 'Marie Martin',
904
+ department: 'IT',
905
+ status: 'En congé',
906
+ },
907
+ {
908
+ name: 'Pierre Durand',
909
+ department: 'Finance',
910
+ status: 'Actif',
911
+ },
912
+ {
913
+ name: 'Sophie Petit',
914
+ department: 'Marketing',
915
+ status: 'Actif',
916
+ },
917
+ {
918
+ name: 'Thomas Leroy',
919
+ department: 'IT',
920
+ status: 'Inactif',
921
+ },
922
+ ],
923
+ 'caption': '',
924
+ 'options': {
925
+ itemsPerPage: 5,
926
+ filters: [],
927
+ },
928
+ 'showFilters': true,
929
+ 'suffix': 'filter-select-table',
930
+ 'density': 'default',
931
+ 'striped': false,
932
+ 'onUpdate:options': fn(),
933
+ },
934
+ render: (args) => {
935
+ return {
936
+ components: { SyTable },
937
+ setup() {
938
+ // Create reactive references
939
+ const options = ref(args.options)
940
+ const items = ref(args.items)
941
+
942
+ return {
943
+ args,
944
+ options,
945
+ items,
946
+ }
947
+ },
948
+ template: `
949
+ <SyTable
950
+ v-model:options="args.options"
951
+ v-bind="args"
952
+ suffix="filter-select-table"
953
+ />
954
+ `,
955
+ }
956
+ },
957
+ }
958
+
959
+ export const FilterBySelectMultiple: Story = {
960
+ parameters: {
961
+ sourceCode: [
962
+ {
963
+ name: 'Template',
964
+ code: `
965
+ <template>
966
+ <SyTable
967
+ v-model:options="options"
968
+ :headers="headers"
969
+ :items="items"
970
+ show-filters
971
+ suffix="filter-select-table"
972
+ />
973
+ </template>
974
+ `,
975
+ },
976
+ {
977
+ name: 'Script',
978
+ code: `
979
+ <script setup lang="ts">
980
+ import { ref } from 'vue'
981
+ import { SyTable } from '@cnamts/synapse'
982
+
983
+ const options = ref({
984
+ itemsPerPage: 5,
985
+ filters: []
986
+ })
987
+
988
+ const headers = ref([
989
+ {
990
+ title: 'Nom',
991
+ key: 'name',
992
+ filterable: true,
993
+ filterType: 'text'
994
+ },
995
+ {
996
+ title: 'Département',
997
+ key: 'department',
998
+ filterable: true,
999
+ filterType: 'select',
1000
+ multiple: true,
1001
+ chips: true,
1002
+ hideMessages: true,
1003
+ filterOptions: [
1004
+ { text: 'RH', value: 'RH' },
1005
+ { text: 'IT', value: 'IT' },
1006
+ { text: 'Finance', value: 'Finance' },
1007
+ { text: 'Marketing', value: 'Marketing' },
1008
+ ]
1009
+ },
1010
+ {
1011
+ title: 'Statut',
1012
+ key: 'status',
1013
+ filterable: true,
1014
+ multiple: true,
1015
+ chips: true,
1016
+ filterType: 'select',
1017
+ hideMessages: true,
1018
+ filterOptions: [
1019
+ { text: 'Actif', value: 'Actif' },
1020
+ { text: 'En congé', value: 'En congé' },
1021
+ { text: 'Inactif', value: 'Inactif' },
1022
+ ]
1023
+ },
1024
+ ])
1025
+
1026
+ const items = ref([
1027
+ {
1028
+ name: 'Jean Dupont',
1029
+ department: 'RH',
1030
+ status: 'Actif',
1031
+ },
1032
+ {
1033
+ name: 'Marie Martin',
1034
+ department: 'IT',
1035
+ status: 'En congé',
1036
+ },
1037
+ {
1038
+ name: 'Pierre Durand',
1039
+ department: 'Finance',
1040
+ status: 'Actif',
1041
+ },
1042
+ {
1043
+ name: 'Sophie Petit',
1044
+ department: 'Marketing',
1045
+ status: 'Actif',
1046
+ },
1047
+ {
1048
+ name: 'Thomas Leroy',
1049
+ department: 'IT',
1050
+ status: 'Inactif',
1051
+ },
1052
+ ])
1053
+ </script>
1054
+ `,
1055
+ },
1056
+ ],
1057
+ },
1058
+ args: {
1059
+ 'headers': [
1060
+ {
1061
+ title: 'Nom',
1062
+ key: 'name',
1063
+ filterable: true,
1064
+ filterType: 'text',
1065
+ },
1066
+ {
1067
+ title: 'Département',
1068
+ key: 'department',
1069
+ filterable: true,
1070
+ filterType: 'select',
1071
+ multiple: true,
1072
+ chips: true,
1073
+ hideMessages: true,
1074
+ filterOptions: [
1075
+ { text: 'RH', value: 'RH' },
1076
+ { text: 'IT', value: 'IT' },
1077
+ { text: 'Finance', value: 'Finance' },
1078
+ { text: 'Marketing', value: 'Marketing' },
1079
+ ],
1080
+ },
1081
+ {
1082
+ title: 'Statut',
1083
+ key: 'status',
1084
+ filterable: true,
1085
+ filterType: 'select',
1086
+ multiple: true,
1087
+ chips: true,
1088
+ hideMessages: true,
1089
+ filterOptions: [
1090
+ { text: 'Actif', value: 'Actif' },
1091
+ { text: 'En congé', value: 'En congé' },
1092
+ { text: 'Inactif', value: 'Inactif' },
1093
+ ],
1094
+ },
1095
+ ],
1096
+ 'items': [
1097
+ {
1098
+ name: 'Jean Dupont',
1099
+ department: 'RH',
1100
+ status: 'Actif',
1101
+ },
1102
+ {
1103
+ name: 'Marie Martin',
1104
+ department: 'IT',
1105
+ status: 'En congé',
1106
+ },
1107
+ {
1108
+ name: 'Pierre Durand',
1109
+ department: 'Finance',
1110
+ status: 'Actif',
1111
+ },
1112
+ {
1113
+ name: 'Sophie Petit',
1114
+ department: 'Marketing',
1115
+ status: 'Actif',
1116
+ },
1117
+ {
1118
+ name: 'Thomas Leroy',
1119
+ department: 'IT',
1120
+ status: 'Inactif',
1121
+ },
1122
+ ],
1123
+ 'caption': '',
1124
+ 'options': {
1125
+ itemsPerPage: 5,
1126
+ filters: [],
1127
+ },
1128
+ 'showFilters': true,
1129
+ 'suffix': 'filter-select-table',
1130
+ 'density': 'default',
1131
+ 'striped': false,
1132
+ 'onUpdate:options': fn(),
1133
+ },
1134
+ render: (args) => {
1135
+ return {
1136
+ components: { SyTable },
1137
+ setup() {
1138
+ // Create reactive references
1139
+ const options = ref(args.options)
1140
+ const items = ref(args.items)
1141
+
1142
+ return {
1143
+ args,
1144
+ options,
1145
+ items,
1146
+ }
1147
+ },
1148
+ template: `
1149
+ <SyTable
1150
+ v-model:options="args.options"
1151
+ v-bind="args"
1152
+ suffix="filter-select-table"
1153
+ />
1154
+ `,
1155
+ }
1156
+ },
1157
+ }
1158
+
1159
+ export const FilterByExactDate: Story = {
1160
+ parameters: {
1161
+ sourceCode: [
1162
+ {
1163
+ name: 'Template',
1164
+ code: `
1165
+ <template>
1166
+ <SyTable
1167
+ v-model:options="options"
1168
+ :headers="headers"
1169
+ :items="items"
1170
+ :show-filters="true"
1171
+ suffix="filter-date-table"
1172
+ />
1173
+ </template>
1174
+ `,
1175
+ },
1176
+ {
1177
+ name: 'Script',
1178
+ code: `
1179
+ <script setup lang="ts">
1180
+ import { ref } from 'vue'
1181
+ import { SyTable } from '@cnamts/synapse'
1182
+ import dayjs from 'dayjs';
1183
+
1184
+ const options = ref({
1185
+ itemsPerPage: 5,
1186
+ filters: [],
1187
+ })
1188
+
1189
+ const headers = ref([
1190
+ {
1191
+ title: 'Nom',
1192
+ key: 'name',
1193
+ filterable: true,
1194
+ filterType: 'text',
1195
+ },
1196
+ {
1197
+ title: 'Date d'embauche',
1198
+ key: 'hireDate',
1199
+ filterable: true,
1200
+ filterType: 'date',
1201
+ dateFormat: 'DD/MM/YYYY',
1202
+ },
1203
+ ])
1204
+
1205
+ const items = ref([
1206
+ {
1207
+ name: 'Jean Dupont',
1208
+ hireDate: dayjs('2020-05-15').format('DD/MM/YYYY'),
1209
+ },
1210
+ {
1211
+ name: 'Marie Martin',
1212
+ hireDate: dayjs('2019-03-10').format('DD/MM/YYYY'),
1213
+ },
1214
+ {
1215
+ name: 'Pierre Dupont',
1216
+ hireDate: dayjs('2025-11-22').format('DD/MM/YYYY'),
1217
+ },
1218
+ {
1219
+ name: 'Sophie Garnier',
1220
+ hireDate: dayjs('2025-01-08').format('DD/MM/YYYY'),
1221
+ },
1222
+ {
1223
+ name: 'Thomas Leroy',
1224
+ hireDate: dayjs('2025-07-30').format('DD/MM/YYYY'),
1225
+ },
1226
+ ])
1227
+ </script>
1228
+ `,
1229
+ },
1230
+ ],
1231
+ },
1232
+ args: {
1233
+ 'headers': [
1234
+ {
1235
+ title: 'Nom',
1236
+ key: 'name',
1237
+ filterable: true,
1238
+ filterType: 'text',
1239
+ },
1240
+ {
1241
+ title: 'Date d\'embauche',
1242
+ key: 'hireDate',
1243
+ filterable: true,
1244
+ filterType: 'date',
1245
+ dateFormat: 'DD/MM/YYYY',
1246
+ },
1247
+ ],
1248
+ 'items': [
1249
+ {
1250
+ name: 'Jean Dupont',
1251
+ hireDate: dayjs('2025-05-15').format('DD/MM/YYYY'),
1252
+ },
1253
+ {
1254
+ name: 'Marie Martin',
1255
+ hireDate: dayjs('2025-03-10').format('DD/MM/YYYY'),
1256
+ },
1257
+ {
1258
+ name: 'Pierre Durand',
1259
+ hireDate: dayjs('2025-11-22').format('DD/MM/YYYY'),
1260
+ },
1261
+ {
1262
+ name: 'Sophie Petit',
1263
+ hireDate: dayjs('2025-01-08').format('DD/MM/YYYY'),
1264
+ },
1265
+ {
1266
+ name: 'Thomas Leroy',
1267
+ hireDate: dayjs('2025-07-30').format('DD/MM/YYYY'),
1268
+ },
1269
+ ],
1270
+ 'caption': '',
1271
+ 'options': {
1272
+ itemsPerPage: 5,
1273
+ filters: [],
1274
+ },
1275
+ 'showFilters': true,
1276
+ 'suffix': 'filter-date-table',
1277
+ 'density': 'default',
1278
+ 'striped': false,
1279
+ 'onUpdate:options': fn(),
1280
+ },
1281
+ render: (args) => {
1282
+ return {
1283
+ components: { SyTable },
1284
+ setup() {
1285
+ // Create reactive references
1286
+ const options = ref(args.options)
1287
+ const items = ref(args.items)
1288
+
1289
+ return {
1290
+ args,
1291
+ options,
1292
+ items,
1293
+ }
1294
+ },
1295
+ template: `
1296
+ <SyTable
1297
+ v-model:options="args.options"
1298
+ v-bind="args"
1299
+ suffix="filter-date-table"
1300
+ />
1301
+ `,
1302
+ }
1303
+ },
1304
+ }
1305
+
1306
+ export const FilterByPeriod: Story = {
1307
+ parameters: {
1308
+ sourceCode: [
1309
+ {
1310
+ name: 'Template',
1311
+ code: `
1312
+ <template>
1313
+ <SyTable
1314
+ v-model:options="options"
1315
+ :headers="headers"
1316
+ :items="items"
1317
+ :show-filters="true"
1318
+ suffix="filter-date-table"
1319
+ />
1320
+ </template>
1321
+ `,
1322
+ },
1323
+ {
1324
+ name: 'Script',
1325
+ code: `
1326
+ <script setup lang="ts">
1327
+ import { ref } from 'vue'
1328
+ import { SyTable } from '@cnamts/synapse'
1329
+ import dayjs from 'dayjs';
1330
+
1331
+ const options = ref({
1332
+ itemsPerPage: 5,
1333
+ filters: [],
1334
+ })
1335
+
1336
+ const headers = ref([
1337
+ {
1338
+ title: 'Nom',
1339
+ key: 'name',
1340
+ filterable: true,
1341
+ filterType: 'text',
1342
+ },
1343
+ {
1344
+ title: 'Date d'embauche',
1345
+ key: 'hireDate',
1346
+ filterable: true,
1347
+ filterType: 'period',
1348
+ dateFormat: 'DD/MM/YYYY',
1349
+ },
1350
+ ])
1351
+
1352
+ const items = ref([
1353
+ {
1354
+ name: 'Jean Dupont',
1355
+ hireDate: dayjs('2020-05-15').format('DD/MM/YYYY'),
1356
+ },
1357
+ {
1358
+ name: 'Marie Martin',
1359
+ hireDate: dayjs('2019-03-10').format('DD/MM/YYYY'),
1360
+ },
1361
+ {
1362
+ name: 'Pierre Dupont',
1363
+ hireDate: dayjs('2025-11-22').format('DD/MM/YYYY'),
1364
+ },
1365
+ {
1366
+ name: 'Sophie Garnier',
1367
+ hireDate: dayjs('2025-01-08').format('DD/MM/YYYY'),
1368
+ },
1369
+ {
1370
+ name: 'Thomas Leroy',
1371
+ hireDate: dayjs('2025-07-30').format('DD/MM/YYYY'),
1372
+ },
1373
+ ])
1374
+ </script>
1375
+ `,
1376
+ },
1377
+ ],
1378
+ },
1379
+ args: {
1380
+ 'headers': [
1381
+ {
1382
+ title: 'Nom',
1383
+ key: 'name',
1384
+ filterable: true,
1385
+ filterType: 'text',
1386
+ },
1387
+ {
1388
+ title: 'Date d\'embauche',
1389
+ key: 'hireDate',
1390
+ filterable: true,
1391
+ filterType: 'period',
1392
+ dateFormat: 'DD/MM/YYYY',
1393
+ },
1394
+ ],
1395
+ 'items': [
1396
+ {
1397
+ name: 'Jean Dupont',
1398
+ hireDate: dayjs('2025-05-15').format('DD/MM/YYYY'),
1399
+ },
1400
+ {
1401
+ name: 'Marie Martin',
1402
+ hireDate: dayjs('2025-03-10').format('DD/MM/YYYY'),
1403
+ },
1404
+ {
1405
+ name: 'Pierre Durand',
1406
+ hireDate: dayjs('2025-11-22').format('DD/MM/YYYY'),
1407
+ },
1408
+ {
1409
+ name: 'Sophie Petit',
1410
+ hireDate: dayjs('2025-01-08').format('DD/MM/YYYY'),
1411
+ },
1412
+ {
1413
+ name: 'Thomas Leroy',
1414
+ hireDate: dayjs('2025-07-30').format('DD/MM/YYYY'),
1415
+ },
1416
+ ],
1417
+ 'caption': '',
1418
+ 'options': {
1419
+ itemsPerPage: 5,
1420
+ filters: [],
1421
+ },
1422
+ 'showFilters': true,
1423
+ 'suffix': 'filter-date-table',
1424
+ 'density': 'default',
1425
+ 'striped': false,
1426
+ 'onUpdate:options': fn(),
1427
+ },
1428
+ render: (args) => {
1429
+ return {
1430
+ components: { SyTable },
1431
+ setup() {
1432
+ // Create reactive references
1433
+ const options = ref(args.options)
1434
+ const items = ref(args.items)
1435
+
1436
+ return {
1437
+ args,
1438
+ options,
1439
+ items,
1440
+ }
1441
+ },
1442
+ template: `
1443
+ <SyTable
1444
+ v-model:options="args.options"
1445
+ v-bind="args"
1446
+ suffix="filter-date-table"
1447
+ />
1448
+ `,
1449
+ }
1450
+ },
1451
+ }
1452
+
1453
+ export const CustomFilterSlot: Story = {
1454
+ parameters: {
1455
+ docs: {
1456
+ description: {
1457
+ story: 'Cette story démontre comment utiliser un slot personnalisé pour le filtrage. Le filtre personnalisé utilise un v-select pour filtrer par statut.',
1458
+ },
1459
+ },
1460
+ sourceCode: [
1461
+ {
1462
+ name: 'Template',
1463
+ code: `
1464
+ <template>
1465
+ <SyTable
1466
+ v-model:options="options"
1467
+ :headers="headers"
1468
+ :items="items"
1469
+ show-filters
1470
+ suffix="custom-filter-slot-table"
1471
+ >
1472
+ <template #filter.custom="{ header, updateFilter }">
1473
+ <div class="custom-filter-container">
1474
+ <div class="custom-filter-info mb-2">
1475
+ Filtre personnalisé :
1476
+ </div>
1477
+ <v-select
1478
+ v-model="customFilterValue"
1479
+ :items="statusOptions"
1480
+ label="Statut"
1481
+ variant="outlined"
1482
+ density="compact"
1483
+ color="primary"
1484
+ bg-color="white"
1485
+ @update:model-value="(val) => {
1486
+ // Use updateFilter provided by the slot props
1487
+ updateFilter(val);
1488
+ // Also update our local state
1489
+ handleFilterChange(val);
1490
+ }"
1491
+ />
1492
+ </div>
1493
+ </template>
1494
+ </SyTable>
1495
+ </template>
1496
+ `,
1497
+ },
1498
+ {
1499
+ name: 'Script',
1500
+ code: `
1501
+ <script setup lang="ts">
1502
+ import { ref } from 'vue'
1503
+ import { SyTable } from '@cnamts/synapse'
1504
+
1505
+ const options = ref({
1506
+ page: 1,
1507
+ itemsPerPage: 4,
1508
+ filters: []
1509
+ })
1510
+
1511
+ const customFilterValue = ref('')
1512
+ const statusOptions = ['Actif', 'Inactif', 'En attente']
1513
+
1514
+ // Function to update the filter when the select value changes
1515
+ function handleFilterChange(val) {
1516
+ // Create a new filters array
1517
+ const newFilters = options.value.filters.filter(f => f.key !== 'status')
1518
+
1519
+ // Add the new filter if a value is selected
1520
+ if (val) {
1521
+ newFilters.push({
1522
+ key: 'status',
1523
+ value: val,
1524
+ type: 'select' // Use 'select' type for compatibility with filtering logic
1525
+ })
1526
+ }
1527
+
1528
+ // Update the options with the new filters
1529
+ options.value = {
1530
+ ...options.value,
1531
+ filters: newFilters
1532
+ }
1533
+ }
1534
+
1535
+ const headers = ref([
1536
+ {
1537
+ title: 'Nom',
1538
+ key: 'lastname',
1539
+ filterable: true,
1540
+ filterType: 'text'
1541
+ },
1542
+ {
1543
+ title: 'Prénom',
1544
+ key: 'firstname',
1545
+ filterable: true,
1546
+ filterType: 'text'
1547
+ },
1548
+ {
1549
+ title: 'Statut',
1550
+ key: 'status',
1551
+ filterable: true,
1552
+ filterType: 'custom' // Utilisation du type 'custom' pour activer le slot personnalisé
1553
+ },
1554
+ ])
1555
+
1556
+ const items = ref([
1557
+ {
1558
+ firstname: 'Virginie',
1559
+ lastname: 'Beauchesne',
1560
+ status: 'Actif',
1561
+ },
1562
+ {
1563
+ firstname: 'Simone',
1564
+ lastname: 'Bellefeuille',
1565
+ status: 'Inactif',
1566
+ },
1567
+ {
1568
+ firstname: 'Étienne',
1569
+ lastname: 'Salois',
1570
+ status: 'En attente',
1571
+ },
1572
+ {
1573
+ firstname: 'Thierry',
1574
+ lastname: 'Bobu',
1575
+ status: 'Actif',
1576
+ },
1577
+ {
1578
+ firstname: 'Bernadette',
1579
+ lastname: 'Langelier',
1580
+ status: 'Inactif'
1581
+ },
1582
+ {
1583
+ firstname: 'Agate',
1584
+ lastname: 'Roy',
1585
+ status: 'En attente'
1586
+ }
1587
+ ])
1588
+ </script>
1589
+ `,
1590
+ },
1591
+ {
1592
+ name: 'Style',
1593
+ code: `
1594
+ <style scoped>
1595
+ .custom-filter-container {
1596
+ display: flex;
1597
+ flex-direction: column;
1598
+ gap: 4px;
1599
+ }
1600
+
1601
+ .custom-filter-info {
1602
+ font-size: 12px;
1603
+ color: #666;
1604
+ margin-top: 4px;
1605
+ }
1606
+ </style>
1607
+ `,
1608
+ },
1609
+ ],
1610
+ },
1611
+ args: {
1612
+ 'headers': [
1613
+ {
1614
+ title: 'Nom',
1615
+ key: 'lastname',
1616
+ filterable: true,
1617
+ filterType: 'text',
1618
+ },
1619
+ {
1620
+ title: 'Prénom',
1621
+ key: 'firstname',
1622
+ filterable: true,
1623
+ filterType: 'text',
1624
+ },
1625
+ {
1626
+ title: 'Statut',
1627
+ key: 'status',
1628
+ filterable: true,
1629
+ filterType: 'custom',
1630
+ },
1631
+ ],
1632
+ 'items': [
1633
+ {
1634
+ firstname: 'Virginie',
1635
+ lastname: 'Beauchesne',
1636
+ status: 'Actif',
1637
+ },
1638
+ {
1639
+ firstname: 'Simone',
1640
+ lastname: 'Bellefeuille',
1641
+ status: 'Inactif',
1642
+ },
1643
+ {
1644
+ firstname: 'Étienne',
1645
+ lastname: 'Salois',
1646
+ status: 'En attente',
1647
+ },
1648
+ {
1649
+ firstname: 'Thierry',
1650
+ lastname: 'Bobu',
1651
+ status: 'Actif',
1652
+ },
1653
+ {
1654
+ firstname: 'Bernadette',
1655
+ lastname: 'Langelier',
1656
+ status: 'Inactif',
1657
+ },
1658
+ {
1659
+ firstname: 'Agate',
1660
+ lastname: 'Roy',
1661
+ status: 'En attente',
1662
+ },
1663
+ ],
1664
+ 'caption': '',
1665
+ 'options': {
1666
+ itemsPerPage: 4,
1667
+ filters: [],
1668
+ },
1669
+ 'showFilters': true,
1670
+ 'suffix': 'custom-filter-slot-table',
1671
+ 'density': 'default',
1672
+ 'striped': false,
1673
+ 'onUpdate:options': fn(),
1674
+ },
1675
+ render: (args) => {
1676
+ return {
1677
+ components: { SyTable },
1678
+ setup() {
1679
+ // Create a fresh copy of the options to avoid reactivity issues
1680
+ const options = ref<DataOptions>({
1681
+ page: 1,
1682
+ itemsPerPage: 4,
1683
+ filters: [] as import('../common/types').FilterOption[],
1684
+ sortBy: [],
1685
+ })
1686
+
1687
+ // Create a reactive reference for the custom filter value
1688
+ const customFilterValue = ref('')
1689
+ const statusOptions = ['Actif', 'Inactif', 'En attente']
1690
+
1691
+ // Function to update the filter when the select value changes
1692
+ function handleFilterChange(val) {
1693
+ // Ensure options.value.filters is initialized
1694
+ if (!options.value.filters) {
1695
+ options.value.filters = []
1696
+ }
1697
+
1698
+ // Create a new filters array with proper typing
1699
+ const currentFilters = options.value.filters as import('../common/types').FilterOption[]
1700
+ const newFilters = [...currentFilters].filter(f => f.key !== 'status')
1701
+
1702
+ // Add the new filter if a value is selected
1703
+ if (val) {
1704
+ newFilters.push({
1705
+ key: 'status',
1706
+ value: val,
1707
+ type: 'select' as FilterType, // Use 'select' type for compatibility with filtering logic
1708
+ })
1709
+ }
1710
+
1711
+ // Update the options with the new filters
1712
+ options.value = {
1713
+ ...options.value,
1714
+ filters: newFilters,
1715
+ }
1716
+ }
1717
+
1718
+ return {
1719
+ args,
1720
+ options,
1721
+ customFilterValue,
1722
+ statusOptions,
1723
+ handleFilterChange,
1724
+ }
1725
+ },
1726
+ template: `
1727
+ <SyTable
1728
+ v-model:options="options"
1729
+ :headers="args.headers"
1730
+ :items="args.items"
1731
+ show-filters
1732
+ suffix="custom-filter-slot-table"
1733
+ >
1734
+ <template #filter.custom="{ header, updateFilter }">
1735
+ <div class="custom-filter-container">
1736
+ <div class="custom-filter-info mb-2">
1737
+ Filtre personnalisé :
1738
+ </div>
1739
+ <v-select
1740
+ v-model="customFilterValue"
1741
+ :items="statusOptions"
1742
+ label="Statut"
1743
+ variant="outlined"
1744
+ density="compact"
1745
+ color="primary"
1746
+ bg-color="white"
1747
+ @update:model-value="(val) => {
1748
+ // Use updateFilter provided by the slot props
1749
+ updateFilter(val);
1750
+ // Also update our local state
1751
+ handleFilterChange(val);
1752
+ }"
1753
+ />
1754
+ </div>
1755
+ </template>
1756
+ </SyTable>
1757
+ `,
1758
+ }
1759
+ },
1760
+ }
1761
+
1762
+ export const CustomFilterInputs: Story = {
1763
+ parameters: {
1764
+ sourceCode: [
1765
+ {
1766
+ name: 'Template',
1767
+ code: `
1768
+ <template>
1769
+ <SyTable
1770
+ v-model:options="options"
1771
+ :headers="headers"
1772
+ :items="items"
1773
+ :filter-input-config="filterInputConfig"
1774
+ show-filters
1775
+ suffix="filter-text-table"
1776
+ />
1777
+ </template>
1778
+ `,
1779
+ },
1780
+ {
1781
+ name: 'Script',
1782
+ code: `
1783
+ <script setup lang="ts">
1784
+ import { ref } from 'vue'
1785
+ import { SyTable } from '@cnamts/synapse'
1786
+
1787
+ const options = ref({
1788
+ itemsPerPage: 4,
1789
+ filters: []
1790
+ })
1791
+
1792
+ const headers = ref([
1793
+ {
1794
+ title: 'Nom',
1795
+ key: 'lastname',
1796
+ filterable: true,
1797
+ filterType: 'text'
1798
+ },
1799
+ {
1800
+ title: 'Prénom',
1801
+ key: 'firstname',
1802
+ filterable: true,
1803
+ filterType: 'text'
1804
+ },
1805
+ {
1806
+ title: 'Email',
1807
+ value: 'email',
1808
+ filterable: true,
1809
+ filterType: 'text'
1810
+ },
1811
+ ])
1812
+
1813
+ const items = ref([
1814
+ {
1815
+ firstname: 'Virginie',
1816
+ lastname: 'Beauchesne',
1817
+ email: 'virginie.beauchesne@example.com',
1818
+ },
1819
+ {
1820
+ firstname: 'Simone',
1821
+ lastname: 'Bellefeuille',
1822
+ email: 'simone.bellefeuille@example.com',
1823
+ },
1824
+ {
1825
+ firstname: 'Étienne',
1826
+ lastname: 'Salois',
1827
+ email: 'etienne.salois@example.com',
1828
+ },
1829
+ {
1830
+ firstname: 'Thierry',
1831
+ lastname: 'Bobu',
1832
+ email: 'thierry.bobu@example.com',
1833
+ },
1834
+ {
1835
+ firstname: 'Bernadette',
1836
+ lastname: 'Langelier',
1837
+ email: 'bernadette.langelier@exemple.com'
1838
+ },
1839
+ {
1840
+ firstname: 'Agate',
1841
+ lastname: 'Roy',
1842
+ email: 'agate.roy@exemple.com'
1843
+ }
1844
+ ])
1845
+
1846
+ const filterInputConfig = ref({
1847
+ variant: 'outlined',
1848
+ density: 'comfortable',
1849
+ hideDetails: true,
1850
+ clearable: false,
1851
+ disableErrorHandling: true,
1852
+ })
1853
+ </script>
1854
+ `,
1855
+ },
1856
+ ],
1857
+ },
1858
+ args: {
1859
+ 'headers': [
1860
+ {
1861
+ title: 'Nom',
1862
+ key: 'lastname',
1863
+ filterable: true,
1864
+ filterType: 'text',
1865
+ },
1866
+ {
1867
+ title: 'Prénom',
1868
+ key: 'firstname',
1869
+ filterable: true,
1870
+ filterType: 'text',
1871
+ },
1872
+ {
1873
+ title: 'Email',
1874
+ value: 'email',
1875
+ filterable: true,
1876
+ filterType: 'text',
1877
+ },
1878
+ ],
1879
+ 'items': [
1880
+ {
1881
+ firstname: 'Virginie',
1882
+ lastname: 'Beauchesne',
1883
+ email: 'virginie.beauchesne@example.com',
1884
+ },
1885
+ {
1886
+ firstname: 'Simone',
1887
+ lastname: 'Bellefeuille',
1888
+ email: 'simone.bellefeuille@example.com',
1889
+ },
1890
+ {
1891
+ firstname: 'Étienne',
1892
+ lastname: 'Salois',
1893
+ email: 'etienne.salois@example.com',
1894
+ },
1895
+ {
1896
+ firstname: 'Thierry',
1897
+ lastname: 'Bobu',
1898
+ email: 'thierry.bobu@example.com',
1899
+ },
1900
+ {
1901
+ firstname: 'Bernadette',
1902
+ lastname: 'Langelier',
1903
+ email: 'bernadette.langelier@exemple.com',
1904
+ },
1905
+ {
1906
+ firstname: 'Agate',
1907
+ lastname: 'Roy',
1908
+ email: 'agate.roy@exemple.com',
1909
+ },
1910
+ ],
1911
+ 'caption': '',
1912
+ 'options': {
1913
+ itemsPerPage: 4,
1914
+ filters: [],
1915
+ },
1916
+ 'filterInputConfig': {
1917
+ variant: 'outlined',
1918
+ density: 'comfortable',
1919
+ hideDetails: true,
1920
+ clearable: false,
1921
+ disableErrorHandling: true,
1922
+ },
1923
+ 'showFilters': true,
1924
+ 'suffix': 'filter-text-table',
1925
+ 'density': 'default',
1926
+ 'striped': false,
1927
+ 'onUpdate:options': fn(),
1928
+ },
1929
+ render: (args) => {
1930
+ return {
1931
+ components: { SyTable },
1932
+ setup() {
1933
+ // Create reactive references
1934
+ const options = ref(args.options)
1935
+ const items = ref(args.items)
1936
+
1937
+ return {
1938
+ args,
1939
+ options,
1940
+ items,
1941
+ }
1942
+ },
1943
+ template: `
1944
+ <SyTable
1945
+ v-model:options="args.options"
1946
+ v-bind="args"
1947
+ suffix="filter-custom-input"
1948
+ />
1949
+ `,
1950
+ }
1951
+ },
1952
+ }
1953
+
1954
+ export const ManyTables: Story = {
1955
+ parameters: {
1956
+ sourceCode: [
1957
+ {
1958
+ name: 'Template',
1959
+ code: `
1960
+ <template>
1961
+ <div class="d-flex flex-column gap-4">
1962
+ <SyTable
1963
+ v-model:options="options1"
1964
+ :headers="headers"
1965
+ :items="items1"
1966
+ suffix="table-1"
1967
+ />
1968
+ <SyTable
1969
+ v-model:options="options2"
1970
+ :headers="headers"
1971
+ :items="items2"
1972
+ suffix="table-2"
1973
+ />
1974
+ </div>
1975
+ </template>
1976
+ `,
1977
+ },
1978
+ {
1979
+ name: 'Script',
1980
+ code: `
1981
+ <script setup lang="ts">
1982
+ import { ref } from 'vue'
1983
+ import { SyTable } from '@cnamts/synapse'
1984
+
1985
+ const options1 = ref({
1986
+ itemsPerPage: 4,
1987
+ })
1988
+
1989
+ const options2 = ref({
1990
+ itemsPerPage: 2,
1991
+ })
1992
+
1993
+ const headers = ref([
1994
+ {
1995
+ title: 'Nom',
1996
+ key: 'lastname',
1997
+ },
1998
+ {
1999
+ title: 'Prénom',
2000
+ key: 'firstname',
2001
+ },
2002
+ {
2003
+ title: 'Email',
2004
+ value: 'email',
2005
+ },
2006
+ ])
2007
+
2008
+ const items = ref([
2009
+ {
2010
+ firstname: 'Virginie',
2011
+ lastname: 'Beauchesne',
2012
+ email: 'virginie.beauchesne@example.com',
2013
+ },
2014
+ {
2015
+ firstname: 'Simone',
2016
+ lastname: 'Bellefeuille',
2017
+ email: 'simone.bellefeuille@example.com',
2018
+ },
2019
+ {
2020
+ firstname: 'Étienne',
2021
+ lastname: 'Salois',
2022
+ email: 'etienne.salois@example.com',
2023
+ },
2024
+ {
2025
+ firstname: 'Thierry',
2026
+ lastname: 'Bobu',
2027
+ email: 'thierry.bobu@example.com',
2028
+ },
2029
+ {
2030
+ firstname: 'Bernadette',
2031
+ lastname: 'Langelier',
2032
+ email: 'bernadette.langelier@exemple.com'
2033
+ },
2034
+ {
2035
+ firstname: 'Agate',
2036
+ lastname: 'Roy',
2037
+ email: 'agate.roy@exemple.com'
2038
+ }
2039
+ ])
2040
+ </script>
2041
+ `,
2042
+ },
2043
+ ],
2044
+ },
2045
+ args: {
2046
+ 'headers': [
2047
+ {
2048
+ title: 'Nom',
2049
+ key: 'lastname',
2050
+ },
2051
+ {
2052
+ title: 'Prénom',
2053
+ key: 'firstname',
2054
+ },
2055
+ {
2056
+ title: 'Email',
2057
+ value: 'email',
2058
+ },
2059
+ ],
2060
+ 'items': [
2061
+ {
2062
+ firstname: 'Virginie',
2063
+ lastname: 'Beauchesne',
2064
+ email: 'virginie.beauchesne@example.com',
2065
+ },
2066
+ {
2067
+ firstname: 'Simone',
2068
+ lastname: 'Bellefeuille',
2069
+ email: 'simone.bellefeuille@example.com',
2070
+ },
2071
+ {
2072
+ firstname: 'Étienne',
2073
+ lastname: 'Salois',
2074
+ email: 'etienne.salois@example.com',
2075
+ },
2076
+ {
2077
+ firstname: 'Thierry',
2078
+ lastname: 'Bobu',
2079
+ email: 'thierry.bobu@example.com',
2080
+ },
2081
+ {
2082
+ firstname: 'Bernadette',
2083
+ lastname: 'Langelier',
2084
+ email: 'bernadette.langelier@exemple.com',
2085
+ },
2086
+ {
2087
+ firstname: 'Agate',
2088
+ lastname: 'Roy',
2089
+ email: 'agate.roy@exemple.com',
2090
+ },
2091
+ ],
2092
+ 'caption': '',
2093
+ 'suffix': 'multi-server',
2094
+ 'density': 'default',
2095
+ 'striped': false,
2096
+ 'onUpdate:options': fn(),
2097
+ },
2098
+ render: (args) => {
2099
+ return {
2100
+ components: { SyTable },
2101
+ setup() {
2102
+ const options1 = ref<Partial<DataOptions>>({
2103
+ itemsPerPage: 4,
2104
+ })
2105
+ const options2 = ref<Partial<DataOptions>>({
2106
+ itemsPerPage: 2,
2107
+ })
2108
+ return { args, options1, options2 }
2109
+ },
2110
+ template: `
2111
+ <div>
2112
+ <SyTable
2113
+ v-model:options="options1"
2114
+ v-bind="args"
2115
+ suffix="table1"
2116
+ class="mb-10"
2117
+ />
2118
+ <SyTable
2119
+ v-model:options="options2"
2120
+ v-bind="args"
2121
+ suffix="table2"
2122
+ />
2123
+ </div>
2124
+ `,
2125
+ }
2126
+ },
2127
+ }
2128
+
2129
+ export const DataAlignment: Story = {
2130
+ parameters: {
2131
+ sourceCode: [
2132
+ {
2133
+ name: 'Template',
2134
+ code: `
2135
+ <template>
2136
+ <SyTable
2137
+ v-model:options="options"
2138
+ :headers="headers"
2139
+ :items="items"
2140
+ suffix="alignment-table"
2141
+ />
2142
+ </template>
2143
+ `,
2144
+ },
2145
+ {
2146
+ name: 'Script',
2147
+ code: `
2148
+ <script setup lang="ts">
2149
+ import { ref } from 'vue'
2150
+ import { SyTable } from '@cnamts/synapse'
2151
+
2152
+ const options = ref({
2153
+ itemsPerPage: 4,
2154
+ })
2155
+
2156
+ const headers = ref([
2157
+ {
2158
+ title: 'ID',
2159
+ key: 'id',
2160
+ align: 'center',
2161
+ },
2162
+ {
2163
+ title: 'Nom',
2164
+ key: 'lastname',
2165
+ align: 'start',
2166
+ },
2167
+ {
2168
+ title: 'Date de naissance',
2169
+ key: 'birthdate',
2170
+ align: 'center',
2171
+ },
2172
+ {
2173
+ title: 'NIR',
2174
+ key: 'nir',
2175
+ align: 'end',
2176
+ },
2177
+ ])
2178
+
2179
+ const items = ref([
2180
+ {
2181
+ id: '1',
2182
+ lastname: 'Lefebvre',
2183
+ birthdate: '18/02/1989',
2184
+ nir: '1 89 02 75 120 005 79',
2185
+ },
2186
+ {
2187
+ id: '2',
2188
+ lastname: 'Richard',
2189
+ birthdate: '22/05/1991',
2190
+ nir: '2 91 05 75 120 005 76',
2191
+ },
2192
+ {
2193
+ id: '3',
2194
+ lastname: 'Fournier',
2195
+ birthdate: '11/11/2000',
2196
+ nir: '2 00 11 42 120 008 87',
2197
+ },
2198
+ ])
2199
+ </script>
2200
+ `,
2201
+ },
2202
+ ],
2203
+ },
2204
+ args: {
2205
+ 'headers': [
2206
+ {
2207
+ title: 'ID',
2208
+ key: 'id',
2209
+ align: 'center',
2210
+ sortable: false,
2211
+ },
2212
+ {
2213
+ title: 'Nom',
2214
+ key: 'lastname',
2215
+ align: 'start',
2216
+ sortable: false,
2217
+ },
2218
+ {
2219
+ title: 'Date de naissance',
2220
+ key: 'birthdate',
2221
+ align: 'center',
2222
+ sortable: false,
2223
+ },
2224
+ {
2225
+ title: 'NIR',
2226
+ key: 'nir',
2227
+ align: 'end',
2228
+ sortable: false,
2229
+ },
2230
+ ],
2231
+ 'items': [
2232
+ {
2233
+ id: '1',
2234
+ lastname: 'Lefebvre',
2235
+ birthdate: '18/02/1989',
2236
+ nir: '1 89 02 75 120 005 79',
2237
+ },
2238
+ {
2239
+ id: '2',
2240
+ lastname: 'Richard',
2241
+ birthdate: '22/05/1991',
2242
+ nir: '2 91 05 75 120 005 76',
2243
+ },
2244
+ {
2245
+ id: '3',
2246
+ lastname: 'Fournier',
2247
+ birthdate: '11/11/2000',
2248
+ nir: '2 00 11 42 120 008 87',
2249
+ },
2250
+ ],
2251
+ 'options': {
2252
+ itemsPerPage: 4,
2253
+ },
2254
+ 'suffix': 'alignment-table',
2255
+ 'onUpdate:options': fn(),
2256
+ },
2257
+ render: (args) => {
2258
+ return {
2259
+ components: { SyTable },
2260
+ setup() {
2261
+ return { args }
2262
+ },
2263
+ template: `
2264
+ <SyTable
2265
+ v-model:options="args.options"
2266
+ v-bind="args"
2267
+ suffix="alignment-table"
2268
+ />
2269
+ `,
2270
+ }
2271
+ },
2272
+ }
2273
+
2274
+ export const ResizableColumns: Story = {
2275
+ parameters: {
2276
+ sourceCode: [
2277
+ {
2278
+ name: 'Template',
2279
+ code: `
2280
+ <template>
2281
+ <SyTable
2282
+ v-model:options="options"
2283
+ :headers="headers"
2284
+ :items="items"
2285
+ :resizable-columns="true"
2286
+ suffix="resizable-columns"
2287
+ />
2288
+ </template>
2289
+ `,
2290
+ },
2291
+ {
2292
+ name: 'Script',
2293
+ code: `
2294
+ <script setup lang="ts">
2295
+ import { ref } from 'vue'
2296
+ import { SyTable } from '@cnamts/synapse'
2297
+
2298
+ const options = ref({
2299
+ itemsPerPage: 4,
2300
+ })
2301
+
2302
+ const headers = ref([
2303
+ {
2304
+ title: 'Nom',
2305
+ key: 'lastname',
2306
+ },
2307
+ {
2308
+ title: 'Prénom',
2309
+ key: 'firstname',
2310
+ },
2311
+ {
2312
+ title: 'Email',
2313
+ value: 'email',
2314
+ },
2315
+ ])
2316
+
2317
+ const items = ref([
2318
+ {
2319
+ firstname: 'Virginie',
2320
+ lastname: 'Beauchesne',
2321
+ email: 'virginie.beauchesne@example.com',
2322
+ },
2323
+ {
2324
+ firstname: 'Simone',
2325
+ lastname: 'Bellefeuille',
2326
+ email: 'simone.bellefeuille@example.com',
2327
+ },
2328
+ {
2329
+ firstname: 'Étienne',
2330
+ lastname: 'Salois',
2331
+ email: 'etienne.salois@example.com',
2332
+ },
2333
+ {
2334
+ firstname: 'Thierry',
2335
+ lastname: 'Bobu',
2336
+ email: 'thierry.bobu@example.com',
2337
+ },
2338
+ {
2339
+ firstname: 'Bernadette',
2340
+ lastname: 'Langelier',
2341
+ email: 'bernadette.langelier@exemple.com'
2342
+ },
2343
+ {
2344
+ firstname: 'Agate',
2345
+ lastname: 'Roy',
2346
+ email: 'agate.roy@exemple.com'
2347
+ }
2348
+ ])
2349
+ </script>
2350
+ `,
2351
+ },
2352
+ ],
2353
+ },
2354
+ args: {
2355
+ 'resizableColumns': true,
2356
+ 'headers': [
2357
+ {
2358
+ title: 'Nom',
2359
+ key: 'lastname',
2360
+ },
2361
+ {
2362
+ title: 'Prénom',
2363
+ key: 'firstname',
2364
+ },
2365
+ {
2366
+ title: 'Email',
2367
+ value: 'email',
2368
+ },
2369
+ ],
2370
+ 'items': [
2371
+ {
2372
+ firstname: 'Virginie',
2373
+ lastname: 'Beauchesne',
2374
+ email: 'virginie.beauchesne@example.com',
2375
+ },
2376
+ {
2377
+ firstname: 'Simone',
2378
+ lastname: 'Bellefeuille',
2379
+ email: 'simone.bellefeuille@example.com',
2380
+ },
2381
+ {
2382
+ firstname: 'Étienne',
2383
+ lastname: 'Salois',
2384
+ email: 'etienne.salois@example.com',
2385
+ },
2386
+ {
2387
+ firstname: 'Thierry',
2388
+ lastname: 'Bobu',
2389
+ email: 'thierry.bobu@example.com',
2390
+ },
2391
+ {
2392
+ firstname: 'Bernadette',
2393
+ lastname: 'Langelier',
2394
+ email: 'bernadette.langelier@exemple.com',
2395
+ },
2396
+ {
2397
+ firstname: 'Agate',
2398
+ lastname: 'Roy',
2399
+ email: 'agate.roy@exemple.com',
2400
+ },
2401
+ ],
2402
+ 'options': {
2403
+ itemsPerPage: 4,
2404
+ },
2405
+ 'suffix': 'resizable-columns',
2406
+ 'onUpdate:options': fn(),
2407
+ },
2408
+ render: (args) => {
2409
+ return {
2410
+ components: { SyTable },
2411
+ setup() {
2412
+ return { args }
2413
+ },
2414
+ template: `
2415
+ <SyTable
2416
+ v-model:options="args.options"
2417
+ v-bind="args"
2418
+ suffix="resizable-columns"
2419
+ />
2420
+ `,
2421
+ }
2422
+ },
2423
+ }
2424
+
2425
+ export const RowSelection: Story = {
2426
+ name: 'Row Selection',
2427
+ parameters: {
2428
+ sourceCode: [
2429
+ {
2430
+ name: 'Template',
2431
+ code: `
2432
+ <template>
2433
+ <SyTable
2434
+ v-model:options="options"
2435
+ v-model="selection"
2436
+ :headers="headers"
2437
+ :items="items"
2438
+ show-select
2439
+ show-filters
2440
+ suffix="selection-table"
2441
+ />
2442
+ <div v-if="selection.length" class="mt-4 pa-4 bg-grey-lighten-4">
2443
+ <h3 class="text-h6 mb-3">Item(s) sélectionné(s) ({{ selection.length }})</h3>
2444
+ <div v-for="(item, index) in selection" :key="index" class="mb-2 pa-2 bg-grey-lighten-3">
2445
+ <div><strong>Nom:</strong> {{ typeof item === 'object' ? item.lastname : items.find(i => JSON.stringify(i) === item)?.lastname }}</div>
2446
+ <div><strong>Prénom:</strong> {{ typeof item === 'object' ? item.firstname : items.find(i => JSON.stringify(i) === item)?.firstname }}</div>
2447
+ <div><strong>Email:</strong> {{ typeof item === 'object' ? item.email : items.find(i => JSON.stringify(i) === item)?.email }}</div>
2448
+ </div>
2449
+ </div>
2450
+ </template>
2451
+ `,
2452
+ },
2453
+ {
2454
+ name: 'Script',
2455
+ code: `
2456
+ <script setup lang="ts">
2457
+ import { ref } from 'vue'
2458
+ import { SyTable } from '@cnamts/synapse'
2459
+
2460
+ const options = ref({
2461
+ itemsPerPage: 4,
2462
+ })
2463
+
2464
+ const headers = ref([
2465
+ {
2466
+ title: 'Nom',
2467
+ key: 'lastname',
2468
+ },
2469
+ {
2470
+ title: 'Prénom',
2471
+ key: 'firstname',
2472
+ },
2473
+ {
2474
+ title: 'Email',
2475
+ value: 'email',
2476
+ },
2477
+ ])
2478
+
2479
+ const items = ref([
2480
+ {
2481
+ firstname: 'Virginie',
2482
+ lastname: 'Beauchesne',
2483
+ email: 'virginie.beauchesne@example.com',
2484
+ },
2485
+ {
2486
+ firstname: 'Simone',
2487
+ lastname: 'Bellefeuille',
2488
+ email: 'simone.bellefeuille@example.com',
2489
+ },
2490
+ {
2491
+ firstname: 'Étienne',
2492
+ lastname: 'Salois',
2493
+ email: 'etienne.salois@example.com',
2494
+ },
2495
+ {
2496
+ firstname: 'Thierry',
2497
+ lastname: 'Bobu',
2498
+ email: 'thierry.bobu@example.com',
2499
+ },
2500
+ {
2501
+ firstname: 'Bernadette',
2502
+ lastname: 'Langelier',
2503
+ email: 'bernadette.langelier@exemple.com'
2504
+ },
2505
+ {
2506
+ firstname: 'Agate',
2507
+ lastname: 'Roy',
2508
+ email: 'agate.roy@exemple.com'
2509
+ }
2510
+ ])
2511
+ </script>
2512
+ `,
2513
+ },
2514
+ ],
2515
+ },
2516
+ args: {
2517
+ headers: [
2518
+ {
2519
+ title: 'Nom',
2520
+ key: 'lastname',
2521
+ },
2522
+ {
2523
+ title: 'Prénom',
2524
+ key: 'firstname',
2525
+ },
2526
+ {
2527
+ title: 'Email',
2528
+ value: 'email',
2529
+ },
2530
+ ],
2531
+ items: [
2532
+ {
2533
+ firstname: 'Virginie',
2534
+ lastname: 'Beauchesne',
2535
+ email: 'virginie.beauchesne@example.com',
2536
+ },
2537
+ {
2538
+ firstname: 'Simone',
2539
+ lastname: 'Bellefeuille',
2540
+ email: 'simone.bellefeuille@example.com',
2541
+ },
2542
+ {
2543
+ firstname: 'Étienne',
2544
+ lastname: 'Salois',
2545
+ email: 'etienne.salois@example.com',
2546
+ },
2547
+ {
2548
+ firstname: 'Thierry',
2549
+ lastname: 'Bobu',
2550
+ email: 'thierry.bobu@example.com',
2551
+ },
2552
+ {
2553
+ firstname: 'Bernadette',
2554
+ lastname: 'Langelier',
2555
+ email: 'bernadette.langelier@exemple.com',
2556
+ },
2557
+ {
2558
+ firstname: 'Agate',
2559
+ lastname: 'Roy',
2560
+ email: 'agate.roy@exemple.com',
2561
+ },
2562
+ ],
2563
+ options: {
2564
+ itemsPerPage: 4,
2565
+ },
2566
+ caption: '',
2567
+ suffix: 'selection-table',
2568
+ density: 'default',
2569
+ striped: false,
2570
+ showSelect: true,
2571
+ showFilters: true,
2572
+ },
2573
+ render(args) {
2574
+ return {
2575
+ components: { SyTable },
2576
+ setup() {
2577
+ const items = ref(args.items)
2578
+ const selection = ref([])
2579
+ return { args, selection, items }
2580
+ },
2581
+ template: `
2582
+ <div>
2583
+ <SyTable
2584
+ v-model:options="args.options"
2585
+ v-model="selection"
2586
+ v-bind="args"
2587
+ suffix="selection-table"
2588
+ />
2589
+ <div v-if="selection.length" class="mt-4 pa-4 bg-grey-lighten-4">
2590
+ <h3 class="text-h6 mb-3">Item(s) sélectionné(s) ({{ selection.length }})</h3>
2591
+ <div v-for="(item, index) in selection" :key="index" class="mb-2 pa-2 bg-grey-lighten-3">
2592
+ <div><strong>Nom:</strong> {{ typeof item === 'object' ? item.lastname : args.items.find(i => JSON.stringify(i) === item)?.lastname }}</div>
2593
+ <div><strong>Prénom:</strong> {{ typeof item === 'object' ? item.firstname : args.items.find(i => JSON.stringify(i) === item)?.firstname }}</div>
2594
+ <div><strong>Email:</strong> {{ typeof item === 'object' ? item.email : args.items.find(i => JSON.stringify(i) === item)?.email }}</div>
2595
+ </div>
2596
+ </div>
2597
+ </div>
2598
+ `,
2599
+ }
2600
+ },
2601
+ }
2602
+
2603
+ export const ColumnControls: Story = {
2604
+ parameters: {
2605
+ sourceCode: [
2606
+ {
2607
+ name: 'Template',
2608
+ code: `
2609
+ <template>
2610
+ <SyTable
2611
+ v-model:options="options"
2612
+ :headers="headers"
2613
+ :items="items"
2614
+ suffix="column-control-table"
2615
+ enable-column-controls
2616
+ />
2617
+ </template>
2618
+ `,
2619
+ },
2620
+ {
2621
+ name: 'Script',
2622
+ code: `
2623
+ <script setup lang="ts">
2624
+ import { ref } from 'vue'
2625
+ import { SyTable } from '@cnamts/synapse'
2626
+
2627
+ const options = ref({
2628
+ itemsPerPage: 4,
2629
+ })
2630
+
2631
+ const headers = ref([
2632
+ {
2633
+ title: 'Nom',
2634
+ key: 'lastname',
2635
+ },
2636
+ {
2637
+ title: 'Prénom',
2638
+ key: 'firstname',
2639
+ },
2640
+ {
2641
+ title: 'Email',
2642
+ value: 'email',
2643
+ },
2644
+ ])
2645
+
2646
+ const items = ref([
2647
+ {
2648
+ firstname: 'Virginie',
2649
+ lastname: 'Beauchesne',
2650
+ email: 'virginie.beauchesne@example.com',
2651
+ },
2652
+ {
2653
+ firstname: 'Simone',
2654
+ lastname: 'Bellefeuille',
2655
+ email: 'simone.bellefeuille@example.com',
2656
+ },
2657
+ {
2658
+ firstname: 'Étienne',
2659
+ lastname: 'Salois',
2660
+ email: 'etienne.salois@example.com',
2661
+ },
2662
+ {
2663
+ firstname: 'Thierry',
2664
+ lastname: 'Bobu',
2665
+ email: 'thierry.bobu@example.com',
2666
+ },
2667
+ {
2668
+ firstname: 'Bernadette',
2669
+ lastname: 'Langelier',
2670
+ email: 'bernadette.langelier@exemple.com'
2671
+ },
2672
+ {
2673
+ firstname: 'Agate',
2674
+ lastname: 'Roy',
2675
+ email: 'agate.roy@exemple.com'
2676
+ }
2677
+ ])
2678
+ </script>
2679
+ `,
2680
+ },
2681
+ ],
2682
+ },
2683
+ args: {
2684
+ 'headers': [
2685
+ {
2686
+ title: 'Nom',
2687
+ key: 'lastname',
2688
+ },
2689
+ {
2690
+ title: 'Prénom',
2691
+ key: 'firstname',
2692
+ },
2693
+ {
2694
+ title: 'Email',
2695
+ value: 'email',
2696
+ },
2697
+ ],
2698
+ 'items': [
2699
+ {
2700
+ firstname: 'Virginie',
2701
+ lastname: 'Beauchesne',
2702
+ email: 'virginie.beauchesne@example.com',
2703
+ },
2704
+ {
2705
+ firstname: 'Simone',
2706
+ lastname: 'Bellefeuille',
2707
+ email: 'simone.bellefeuille@example.com',
2708
+ },
2709
+ {
2710
+ firstname: 'Étienne',
2711
+ lastname: 'Salois',
2712
+ email: 'etienne.salois@example.com',
2713
+ },
2714
+ {
2715
+ firstname: 'Thierry',
2716
+ lastname: 'Bobu',
2717
+ email: 'thierry.bobu@example.com',
2718
+ },
2719
+ {
2720
+ firstname: 'Bernadette',
2721
+ lastname: 'Langelier',
2722
+ email: 'bernadette.langelier@exemple.com',
2723
+ },
2724
+ {
2725
+ firstname: 'Agate',
2726
+ lastname: 'Roy',
2727
+ email: 'agate.roy@exemple.com',
2728
+ },
2729
+ ],
2730
+ 'options': {
2731
+ itemsPerPage: 4,
2732
+ },
2733
+ 'caption': '',
2734
+ 'suffix': 'column-control-table',
2735
+ 'density': 'default',
2736
+ 'striped': false,
2737
+ 'enableColumnControls': true,
2738
+ 'onUpdate:options': fn(),
2739
+ },
2740
+ render: (args) => {
2741
+ return {
2742
+ components: { SyTable },
2743
+ setup() {
2744
+ return { args }
2745
+ },
2746
+ template: `
2747
+ <SyTable
2748
+ v-model:options="args.options"
2749
+ v-bind="args"
2750
+ />
2751
+ `,
2752
+ }
2753
+ },
2754
+ }