@cnamts/synapse 1.0.1 → 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 (217) hide show
  1. package/README.md +1 -1
  2. package/dist/{DateFilter-BmRuzQ9Z.js → DateFilter-YWOTbfeL.js} +1 -1
  3. package/dist/{NumberFilter-CnIPDHqx.js → NumberFilter-DMmMgALM.js} +1 -1
  4. package/dist/{PeriodFilter-CZwZ8CnQ.js → PeriodFilter-Bok5BHcn.js} +1 -1
  5. package/dist/SelectFilter-BKud2WhN.js +136 -0
  6. package/dist/{TextFilter-DTxZHJwX.js → TextFilter-DvMf2thH.js} +1 -1
  7. package/dist/components/Accordion/Accordion.d.ts +2 -1
  8. package/dist/components/Accordion/composables/useAccordionGroupCommunication.d.ts +5 -0
  9. package/dist/components/Accordion/composables/useAccordionKeyboardNavigation.d.ts +12 -0
  10. package/dist/components/Accordion/composables/useAccordionState.d.ts +13 -0
  11. package/dist/components/Customs/SyCheckbox/SyCheckbox.d.ts +85 -0
  12. package/dist/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  13. package/dist/components/Customs/SySelect/SySelect.d.ts +33 -13
  14. package/dist/components/Customs/SyTextField/SyTextField.d.ts +2 -2
  15. package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +1585 -1452
  16. package/dist/components/DatePicker/DatePicker/DatePicker.d.ts +16 -2
  17. package/dist/components/DatePicker/DateTextInput/DateTextInput.d.ts +3 -1
  18. package/dist/components/DatePicker/composables/index.d.ts +2 -0
  19. package/dist/components/DatePicker/composables/useAsteriskDisplay.d.ts +14 -0
  20. package/dist/components/DatePicker/composables/useDateAutoClamp.d.ts +16 -0
  21. package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +1 -1
  22. package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +3 -0
  23. package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +1 -0
  24. package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +5 -2
  25. package/dist/components/NirField/NirField.d.ts +7 -3
  26. package/dist/components/NirField/nirValidation.d.ts +1 -1
  27. package/dist/components/PasswordField/PasswordField.d.ts +2 -0
  28. package/dist/components/PeriodField/PeriodField.d.ts +52 -8
  29. package/dist/components/PhoneField/PhoneField.d.ts +2 -2
  30. package/dist/components/RangeField/RangeField.d.ts +2 -0
  31. package/dist/components/SearchListField/SearchListField.d.ts +9 -0
  32. package/dist/components/SyTextArea/SyTextArea.d.ts +2 -0
  33. package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +14 -9
  34. package/dist/components/Tables/SyTable/SyTable.d.ts +12 -7
  35. package/dist/components/Tables/common/SyTablePagination.d.ts +1636 -0
  36. package/dist/components/Tables/common/TableHeader.d.ts +2 -20
  37. package/dist/components/Tables/common/filters/SelectFilter.d.ts +5 -5
  38. package/dist/components/Tables/common/filters/getFilterComponent.d.ts +1 -0
  39. package/dist/components/Tables/common/filters/locales.d.ts +4 -0
  40. package/dist/components/Tables/common/filters/logics/date.d.ts +1 -0
  41. package/dist/components/Tables/common/filters/logics/number.d.ts +1 -0
  42. package/dist/components/Tables/common/filters/logics/period.d.ts +1 -0
  43. package/dist/components/Tables/common/filters/logics/select.d.ts +1 -0
  44. package/dist/components/Tables/common/filters/logics/text.d.ts +1 -0
  45. package/dist/components/Tables/common/locales.d.ts +21 -0
  46. package/dist/components/Tables/common/organizeColumns/OrganizeColumns.d.ts +267 -0
  47. package/dist/components/Tables/common/organizeColumns/sortHeaders.d.ts +2 -0
  48. package/dist/components/Tables/common/tableFilterUtils.d.ts +1 -0
  49. package/dist/components/Tables/common/tableStorageUtils.d.ts +41 -1
  50. package/dist/components/Tables/common/tableUtils.d.ts +42 -5
  51. package/dist/components/Tables/common/types.d.ts +19 -8
  52. package/dist/components/Tables/common/usePagination.d.ts +22 -0
  53. package/dist/components/Tables/common/useTableCheckbox.d.ts +20 -0
  54. package/dist/components/Tables/common/useTableHeaders.d.ts +76 -0
  55. package/dist/components/Tables/common/useTableItems.d.ts +24 -0
  56. package/dist/components/Tables/common/useTableOptions.d.ts +18 -0
  57. package/dist/components/ToolbarContainer/ToolbarContainer.d.ts +11 -0
  58. package/dist/components/UserMenuBtn/UserMenuBtn.d.ts +9 -2
  59. package/dist/components/index.d.ts +8 -6
  60. package/dist/design-system-v3.js +58 -56
  61. package/dist/design-system-v3.umd.cjs +22 -22
  62. package/dist/main-Cx8qG7YR.js +16344 -0
  63. package/dist/stories/Accessibilite/Vuetify/VuetifyItems.d.ts +14 -2
  64. package/dist/stories/DesignTokens/StylesTypographiques.stories.new.d.ts +8 -0
  65. package/dist/stories/DesignTokens/TypographyDisplay.d.ts +28 -0
  66. package/dist/stories/DesignTokens/vue-shims.d.ts +6 -0
  67. package/dist/style.css +1 -1
  68. package/package.json +1 -1
  69. package/src/common/imgs/accessibility-svgrepo-com.svg +4 -0
  70. package/src/components/Accordion/Accessibilite/AccessibilityGuide.mdx +249 -0
  71. package/src/components/Accordion/Accordion.vue +48 -76
  72. package/src/components/Accordion/composables/__tests__/useAccordionGroupCommunication.spec.ts +146 -0
  73. package/src/components/Accordion/composables/__tests__/useAccordionKeyboardNavigation.spec.ts +209 -0
  74. package/src/components/Accordion/composables/__tests__/useAccordionState.spec.ts +144 -0
  75. package/src/components/Accordion/composables/useAccordionGroupCommunication.ts +52 -0
  76. package/src/components/Accordion/composables/useAccordionKeyboardNavigation.ts +111 -0
  77. package/src/components/Accordion/composables/useAccordionState.ts +59 -0
  78. package/src/components/Accordion/tests/__snapshots__/accordion.spec.ts.snap +3 -0
  79. package/src/components/Customs/SyCheckbox/Accessibilite.mdx +303 -0
  80. package/src/components/Customs/SyCheckbox/SyCheckbox.mdx +50 -0
  81. package/src/components/Customs/SyCheckbox/SyCheckbox.stories.ts +630 -0
  82. package/src/components/Customs/SyCheckbox/SyCheckbox.vue +326 -0
  83. package/src/components/Customs/SyCheckbox/tests/SyCheckbox.spec.ts +201 -0
  84. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +1 -0
  85. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +8 -1
  86. package/src/components/Customs/SySelect/SySelect.stories.ts +160 -0
  87. package/src/components/Customs/SySelect/SySelect.vue +291 -32
  88. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +230 -0
  89. package/src/components/Customs/SyTextField/SyTextField.stories.ts +3 -2
  90. package/src/components/Customs/SyTextField/SyTextField.vue +19 -8
  91. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +241 -31
  92. package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +305 -57
  93. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.events.spec.ts +161 -0
  94. package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +4 -2
  95. package/src/components/DatePicker/DatePicker/DatePicker.stories.ts +259 -137
  96. package/src/components/DatePicker/DatePicker/DatePicker.vue +153 -25
  97. package/src/components/DatePicker/DatePicker/tests/DatePicker.events.spec.ts +189 -0
  98. package/src/components/DatePicker/DatePicker/{DatePicker.spec.ts → tests/DatePicker.spec.ts} +1 -15
  99. package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +24 -14
  100. package/src/components/DatePicker/DateTextInput/DateTextInput.events.spec.ts +148 -0
  101. package/src/components/DatePicker/DateTextInput/DateTextInput.spec.ts +3 -1
  102. package/src/components/DatePicker/DateTextInput/DateTextInput.vue +200 -5
  103. package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +241 -31
  104. package/src/components/DatePicker/composables/index.ts +2 -0
  105. package/src/components/DatePicker/composables/tests/useDateAutoClamp.spec.ts +190 -0
  106. package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +182 -4
  107. package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +105 -80
  108. package/src/components/DatePicker/composables/useAsteriskDisplay.ts +31 -0
  109. package/src/components/DatePicker/composables/useDateAutoClamp.ts +136 -0
  110. package/src/components/DatePicker/composables/useDateRangeInput.ts +21 -18
  111. package/src/components/DatePicker/composables/useDisplayedDateString.ts +13 -1
  112. package/src/components/DatePicker/composables/useInputBlurHandler.ts +84 -20
  113. package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +149 -51
  114. package/src/components/DiacriticPicker/DiacriticPicker.stories.ts +10 -0
  115. package/src/components/ErrorPage/Accessibilite.stories.ts +8 -0
  116. package/src/components/ErrorPage/ErrorPage.vue +12 -6
  117. package/src/components/ErrorPage/tests/__snapshots__/ErrorPage.spec.ts.snap +4 -4
  118. package/src/components/NirField/NirField.mdx +22 -9
  119. package/src/components/NirField/NirField.stories.ts +26 -2
  120. package/src/components/NirField/NirField.vue +209 -22
  121. package/src/components/NirField/nirValidation.ts +17 -3
  122. package/src/components/NirField/tests/NirField.spec.ts +2 -2
  123. package/src/components/NotFoundPage/Accessibilite.stories.ts +8 -0
  124. package/src/components/NotFoundPage/NotFoundPage.vue +2 -1
  125. package/src/components/NotFoundPage/tests/__snapshots__/NotFoundPage.spec.ts.snap +8 -6
  126. package/src/components/PaginatedTable/PaginatedTable.mdx +2 -0
  127. package/src/components/PasswordField/PasswordField.stories.ts +4 -0
  128. package/src/components/PasswordField/PasswordField.vue +3 -0
  129. package/src/components/PeriodField/PeriodField.vue +2 -0
  130. package/src/components/PhoneField/PhoneField.stories.ts +15 -15
  131. package/src/components/PhoneField/PhoneField.vue +1 -1
  132. package/src/components/RangeField/RangeField.stories.ts +9 -0
  133. package/src/components/RangeField/RangeField.vue +4 -0
  134. package/src/components/RangeField/tests/__snapshots__/RangeField.spec.ts.snap +12 -0
  135. package/src/components/SearchListField/SearchListField.vue +5 -0
  136. package/src/components/SyTextArea/SyTextArea.vue +3 -0
  137. package/src/components/SyTextArea/tests/SyTextArea.spec.ts +0 -1
  138. package/src/components/Tables/SyServerTable/FilterRules.stories.ts +632 -15
  139. package/src/components/Tables/SyServerTable/SyServerTable.mdx +15 -5
  140. package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +2844 -1377
  141. package/src/components/Tables/SyServerTable/SyServerTable.vue +155 -66
  142. package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +256 -4
  143. package/src/components/Tables/SyTable/FilterRules.stories.ts +183 -0
  144. package/src/components/Tables/SyTable/SyTable.mdx +14 -4
  145. package/src/components/Tables/SyTable/SyTable.stories.ts +1265 -477
  146. package/src/components/Tables/SyTable/SyTable.vue +152 -72
  147. package/src/components/Tables/SyTable/tests/SyTable.spec.ts +366 -4
  148. package/src/components/Tables/common/SyTableFilter.vue +3 -56
  149. package/src/components/Tables/common/SyTablePagination.vue +375 -0
  150. package/src/components/Tables/common/TableHeader.vue +10 -26
  151. package/src/components/Tables/common/filters/SelectFilter.vue +131 -22
  152. package/src/components/Tables/common/filters/getFilterComponent.ts +54 -0
  153. package/src/components/Tables/common/filters/locales.ts +4 -0
  154. package/src/components/Tables/common/filters/logics/date.ts +12 -0
  155. package/src/components/Tables/common/filters/logics/number.ts +48 -0
  156. package/src/components/Tables/common/filters/logics/period.ts +25 -0
  157. package/src/components/Tables/common/filters/logics/select.ts +27 -0
  158. package/src/components/Tables/common/filters/logics/tests/TextFilterLogic.spec.ts +177 -0
  159. package/src/components/Tables/common/filters/logics/text.ts +62 -0
  160. package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +11 -11
  161. package/src/components/Tables/common/locales.ts +24 -0
  162. package/src/components/Tables/common/organizeColumns/OrganizeColumns.vue +269 -0
  163. package/src/components/Tables/common/organizeColumns/sortHeaders.ts +9 -0
  164. package/src/components/Tables/common/tableFilterUtils.ts +43 -295
  165. package/src/components/Tables/common/tableStorageUtils.ts +27 -2
  166. package/src/components/Tables/common/tableStyles.scss +26 -0
  167. package/src/components/Tables/common/tableUtils.ts +3 -16
  168. package/src/components/Tables/common/tests/SyTablePagination.spec.ts +170 -0
  169. package/src/components/Tables/common/tests/filterByRange.spec.ts +215 -0
  170. package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +0 -14
  171. package/src/components/Tables/common/tests/tableUtils.spec.ts +7 -51
  172. package/src/components/Tables/common/types.ts +17 -6
  173. package/src/components/Tables/common/usePagination.ts +83 -0
  174. package/src/components/Tables/common/useTableCheckbox.ts +58 -0
  175. package/src/components/Tables/common/useTableHeaders.ts +88 -0
  176. package/src/components/Tables/common/useTableItems.ts +87 -0
  177. package/src/components/Tables/common/useTableOptions.ts +93 -0
  178. package/src/components/ToolbarContainer/ToolbarContainer.mdx +16 -0
  179. package/src/components/ToolbarContainer/ToolbarContainer.stories.ts +675 -0
  180. package/src/components/ToolbarContainer/ToolbarContainer.vue +128 -0
  181. package/src/components/ToolbarContainer/tests/ToolbarContainer.spec.ts +156 -0
  182. package/src/components/UserMenuBtn/UserMenuBtn.stories.ts +74 -0
  183. package/src/components/UserMenuBtn/UserMenuBtn.vue +19 -17
  184. package/src/components/index.ts +8 -6
  185. package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +293 -20
  186. package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +448 -54
  187. package/src/stories/Accessibilite/Audit/RGAA.mdx +231 -23
  188. package/src/stories/Accessibilite/Avancement/Avancement.mdx +591 -7
  189. package/src/stories/Accessibilite/Avancement/Avancement.stories.ts +139 -38
  190. package/src/stories/Accessibilite/Introduction.mdx +258 -18
  191. package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +221 -31
  192. package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +204 -22
  193. package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +537 -24
  194. package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +577 -70
  195. package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +382 -31
  196. package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +419 -81
  197. package/src/stories/Accessibilite/Vuetify/Vuetify.mdx +132 -6
  198. package/src/stories/Accessibilite/Vuetify/Vuetify.stories.ts +370 -146
  199. package/src/stories/Accessibilite/Vuetify/VuetifyItems.ts +35 -57
  200. package/src/stories/Demarrer/Accueil.stories.ts +20 -5
  201. package/src/stories/DesignTokens/StylesTypographiques.mdx +10 -9
  202. package/src/stories/DesignTokens/StylesTypographiques.stories.new.ts +397 -0
  203. package/src/stories/DesignTokens/StylesTypographiques.stories.ts +397 -0
  204. package/src/stories/DesignTokens/TypographyDisplay.vue +155 -0
  205. package/src/stories/DesignTokens/vue-shims.d.ts +6 -0
  206. package/src/stories/GuideDuDev/LesBreackingChanges.mdx +0 -2
  207. package/src/stories/GuideDuDev/MigrationDepuisBridge.mdx +1 -1
  208. package/src/stories/GuideDuDev/MigrationDepuisVue2.mdx +1 -1
  209. package/src/stories/GuideDuDev/PortailAgent.mdx +10 -0
  210. package/src/stories/GuideDuDev/PortailAgent.stories.ts +506 -0
  211. package/src/stories/GuideDuDev/Theme.mdx +41 -0
  212. package/dist/SelectFilter-Cj-GW2Cc.js +0 -97
  213. package/dist/main-WDqeoGM-.js +0 -14788
  214. package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +0 -886
  215. package/src/components/Tables/SyServerTable/tests/__snapshots__/SyServerTable.spec.ts.snap +0 -521
  216. package/src/components/Tables/SyTable/tests/__snapshots__/SyTable.spec.ts.snap +0 -521
  217. package/src/stories/DesignTokens/ThemePA.mdx +0 -35
@@ -1,16 +1,23 @@
1
1
  <script setup lang="ts">
2
- import { computed, ref, useAttrs, watch, provide, nextTick } from 'vue'
2
+ import { computed, onMounted, nextTick, provide, ref, toRef, useAttrs, watch } from 'vue'
3
3
  import type { VDataTable } from 'vuetify/components'
4
+ import SyCheckbox from '@/components/Customs/SyCheckbox/SyCheckbox.vue'
4
5
  import SyTableFilter from '../common/SyTableFilter.vue'
5
6
  import TableHeader from '../common/TableHeader.vue'
7
+ import SyTablePagination from '../common/SyTablePagination.vue'
6
8
  import { processItems } from '../common/formatters'
7
9
  import { locales } from '../common/locales'
10
+ import OrganizeColumns from '../common/organizeColumns/OrganizeColumns.vue'
8
11
  import { useTableUtils } from '../common/tableUtils'
9
- import type { DataOptions, FilterOption, SyTableProps, TableColumnHeader } from '../common/types'
12
+ import type { DataOptions, SyTableProps } from '../common/types'
10
13
  import { useTableFilter } from '../common/useTableFilter'
14
+ import { usePagination } from '../common/usePagination'
15
+ import { useTableOptions } from '../common/useTableOptions'
16
+ import { useTableHeaders } from '../common/useTableHeaders'
17
+ import { useTableItems } from '../common/useTableItems'
18
+ import { useTableCheckbox } from '../common/useTableCheckbox'
11
19
 
12
20
  const props = withDefaults(defineProps<SyTableProps>(), {
13
- itemsPerPage: undefined,
14
21
  caption: '',
15
22
  showFilters: false,
16
23
  resizableColumns: false,
@@ -18,35 +25,31 @@
18
25
  filterInputConfig: () => ({}),
19
26
  density: 'default',
20
27
  striped: false,
28
+ showSelect: false,
21
29
  })
22
30
 
31
+ const emit = defineEmits<{
32
+ (e: 'update:options', options: Partial<DataOptions>): void
33
+ }>()
34
+
23
35
  const options = defineModel<Partial<DataOptions>>('options', {
24
36
  required: false,
25
37
  default: () => ({}),
26
38
  })
27
39
 
40
+ const model = defineModel<unknown[]>('modelValue', {
41
+ required: false,
42
+ default: () => [],
43
+ })
44
+
28
45
  const table = ref<VDataTable>()
29
46
 
47
+ // Get filter utilities
30
48
  const { filterItems } = useTableFilter()
31
49
 
32
- // Éléments filtrés en fonction des filtres
33
- const filteredItems = computed(() => {
34
- const itemsCopy = props.items.map((item) => {
35
- return JSON.parse(JSON.stringify(item))
36
- })
37
-
38
- // Applique les filtres aux éléments copiés
39
- return filterItems(itemsCopy, filters.value)
40
- })
41
-
42
- const filters = computed({
43
- get: () => options.value.filters || [],
44
- set: (newFilters: FilterOption[]) => {
45
- options.value = {
46
- ...options.value,
47
- filters: newFilters,
48
- }
49
- },
50
+ // Use the table options composable
51
+ const { filters } = useTableOptions({
52
+ options,
50
53
  })
51
54
 
52
55
  const componentAttributes = useAttrs()
@@ -61,20 +64,87 @@
61
64
  setupLocalStorage,
62
65
  columnWidths,
63
66
  updateColumnWidth,
67
+ headers: storageHeaders,
64
68
  } = useTableUtils({
65
69
  tableId: uniqueTableId.value,
66
70
  prefix: 'table',
67
71
  suffix: props.suffix,
68
- itemsPerPage: props.itemsPerPage,
69
72
  caption: props.caption,
70
73
  componentAttributes,
71
74
  options,
72
75
  density: props.density,
73
76
  })
74
77
 
78
+ // Use the table headers composable
79
+ const { headers, displayHeaders, getEnhancedHeader } = useTableHeaders({
80
+ headersProp: storageHeaders.value ? storageHeaders : toRef(props, 'headers'),
81
+ filterInputConfig: props.filterInputConfig,
82
+ })
83
+
84
+ // Create a reactive reference for items
85
+ const itemsRef = computed(() => props.items)
86
+
87
+ // Use the table items composable
88
+ const { filteredItems, createEmptyItemWithStructure } = useTableItems({
89
+ items: itemsRef,
90
+ headers,
91
+ filters,
92
+ options,
93
+ filterItems,
94
+ })
95
+
96
+ // Use the pagination composable
97
+ const itemsLength = computed(() => filteredItems.value.length)
98
+ const { page, pageCount, itemsPerPageValue, updateItemsPerPage } = usePagination({
99
+ options,
100
+ itemsLength,
101
+ table,
102
+ emit,
103
+ })
104
+
105
+ // Create a computed property for items to ensure reactivity
106
+ const tableItems = computed(() => props.items)
107
+
108
+ // Use the table checkbox composable
109
+ const { getItemValue, toggleAllRows } = useTableCheckbox({
110
+ items: tableItems,
111
+ modelValue: model,
112
+ updateModelValue: (value) => {
113
+ model.value = value
114
+ },
115
+ })
116
+
117
+ // Function to add accessibility attributes to row checkboxes
118
+ const accessibilityRowCheckboxes = () => {
119
+ nextTick(() => {
120
+ setTimeout(() => {
121
+ const tableElement = document.getElementById(uniqueTableId.value)
122
+ if (!tableElement) return
123
+
124
+ // Find all row checkboxes
125
+ const rowCheckboxes = tableElement.querySelectorAll('td .v-selection-control input[type="checkbox"]')
126
+ rowCheckboxes.forEach((checkbox, index) => {
127
+ const rowLabel = `${locales.selectRow} ${index + 1}`
128
+ checkbox.setAttribute('aria-label', rowLabel)
129
+ checkbox.setAttribute('title', rowLabel)
130
+ })
131
+ }, 100) // Small delay to ensure DOM is updated
132
+ })
133
+ }
134
+
135
+ // Watch for changes that might affect the table and update accessibility
136
+ watch(() => props.items, accessibilityRowCheckboxes, { deep: true })
137
+ watch(() => filteredItems.value, accessibilityRowCheckboxes)
138
+ watch(() => page.value, accessibilityRowCheckboxes)
139
+
140
+ // Apply accessibility attributes when component is mounted
141
+ onMounted(() => {
142
+ accessibilityRowCheckboxes()
143
+ })
144
+
75
145
  setupAccessibility()
76
146
 
77
- const { watchOptions } = setupLocalStorage()
147
+ const { watchOptions, saveHeaders } = setupLocalStorage()
78
148
 
79
149
  // Create a reactive reference to column widths that will be provided to children
80
150
  const reactiveColumnWidths = ref(columnWidths.value)
@@ -111,47 +181,14 @@
111
181
  { deep: true },
112
182
  )
113
183
 
114
- // Fonction pour améliorer les en-têtes de colonnes avec les types de filtres appropriés
115
- function getEnhancedHeader(column: TableColumnHeader): TableColumnHeader {
116
- // Trouve l'en-tête correspondant dans les props si disponible
117
- const matchingHeader = props.headers?.find(h => h.key === column.key || h.value === column.value)
118
- // Crée un en-tête amélioré avec les types appropriés
119
- return {
120
- ...column,
121
- title: column.name || matchingHeader?.title,
122
- // Utilise le filterType de la colonne si disponible, sinon utilise le filterType de l'en-tête correspondant
123
- filterType: column.filterType || matchingHeader?.filterType,
124
- // Utilise les filterOptions de la colonne si disponibles, sinon utilise les filterOptions de l'en-tête correspondant
125
- filterOptions: column.filterOptions || matchingHeader?.filterOptions,
126
- } as TableColumnHeader
127
- }
184
+ watch(
185
+ headers,
186
+ () => {
187
+ saveHeaders(headers.value)
188
+ },
189
+ { deep: true },
190
+ )
128
191
 
129
- // Fonction pour créer un élément vide qui maintient la structure des colonnes
130
- function createEmptyItemWithStructure(): Record<string, unknown>[] {
131
- // Si nous avons des éléments, utilise le premier élément comme modèle
132
- if (props.items.length > 0) {
133
- // Crée un objet vide avec les mêmes clés que le premier élément
134
- const template = Object.keys(props.items[0]).reduce((obj, key) => {
135
- obj[key] = ''
136
- return obj
137
- }, {} as Record<string, unknown>)
138
- return [template]
139
- }
140
-
141
- // Si nous avons des en-têtes, les utilise pour créer une structure
142
- if (props.headers && props.headers.length > 0) {
143
- // Crée un objet vide avec les clés des en-têtes
144
- const template = props.headers.reduce((obj, header) => {
145
- const key = header.key || header.value || ''
146
- if (key) obj[key] = ''
147
- return obj
148
- }, {} as Record<string, unknown>)
149
- return [template]
150
- }
151
-
152
- // Repli vers un objet vide
153
- return [{}]
154
- }
155
192
  </script>
156
193
 
157
194
  <template>
@@ -161,10 +198,15 @@
161
198
  >
162
199
  <VDataTable
163
200
  ref="table"
201
+ v-model="model"
164
202
  color="primary"
203
+ :headers="displayHeaders"
165
204
  v-bind="propsFacade"
166
205
  :items="processItems(filteredItems.length > 0 ? filteredItems : createEmptyItemWithStructure())"
167
206
  :density="props.density"
207
+ :show-select="props.showSelect"
208
+ :item-selectable="(item) => true"
209
+ :item-value="getItemValue"
168
210
  @update:options="updateOptions"
169
211
  >
170
212
  <template #top>
@@ -184,12 +226,31 @@
184
226
  :key="column.key"
185
227
  >
186
228
  <th>
187
- <TableHeader
188
- :table="table"
189
- :header-params="slotProps as any"
190
- :column="column"
191
- :resizable-columns="props.resizableColumns"
192
- />
229
+ <template v-if="column.key === 'data-table-select' && props.showSelect">
230
+ <SyCheckbox
231
+ :model-value="slotProps.allSelected"
232
+ :indeterminate="slotProps.someSelected && !slotProps.allSelected"
233
+ color="primary"
234
+ density="compact"
235
+ hide-details
236
+ :is-header="true"
237
+ :aria-label="locales.selectAllRows"
238
+ :title="locales.selectAllRows"
239
+ @click="toggleAllRows"
240
+ >
241
+ <template #label>
242
+ <span class="d-sr-only">{{ locales.selectAllRows }}</span>
243
+ </template>
244
+ </SyCheckbox>
245
+ </template>
246
+ <template v-else>
247
+ <TableHeader
248
+ :table="table"
249
+ :header-params="slotProps"
250
+ :column="column"
251
+ :resizable-columns="props.resizableColumns"
252
+ />
253
+ </template>
193
254
  </th>
194
255
  </template>
195
256
  </tr>
@@ -197,8 +258,9 @@
197
258
  v-if="props.showFilters"
198
259
  class="filters"
199
260
  >
261
+ <th v-if="props.showSelect" />
200
262
  <template
201
- v-for="column in slotProps.columns"
263
+ v-for="column in slotProps.columns.filter(c => c.key !== 'data-table-select')"
202
264
  :key="column.key"
203
265
  >
204
266
  <th>
@@ -230,14 +292,14 @@
230
292
  :colspan="slotProps.columns.length"
231
293
  class="text-right px-4 py-2"
232
294
  >
233
- <v-btn
295
+ <VBtn
234
296
  size="small"
235
297
  color="primary"
236
298
  variant="outlined"
237
299
  @click="filters = []"
238
300
  >
239
301
  {{ locales.resetFilters }}
240
- </v-btn>
302
+ </VBtn>
241
303
  </td>
242
304
  </tr>
243
305
  <tr v-if="filteredItems.length === 0">
@@ -293,6 +355,24 @@
293
355
  </tr>
294
356
  </template>
295
357
  </template>
358
+
359
+ <template #bottom>
360
+ <div class="d-flex align-center pa-2">
361
+ <OrganizeColumns
362
+ v-if="props.enableColumnControls && headers"
363
+ v-model:headers="headers"
364
+ />
365
+ <SyTablePagination
366
+ v-if="filteredItems.length > 0"
367
+ :page="page"
368
+ :items-per-page="itemsPerPageValue"
369
+ :page-count="pageCount"
370
+ :items-length="filteredItems.length"
371
+ @update:page="page = $event"
372
+ @update:items-per-page="updateItemsPerPage"
373
+ />
374
+ </div>
375
+ </template>
296
376
  </VDataTable>
297
377
  </div>
298
378
  </template>