@vaadin/grid 24.3.0-alpha2 → 24.3.0-alpha3

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.
@@ -0,0 +1,151 @@
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
+ },
102
+
103
+ /**
104
+ * Hides the toggle icon and disables toggling a tree sublevel.
105
+ * @type {boolean}
106
+ */
107
+ leaf: {
108
+ type: Boolean,
109
+ value: false,
110
+ reflectToAttribute: true,
111
+ },
112
+
113
+ /**
114
+ * Sublevel toggle state.
115
+ * @type {boolean}
116
+ */
117
+ expanded: {
118
+ type: Boolean,
119
+ value: false,
120
+ reflectToAttribute: true,
121
+ notify: true,
122
+ },
123
+ };
124
+ }
125
+
126
+ /** @protected */
127
+ ready() {
128
+ super.ready();
129
+
130
+ this.addEventListener('click', (e) => this._onClick(e));
131
+ }
132
+
133
+ /** @private */
134
+ _onClick(e) {
135
+ if (this.leaf) {
136
+ return;
137
+ }
138
+ if (isFocusable(e.target) || e.target instanceof HTMLLabelElement) {
139
+ return;
140
+ }
141
+
142
+ e.preventDefault();
143
+ this.expanded = !this.expanded;
144
+ }
145
+
146
+ /** @private */
147
+ _levelChanged(level) {
148
+ const value = Number(level).toString();
149
+ this.style.setProperty('---level', value);
150
+ }
151
+ };
@@ -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/vaadin-themable-mixin.js';
10
- import { isFocusable } from './vaadin-grid-active-item-mixin.js';
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);