@vaadin/grid 22.0.1 → 22.0.5

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 (53) hide show
  1. package/package.json +9 -9
  2. package/src/all-imports.js +1 -1
  3. package/src/vaadin-grid-a11y-mixin.js +7 -19
  4. package/src/vaadin-grid-active-item-mixin.d.ts +1 -1
  5. package/src/vaadin-grid-active-item-mixin.js +1 -1
  6. package/src/vaadin-grid-array-data-provider-mixin.d.ts +1 -1
  7. package/src/vaadin-grid-array-data-provider-mixin.js +1 -1
  8. package/src/vaadin-grid-column-group.d.ts +1 -1
  9. package/src/vaadin-grid-column-group.js +1 -1
  10. package/src/vaadin-grid-column-reordering-mixin.d.ts +1 -1
  11. package/src/vaadin-grid-column-reordering-mixin.js +1 -1
  12. package/src/vaadin-grid-column-resizing-mixin.js +1 -1
  13. package/src/vaadin-grid-column.d.ts +1 -1
  14. package/src/vaadin-grid-column.js +11 -3
  15. package/src/vaadin-grid-data-provider-mixin.d.ts +1 -1
  16. package/src/vaadin-grid-data-provider-mixin.js +1 -1
  17. package/src/vaadin-grid-drag-and-drop-mixin.d.ts +1 -1
  18. package/src/vaadin-grid-drag-and-drop-mixin.js +1 -1
  19. package/src/vaadin-grid-dynamic-columns-mixin.js +1 -1
  20. package/src/vaadin-grid-event-context-mixin.d.ts +1 -1
  21. package/src/vaadin-grid-event-context-mixin.js +1 -1
  22. package/src/vaadin-grid-filter-column.d.ts +1 -1
  23. package/src/vaadin-grid-filter-column.js +1 -1
  24. package/src/vaadin-grid-filter-mixin.js +1 -1
  25. package/src/vaadin-grid-filter.d.ts +1 -1
  26. package/src/vaadin-grid-filter.js +1 -1
  27. package/src/vaadin-grid-helpers.js +1 -1
  28. package/src/vaadin-grid-keyboard-navigation-mixin.js +39 -2
  29. package/src/vaadin-grid-row-details-mixin.d.ts +1 -1
  30. package/src/vaadin-grid-row-details-mixin.js +3 -2
  31. package/src/vaadin-grid-scroll-mixin.d.ts +1 -1
  32. package/src/vaadin-grid-scroll-mixin.js +1 -1
  33. package/src/vaadin-grid-selection-column.d.ts +1 -1
  34. package/src/vaadin-grid-selection-column.js +1 -1
  35. package/src/vaadin-grid-selection-mixin.d.ts +1 -1
  36. package/src/vaadin-grid-selection-mixin.js +3 -7
  37. package/src/vaadin-grid-sort-column.d.ts +1 -1
  38. package/src/vaadin-grid-sort-column.js +1 -1
  39. package/src/vaadin-grid-sort-mixin.d.ts +1 -1
  40. package/src/vaadin-grid-sort-mixin.js +1 -1
  41. package/src/vaadin-grid-sorter.d.ts +1 -1
  42. package/src/vaadin-grid-sorter.js +1 -1
  43. package/src/vaadin-grid-styles.js +1 -1
  44. package/src/vaadin-grid-styling-mixin.d.ts +1 -1
  45. package/src/vaadin-grid-styling-mixin.js +1 -1
  46. package/src/vaadin-grid-tree-column.d.ts +1 -1
  47. package/src/vaadin-grid-tree-column.js +1 -1
  48. package/src/vaadin-grid-tree-toggle.d.ts +1 -1
  49. package/src/vaadin-grid-tree-toggle.js +1 -1
  50. package/src/vaadin-grid.d.ts +3 -2
  51. package/src/vaadin-grid.js +9 -4
  52. package/theme/lumo/vaadin-grid-styles.js +4 -0
  53. package/theme/material/vaadin-grid-styles.js +4 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/grid",
3
- "version": "22.0.1",
3
+ "version": "22.0.5",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -40,19 +40,19 @@
40
40
  "dependencies": {
41
41
  "@open-wc/dedupe-mixin": "^1.3.0",
42
42
  "@polymer/polymer": "^3.0.0",
43
- "@vaadin/checkbox": "^22.0.1",
44
- "@vaadin/component-base": "^22.0.1",
45
- "@vaadin/text-field": "^22.0.1",
46
- "@vaadin/vaadin-lumo-styles": "^22.0.1",
47
- "@vaadin/vaadin-material-styles": "^22.0.1",
48
- "@vaadin/vaadin-themable-mixin": "^22.0.1"
43
+ "@vaadin/checkbox": "^22.0.5",
44
+ "@vaadin/component-base": "^22.0.5",
45
+ "@vaadin/text-field": "^22.0.5",
46
+ "@vaadin/vaadin-lumo-styles": "^22.0.5",
47
+ "@vaadin/vaadin-material-styles": "^22.0.5",
48
+ "@vaadin/vaadin-themable-mixin": "^22.0.5"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@esm-bundle/chai": "^4.3.4",
52
- "@vaadin/polymer-legacy-adapter": "^22.0.1",
52
+ "@vaadin/polymer-legacy-adapter": "^22.0.5",
53
53
  "@vaadin/testing-helpers": "^0.3.2",
54
54
  "lit": "^2.0.0",
55
55
  "sinon": "^9.2.0"
56
56
  },
57
- "gitHead": "2b0a2bff0369d6020f7cc33ad35506aa2d1f6f68"
57
+ "gitHead": "3e1990867670f3de2dec6fa1200d945623b2710c"
58
58
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -94,24 +94,12 @@ export const A11yMixin = (superClass) =>
94
94
  * @protected
95
95
  */
96
96
  _a11yUpdateRowLevel(row, level) {
97
- row.setAttribute('aria-level', level + 1);
98
- }
99
-
100
- /**
101
- * @param {!HTMLElement} row
102
- * @param {boolean} detailsOpened
103
- * @protected
104
- */
105
- _a11yUpdateRowDetailsOpened(row, detailsOpened) {
106
- const detailsCell = row.querySelector('[part~=details-cell]');
107
-
108
- Array.from(row.children).forEach((cell) => {
109
- if (detailsCell) {
110
- cell.setAttribute('aria-expanded', detailsOpened);
111
- } else {
112
- cell.removeAttribute('aria-expanded');
113
- }
114
- });
97
+ // Set level for the expandable rows itself, and all the nested rows.
98
+ if (level > 0 || this.__isRowCollapsible(row) || this.__isRowExpandable(row)) {
99
+ row.setAttribute('aria-level', level + 1);
100
+ } else {
101
+ row.removeAttribute('aria-level');
102
+ }
115
103
  }
116
104
 
117
105
  /**
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { createArrayDataProvider } from './array-data-provider.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GridDefaultItem } from './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GestureEventListeners } from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { PolymerElement } from '@polymer/polymer/polymer-element.js';
@@ -448,6 +448,10 @@ export const ColumnBaseMixin = (superClass) =>
448
448
  }
449
449
 
450
450
  cells.forEach((cell) => {
451
+ if (!cell.parentElement) {
452
+ return;
453
+ }
454
+
451
455
  const model = this._grid.__getRowModel(cell.parentElement);
452
456
 
453
457
  if (!renderer) return;
@@ -490,7 +494,9 @@ export const ColumnBaseMixin = (superClass) =>
490
494
  }
491
495
 
492
496
  this.__renderCellsContent(headerRenderer, [headerCell]);
493
- this._grid.__updateHeaderFooterRowVisibility(headerCell.parentElement);
497
+ if (this._grid) {
498
+ this._grid.__updateHeaderFooterRowVisibility(headerCell.parentElement);
499
+ }
494
500
  }
495
501
 
496
502
  /** @protected */
@@ -529,7 +535,9 @@ export const ColumnBaseMixin = (superClass) =>
529
535
  }
530
536
 
531
537
  this.__renderCellsContent(footerRenderer, [footerCell]);
532
- this._grid.__updateHeaderFooterRowVisibility(footerCell.parentElement);
538
+ if (this._grid) {
539
+ this._grid.__updateHeaderFooterRowVisibility(footerCell.parentElement);
540
+ }
533
541
  }
534
542
 
535
543
  /** @protected */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { timeOut } from '@vaadin/component-base/src/async.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  const DropMode = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GridDefaultItem } from './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import './vaadin-grid-filter.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import '@vaadin/text-field/src/vaadin-text-field.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -130,6 +130,37 @@ export const KeyboardNavigationMixin = (superClass) =>
130
130
  this._updateGridSectionFocusTarget(this._footerFocusable);
131
131
  }
132
132
 
133
+ /**
134
+ * Since the focused cell/row state is stored as an element reference, the reference may get
135
+ * out of sync when the virtual indexes for elements update due to effective size change.
136
+ * This function updates the reference to the correct element after a possible index change.
137
+ * @private
138
+ */
139
+ __updateItemsFocusable() {
140
+ if (!this._itemsFocusable) {
141
+ return;
142
+ }
143
+
144
+ const wasFocused = this.shadowRoot.activeElement === this._itemsFocusable;
145
+
146
+ this._getVisibleRows().forEach((row) => {
147
+ if (row.index === this._focusedItemIndex) {
148
+ if (this.__rowFocusMode) {
149
+ // Row focus mode
150
+ this._itemsFocusable = row;
151
+ } else if (this._itemsFocusable.parentElement) {
152
+ // Cell focus mode
153
+ const cellIndex = [...this._itemsFocusable.parentElement.children].indexOf(this._itemsFocusable);
154
+ this._itemsFocusable = row.children[cellIndex];
155
+ }
156
+ }
157
+ });
158
+
159
+ if (wasFocused) {
160
+ this._itemsFocusable.focus();
161
+ }
162
+ }
163
+
133
164
  /**
134
165
  * @param {!KeyboardEvent} e
135
166
  * @protected
@@ -532,7 +563,11 @@ export const KeyboardNavigationMixin = (superClass) =>
532
563
 
533
564
  if (this.interacting !== wantInteracting && cell !== null) {
534
565
  if (wantInteracting) {
535
- const focusTarget = cell._content.querySelector('[focus-target]') || cell._content.firstElementChild;
566
+ const focusTarget =
567
+ cell._content.querySelector('[focus-target]') ||
568
+ // If a child element hasn't been explicitly marked as a focus target,
569
+ // fall back to any focusable element inside the cell.
570
+ [...cell._content.querySelectorAll('*')].find((node) => this._isFocusable(node));
536
571
  if (focusTarget) {
537
572
  e.preventDefault();
538
573
  focusTarget.focus();
@@ -804,6 +839,8 @@ export const KeyboardNavigationMixin = (superClass) =>
804
839
  delete this._focusedColumnOrder;
805
840
  this._itemsFocusable = this.__rowFocusMode ? firstVisibleRow : firstVisibleCell;
806
841
  }
842
+ } else {
843
+ this.__updateItemsFocusable();
807
844
  }
808
845
  }
809
846
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -83,7 +83,8 @@ export const RowDetailsMixin = (superClass) =>
83
83
  Array.from(this.$.items.children).forEach((row) => {
84
84
  if (!row.querySelector('[part~=details-cell]')) {
85
85
  this._updateRow(row, this._columnTree[this._columnTree.length - 1]);
86
- this._a11yUpdateRowDetailsOpened(row, false);
86
+ const isDetailsOpened = this._isDetailsOpened(row._item);
87
+ this._toggleDetailsCell(row, isDetailsOpened);
87
88
  }
88
89
  });
89
90
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { animationFrame, microTask, timeOut } from '@vaadin/component-base/src/async.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GridDefaultItem } from './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import '@vaadin/checkbox/src/vaadin-checkbox.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -77,12 +77,8 @@ export const SelectionMixin = (superClass) =>
77
77
  }
78
78
 
79
79
  /** @private */
80
- _selectedItemsChanged(e) {
81
- if (this.$.items.children.length && (e.path === 'selectedItems' || e.path === 'selectedItems.splices')) {
82
- Array.from(this.$.items.children).forEach((row) => {
83
- this._updateItem(row, row._item);
84
- });
85
- }
80
+ _selectedItemsChanged() {
81
+ this.requestContentUpdate();
86
82
  }
87
83
 
88
84
  /**
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GridDefaultItem } from './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import './vaadin-grid-sorter.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { Constructor } from '@open-wc/dedupe-mixin';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { GridDefaultItem } from './vaadin-grid.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import './vaadin-grid-tree-toggle.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { ElementMixinClass } from '@vaadin/component-base/src/element-mixin.js';
@@ -308,7 +308,7 @@ export interface GridEventMap<TItem> extends HTMLElementEventMap, GridCustomEven
308
308
  * `reorder-status` | Reflects the status of a cell while columns are being reordered | cell
309
309
  * `frozen` | Frozen cell | cell
310
310
  * `last-frozen` | Last frozen cell | cell
311
- * * `first-column` | First visible cell on a row | cell
311
+ * `first-column` | First visible cell on a row | cell
312
312
  * `last-column` | Last visible cell on a row | cell
313
313
  * `selected` | Selected row | row
314
314
  * `expanded` | Expanded row | row
@@ -316,6 +316,7 @@ export interface GridEventMap<TItem> extends HTMLElementEventMap, GridCustomEven
316
316
  * `loading` | Row that is waiting for data from data provider | row
317
317
  * `odd` | Odd row | row
318
318
  * `first` | The first body row | row
319
+ * `last` | The last body row | row
319
320
  * `dragstart` | Set for one frame when drag of a row is starting. The value is a number when multiple rows are dragged | row
320
321
  * `dragover` | Set when the row is dragged over | row
321
322
  * `drag-disabled` | Set to a row that isn't available for dragging | row
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Copyright (c) 2021 Vaadin Ltd.
3
+ * Copyright (c) 2016 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import './vaadin-grid-column.js';
@@ -194,7 +194,7 @@ import { StylingMixin } from './vaadin-grid-styling-mixin.js';
194
194
  * `reorder-status` | Reflects the status of a cell while columns are being reordered | cell
195
195
  * `frozen` | Frozen cell | cell
196
196
  * `last-frozen` | Last frozen cell | cell
197
- * * `first-column` | First visible cell on a row | cell
197
+ * `first-column` | First visible cell on a row | cell
198
198
  * `last-column` | Last visible cell on a row | cell
199
199
  * `selected` | Selected row | row
200
200
  * `expanded` | Expanded row | row
@@ -202,6 +202,7 @@ import { StylingMixin } from './vaadin-grid-styling-mixin.js';
202
202
  * `loading` | Row that is waiting for data from data provider | row
203
203
  * `odd` | Odd row | row
204
204
  * `first` | The first body row | row
205
+ * `last` | The last body row | row
205
206
  * `dragstart` | Set for one frame when drag of a row is starting. The value is a number when multiple rows are dragged | row
206
207
  * `dragover` | Set when the row is dragged over | row
207
208
  * `drag-disabled` | Set to a row that isn't available for dragging | row
@@ -279,7 +280,7 @@ class Grid extends ElementMixin(
279
280
  loading$="[[loading]]"
280
281
  column-reordering-allowed$="[[columnReorderingAllowed]]"
281
282
  >
282
- <table id="table" role="grid" aria-multiselectable="true" tabindex="0">
283
+ <table id="table" role="treegrid" aria-multiselectable="true" tabindex="0">
283
284
  <caption id="sizer" part="row"></caption>
284
285
  <thead id="header" role="rowgroup"></thead>
285
286
  <tbody id="items" role="rowgroup"></tbody>
@@ -489,6 +490,7 @@ class Grid extends ElementMixin(
489
490
  const cellCoordinates = this.__getBodyCellCoordinates(cell);
490
491
 
491
492
  virtualizer.size = effectiveSize;
493
+ virtualizer.update();
492
494
  virtualizer.flush();
493
495
 
494
496
  // If the focused cell's parent row got hidden by the size change, focus the corresponding new cell
@@ -580,6 +582,9 @@ class Grid extends ElementMixin(
580
582
  * @private
581
583
  */
582
584
  _recalculateColumnWidths(cols) {
585
+ // Flush to make sure DOM is up-to-date when measuring the column widths
586
+ this.__virtualizer.flush();
587
+
583
588
  cols.forEach((col) => {
584
589
  col.width = `${this.__getDistributedWidth(col)}px`;
585
590
  });
@@ -819,6 +824,7 @@ class Grid extends ElementMixin(
819
824
  }
820
825
 
821
826
  row.toggleAttribute('first', index === 0);
827
+ row.toggleAttribute('last', index === this._effectiveSize - 1);
822
828
  row.toggleAttribute('odd', index % 2);
823
829
  this._a11yUpdateRowRowindex(row, index);
824
830
  this._getItem(index, row);
@@ -902,7 +908,6 @@ class Grid extends ElementMixin(
902
908
 
903
909
  this._a11yUpdateRowLevel(row, model.level);
904
910
  this._a11yUpdateRowSelected(row, model.selected);
905
- this._a11yUpdateRowDetailsOpened(row, model.detailsOpened);
906
911
 
907
912
  row.toggleAttribute('expanded', model.expanded);
908
913
  row.toggleAttribute('selected', model.selected);
@@ -133,6 +133,10 @@ registerStyles(
133
133
  margin-top: -1px;
134
134
  }
135
135
 
136
+ :host([all-rows-visible]) [part~='row'][last][dragover='below'] [part~='cell']::after {
137
+ height: 1px;
138
+ }
139
+
136
140
  [part~='row'][dragover='above'] [part~='cell']::after {
137
141
  top: auto;
138
142
  bottom: 100%;
@@ -183,6 +183,10 @@ registerStyles(
183
183
  margin-top: -1px;
184
184
  }
185
185
 
186
+ :host([all-rows-visible]) [part~='row'][last][dragover='below'] [part~='cell']::after {
187
+ height: 1px;
188
+ }
189
+
186
190
  [part~='row'][dragover='above'] [part~='cell']::after {
187
191
  top: auto;
188
192
  bottom: 100%;
@@ -200,8 +204,6 @@ registerStyles(
200
204
  }
201
205
 
202
206
  [part~='row'][dragstart] {
203
- /* Add bottom-space to the row so the drag number doesn't get clipped. Needed for IE/Edge */
204
- border-bottom: 100px solid transparent;
205
207
  z-index: 100 !important;
206
208
  opacity: 0.9;
207
209
  }