@vaadin/grid 24.2.3 → 24.3.0-alpha10
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/package.json +18 -13
- package/src/vaadin-grid-a11y-mixin.js +1 -1
- package/src/vaadin-grid-active-item-mixin.js +1 -0
- package/src/vaadin-grid-array-data-provider-mixin.js +14 -17
- package/src/vaadin-grid-column-group-mixin.d.ts +20 -0
- package/src/vaadin-grid-column-group-mixin.js +364 -0
- package/src/vaadin-grid-column-group.d.ts +4 -14
- package/src/vaadin-grid-column-group.js +5 -355
- package/src/vaadin-grid-column-mixin.d.ts +170 -0
- package/src/vaadin-grid-column-mixin.js +958 -0
- package/src/vaadin-grid-column.d.ts +11 -138
- package/src/vaadin-grid-column.js +5 -876
- package/src/vaadin-grid-data-provider-mixin.d.ts +6 -30
- package/src/vaadin-grid-data-provider-mixin.js +122 -246
- package/src/vaadin-grid-drag-and-drop-mixin.js +17 -5
- package/src/vaadin-grid-dynamic-columns-mixin.js +22 -17
- package/src/vaadin-grid-filter-column-mixin.d.ts +22 -0
- package/src/vaadin-grid-filter-column-mixin.js +106 -0
- package/src/vaadin-grid-filter-column.d.ts +9 -11
- package/src/vaadin-grid-filter-column.js +3 -90
- package/src/vaadin-grid-filter-element-mixin.d.ts +34 -0
- package/src/vaadin-grid-filter-element-mixin.js +108 -0
- package/src/vaadin-grid-filter-mixin.js +4 -4
- package/src/vaadin-grid-filter.d.ts +4 -21
- package/src/vaadin-grid-filter.js +5 -84
- package/src/vaadin-grid-helpers.js +94 -0
- package/src/vaadin-grid-keyboard-navigation-mixin.js +11 -4
- package/src/vaadin-grid-mixin.js +21 -37
- package/src/vaadin-grid-row-details-mixin.js +7 -8
- package/src/vaadin-grid-scroll-mixin.js +2 -1
- package/src/vaadin-grid-selection-column-base-mixin.js +12 -4
- package/src/vaadin-grid-selection-column-mixin.d.ts +24 -0
- package/src/vaadin-grid-selection-column-mixin.js +194 -0
- package/src/vaadin-grid-selection-column.d.ts +13 -17
- package/src/vaadin-grid-selection-column.js +4 -186
- package/src/vaadin-grid-selection-mixin.js +4 -3
- package/src/vaadin-grid-sort-column-mixin.d.ts +36 -0
- package/src/vaadin-grid-sort-column-mixin.js +101 -0
- package/src/vaadin-grid-sort-column.d.ts +8 -26
- package/src/vaadin-grid-sort-column.js +3 -87
- package/src/vaadin-grid-sorter-mixin.d.ts +44 -0
- package/src/vaadin-grid-sorter-mixin.js +200 -0
- package/src/vaadin-grid-sorter.d.ts +3 -32
- package/src/vaadin-grid-sorter.js +5 -181
- package/src/vaadin-grid-styles.js +341 -345
- package/src/vaadin-grid-styling-mixin.js +8 -2
- package/src/vaadin-grid-tree-column-mixin.d.ts +18 -0
- package/src/vaadin-grid-tree-column-mixin.js +99 -0
- package/src/vaadin-grid-tree-column.d.ts +9 -7
- package/src/vaadin-grid-tree-column.js +3 -82
- package/src/vaadin-grid-tree-toggle-mixin.d.ts +39 -0
- package/src/vaadin-grid-tree-toggle-mixin.js +153 -0
- package/src/vaadin-grid-tree-toggle.d.ts +4 -27
- package/src/vaadin-grid-tree-toggle.js +9 -141
- package/src/vaadin-grid.d.ts +3 -0
- package/src/vaadin-grid.js +7 -2
- package/theme/lumo/vaadin-grid-sorter-styles.js +1 -1
- package/theme/lumo/vaadin-grid-styles.js +15 -14
- package/theme/material/vaadin-grid-styles.js +15 -10
- package/web-types.json +331 -126
- package/web-types.lit.json +114 -58
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Constructor } from '@open-wc/dedupe-mixin';
|
|
8
|
+
|
|
9
|
+
export declare function GridTreeColumnMixin<TItem, T extends Constructor<HTMLElement>>(
|
|
10
|
+
superclass: T,
|
|
11
|
+
): Constructor<GridTreeColumnMixinClass<TItem>> & T;
|
|
12
|
+
|
|
13
|
+
export declare class GridTreeColumnMixinClass<TItem> {
|
|
14
|
+
/**
|
|
15
|
+
* JS Path of the property in the item used as text content for the tree toggle.
|
|
16
|
+
*/
|
|
17
|
+
path: string | null | undefined;
|
|
18
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import { get } from '@vaadin/component-base/src/path-utils.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @polymerMixin
|
|
10
|
+
*/
|
|
11
|
+
export const GridTreeColumnMixin = (superClass) =>
|
|
12
|
+
class extends superClass {
|
|
13
|
+
static get properties() {
|
|
14
|
+
return {
|
|
15
|
+
/**
|
|
16
|
+
* JS Path of the property in the item used as text content for the tree toggle.
|
|
17
|
+
*/
|
|
18
|
+
path: {
|
|
19
|
+
type: String,
|
|
20
|
+
sync: true,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
static get observers() {
|
|
26
|
+
return ['_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, _cells.*, path)'];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
constructor() {
|
|
30
|
+
super();
|
|
31
|
+
|
|
32
|
+
this.__boundOnExpandedChanged = this.__onExpandedChanged.bind(this);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Renders the grid tree toggle to the body cell
|
|
37
|
+
*
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
__defaultRenderer(root, _column, { item, expanded, level }) {
|
|
41
|
+
let toggle = root.firstElementChild;
|
|
42
|
+
if (!toggle) {
|
|
43
|
+
toggle = document.createElement('vaadin-grid-tree-toggle');
|
|
44
|
+
toggle.addEventListener('expanded-changed', this.__boundOnExpandedChanged);
|
|
45
|
+
root.appendChild(toggle);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
toggle.__item = item;
|
|
49
|
+
toggle.__rendererExpanded = expanded;
|
|
50
|
+
toggle.expanded = expanded;
|
|
51
|
+
toggle.leaf = this.__isLeafItem(item, this._grid.itemHasChildrenPath);
|
|
52
|
+
toggle.textContent = this.__getToggleContent(this.path, item);
|
|
53
|
+
toggle.level = level;
|
|
54
|
+
|
|
55
|
+
if (toggle.performUpdate) {
|
|
56
|
+
toggle.performUpdate();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The tree column doesn't allow to use a custom renderer
|
|
62
|
+
* to override the content of body cells.
|
|
63
|
+
* It always renders the grid tree toggle to body cells.
|
|
64
|
+
*
|
|
65
|
+
* @override
|
|
66
|
+
*/
|
|
67
|
+
_computeRenderer() {
|
|
68
|
+
return this.__defaultRenderer;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Expands or collapses the row once the tree toggle is switched.
|
|
73
|
+
* The listener handles only user-fired events.
|
|
74
|
+
*
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
__onExpandedChanged(e) {
|
|
78
|
+
// Skip if the state is changed by the renderer.
|
|
79
|
+
if (e.detail.value === e.target.__rendererExpanded) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (e.detail.value) {
|
|
84
|
+
this._grid.expandItem(e.target.__item);
|
|
85
|
+
} else {
|
|
86
|
+
this._grid.collapseItem(e.target.__item);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** @private */
|
|
91
|
+
__isLeafItem(item, itemHasChildrenPath) {
|
|
92
|
+
return !item || !item[itemHasChildrenPath];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** @private */
|
|
96
|
+
__getToggleContent(path, item) {
|
|
97
|
+
return path && get(path, item);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import type { GridDefaultItem } from './vaadin-grid.js';
|
|
7
|
-
import { GridColumn } from './vaadin-grid-column.js';
|
|
7
|
+
import type { GridColumn, GridColumnMixin } from './vaadin-grid-column.js';
|
|
8
|
+
import type { GridTreeColumnMixinClass } from './vaadin-grid-tree-column-mixin.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* `<vaadin-grid-tree-column>` is a helper element for the `<vaadin-grid>`
|
|
@@ -19,12 +20,13 @@ import { GridColumn } from './vaadin-grid-column.js';
|
|
|
19
20
|
* ...
|
|
20
21
|
* ```
|
|
21
22
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
|
|
24
|
+
declare class GridTreeColumn<TItem = GridDefaultItem> extends HTMLElement {}
|
|
25
|
+
|
|
26
|
+
interface GridTreeColumn<TItem = GridDefaultItem>
|
|
27
|
+
extends GridTreeColumnMixinClass<TItem>,
|
|
28
|
+
GridColumnMixin<TItem, GridColumn<TItem>>,
|
|
29
|
+
GridColumn<TItem> {}
|
|
28
30
|
|
|
29
31
|
declare global {
|
|
30
32
|
interface HTMLElementTagNameMap {
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import './vaadin-grid-tree-toggle.js';
|
|
7
7
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
8
|
-
import { get } from '@vaadin/component-base/src/path-utils.js';
|
|
9
8
|
import { GridColumn } from './vaadin-grid-column.js';
|
|
9
|
+
import { GridTreeColumnMixin } from './vaadin-grid-tree-column-mixin.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* `<vaadin-grid-tree-column>` is a helper element for the `<vaadin-grid>`
|
|
@@ -22,91 +22,12 @@ import { GridColumn } from './vaadin-grid-column.js';
|
|
|
22
22
|
* ```
|
|
23
23
|
* @customElement
|
|
24
24
|
* @extends GridColumn
|
|
25
|
+
* @mixes GridTreeColumnMixin
|
|
25
26
|
*/
|
|
26
|
-
class GridTreeColumn extends GridColumn {
|
|
27
|
+
class GridTreeColumn extends GridTreeColumnMixin(GridColumn) {
|
|
27
28
|
static get is() {
|
|
28
29
|
return 'vaadin-grid-tree-column';
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
static get properties() {
|
|
32
|
-
return {
|
|
33
|
-
/**
|
|
34
|
-
* JS Path of the property in the item used as text content for the tree toggle.
|
|
35
|
-
*/
|
|
36
|
-
path: String,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
static get observers() {
|
|
41
|
-
return ['_onRendererOrBindingChanged(_renderer, _cells, _bodyContentHidden, _cells.*, path)'];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
constructor() {
|
|
45
|
-
super();
|
|
46
|
-
|
|
47
|
-
this.__boundOnExpandedChanged = this.__onExpandedChanged.bind(this);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Renders the grid tree toggle to the body cell
|
|
52
|
-
*
|
|
53
|
-
* @private
|
|
54
|
-
*/
|
|
55
|
-
__defaultRenderer(root, _column, { item, expanded, level }) {
|
|
56
|
-
let toggle = root.firstElementChild;
|
|
57
|
-
if (!toggle) {
|
|
58
|
-
toggle = document.createElement('vaadin-grid-tree-toggle');
|
|
59
|
-
toggle.addEventListener('expanded-changed', this.__boundOnExpandedChanged);
|
|
60
|
-
root.appendChild(toggle);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
toggle.__item = item;
|
|
64
|
-
toggle.__rendererExpanded = expanded;
|
|
65
|
-
toggle.expanded = expanded;
|
|
66
|
-
toggle.leaf = this.__isLeafItem(item, this._grid.itemHasChildrenPath);
|
|
67
|
-
toggle.textContent = this.__getToggleContent(this.path, item);
|
|
68
|
-
toggle.level = level;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* The tree column doesn't allow to use a custom renderer
|
|
73
|
-
* to override the content of body cells.
|
|
74
|
-
* It always renders the grid tree toggle to body cells.
|
|
75
|
-
*
|
|
76
|
-
* @override
|
|
77
|
-
*/
|
|
78
|
-
_computeRenderer() {
|
|
79
|
-
return this.__defaultRenderer;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Expands or collapses the row once the tree toggle is switched.
|
|
84
|
-
* The listener handles only user-fired events.
|
|
85
|
-
*
|
|
86
|
-
* @private
|
|
87
|
-
*/
|
|
88
|
-
__onExpandedChanged(e) {
|
|
89
|
-
// Skip if the state is changed by the renderer.
|
|
90
|
-
if (e.detail.value === e.target.__rendererExpanded) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (e.detail.value) {
|
|
95
|
-
this._grid.expandItem(e.target.__item);
|
|
96
|
-
} else {
|
|
97
|
-
this._grid.collapseItem(e.target.__item);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** @private */
|
|
102
|
-
__isLeafItem(item, itemHasChildrenPath) {
|
|
103
|
-
return !item || !item[itemHasChildrenPath];
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** @private */
|
|
107
|
-
__getToggleContent(path, item) {
|
|
108
|
-
return path && get(path, item);
|
|
109
|
-
}
|
|
110
31
|
}
|
|
111
32
|
|
|
112
33
|
defineCustomElement(GridTreeColumn);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import type { Constructor } from '@open-wc/dedupe-mixin';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Fired when the `expanded` property changes.
|
|
10
|
+
*/
|
|
11
|
+
export type GridTreeToggleExpandedChangedEvent = CustomEvent<{ value: boolean }>;
|
|
12
|
+
|
|
13
|
+
export interface GridTreeToggleCustomEventMap {
|
|
14
|
+
'expanded-changed': GridTreeToggleExpandedChangedEvent;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface GridTreeToggleEventMap extends HTMLElementEventMap, GridTreeToggleCustomEventMap {}
|
|
18
|
+
|
|
19
|
+
export declare function GridTreeToggleMixin<T extends Constructor<HTMLElement>>(
|
|
20
|
+
base: T,
|
|
21
|
+
): Constructor<GridTreeToggleMixinClass> & T;
|
|
22
|
+
|
|
23
|
+
declare class GridTreeToggleMixinClass {
|
|
24
|
+
/**
|
|
25
|
+
* Current level of the tree represented with a horizontal offset
|
|
26
|
+
* of the toggle button.
|
|
27
|
+
*/
|
|
28
|
+
level: number;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Hides the toggle icon and disables toggling a tree sublevel.
|
|
32
|
+
*/
|
|
33
|
+
leaf: boolean;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Sublevel toggle state.
|
|
37
|
+
*/
|
|
38
|
+
expanded: boolean;
|
|
39
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2016 - 2023 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
7
|
+
import { isFocusable } from './vaadin-grid-active-item-mixin.js';
|
|
8
|
+
|
|
9
|
+
const template = document.createElement('template');
|
|
10
|
+
|
|
11
|
+
template.innerHTML = `
|
|
12
|
+
<style>
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: "vaadin-grid-tree-icons";
|
|
15
|
+
src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAQkAA0AAAAABrwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAECAAAABoAAAAcgHwa6EdERUYAAAPsAAAAHAAAAB4AJwAOT1MvMgAAAZQAAAA/AAAAYA8TBIJjbWFwAAAB8AAAAFUAAAFeGJvXWmdhc3AAAAPkAAAACAAAAAgAAAAQZ2x5ZgAAAlwAAABLAAAAhIrPOhFoZWFkAAABMAAAACsAAAA2DsJI02hoZWEAAAFcAAAAHQAAACQHAgPHaG10eAAAAdQAAAAZAAAAHAxVAgBsb2NhAAACSAAAABIAAAASAIAAVG1heHAAAAF8AAAAGAAAACAACgAFbmFtZQAAAqgAAAECAAACTwflzbdwb3N0AAADrAAAADYAAABZQ7Ajh3icY2BkYGAA4twv3Vfi+W2+MnCzMIDANSOmbGSa2YEZRHEwMIEoAAoiB6sAeJxjYGRgYD7w/wADAwsDCDA7MDAyoAI2AFEEAtIAAAB4nGNgZGBg4GBgZgDRDAxMDGgAAAGbABB4nGNgZp7JOIGBlYGBaSbTGQYGhn4IzfiawZiRkwEVMAqgCTA4MDA+38d84P8BBgdmIAapQZJVYGAEAGc/C54AeJxjYYAAxlAIzQTELAwMBxgZGB0ACy0BYwAAAHicY2BgYGaAYBkGRgYQiADyGMF8FgYbIM3FwMHABISMDArP9/3/+/8/WJXC8z0Q9v8nEp5gHVwMMMAIMo+RDYiZoQJMQIKJARUA7WBhGN4AACFKDtoAAAAAAAAAAAgACAAQABgAJgA0AEIAAHichYvBEYBADAKBVHBjBT4swl9KS2k05o0XHd/yW1hAfBFwCv9sIlJu3nZaNS3PXAaXXHI8Lge7DlzF7C1RgXc7xkK6+gvcD2URmQB4nK2RQWoCMRiFX3RUqtCli65yADModOMBLLgQSqHddRFnQghIAnEUvEA3vUUP0LP0Fj1G+yb8R5iEhO9/ef/7FwFwj28o9EthiVp4hBlehcfUP4Ur8o/wBAv8CU+xVFvhOR7UB7tUdUdlVRJ6HnHWTnhM/V24In8JT5j/KzzFSi2E53hUz7jCcrcIiDDwyKSW1JEct2HdIPH1DFytbUM0PofWdNk5E5oUqb/Q6HHBiVGZpfOXkyUMEj5IyBuNmYZQjBobfsuassvnkKLe1OuBBj0VQ8cRni2xjLWsHaM0jrjx3peYA0/vrdmUYqe9iy7bzrX6eNP7Jh1SijX+AaUVbB8AAHicY2BiwA84GBgYmRiYGJkZmBlZGFkZ2djScyoLMgzZS/MyDQwMwLSruZMzlHaB0q4A76kLlwAAAAEAAf//AA94nGNgZGBg4AFiMSBmYmAEQnYgZgHzGAAD6wA2eJxjYGBgZACCKxJigiD6mhFTNowGACmcA/8AAA==) format('woff');
|
|
16
|
+
font-weight: normal;
|
|
17
|
+
font-style: normal;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
document.head.appendChild(template.content);
|
|
23
|
+
|
|
24
|
+
registerStyles(
|
|
25
|
+
'vaadin-grid-tree-toggle',
|
|
26
|
+
css`
|
|
27
|
+
:host {
|
|
28
|
+
display: inline-flex;
|
|
29
|
+
align-items: baseline;
|
|
30
|
+
max-width: 100%;
|
|
31
|
+
|
|
32
|
+
/* CSS API for :host */
|
|
33
|
+
--vaadin-grid-tree-toggle-level-offset: 1em;
|
|
34
|
+
--_collapsed-icon: '\\e7be\\00a0';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
:host([dir='rtl']) {
|
|
38
|
+
--_collapsed-icon: '\\e7bd\\00a0';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
:host([hidden]) {
|
|
42
|
+
display: none !important;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:host(:not([leaf])) {
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#level-spacer,
|
|
50
|
+
[part='toggle'] {
|
|
51
|
+
flex: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#level-spacer {
|
|
55
|
+
display: inline-block;
|
|
56
|
+
width: calc(var(---level, '0') * var(--vaadin-grid-tree-toggle-level-offset));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
[part='toggle']::before {
|
|
60
|
+
font-family: 'vaadin-grid-tree-icons';
|
|
61
|
+
line-height: 1em; /* make icon font metrics not affect baseline */
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
:host(:not([expanded])) [part='toggle']::before {
|
|
65
|
+
content: var(--_collapsed-icon);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:host([expanded]) [part='toggle']::before {
|
|
69
|
+
content: '\\e7bc\\00a0'; /* icon glyph + single non-breaking space */
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
:host([leaf]) [part='toggle'] {
|
|
73
|
+
visibility: hidden;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
slot {
|
|
77
|
+
display: block;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
text-overflow: ellipsis;
|
|
80
|
+
}
|
|
81
|
+
`,
|
|
82
|
+
{ moduleId: 'vaadin-grid-tree-toggle-styles' },
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @polymerMixin
|
|
87
|
+
*/
|
|
88
|
+
export const GridTreeToggleMixin = (superClass) =>
|
|
89
|
+
class extends superClass {
|
|
90
|
+
static get properties() {
|
|
91
|
+
return {
|
|
92
|
+
/**
|
|
93
|
+
* Current level of the tree represented with a horizontal offset
|
|
94
|
+
* of the toggle button.
|
|
95
|
+
* @type {number}
|
|
96
|
+
*/
|
|
97
|
+
level: {
|
|
98
|
+
type: Number,
|
|
99
|
+
value: 0,
|
|
100
|
+
observer: '_levelChanged',
|
|
101
|
+
sync: true,
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Hides the toggle icon and disables toggling a tree sublevel.
|
|
106
|
+
* @type {boolean}
|
|
107
|
+
*/
|
|
108
|
+
leaf: {
|
|
109
|
+
type: Boolean,
|
|
110
|
+
value: false,
|
|
111
|
+
reflectToAttribute: true,
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Sublevel toggle state.
|
|
116
|
+
* @type {boolean}
|
|
117
|
+
*/
|
|
118
|
+
expanded: {
|
|
119
|
+
type: Boolean,
|
|
120
|
+
value: false,
|
|
121
|
+
reflectToAttribute: true,
|
|
122
|
+
notify: true,
|
|
123
|
+
sync: true,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** @protected */
|
|
129
|
+
ready() {
|
|
130
|
+
super.ready();
|
|
131
|
+
|
|
132
|
+
this.addEventListener('click', (e) => this._onClick(e));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** @private */
|
|
136
|
+
_onClick(e) {
|
|
137
|
+
if (this.leaf) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (isFocusable(e.target) || e.target instanceof HTMLLabelElement) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
this.expanded = !this.expanded;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** @private */
|
|
149
|
+
_levelChanged(level) {
|
|
150
|
+
const value = Number(level).toString();
|
|
151
|
+
this.style.setProperty('---level', value);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
@@ -5,17 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
|
|
7
7
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
8
|
+
import type { GridTreeToggleEventMap } from './vaadin-grid-tree-toggle-mixin.js';
|
|
9
|
+
import { GridTreeToggleMixin } from './vaadin-grid-tree-toggle-mixin.js';
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
* Fired when the `expanded` property changes.
|
|
11
|
-
*/
|
|
12
|
-
export type GridTreeToggleExpandedChangedEvent = CustomEvent<{ value: boolean }>;
|
|
13
|
-
|
|
14
|
-
export interface GridTreeToggleCustomEventMap {
|
|
15
|
-
'expanded-changed': GridTreeToggleExpandedChangedEvent;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface GridTreeToggleEventMap extends HTMLElementEventMap, GridTreeToggleCustomEventMap {}
|
|
11
|
+
export * from './vaadin-grid-tree-toggle-mixin.js';
|
|
19
12
|
|
|
20
13
|
/**
|
|
21
14
|
* `<vaadin-grid-tree-toggle>` is a helper element for the `<vaadin-grid>`
|
|
@@ -65,23 +58,7 @@ export interface GridTreeToggleEventMap extends HTMLElementEventMap, GridTreeTog
|
|
|
65
58
|
*
|
|
66
59
|
* @fires {CustomEvent} expanded-changed - Fired when the `expanded` property changes.
|
|
67
60
|
*/
|
|
68
|
-
declare class GridTreeToggle extends ThemableMixin(DirMixin(HTMLElement)) {
|
|
69
|
-
/**
|
|
70
|
-
* Current level of the tree represented with a horizontal offset
|
|
71
|
-
* of the toggle button.
|
|
72
|
-
*/
|
|
73
|
-
level: number;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Hides the toggle icon and disables toggling a tree sublevel.
|
|
77
|
-
*/
|
|
78
|
-
leaf: boolean;
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Sublevel toggle state.
|
|
82
|
-
*/
|
|
83
|
-
expanded: boolean;
|
|
84
|
-
|
|
61
|
+
declare class GridTreeToggle extends GridTreeToggleMixin(ThemableMixin(DirMixin(HTMLElement))) {
|
|
85
62
|
addEventListener<K extends keyof GridTreeToggleEventMap>(
|
|
86
63
|
type: K,
|
|
87
64
|
listener: (this: GridTreeToggle, ev: GridTreeToggleEventMap[K]) => void,
|
|
@@ -6,23 +6,8 @@
|
|
|
6
6
|
import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
|
|
7
7
|
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
|
|
8
8
|
import { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';
|
|
9
|
-
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
const template = document.createElement('template');
|
|
13
|
-
|
|
14
|
-
template.innerHTML = `
|
|
15
|
-
<style>
|
|
16
|
-
@font-face {
|
|
17
|
-
font-family: "vaadin-grid-tree-icons";
|
|
18
|
-
src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAQkAA0AAAAABrwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAECAAAABoAAAAcgHwa6EdERUYAAAPsAAAAHAAAAB4AJwAOT1MvMgAAAZQAAAA/AAAAYA8TBIJjbWFwAAAB8AAAAFUAAAFeGJvXWmdhc3AAAAPkAAAACAAAAAgAAAAQZ2x5ZgAAAlwAAABLAAAAhIrPOhFoZWFkAAABMAAAACsAAAA2DsJI02hoZWEAAAFcAAAAHQAAACQHAgPHaG10eAAAAdQAAAAZAAAAHAxVAgBsb2NhAAACSAAAABIAAAASAIAAVG1heHAAAAF8AAAAGAAAACAACgAFbmFtZQAAAqgAAAECAAACTwflzbdwb3N0AAADrAAAADYAAABZQ7Ajh3icY2BkYGAA4twv3Vfi+W2+MnCzMIDANSOmbGSa2YEZRHEwMIEoAAoiB6sAeJxjYGRgYD7w/wADAwsDCDA7MDAyoAI2AFEEAtIAAAB4nGNgZGBg4GBgZgDRDAxMDGgAAAGbABB4nGNgZp7JOIGBlYGBaSbTGQYGhn4IzfiawZiRkwEVMAqgCTA4MDA+38d84P8BBgdmIAapQZJVYGAEAGc/C54AeJxjYYAAxlAIzQTELAwMBxgZGB0ACy0BYwAAAHicY2BgYGaAYBkGRgYQiADyGMF8FgYbIM3FwMHABISMDArP9/3/+/8/WJXC8z0Q9v8nEp5gHVwMMMAIMo+RDYiZoQJMQIKJARUA7WBhGN4AACFKDtoAAAAAAAAAAAgACAAQABgAJgA0AEIAAHichYvBEYBADAKBVHBjBT4swl9KS2k05o0XHd/yW1hAfBFwCv9sIlJu3nZaNS3PXAaXXHI8Lge7DlzF7C1RgXc7xkK6+gvcD2URmQB4nK2RQWoCMRiFX3RUqtCli65yADModOMBLLgQSqHddRFnQghIAnEUvEA3vUUP0LP0Fj1G+yb8R5iEhO9/ef/7FwFwj28o9EthiVp4hBlehcfUP4Ur8o/wBAv8CU+xVFvhOR7UB7tUdUdlVRJ6HnHWTnhM/V24In8JT5j/KzzFSi2E53hUz7jCcrcIiDDwyKSW1JEct2HdIPH1DFytbUM0PofWdNk5E5oUqb/Q6HHBiVGZpfOXkyUMEj5IyBuNmYZQjBobfsuassvnkKLe1OuBBj0VQ8cRni2xjLWsHaM0jrjx3peYA0/vrdmUYqe9iy7bzrX6eNP7Jh1SijX+AaUVbB8AAHicY2BiwA84GBgYmRiYGJkZmBlZGFkZ2djScyoLMgzZS/MyDQwMwLSruZMzlHaB0q4A76kLlwAAAAEAAf//AA94nGNgZGBg4AFiMSBmYmAEQnYgZgHzGAAD6wA2eJxjYGBgZACCKxJigiD6mhFTNowGACmcA/8AAA==) format('woff');
|
|
19
|
-
font-weight: normal;
|
|
20
|
-
font-style: normal;
|
|
21
|
-
}
|
|
22
|
-
</style>
|
|
23
|
-
`;
|
|
24
|
-
|
|
25
|
-
document.head.appendChild(template.content);
|
|
9
|
+
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin';
|
|
10
|
+
import { GridTreeToggleMixin } from './vaadin-grid-tree-toggle-mixin.js';
|
|
26
11
|
|
|
27
12
|
/**
|
|
28
13
|
* `<vaadin-grid-tree-toggle>` is a helper element for the `<vaadin-grid>`
|
|
@@ -75,138 +60,21 @@ document.head.appendChild(template.content);
|
|
|
75
60
|
* @customElement
|
|
76
61
|
* @extends HTMLElement
|
|
77
62
|
* @mixes ThemableMixin
|
|
63
|
+
* @mixes DirMixin
|
|
64
|
+
* @mixes GridTreeToggleMixin
|
|
78
65
|
*/
|
|
79
|
-
class GridTreeToggle extends ThemableMixin(DirMixin(PolymerElement)) {
|
|
66
|
+
class GridTreeToggle extends GridTreeToggleMixin(ThemableMixin(DirMixin(PolymerElement))) {
|
|
67
|
+
static get is() {
|
|
68
|
+
return 'vaadin-grid-tree-toggle';
|
|
69
|
+
}
|
|
70
|
+
|
|
80
71
|
static get template() {
|
|
81
72
|
return html`
|
|
82
|
-
<style>
|
|
83
|
-
:host {
|
|
84
|
-
display: inline-flex;
|
|
85
|
-
align-items: baseline;
|
|
86
|
-
max-width: 100%;
|
|
87
|
-
|
|
88
|
-
/* CSS API for :host */
|
|
89
|
-
--vaadin-grid-tree-toggle-level-offset: 1em;
|
|
90
|
-
--_collapsed-icon: '\\e7be\\00a0';
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
:host([dir='rtl']) {
|
|
94
|
-
--_collapsed-icon: '\\e7bd\\00a0';
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
:host([hidden]) {
|
|
98
|
-
display: none !important;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
:host(:not([leaf])) {
|
|
102
|
-
cursor: pointer;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
#level-spacer,
|
|
106
|
-
[part='toggle'] {
|
|
107
|
-
flex: none;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
#level-spacer {
|
|
111
|
-
display: inline-block;
|
|
112
|
-
width: calc(var(---level, '0') * var(--vaadin-grid-tree-toggle-level-offset));
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
[part='toggle']::before {
|
|
116
|
-
font-family: 'vaadin-grid-tree-icons';
|
|
117
|
-
line-height: 1em; /* make icon font metrics not affect baseline */
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
:host(:not([expanded])) [part='toggle']::before {
|
|
121
|
-
content: var(--_collapsed-icon);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
:host([expanded]) [part='toggle']::before {
|
|
125
|
-
content: '\\e7bc\\00a0'; /* icon glyph + single non-breaking space */
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
:host([leaf]) [part='toggle'] {
|
|
129
|
-
visibility: hidden;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
slot {
|
|
133
|
-
display: block;
|
|
134
|
-
overflow: hidden;
|
|
135
|
-
text-overflow: ellipsis;
|
|
136
|
-
}
|
|
137
|
-
</style>
|
|
138
|
-
|
|
139
73
|
<span id="level-spacer"></span>
|
|
140
74
|
<span part="toggle"></span>
|
|
141
75
|
<slot></slot>
|
|
142
76
|
`;
|
|
143
77
|
}
|
|
144
|
-
|
|
145
|
-
static get is() {
|
|
146
|
-
return 'vaadin-grid-tree-toggle';
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
static get properties() {
|
|
150
|
-
return {
|
|
151
|
-
/**
|
|
152
|
-
* Current level of the tree represented with a horizontal offset
|
|
153
|
-
* of the toggle button.
|
|
154
|
-
* @type {number}
|
|
155
|
-
*/
|
|
156
|
-
level: {
|
|
157
|
-
type: Number,
|
|
158
|
-
value: 0,
|
|
159
|
-
observer: '_levelChanged',
|
|
160
|
-
},
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Hides the toggle icon and disables toggling a tree sublevel.
|
|
164
|
-
* @type {boolean}
|
|
165
|
-
*/
|
|
166
|
-
leaf: {
|
|
167
|
-
type: Boolean,
|
|
168
|
-
value: false,
|
|
169
|
-
reflectToAttribute: true,
|
|
170
|
-
},
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Sublevel toggle state.
|
|
174
|
-
* @type {boolean}
|
|
175
|
-
*/
|
|
176
|
-
expanded: {
|
|
177
|
-
type: Boolean,
|
|
178
|
-
value: false,
|
|
179
|
-
reflectToAttribute: true,
|
|
180
|
-
notify: true,
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/** @protected */
|
|
186
|
-
ready() {
|
|
187
|
-
super.ready();
|
|
188
|
-
|
|
189
|
-
this.addEventListener('click', (e) => this._onClick(e));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/** @private */
|
|
193
|
-
_onClick(e) {
|
|
194
|
-
if (this.leaf) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (isFocusable(e.target) || e.target instanceof HTMLLabelElement) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
e.preventDefault();
|
|
202
|
-
this.expanded = !this.expanded;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/** @private */
|
|
206
|
-
_levelChanged(level) {
|
|
207
|
-
const value = Number(level).toString();
|
|
208
|
-
this.style.setProperty('---level', value);
|
|
209
|
-
}
|
|
210
78
|
}
|
|
211
79
|
|
|
212
80
|
defineCustomElement(GridTreeToggle);
|
package/src/vaadin-grid.d.ts
CHANGED
|
@@ -156,6 +156,8 @@ export type GridDefaultItem = any;
|
|
|
156
156
|
* Part name | Description
|
|
157
157
|
* ---------------------------|----------------
|
|
158
158
|
* `row` | Row in the internal table
|
|
159
|
+
* `body-row` | Body row in the internal table
|
|
160
|
+
* `collapsed-row` | Collapsed row
|
|
159
161
|
* `expanded-row` | Expanded row
|
|
160
162
|
* `selected-row` | Selected row
|
|
161
163
|
* `details-opened-row` | Row with details open
|
|
@@ -185,6 +187,7 @@ export type GridDefaultItem = any;
|
|
|
185
187
|
* `last-footer-row-cell` | Cell in the last footer row
|
|
186
188
|
* `loading-row-cell` | Cell in a row that is waiting for data from data provider
|
|
187
189
|
* `selected-row-cell` | Cell in a selected row
|
|
190
|
+
* `collapsed-row-cell` | Cell in a collapsed row
|
|
188
191
|
* `expanded-row-cell` | Cell in an expanded row
|
|
189
192
|
* `details-opened-row-cell` | Cell in an row with details open
|
|
190
193
|
* `dragstart-row-cell` | Cell in a row that user started to drag (set for one frame)
|