@vaadin/grid 24.3.0-alpha5 → 24.3.0-alpha7

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 (31) hide show
  1. package/package.json +22 -10
  2. package/src/vaadin-grid-a11y-mixin.js +1 -1
  3. package/src/vaadin-grid-active-item-mixin.js +1 -0
  4. package/src/vaadin-grid-array-data-provider-mixin.js +13 -16
  5. package/src/vaadin-grid-column-group-mixin.js +16 -21
  6. package/src/vaadin-grid-column-mixin.js +54 -18
  7. package/src/vaadin-grid-column.js +2 -0
  8. package/src/vaadin-grid-data-provider-mixin.js +20 -4
  9. package/src/vaadin-grid-drag-and-drop-mixin.js +16 -4
  10. package/src/vaadin-grid-dynamic-columns-mixin.js +22 -17
  11. package/src/vaadin-grid-filter-column-mixin.js +8 -2
  12. package/src/vaadin-grid-filter-element-mixin.js +10 -1
  13. package/src/vaadin-grid-filter-mixin.js +4 -4
  14. package/src/vaadin-grid-helpers.js +94 -0
  15. package/src/vaadin-grid-keyboard-navigation-mixin.js +8 -1
  16. package/src/vaadin-grid-mixin.js +25 -38
  17. package/src/vaadin-grid-row-details-mixin.js +7 -8
  18. package/src/vaadin-grid-scroll-mixin.js +1 -0
  19. package/src/vaadin-grid-selection-column-base-mixin.js +12 -4
  20. package/src/vaadin-grid-selection-mixin.js +4 -3
  21. package/src/vaadin-grid-sort-column-mixin.js +5 -1
  22. package/src/vaadin-grid-sorter-mixin.js +2 -0
  23. package/src/vaadin-grid-styles.js +341 -345
  24. package/src/vaadin-grid-styling-mixin.js +8 -2
  25. package/src/vaadin-grid-tree-column-mixin.js +8 -1
  26. package/src/vaadin-grid-tree-toggle-mixin.js +2 -0
  27. package/src/vaadin-grid.js +4 -2
  28. package/theme/lumo/vaadin-grid-sorter-styles.js +1 -1
  29. package/theme/lumo/vaadin-grid-styles.js +7 -5
  30. package/web-types.json +4 -4
  31. package/web-types.lit.json +4 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/grid",
3
- "version": "24.3.0-alpha5",
3
+ "version": "24.3.0-alpha7",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -25,7 +25,19 @@
25
25
  "lit.d.ts",
26
26
  "lit.js",
27
27
  "src",
28
+ "!src/lit-all-imports.js",
29
+ "!src/vaadin-lit-grid-column-group.js",
30
+ "!src/vaadin-lit-grid-column.js",
31
+ "!src/vaadin-lit-grid-filter-column.js",
32
+ "!src/vaadin-lit-grid-filter.js",
33
+ "!src/vaadin-lit-grid-selection-column.js",
34
+ "!src/vaadin-lit-grid-sort-column.js",
35
+ "!src/vaadin-lit-grid-sorter.js",
36
+ "!src/vaadin-lit-grid-tree-column.js",
37
+ "!src/vaadin-lit-grid-tree-toggle.js",
38
+ "!src/vaadin-lit-grid.js",
28
39
  "theme",
40
+ "!theme/lumo/lit-all-imports.js",
29
41
  "vaadin-*.d.ts",
30
42
  "vaadin-*.js",
31
43
  "web-types.json",
@@ -46,14 +58,14 @@
46
58
  "dependencies": {
47
59
  "@open-wc/dedupe-mixin": "^1.3.0",
48
60
  "@polymer/polymer": "^3.0.0",
49
- "@vaadin/a11y-base": "24.3.0-alpha5",
50
- "@vaadin/checkbox": "24.3.0-alpha5",
51
- "@vaadin/component-base": "24.3.0-alpha5",
52
- "@vaadin/lit-renderer": "24.3.0-alpha5",
53
- "@vaadin/text-field": "24.3.0-alpha5",
54
- "@vaadin/vaadin-lumo-styles": "24.3.0-alpha5",
55
- "@vaadin/vaadin-material-styles": "24.3.0-alpha5",
56
- "@vaadin/vaadin-themable-mixin": "24.3.0-alpha5"
61
+ "@vaadin/a11y-base": "24.3.0-alpha7",
62
+ "@vaadin/checkbox": "24.3.0-alpha7",
63
+ "@vaadin/component-base": "24.3.0-alpha7",
64
+ "@vaadin/lit-renderer": "24.3.0-alpha7",
65
+ "@vaadin/text-field": "24.3.0-alpha7",
66
+ "@vaadin/vaadin-lumo-styles": "24.3.0-alpha7",
67
+ "@vaadin/vaadin-material-styles": "24.3.0-alpha7",
68
+ "@vaadin/vaadin-themable-mixin": "24.3.0-alpha7"
57
69
  },
58
70
  "devDependencies": {
59
71
  "@esm-bundle/chai": "^4.3.4",
@@ -65,5 +77,5 @@
65
77
  "web-types.json",
66
78
  "web-types.lit.json"
67
79
  ],
68
- "gitHead": "b1fb1be6cc5dc69a82952571fbbda4ffd8e7527c"
80
+ "gitHead": "cf40acccb9e061debdf4d38b4149d6f2c50f8e10"
69
81
  }
@@ -11,7 +11,7 @@ import { iterateChildren, iterateRowCells } from './vaadin-grid-helpers.js';
11
11
  export const A11yMixin = (superClass) =>
12
12
  class A11yMixin extends superClass {
13
13
  static get observers() {
14
- return ['_a11yUpdateGridSize(size, _columnTree, _columnTree.*)'];
14
+ return ['_a11yUpdateGridSize(size, _columnTree)'];
15
15
  }
16
16
 
17
17
  /** @private */
@@ -44,6 +44,7 @@ export const ActiveItemMixin = (superClass) =>
44
44
  type: Object,
45
45
  notify: true,
46
46
  value: null,
47
+ sync: true,
47
48
  },
48
49
  };
49
50
  }
@@ -17,23 +17,24 @@ export const ArrayDataProviderMixin = (superClass) =>
17
17
  *
18
18
  * @type {Array<!GridItem> | undefined}
19
19
  */
20
- items: Array,
20
+ items: {
21
+ type: Array,
22
+ sync: true,
23
+ },
21
24
  };
22
25
  }
23
26
 
24
27
  static get observers() {
25
- return ['__dataProviderOrItemsChanged(dataProvider, items, isAttached, items.*, _filters, _sorters)'];
28
+ return ['__dataProviderOrItemsChanged(dataProvider, items, isAttached, _filters, _sorters, items.*)'];
26
29
  }
27
30
 
28
31
  /** @private */
29
32
  __setArrayDataProvider(items) {
30
33
  const arrayDataProvider = createArrayDataProvider(this.items, {});
31
34
  arrayDataProvider.__items = items;
32
- this.setProperties({
33
- _arrayDataProvider: arrayDataProvider,
34
- size: items.length,
35
- dataProvider: arrayDataProvider,
36
- });
35
+ this._arrayDataProvider = arrayDataProvider;
36
+ this.size = items.length;
37
+ this.dataProvider = arrayDataProvider;
37
38
  }
38
39
 
39
40
  /** @private */
@@ -47,17 +48,13 @@ export const ArrayDataProviderMixin = (superClass) =>
47
48
 
48
49
  if (dataProvider !== this._arrayDataProvider) {
49
50
  // A custom data provider was set externally
50
- this.setProperties({
51
- _arrayDataProvider: undefined,
52
- items: undefined,
53
- });
51
+ this._arrayDataProvider = undefined;
52
+ this.items = undefined;
54
53
  } else if (!items) {
55
54
  // The items array was unset
56
- this.setProperties({
57
- _arrayDataProvider: undefined,
58
- dataProvider: undefined,
59
- size: 0,
60
- });
55
+ this._arrayDataProvider = undefined;
56
+ this.dataProvider = undefined;
57
+ this.size = 0;
61
58
  this.clearCache();
62
59
  } else if (this._arrayDataProvider.__items === items) {
63
60
  // The items array was modified
@@ -3,11 +3,10 @@
3
3
  * Copyright (c) 2016 - 2023 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
- import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
7
6
  import { animationFrame } from '@vaadin/component-base/src/async.js';
8
7
  import { Debouncer } from '@vaadin/component-base/src/debounce.js';
9
8
  import { ColumnBaseMixin } from './vaadin-grid-column-mixin.js';
10
- import { updateColumnOrders } from './vaadin-grid-helpers.js';
9
+ import { ColumnObserver, updateColumnOrders } from './vaadin-grid-helpers.js';
11
10
 
12
11
  /**
13
12
  * A mixin providing common vaadin-grid-column-group functionality.
@@ -33,6 +32,7 @@ export const GridColumnGroupMixin = (superClass) =>
33
32
  flexGrow: {
34
33
  type: Number,
35
34
  readOnly: true,
35
+ sync: true,
36
36
  },
37
37
 
38
38
  /**
@@ -330,29 +330,24 @@ export const GridColumnGroupMixin = (superClass) =>
330
330
  * @protected
331
331
  */
332
332
  _getChildColumns(el) {
333
- return FlattenedNodesObserver.getFlattenedNodes(el).filter(this._isColumnElement);
333
+ return ColumnObserver.getColumns(el);
334
334
  }
335
335
 
336
336
  /** @private */
337
337
  _addNodeObserver() {
338
- this._observer = new FlattenedNodesObserver(this, (info) => {
339
- if (
340
- info.addedNodes.filter(this._isColumnElement).length > 0 ||
341
- info.removedNodes.filter(this._isColumnElement).length > 0
342
- ) {
343
- // Prevent synchronization of the hidden state to child columns.
344
- // If the group is currently auto-hidden, and a visible column is added,
345
- // we don't want the other columns to become visible as well.
346
- this._preventHiddenSynchronization = true;
347
- this._rootColumns = this._getChildColumns(this);
348
- this._childColumns = this._rootColumns;
349
- this._updateVisibleChildColumns(this._childColumns);
350
- this._preventHiddenSynchronization = false;
351
-
352
- // Update the column tree
353
- if (this._grid && this._grid._debounceUpdateColumnTree) {
354
- this._grid._debounceUpdateColumnTree();
355
- }
338
+ this._observer = new ColumnObserver(this, () => {
339
+ // Prevent synchronization of the hidden state to child columns.
340
+ // If the group is currently auto-hidden, and a visible column is added,
341
+ // we don't want the other columns to become visible as well.
342
+ this._preventHiddenSynchronization = true;
343
+ this._rootColumns = this._getChildColumns(this);
344
+ this._childColumns = this._rootColumns;
345
+ this._updateVisibleChildColumns(this._childColumns);
346
+ this._preventHiddenSynchronization = false;
347
+
348
+ // Update the column tree
349
+ if (this._grid && this._grid._debounceUpdateColumnTree) {
350
+ this._grid._debounceUpdateColumnTree();
356
351
  }
357
352
  });
358
353
  this._observer.flush();
@@ -23,6 +23,7 @@ export const ColumnBaseMixin = (superClass) =>
23
23
  */
24
24
  resizable: {
25
25
  type: Boolean,
26
+ sync: true,
26
27
  value() {
27
28
  if (this.localName === 'vaadin-grid-column-group') {
28
29
  return;
@@ -44,6 +45,7 @@ export const ColumnBaseMixin = (superClass) =>
44
45
  frozen: {
45
46
  type: Boolean,
46
47
  value: false,
48
+ sync: true,
47
49
  },
48
50
 
49
51
  /**
@@ -59,6 +61,7 @@ export const ColumnBaseMixin = (superClass) =>
59
61
  frozenToEnd: {
60
62
  type: Boolean,
61
63
  value: false,
64
+ sync: true,
62
65
  },
63
66
 
64
67
  /**
@@ -74,6 +77,7 @@ export const ColumnBaseMixin = (superClass) =>
74
77
  rowHeader: {
75
78
  type: Boolean,
76
79
  value: false,
80
+ sync: true,
77
81
  },
78
82
 
79
83
  /**
@@ -82,6 +86,7 @@ export const ColumnBaseMixin = (superClass) =>
82
86
  hidden: {
83
87
  type: Boolean,
84
88
  value: false,
89
+ sync: true,
85
90
  },
86
91
 
87
92
  /**
@@ -89,6 +94,7 @@ export const ColumnBaseMixin = (superClass) =>
89
94
  */
90
95
  header: {
91
96
  type: String,
97
+ sync: true,
92
98
  },
93
99
 
94
100
  /**
@@ -99,6 +105,7 @@ export const ColumnBaseMixin = (superClass) =>
99
105
  */
100
106
  textAlign: {
101
107
  type: String,
108
+ sync: true,
102
109
  },
103
110
 
104
111
  /**
@@ -108,6 +115,7 @@ export const ColumnBaseMixin = (superClass) =>
108
115
  */
109
116
  headerPartName: {
110
117
  type: String,
118
+ sync: true,
111
119
  },
112
120
 
113
121
  /**
@@ -117,6 +125,7 @@ export const ColumnBaseMixin = (superClass) =>
117
125
  */
118
126
  footerPartName: {
119
127
  type: String,
128
+ sync: true,
120
129
  },
121
130
 
122
131
  /**
@@ -126,6 +135,7 @@ export const ColumnBaseMixin = (superClass) =>
126
135
  _lastFrozen: {
127
136
  type: Boolean,
128
137
  value: false,
138
+ sync: true,
129
139
  },
130
140
 
131
141
  /**
@@ -135,6 +145,7 @@ export const ColumnBaseMixin = (superClass) =>
135
145
  _bodyContentHidden: {
136
146
  type: Boolean,
137
147
  value: false,
148
+ sync: true,
138
149
  },
139
150
 
140
151
  /**
@@ -144,13 +155,20 @@ export const ColumnBaseMixin = (superClass) =>
144
155
  _firstFrozenToEnd: {
145
156
  type: Boolean,
146
157
  value: false,
158
+ sync: true,
147
159
  },
148
160
 
149
161
  /** @protected */
150
- _order: Number,
162
+ _order: {
163
+ type: Number,
164
+ sync: true,
165
+ },
151
166
 
152
167
  /** @private */
153
- _reorderStatus: Boolean,
168
+ _reorderStatus: {
169
+ type: Boolean,
170
+ sync: true,
171
+ },
154
172
 
155
173
  /**
156
174
  * @type {Array<!HTMLElement>}
@@ -189,7 +207,10 @@ export const ColumnBaseMixin = (superClass) =>
189
207
  *
190
208
  * @type {GridHeaderFooterRenderer | null | undefined}
191
209
  */
192
- headerRenderer: Function,
210
+ headerRenderer: {
211
+ type: Function,
212
+ sync: true,
213
+ },
193
214
 
194
215
  /**
195
216
  * Represents the final header renderer computed on the set of observable arguments.
@@ -201,6 +222,7 @@ export const ColumnBaseMixin = (superClass) =>
201
222
  _headerRenderer: {
202
223
  type: Function,
203
224
  computed: '_computeHeaderRenderer(headerRenderer, header, __initialized)',
225
+ sync: true,
204
226
  },
205
227
 
206
228
  /**
@@ -212,7 +234,10 @@ export const ColumnBaseMixin = (superClass) =>
212
234
  *
213
235
  * @type {GridHeaderFooterRenderer | null | undefined}
214
236
  */
215
- footerRenderer: Function,
237
+ footerRenderer: {
238
+ type: Function,
239
+ sync: true,
240
+ },
216
241
 
217
242
  /**
218
243
  * Represents the final footer renderer computed on the set of observable arguments.
@@ -224,6 +249,7 @@ export const ColumnBaseMixin = (superClass) =>
224
249
  _footerRenderer: {
225
250
  type: Function,
226
251
  computed: '_computeFooterRenderer(footerRenderer, __initialized)',
252
+ sync: true,
227
253
  },
228
254
 
229
255
  /**
@@ -241,21 +267,21 @@ export const ColumnBaseMixin = (superClass) =>
241
267
 
242
268
  static get observers() {
243
269
  return [
244
- '_widthChanged(width, _headerCell, _footerCell, _cells.*)',
245
- '_frozenChanged(frozen, _headerCell, _footerCell, _cells.*)',
246
- '_frozenToEndChanged(frozenToEnd, _headerCell, _footerCell, _cells.*)',
247
- '_flexGrowChanged(flexGrow, _headerCell, _footerCell, _cells.*)',
248
- '_textAlignChanged(textAlign, _cells.*, _headerCell, _footerCell)',
249
- '_orderChanged(_order, _headerCell, _footerCell, _cells.*)',
270
+ '_widthChanged(width, _headerCell, _footerCell, _cells)',
271
+ '_frozenChanged(frozen, _headerCell, _footerCell, _cells)',
272
+ '_frozenToEndChanged(frozenToEnd, _headerCell, _footerCell, _cells)',
273
+ '_flexGrowChanged(flexGrow, _headerCell, _footerCell, _cells)',
274
+ '_textAlignChanged(textAlign, _cells, _headerCell, _footerCell)',
275
+ '_orderChanged(_order, _headerCell, _footerCell, _cells)',
250
276
  '_lastFrozenChanged(_lastFrozen)',
251
277
  '_firstFrozenToEndChanged(_firstFrozenToEnd)',
252
- '_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, _cells.*, path)',
278
+ '_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, path)',
253
279
  '_onHeaderRendererOrBindingChanged(_headerRenderer, _headerCell, path, header)',
254
280
  '_onFooterRendererOrBindingChanged(_footerRenderer, _footerCell)',
255
281
  '_resizableChanged(resizable, _headerCell)',
256
- '_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells.*)',
257
- '_hiddenChanged(hidden, _headerCell, _footerCell, _cells.*)',
258
- '_rowHeaderChanged(rowHeader, _cells.*)',
282
+ '_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells)',
283
+ '_hiddenChanged(hidden, _headerCell, _footerCell, _cells)',
284
+ '_rowHeaderChanged(rowHeader, _cells)',
259
285
  '__headerFooterPartNameChanged(_headerCell, _footerCell, headerPartName, footerPartName)',
260
286
  ];
261
287
  }
@@ -444,11 +470,11 @@ export const ColumnBaseMixin = (superClass) =>
444
470
 
445
471
  /** @private */
446
472
  _rowHeaderChanged(rowHeader, cells) {
447
- if (!cells.value) {
473
+ if (!cells) {
448
474
  return;
449
475
  }
450
476
 
451
- cells.value.forEach((cell) => {
477
+ cells.forEach((cell) => {
452
478
  cell.setAttribute('role', rowHeader ? 'rowheader' : 'gridcell');
453
479
  });
454
480
  }
@@ -826,6 +852,7 @@ export const GridColumnMixin = (superClass) =>
826
852
  width: {
827
853
  type: String,
828
854
  value: '100px',
855
+ sync: true,
829
856
  },
830
857
 
831
858
  /**
@@ -836,6 +863,7 @@ export const GridColumnMixin = (superClass) =>
836
863
  flexGrow: {
837
864
  type: Number,
838
865
  value: 1,
866
+ sync: true,
839
867
  },
840
868
 
841
869
  /**
@@ -855,7 +883,10 @@ export const GridColumnMixin = (superClass) =>
855
883
  *
856
884
  * @type {GridBodyRenderer | null | undefined}
857
885
  */
858
- renderer: Function,
886
+ renderer: {
887
+ type: Function,
888
+ sync: true,
889
+ },
859
890
 
860
891
  /**
861
892
  * Represents the final renderer computed on the set of observable arguments.
@@ -867,6 +898,7 @@ export const GridColumnMixin = (superClass) =>
867
898
  _renderer: {
868
899
  type: Function,
869
900
  computed: '_computeRenderer(renderer, __initialized)',
901
+ sync: true,
870
902
  },
871
903
 
872
904
  /**
@@ -875,6 +907,7 @@ export const GridColumnMixin = (superClass) =>
875
907
  */
876
908
  path: {
877
909
  type: String,
910
+ sync: true,
878
911
  },
879
912
 
880
913
  /**
@@ -916,7 +949,10 @@ export const GridColumnMixin = (superClass) =>
916
949
  * @type {Array<!HTMLElement>}
917
950
  * @protected
918
951
  */
919
- _cells: Array,
952
+ _cells: {
953
+ type: Array,
954
+ sync: true,
955
+ },
920
956
  };
921
957
  }
922
958
  };
@@ -27,3 +27,5 @@ class GridColumn extends GridColumnMixin(PolymerElement) {
27
27
  defineCustomElement(GridColumn);
28
28
 
29
29
  export { GridColumn };
30
+
31
+ export { ColumnBaseMixin } from './vaadin-grid-column-mixin.js';
@@ -24,6 +24,16 @@ export const DataProviderMixin = (superClass) =>
24
24
  size: {
25
25
  type: Number,
26
26
  notify: true,
27
+ sync: true,
28
+ },
29
+
30
+ /**
31
+ * @type {number}
32
+ * @protected
33
+ */
34
+ _flatSize: {
35
+ type: Number,
36
+ sync: true,
27
37
  },
28
38
 
29
39
  /**
@@ -35,6 +45,7 @@ export const DataProviderMixin = (superClass) =>
35
45
  type: Number,
36
46
  value: 50,
37
47
  observer: '_pageSizeChanged',
48
+ sync: true,
38
49
  },
39
50
 
40
51
  /**
@@ -64,6 +75,7 @@ export const DataProviderMixin = (superClass) =>
64
75
  type: Object,
65
76
  notify: true,
66
77
  observer: '_dataProviderChanged',
78
+ sync: true,
67
79
  },
68
80
 
69
81
  /**
@@ -82,6 +94,7 @@ export const DataProviderMixin = (superClass) =>
82
94
  _hasData: {
83
95
  type: Boolean,
84
96
  value: false,
97
+ sync: true,
85
98
  },
86
99
 
87
100
  /**
@@ -92,6 +105,7 @@ export const DataProviderMixin = (superClass) =>
92
105
  type: String,
93
106
  value: 'children',
94
107
  observer: '__itemHasChildrenPathChanged',
108
+ sync: true,
95
109
  },
96
110
 
97
111
  /**
@@ -101,6 +115,7 @@ export const DataProviderMixin = (superClass) =>
101
115
  itemIdPath: {
102
116
  type: String,
103
117
  value: null,
118
+ sync: true,
104
119
  },
105
120
 
106
121
  /**
@@ -111,6 +126,7 @@ export const DataProviderMixin = (superClass) =>
111
126
  type: Object,
112
127
  notify: true,
113
128
  value: () => [],
129
+ sync: true,
114
130
  },
115
131
 
116
132
  /**
@@ -118,13 +134,13 @@ export const DataProviderMixin = (superClass) =>
118
134
  */
119
135
  __expandedKeys: {
120
136
  type: Object,
121
- computed: '__computeExpandedKeys(itemIdPath, expandedItems.*)',
137
+ computed: '__computeExpandedKeys(itemIdPath, expandedItems)',
122
138
  },
123
139
  };
124
140
  }
125
141
 
126
142
  static get observers() {
127
- return ['_sizeChanged(size)', '_expandedItemsChanged(expandedItems.*)'];
143
+ return ['_sizeChanged(size)', '_expandedItemsChanged(expandedItems)'];
128
144
  }
129
145
 
130
146
  constructor() {
@@ -239,7 +255,7 @@ export const DataProviderMixin = (superClass) =>
239
255
  * @protected
240
256
  */
241
257
  _isExpanded(item) {
242
- return this.__expandedKeys.has(this.getItemId(item));
258
+ return this.__expandedKeys && this.__expandedKeys.has(this.getItemId(item));
243
259
  }
244
260
 
245
261
  /** @private */
@@ -251,7 +267,7 @@ export const DataProviderMixin = (superClass) =>
251
267
 
252
268
  /** @private */
253
269
  __computeExpandedKeys(itemIdPath, expandedItems) {
254
- const expanded = expandedItems.base || [];
270
+ const expanded = expandedItems || [];
255
271
  const expandedKeys = new Set();
256
272
  expanded.forEach((item) => {
257
273
  expandedKeys.add(this.getItemId(item));
@@ -45,13 +45,19 @@ export const DragAndDropMixin = (superClass) =>
45
45
  * @attr {between|on-top|on-top-or-between|on-grid} drop-mode
46
46
  * @type {GridDropMode | null | undefined}
47
47
  */
48
- dropMode: String,
48
+ dropMode: {
49
+ type: String,
50
+ sync: true,
51
+ },
49
52
 
50
53
  /**
51
54
  * Marks the grid's rows to be available for dragging.
52
55
  * @attr {boolean} rows-draggable
53
56
  */
54
- rowsDraggable: Boolean,
57
+ rowsDraggable: {
58
+ type: Boolean,
59
+ sync: true,
60
+ },
55
61
 
56
62
  /**
57
63
  * A function that filters dragging of specific grid rows. The return value should be false
@@ -68,7 +74,10 @@ export const DragAndDropMixin = (superClass) =>
68
74
  *
69
75
  * @type {GridDragAndDropFilter | null | undefined}
70
76
  */
71
- dragFilter: Function,
77
+ dragFilter: {
78
+ type: Function,
79
+ sync: true,
80
+ },
72
81
 
73
82
  /**
74
83
  * A function that filters dropping on specific grid rows. The return value should be false
@@ -85,7 +94,10 @@ export const DragAndDropMixin = (superClass) =>
85
94
  *
86
95
  * @type {GridDragAndDropFilter | null | undefined}
87
96
  */
88
- dropFilter: Function,
97
+ dropFilter: {
98
+ type: Function,
99
+ sync: true,
100
+ },
89
101
 
90
102
  /** @private */
91
103
  __dndAutoScrollThreshold: {
@@ -3,11 +3,9 @@
3
3
  * Copyright (c) 2016 - 2023 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
- import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
7
- import { PolymerElement } from '@polymer/polymer/polymer-element.js';
8
6
  import { microTask, timeOut } from '@vaadin/component-base/src/async.js';
9
7
  import { Debouncer } from '@vaadin/component-base/src/debounce.js';
10
- import { updateCellState } from './vaadin-grid-helpers.js';
8
+ import { ColumnObserver, updateCellState } from './vaadin-grid-helpers.js';
11
9
 
12
10
  function arrayEquals(arr1, arr2) {
13
11
  if (!arr1 || !arr2 || arr1.length !== arr2.length) {
@@ -59,7 +57,7 @@ export const DynamicColumnsMixin = (superClass) =>
59
57
  * @protected
60
58
  */
61
59
  _getChildColumns(el) {
62
- return FlattenedNodesObserver.getFlattenedNodes(el).filter(this._isColumnElement);
60
+ return ColumnObserver.getColumns(el);
63
61
  }
64
62
 
65
63
  /** @private */
@@ -78,7 +76,7 @@ export const DynamicColumnsMixin = (superClass) =>
78
76
 
79
77
  /** @private */
80
78
  _getColumnTree() {
81
- const rootColumns = FlattenedNodesObserver.getFlattenedNodes(this).filter(this._isColumnElement);
79
+ const rootColumns = ColumnObserver.getColumns(this);
82
80
  const columnTree = [rootColumns];
83
81
 
84
82
  let c = rootColumns;
@@ -100,24 +98,31 @@ export const DynamicColumnsMixin = (superClass) =>
100
98
  /** @protected */
101
99
  _updateColumnTree() {
102
100
  const columnTree = this._getColumnTree();
101
+
103
102
  if (!arrayEquals(columnTree, this._columnTree)) {
103
+ // Request a synchronoys update for each column
104
+ columnTree.forEach((columnArray) => {
105
+ columnArray.forEach((column) => {
106
+ if (column.performUpdate) {
107
+ column.performUpdate();
108
+ }
109
+ });
110
+ });
111
+
104
112
  this._columnTree = columnTree;
105
113
  }
106
114
  }
107
115
 
108
116
  /** @private */
109
117
  _addNodeObserver() {
110
- this._observer = new FlattenedNodesObserver(this, (info) => {
111
- const hasColumnElements = (nodeCollection) => nodeCollection.filter(this._isColumnElement).length > 0;
112
- if (hasColumnElements(info.addedNodes) || hasColumnElements(info.removedNodes)) {
113
- const allRemovedCells = info.removedNodes.flatMap((c) => c._allCells);
114
- const filterNotConnected = (element) =>
115
- allRemovedCells.filter((cell) => cell && cell._content.contains(element)).length;
116
-
117
- this.__removeSorters(this._sorters.filter(filterNotConnected));
118
- this.__removeFilters(this._filters.filter(filterNotConnected));
119
- this._debounceUpdateColumnTree();
120
- }
118
+ this._observer = new ColumnObserver(this, (_addedColumns, removedColumns) => {
119
+ const allRemovedCells = removedColumns.flatMap((c) => c._allCells);
120
+ const filterNotConnected = (element) =>
121
+ allRemovedCells.filter((cell) => cell && cell._content.contains(element)).length;
122
+
123
+ this.__removeSorters(this._sorters.filter(filterNotConnected));
124
+ this.__removeFilters(this._filters.filter(filterNotConnected));
125
+ this._debounceUpdateColumnTree();
121
126
 
122
127
  this._debouncerCheckImports = Debouncer.debounce(
123
128
  this._debouncerCheckImports,
@@ -141,7 +146,7 @@ export const DynamicColumnsMixin = (superClass) =>
141
146
  'vaadin-grid-sorter',
142
147
  ].forEach((elementName) => {
143
148
  const element = this.querySelector(elementName);
144
- if (element && !(element instanceof PolymerElement)) {
149
+ if (element && !customElements.get(elementName)) {
145
150
  console.warn(`Make sure you have imported the required module for <${elementName}> element.`);
146
151
  }
147
152
  });