@vaadin/grid 24.4.0-alpha9 → 24.4.0-dev.4b20a0c55

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 (59) hide show
  1. package/README.md +0 -1
  2. package/package.json +10 -10
  3. package/src/vaadin-grid-data-provider-mixin.js +1 -5
  4. package/src/vaadin-grid-mixin.js +25 -12
  5. package/src/vaadin-grid-scroll-mixin.js +13 -0
  6. package/src/vaadin-grid-selection-column-base-mixin.js +18 -0
  7. package/src/vaadin-grid-tree-toggle-mixin.js +2 -4
  8. package/theme/lumo/all-imports.d.ts +0 -11
  9. package/theme/lumo/lit-all-imports.d.ts +0 -11
  10. package/theme/lumo/vaadin-grid-column-group.d.ts +0 -1
  11. package/theme/lumo/vaadin-grid-column.d.ts +0 -1
  12. package/theme/lumo/vaadin-grid-filter-column.d.ts +0 -2
  13. package/theme/lumo/vaadin-grid-filter.d.ts +0 -2
  14. package/theme/lumo/vaadin-grid-selection-column.d.ts +0 -2
  15. package/theme/lumo/vaadin-grid-sort-column.d.ts +0 -2
  16. package/theme/lumo/vaadin-grid-sorter-styles.d.ts +0 -3
  17. package/theme/lumo/vaadin-grid-sorter.d.ts +0 -2
  18. package/theme/lumo/vaadin-grid-styles.d.ts +0 -6
  19. package/theme/lumo/vaadin-grid-tree-column.d.ts +0 -2
  20. package/theme/lumo/vaadin-grid-tree-toggle-styles.d.ts +0 -3
  21. package/theme/lumo/vaadin-grid-tree-toggle.d.ts +0 -2
  22. package/theme/lumo/vaadin-grid.d.ts +0 -2
  23. package/theme/lumo/vaadin-lit-grid-column-group.d.ts +0 -1
  24. package/theme/lumo/vaadin-lit-grid-column.d.ts +0 -1
  25. package/theme/lumo/vaadin-lit-grid-filter-column.d.ts +0 -2
  26. package/theme/lumo/vaadin-lit-grid-filter.d.ts +0 -2
  27. package/theme/lumo/vaadin-lit-grid-selection-column.d.ts +0 -2
  28. package/theme/lumo/vaadin-lit-grid-sort-column.d.ts +0 -2
  29. package/theme/lumo/vaadin-lit-grid-sorter.d.ts +0 -2
  30. package/theme/lumo/vaadin-lit-grid-tree-column.d.ts +0 -2
  31. package/theme/lumo/vaadin-lit-grid-tree-toggle.d.ts +0 -2
  32. package/theme/lumo/vaadin-lit-grid.d.ts +0 -2
  33. package/theme/material/all-imports.d.ts +0 -11
  34. package/theme/material/lit-all-imports.d.ts +0 -11
  35. package/theme/material/vaadin-grid-column-group.d.ts +0 -1
  36. package/theme/material/vaadin-grid-column.d.ts +0 -1
  37. package/theme/material/vaadin-grid-filter-column.d.ts +0 -2
  38. package/theme/material/vaadin-grid-filter.d.ts +0 -2
  39. package/theme/material/vaadin-grid-selection-column.d.ts +0 -2
  40. package/theme/material/vaadin-grid-sort-column.d.ts +0 -2
  41. package/theme/material/vaadin-grid-sorter-styles.d.ts +0 -2
  42. package/theme/material/vaadin-grid-sorter.d.ts +0 -2
  43. package/theme/material/vaadin-grid-styles.d.ts +0 -2
  44. package/theme/material/vaadin-grid-tree-column.d.ts +0 -2
  45. package/theme/material/vaadin-grid-tree-toggle-styles.d.ts +0 -3
  46. package/theme/material/vaadin-grid-tree-toggle.d.ts +0 -2
  47. package/theme/material/vaadin-grid.d.ts +0 -2
  48. package/theme/material/vaadin-lit-grid-column-group.d.ts +0 -1
  49. package/theme/material/vaadin-lit-grid-column.d.ts +0 -1
  50. package/theme/material/vaadin-lit-grid-filter-column.d.ts +0 -2
  51. package/theme/material/vaadin-lit-grid-filter.d.ts +0 -2
  52. package/theme/material/vaadin-lit-grid-selection-column.d.ts +0 -2
  53. package/theme/material/vaadin-lit-grid-sort-column.d.ts +0 -2
  54. package/theme/material/vaadin-lit-grid-sorter.d.ts +0 -2
  55. package/theme/material/vaadin-lit-grid-tree-column.d.ts +0 -2
  56. package/theme/material/vaadin-lit-grid-tree-toggle.d.ts +0 -2
  57. package/theme/material/vaadin-lit-grid.d.ts +0 -2
  58. package/web-types.json +0 -2575
  59. package/web-types.lit.json +0 -1091
package/README.md CHANGED
@@ -5,7 +5,6 @@ A web component for showing tabular data.
5
5
  [Documentation + Live Demo ↗](https://vaadin.com/docs/latest/components/grid)
6
6
 
7
7
  [![npm version](https://badgen.net/npm/v/@vaadin/grid)](https://www.npmjs.com/package/@vaadin/grid)
8
- [![Discord](https://img.shields.io/discord/732335336448852018?label=discord)](https://discord.gg/PHmkCKC)
9
8
 
10
9
  ```html
11
10
  <vaadin-grid theme="row-dividers" column-reordering-allowed multi-sort>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/grid",
3
- "version": "24.4.0-alpha9",
3
+ "version": "24.4.0-dev.4b20a0c55",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -46,14 +46,14 @@
46
46
  "dependencies": {
47
47
  "@open-wc/dedupe-mixin": "^1.3.0",
48
48
  "@polymer/polymer": "^3.0.0",
49
- "@vaadin/a11y-base": "24.4.0-alpha9",
50
- "@vaadin/checkbox": "24.4.0-alpha9",
51
- "@vaadin/component-base": "24.4.0-alpha9",
52
- "@vaadin/lit-renderer": "24.4.0-alpha9",
53
- "@vaadin/text-field": "24.4.0-alpha9",
54
- "@vaadin/vaadin-lumo-styles": "24.4.0-alpha9",
55
- "@vaadin/vaadin-material-styles": "24.4.0-alpha9",
56
- "@vaadin/vaadin-themable-mixin": "24.4.0-alpha9",
49
+ "@vaadin/a11y-base": "24.4.0-dev.4b20a0c55",
50
+ "@vaadin/checkbox": "24.4.0-dev.4b20a0c55",
51
+ "@vaadin/component-base": "24.4.0-dev.4b20a0c55",
52
+ "@vaadin/lit-renderer": "24.4.0-dev.4b20a0c55",
53
+ "@vaadin/text-field": "24.4.0-dev.4b20a0c55",
54
+ "@vaadin/vaadin-lumo-styles": "24.4.0-dev.4b20a0c55",
55
+ "@vaadin/vaadin-material-styles": "24.4.0-dev.4b20a0c55",
56
+ "@vaadin/vaadin-themable-mixin": "24.4.0-dev.4b20a0c55",
57
57
  "lit": "^3.0.0"
58
58
  },
59
59
  "devDependencies": {
@@ -65,5 +65,5 @@
65
65
  "web-types.json",
66
66
  "web-types.lit.json"
67
67
  ],
68
- "gitHead": "effb81abe3c6283a6ec620cc0cee56069af58226"
68
+ "gitHead": "b79c81e5f6fd24684b34ee0dc434e94d943ea13e"
69
69
  }
@@ -206,10 +206,6 @@ export const DataProviderMixin = (superClass) =>
206
206
  * @protected
207
207
  */
208
208
  _getItem(index, el) {
209
- if (index >= this._flatSize) {
210
- return;
211
- }
212
-
213
209
  el.index = index;
214
210
 
215
211
  const { item } = this._dataProviderController.getFlatIndexContext(index);
@@ -374,7 +370,7 @@ export const DataProviderMixin = (superClass) =>
374
370
  this._hasData = false;
375
371
  this.__updateVisibleRows();
376
372
 
377
- if (!this.__virtualizer.size) {
373
+ if (!this.__virtualizer || !this.__virtualizer.size) {
378
374
  this._dataProviderController.loadFirstPage();
379
375
  }
380
376
  }
@@ -316,11 +316,6 @@ export const GridMixin = (superClass) =>
316
316
  }
317
317
  }
318
318
 
319
- /** @private */
320
- __hasRowsWithClientHeight() {
321
- return !!Array.from(this.$.items.children).filter((row) => row.clientHeight).length;
322
- }
323
-
324
319
  /** @private */
325
320
  __getIntrinsicWidth(col) {
326
321
  if (!this.__intrinsicWidthCache.has(col)) {
@@ -498,12 +493,26 @@ export const GridMixin = (superClass) =>
498
493
 
499
494
  /** @private */
500
495
  __tryToRecalculateColumnWidthsIfPending() {
501
- if (
502
- this.__pendingRecalculateColumnWidths &&
503
- !isElementHidden(this) &&
504
- !this._dataProviderController.isLoading() &&
505
- this.__hasRowsWithClientHeight()
506
- ) {
496
+ if (!this.__pendingRecalculateColumnWidths || isElementHidden(this) || this._dataProviderController.isLoading()) {
497
+ return;
498
+ }
499
+
500
+ // Delay recalculation if any rows are missing an index.
501
+ // This can happen during the grid's initialization if the recalculation is triggered
502
+ // as a result of the data provider responding synchronously to a page request created
503
+ // in the middle of the virtualizer update loop. In this case, rows after the one that
504
+ // triggered the page request may not have an index property yet. The lack of index
505
+ // prevents _onDataProviderPageReceived from requesting children for these rows,
506
+ // resulting in loading state being set to false and the recalculation beginning
507
+ // before all the data is loaded. Note, rows without index get updated in later iterations
508
+ // of the virtualizer update loop, ensuring the grid eventually reaches a stable state.
509
+ const hasRowsWithUndefinedIndex = [...this.$.items.children].some((row) => row.index === undefined);
510
+ if (hasRowsWithUndefinedIndex) {
511
+ return;
512
+ }
513
+
514
+ const hasRowsWithClientHeight = [...this.$.items.children].some((row) => row.clientHeight > 0);
515
+ if (hasRowsWithClientHeight) {
507
516
  this.__pendingRecalculateColumnWidths = false;
508
517
  this.recalculateColumnWidths();
509
518
  }
@@ -580,6 +589,10 @@ export const GridMixin = (superClass) =>
580
589
  });
581
590
  }
582
591
 
592
+ if (column && column._onCellKeyDown) {
593
+ cell.addEventListener('keydown', column._onCellKeyDown.bind(column));
594
+ }
595
+
583
596
  const slot = document.createElement('slot');
584
597
  slot.setAttribute('name', slotName);
585
598
 
@@ -711,7 +724,7 @@ export const GridMixin = (superClass) =>
711
724
  // Header & footer
712
725
  const tagName = section === 'header' ? 'th' : 'td';
713
726
  if (isColumnRow || column.localName === 'vaadin-grid-column-group') {
714
- cell = column[`_${section}Cell`] || this._createCell(tagName);
727
+ cell = column[`_${section}Cell`] || this._createCell(tagName, column);
715
728
  cell._column = column;
716
729
  row.appendChild(cell);
717
730
  column[`_${section}Cell`] = cell;
@@ -123,6 +123,19 @@ export const ScrollMixin = (superClass) =>
123
123
  this.$.items.addEventListener('focusin', (e) => {
124
124
  const itemsIndex = e.composedPath().indexOf(this.$.items);
125
125
  this._rowWithFocusedElement = e.composedPath()[itemsIndex - 1];
126
+
127
+ if (this._rowWithFocusedElement) {
128
+ // Make sure the row with the focused element is fully inside the visible viewport
129
+ this.__scrollIntoViewport(this._rowWithFocusedElement.index);
130
+
131
+ if (!this.$.table.contains(e.relatedTarget)) {
132
+ // Virtualizer can't catch the event because if orginates from the light DOM.
133
+ // Dispatch a virtualizer-element-focused event for virtualizer to catch.
134
+ this.$.table.dispatchEvent(
135
+ new CustomEvent('virtualizer-element-focused', { detail: { element: this._rowWithFocusedElement } }),
136
+ );
137
+ }
138
+ }
126
139
  });
127
140
  this.$.items.addEventListener('focusout', () => {
128
141
  this._rowWithFocusedElement = undefined;
@@ -31,6 +31,14 @@ export const GridSelectionColumnBaseMixin = (superClass) =>
31
31
  sync: true,
32
32
  },
33
33
 
34
+ /**
35
+ * Override `autoWidth` to enable auto-width
36
+ */
37
+ autoWidth: {
38
+ type: Boolean,
39
+ value: true,
40
+ },
41
+
34
42
  /**
35
43
  * Flex grow ratio for the cell widths. When set to 0, cell width is fixed.
36
44
  * @attr {number} flex-grow
@@ -233,6 +241,16 @@ export const GridSelectionColumnBaseMixin = (superClass) =>
233
241
  }
234
242
  }
235
243
 
244
+ /** @private */
245
+ _onCellKeyDown(e) {
246
+ const target = e.composedPath()[0];
247
+ // Toggle on Space without having to enter interaction mode first
248
+ if (e.keyCode === 32 && (target === this._headerCell || (this._cells.includes(target) && !this.autoSelect))) {
249
+ const checkbox = target._content.firstElementChild;
250
+ checkbox.checked = !checkbox.checked;
251
+ }
252
+ }
253
+
236
254
  /** @private */
237
255
  __dragAutoScroller() {
238
256
  if (this.__dragStartIndex === undefined) {
@@ -125,10 +125,8 @@ export const GridTreeToggleMixin = (superClass) =>
125
125
  };
126
126
  }
127
127
 
128
- /** @protected */
129
- ready() {
130
- super.ready();
131
-
128
+ constructor() {
129
+ super();
132
130
  this.addEventListener('click', (e) => this._onClick(e));
133
131
  }
134
132
 
@@ -1,11 +0,0 @@
1
- import './vaadin-grid-column-group.js';
2
- import './vaadin-grid-column.js';
3
- import './vaadin-grid-filter.js';
4
- import './vaadin-grid-filter-column.js';
5
- import './vaadin-grid-selection-column.js';
6
- import './vaadin-grid-sorter.js';
7
- import './vaadin-grid-sort-column.js';
8
- import './vaadin-grid-tree-toggle.js';
9
- import './vaadin-grid-tree-column.js';
10
- import './vaadin-grid.js';
11
- import '../../src/all-imports.js';
@@ -1,11 +0,0 @@
1
- import './vaadin-lit-grid-column-group.js';
2
- import './vaadin-lit-grid-column.js';
3
- import './vaadin-lit-grid-filter.js';
4
- import './vaadin-lit-grid-filter-column.js';
5
- import './vaadin-lit-grid-selection-column.js';
6
- import './vaadin-lit-grid-sorter.js';
7
- import './vaadin-lit-grid-sort-column.js';
8
- import './vaadin-lit-grid-tree-toggle.js';
9
- import './vaadin-lit-grid-tree-column.js';
10
- import './vaadin-lit-grid.js';
11
- import '../../src/lit-all-imports.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-grid-column-group.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-grid-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-filter.js';
2
- import '../../src/vaadin-grid-filter-column.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/text-field/theme/lumo/vaadin-text-field.js';
2
- import '../../src/vaadin-grid-filter.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/checkbox/theme/lumo/vaadin-checkbox.js';
2
- import '../../src/vaadin-grid-selection-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter.js';
2
- import '../../src/vaadin-grid-sort-column.js';
@@ -1,3 +0,0 @@
1
- import '@vaadin/vaadin-lumo-styles/color.js';
2
- import '@vaadin/vaadin-lumo-styles/style.js';
3
- import '@vaadin/vaadin-lumo-styles/spacing.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter-styles.js';
2
- import '../../src/vaadin-grid-sorter.js';
@@ -1,6 +0,0 @@
1
- import '@vaadin/vaadin-lumo-styles/color.js';
2
- import '@vaadin/vaadin-lumo-styles/font-icons.js';
3
- import '@vaadin/vaadin-lumo-styles/sizing.js';
4
- import '@vaadin/vaadin-lumo-styles/spacing.js';
5
- import '@vaadin/vaadin-lumo-styles/style.js';
6
- import '@vaadin/vaadin-lumo-styles/typography.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle.js';
2
- import '../../src/vaadin-grid-tree-column.js';
@@ -1,3 +0,0 @@
1
- import '@vaadin/vaadin-lumo-styles/color.js';
2
- import '@vaadin/vaadin-lumo-styles/spacing.js';
3
- import '@vaadin/vaadin-lumo-styles/style.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle-styles.js';
2
- import '../../src/vaadin-grid-tree-toggle.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-styles.js';
2
- import '../../src/vaadin-grid.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-lit-grid-column-group.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-lit-grid-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-filter.js';
2
- import '../../src/vaadin-lit-grid-filter-column.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/text-field/theme/lumo/vaadin-lit-text-field.js';
2
- import '../../src/vaadin-lit-grid-filter.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/checkbox/theme/lumo/vaadin-lit-checkbox.js';
2
- import '../../src/vaadin-lit-grid-selection-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-sorter.js';
2
- import '../../src/vaadin-lit-grid-sort-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter-styles.js';
2
- import '../../src/vaadin-lit-grid-sorter.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-tree-toggle.js';
2
- import '../../src/vaadin-lit-grid-tree-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle-styles.js';
2
- import '../../src/vaadin-lit-grid-tree-toggle.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-styles.js';
2
- import '../../src/vaadin-lit-grid.js';
@@ -1,11 +0,0 @@
1
- import './vaadin-grid-column-group.js';
2
- import './vaadin-grid-column.js';
3
- import './vaadin-grid-filter.js';
4
- import './vaadin-grid-filter-column.js';
5
- import './vaadin-grid-selection-column.js';
6
- import './vaadin-grid-sorter.js';
7
- import './vaadin-grid-sort-column.js';
8
- import './vaadin-grid-tree-toggle.js';
9
- import './vaadin-grid-tree-column.js';
10
- import './vaadin-grid.js';
11
- import '../../src/all-imports.js';
@@ -1,11 +0,0 @@
1
- import './vaadin-lit-grid-column-group.js';
2
- import './vaadin-lit-grid-column.js';
3
- import './vaadin-lit-grid-filter.js';
4
- import './vaadin-lit-grid-filter-column.js';
5
- import './vaadin-lit-grid-selection-column.js';
6
- import './vaadin-lit-grid-sorter.js';
7
- import './vaadin-lit-grid-sort-column.js';
8
- import './vaadin-lit-grid-tree-toggle.js';
9
- import './vaadin-lit-grid-tree-column.js';
10
- import './vaadin-lit-grid.js';
11
- import '../../src/lit-all-imports.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-grid-column-group.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-grid-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-filter.js';
2
- import '../../src/vaadin-grid-filter-column.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/text-field/theme/material/vaadin-text-field.js';
2
- import '../../src/vaadin-grid-filter.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/checkbox/theme/material/vaadin-checkbox.js';
2
- import '../../src/vaadin-grid-selection-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter.js';
2
- import '../../src/vaadin-grid-sort-column.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/vaadin-material-styles/color.js';
2
- import '@vaadin/vaadin-material-styles/font-icons.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter-styles.js';
2
- import '../../src/vaadin-grid-sorter.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/vaadin-material-styles/color.js';
2
- import '@vaadin/vaadin-material-styles/typography.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle.js';
2
- import '../../src/vaadin-grid-tree-column.js';
@@ -1,3 +0,0 @@
1
- import '@vaadin/vaadin-material-styles/color.js';
2
- import '@vaadin/vaadin-material-styles/font-icons.js';
3
- import '@vaadin/vaadin-material-styles/typography.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle-styles.js';
2
- import '../../src/vaadin-grid-tree-toggle.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-styles.js';
2
- import '../../src/vaadin-grid.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-lit-grid-column-group.js';
@@ -1 +0,0 @@
1
- import '../../src/vaadin-lit-grid-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-filter.js';
2
- import '../../src/vaadin-lit-grid-filter-column.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/text-field/theme/material/vaadin-lit-text-field.js';
2
- import '../../src/vaadin-lit-grid-filter.js';
@@ -1,2 +0,0 @@
1
- import '@vaadin/checkbox/theme/material/vaadin-lit-checkbox.js';
2
- import '../../src/vaadin-lit-grid-selection-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-sorter.js';
2
- import '../../src/vaadin-lit-grid-sort-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-sorter-styles.js';
2
- import '../../src/vaadin-lit-grid-sorter.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-lit-grid-tree-toggle.js';
2
- import '../../src/vaadin-lit-grid-tree-column.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-tree-toggle-styles.js';
2
- import '../../src/vaadin-lit-grid-tree-toggle.js';
@@ -1,2 +0,0 @@
1
- import './vaadin-grid-styles.js';
2
- import '../../src/vaadin-lit-grid.js';