@vaadin/grid 25.3.0-alpha7 → 25.3.0-alpha9
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.
- package/custom-elements.json +189 -161
- package/package.json +12 -12
- package/src/directives/cell-content-directive.js +2 -1
- package/src/vaadin-grid-a11y-mixin.js +6 -23
- package/src/vaadin-grid-column-auto-width-mixin.js +3 -8
- package/src/vaadin-grid-column-group-mixin.js +5 -20
- package/src/vaadin-grid-column-mixin.d.ts +3 -3
- package/src/vaadin-grid-column-mixin.js +35 -73
- package/src/vaadin-grid-column-reordering-mixin.js +4 -1
- package/src/vaadin-grid-column-resizing-mixin.js +4 -0
- package/src/vaadin-grid-data-provider-mixin.js +1 -1
- package/src/vaadin-grid-drag-and-drop-mixin.js +2 -5
- package/src/vaadin-grid-dynamic-columns-mixin.js +0 -5
- package/src/vaadin-grid-filter-column-mixin.js +1 -1
- package/src/vaadin-grid-filter-element-mixin.js +1 -3
- package/src/vaadin-grid-filter.js +1 -0
- package/src/vaadin-grid-header-footer-rendering-mixin.js +296 -0
- package/src/vaadin-grid-keyboard-navigation-mixin.js +3 -7
- package/src/vaadin-grid-mixin.js +5 -31
- package/src/vaadin-grid-row-details-mixin.js +1 -1
- package/src/vaadin-grid-scroll-mixin.js +2 -5
- package/src/vaadin-grid-selection-column-base-mixin.js +3 -3
- package/src/vaadin-grid-sorter-mixin.js +2 -5
- package/src/vaadin-grid-sorter.js +1 -0
- package/src/vaadin-grid-tree-toggle.js +1 -0
- package/src/vaadin-grid.js +1 -0
- package/web-types.json +20 -94
- package/web-types.lit.json +10 -10
- package/src/vaadin-grid-column-rendering-mixin.js +0 -195
|
@@ -214,11 +214,7 @@ export const ColumnAutoWidthMixin = (superClass) =>
|
|
|
214
214
|
}
|
|
215
215
|
});
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
this.$.scroller.setAttribute('measuring-auto-width', '');
|
|
219
|
-
} else {
|
|
220
|
-
this.$.scroller.removeAttribute('measuring-auto-width');
|
|
221
|
-
}
|
|
217
|
+
this.$.scroller.toggleAttribute('measuring-auto-width', autoWidth);
|
|
222
218
|
}
|
|
223
219
|
|
|
224
220
|
/**
|
|
@@ -311,10 +307,9 @@ export const ColumnAutoWidthMixin = (superClass) =>
|
|
|
311
307
|
// of the virtualizer update loop, ensuring the grid eventually reaches a stable state.
|
|
312
308
|
const hasRowsWithUndefinedIndex = [...this.$.items.children].some((row) => row.index === undefined);
|
|
313
309
|
|
|
314
|
-
const debouncingHiddenChanged = this._debouncerHiddenChanged
|
|
310
|
+
const debouncingHiddenChanged = this._debouncerHiddenChanged?.isActive();
|
|
315
311
|
|
|
316
|
-
const debouncingUpdateFrozenColumn =
|
|
317
|
-
this.__debounceUpdateFrozenColumn && this.__debounceUpdateFrozenColumn.isActive();
|
|
312
|
+
const debouncingUpdateFrozenColumn = this.__debounceUpdateFrozenColumn?.isActive();
|
|
318
313
|
|
|
319
314
|
// When using a percentage-based height, the grid's effective height may
|
|
320
315
|
// be 0 until the resize observer in grid-mixin calculates a min-height.
|
|
@@ -57,7 +57,7 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
57
57
|
'_groupFrozenChanged(frozen, _rootColumns)',
|
|
58
58
|
'_groupFrozenToEndChanged(frozenToEnd, _rootColumns)',
|
|
59
59
|
'_groupHiddenChanged(hidden)',
|
|
60
|
-
'_colSpanChanged(_colSpan
|
|
60
|
+
'_colSpanChanged(_colSpan)',
|
|
61
61
|
'_groupOrderChanged(_order, _rootColumns)',
|
|
62
62
|
'_groupReorderStatusChanged(_reorderStatus, _rootColumns)',
|
|
63
63
|
'_groupResizableChanged(resizable, _rootColumns)',
|
|
@@ -74,9 +74,7 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
74
74
|
/** @protected */
|
|
75
75
|
disconnectedCallback() {
|
|
76
76
|
super.disconnectedCallback();
|
|
77
|
-
|
|
78
|
-
this._observer.disconnect();
|
|
79
|
-
}
|
|
77
|
+
this._observer?.disconnect();
|
|
80
78
|
}
|
|
81
79
|
|
|
82
80
|
/**
|
|
@@ -307,19 +305,8 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
307
305
|
}
|
|
308
306
|
|
|
309
307
|
/** @private */
|
|
310
|
-
_colSpanChanged(
|
|
311
|
-
|
|
312
|
-
headerCell.setAttribute('colspan', colSpan);
|
|
313
|
-
if (this._grid) {
|
|
314
|
-
this._grid.__a11yUpdateCellColspan(headerCell, colSpan);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
if (footerCell) {
|
|
318
|
-
footerCell.setAttribute('colspan', colSpan);
|
|
319
|
-
if (this._grid) {
|
|
320
|
-
this._grid.__a11yUpdateCellColspan(footerCell, colSpan);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
308
|
+
_colSpanChanged() {
|
|
309
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
323
310
|
}
|
|
324
311
|
|
|
325
312
|
/**
|
|
@@ -344,9 +331,7 @@ export const GridColumnGroupMixin = (superClass) =>
|
|
|
344
331
|
this._preventHiddenSynchronization = false;
|
|
345
332
|
|
|
346
333
|
// Update the column tree
|
|
347
|
-
|
|
348
|
-
this._grid._debounceUpdateColumnTree();
|
|
349
|
-
}
|
|
334
|
+
this._grid?._debounceUpdateColumnTree?.();
|
|
350
335
|
});
|
|
351
336
|
this._observer.flush();
|
|
352
337
|
}
|
|
@@ -12,7 +12,7 @@ export type GridBodyRenderer<TItem, Column extends GridColumnMixin<TItem, Column
|
|
|
12
12
|
model: GridItemModel<TItem>,
|
|
13
13
|
) => void;
|
|
14
14
|
|
|
15
|
-
export type GridColumnTextAlign = 'center' | 'end' | 'start' | null;
|
|
15
|
+
export type GridColumnTextAlign = 'center' | 'end' | 'left' | 'right' | 'start' | null;
|
|
16
16
|
|
|
17
17
|
export type GridHeaderFooterRenderer<TItem, Column extends ColumnBaseMixinClass<TItem, Column>> = (
|
|
18
18
|
root: HTMLElement,
|
|
@@ -71,8 +71,8 @@ export declare class ColumnBaseMixinClass<TItem, Column extends ColumnBaseMixinC
|
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* Aligns the columns cell content horizontally.
|
|
74
|
-
*
|
|
75
|
-
* @attr {start|center|end} text-align
|
|
74
|
+
*
|
|
75
|
+
* @attr {start|center|end|left|right} text-align
|
|
76
76
|
*/
|
|
77
77
|
textAlign: GridColumnTextAlign | null | undefined;
|
|
78
78
|
|
|
@@ -93,8 +93,8 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
95
|
* Aligns the columns cell content horizontally.
|
|
96
|
-
*
|
|
97
|
-
* @attr {start|center|end} text-align
|
|
96
|
+
*
|
|
97
|
+
* @attr {start|center|end|left|right} text-align
|
|
98
98
|
*/
|
|
99
99
|
textAlign: {
|
|
100
100
|
type: String,
|
|
@@ -261,11 +261,11 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
261
261
|
|
|
262
262
|
static get observers() {
|
|
263
263
|
return [
|
|
264
|
-
'_widthChanged(width,
|
|
264
|
+
'_widthChanged(width, _cells)',
|
|
265
265
|
'_frozenChanged(frozen, _headerCell, _footerCell, _cells)',
|
|
266
266
|
'_frozenToEndChanged(frozenToEnd, _headerCell, _footerCell, _cells)',
|
|
267
|
-
'_flexGrowChanged(flexGrow,
|
|
268
|
-
'_textAlignChanged(textAlign, _cells
|
|
267
|
+
'_flexGrowChanged(flexGrow, _cells)',
|
|
268
|
+
'_textAlignChanged(textAlign, _cells)',
|
|
269
269
|
'_lastFrozenChanged(_lastFrozen)',
|
|
270
270
|
'_firstFrozenToEndChanged(_firstFrozenToEnd)',
|
|
271
271
|
'_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, path)',
|
|
@@ -275,7 +275,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
275
275
|
'_reorderStatusChanged(_reorderStatus, _headerCell, _footerCell, _cells)',
|
|
276
276
|
'_hiddenChanged(hidden, _headerCell, _footerCell, _cells)',
|
|
277
277
|
'_rowHeaderChanged(rowHeader, _cells)',
|
|
278
|
-
'__headerFooterPartNameChanged(
|
|
278
|
+
'__headerFooterPartNameChanged(headerPartName, footerPartName)',
|
|
279
279
|
];
|
|
280
280
|
}
|
|
281
281
|
|
|
@@ -347,9 +347,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
this._cells?.forEach((cell) => {
|
|
350
|
-
|
|
351
|
-
cell._content.parentNode.removeChild(cell._content);
|
|
352
|
-
}
|
|
350
|
+
cell._content.parentNode?.removeChild(cell._content);
|
|
353
351
|
});
|
|
354
352
|
});
|
|
355
353
|
|
|
@@ -378,46 +376,40 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
378
376
|
|
|
379
377
|
/** @private */
|
|
380
378
|
_flexGrowChanged(flexGrow) {
|
|
381
|
-
|
|
382
|
-
this.parentElement._columnPropChanged('flexGrow');
|
|
383
|
-
}
|
|
379
|
+
this.parentElement?._columnPropChanged?.('flexGrow');
|
|
384
380
|
|
|
385
|
-
this.
|
|
381
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
382
|
+
|
|
383
|
+
this._cells?.forEach((cell) => {
|
|
386
384
|
cell.style.flexGrow = flexGrow;
|
|
387
385
|
});
|
|
388
386
|
}
|
|
389
387
|
|
|
390
388
|
/** @private */
|
|
391
389
|
_widthChanged(width) {
|
|
392
|
-
|
|
393
|
-
this.parentElement._columnPropChanged('width');
|
|
394
|
-
}
|
|
390
|
+
this.parentElement?._columnPropChanged?.('width');
|
|
395
391
|
|
|
396
|
-
this.
|
|
392
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
393
|
+
|
|
394
|
+
this._cells?.forEach((cell) => {
|
|
397
395
|
cell.style.width = width;
|
|
398
396
|
});
|
|
399
397
|
}
|
|
400
398
|
|
|
401
399
|
/** @private */
|
|
402
400
|
_frozenChanged(frozen) {
|
|
403
|
-
|
|
404
|
-
this.parentElement._columnPropChanged('frozen', frozen);
|
|
405
|
-
}
|
|
401
|
+
this.parentElement?._columnPropChanged?.('frozen', frozen);
|
|
406
402
|
|
|
407
403
|
this._allCells.forEach((cell) => {
|
|
408
404
|
updateCellState(cell, 'frozen', frozen);
|
|
409
405
|
});
|
|
410
406
|
|
|
411
|
-
|
|
412
|
-
this._grid._frozenCellsChanged();
|
|
413
|
-
}
|
|
407
|
+
this._grid?._frozenCellsChanged?.();
|
|
414
408
|
}
|
|
415
409
|
|
|
416
410
|
/** @private */
|
|
417
411
|
_frozenToEndChanged(frozenToEnd) {
|
|
418
|
-
|
|
419
|
-
this.parentElement._columnPropChanged('frozenToEnd', frozenToEnd);
|
|
420
|
-
}
|
|
412
|
+
this.parentElement?._columnPropChanged?.('frozenToEnd', frozenToEnd);
|
|
421
413
|
|
|
422
414
|
this._allCells.forEach((cell) => {
|
|
423
415
|
// Skip sizer cells to keep correct scrollWidth.
|
|
@@ -428,9 +420,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
428
420
|
updateCellState(cell, 'frozen-to-end', frozenToEnd);
|
|
429
421
|
});
|
|
430
422
|
|
|
431
|
-
|
|
432
|
-
this._grid._frozenCellsChanged();
|
|
433
|
-
}
|
|
423
|
+
this._grid?._frozenCellsChanged?.();
|
|
434
424
|
}
|
|
435
425
|
|
|
436
426
|
/** @private */
|
|
@@ -462,11 +452,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
462
452
|
|
|
463
453
|
/** @private */
|
|
464
454
|
_rowHeaderChanged(rowHeader, cells) {
|
|
465
|
-
|
|
466
|
-
return;
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
cells.forEach((cell) => {
|
|
455
|
+
cells?.forEach((cell) => {
|
|
470
456
|
cell.setAttribute('role', rowHeader ? 'rowheader' : 'gridcell');
|
|
471
457
|
});
|
|
472
458
|
}
|
|
@@ -500,59 +486,46 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
500
486
|
|
|
501
487
|
/** @private */
|
|
502
488
|
_resizableChanged(resizable) {
|
|
503
|
-
if (resizable === undefined
|
|
489
|
+
if (resizable === undefined) {
|
|
504
490
|
return;
|
|
505
491
|
}
|
|
506
492
|
|
|
507
|
-
this._grid
|
|
493
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
508
494
|
}
|
|
509
495
|
|
|
510
496
|
/** @private */
|
|
511
497
|
_textAlignChanged(textAlign) {
|
|
512
|
-
if (textAlign === undefined
|
|
513
|
-
return;
|
|
514
|
-
}
|
|
515
|
-
if (['start', 'end', 'center'].indexOf(textAlign) === -1) {
|
|
516
|
-
console.warn('textAlign can only be set as "start", "end" or "center"');
|
|
498
|
+
if (textAlign === undefined) {
|
|
517
499
|
return;
|
|
518
500
|
}
|
|
519
501
|
|
|
520
|
-
this.
|
|
502
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
503
|
+
|
|
504
|
+
this._cells?.forEach((cell) => {
|
|
521
505
|
cell._content.style.textAlign = textAlign;
|
|
522
506
|
});
|
|
523
507
|
}
|
|
524
508
|
|
|
525
509
|
/** @private */
|
|
526
510
|
_hiddenChanged(hidden) {
|
|
527
|
-
|
|
528
|
-
this.parentElement._columnPropChanged('hidden', hidden);
|
|
529
|
-
}
|
|
511
|
+
this.parentElement?._columnPropChanged?.('hidden', hidden);
|
|
530
512
|
|
|
531
513
|
if (!!hidden !== !!this._previousHidden && this._grid) {
|
|
532
514
|
if (hidden === true) {
|
|
533
515
|
this._cells?.forEach((cell) => {
|
|
534
|
-
|
|
535
|
-
cell._content.parentNode.removeChild(cell._content);
|
|
536
|
-
}
|
|
516
|
+
cell._content.parentNode?.removeChild(cell._content);
|
|
537
517
|
});
|
|
538
518
|
}
|
|
539
519
|
this._grid._debouncerHiddenChanged = Debouncer.debounce(
|
|
540
520
|
this._grid._debouncerHiddenChanged,
|
|
541
521
|
animationFrame,
|
|
542
522
|
() => {
|
|
543
|
-
|
|
544
|
-
this._grid._renderColumnTree(this._grid._columnTree);
|
|
545
|
-
}
|
|
523
|
+
this._grid?._renderColumnTree?.(this._grid._columnTree);
|
|
546
524
|
},
|
|
547
525
|
);
|
|
548
526
|
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
if (this._grid._resetKeyboardNavigation) {
|
|
554
|
-
this._grid._resetKeyboardNavigation();
|
|
555
|
-
}
|
|
527
|
+
this._grid._debounceUpdateFrozenColumn?.();
|
|
528
|
+
this._grid._resetKeyboardNavigation?.();
|
|
556
529
|
}
|
|
557
530
|
this._previousHidden = hidden;
|
|
558
531
|
}
|
|
@@ -632,7 +605,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
632
605
|
|
|
633
606
|
this.__renderCellsContent(headerRenderer, [headerCell]);
|
|
634
607
|
|
|
635
|
-
this._grid?.__scheduleRenderHeaderFooter();
|
|
608
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
636
609
|
}
|
|
637
610
|
|
|
638
611
|
/** @protected */
|
|
@@ -641,19 +614,8 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
641
614
|
}
|
|
642
615
|
|
|
643
616
|
/** @private */
|
|
644
|
-
__headerFooterPartNameChanged(
|
|
645
|
-
|
|
646
|
-
{ cell: headerCell, partName: headerPartName },
|
|
647
|
-
{ cell: footerCell, partName: footerPartName },
|
|
648
|
-
].forEach(({ cell, partName }) => {
|
|
649
|
-
if (cell) {
|
|
650
|
-
const customParts = cell.__customParts || [];
|
|
651
|
-
cell.part.remove(...customParts);
|
|
652
|
-
|
|
653
|
-
cell.__customParts = partName ? partName.trim().split(' ') : [];
|
|
654
|
-
cell.part.add(...cell.__customParts);
|
|
655
|
-
}
|
|
656
|
-
});
|
|
617
|
+
__headerFooterPartNameChanged() {
|
|
618
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
657
619
|
}
|
|
658
620
|
|
|
659
621
|
/**
|
|
@@ -688,7 +650,7 @@ export const ColumnBaseMixin = (superClass) =>
|
|
|
688
650
|
|
|
689
651
|
this.__renderCellsContent(footerRenderer, [footerCell]);
|
|
690
652
|
|
|
691
|
-
this._grid?.__scheduleRenderHeaderFooter();
|
|
653
|
+
this._grid?.__scheduleRenderHeaderFooter?.();
|
|
692
654
|
}
|
|
693
655
|
|
|
694
656
|
/** @protected */
|
|
@@ -457,9 +457,12 @@ export const ColumnReorderingMixin = (superClass) =>
|
|
|
457
457
|
}
|
|
458
458
|
});
|
|
459
459
|
|
|
460
|
+
[...this.$.items.children, this.$.sizer].forEach((row) => {
|
|
461
|
+
this._updateFirstAndLastColumnForRow(row);
|
|
462
|
+
});
|
|
463
|
+
|
|
460
464
|
this.__scheduleRenderHeaderFooter();
|
|
461
465
|
this._debounceUpdateFrozenColumn();
|
|
462
|
-
this._updateFirstAndLastColumn();
|
|
463
466
|
}
|
|
464
467
|
|
|
465
468
|
/**
|
|
@@ -98,6 +98,10 @@ export const ColumnResizingMixin = (superClass) =>
|
|
|
98
98
|
cell._column.flexGrow = 0;
|
|
99
99
|
});
|
|
100
100
|
|
|
101
|
+
// Flush the scheduled header/footer render to apply the new widths
|
|
102
|
+
// to the cells before measuring the layout below
|
|
103
|
+
this.__renderHeaderFooterDebouncer?.flush();
|
|
104
|
+
|
|
101
105
|
const cellFrozenToEnd = this._frozenToEndCells[0];
|
|
102
106
|
|
|
103
107
|
// When handle moves below the cell frozen to end, scroll into view.
|
|
@@ -214,7 +214,7 @@ export const DataProviderMixin = (superClass) =>
|
|
|
214
214
|
* @protected
|
|
215
215
|
*/
|
|
216
216
|
_isExpanded(item) {
|
|
217
|
-
return this.__expandedKeys
|
|
217
|
+
return this.__expandedKeys?.has(this.getItemId(item));
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
/**
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import { isChrome, isSafari } from '@vaadin/component-base/src/browser-utils.js';
|
|
7
|
+
import { setOrRemoveAttribute } from '@vaadin/component-base/src/dom-utils.js';
|
|
7
8
|
import {
|
|
8
9
|
getBodyRowCells,
|
|
9
10
|
iterateChildren,
|
|
@@ -494,11 +495,7 @@ export const DragAndDropMixin = (superClass) =>
|
|
|
494
495
|
const draggableAttribute = isChrome ? 'draggable-source' : 'draggable';
|
|
495
496
|
|
|
496
497
|
iterateRowCells(row, (cell) => {
|
|
497
|
-
|
|
498
|
-
cell._content.removeAttribute(draggableAttribute);
|
|
499
|
-
} else {
|
|
500
|
-
cell._content.setAttribute(draggableAttribute, true);
|
|
501
|
-
}
|
|
498
|
+
setOrRemoveAttribute(cell._content, draggableAttribute, !dragDisabled);
|
|
502
499
|
});
|
|
503
500
|
|
|
504
501
|
updateBooleanRowStates(row, {
|
|
@@ -143,11 +143,6 @@ export const DynamicColumnsMixin = (superClass) =>
|
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
/** @protected */
|
|
147
|
-
_updateFirstAndLastColumn() {
|
|
148
|
-
Array.from(this.shadowRoot.querySelectorAll('tr')).forEach((row) => this._updateFirstAndLastColumnForRow(row));
|
|
149
|
-
}
|
|
150
|
-
|
|
151
146
|
/**
|
|
152
147
|
* @param {!HTMLElement} row
|
|
153
148
|
* @protected
|
|
@@ -37,7 +37,7 @@ export const GridFilterColumnMixin = (superClass) =>
|
|
|
37
37
|
*/
|
|
38
38
|
_defaultHeaderRenderer(root, _column) {
|
|
39
39
|
let filter = root.firstElementChild;
|
|
40
|
-
let textField = filter
|
|
40
|
+
let textField = filter?.firstElementChild;
|
|
41
41
|
|
|
42
42
|
if (!filter) {
|
|
43
43
|
filter = document.createElement('vaadin-grid-filter');
|
|
@@ -37,6 +37,7 @@ import { GridFilterElementMixin } from './vaadin-grid-filter-element-mixin.js';
|
|
|
37
37
|
*
|
|
38
38
|
* @fires {CustomEvent} value-changed - Fired when the `value` property changes.
|
|
39
39
|
*
|
|
40
|
+
* @attr {string} theme - The theme variants to apply to the component.
|
|
40
41
|
* @customElement vaadin-grid-filter
|
|
41
42
|
* @extends HTMLElement
|
|
42
43
|
*/
|