overview-components 1.0.92 → 1.0.93

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 (211) hide show
  1. package/dist/assets/generated/locales/de.js +71 -0
  2. package/dist/assets/generated/locales/de.js.map +1 -0
  3. package/dist/assets/generated/locales/en.js +71 -0
  4. package/dist/assets/generated/locales/en.js.map +1 -0
  5. package/dist/assets/generated/locales/fr.js +71 -0
  6. package/dist/assets/generated/locales/fr.js.map +1 -0
  7. package/dist/assets/generated/locales/hr.js +71 -0
  8. package/dist/assets/generated/locales/hr.js.map +1 -0
  9. package/dist/assets/generated/locales/it.js +71 -0
  10. package/dist/assets/generated/locales/it.js.map +1 -0
  11. package/dist/assets/generated/locales/pl.js +71 -0
  12. package/dist/assets/generated/locales/pl.js.map +1 -0
  13. package/dist/assets/generated/locales/ro.js +71 -0
  14. package/dist/assets/generated/locales/ro.js.map +1 -0
  15. package/dist/assets/generated/locales/sk.js +71 -0
  16. package/dist/assets/generated/locales/sk.js.map +1 -0
  17. package/dist/assets/generated/locales/sr.js +71 -0
  18. package/dist/assets/generated/locales/sr.js.map +1 -0
  19. package/dist/assets/icons/iconGlyphs.js +679 -0
  20. package/dist/assets/icons/iconGlyphs.js.map +1 -0
  21. package/dist/assets/illustration/delete-illustration.js +96 -0
  22. package/dist/assets/illustration/delete-illustration.js.map +1 -0
  23. package/dist/assets/illustration/no-content.js +167 -0
  24. package/dist/assets/illustration/no-content.js.map +1 -0
  25. package/dist/assets/illustration/no-preview.js +133 -0
  26. package/dist/assets/illustration/no-preview.js.map +1 -0
  27. package/dist/assets/illustration/not-found.js +106 -0
  28. package/dist/assets/illustration/not-found.js.map +1 -0
  29. package/dist/assets/illustration/settings-illustration.js +176 -0
  30. package/dist/assets/illustration/settings-illustration.js.map +1 -0
  31. package/dist/components/components-settings/attachments-tab-settings.js +226 -0
  32. package/dist/components/components-settings/attachments-tab-settings.js.map +1 -0
  33. package/dist/components/components-settings/data-grid-settings.js +318 -0
  34. package/dist/components/components-settings/data-grid-settings.js.map +1 -0
  35. package/dist/components/components-settings/section-tab-settings.js +269 -0
  36. package/dist/components/components-settings/section-tab-settings.js.map +1 -0
  37. package/dist/components/components-settings/tabs-overview-settings.js +439 -0
  38. package/dist/components/components-settings/tabs-overview-settings.js.map +1 -0
  39. package/dist/components/lit-attachments-tab.js +680 -0
  40. package/dist/components/lit-attachments-tab.js.map +1 -0
  41. package/dist/components/lit-badge.js +100 -0
  42. package/dist/components/lit-badge.js.map +1 -0
  43. package/dist/components/lit-case-variables-tab.js +842 -0
  44. package/dist/components/lit-case-variables-tab.js.map +1 -0
  45. package/dist/components/lit-chart.js +423 -0
  46. package/dist/components/lit-chart.js.map +1 -0
  47. package/dist/components/lit-data-grid-tanstack.js +2246 -0
  48. package/dist/components/lit-data-grid-tanstack.js.map +1 -0
  49. package/dist/components/lit-filter-modal.js +344 -0
  50. package/dist/components/lit-filter-modal.js.map +1 -0
  51. package/dist/components/lit-multiselect-item.js +706 -0
  52. package/dist/components/lit-multiselect-item.js.map +1 -0
  53. package/dist/components/lit-section-tab.js +145 -0
  54. package/dist/components/lit-section-tab.js.map +1 -0
  55. package/dist/components/lit-tabs-overview.js +345 -0
  56. package/dist/components/lit-tabs-overview.js.map +1 -0
  57. package/dist/components/modals/lit-confirm-modal.js +120 -0
  58. package/dist/components/modals/lit-confirm-modal.js.map +1 -0
  59. package/dist/components/modals/lit-delete-modal.js +128 -0
  60. package/dist/components/modals/lit-delete-modal.js.map +1 -0
  61. package/dist/components/react-wrappers/attachments-tab.js +9 -0
  62. package/dist/components/react-wrappers/attachments-tab.js.map +1 -0
  63. package/dist/components/react-wrappers/badge.js +9 -0
  64. package/dist/components/react-wrappers/badge.js.map +1 -0
  65. package/dist/components/react-wrappers/button.js +9 -0
  66. package/dist/components/react-wrappers/button.js.map +1 -0
  67. package/dist/components/react-wrappers/case-variables-tab.js +9 -0
  68. package/dist/components/react-wrappers/case-variables-tab.js.map +1 -0
  69. package/dist/components/react-wrappers/chart.js +9 -0
  70. package/dist/components/react-wrappers/chart.js.map +1 -0
  71. package/dist/components/react-wrappers/data-grid-tanstack.js +9 -0
  72. package/dist/components/react-wrappers/data-grid-tanstack.js.map +1 -0
  73. package/dist/components/react-wrappers/filter-modal.js +9 -0
  74. package/dist/components/react-wrappers/filter-modal.js.map +1 -0
  75. package/dist/components/react-wrappers/progress-bar.js +9 -0
  76. package/dist/components/react-wrappers/progress-bar.js.map +1 -0
  77. package/dist/components/react-wrappers/section-tab.js +9 -0
  78. package/dist/components/react-wrappers/section-tab.js.map +1 -0
  79. package/dist/components/react-wrappers/tabs-overview.js +9 -0
  80. package/dist/components/react-wrappers/tabs-overview.js.map +1 -0
  81. package/dist/data/translations.js +2763 -0
  82. package/dist/data/translations.js.map +1 -0
  83. package/dist/index.js +43 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/schemas/index.js +17 -0
  86. package/dist/schemas/index.js.map +1 -0
  87. package/dist/schemas/lit-attachments-tab-document.schema.js +20 -0
  88. package/dist/schemas/lit-attachments-tab-document.schema.js.map +1 -0
  89. package/dist/schemas/lit-attachments-tab-settings-value.schema.js +15 -0
  90. package/dist/schemas/lit-attachments-tab-settings-value.schema.js.map +1 -0
  91. package/dist/schemas/lit-attachments-tab.schema.js +32 -0
  92. package/dist/schemas/lit-attachments-tab.schema.js.map +1 -0
  93. package/dist/schemas/lit-case-variables-tab-cell.schema.js +43 -0
  94. package/dist/schemas/lit-case-variables-tab-cell.schema.js.map +1 -0
  95. package/dist/schemas/lit-case-variables-tab-rows.schema.js +6 -0
  96. package/dist/schemas/lit-case-variables-tab-rows.schema.js.map +1 -0
  97. package/dist/schemas/lit-case-variables-tab.schema.js +24 -0
  98. package/dist/schemas/lit-case-variables-tab.schema.js.map +1 -0
  99. package/dist/schemas/lit-data-grid-tanstack-column-array.schema.js +6 -0
  100. package/dist/schemas/lit-data-grid-tanstack-column-array.schema.js.map +1 -0
  101. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter-array.schema.js +6 -0
  102. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter-array.schema.js.map +1 -0
  103. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter.schema.js +11 -0
  104. package/dist/schemas/lit-data-grid-tanstack-column-custom-filter.schema.js.map +1 -0
  105. package/dist/schemas/lit-data-grid-tanstack-column.schema.js +55 -0
  106. package/dist/schemas/lit-data-grid-tanstack-column.schema.js.map +1 -0
  107. package/dist/schemas/lit-data-grid-tanstack.schema.js +99 -0
  108. package/dist/schemas/lit-data-grid-tanstack.schema.js.map +1 -0
  109. package/dist/schemas/lit-section-tab-schema.js +24 -0
  110. package/dist/schemas/lit-section-tab-schema.js.map +1 -0
  111. package/dist/schemas/lit-tabs-overview-tab-array.schema.js +6 -0
  112. package/dist/schemas/lit-tabs-overview-tab-array.schema.js.map +1 -0
  113. package/dist/schemas/lit-tabs-overview-tab.schema.js +32 -0
  114. package/dist/schemas/lit-tabs-overview-tab.schema.js.map +1 -0
  115. package/dist/schemas/lit-tabs-overview.schema.js +29 -0
  116. package/dist/schemas/lit-tabs-overview.schema.js.map +1 -0
  117. package/dist/scripts/translate-locales.js +69 -0
  118. package/dist/scripts/translate-locales.js.map +1 -0
  119. package/dist/shared/filter-inputs.js +427 -0
  120. package/dist/shared/filter-inputs.js.map +1 -0
  121. package/dist/shared/lit-button.js +156 -0
  122. package/dist/shared/lit-button.js.map +1 -0
  123. package/dist/shared/lit-case-variables-tab-cell.js +226 -0
  124. package/dist/shared/lit-case-variables-tab-cell.js.map +1 -0
  125. package/dist/shared/lit-checkbox.js +171 -0
  126. package/dist/shared/lit-checkbox.js.map +1 -0
  127. package/dist/shared/lit-custom-popper.js +117 -0
  128. package/dist/shared/lit-custom-popper.js.map +1 -0
  129. package/dist/shared/lit-data-grid-action-buttons-popover.js +295 -0
  130. package/dist/shared/lit-data-grid-action-buttons-popover.js.map +1 -0
  131. package/dist/shared/lit-data-grid-density-popover.js +84 -0
  132. package/dist/shared/lit-data-grid-density-popover.js.map +1 -0
  133. package/dist/shared/lit-data-grid-export-popover.js +68 -0
  134. package/dist/shared/lit-data-grid-export-popover.js.map +1 -0
  135. package/dist/shared/lit-data-grid-operators-popover.js +114 -0
  136. package/dist/shared/lit-data-grid-operators-popover.js.map +1 -0
  137. package/dist/shared/lit-data-grid-row-actions.js +76 -0
  138. package/dist/shared/lit-data-grid-row-actions.js.map +1 -0
  139. package/dist/shared/lit-date-picker.js +606 -0
  140. package/dist/shared/lit-date-picker.js.map +1 -0
  141. package/dist/shared/lit-icon-button.js +105 -0
  142. package/dist/shared/lit-icon-button.js.map +1 -0
  143. package/dist/shared/lit-icon.js +284 -0
  144. package/dist/shared/lit-icon.js.map +1 -0
  145. package/dist/shared/lit-input.js +239 -0
  146. package/dist/shared/lit-input.js.map +1 -0
  147. package/dist/shared/lit-label.js +104 -0
  148. package/dist/shared/lit-label.js.map +1 -0
  149. package/dist/shared/lit-loader.js +69 -0
  150. package/dist/shared/lit-loader.js.map +1 -0
  151. package/dist/shared/lit-loading-bar.js +127 -0
  152. package/dist/shared/lit-loading-bar.js.map +1 -0
  153. package/dist/shared/lit-menu-item.js +99 -0
  154. package/dist/shared/lit-menu-item.js.map +1 -0
  155. package/dist/shared/lit-menu.js +42 -0
  156. package/dist/shared/lit-menu.js.map +1 -0
  157. package/dist/shared/lit-modal-body.js +22 -0
  158. package/dist/shared/lit-modal-body.js.map +1 -0
  159. package/dist/shared/lit-modal-footer.js +29 -0
  160. package/dist/shared/lit-modal-footer.js.map +1 -0
  161. package/dist/shared/lit-modal-header.js +36 -0
  162. package/dist/shared/lit-modal-header.js.map +1 -0
  163. package/dist/shared/lit-modal.js +169 -0
  164. package/dist/shared/lit-modal.js.map +1 -0
  165. package/dist/shared/lit-overflow-tooltip.js +103 -0
  166. package/dist/shared/lit-overflow-tooltip.js.map +1 -0
  167. package/dist/shared/lit-pill.js +88 -0
  168. package/dist/shared/lit-pill.js.map +1 -0
  169. package/dist/shared/lit-progress-bar.js +81 -0
  170. package/dist/shared/lit-progress-bar.js.map +1 -0
  171. package/dist/shared/lit-responsive-button.js +94 -0
  172. package/dist/shared/lit-responsive-button.js.map +1 -0
  173. package/dist/shared/lit-select-field.js +459 -0
  174. package/dist/shared/lit-select-field.js.map +1 -0
  175. package/dist/shared/lit-select.js +413 -0
  176. package/dist/shared/lit-select.js.map +1 -0
  177. package/dist/shared/lit-settings.js +77 -0
  178. package/dist/shared/lit-settings.js.map +1 -0
  179. package/dist/shared/lit-text-field.js +222 -0
  180. package/dist/shared/lit-text-field.js.map +1 -0
  181. package/dist/shared/lit-toggle.js +222 -0
  182. package/dist/shared/lit-toggle.js.map +1 -0
  183. package/dist/shared/lit-tooltip.js +166 -0
  184. package/dist/shared/lit-tooltip.js.map +1 -0
  185. package/dist/shared/simple-popper.js +266 -0
  186. package/dist/shared/simple-popper.js.map +1 -0
  187. package/dist/shared/simple-tooltip.js +248 -0
  188. package/dist/shared/simple-tooltip.js.map +1 -0
  189. package/dist/shared/styles/button-shared-styles.js +201 -0
  190. package/dist/shared/styles/button-shared-styles.js.map +1 -0
  191. package/dist/styles.js +169 -0
  192. package/dist/styles.js.map +1 -0
  193. package/dist/utils/currency.js +16 -0
  194. package/dist/utils/currency.js.map +1 -0
  195. package/dist/utils/custom-filters.js +84 -0
  196. package/dist/utils/custom-filters.js.map +1 -0
  197. package/dist/utils/date.js +22 -0
  198. package/dist/utils/date.js.map +1 -0
  199. package/dist/utils/getOperatorByType.js +66 -0
  200. package/dist/utils/getOperatorByType.js.map +1 -0
  201. package/dist/utils/getOverviewValue.js +177 -0
  202. package/dist/utils/getOverviewValue.js.map +1 -0
  203. package/dist/utils/localization.js +432 -0
  204. package/dist/utils/localization.js.map +1 -0
  205. package/dist/utils/utils.js +13 -0
  206. package/dist/utils/utils.js.map +1 -0
  207. package/dist/utils/validate-json-schema.js +8 -0
  208. package/dist/utils/validate-json-schema.js.map +1 -0
  209. package/dist/validators/validator.js +7 -0
  210. package/dist/validators/validator.js.map +1 -0
  211. package/package.json +2 -2
@@ -0,0 +1,2246 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from 'lit';
8
+ import _, { isEqual } from 'lodash';
9
+ import { msg } from '@lit/localize';
10
+ import { customElement, property, state, query } from 'lit/decorators.js';
11
+ import { unsafeHTML } from 'lit/directives/unsafe-html.js';
12
+ import { TableController, getCoreRowModel, flexRender, getSortedRowModel, getFilteredRowModel, getFacetedRowModel, getFacetedUniqueValues, getGroupedRowModel, getExpandedRowModel, filterFns, } from '@tanstack/lit-table';
13
+ import { repeat } from 'lit/directives/repeat.js';
14
+ import { VirtualizerController } from '@tanstack/lit-virtual';
15
+ import { createRef, ref } from 'lit/directives/ref.js';
16
+ import { styleMap } from 'lit/directives/style-map.js';
17
+ import Sortable from 'sortablejs';
18
+ // components
19
+ import '../shared/filter-inputs.js';
20
+ import '../shared/lit-icon.js';
21
+ import '../shared/lit-icon-button.js';
22
+ import '../shared/lit-button.js';
23
+ import '../shared/lit-responsive-button.js';
24
+ import '../shared/lit-data-grid-export-popover.js';
25
+ import '../shared/lit-data-grid-action-buttons-popover.js';
26
+ import '../assets/illustration/not-found.js';
27
+ import '../shared/lit-data-grid-density-popover.js';
28
+ import '../shared/lit-loading-bar.js';
29
+ import '../shared/lit-data-grid-row-actions.js';
30
+ import '../shared/simple-tooltip.js';
31
+ import '../shared/lit-checkbox.js';
32
+ import '../shared/lit-overflow-tooltip.js';
33
+ import './components-settings/data-grid-settings.js';
34
+ // utils
35
+ import { formatDate } from '../utils/date.js';
36
+ import { formatCurrency } from '../utils/currency.js';
37
+ import { dateFilterFn, multiselectFilterFn, dateRangeFilterFn } from '../utils/custom-filters.js';
38
+ import { setLocale, getLocale } from '../utils/localization.js';
39
+ import { getOperatorsByColumnType } from '../utils/getOperatorByType.js';
40
+ let LitDataGridTanstack = class LitDataGridTanstack extends LitElement {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.row = [];
44
+ this.columns = [];
45
+ this.enableRowVirtualization = true;
46
+ this.enableColumnVirtualization = false;
47
+ this.enableColumnPinning = true;
48
+ this.enableColumnOrdering = false;
49
+ this.enableGrouping = true;
50
+ this.enablePinning = true;
51
+ this.exportData = true;
52
+ this.actionButtonsInMenu = false;
53
+ this.id = '';
54
+ this.initialSorting = [];
55
+ this.initialRowExpanded = {};
56
+ this.columnSizing = {};
57
+ this.leftPinnedColumns = [];
58
+ this.rightPinnedColumns = [];
59
+ this.enableFiltering = true;
60
+ this.enableSorting = true;
61
+ this.userLang = 'cs';
62
+ this.dateFormat = null;
63
+ this.isLoading = false;
64
+ this.enableRowSelection = false;
65
+ this.initialFiltering = [];
66
+ this.server = false;
67
+ this.scrollEndThreshold = 100;
68
+ this.rowDensity = 'standard';
69
+ this.enableMultiRowSelection = false;
70
+ this.minFilterCharacters = 3;
71
+ this.localizeDate = true;
72
+ this.rowsSelected = {};
73
+ this.enableSettings = false;
74
+ this.onSettingsChanged = () => { };
75
+ this.onCellKeyDown = (event, row) => { };
76
+ this.onColumnResize = () => { };
77
+ this.onColumnFiltersChanged = (table, filterModel) => { };
78
+ this.onColumnSortChanged = (table, sortModel) => { };
79
+ this.onRowSelectionChanged = (table, selectedRows) => { };
80
+ this.onColumnOrderChanged = (table, columnOrder) => { };
81
+ this.hideFooter = false;
82
+ this.columnVisibility = {};
83
+ this.onColumnVisibilityChanged = (table, columnVisibility) => { };
84
+ this.onMouseDown = (e, row) => { };
85
+ this.onRowFocusChanged = (table, rowIndex) => { };
86
+ this.focusedRowIndex = null;
87
+ this.autoFocus = false;
88
+ this.rowsCount = 0;
89
+ this.isScrollable = false;
90
+ this.disableScrollLeft = true;
91
+ this.disableScrollRight = false;
92
+ this.columnOrder = [];
93
+ this.isOpen = false;
94
+ this.filterText = '';
95
+ this.isOpenModal = false;
96
+ this.scrollToEnd = false;
97
+ this.tableContainerRef = createRef();
98
+ this.scrollInterval = null;
99
+ this.currentScrollTop = 0;
100
+ this.lastSelectedIndex = null;
101
+ this.getCellBackgroundColor = (cell) => {
102
+ if (cell.getIsGrouped()) {
103
+ return this.columnGroupedColor ?? `var(--color-primary-light, #f0fadf)`;
104
+ }
105
+ if (cell.getIsAggregated()) {
106
+ return this.rowAggregationColor ?? `var(--color-warning-light, #ffe1a8)`;
107
+ }
108
+ if (cell.getIsPlaceholder()) {
109
+ return `var(--background-default, #eff3f4)`;
110
+ }
111
+ if (cell.column.getIsPinned()) {
112
+ return `var(--background-paper, #fff)`;
113
+ }
114
+ return 'transparent';
115
+ };
116
+ this.updateScrollState = () => {
117
+ const grid = this.tableContainerRef.value;
118
+ if (grid) {
119
+ const canScrollHorizontally = grid.scrollWidth > grid.clientWidth;
120
+ this.isScrollable = canScrollHorizontally;
121
+ this.disableScrollLeft = grid.scrollLeft === 0;
122
+ this.disableScrollRight = grid.scrollLeft + grid.clientWidth >= grid.scrollWidth;
123
+ this.currentScrollTop = grid.scrollTop;
124
+ }
125
+ };
126
+ }
127
+ get rows() {
128
+ return [...(this.row || [])];
129
+ }
130
+ get getColumns() {
131
+ return [...(this.columns || [])];
132
+ }
133
+ // lifecycle
134
+ connectedCallback() {
135
+ this.initRowVirtualizer();
136
+ this.initColumnVirtualizer();
137
+ this.initTable();
138
+ window.addEventListener('resize', this.updateScrollState);
139
+ super.connectedCallback();
140
+ }
141
+ disconnectedCallback() {
142
+ super.disconnectedCallback();
143
+ window.removeEventListener('resize', this.updateScrollState);
144
+ }
145
+ updated(changedProperties) {
146
+ if (changedProperties.has('rowsCount') && this.enableRowVirtualization) {
147
+ this.scrollToEnd = false;
148
+ const virtualizer = this.rowVirtualizerController?.getVirtualizer();
149
+ if (virtualizer) {
150
+ virtualizer.setOptions({
151
+ ...virtualizer.options,
152
+ count: this.table?.getRowModel()?.rows.length,
153
+ });
154
+ }
155
+ this.requestUpdate();
156
+ }
157
+ if ((changedProperties.has('columns') || changedProperties.has('columnVisibility')) &&
158
+ this.enableColumnVirtualization) {
159
+ const virtualizer = this.columnVirtualizerController?.getVirtualizer();
160
+ if (virtualizer) {
161
+ virtualizer.setOptions({
162
+ ...virtualizer.options,
163
+ count: this.table?.getVisibleLeafColumns().length,
164
+ });
165
+ }
166
+ }
167
+ if (changedProperties.has('row') || changedProperties.has('columns')) {
168
+ this.initTable();
169
+ this.requestUpdate();
170
+ }
171
+ }
172
+ firstUpdated() {
173
+ const grid = this.tableContainerRef.value;
174
+ if (grid) {
175
+ grid.addEventListener('scroll', this.updateScrollState);
176
+ }
177
+ this.updateScrollState();
178
+ this.initSortable();
179
+ this._container.addEventListener('scroll', this.handleScroll.bind(this));
180
+ // focus row by index
181
+ if (this.autoFocus) {
182
+ setTimeout(() => {
183
+ if (this.focusedRowIndex !== null && this.focusedRowIndex !== undefined) {
184
+ this.focusRow?.(this.focusedRowIndex);
185
+ }
186
+ else {
187
+ // first selected row if exists
188
+ const selectedRows = this.table.getSelectedRowModel().rows;
189
+ if (selectedRows.length > 0) {
190
+ this.focusRow?.(selectedRows[0].index);
191
+ }
192
+ }
193
+ }, 0);
194
+ }
195
+ }
196
+ toggleModal() {
197
+ this.isOpenModal = !this.isOpenModal;
198
+ }
199
+ async initSortable() {
200
+ if (!this.enableColumnOrdering)
201
+ return;
202
+ const headerRow = this.shadowRoot?.querySelector('thead tr.head');
203
+ if (!headerRow)
204
+ return;
205
+ Sortable.create(headerRow, {
206
+ animation: 150,
207
+ direction: 'horizontal',
208
+ handle: '.drag-handle',
209
+ filter: 'th[data-index="checkbox"], th[data-index="actions"]',
210
+ preventOnFilter: false,
211
+ onMove: (evt) => {
212
+ const dragged = evt.dragged.getAttribute('data-index');
213
+ const target = evt.related.getAttribute('data-index');
214
+ const disallowed = ['checkbox', 'actions'];
215
+ if (disallowed.includes(dragged) || disallowed.includes(target)) {
216
+ return false;
217
+ }
218
+ const headers = this.table.getHeaderGroups()[0].headers;
219
+ const draggedHeader = headers.find((header) => header.id === dragged);
220
+ const targetHeader = headers.find((header) => header.id === target);
221
+ if (!draggedHeader || !targetHeader)
222
+ return false;
223
+ const isDraggedPinned = draggedHeader.column.getIsPinned?.();
224
+ const isTargetPinned = targetHeader.column.getIsPinned?.();
225
+ const isDraggedGrouped = draggedHeader.column.getIsGrouped?.();
226
+ const isTargetGrouped = targetHeader.column.getIsGrouped?.();
227
+ return !(isDraggedPinned || isTargetPinned || isDraggedGrouped || isTargetGrouped);
228
+ },
229
+ onEnd: () => {
230
+ const newOrder = Array.from(headerRow.querySelectorAll('th'))
231
+ .map((th) => th.getAttribute('data-index'))
232
+ .filter((id) => {
233
+ if (!id || id === 'checkbox' || id === 'actions')
234
+ return false;
235
+ const header = this.table
236
+ .getHeaderGroups()[0]
237
+ .headers.find((h) => h.id === id);
238
+ if (!header)
239
+ return false;
240
+ return !header.column.getIsPinned?.() && !header.column.getIsGrouped?.();
241
+ });
242
+ this.table.setColumnOrder(newOrder);
243
+ },
244
+ });
245
+ }
246
+ async loadXLSX() {
247
+ if (!window.XLSX && !this.server) {
248
+ await new Promise((resolve) => {
249
+ const script = document.createElement('script');
250
+ script.src = '../../public/libs/xlsx.mini.min.js';
251
+ script.onload = resolve;
252
+ document.head.appendChild(script);
253
+ });
254
+ }
255
+ }
256
+ // row density
257
+ getRowHeight() {
258
+ switch (this.rowDensity) {
259
+ case 'compact':
260
+ return 31;
261
+ case 'standard':
262
+ return 38;
263
+ case 'comfort':
264
+ return 50;
265
+ default:
266
+ return 38;
267
+ }
268
+ }
269
+ getButtonSize() {
270
+ switch (this.rowDensity) {
271
+ case 'compact':
272
+ return 'small';
273
+ case 'standard':
274
+ return 'medium';
275
+ case 'comfort':
276
+ return 'large';
277
+ default:
278
+ return 'medium';
279
+ }
280
+ }
281
+ handleSetDensity(density) {
282
+ this.rowDensity = density;
283
+ if (this.rowDensityChange) {
284
+ this.rowDensityChange(this.table, density);
285
+ }
286
+ }
287
+ handleMouseDown(event, row) {
288
+ if (this.onMouseDown) {
289
+ this.onMouseDown(event, row);
290
+ }
291
+ }
292
+ handleFilterTabNavigation(event) {
293
+ const { direction, currentFilter } = event.detail;
294
+ // Získajte všetky filter-inputs elementy z DOM
295
+ const filterInputs = Array.from(this.shadowRoot?.querySelectorAll('filter-inputs') || []);
296
+ if (filterInputs.length === 0)
297
+ return;
298
+ const currentIndex = filterInputs.indexOf(currentFilter);
299
+ let nextIndex;
300
+ if (direction === 'forward') {
301
+ // Ak je aktuálny filter posledný vo viditeľnom zozname
302
+ if (currentIndex === filterInputs.length - 1) {
303
+ // Scroll na začiatok (ľavá strana)
304
+ const grid = this.shadowRoot?.querySelector('.grid');
305
+ if (grid) {
306
+ grid.scrollLeft = 0;
307
+ }
308
+ // Po vykonaní scrollu čakáme krátko a potom nastavený focus na prvý filter
309
+ setTimeout(() => {
310
+ const firstFilter = this.shadowRoot?.querySelector('filter-inputs');
311
+ if (firstFilter) {
312
+ firstFilter.focus();
313
+ }
314
+ }, 0);
315
+ return;
316
+ }
317
+ else {
318
+ nextIndex = currentIndex + 1;
319
+ }
320
+ }
321
+ else {
322
+ // Podobne môžeme spracovať aj spätnú navigáciu
323
+ if (currentIndex === 0) {
324
+ const grid = this.shadowRoot?.querySelector('.grid');
325
+ if (grid) {
326
+ // Scroll na koniec (pravá strana)
327
+ grid.scrollLeft = grid.scrollWidth;
328
+ }
329
+ setTimeout(() => {
330
+ const filters = Array.from(this.shadowRoot?.querySelectorAll('filter-inputs') || []);
331
+ if (filters.length > 0) {
332
+ filters[filters.length - 1].focus();
333
+ }
334
+ }, 0);
335
+ return;
336
+ }
337
+ else {
338
+ nextIndex = currentIndex - 1;
339
+ }
340
+ }
341
+ // Nastav focus na ďalší filter podľa smeru
342
+ filterInputs[nextIndex].focus();
343
+ }
344
+ // virtualization
345
+ initRowVirtualizer() {
346
+ this.rowVirtualizerController = new VirtualizerController(this, {
347
+ count: this.table?.getRowModel()?.rows.length || this.row?.length || 1,
348
+ getScrollElement: () => this.tableContainerRef.value,
349
+ estimateSize: () => this.getRowHeight(),
350
+ overscan: 5,
351
+ initialOffset: this.currentScrollTop,
352
+ enabled: this.enableRowVirtualization,
353
+ });
354
+ }
355
+ initTable() {
356
+ this.tableController = new TableController(this);
357
+ }
358
+ initColumnVirtualizer() {
359
+ this.columnVirtualizerController = new VirtualizerController(this, {
360
+ horizontal: true,
361
+ count: this.table?.getVisibleLeafColumns().length || this.columns.length || 1,
362
+ getScrollElement: () => this.tableContainerRef.value,
363
+ estimateSize: (index) => this.table.getVisibleLeafColumns()[index]?.getSize() || 200,
364
+ overscan: 5,
365
+ enabled: this.enableColumnVirtualization,
366
+ });
367
+ }
368
+ handleRowClick(event, row) {
369
+ this.onRowClick?.(event, this.table, row);
370
+ this.onRowFocusChanged?.(this.table, row.index);
371
+ const isShift = event.shiftKey;
372
+ const isCtrlOrMeta = event.ctrlKey || event.metaKey;
373
+ if (this.enableRowSelection && row.getCanSelect() && (isCtrlOrMeta || isShift)) {
374
+ const { rows } = this.table.getRowModel();
375
+ if (this.enableMultiRowSelection &&
376
+ isShift &&
377
+ this.focusedRowIndex !== null &&
378
+ this.focusedRowIndex !== undefined) {
379
+ const [start, end] = [
380
+ Math.min(this.focusedRowIndex, row.index),
381
+ Math.max(this.focusedRowIndex, row.index),
382
+ ];
383
+ const ids = rows.slice(start, end + 1).map((r) => r.id);
384
+ const selected = { ...this.rowsSelected };
385
+ ids.forEach((id) => (selected[id] = true));
386
+ this.table.setRowSelection(selected);
387
+ }
388
+ else if (isCtrlOrMeta && this.enableMultiRowSelection) {
389
+ // Ctrl/Cmd+Click: toggle row selection
390
+ const selected = { ...this.rowsSelected };
391
+ if (selected[row.id]) {
392
+ delete selected[row.id];
393
+ }
394
+ else {
395
+ selected[row.id] = true;
396
+ }
397
+ this.table.setRowSelection(selected);
398
+ }
399
+ else {
400
+ // Single click: select only this row
401
+ const selected = { [row.id]: true };
402
+ this.table.setRowSelection(selected);
403
+ }
404
+ }
405
+ this.focusedRowIndex = row.index;
406
+ }
407
+ handleRowDoubleClick(row) {
408
+ if (this.onRowDoubleClick) {
409
+ this.onRowDoubleClick(this.table, row);
410
+ }
411
+ }
412
+ handleKeyDown(e) {
413
+ const rows = this.table.getRowModel().rows;
414
+ if (!rows.length)
415
+ return;
416
+ let index = this.focusedRowIndex ?? rows.findIndex((row) => this.rowsSelected[row.id]);
417
+ if (this.enableRowSelection) {
418
+ if (index === -1)
419
+ index = 0;
420
+ if (e.key === 'ArrowDown' && e.shiftKey && this.enableMultiRowSelection) {
421
+ e.preventDefault();
422
+ const nextIndex = index + 1;
423
+ if (nextIndex < rows.length) {
424
+ const nextRowId = rows[nextIndex].id;
425
+ this.table.setRowSelection((prev) => ({
426
+ ...prev,
427
+ [nextRowId]: !prev[nextRowId],
428
+ }));
429
+ this.focusRow(nextIndex);
430
+ }
431
+ }
432
+ else if (e.key === 'ArrowUp' && e.shiftKey && this.enableMultiRowSelection) {
433
+ e.preventDefault();
434
+ const prevIndex = index - 1;
435
+ if (prevIndex >= 0) {
436
+ const prevRowId = rows[prevIndex].id;
437
+ this.table.setRowSelection((prev) => ({
438
+ ...prev,
439
+ [prevRowId]: !prev[prevRowId],
440
+ }));
441
+ this.focusRow(prevIndex);
442
+ }
443
+ }
444
+ else if (e.key === 'ArrowDown' && index < rows.length - 1) {
445
+ e.preventDefault();
446
+ const nextIndex = index + 1;
447
+ this.focusRow(nextIndex);
448
+ }
449
+ else if (e.key === 'ArrowUp' && index > 0) {
450
+ e.preventDefault();
451
+ const prevIndex = index - 1;
452
+ this.focusRow(prevIndex);
453
+ }
454
+ }
455
+ this.onCellKeyDown?.(e, rows[index]);
456
+ }
457
+ focusRow(index) {
458
+ const rowIndex = index ?? this.focusedRowIndex;
459
+ // Scroll to the row using virtualizer if available
460
+ this.rowVirtualizerController
461
+ ?.getVirtualizer()
462
+ .scrollToIndex(rowIndex ?? 0, { align: 'auto' });
463
+ setTimeout(() => {
464
+ const row = this.shadowRoot?.querySelector(`[data-row-index="${rowIndex}"]`);
465
+ // Find the row element in the shadow DOM
466
+ if (this.enableRowVirtualization) {
467
+ if (row) {
468
+ setTimeout(() => {
469
+ row.focus();
470
+ }, 0);
471
+ }
472
+ }
473
+ else {
474
+ if (row) {
475
+ row.focus();
476
+ row.scrollIntoView({ block: 'nearest' });
477
+ }
478
+ }
479
+ }, 100);
480
+ this.onRowFocusChanged?.(this.table, rowIndex);
481
+ this.focusedRowIndex = rowIndex;
482
+ }
483
+ getTanstackColumns(columns) {
484
+ return columns.map((column) => {
485
+ return {
486
+ id: column.field,
487
+ accessorKey: column.field,
488
+ accessorFn: (originalRow) => (column.type === 'date' ||
489
+ column.type === 'dateTime' ||
490
+ column.type === 'dateTimeRange' ||
491
+ column.type === 'dateRange') &&
492
+ !this.server &&
493
+ this.localizeDate
494
+ ? column.accessorFn
495
+ ? formatDate(column.accessorFn(originalRow), this.userLang || 'cs', column.type === 'date' || column.type === 'dateRange'
496
+ ? undefined
497
+ : true, this.dateFormat)
498
+ : formatDate(originalRow[column.field], this.userLang || 'cs', column.type === 'date' || column.type === 'dateRange'
499
+ ? undefined
500
+ : true, this.dateFormat)
501
+ : column.accessorFn
502
+ ? column.accessorFn(originalRow)
503
+ : originalRow[column.field],
504
+ type: column.type,
505
+ header: column.headerName,
506
+ cell: (props) => {
507
+ const value = props.getValue();
508
+ if (column.type === 'actions') {
509
+ return html `
510
+ <lit-data-grid-row-actions
511
+ .buttons=${column.getActions?.(props) || []}
512
+ ></lit-data-grid-row-actions>
513
+ `;
514
+ }
515
+ if (column.type === 'currency') {
516
+ return formatCurrency(value, this.userLang || 'cs');
517
+ }
518
+ return column.cell ? column.cell(props, html, unsafeHTML) : value;
519
+ },
520
+ filterFn: (() => {
521
+ switch (column.type) {
522
+ case 'numberRange':
523
+ return filterFns.inNumberRange;
524
+ case 'select':
525
+ return filterFns.weakEquals;
526
+ case 'multiselect':
527
+ return multiselectFilterFn;
528
+ case 'number':
529
+ case 'currency':
530
+ return filterFns.weakEquals;
531
+ case 'dateRange':
532
+ case 'dateTimeRange':
533
+ return dateRangeFilterFn;
534
+ case 'date':
535
+ case 'dateTime':
536
+ return dateFilterFn;
537
+ case 'string':
538
+ default:
539
+ return filterFns.includesString;
540
+ }
541
+ })(),
542
+ enableSorting: column.enableSorting ?? true,
543
+ enableColumnFilter: this.enableFiltering && (column.enableFilter ?? true),
544
+ size: column.size || this.columnDefaultSize || undefined,
545
+ maxSize: column.maxSize || this.columnDefaultMaxSize || 500,
546
+ minSize: column.minSize || this.columnDefaultMinSize || 100,
547
+ meta: {
548
+ filterVariant: column.type ?? 'string',
549
+ valueOptions: column.valueOptions,
550
+ filterOperators: column.filterOperators,
551
+ },
552
+ aggregationFn: column.columnAggregation ?? undefined,
553
+ enableGrouping: column.enableGrouping ?? true,
554
+ sortDescFirst: column.sortDescFirst || true,
555
+ enableResizing: column.enableResizing ?? true,
556
+ enablePinning: this.enablePinning && (column.enablePinning ?? true),
557
+ aggregatedCell: (props) => {
558
+ const value = props.getValue();
559
+ return column.aggregatedCell
560
+ ? column.aggregatedCell(props, html, unsafeHTML)
561
+ : value;
562
+ },
563
+ };
564
+ });
565
+ }
566
+ getCommonPinningStyles(column) {
567
+ const isPinned = column.getIsPinned();
568
+ if (!isPinned) {
569
+ return {};
570
+ }
571
+ const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');
572
+ return {
573
+ position: isPinned ? 'sticky' : 'relative',
574
+ left: isPinned === 'left' ? `${column.getStart('left')}px` : undefined,
575
+ right: isPinned === 'right' ? `0px` : undefined,
576
+ boxShadow: isLastLeftPinnedColumn && column.columnDef.type !== 'checkbox'
577
+ ? '-4px 0 4px -4px gray inset'
578
+ : undefined,
579
+ zIndex: `${isPinned ? 1 : 'auto'}`,
580
+ background: isPinned ? 'var(--background-paper, #fff)' : undefined,
581
+ };
582
+ }
583
+ togglePin(header) {
584
+ if (header.column.getIsPinned()) {
585
+ header.column.pin(false); // Odpinovanie
586
+ }
587
+ else {
588
+ header.column.pin('left'); // Pripnutie doľava
589
+ }
590
+ }
591
+ // export to excel and csv
592
+ exportDataToCsv() {
593
+ const rows = this.getAllRowsIncludingGrouped(this.table.getRowModel().rows); // Získanie všetkých riadkov vrátane skupín
594
+ if (!rows || rows.length === 0) {
595
+ console.warn('No data to export');
596
+ return;
597
+ }
598
+ // Generovanie hlavičky CSV zo stĺpcov
599
+ const header = this.columns
600
+ .map((col) => col.headerName || '') // Získanie názvov stĺpcov
601
+ .join(',');
602
+ // Generovanie dát pre CSV
603
+ const csvRows = rows.map((row) => {
604
+ return this.columns
605
+ .map((col) => {
606
+ const accessor = col.field; // Získanie kľúča pre hodnotu
607
+ if (row.getIsGrouped?.()) {
608
+ // Ak je skupinový riadok, pridaj počet záznamov do prvej bunky
609
+ if (col.field === row.groupingColumnId) {
610
+ return `"${row.getValue(col.field)} (${row.subRows.length})"`;
611
+ }
612
+ return ''; // Ostatné stĺpce v skupinovom riadku prázdne
613
+ }
614
+ const value = row.getValue?.(accessor) || ''; // Získanie hodnoty pre normálny riadok
615
+ return typeof value === 'string'
616
+ ? `"${value.replace(/"/g, '""')}"` // Ošetrenie dvojitých úvodzoviek
617
+ : value;
618
+ })
619
+ .join(',');
620
+ });
621
+ // Pridanie hlavičky na začiatok CSV
622
+ csvRows.unshift(header);
623
+ // Vytvorenie CSV súboru
624
+ const csvContent = csvRows.join('\n');
625
+ const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
626
+ // Export do súboru
627
+ const fileName = prompt(msg('Zadejte název souboru:'), 'data');
628
+ // Ak používateľ stlačí Cancel, export sa zruší
629
+ if (!fileName) {
630
+ return;
631
+ }
632
+ // Stiahnutie CSV súboru
633
+ const url = URL.createObjectURL(blob);
634
+ const link = document.createElement('a');
635
+ link.href = url;
636
+ link.download = `${fileName}.csv`;
637
+ link.click();
638
+ URL.revokeObjectURL(url);
639
+ }
640
+ async exportDataToExcel() {
641
+ await this.loadXLSX(); // Ensure XLSX is loaded
642
+ const XLSX = window.XLSX;
643
+ const rows = this.getAllRowsIncludingGrouped(this.table.getRowModel().rows); // Získanie všetkých riadkov vrátane skupín
644
+ if (!rows || rows.length === 0) {
645
+ console.warn('No data to export');
646
+ return;
647
+ }
648
+ // Príprava dát pre Excel
649
+ const data = rows.map((row) => {
650
+ const formattedRow = {};
651
+ this.columns.forEach((col) => {
652
+ const columnName = col.headerName || ''; // Dynamický názov stĺpca
653
+ const accessor = col.field; // Dynamický kľúč pre hodnoty
654
+ if (row.getIsGrouped?.()) {
655
+ // Skupinový riadok
656
+ if (col.field === row.groupingColumnId) {
657
+ // Pridanie názvu skupiny a počtu záznamov
658
+ formattedRow[columnName] =
659
+ `${row.getValue(accessor)} (${row.subRows.length})`;
660
+ }
661
+ else {
662
+ // Ostatné stĺpce prázdne
663
+ formattedRow[columnName] = '';
664
+ }
665
+ }
666
+ else if (accessor) {
667
+ // Normálny riadok
668
+ formattedRow[columnName] = row.getValue?.(accessor) || '';
669
+ }
670
+ });
671
+ return formattedRow;
672
+ });
673
+ // Vytvorenie pracovného listu a zošita
674
+ const worksheet = XLSX.utils.json_to_sheet(data); // Konverzia dát do Excel formátu
675
+ // Automatické prispôsobenie šírky stĺpcov
676
+ const colWidths = this.columns.map((col, colIndex) => {
677
+ const maxContentLength = Math.max(col.headerName?.length || 10, // Dĺžka názvu stĺpca
678
+ ...data.map((row) => row[col.headerName || '']?.toString().length || 0));
679
+ return { wch: maxContentLength + 2 }; // Pridanie extra priestoru
680
+ });
681
+ worksheet['!cols'] = colWidths; // Nastavenie šírky stĺpcov
682
+ const workbook = XLSX.utils.book_new(); // Nový Excel zošit
683
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Data'); // Pridanie dát do zošita
684
+ // Export do súboru
685
+ const fileName = prompt(msg('Zadejte název souboru:'), 'data');
686
+ // Ak používateľ stlačí Cancel, export sa zruší
687
+ if (!fileName) {
688
+ return;
689
+ }
690
+ XLSX.writeFile(workbook, `${fileName}.xlsx`);
691
+ }
692
+ getAllRowsIncludingGrouped(rows) {
693
+ const allRows = [];
694
+ rows.forEach((row) => {
695
+ if (row.getIsGrouped?.()) {
696
+ allRows.push(row);
697
+ if (row.subRows && row.subRows.length > 0) {
698
+ allRows.push(...this.getAllRowsIncludingGrouped(row.subRows));
699
+ }
700
+ }
701
+ else {
702
+ allRows.push(row);
703
+ }
704
+ });
705
+ return allRows.filter((row, index, self) => index === self.findIndex((r) => r.id === row.id));
706
+ }
707
+ startScroll(direction) {
708
+ const grid = this.tableContainerRef.value;
709
+ if (!grid)
710
+ return;
711
+ const scrollAmount = direction === 'left' ? -15 : 15;
712
+ const scroll = () => {
713
+ grid.scrollLeft += scrollAmount;
714
+ this.updateScrollState();
715
+ this.scrollInterval = requestAnimationFrame(scroll);
716
+ };
717
+ this.scrollInterval = requestAnimationFrame(scroll);
718
+ }
719
+ stopScroll() {
720
+ if (this.scrollInterval) {
721
+ cancelAnimationFrame(this.scrollInterval);
722
+ this.scrollInterval = null;
723
+ }
724
+ }
725
+ // centralize your “at end” logic
726
+ _atScrollEnd(container) {
727
+ const thresh = this.scrollEndThreshold ?? 100;
728
+ // if not scrollable OR within threshold of bottom
729
+ return (container.scrollHeight <= container.clientHeight ||
730
+ container.scrollTop + container.clientHeight >= container.scrollHeight - thresh);
731
+ }
732
+ _maybeTriggerScrollEnd() {
733
+ if (this._atScrollEnd(this._container) &&
734
+ this.onRowsScrollEnd &&
735
+ !this.isLoading &&
736
+ !this.scrollToEnd) {
737
+ this.scrollToEnd = true;
738
+ this.onRowsScrollEnd();
739
+ }
740
+ }
741
+ handleScroll(_event) {
742
+ // every scroll, re‑test
743
+ this._maybeTriggerScrollEnd();
744
+ }
745
+ // handleScroll(event: Event) {
746
+ // const container = event.target as HTMLElement;
747
+ // if (
748
+ // container.scrollTop + container.clientHeight >=
749
+ // container.scrollHeight - (this.scrollEndThreshold || 100) &&
750
+ // this.onRowsScrollEnd &&
751
+ // !this.isLoading &&
752
+ // !this.scrollToEnd
753
+ // ) {
754
+ // this.scrollToEnd = true;
755
+ // this.onRowsScrollEnd();
756
+ // }
757
+ // }
758
+ handleGetTotalNumber() {
759
+ if (this.getTotalNumberFn) {
760
+ this.getTotalNumberFn();
761
+ }
762
+ }
763
+ toggleCustomPopover() {
764
+ this.isOpen = !this.isOpen;
765
+ }
766
+ closePopover() {
767
+ this.isOpen = false;
768
+ }
769
+ toggleColumn(field) {
770
+ this.columnVisibility = {
771
+ ...this.columnVisibility,
772
+ [field]: !(this.columnVisibility?.[field] ?? true),
773
+ };
774
+ this.table.setColumnVisibility(this.columnVisibility);
775
+ }
776
+ onSettingsChangedCallback(value) {
777
+ if (value?.enableSorting !== undefined) {
778
+ this.enableSorting = value.enableSorting;
779
+ }
780
+ if (value?.enableFiltering !== undefined) {
781
+ this.enableFiltering = value.enableFiltering;
782
+ }
783
+ if (value?.columnDefaultSize !== undefined) {
784
+ this.columnDefaultSize = value.columnDefaultSize;
785
+ }
786
+ if (value?.columnGroupedColor !== undefined) {
787
+ this.columnGroupedColor = value.columnGroupedColor;
788
+ }
789
+ if (value?.rowAggregationColor !== undefined) {
790
+ this.rowAggregationColor = value.rowAggregationColor;
791
+ }
792
+ if (value?.enableGrouping !== undefined) {
793
+ this.enableGrouping = value.enableGrouping;
794
+ }
795
+ if (value?.exportData !== undefined) {
796
+ this.exportData = value.exportData;
797
+ }
798
+ if (value?.actionButtonsInMenu !== undefined) {
799
+ this.actionButtonsInMenu = value.actionButtonsInMenu;
800
+ }
801
+ if (value?.hideFooter !== undefined) {
802
+ this.hideFooter = value.hideFooter;
803
+ }
804
+ if (value?.enableColumnPinning !== undefined) {
805
+ this.enableColumnPinning = value.enableColumnPinning;
806
+ }
807
+ this.initTable();
808
+ this.requestUpdate();
809
+ if (this.onSettingsChanged) {
810
+ this.dispatchEvent(new CustomEvent('onSettingsChanged', {
811
+ bubbles: true,
812
+ composed: true,
813
+ detail: value,
814
+ }));
815
+ this.onSettingsChanged?.(value);
816
+ }
817
+ }
818
+ _onRowMouseDown(event, row) {
819
+ this.handleMouseDown(event, row);
820
+ // do not highlight cell text if multirow selection is enabled and shift key is pressed
821
+ if (event.shiftKey) {
822
+ if (event.currentTarget) {
823
+ event.currentTarget.classList.add('no-select');
824
+ }
825
+ // Optionally, clear existing selection:
826
+ const selection = window.getSelection();
827
+ if (selection) {
828
+ selection.removeAllRanges();
829
+ }
830
+ }
831
+ }
832
+ _onRowMouseUp(event) {
833
+ event.currentTarget.classList.remove('no-select');
834
+ }
835
+ _rowUnselectAll(table) {
836
+ table.resetRowSelection();
837
+ this.focusedRowIndex = 0;
838
+ }
839
+ render() {
840
+ const filteredColumns = this.columns?.filter((col) => {
841
+ const name = col.headerName?.toLowerCase() || col.field.toLowerCase();
842
+ return name.includes(this.filterText);
843
+ }) || [];
844
+ // checbox column for multiple selection
845
+ const checkboxColumn = this.enableMultiRowSelection
846
+ ? [
847
+ {
848
+ id: 'checkboxForMultiselect',
849
+ type: 'checkbox',
850
+ minSize: 30,
851
+ size: 30,
852
+ enablePinning: false,
853
+ enableResizing: false,
854
+ header: ({ table }) => html `
855
+ <div style="position: absolute; left: 0; bottom: 0; margin: 0.65rem 0;">
856
+ <lit-checkbox
857
+ type="checkbox"
858
+ .onChange="${() => table.getIsSomeRowsSelected()
859
+ ? this._rowUnselectAll(table)
860
+ : table.toggleAllRowsSelected()}"
861
+ .checked="${table.getIsAllRowsSelected()}"
862
+ .indeterminate="${table.getIsSomeRowsSelected()}"
863
+ ></lit-checkbox>
864
+ </div>
865
+ `,
866
+ cell: ({ table, row }) => html `
867
+ <div
868
+ style="padding: 0.1875rem 0px 0px 0px"
869
+ @click=${(e) => e.stopPropagation()}
870
+ >
871
+ <lit-checkbox
872
+ type="checkbox"
873
+ .onChange="${(e) => {
874
+ e.stopPropagation();
875
+ row.toggleSelected(e.target.checked);
876
+ }}"
877
+ .checked="${row.getIsSelected()}"
878
+ ?disabled="${!row.getCanSelect()}"
879
+ .indeterminate="${row.getIsSomeSelected()}"
880
+ ></lit-checkbox>
881
+ </div>
882
+ `,
883
+ },
884
+ ]
885
+ : [];
886
+ if (getLocale() !== this.userLang) {
887
+ setLocale(this.userLang || 'cs');
888
+ }
889
+ this.table = this.tableController.table({
890
+ data: this.rows || [],
891
+ columns: [...checkboxColumn, ...this.getTanstackColumns(this.getColumns)],
892
+ columnResizeMode: 'onChange',
893
+ columnResizeDirection: 'ltr',
894
+ defaultColumn: {
895
+ size: this.columnDefaultSize || undefined, //starting column size
896
+ minSize: this.columnDefaultMinSize || 100, //enforced during column resizing
897
+ maxSize: this.columnDefaultMaxSize || 500, //enforced during column resizing
898
+ },
899
+ initialState: {
900
+ // columnFilters: [...(this.initialFiltering || [])],
901
+ // sorting: [...(this.initialSorting || [])],
902
+ // expanded: { ...this.initialRowExpanded },
903
+ grouping: [...(this.initialGroups || [])],
904
+ columnVisibility: { ...this.initialColumnVisibility },
905
+ columnPinning: {
906
+ left: [...(this.leftPinnedColumns || []), 'checkboxForMultiselect'],
907
+ right: ['actions'],
908
+ },
909
+ },
910
+ state: {
911
+ columnVisibility: this.columnVisibility,
912
+ // columnFilters: this.server ? this.filtersServer : this.filters,
913
+ columnFilters: this.initialFiltering,
914
+ sorting: this.initialSorting,
915
+ rowSelection: this.rowsSelected,
916
+ columnSizing: this.columnSizing,
917
+ expanded: this.initialRowExpanded,
918
+ columnOrder: this.columnOrder,
919
+ },
920
+ filterFns: {
921
+ dateRangeFilterFn: dateRangeFilterFn,
922
+ dateFilterFn: dateFilterFn,
923
+ multiselectFilterFn: multiselectFilterFn,
924
+ },
925
+ // debugTable: true,
926
+ enableRowSelection: this.enableRowSelection,
927
+ enableMultiRowSelection: this.enableMultiRowSelection,
928
+ enableColumnPinning: this.enableColumnPinning,
929
+ enableGrouping: this.enableGrouping,
930
+ manualFiltering: this.server,
931
+ manualSorting: this.server,
932
+ enableSorting: this.enableSorting,
933
+ getRowId: (row, index) => this.getRowId ? this.getRowId(row, index) : index.toString(),
934
+ // groupedColumnMode: 'reorder',
935
+ getCoreRowModel: getCoreRowModel(),
936
+ getSortedRowModel: getSortedRowModel(),
937
+ getFilteredRowModel: getFilteredRowModel(),
938
+ getFacetedRowModel: getFacetedRowModel(),
939
+ getGroupedRowModel: getGroupedRowModel(),
940
+ getExpandedRowModel: getExpandedRowModel(),
941
+ getFacetedUniqueValues: getFacetedUniqueValues(),
942
+ onColumnFiltersChange: (updaterOrValue) => {
943
+ this.currentScrollTop = 0;
944
+ const scrollElement = this.tableContainerRef.value;
945
+ if (scrollElement) {
946
+ scrollElement.scrollTop = 0;
947
+ }
948
+ const filtersState = typeof updaterOrValue === 'function'
949
+ ? updaterOrValue(this.table.getState().columnFilters)
950
+ : updaterOrValue;
951
+ this.initialFiltering = filtersState;
952
+ if (this.onColumnFiltersChanged) {
953
+ this.onColumnFiltersChanged(this.table, filtersState);
954
+ }
955
+ },
956
+ onSortingChange: (updaterOrValue) => {
957
+ this.currentScrollTop = 0;
958
+ const scrollElement = this.tableContainerRef.value;
959
+ if (scrollElement) {
960
+ scrollElement.scrollTop = 0;
961
+ }
962
+ const sortingState = typeof updaterOrValue === 'function'
963
+ ? updaterOrValue(this.table.getState().sorting)
964
+ : updaterOrValue;
965
+ this.initialSorting = sortingState;
966
+ if (this.onColumnSortChanged) {
967
+ this.onColumnSortChanged(this.table, sortingState);
968
+ }
969
+ },
970
+ onRowSelectionChange: (updaterOrValue) => {
971
+ const rowSelection = typeof updaterOrValue === 'function'
972
+ ? updaterOrValue(this.rowsSelected)
973
+ : updaterOrValue;
974
+ this.rowsSelected = rowSelection;
975
+ if (this.onRowSelectionChanged) {
976
+ this.onRowSelectionChanged(this.table, rowSelection);
977
+ }
978
+ },
979
+ onColumnSizingChange: (updaterOrValue) => {
980
+ const columnSizingState = typeof updaterOrValue === 'function'
981
+ ? updaterOrValue(this.table.getState().columnSizing)
982
+ : updaterOrValue;
983
+ this.columnSizing = columnSizingState;
984
+ if (this.onColumnResize) {
985
+ this.onColumnResize(this.table, columnSizingState);
986
+ }
987
+ },
988
+ onExpandedChange: (updaterOrValue) => {
989
+ const rowExpanded = typeof updaterOrValue === 'function'
990
+ ? updaterOrValue(this.initialRowExpanded)
991
+ : updaterOrValue;
992
+ this.initialRowExpanded = _.isEmpty(rowExpanded)
993
+ ? this.initialRowExpanded
994
+ : rowExpanded;
995
+ this.requestUpdate();
996
+ // if (this.onColumnResize) {
997
+ // this.onColumnResize(this.table, columnSizingState);
998
+ // }
999
+ },
1000
+ onColumnOrderChange: (updaterOrValue) => {
1001
+ const newOrder = typeof updaterOrValue === 'function'
1002
+ ? updaterOrValue(this.columnOrder)
1003
+ : updaterOrValue;
1004
+ this.columnOrder = newOrder;
1005
+ this.render();
1006
+ if (this.onColumnOrderChanged) {
1007
+ this.onColumnOrderChanged(this.table, newOrder);
1008
+ }
1009
+ },
1010
+ onColumnVisibilityChange: (updaterOrValue) => {
1011
+ const columnVisibility = typeof updaterOrValue === 'function'
1012
+ ? updaterOrValue(this.table.getState().columnVisibility)
1013
+ : updaterOrValue;
1014
+ this.columnVisibility = columnVisibility;
1015
+ if (this.onColumnVisibilityChanged) {
1016
+ this.onColumnVisibilityChanged(this.table, columnVisibility);
1017
+ }
1018
+ },
1019
+ });
1020
+ this.rowsCount = this.table.getRowModel().rows.length;
1021
+ // Ak virtualizácia nie je povolená, použijeme celý zoznam riadkov alebo stĺpcov
1022
+ const rowVirtualizer = this.enableRowVirtualization
1023
+ ? this.rowVirtualizerController?.getVirtualizer()
1024
+ : null;
1025
+ const columnVirtualizer = this.enableColumnVirtualization
1026
+ ? this.columnVirtualizerController?.getVirtualizer()
1027
+ : null;
1028
+ const virtualColumns = columnVirtualizer?.getVirtualItems() ?? [];
1029
+ // Get table rows (either virtualized or all)
1030
+ const { rows } = this.table.getRowModel();
1031
+ const rowItems = rowVirtualizer
1032
+ ? rowVirtualizer.getVirtualItems()
1033
+ : rows.map((_, index) => ({
1034
+ key: index,
1035
+ index,
1036
+ start: index * this.getRowHeight(),
1037
+ end: (index + 1) * this.getRowHeight(),
1038
+ size: this.getRowHeight(),
1039
+ lane: 0,
1040
+ }));
1041
+ // Calculate padding for virtualization
1042
+ let virtualPaddingLeft;
1043
+ let virtualPaddingRight;
1044
+ if (columnVirtualizer && virtualColumns?.length && this.enableColumnVirtualization) {
1045
+ virtualPaddingLeft = virtualColumns[0]?.start ?? 0;
1046
+ virtualPaddingRight =
1047
+ columnVirtualizer.getTotalSize() -
1048
+ (virtualColumns[virtualColumns.length - 1]?.end ?? 0);
1049
+ }
1050
+ let isMobile = window.matchMedia('(max-width: 600px)').matches;
1051
+ return html `
1052
+ <div class="data-grid__wrapper">
1053
+ ${this.isScrollable && !isMobile
1054
+ ? html `
1055
+ <lit-icon-button
1056
+ class="scroll-button left"
1057
+ .disabled="${this.disableScrollLeft}"
1058
+ @pointerdown="${() => this.startScroll('left')}"
1059
+ @pointerup="${this.stopScroll}"
1060
+ @pointerleave="${this.stopScroll}"
1061
+ size="small"
1062
+ variant="contained"
1063
+ icon="arrowLeft"
1064
+ >
1065
+ </lit-icon-button>
1066
+ <lit-icon-button
1067
+ class="scroll-button right"
1068
+ .disabled="${this.disableScrollRight}"
1069
+ @pointerdown="${() => this.startScroll('right')}"
1070
+ @pointerup="${this.stopScroll}"
1071
+ @pointerleave="${this.stopScroll}"
1072
+ size="small"
1073
+ variant="contained"
1074
+ icon="arrowRight"
1075
+ >
1076
+ </lit-icon-button>
1077
+ `
1078
+ : null}
1079
+
1080
+ <div class="grid" ${ref(this.tableContainerRef)}>
1081
+ <table
1082
+ part="dataGrid-table"
1083
+ style="width: ${this.table.getCenterTotalSize()}px"
1084
+ >
1085
+ <thead
1086
+ part="dataGrid-header"
1087
+ style="height: ${this.enableFiltering ? '4rem' : '1.625rem'};"
1088
+ >
1089
+ ${repeat(this.table.getHeaderGroups(), (headerGroup) => headerGroup.id, (headerGroup) => {
1090
+ const headerColumns = this.enableColumnVirtualization
1091
+ ? virtualColumns.map((vc) => headerGroup.headers[vc.index])
1092
+ : headerGroup.headers;
1093
+ const newHeaderColumns = this.enableColumnVirtualization
1094
+ ? [
1095
+ ...headerGroup.headers.filter((hc) => hc.column.getIsPinned()),
1096
+ ...headerColumns.filter((hc) => !hc.column.getIsPinned()),
1097
+ ]
1098
+ : headerColumns;
1099
+ return html `
1100
+ <tr class="head" data-index="${headerGroup.id}">
1101
+ ${virtualPaddingLeft
1102
+ ? html `
1103
+ <th
1104
+ style=" display: flex; width: ${virtualPaddingLeft}px;"
1105
+ ></th>
1106
+ `
1107
+ : ''}
1108
+ ${repeat(newHeaderColumns, (header) => header.id, (header, index) => {
1109
+ const column = header.column;
1110
+ const style = {
1111
+ visibility: column.columnDef.type === 'actions'
1112
+ ? 'hidden'
1113
+ : 'visible',
1114
+ ...this.getCommonPinningStyles(header.column),
1115
+ width: `${column?.getSize()}px`,
1116
+ flexGrow: `${column.columnDef.size === undefined ? 1 : 'unset'}`,
1117
+ };
1118
+ const filterVariant = column.columnDef.meta?.filterVariant;
1119
+ const filterOperators = column?.columnDef?.meta?.filterOperators ||
1120
+ getOperatorsByColumnType(filterVariant);
1121
+ const value = column?.getFilterValue()?.value ||
1122
+ column?.getFilterValue() ||
1123
+ '';
1124
+ const operator = column?.getFilterValue()?.operator ||
1125
+ filterOperators[0]?.value;
1126
+ let valueOptions = [];
1127
+ if (filterVariant === 'select' ||
1128
+ filterVariant === 'multiselect') {
1129
+ if (column?.columnDef?.meta.valueOptions ||
1130
+ this.server) {
1131
+ valueOptions =
1132
+ column?.columnDef?.meta
1133
+ .valueOptions || [];
1134
+ }
1135
+ else {
1136
+ const sortedUniqueValues = Array.from(column
1137
+ ?.getFacetedUniqueValues()
1138
+ .keys())
1139
+ .sort()
1140
+ .slice(0, 5000);
1141
+ valueOptions = sortedUniqueValues.map((value) => ({
1142
+ value,
1143
+ label: value,
1144
+ }));
1145
+ }
1146
+ }
1147
+ return html `
1148
+ <th
1149
+ class="head"
1150
+ style="${styleMap(style)}"
1151
+ colspan="${header.colSpan}"
1152
+ data-index="${header.id}"
1153
+ >
1154
+ ${header.isPlaceholder
1155
+ ? ''
1156
+ : html `
1157
+ <div
1158
+ class="resizer ${this
1159
+ .table.options
1160
+ .columnResizeDirection} ${header.column.getIsResizing()
1161
+ ? 'is-resizing'
1162
+ : ''}"
1163
+ style="transform: ${this
1164
+ .table.options
1165
+ .columnResizeMode ===
1166
+ 'onEnd' &&
1167
+ header.column.getIsResizing()
1168
+ ? `translateX(${(this.table
1169
+ .options
1170
+ .columnResizeDirection ===
1171
+ 'rtl'
1172
+ ? -1
1173
+ : 1) *
1174
+ (this.table.getState()
1175
+ .columnSizingInfo
1176
+ .deltaOffset ??
1177
+ 0)}px)`
1178
+ : ''}"
1179
+ >
1180
+ <div class="header">
1181
+ ${header.column.getIsFiltered()
1182
+ ? html `
1183
+ <div
1184
+ class="filterCirclePoint"
1185
+ ></div>
1186
+ `
1187
+ : ''}
1188
+ <div
1189
+ class="column-header"
1190
+ @click=${header.column.getToggleSortingHandler()}
1191
+ >
1192
+ <lit-overflow-tooltip
1193
+ label="${header
1194
+ .column
1195
+ .columnDef
1196
+ .header}"
1197
+ >
1198
+ ${flexRender(header
1199
+ .column
1200
+ .columnDef
1201
+ .header, header.getContext())}
1202
+ </lit-overflow-tooltip>
1203
+ </div>
1204
+
1205
+ <div
1206
+ class="icons-group-pin"
1207
+ >
1208
+ ${header.column.getCanSort()
1209
+ ? header.column.getIsSorted()
1210
+ ? header.column.getIsSorted() ===
1211
+ 'asc'
1212
+ ? html `<slot
1213
+ name="iconSortUp"
1214
+ ><lit-icon
1215
+ class="cursor"
1216
+ @click=${header.column.getToggleSortingHandler()}
1217
+ size="0.75rem"
1218
+ icon="chevronUpFilled"
1219
+ ></lit-icon
1220
+ ></slot>`
1221
+ : html `<slot
1222
+ name="iconSortDown"
1223
+ >
1224
+ <lit-icon
1225
+ class="cursor"
1226
+ @click=${header.column.getToggleSortingHandler()}
1227
+ size="0.75rem"
1228
+ icon="chevronDownFilled"
1229
+ ></lit-icon>
1230
+ </slot>`
1231
+ : html `<div
1232
+ class="sortFilled"
1233
+ >
1234
+ <lit-icon
1235
+ class="cursor"
1236
+ @click=${header.column.getToggleSortingHandler()}
1237
+ size="0.75rem"
1238
+ icon="sortFilled"
1239
+ ></lit-icon>
1240
+ </div>`
1241
+ : html `<div></div>`}
1242
+ <div class="flex">
1243
+ ${!this
1244
+ .actionButtonsInMenu
1245
+ ? html `
1246
+ ${header.column.getCanPin()
1247
+ ? html `
1248
+ <lit-icon-button
1249
+ @click="${() => this.togglePin(header)}"
1250
+ size="small"
1251
+ variant="text"
1252
+ icon="pin"
1253
+ .active="${header.column.getIsPinned()}"
1254
+ >
1255
+ </lit-icon-button>
1256
+ <simple-tooltip
1257
+ placement="bottom"
1258
+ >${header.column.getIsPinned()
1259
+ ? msg('Zrušit připnutí sloupce')
1260
+ : msg('Připnout sloupec vlevo')}
1261
+ </simple-tooltip>
1262
+ `
1263
+ : ''}
1264
+ ${header.column.getCanGroup()
1265
+ ? html `
1266
+ <lit-icon-button
1267
+ @click="${header.column.getToggleGroupingHandler()}"
1268
+ size="small"
1269
+ variant="text"
1270
+ .active="${header.column.getIsGrouped()}"
1271
+ icon="agregation"
1272
+ >
1273
+ </lit-icon-button>
1274
+ <simple-tooltip
1275
+ placement="bottom"
1276
+ >
1277
+ ${header.column.getIsGrouped()
1278
+ ? msg('Zrušit seskupení')
1279
+ : msg('Seskupit sloupec')}</simple-tooltip
1280
+ >
1281
+ `
1282
+ : ''}
1283
+ `
1284
+ : html `
1285
+ <lit-data-grid-action-buttons-popover
1286
+ .group="${header.column.getToggleGroupingHandler()}"
1287
+ .pin="${() => this.togglePin(header)}"
1288
+ .header="${header}"
1289
+ .table="${this
1290
+ .table}"
1291
+ ></lit-data-grid-action-buttons-popover>
1292
+ `}
1293
+ ${this
1294
+ .enableColumnOrdering &&
1295
+ !header.column.getIsPinned() &&
1296
+ !header.column.getIsGrouped() &&
1297
+ ![
1298
+ 'checkbox',
1299
+ 'actions',
1300
+ ].includes(header
1301
+ .column
1302
+ .id)
1303
+ ? html `<div
1304
+ class="drag-handle"
1305
+ >
1306
+ <lit-icon
1307
+ icon="hamburger"
1308
+ size="1rem"
1309
+ ></lit-icon>
1310
+ </div>
1311
+ <simple-tooltip
1312
+ placement="bottom"
1313
+ >${msg('Přesunout sloupec')}</simple-tooltip
1314
+ > `
1315
+ : null}
1316
+ </div>
1317
+ </div>
1318
+ </div>
1319
+ </div>
1320
+ ${header.column.getCanFilter()
1321
+ ? html `
1322
+ <div>
1323
+ <filter-inputs
1324
+ .minFilterCharacters=${this
1325
+ .minFilterCharacters}
1326
+ .column=${header.column}
1327
+ .dateFormat=${this
1328
+ .dateFormat}
1329
+ .userLang=${this
1330
+ .userLang}
1331
+ @filter-tab=${this
1332
+ .handleFilterTabNavigation}
1333
+ .server=${this
1334
+ .server}
1335
+ .value="${value}"
1336
+ .operator="${operator}"
1337
+ .filterVariant="${filterVariant}"
1338
+ .filterOperators="${filterOperators}"
1339
+ ></filter-inputs>
1340
+ </div>
1341
+ `
1342
+ : null}
1343
+ `}
1344
+ <div
1345
+ class="resize-handle"
1346
+ @dblclick="${(event) => {
1347
+ if (event.target.classList.contains('resize-handle')) {
1348
+ header.column.resetSize();
1349
+ }
1350
+ }}"
1351
+ @mousedown="${(event) => {
1352
+ event.preventDefault();
1353
+ event.stopPropagation();
1354
+ if (event.target.classList.contains('resize-handle')) {
1355
+ header.getResizeHandler()(event);
1356
+ }
1357
+ }}"
1358
+ @touchstart="${(event) => {
1359
+ event.preventDefault();
1360
+ event.stopPropagation();
1361
+ if (event.target.classList.contains('resize-handle')) {
1362
+ header.getResizeHandler()(event);
1363
+ }
1364
+ }}"
1365
+ ></div>
1366
+ </th>
1367
+ `;
1368
+ })}
1369
+ ${virtualPaddingRight
1370
+ ? html `
1371
+ <th
1372
+ style=" display: flex; width: ${virtualPaddingRight}px;"
1373
+ ></th>
1374
+ `
1375
+ : ''}
1376
+ </tr>
1377
+ `;
1378
+ })}
1379
+ ${this.isLoading
1380
+ ? html `
1381
+ <div style="position: absolute; bottom: 0px; width: 100%;">
1382
+ <lit-loading-bar></lit-loading-bar>
1383
+ </div>
1384
+ `
1385
+ : ''}
1386
+ </thead>
1387
+
1388
+ <tbody
1389
+ @keydown=${this.handleKeyDown}
1390
+ tabindex="0"
1391
+ part="dataGrid-body"
1392
+ style="height: ${rowVirtualizer &&
1393
+ this.table.getRowModel().rows.length > 0
1394
+ ? rowVirtualizer.getTotalSize() + 'px'
1395
+ : 'auto'};"
1396
+ >
1397
+ ${rows.length > 0
1398
+ ? repeat(rowItems, (item) => item.key, (item) => {
1399
+ const row = rows[item.index];
1400
+ const visibleCells = row?.getVisibleCells();
1401
+ const bodyColumns = this.enableColumnVirtualization
1402
+ ? virtualColumns?.map((vc) => visibleCells && visibleCells[vc.index])
1403
+ : visibleCells;
1404
+ const pinnedColumns = visibleCells?.filter((bc) => bc.column.getIsPinned()) || [];
1405
+ const newBodyColumns = this.enableColumnVirtualization
1406
+ ? [...new Set([...pinnedColumns, ...bodyColumns])]
1407
+ : bodyColumns;
1408
+ const rowStyle = {
1409
+ transform: rowVirtualizer
1410
+ ? `translateY(${item.start}px)`
1411
+ : 'none',
1412
+ height: `${this.getRowHeight()}px`,
1413
+ lineHeight: `${this.getRowHeight()}px`,
1414
+ position: rowVirtualizer ? 'absolute' : 'relative',
1415
+ };
1416
+ return row
1417
+ ? html `
1418
+ <tr
1419
+ tabindex=${this.enableRowSelection
1420
+ ? '0'
1421
+ : undefined}
1422
+ data-row-index="${row.index}"
1423
+ class="${this.rowsSelected[row.id]
1424
+ ? 'selected body'
1425
+ : 'body'}"
1426
+ data-index="${item.index}"
1427
+ @click="${row.getIsGrouped()
1428
+ ? row.getToggleExpandedHandler()
1429
+ : (e) => this.handleRowClick(e, row)}"
1430
+ @mousedown=${(e) => this._onRowMouseDown(e, row)}
1431
+ @mouseup=${this._onRowMouseUp}
1432
+ @mouseleave=${this._onRowMouseUp}
1433
+ @contextmenu=${(e) => e.preventDefault()}
1434
+ @dblclick="${() => this.handleRowDoubleClick(row)}"
1435
+ style="${styleMap(rowStyle)}"
1436
+ ${ref((node) => {
1437
+ if (node &&
1438
+ this.enableRowVirtualization &&
1439
+ rowVirtualizer) {
1440
+ // Only measure element if virtualization is enabled
1441
+ rowVirtualizer.measureElement(node);
1442
+ }
1443
+ })}
1444
+ >
1445
+ ${virtualPaddingLeft
1446
+ ? html `
1447
+ <th
1448
+ style=" display: flex; width: ${virtualPaddingLeft}px;"
1449
+ ></th>
1450
+ `
1451
+ : ''}
1452
+ <!-- Cells for each row -->
1453
+ ${repeat(newBodyColumns, (cell) => cell.key, (cell) => {
1454
+ const buttonSize = this.getButtonSize();
1455
+ const { column } = cell;
1456
+ const style = {
1457
+ ...this.getCommonPinningStyles(cell.column),
1458
+ width: `${cell.column?.getSize()}px`,
1459
+ flexGrow: `${column.columnDef.size === undefined ? 1 : 'unset'}`,
1460
+ background: this.getCellBackgroundColor(cell),
1461
+ lineHeight: `${this.getRowHeight()}px`,
1462
+ padding: column.columnDef.type ===
1463
+ 'actions' ||
1464
+ column.columnDef.type ===
1465
+ 'checkbox'
1466
+ ? '0'
1467
+ : '0px 14px',
1468
+ };
1469
+ return html `
1470
+ <td style="${styleMap(style)}">
1471
+ ${cell.getIsGrouped()
1472
+ ? html `<div
1473
+ class="grouped-column"
1474
+ >
1475
+ <lit-icon
1476
+ class="grouped-column--icon-button"
1477
+ size="1.25rem"
1478
+ icon="${row.getIsExpanded()
1479
+ ? 'chevronDownFilled'
1480
+ : 'chevron'}"
1481
+ ></lit-icon>
1482
+ <div
1483
+ class="grouped-column--label"
1484
+ >
1485
+ <lit-overflow-tooltip
1486
+ label=${cell.getValue()}
1487
+ >
1488
+ ${cell.getValue()}
1489
+ </lit-overflow-tooltip>
1490
+ </div>
1491
+ <lit-pill
1492
+ class="grouped-column--pill"
1493
+ style="margin-left: 0.5rem"
1494
+ count="${row
1495
+ .subRows
1496
+ .length}"
1497
+ ></lit-pill>
1498
+ </div> `
1499
+ : cell.getIsAggregated()
1500
+ ? html `
1501
+ <div
1502
+ style="flex-grow:1"
1503
+ >
1504
+ ${flexRender(cell
1505
+ .column
1506
+ .columnDef
1507
+ .aggregatedCell ??
1508
+ cell
1509
+ .column
1510
+ .columnDef
1511
+ .cell, cell.getContext())}
1512
+ </div>
1513
+ `
1514
+ : cell.getIsPlaceholder()
1515
+ ? null
1516
+ : html `<lit-overflow-tooltip
1517
+ placement="right"
1518
+ label=${cell.getValue()}
1519
+ >${flexRender(cell
1520
+ .column
1521
+ .columnDef
1522
+ .cell, cell.getContext())}</lit-overflow-tooltip
1523
+ >`}
1524
+ </td>
1525
+ `;
1526
+ })}
1527
+ ${virtualPaddingRight
1528
+ ? html `
1529
+ <th
1530
+ style=" display: flex; width: ${virtualPaddingRight}px;"
1531
+ ></th>
1532
+ `
1533
+ : ''}
1534
+ </tr>
1535
+ `
1536
+ : null;
1537
+ })
1538
+ : null}
1539
+ </tbody>
1540
+ </table>
1541
+ ${!this.hideFooter
1542
+ ? html `
1543
+ <slot
1544
+ part="dataGrid-footer"
1545
+ name="dataGridFooter"
1546
+ class="footer-container"
1547
+ >
1548
+ <div class="numberCount">
1549
+ ${msg('Počet záznamů')}:
1550
+ ${this.table.getRowModel().rows.length}
1551
+ <pre>/</pre>
1552
+ ${this.server
1553
+ ? this.totalNumberRows
1554
+ ? this.totalNumberRows
1555
+ : '?'
1556
+ : this.table.getRowModel().rows.length}
1557
+ ${this.server
1558
+ ? html `<lit-icon-button
1559
+ icon="reload"
1560
+ size="mini"
1561
+ variant="text"
1562
+ @click="${() => this.handleGetTotalNumber()}"
1563
+ style="margin-left: 0.2rem; margin-top: -0.1rem"
1564
+ ></lit-icon-button>`
1565
+ : ''}
1566
+ </div>
1567
+ <div class="right-actions">
1568
+ <lit-data-grid-density-popover
1569
+ .density="${this.rowDensity}"
1570
+ .setDensity="${(density) => this.handleSetDensity(density)}"
1571
+ >
1572
+ </lit-data-grid-density-popover>
1573
+ <lit-responsive-button
1574
+ size="medium"
1575
+ variant="text"
1576
+ label=${msg('Přizpůsobit sloupce')}
1577
+ icon="columns"
1578
+ @click=${() => this.table.resetColumnSizing()}
1579
+ ></lit-responsive-button>
1580
+ ${this.exportData
1581
+ ? html `
1582
+ <lit-data-grid-export-popover
1583
+ .exportToCsv="${typeof this.exportExcelFn ===
1584
+ 'function'
1585
+ ? () => this.exportCsvFn && this.exportCsvFn()
1586
+ : () => this.exportDataToCsv()}"
1587
+ .exportToExcel="${typeof this.exportExcelFn ===
1588
+ 'function'
1589
+ ? () => this.exportExcelFn &&
1590
+ this.exportExcelFn()
1591
+ : () => this.exportDataToExcel()}"
1592
+ .disabledButtons="${this.isLoading}"
1593
+ >
1594
+ </lit-data-grid-export-popover>
1595
+ `
1596
+ : null}
1597
+ ${this.enableSettings
1598
+ ? html `
1599
+ <div>
1600
+ <lit-responsive-button
1601
+ variant="dashed"
1602
+ label="${msg('Přiřadit sloupec')}"
1603
+ icon="add"
1604
+ style="display: inline-block"
1605
+ @click="${this.toggleCustomPopover}"
1606
+ ></lit-responsive-button>
1607
+
1608
+ <simple-popper
1609
+ .showing=${this.isOpen}
1610
+ .placement=${'top-end'}
1611
+ .manualOpening=${true}
1612
+ .maxWidthAsTarget=${false}
1613
+ .onClose=${() => this.closePopover()}
1614
+ >
1615
+ <div
1616
+ class="popper-input"
1617
+ style="position: sticky; top: 0; z-index: 1;"
1618
+ >
1619
+ <lit-input
1620
+ .value=${this.filterText}
1621
+ .onInput=${(value) => {
1622
+ this.filterText =
1623
+ value?.toLowerCase?.() ||
1624
+ '';
1625
+ }}
1626
+ .onClear=${() => {
1627
+ this.filterText = '';
1628
+ }}
1629
+ placeholder="${msg('Zadejte název sloupce')}"
1630
+ ></lit-input>
1631
+ </div>
1632
+ <lit-menu tabindex="0">
1633
+ ${this.columns
1634
+ .filter((col) => {
1635
+ const name = col?.headerName?.toLowerCase() ||
1636
+ col?.field.toLowerCase();
1637
+ return name.includes(this.filterText);
1638
+ })
1639
+ .sort((a, b) => {
1640
+ const aUnderscore = a.field.startsWith('_');
1641
+ const bUnderscore = b.field.startsWith('_');
1642
+ if (aUnderscore && !bUnderscore)
1643
+ return 1;
1644
+ if (!aUnderscore && bUnderscore)
1645
+ return -1;
1646
+ return (a.headerName || a.field).localeCompare(b.headerName || b.field);
1647
+ })
1648
+ .map((col) => html `
1649
+ <lit-menu-item
1650
+ .onClick=${() => this.toggleColumn(col?.field)}
1651
+ .isActive=${!(this
1652
+ .columnVisibility?.[col?.field] === false)}
1653
+ >
1654
+ <span
1655
+ class="menu-item--multiple"
1656
+ >
1657
+ <lit-checkbox
1658
+ class="cursor"
1659
+ .checked=${!(this
1660
+ .columnVisibility?.[col
1661
+ ?.field] === false)}
1662
+ ></lit-checkbox>
1663
+ ${col?.headerName ||
1664
+ col?.field}
1665
+ </span>
1666
+ </lit-menu-item>
1667
+ `)}
1668
+ </lit-menu>
1669
+
1670
+ ${isEqual(filteredColumns.length, 0)
1671
+ ? html `
1672
+ <div
1673
+ style="display: flex; flex-direction: column; align-items: center; padding: 1rem;"
1674
+ >
1675
+ <div
1676
+ style="max-height: 6rem; max-width: 6rem;"
1677
+ >
1678
+ <not-found></not-found>
1679
+ </div>
1680
+ <div>
1681
+ ${msg('Nenalezeno')}
1682
+ </div>
1683
+ </div>
1684
+ `
1685
+ : null}
1686
+ </simple-popper>
1687
+
1688
+ <lit-icon-button
1689
+ icon="administration"
1690
+ @click="${this.toggleModal}"
1691
+ variant="dashed"
1692
+ style="display: inline-block"
1693
+ ></lit-icon-button>
1694
+ <data-grid-settings
1695
+ .onClose="${() => {
1696
+ this.isOpenModal = false;
1697
+ }}"
1698
+ .isOpenModal="${this.isOpenModal}"
1699
+ .enableFiltering="${this.enableFiltering}"
1700
+ .enableSorting="${this.enableSorting}"
1701
+ .columnDefaultSize="${this
1702
+ .columnDefaultSize}"
1703
+ .columnGroupedColor="${this
1704
+ .columnGroupedColor}"
1705
+ .rowAggregationColor="${this
1706
+ .rowAggregationColor}"
1707
+ .enableGrouping="${this.enableGrouping}"
1708
+ .enableColumnPinning="${this
1709
+ .enableColumnPinning}"
1710
+ .exportData="${this.exportData}"
1711
+ .actionButtonsInMenu="${this
1712
+ .actionButtonsInMenu}"
1713
+ .hideFooter="${this.hideFooter}"
1714
+ .onSettingsChangedModal="${this.onSettingsChangedCallback.bind(this)}"
1715
+ ></data-grid-settings>
1716
+ </div>
1717
+ `
1718
+ : null}
1719
+ </div>
1720
+ </slot>
1721
+ `
1722
+ : ''}
1723
+ </div>
1724
+ ${this.table.getRowModel().rows.length < 1 && !this.isLoading
1725
+ ? html ` <div class="data-grid__empty">
1726
+ <div style="max-height: 7.125rem; max-width: 7.125rem">
1727
+ <not-found></not-found>
1728
+ </div>
1729
+ <div class="data-grid__empty-text">${msg('Nic dalšího tu není')}</div>
1730
+ </div>`
1731
+ : null}
1732
+ </div>
1733
+ `;
1734
+ }
1735
+ };
1736
+ LitDataGridTanstack.styles = [
1737
+ // styles,
1738
+ css `
1739
+ *,
1740
+ *::before,
1741
+ *::after {
1742
+ margin: 0;
1743
+ padding: 0;
1744
+ box-sizing: border-box;
1745
+ }
1746
+
1747
+ display: block;
1748
+ font-family: 'Inter', sans-serif;
1749
+ box-sizing: border-box;
1750
+
1751
+ td {
1752
+ padding: 0px;
1753
+ }
1754
+ .data-grid__wrapper {
1755
+ position: relative;
1756
+ background-color: var(--background-paper, #fff);
1757
+ height: 100%;
1758
+ z-index: 1;
1759
+ }
1760
+
1761
+ .grid {
1762
+ overflow: auto;
1763
+ position: relative;
1764
+ height: 100%;
1765
+ }
1766
+
1767
+ .data-grid__empty {
1768
+ position: absolute;
1769
+ top: 50%;
1770
+ left: 50%;
1771
+ transform: translate(-50%, -50%);
1772
+ font-size: 0.875rem;
1773
+ text-align: center;
1774
+ }
1775
+
1776
+ table {
1777
+ border-collapse: collapse;
1778
+ border-spacing: 0;
1779
+ width: 99% !important;
1780
+ height: calc(100% - 38px);
1781
+ }
1782
+
1783
+ thead {
1784
+ display: flex;
1785
+ position: sticky;
1786
+ top: 0;
1787
+ z-index: 10;
1788
+ background-color: var(--background-paper, #fff);
1789
+ border-bottom: 1px solid var(--color-divider, #d0d3db);
1790
+ }
1791
+
1792
+ tr.head {
1793
+ display: flex;
1794
+ width: 100%;
1795
+ }
1796
+
1797
+ th.head {
1798
+ display: block;
1799
+ position: relative;
1800
+ padding: 0 6px;
1801
+ gap: 0.25rem;
1802
+ //z-index: auto !important;
1803
+ }
1804
+
1805
+ tbody {
1806
+ display: grid;
1807
+ position: relative;
1808
+ outline: none;
1809
+ }
1810
+
1811
+ tr.body {
1812
+ width: 100%;
1813
+ border-bottom: 1px solid var(--color-divider, #d0d3db);
1814
+ display: flex;
1815
+ overflow: visible;
1816
+ }
1817
+ tr:focus {
1818
+ background-color: var(--color-primary-light, #f0fadf);
1819
+ outline: none;
1820
+ }
1821
+ // tr.selected:focus {
1822
+ // background-color: var(--color-primary-main, #f0fadf);
1823
+ // outline: none;
1824
+ // }
1825
+
1826
+ tr.body:hover:not(.selected):not(:focus) {
1827
+ cursor: pointer;
1828
+ background-color: var(--background-default, #eff3f4);
1829
+ }
1830
+
1831
+ td {
1832
+ display: table-cell;
1833
+ white-space: nowrap;
1834
+ overflow: hidden;
1835
+ padding: 0px 14px;
1836
+ font-weight: 500;
1837
+ font-size: 12px;
1838
+ color: var(--text-primary, #111827);
1839
+ display: flex;
1840
+ align-items: center;
1841
+ }
1842
+
1843
+ .column-header {
1844
+ font-size: 11px;
1845
+ font-weight: 600;
1846
+ color: var(--text-secondary, #5d6371);
1847
+ cursor: pointer;
1848
+ gap: 0.25rem;
1849
+ justify-content: center;
1850
+ align-items: center;
1851
+ margin: 0 0.25rem;
1852
+ overflow: hidden;
1853
+ white-space: nowrap;
1854
+ text-overflow: ellipsis;
1855
+ height: inherit;
1856
+ display: flex;
1857
+ }
1858
+ .no-select,
1859
+ .no-select * {
1860
+ user-select: none !important;
1861
+ }
1862
+ .ellipsis {
1863
+ overflow: hidden;
1864
+ white-space: nowrap;
1865
+ text-overflow: ellipsis;
1866
+ }
1867
+
1868
+ .icons-group-pin {
1869
+ display: flex;
1870
+ height: 100%;
1871
+ justify-content: space-between;
1872
+ flex-grow: 1;
1873
+ }
1874
+
1875
+ .flex {
1876
+ display: flex;
1877
+ }
1878
+
1879
+ .drag-handle {
1880
+ display: flex;
1881
+ align-items: center;
1882
+ justify-content: center;
1883
+ padding: 1px 6px;
1884
+ cursor: grab;
1885
+ }
1886
+
1887
+ .resizer {
1888
+ height: 23px;
1889
+ padding: 0 0 0 6px;
1890
+ text-align: start;
1891
+ //cursor: col-resize;
1892
+ user-select: none;
1893
+ touch-action: none;
1894
+ }
1895
+
1896
+ .resize-handle {
1897
+ position: absolute;
1898
+ top: 0;
1899
+ right: 0px;
1900
+ width: 6px;
1901
+ height: 100%;
1902
+ background: transparent;
1903
+ cursor: col-resize;
1904
+ transition: background-color 0.2s ease-in-out;
1905
+ // border-radius: 5px;
1906
+ // padding-bottom: 5px;
1907
+ }
1908
+
1909
+ .resize-handle:hover {
1910
+ border-right: 2px solid var(--color-primary-main, #75b603);
1911
+ }
1912
+
1913
+ .resizer.ltr {
1914
+ right: 0;
1915
+ }
1916
+
1917
+ .resizer.rtl {
1918
+ left: 0;
1919
+ }
1920
+
1921
+ .resizer.is-resizing {
1922
+ opacity: 1;
1923
+ }
1924
+
1925
+ .footer-container {
1926
+ position: sticky;
1927
+ left: 0;
1928
+ bottom: 0;
1929
+ background-color: var(--background-paper, #fff);
1930
+ width: auto;
1931
+ border-top: 1px solid var(--color-divider, #d0d3db);
1932
+ height: 2.375rem;
1933
+ display: flex;
1934
+ flex-direction: row;
1935
+ justify-content: space-between;
1936
+ align-items: center;
1937
+ // padding: 0 16px;
1938
+ z-index: 10;
1939
+ }
1940
+
1941
+ .right-actions {
1942
+ position: absolute;
1943
+ right: 0;
1944
+ display: flex;
1945
+ }
1946
+
1947
+ .numberCount {
1948
+ margin: 0.375rem 0;
1949
+ font-size: 12px;
1950
+ font-weight: 400;
1951
+ color: var(--text-primary, #111827);
1952
+ display: flex;
1953
+ align-items: center;
1954
+ }
1955
+
1956
+ .scroll-button {
1957
+ position: absolute;
1958
+ top: 50%;
1959
+ transform: translateY(-50%);
1960
+ z-index: 1000;
1961
+ cursor: pointer;
1962
+ }
1963
+
1964
+ .scroll-button.left {
1965
+ left: 3rem;
1966
+ }
1967
+
1968
+ .scroll-button.right {
1969
+ right: 3rem;
1970
+ }
1971
+
1972
+ .selected {
1973
+ background-color: var(--color-primary-light, #f0fadf);
1974
+ }
1975
+
1976
+ .sortFilled {
1977
+ visibility: hidden;
1978
+ }
1979
+ .header {
1980
+ display: flex;
1981
+ align-items: center;
1982
+ height: 100%;
1983
+ }
1984
+ .header:hover .sortFilled {
1985
+ visibility: visible;
1986
+ }
1987
+ .grouped-column {
1988
+ display: flex;
1989
+ align-items: center;
1990
+ justify-content: space-between;
1991
+ width: 100%;
1992
+ gap: 0.25rem;
1993
+ }
1994
+ .grouped-column--icon-button {
1995
+ display: flex;
1996
+ align-items: center;
1997
+ position: relative;
1998
+ top: -1.5px;
1999
+ }
2000
+ .grouped-column--label {
2001
+ display: flex;
2002
+ align-items: center;
2003
+ overflow: hidden;
2004
+ flex-grow: 1;
2005
+ }
2006
+ .grouped-column--pill {
2007
+ margin-left: 0.5rem;
2008
+ }
2009
+ .filterCirclePoint {
2010
+ width: 8px;
2011
+ height: 8px;
2012
+ border-radius: 50%;
2013
+ background-color: var(--color-primary-main, #75b603);
2014
+ display: inline-block;
2015
+ vertical-align: middle;
2016
+ }
2017
+ .cursor {
2018
+ cursor: pointer;
2019
+ color: var(--text-secondary, #5d6371);
2020
+ }
2021
+ .data-grid__empty-text {
2022
+ color: var(--text-primary, #5d6371);
2023
+ }
2024
+ `,
2025
+ ];
2026
+ __decorate([
2027
+ property({ type: Array, reflect: true })
2028
+ ], LitDataGridTanstack.prototype, "row", void 0);
2029
+ __decorate([
2030
+ property({ type: Array })
2031
+ ], LitDataGridTanstack.prototype, "columns", void 0);
2032
+ __decorate([
2033
+ property({ type: Number })
2034
+ ], LitDataGridTanstack.prototype, "columnDefaultSize", void 0);
2035
+ __decorate([
2036
+ property({ type: Number })
2037
+ ], LitDataGridTanstack.prototype, "columnDefaultMinSize", void 0);
2038
+ __decorate([
2039
+ property({ type: Number })
2040
+ ], LitDataGridTanstack.prototype, "columnDefaultMaxSize", void 0);
2041
+ __decorate([
2042
+ property({ type: String })
2043
+ ], LitDataGridTanstack.prototype, "columnGroupedColor", void 0);
2044
+ __decorate([
2045
+ property({ type: String })
2046
+ ], LitDataGridTanstack.prototype, "rowAggregationColor", void 0);
2047
+ __decorate([
2048
+ property({ type: Boolean })
2049
+ ], LitDataGridTanstack.prototype, "enableRowVirtualization", void 0);
2050
+ __decorate([
2051
+ property({ type: Boolean })
2052
+ ], LitDataGridTanstack.prototype, "enableColumnVirtualization", void 0);
2053
+ __decorate([
2054
+ property({ type: Boolean })
2055
+ ], LitDataGridTanstack.prototype, "enableColumnPinning", void 0);
2056
+ __decorate([
2057
+ property({ type: Boolean })
2058
+ ], LitDataGridTanstack.prototype, "enableColumnOrdering", void 0);
2059
+ __decorate([
2060
+ property({ type: Boolean })
2061
+ ], LitDataGridTanstack.prototype, "enableGrouping", void 0);
2062
+ __decorate([
2063
+ property({ type: Boolean })
2064
+ ], LitDataGridTanstack.prototype, "enablePinning", void 0);
2065
+ __decorate([
2066
+ property({ type: Boolean })
2067
+ ], LitDataGridTanstack.prototype, "exportData", void 0);
2068
+ __decorate([
2069
+ property({ type: Boolean })
2070
+ ], LitDataGridTanstack.prototype, "actionButtonsInMenu", void 0);
2071
+ __decorate([
2072
+ property({ type: String })
2073
+ ], LitDataGridTanstack.prototype, "id", void 0);
2074
+ __decorate([
2075
+ property({ type: Array })
2076
+ ], LitDataGridTanstack.prototype, "initialGroups", void 0);
2077
+ __decorate([
2078
+ property({ type: Array })
2079
+ ], LitDataGridTanstack.prototype, "initialSorting", void 0);
2080
+ __decorate([
2081
+ property({ type: Object })
2082
+ ], LitDataGridTanstack.prototype, "initialColumnVisibility", void 0);
2083
+ __decorate([
2084
+ property({ type: Object })
2085
+ ], LitDataGridTanstack.prototype, "initialRowExpanded", void 0);
2086
+ __decorate([
2087
+ property({ type: Object })
2088
+ ], LitDataGridTanstack.prototype, "columnSizing", void 0);
2089
+ __decorate([
2090
+ property({ type: Array })
2091
+ ], LitDataGridTanstack.prototype, "leftPinnedColumns", void 0);
2092
+ __decorate([
2093
+ property({ type: Array })
2094
+ ], LitDataGridTanstack.prototype, "rightPinnedColumns", void 0);
2095
+ __decorate([
2096
+ property({ type: Boolean })
2097
+ ], LitDataGridTanstack.prototype, "enableFiltering", void 0);
2098
+ __decorate([
2099
+ property({ type: Boolean })
2100
+ ], LitDataGridTanstack.prototype, "enableSorting", void 0);
2101
+ __decorate([
2102
+ property({ type: String })
2103
+ ], LitDataGridTanstack.prototype, "userLang", void 0);
2104
+ __decorate([
2105
+ property({ type: String })
2106
+ ], LitDataGridTanstack.prototype, "dateFormat", void 0);
2107
+ __decorate([
2108
+ property({ type: Boolean })
2109
+ ], LitDataGridTanstack.prototype, "isLoading", void 0);
2110
+ __decorate([
2111
+ property({ type: Boolean })
2112
+ ], LitDataGridTanstack.prototype, "enableRowSelection", void 0);
2113
+ __decorate([
2114
+ property({ type: Array })
2115
+ ], LitDataGridTanstack.prototype, "initialFiltering", void 0);
2116
+ __decorate([
2117
+ property({ type: Boolean })
2118
+ ], LitDataGridTanstack.prototype, "server", void 0);
2119
+ __decorate([
2120
+ property({ type: Number })
2121
+ ], LitDataGridTanstack.prototype, "scrollEndThreshold", void 0);
2122
+ __decorate([
2123
+ property({ type: String })
2124
+ ], LitDataGridTanstack.prototype, "rowDensity", void 0);
2125
+ __decorate([
2126
+ property({ type: Boolean })
2127
+ ], LitDataGridTanstack.prototype, "enableMultiRowSelection", void 0);
2128
+ __decorate([
2129
+ property({ type: Number })
2130
+ ], LitDataGridTanstack.prototype, "totalNumberRows", void 0);
2131
+ __decorate([
2132
+ property({ type: Number })
2133
+ ], LitDataGridTanstack.prototype, "minFilterCharacters", void 0);
2134
+ __decorate([
2135
+ property({ type: Boolean })
2136
+ ], LitDataGridTanstack.prototype, "localizeDate", void 0);
2137
+ __decorate([
2138
+ property({ type: Boolean })
2139
+ ], LitDataGridTanstack.prototype, "rowsSelected", void 0);
2140
+ __decorate([
2141
+ property({ type: Boolean })
2142
+ ], LitDataGridTanstack.prototype, "enableSettings", void 0);
2143
+ __decorate([
2144
+ property({ attribute: false })
2145
+ ], LitDataGridTanstack.prototype, "onSettingsChanged", void 0);
2146
+ __decorate([
2147
+ property({ type: Function })
2148
+ ], LitDataGridTanstack.prototype, "onRowClick", void 0);
2149
+ __decorate([
2150
+ property({ type: Function })
2151
+ ], LitDataGridTanstack.prototype, "onRowsScrollEnd", void 0);
2152
+ __decorate([
2153
+ property({ type: Function })
2154
+ ], LitDataGridTanstack.prototype, "onRowDoubleClick", void 0);
2155
+ __decorate([
2156
+ property({ type: Function })
2157
+ ], LitDataGridTanstack.prototype, "rowDensityChange", void 0);
2158
+ __decorate([
2159
+ property({ type: Function })
2160
+ ], LitDataGridTanstack.prototype, "exportExcelFn", void 0);
2161
+ __decorate([
2162
+ property({ type: Function })
2163
+ ], LitDataGridTanstack.prototype, "exportCsvFn", void 0);
2164
+ __decorate([
2165
+ property({ type: Function })
2166
+ ], LitDataGridTanstack.prototype, "getTotalNumberFn", void 0);
2167
+ __decorate([
2168
+ property({ type: Function })
2169
+ ], LitDataGridTanstack.prototype, "onCellKeyDown", void 0);
2170
+ __decorate([
2171
+ property({ type: Function })
2172
+ ], LitDataGridTanstack.prototype, "getRowId", void 0);
2173
+ __decorate([
2174
+ property({ type: Function })
2175
+ ], LitDataGridTanstack.prototype, "onColumnResize", void 0);
2176
+ __decorate([
2177
+ property({ type: Boolean })
2178
+ ], LitDataGridTanstack.prototype, "onColumnFiltersChanged", void 0);
2179
+ __decorate([
2180
+ property({ type: Boolean })
2181
+ ], LitDataGridTanstack.prototype, "onColumnSortChanged", void 0);
2182
+ __decorate([
2183
+ property({ type: Function })
2184
+ ], LitDataGridTanstack.prototype, "onRowSelectionChanged", void 0);
2185
+ __decorate([
2186
+ property({ type: Function })
2187
+ ], LitDataGridTanstack.prototype, "onColumnOrderChanged", void 0);
2188
+ __decorate([
2189
+ property({ type: Boolean })
2190
+ ], LitDataGridTanstack.prototype, "hideFooter", void 0);
2191
+ __decorate([
2192
+ property({ type: Object })
2193
+ ], LitDataGridTanstack.prototype, "columnVisibility", void 0);
2194
+ __decorate([
2195
+ property({ type: Function })
2196
+ ], LitDataGridTanstack.prototype, "onColumnVisibilityChanged", void 0);
2197
+ __decorate([
2198
+ property({ type: Function })
2199
+ ], LitDataGridTanstack.prototype, "onMouseDown", void 0);
2200
+ __decorate([
2201
+ property({ type: Function })
2202
+ ], LitDataGridTanstack.prototype, "onRowFocusChanged", void 0);
2203
+ __decorate([
2204
+ property({ type: Number })
2205
+ ], LitDataGridTanstack.prototype, "focusedRowIndex", void 0);
2206
+ __decorate([
2207
+ property({ type: Boolean })
2208
+ ], LitDataGridTanstack.prototype, "autoFocus", void 0);
2209
+ __decorate([
2210
+ state()
2211
+ ], LitDataGridTanstack.prototype, "rowsCount", void 0);
2212
+ __decorate([
2213
+ state()
2214
+ ], LitDataGridTanstack.prototype, "isScrollable", void 0);
2215
+ __decorate([
2216
+ state()
2217
+ ], LitDataGridTanstack.prototype, "disableScrollLeft", void 0);
2218
+ __decorate([
2219
+ state()
2220
+ ], LitDataGridTanstack.prototype, "disableScrollRight", void 0);
2221
+ __decorate([
2222
+ state()
2223
+ ], LitDataGridTanstack.prototype, "columnOrder", void 0);
2224
+ __decorate([
2225
+ state()
2226
+ ], LitDataGridTanstack.prototype, "table", void 0);
2227
+ __decorate([
2228
+ state()
2229
+ ], LitDataGridTanstack.prototype, "isOpen", void 0);
2230
+ __decorate([
2231
+ state()
2232
+ ], LitDataGridTanstack.prototype, "filterText", void 0);
2233
+ __decorate([
2234
+ state()
2235
+ ], LitDataGridTanstack.prototype, "isOpenModal", void 0);
2236
+ __decorate([
2237
+ query('tbody')
2238
+ ], LitDataGridTanstack.prototype, "tableBody", void 0);
2239
+ __decorate([
2240
+ query('.grid')
2241
+ ], LitDataGridTanstack.prototype, "_container", void 0);
2242
+ LitDataGridTanstack = __decorate([
2243
+ customElement('lit-data-grid-tanstack')
2244
+ ], LitDataGridTanstack);
2245
+ export { LitDataGridTanstack };
2246
+ //# sourceMappingURL=lit-data-grid-tanstack.js.map