@cnamts/synapse 1.0.6 → 1.0.7

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 (223) hide show
  1. package/dist/{DateFilter-BlOpwEVq.js → DateFilter-CHDLz2EO.js} +1 -1
  2. package/dist/{NumberFilter-BPUXE4wY.js → NumberFilter-DXNQ4Uls.js} +1 -1
  3. package/dist/{PeriodFilter-B2yx329_.js → PeriodFilter-C8Qf3Jcn.js} +1 -1
  4. package/dist/{SelectFilter-CedKn1oV.js → SelectFilter-B2Ejs4Cb.js} +1 -1
  5. package/dist/{TextFilter-DkhJjRtR.js → TextFilter-CfR5_A1S.js} +1 -1
  6. package/dist/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.d.ts +116 -0
  7. package/dist/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  8. package/dist/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.d.ts +220 -0
  9. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.d.ts +68 -0
  10. package/dist/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.d.ts +70 -0
  11. package/dist/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.d.ts +204 -0
  12. package/dist/components/Amelipro/AmeliproAutoCompleteField/AmeliproAutoCompleteField.d.ts +26 -26
  13. package/dist/components/Amelipro/AmeliproBadge/AmeliproBadge.d.ts +59 -0
  14. package/dist/components/Amelipro/AmeliproBtn/AmeliproBtn.d.ts +3 -3
  15. package/dist/components/Amelipro/AmeliproCaptcha/AmeliproCaptcha.d.ts +1 -1
  16. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarousel.d.ts +214 -0
  17. package/dist/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.d.ts +70 -0
  18. package/dist/components/Amelipro/AmeliproCarousel/types.d.ts +7 -0
  19. package/dist/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.d.ts +125 -0
  20. package/dist/components/Amelipro/AmeliproIconBtn/AmeliproIconBtn.d.ts +1 -1
  21. package/dist/components/Amelipro/AmeliproIllustratedDataTile/AmeliproIllustratedDataTile.d.ts +2 -2
  22. package/dist/components/Amelipro/AmeliproResultList/AmeliproResultList.d.ts +164 -0
  23. package/dist/components/Amelipro/AmeliproSelect/AmeliproSelect.d.ts +27 -27
  24. package/dist/components/Amelipro/AmeliproStateTile/AmeliproStateTile.d.ts +1 -1
  25. package/dist/components/Amelipro/AmeliproTable/AmeliproTable.d.ts +1 -1
  26. package/dist/components/Amelipro/AmeliproTabs/AmeliproTabs.d.ts +32 -32
  27. package/dist/components/Amelipro/AmeliproTextArea/AmeliproTextArea.d.ts +6 -6
  28. package/dist/components/Amelipro/AmeliproTextField/AmeliproTextField.d.ts +7 -7
  29. package/dist/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.d.ts +1 -1
  30. package/dist/components/Amelipro/AmeliproTooltips/AmeliproTooltips.d.ts +2 -2
  31. package/dist/components/ChipList/ChipList.d.ts +4 -0
  32. package/dist/components/ChipList/locales.d.ts +4 -2
  33. package/dist/components/CookiesSelection/CookiesInformation/CookiesInformation.d.ts +8 -8
  34. package/dist/components/Customs/Selects/SySelect/SySelect.d.ts +445 -8
  35. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +2 -0
  36. package/dist/components/Customs/SyTabs/SyTabs.d.ts +71 -0
  37. package/dist/components/Customs/SyTabs/config.d.ts +17 -0
  38. package/dist/components/Customs/SyTabs/types.d.ts +11 -0
  39. package/dist/components/Customs/SyTextField/SyTextField.d.ts +9 -9
  40. package/dist/components/DataList/DataList.d.ts +1 -1
  41. package/dist/components/DatePicker/CalendarMode/DatePicker.d.ts +4811 -240
  42. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +52 -33
  43. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +23 -10
  44. package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +1 -0
  45. package/dist/components/DatePicker/composables/useTodayButton.d.ts +1 -0
  46. package/dist/components/DialogBox/DialogBox.d.ts +219 -0
  47. package/dist/components/HeaderLoading/HeaderLoading.d.ts +27 -0
  48. package/dist/components/HeaderNavigationBar/HeaderNavigationBar.d.ts +110 -3
  49. package/dist/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.d.ts +19 -1
  50. package/dist/components/LangBtn/LangBtn.d.ts +2 -2
  51. package/dist/components/NirField/NirField.d.ts +18 -18
  52. package/dist/components/PeriodField/PeriodField.d.ts +10766 -1620
  53. package/dist/components/PhoneField/PhoneField.d.ts +1866 -2
  54. package/dist/components/PhoneField/indicatifs.d.ts +1 -0
  55. package/dist/components/PhoneField/locales.d.ts +1 -0
  56. package/dist/components/RangeField/RangeField.d.ts +1 -1
  57. package/dist/components/RangeField/RangeSlider/RangeSlider.d.ts +1 -1
  58. package/dist/components/SubHeader/SubHeader.d.ts +8 -0
  59. package/dist/components/SubHeader/locales.d.ts +1 -0
  60. package/dist/components/SyTextArea/SyTextArea.d.ts +6 -6
  61. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +5 -4
  62. package/dist/components/Tables/SyTable/SyTable.d.ts +5 -4
  63. package/dist/components/Tables/common/SyTablePagination.d.ts +448 -7
  64. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +2 -2
  65. package/dist/components/Tables/common/types.d.ts +2 -0
  66. package/dist/components/index.d.ts +9 -0
  67. package/dist/design-system-v3.js +173 -164
  68. package/dist/design-system-v3.umd.cjs +288 -261
  69. package/dist/{main-BXPFSAB4.js → main-C66C1BkG.js} +12984 -11291
  70. package/dist/style.css +1 -1
  71. package/package.json +1 -1
  72. package/src/assets/amelipro/icons.ts +38 -11
  73. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.mdx +20 -0
  74. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.stories.ts +135 -0
  75. package/src/components/Amelipro/AmeliproAccordionGroup/AmeliproAccordionGroup.vue +107 -0
  76. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/AmeliproAccordionGroup.spec.ts +37 -0
  77. package/src/components/Amelipro/AmeliproAccordionGroup/__tests__/__snapshots__/AmeliproAccordionGroup.spec.ts.snap +513 -0
  78. package/src/components/Amelipro/AmeliproAccordionGroup/types.d.ts +4 -0
  79. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.mdx +16 -0
  80. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.stories.ts +300 -0
  81. package/src/components/Amelipro/AmeliproAccordionList/AmeliproAccordionList.vue +288 -0
  82. package/src/components/Amelipro/AmeliproAccordionList/__tests__/AmeliproAccordionList.spec.ts +38 -0
  83. package/src/components/Amelipro/AmeliproAccordionList/__tests__/__snapshots__/AmeliproAccordionList.spec.ts.snap +1712 -0
  84. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.mdx +19 -0
  85. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.stories.ts +68 -0
  86. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResult.vue +66 -0
  87. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/AmeliproAccordionResultTemplate.vue +145 -0
  88. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/AmeliproAccordionResultTemplate.spec.ts +24 -0
  89. package/src/components/Amelipro/AmeliproAccordionResult/AmeliproAccordionResultTemplate/__tests__/__snapshots__/AmeliproAccordionResultTemplate.spec.ts.snap +127 -0
  90. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/AmeliproAccordionResult.spec.ts +24 -0
  91. package/src/components/Amelipro/AmeliproAccordionResult/__tests__/__snapshots__/AmeliproAccordionResult.spec.ts.snap +123 -0
  92. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.mdx +20 -0
  93. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.stories.ts +273 -0
  94. package/src/components/Amelipro/AmeliproAccordionResultList/AmeliproAccordionResultList.vue +275 -0
  95. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/AmeliproAccordionResultList.spec.ts +38 -0
  96. package/src/components/Amelipro/AmeliproAccordionResultList/__tests__/__snapshots__/AmeliproAccordionResultList.spec.ts.snap +1593 -0
  97. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.mdx +15 -0
  98. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.stories.ts +54 -0
  99. package/src/components/Amelipro/AmeliproBadge/AmeliproBadge.vue +76 -0
  100. package/src/components/Amelipro/AmeliproBadge/__tests__/AmeliproBadge.spec.ts +20 -0
  101. package/src/components/Amelipro/AmeliproBadge/__tests__/__snapshots__/AmeliproBadge.spec.ts.snap +19 -0
  102. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.mdx +15 -0
  103. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.stories.ts +191 -0
  104. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarousel.vue +263 -0
  105. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/AmeliproCarouselItem.vue +93 -0
  106. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/AmeliproCarouselItem.spec.ts +24 -0
  107. package/src/components/Amelipro/AmeliproCarousel/AmeliproCarouselItem/__tests__/__snapshots__/AmeliproCarouselItem.spec.ts.snap +43 -0
  108. package/src/components/Amelipro/AmeliproCarousel/__tests__/AmeliproCarousel.spec.ts +40 -0
  109. package/src/components/Amelipro/AmeliproCarousel/__tests__/__snapshots__/AmeliproCarousel.spec.ts.snap +342 -0
  110. package/src/components/Amelipro/AmeliproCarousel/types.d.ts +8 -0
  111. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.mdx +18 -0
  112. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.stories.ts +67 -0
  113. package/src/components/Amelipro/AmeliproClickableTile/AmeliproClickableTile.vue +233 -0
  114. package/src/components/Amelipro/AmeliproClickableTile/tests/AmeliproClickableTile.spec.ts +21 -0
  115. package/src/components/Amelipro/AmeliproClickableTile/tests/__snapshots__/AmeliproClickableTile.spec.ts.snap +140 -0
  116. package/src/components/Amelipro/AmeliproHeader/AmeliproHeader.vue +7 -1
  117. package/src/components/Amelipro/AmeliproHeader/tests/__snapshots__/AmeliproHeader.spec.ts.snap +5 -4
  118. package/src/components/Amelipro/AmeliproIcon/iconList.ts +6 -0
  119. package/src/components/Amelipro/AmeliproPageLayout/tests/__snapshots__/AmeliproPageLayout.spec.ts.snap +5 -4
  120. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.mdx +15 -0
  121. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.stories.ts +264 -0
  122. package/src/components/Amelipro/AmeliproResultList/AmeliproResultList.vue +231 -0
  123. package/src/components/Amelipro/AmeliproResultList/__tests__/AmeliproResultList.spec.ts +37 -0
  124. package/src/components/Amelipro/AmeliproResultList/__tests__/__snapshots__/AmeliproResultList.spec.ts.snap +434 -0
  125. package/src/components/Amelipro/AmeliproTable/AmeliproTable.vue +6 -5
  126. package/src/components/Amelipro/AmeliproTable/__tests__/__snapshots__/AmeliproTable.spec.ts.snap +23 -26
  127. package/src/components/Amelipro/AmeliproTileBtn/AmeliproTileBtn.stories.ts +2 -2
  128. package/src/components/ChipList/Accessibilite.stories.ts +4 -0
  129. package/src/components/ChipList/ChipList.vue +185 -42
  130. package/src/components/ChipList/locales.ts +4 -2
  131. package/src/components/ChipList/tests/chipList.spec.ts +7 -4
  132. package/src/components/Customs/Selects/SelectOverview.mdx +18 -15
  133. package/src/components/Customs/Selects/SyBtnSelect/SyBtnSelect.stories.ts +10 -10
  134. package/src/components/Customs/Selects/SySelect/SySelect.stories.ts +13 -5
  135. package/src/components/Customs/Selects/SySelect/SySelect.vue +108 -37
  136. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +3 -1
  137. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +165 -0
  138. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +28 -9
  139. package/src/components/Customs/SyTabs/Accessibilite.mdx +309 -0
  140. package/src/components/Customs/SyTabs/SyTabs.mdx +117 -0
  141. package/src/components/Customs/SyTabs/SyTabs.stories.ts +354 -0
  142. package/src/components/Customs/SyTabs/SyTabs.vue +350 -0
  143. package/src/components/Customs/SyTabs/config.ts +17 -0
  144. package/src/components/Customs/SyTabs/tests/SyTabs.spec.ts +425 -0
  145. package/src/components/Customs/SyTabs/types.ts +12 -0
  146. package/src/components/Customs/SyTextField/SyTextField.mdx +3 -0
  147. package/src/components/Customs/SyTextField/SyTextField.stories.ts +142 -1
  148. package/src/components/Customs/SyTextField/SyTextField.vue +19 -16
  149. package/src/components/DataList/DataList.vue +47 -49
  150. package/src/components/DataListGroup/DataListGroup.vue +1 -1
  151. package/src/components/DataListItem/DataListItem.vue +67 -63
  152. package/src/components/DataListItem/tests/DataListItem.spec.ts +2 -2
  153. package/src/components/DatePicker/CalendarMode/DatePicker.stories.ts +3 -3
  154. package/src/components/DatePicker/CalendarMode/DatePicker.vue +49 -13
  155. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +412 -649
  156. package/src/components/DatePicker/DatePickerValidationExample/CalendarMode.stories.ts +215 -0
  157. package/src/components/DatePicker/DatePickerValidationExample/ComplexDatePicker.stories.ts +218 -0
  158. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.mdx +2 -0
  159. package/src/components/DatePicker/DatePickerValidationExample/DatePickerValidation.stories.ts +1 -1
  160. package/src/components/DatePicker/DatePickerValidationExample/DateTextInput.stories.ts +218 -0
  161. package/src/components/DatePicker/DatePickerValidationExample/MultiMode.stories.ts +281 -0
  162. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +17 -4
  163. package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +111 -18
  164. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +238 -6
  165. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +716 -757
  166. package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +4 -4
  167. package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +17 -10
  168. package/src/components/DatePicker/composables/useDateInputEditing.ts +52 -22
  169. package/src/components/DatePicker/composables/useDisplayedDateString.ts +18 -4
  170. package/src/components/DatePicker/composables/useTodayButton.ts +13 -1
  171. package/src/components/DatePicker/utils/dateFormattingUtils.ts +79 -14
  172. package/src/components/DialogBox/DialogBox.stories.ts +12 -0
  173. package/src/components/DialogBox/DialogBox.vue +16 -11
  174. package/src/components/DialogBox/tests/DialogBox.spec.ts +22 -0
  175. package/src/components/HeaderLoading/Accessibilite.mdx +429 -8
  176. package/src/components/HeaderLoading/Accessibilite.stories.ts +4 -0
  177. package/src/components/HeaderLoading/HeaderLoading.vue +59 -0
  178. package/src/components/HeaderNavigationBar/HeaderNavigationBar.mdx +17 -2
  179. package/src/components/HeaderNavigationBar/HeaderNavigationBar.stories.ts +91 -2
  180. package/src/components/HeaderNavigationBar/HeaderNavigationBar.vue +37 -1
  181. package/src/components/HeaderNavigationBar/HorizontalNavbar/HorizontalNavbar.vue +276 -21
  182. package/src/components/HeaderNavigationBar/tests/HeaderNavigationBar.spec.ts +2 -2
  183. package/src/components/NirField/NirField.mdx +3 -0
  184. package/src/components/NirField/NirField.vue +10 -1
  185. package/src/components/NirField/tests/NirField.spec.ts +81 -0
  186. package/src/components/PasswordField/PasswordField.mdx +3 -0
  187. package/src/components/PeriodField/PeriodField.mdx +2 -0
  188. package/src/components/PeriodField/PeriodField.stories.ts +195 -0
  189. package/src/components/PhoneField/Accessibilite.stories.ts +4 -0
  190. package/src/components/PhoneField/PhoneField.mdx +3 -1
  191. package/src/components/PhoneField/PhoneField.stories.ts +285 -1
  192. package/src/components/PhoneField/PhoneField.vue +228 -95
  193. package/src/components/PhoneField/indicatifs.ts +102 -102
  194. package/src/components/PhoneField/locales.ts +1 -0
  195. package/src/components/PhoneField/tests/PhoneField.spec.ts +429 -2
  196. package/src/components/SkipLink/SkipLink.vue +3 -31
  197. package/src/components/SkipLink/tests/skipLink.spec.ts +0 -21
  198. package/src/components/SubHeader/Accessibilite.stories.ts +8 -0
  199. package/src/components/SubHeader/SubHeader.mdx +1 -0
  200. package/src/components/SubHeader/SubHeader.stories.ts +179 -60
  201. package/src/components/SubHeader/SubHeader.vue +45 -15
  202. package/src/components/SubHeader/locales.ts +1 -0
  203. package/src/components/SyAlert/SyAlert.vue +6 -0
  204. package/src/components/Tables/SyServerTable/SyServerTable.mdx +3 -10
  205. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +242 -0
  206. package/src/components/Tables/SyServerTable/SyServerTable.vue +29 -10
  207. package/src/components/Tables/SyTable/SyTable.mdx +3 -10
  208. package/src/components/Tables/SyTable/SyTable.stories.ts +242 -0
  209. package/src/components/Tables/SyTable/SyTable.vue +2 -0
  210. package/src/components/Tables/common/SyTablePagination.vue +13 -6
  211. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +157 -0
  212. package/src/components/Tables/common/types.ts +2 -0
  213. package/src/components/index.ts +9 -0
  214. package/src/composables/useFilterable/useFilterable.ts +10 -0
  215. package/src/designTokens/tokens/amelipro/apColors.ts +1 -1
  216. package/src/designTokens/tokens/cnam/cnamSemantic.ts +3 -3
  217. package/src/stories/Components/Components.stories.ts +1 -1
  218. package/src/stories/GuideDuDev/FormValidationGuide.mdx +342 -0
  219. package/src/stories/Templates/Templates.stories.ts +1 -1
  220. package/src/utils/functions/ameliproColors/ameliproColors.ts +1 -1
  221. package/dist/components/DataList/locales.d.ts +0 -3
  222. package/src/components/DataList/locales.ts +0 -3
  223. package/src/components/PhoneField/tests/PhoneField.additional.spec.ts +0 -266
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { ref } from 'vue'
2
+ import { computed, ref } from 'vue'
3
3
  import { mdiKeyboardBackspace } from '@mdi/js'
4
4
 
5
5
  import { config } from './config'
@@ -8,26 +8,36 @@
8
8
  import useCustomizableOptions, { type CustomizableOptions } from '@/composables/useCustomizableOptions'
9
9
  import { useWidthable, type Widthable } from '@/composables/widthable'
10
10
 
11
+ import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue'
11
12
  import DataListGroup from '../DataListGroup/DataListGroup.vue'
12
13
  import HeaderLoading from '../HeaderLoading/HeaderLoading.vue'
13
14
  import type { DataListActionEvent, DataListGroupItems } from '../DataListGroup/types'
15
+ import { VThemeProvider } from 'vuetify/components'
14
16
 
15
17
  const props = withDefaults(defineProps<CustomizableOptions & Widthable & {
16
18
  hideBackBtn?: boolean
17
19
  backBtnText?: string
20
+ backBtnAccessibleName?: string
18
21
  titleText?: string
22
+ titleAccessibleName?: string
19
23
  subTitleText?: string
24
+ subTitleAccessibleName?: string
20
25
  dataListGroupItems?: DataListGroupItems | undefined
21
26
  loading?: boolean
22
27
  renderHtmlValue?: boolean
28
+ renderFixedHeight?: boolean
23
29
  }>(), {
24
30
  hideBackBtn: false,
25
31
  backBtnText: locales.backBtnText,
32
+ backBtnAccessibleName: undefined,
26
33
  titleText: undefined,
34
+ titleAccessibleName: undefined,
27
35
  subTitleText: undefined,
36
+ subTitleAccessibleName: undefined,
28
37
  dataListGroupItems: undefined,
29
38
  loading: false,
30
39
  renderHtmlValue: false,
40
+ renderFixedHeight: false,
31
41
  })
32
42
 
33
43
  const options = useCustomizableOptions(config, props)
@@ -40,6 +50,13 @@
40
50
  function emitItemAction(eventValue: DataListActionEvent) {
41
51
  emit('click:list-item', eventValue)
42
52
  }
53
+
54
+ // Add the accessible name of the back button only if the default button label has been filled in.
55
+ const effectiveBackBtnAccessibleName = computed(() => {
56
+ return props.backBtnAccessibleName ?? (
57
+ props.backBtnText === locales.backBtnText ? locales.backBtnAccessibleName : undefined
58
+ )
59
+ })
43
60
  </script>
44
61
 
45
62
  <template>
@@ -64,20 +81,29 @@
64
81
  v-else
65
82
  v-bind="options.backBtn"
66
83
  class="vd-sub-header-back-btn mb-1"
84
+ :aria-label="effectiveBackBtnAccessibleName"
67
85
  @click="$emit('back')"
68
86
  >
69
87
  <slot name="back-btn-icon">
70
- <VIcon class="mr-2">
71
- {{ backArrowIcon }}
72
- </VIcon>
88
+ <SyIcon
89
+ class="mr-2"
90
+ :icon="backArrowIcon"
91
+ :decorative="true"
92
+ />
73
93
  </slot>
74
94
  {{ backBtnText }}
75
95
  </VBtn>
76
96
  </VFadeTransition>
77
97
  </slot>
78
98
 
79
- <div class="vd-sub-header-content d-flex justify-space-between">
80
- <div class="vd-sub-header-informations d-flex flex-column flex-shrink-0 mr-10">
99
+ <div
100
+ class="vd-sub-header-content d-flex justify-space-between flex-wrap ga-8"
101
+ :class="renderFixedHeight ? 'flex-nowrap flex-shrink-0' : 'flex-wrap'"
102
+ >
103
+ <div
104
+ class="vd-sub-header-informations d-flex flex-column mr-10"
105
+ :class="{ 'flex-shrink-0': renderFixedHeight }"
106
+ >
81
107
  <slot name="title">
82
108
  <VFadeTransition mode="out-in">
83
109
  <HeaderLoading
@@ -89,6 +115,7 @@
89
115
  <h2
90
116
  v-else-if="titleText"
91
117
  class="text-h5 font-weight-bold"
118
+ :aria-label="titleAccessibleName"
92
119
  >
93
120
  {{ titleText }}
94
121
  </h2>
@@ -111,6 +138,7 @@
111
138
  v-else
112
139
  class="text-h6 font-weight-bold mt-1 mb-0"
113
140
  :style="{ color: 'rgba(255, 255, 255, .7)' }"
141
+ :aria-label="subTitleAccessibleName"
114
142
  >
115
143
  {{ subTitleText }}
116
144
  </p>
@@ -121,15 +149,17 @@
121
149
  </div>
122
150
 
123
151
  <slot name="right-content">
124
- <DataListGroup
125
- v-if="dataListGroupItems"
126
- :items="dataListGroupItems"
127
- :loading="loading"
128
- :render-html-value="renderHtmlValue"
129
- item-width="auto"
130
- class="flex-nowrap flex-shrink-0"
131
- @click:list-item="emitItemAction"
132
- />
152
+ <VThemeProvider theme="dark">
153
+ <DataListGroup
154
+ v-if="dataListGroupItems"
155
+ :items="dataListGroupItems"
156
+ :loading="loading"
157
+ :render-html-value="renderHtmlValue"
158
+ item-width="auto"
159
+ :class="renderFixedHeight ? 'flex-nowrap flex-shrink-0' : 'flex-wrap'"
160
+ @click:list-item="emitItemAction"
161
+ />
162
+ </VThemeProvider>
133
163
  </slot>
134
164
  </div>
135
165
  </VSheet>
@@ -1,3 +1,4 @@
1
1
  export const locales = {
2
2
  backBtnText: 'Retour',
3
+ backBtnAccessibleName: 'Retour vers la page précédente',
3
4
  }
@@ -129,6 +129,12 @@
129
129
  display: none;
130
130
  }
131
131
 
132
+ :deep(.v-alert__prepend),
133
+ :deep(.v-alert__close) {
134
+ grid-row: 1 / span 2;
135
+ height: 100%;
136
+ }
137
+
132
138
  :deep(.v-alert__close) {
133
139
  align-self: center;
134
140
  }
@@ -31,38 +31,33 @@ Pour gérer individuellement le stockage des options pour différents tableaux,
31
31
  ### Tri côté serveur
32
32
 
33
33
  Le composant permet de trier les données par colonne en déléguant le tri au serveur.
34
- <Canvas story={{height: '550px'}} of={SyServerTable.ServerSortBy} />
35
34
 
36
35
  Le multi-tri est également supporté. Vous pouvez activer cette fonctionnalité en utilisant la prop `multi-sort`.
37
- <Canvas story={{height: '550px'}} of={SyServerTable.ServerMultiSort} />
38
36
 
39
37
  ### Filtres des colonnes
40
38
 
41
39
  Le composant permet d'appliquer des filtres sur les colonnes. Vous pouvez définir des filtres personnalisés pour chaque colonne en utilisant la prop `show-filters`. Voir d'autres exemples de filtres dans les stories.
42
- <Canvas story={{height: '550px'}} of={SyServerTable.ServerFilterByText} />
43
40
 
44
41
  ### Resize des colonnes
45
42
 
46
43
  Le composant peut permettre de redimensionner les colonnes en utilisant la prop `resizable-columns`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
47
- <Canvas story={{height: '550px'}} of={SyServerTable.ResizableColumns} />
48
44
 
49
45
  ### Réorganisation des colonnes
50
46
 
51
47
  Le composant permet de cacher ou réorganiser l'ordre des colonnes en utilisant la prop `enable-column-controls`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
52
- <Canvas story={{height: '550px'}} of={SyServerTable.ColumnControls} />
53
48
 
54
49
  ### Selection des lignes
55
50
 
56
51
  Le composant permet de sélectionner des lignes individuellement ou en masse. Vous pouvez activer la sélection en utilisant la prop `show-select`.
57
- <Canvas story={{height: '550px'}} of={SyServerTable.RowSelection} />
58
52
 
59
53
  ### Slot item
60
54
  Le composant permet de personnaliser l'affichage des contenus en utilisant le slot `item`. Vous pouvez définir la structure de chaque contenu en fonction de vos besoins.
61
- <Canvas story={{height: '550px'}} of={SyServerTable.SlotItem} />
62
55
 
63
56
  ### Slot headers
64
57
  Le composant permet de personnaliser l'affichage des en-têtes de colonnes en utilisant le slot `headers`. Vous pouvez définir la structure de chaque en-tête en fonction de vos besoins.
65
- <Canvas story={{height: '550px'}} of={SyServerTable.SlotHeaders} />
58
+
59
+ ### Items par page options
60
+ Le composant permet de personnaliser le nombre possible d'éléments par page en utilisant la prop `items-per-page-options`. Vous pouvez spécifier un tableau d'options pour permettre de choisir le nombre d'éléments affichés par page.
66
61
 
67
62
  ### Accessibilité
68
63
 
@@ -169,8 +164,6 @@ Le composant améliore l'accessibilité en ajoutant automatiquement:
169
164
 
170
165
  Pour utiliser plusieurs tableaux serveur sur une même page avec des options indépendantes, utilisez la prop `suffix` pour chaque tableau.
171
166
 
172
- <Canvas of={SyServerTable.ManyServerTables} />
173
-
174
167
  ## Bonnes pratiques
175
168
 
176
169
  - Utilisez la prop `serverItemsLength` pour indiquer le nombre total d'éléments disponibles côté serveur
@@ -74,6 +74,15 @@ const meta = {
74
74
  type: { summary: 'DataOptions', detail: '{ page: number, itemsPerPage: number, sortBy: SortOptions[], groupBy?: SortOptions[], multiSort?: boolean, mustSort?: boolean, filters?: FilterOption[] }' },
75
75
  },
76
76
  },
77
+ itemsPerPageOptions: {
78
+ description: 'Limite les options disponibles dans le sélecteur "itemsPerPage"',
79
+ control: { type: 'object' },
80
+ table: {
81
+ category: 'props',
82
+ type: { summary: 'number[]' },
83
+ defaultValue: { summary: 'undefined' },
84
+ },
85
+ },
77
86
  serverItemsLength: {
78
87
  description: 'Nombre total d\'éléments à afficher',
79
88
  control: { type: 'number' },
@@ -5219,3 +5228,236 @@ export const SlotHeaders: Story = {
5219
5228
  }
5220
5229
  },
5221
5230
  }
5231
+
5232
+ export const ItemsPerPageOptions: Story = {
5233
+ parameters: {
5234
+ sourceCode: [
5235
+ {
5236
+ name: 'Template',
5237
+ code: `
5238
+ <template>
5239
+ <SyServerTable
5240
+ v-model:options="options"
5241
+ :items="users"
5242
+ :headers="headers"
5243
+ :items-per-page-options="[5, 10, 15]"
5244
+ :server-items-length="totalUsers"
5245
+ :loading="state === StateEnum.PENDING"
5246
+ suffix="server-default"
5247
+ @update:options="fetchData"
5248
+ />
5249
+ </template>
5250
+ `,
5251
+ },
5252
+ {
5253
+ name: 'Script',
5254
+ code: `
5255
+ <script setup lang="ts">
5256
+ import { ref, watch } from 'vue'
5257
+ import { SyServerTable } from '@cnamts/synapse'
5258
+ import { StateEnum } from '@cnamts/synapse/src/components/Tables/common/constants/StateEnum'
5259
+ import type { DataOptions } from '@cnamts/synapse/src/components/Tables/common/types'
5260
+
5261
+ interface User {
5262
+ [key: string]: string
5263
+ firstname: string
5264
+ lastname: string
5265
+ email: string
5266
+ }
5267
+
5268
+ interface DataObj {
5269
+ items: User[]
5270
+ total: number
5271
+ }
5272
+
5273
+ const totalUsers = ref(0)
5274
+ const users = ref<User[]>([])
5275
+ const state = ref(StateEnum.IDLE)
5276
+
5277
+ const options = ref({
5278
+ itemsPerPage: 5,
5279
+ sortBy: [{ key: 'lastname', order: 'asc' }],
5280
+ page: 1,
5281
+ })
5282
+
5283
+ const headers = [
5284
+ { title: 'Nom', key: 'lastname' },
5285
+ { title: 'Prénom', key: 'firstname' },
5286
+ { title: 'Email', key: 'email' },
5287
+ ]
5288
+
5289
+ const fetchData = async (): Promise<void> => {
5290
+ const { items, total } = await getDataFromApi(options.value)
5291
+ users.value = items
5292
+ totalUsers.value = total
5293
+ }
5294
+
5295
+ const wait = async (ms: number) => {
5296
+ return new Promise(resolve => setTimeout(resolve, ms))
5297
+ }
5298
+
5299
+ const getDataFromApi = async ({ sortBy, page, itemsPerPage, filters }: DataOptions): Promise<DataObj> => {
5300
+ state.value = StateEnum.PENDING
5301
+ await wait(1000)
5302
+
5303
+ return new Promise((resolve) => {
5304
+ let items: User[] = getUsers()
5305
+ const total = items.length
5306
+
5307
+ if (sortBy && sortBy.length > 0) {
5308
+ items = items.sort((a, b) => {
5309
+ const key = sortBy[0].key
5310
+ const order = sortBy[0].order === 'asc' ? 1 : -1
5311
+
5312
+ return a[key] > b[key] ? order : -order
5313
+ })
5314
+ }
5315
+
5316
+ if (itemsPerPage > 0) {
5317
+ items = items.slice((page - 1) * itemsPerPage, page * itemsPerPage)
5318
+ }
5319
+
5320
+ resolve({ items, total })
5321
+ state.value = StateEnum.RESOLVED
5322
+ })
5323
+ }
5324
+
5325
+ const getUsers = (): User[] => {
5326
+ return [
5327
+ { firstname: 'Virginie', lastname: 'Beauchesne', email: 'virginie.beauchesne@example.com' },
5328
+ { firstname: 'Simone', lastname: 'Bellefeuille', email: 'simone.bellefeuille@example.com' },
5329
+ { firstname: 'Étienne', lastname: 'Salois', email: 'etienne.salois@example.com' },
5330
+ { firstname: 'Bernadette', lastname: 'Langelier', email: 'bernadette.langelier@example.com' },
5331
+ { firstname: 'Agate', lastname: 'Roy', email: 'agate.roy@example.com' },
5332
+ { firstname: 'Louis', lastname: 'Denis', email: 'louis.denis@example.com' },
5333
+ { firstname: 'Édith', lastname: 'Cartier', email: 'edith.cartier@example.com' },
5334
+ { firstname: 'Alphonse', lastname: 'Bouvier', email: 'alphonse.bouvier@example.com' },
5335
+ { firstname: 'Eustache', lastname: 'Dubois', email: 'eustache.dubois@example.com' },
5336
+ { firstname: 'Rosemarie', lastname: 'Quessy', email: 'rosemarie.quessy@example.com' },
5337
+ { firstname: 'Serge', lastname: 'Rivard', email: 'serge.rivard@example.com' },
5338
+ { firstname: 'Jacques', lastname: 'Demers', email: 'jacques.demers@example.com' },
5339
+ { firstname: 'Aimée', lastname: 'Josseaume', email: 'aimee.josseaume@example.com' },
5340
+ { firstname: 'Delphine', lastname: 'Robillard', email: 'delphine.robillard@example.com' },
5341
+ { firstname: 'Alexandre', lastname: 'Lazure', email: 'alexandre.lazure@example.com' },
5342
+ ]
5343
+ }
5344
+
5345
+ // Initialize data
5346
+ fetchData()
5347
+ </script>
5348
+ `,
5349
+ },
5350
+ ],
5351
+ },
5352
+ args: {
5353
+ 'options': {
5354
+ itemsPerPage: 5,
5355
+ sortBy: [{ key: 'lastname', order: 'asc' }],
5356
+ page: 1,
5357
+ },
5358
+ 'itemsPerPageOptions': [5, 10, 15],
5359
+ 'headers': [
5360
+ { title: 'Nom', key: 'lastname' },
5361
+ { title: 'Prénom', key: 'firstname' },
5362
+ { title: 'Email', key: 'email' },
5363
+ ],
5364
+ 'caption': '',
5365
+ 'serverItemsLength': 15,
5366
+ 'suffix': 'server-default',
5367
+ 'density': 'default',
5368
+ 'striped': false,
5369
+ 'onUpdate:options': fn(),
5370
+ },
5371
+ render: (args) => {
5372
+ return {
5373
+ components: { SyServerTable },
5374
+ setup() {
5375
+ const totalUsers = ref(0)
5376
+ const users = ref<User[]>([])
5377
+ const state = ref(StateEnum.IDLE)
5378
+
5379
+ const options = ref({ ...args.options })
5380
+
5381
+ watch(options, (newVal) => {
5382
+ if (args.options) {
5383
+ Object.assign(args.options, JSON.parse(JSON.stringify(newVal)))
5384
+ }
5385
+ }, { deep: true })
5386
+
5387
+ const fetchData = async (): Promise<void> => {
5388
+ const { items, total } = await getDataFromApi(options.value as DataOptions)
5389
+ users.value = items
5390
+ totalUsers.value = total
5391
+ }
5392
+
5393
+ const wait = async (ms: number) => {
5394
+ return new Promise(resolve => setTimeout(resolve, ms))
5395
+ }
5396
+
5397
+ const getDataFromApi = async ({ sortBy, page, itemsPerPage }: DataOptions): Promise<DataObj> => {
5398
+ state.value = StateEnum.PENDING
5399
+ await wait(1000)
5400
+
5401
+ return new Promise((resolve) => {
5402
+ let items: User[] = getUsers()
5403
+ const total = items.length
5404
+
5405
+ if (sortBy && sortBy.length > 0) {
5406
+ items = items.sort((a, b) => {
5407
+ const key = sortBy[0].key
5408
+ const order = sortBy[0].order === 'asc' ? 1 : -1
5409
+
5410
+ return a[key] > b[key] ? order : -order
5411
+ })
5412
+ }
5413
+
5414
+ if (itemsPerPage > 0) {
5415
+ items = items.slice((page - 1) * itemsPerPage, page * itemsPerPage)
5416
+ }
5417
+
5418
+ resolve({ items, total })
5419
+ state.value = StateEnum.RESOLVED
5420
+ })
5421
+ }
5422
+
5423
+ const getUsers = (): User[] => {
5424
+ return [
5425
+ { firstname: 'Virginie', lastname: 'Beauchesne', email: 'virginie.beauchesne@example.com' },
5426
+ { firstname: 'Simone', lastname: 'Bellefeuille', email: 'simone.bellefeuille@example.com' },
5427
+ { firstname: 'Étienne', lastname: 'Salois', email: 'etienne.salois@example.com' },
5428
+ { firstname: 'Bernadette', lastname: 'Langelier', email: 'bernadette.langelier@example.com' },
5429
+ { firstname: 'Agate', lastname: 'Roy', email: 'agate.roy@example.com' },
5430
+ { firstname: 'Louis', lastname: 'Denis', email: 'louis.denis@example.com' },
5431
+ { firstname: 'Édith', lastname: 'Cartier', email: 'edith.cartier@example.com' },
5432
+ { firstname: 'Alphonse', lastname: 'Bouvier', email: 'alphonse.bouvier@example.com' },
5433
+ { firstname: 'Eustache', lastname: 'Dubois', email: 'eustache.dubois@example.com' },
5434
+ { firstname: 'Rosemarie', lastname: 'Quessy', email: 'rosemarie.quessy@example.com' },
5435
+ { firstname: 'Serge', lastname: 'Rivard', email: 'serge.rivard@example.com' },
5436
+ { firstname: 'Jacques', lastname: 'Demers', email: 'jacques.demers@example.com' },
5437
+ { firstname: 'Aimée', lastname: 'Josseaume', email: 'aimee.josseaume@example.com' },
5438
+ { firstname: 'Delphine', lastname: 'Robillard', email: 'delphine.robillard@example.com' },
5439
+ { firstname: 'Alexandre', lastname: 'Lazure', email: 'alexandre.lazure@example.com' },
5440
+ ]
5441
+ }
5442
+
5443
+ // Initialize data
5444
+ fetchData()
5445
+
5446
+ return { args, users, state, fetchData, options, totalUsers, StateEnum }
5447
+ },
5448
+ template: `
5449
+ <div>
5450
+ <SyServerTable
5451
+ v-model:options="options"
5452
+ :items="users"
5453
+ :items-per-page-options="args.itemsPerPageOptions"
5454
+ :server-items-length="totalUsers"
5455
+ :loading="state === StateEnum.PENDING"
5456
+ v-bind="args"
5457
+ @update:options="fetchData"
5458
+ />
5459
+ </div>
5460
+ `,
5461
+ }
5462
+ },
5463
+ }
@@ -13,7 +13,7 @@
13
13
  import { usePagination } from '../common/usePagination'
14
14
  import { useTableOptions } from '../common/useTableOptions'
15
15
  import { useTableHeaders } from '../common/useTableHeaders'
16
- import { useTableItems } from '../common/useTableItems'
16
+ // import { useTableItems } from '../common/useTableItems'
17
17
  import OrganizeColumns from '../common/organizeColumns/OrganizeColumns.vue'
18
18
  import { useTableCheckbox } from '../common/useTableCheckbox'
19
19
  import { useTableAria } from '../common/useTableAria'
@@ -30,6 +30,7 @@
30
30
  showSelect: false,
31
31
  multiSort: false,
32
32
  mustSort: false,
33
+ itemsPerPageOptions: undefined,
33
34
  })
34
35
 
35
36
  const emit = defineEmits<{
@@ -92,13 +93,15 @@
92
93
  // For server-side tables, we don't use the filteredItems from useTableItems
93
94
  // Instead, we use the items directly from props as they are already filtered server-side
94
95
  // But we still need the createEmptyItemWithStructure function
95
- const { createEmptyItemWithStructure } = useTableItems({
96
- items: itemsRef,
97
- headers,
98
- filters,
99
- options,
100
- filterItems,
101
- })
96
+
97
+ // TODO: A voir avec @David
98
+ // const { createEmptyItemWithStructure } = useTableItems({
99
+ // items: itemsRef,
100
+ // headers,
101
+ // filters,
102
+ // options,
103
+ // filterItems,
104
+ // })
102
105
 
103
106
  // Use the pagination composable with serverItemsLength
104
107
  const itemsLength = computed(() => props.serverItemsLength)
@@ -250,7 +253,8 @@
250
253
  v-model="model"
251
254
  :headers="displayHeaders"
252
255
  color="primary"
253
- :items="processItems(props.items.length > 0 ? props.items : createEmptyItemWithStructure())"
256
+ hide-no-data
257
+ :items="processItems(props.items)"
254
258
  :items-length="props.serverItemsLength || 0"
255
259
  :density="props.density"
256
260
  :show-select="props.showSelect"
@@ -354,6 +358,13 @@
354
358
  </VBtn>
355
359
  </td>
356
360
  </tr>
361
+ <tr v-if="props.items.length === 0 || props.serverItemsLength === 0">
362
+ <td colspan="100%">
363
+ <div class="text-center text-grey">
364
+ {{ locales.noData }}
365
+ </div>
366
+ </td>
367
+ </tr>
357
368
  </template>
358
369
  <!-- Repli lorsque les colonnes ne sont pas définies -->
359
370
  <template v-else>
@@ -391,6 +402,13 @@
391
402
  </SyTableFilter>
392
403
  </th>
393
404
  </tr>
405
+ <tr v-if="props.items.length === 0 || props.serverItemsLength === 0">
406
+ <td colspan="100%">
407
+ <div class="text-center text-grey">
408
+ {{ locales.noData }}
409
+ </div>
410
+ </td>
411
+ </tr>
394
412
  </template>
395
413
  </template>
396
414
 
@@ -412,11 +430,12 @@
412
430
  v-model:headers="headers"
413
431
  />
414
432
  <SyTablePagination
415
- v-if="props.serverItemsLength > 0"
433
+ v-if="props.items.length > 0 ? props.serverItemsLength : 0"
416
434
  :page="page"
417
435
  :items-per-page="itemsPerPageValue"
418
436
  :page-count="pageCount"
419
437
  :items-length="props.serverItemsLength"
438
+ :items-per-page-options="props.itemsPerPageOptions"
420
439
  @update:page="page = $event"
421
440
  @update:items-per-page="updateItemsPerPage"
422
441
  />
@@ -24,38 +24,33 @@ Pour gérer individuellement le stockage des options pour différents tableaux,
24
24
  ### Tri des colonnes
25
25
 
26
26
  Le composant permet de trier les données par colonne en cliquant sur l'en-tête de la colonne.
27
- <Canvas story={{height: '550px'}} of={SyTable.SortBy} />
28
27
 
29
28
  Le multi-tri est également supporté. Vous pouvez activer cette fonctionnalité en utilisant la prop `multi-sort`.
30
- <Canvas story={{height: '550px'}} of={SyTable.MultiSort} />
31
29
 
32
30
  ### Filtres des colonnes
33
31
 
34
32
  Le composant permet d'appliquer des filtres sur les colonnes. Vous pouvez définir des filtres personnalisés pour chaque colonne en utilisant la prop `show-filters`. Voir d'autres exemples de filtres dans les stories.
35
- <Canvas story={{height: '550px'}} of={SyTable.FilterByText} />
36
33
 
37
34
  ### Resize des colonnes
38
35
 
39
36
  Le composant peut permettre de redimensionner les colonnes en utilisant la prop `resizable-columns`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
40
- <Canvas story={{height: '550px'}} of={SyTable.ResizableColumns} />
41
37
 
42
38
  ### Réorganisation des colonnes
43
39
 
44
40
  Le composant permet de cacher ou réorganiser l'ordre des colonnes en utilisant la prop `enable-column-controls`. Vous pouvez activer ou désactiver cette fonctionnalité selon vos besoins.
45
- <Canvas story={{height: '550px'}} of={SyTable.ColumnControls} />
46
41
 
47
42
  ### Selection des lignes
48
43
 
49
44
  Le composant permet de sélectionner des lignes individuellement ou en masse. Vous pouvez activer la sélection en utilisant la prop `show-select`.
50
- <Canvas story={{height: '550px'}} of={SyTable.RowSelection} />
51
45
 
52
46
  ### Slot item
53
47
  Le composant permet de personnaliser l'affichage des contenus en utilisant le slot `item`. Vous pouvez définir la structure de chaque contenu en fonction de vos besoins.
54
- <Canvas story={{height: '550px'}} of={SyTable.SlotItem} />
55
48
 
56
49
  ### Slot headers
57
50
  Le composant permet de personnaliser l'affichage des en-têtes de colonnes en utilisant le slot `headers`. Vous pouvez définir la structure de chaque en-tête en fonction de vos besoins.
58
- <Canvas story={{height: '550px'}} of={SyTable.SlotHeaders} />
51
+
52
+ ### Items par page options
53
+ Le composant permet de personnaliser le nombre possible d'éléments par page en utilisant la prop `items-per-page-options`. Vous pouvez spécifier un tableau d'options pour permettre de choisir le nombre d'éléments affichés par page.
59
54
 
60
55
  ### Accessibilité
61
56
 
@@ -139,8 +134,6 @@ Le composant améliore l'accessibilité en ajoutant automatiquement :
139
134
 
140
135
  Pour utiliser plusieurs tableaux sur une même page avec des options indépendantes, utilisez la prop `suffix` pour chaque tableau.
141
136
 
142
- <Canvas of={SyTable.ManyTables} />
143
-
144
137
  ## Bonnes pratiques
145
138
 
146
139
  - Utilisez des en-têtes clairs et descriptifs pour chaque colonne