@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.
Files changed (61) hide show
  1. package/package.json +18 -13
  2. package/src/vaadin-grid-a11y-mixin.js +1 -1
  3. package/src/vaadin-grid-active-item-mixin.js +1 -0
  4. package/src/vaadin-grid-array-data-provider-mixin.js +14 -17
  5. package/src/vaadin-grid-column-group-mixin.d.ts +20 -0
  6. package/src/vaadin-grid-column-group-mixin.js +364 -0
  7. package/src/vaadin-grid-column-group.d.ts +4 -14
  8. package/src/vaadin-grid-column-group.js +5 -355
  9. package/src/vaadin-grid-column-mixin.d.ts +170 -0
  10. package/src/vaadin-grid-column-mixin.js +958 -0
  11. package/src/vaadin-grid-column.d.ts +11 -138
  12. package/src/vaadin-grid-column.js +5 -876
  13. package/src/vaadin-grid-data-provider-mixin.d.ts +6 -30
  14. package/src/vaadin-grid-data-provider-mixin.js +122 -246
  15. package/src/vaadin-grid-drag-and-drop-mixin.js +17 -5
  16. package/src/vaadin-grid-dynamic-columns-mixin.js +22 -17
  17. package/src/vaadin-grid-filter-column-mixin.d.ts +22 -0
  18. package/src/vaadin-grid-filter-column-mixin.js +106 -0
  19. package/src/vaadin-grid-filter-column.d.ts +9 -11
  20. package/src/vaadin-grid-filter-column.js +3 -90
  21. package/src/vaadin-grid-filter-element-mixin.d.ts +34 -0
  22. package/src/vaadin-grid-filter-element-mixin.js +108 -0
  23. package/src/vaadin-grid-filter-mixin.js +4 -4
  24. package/src/vaadin-grid-filter.d.ts +4 -21
  25. package/src/vaadin-grid-filter.js +5 -84
  26. package/src/vaadin-grid-helpers.js +94 -0
  27. package/src/vaadin-grid-keyboard-navigation-mixin.js +11 -4
  28. package/src/vaadin-grid-mixin.js +21 -37
  29. package/src/vaadin-grid-row-details-mixin.js +7 -8
  30. package/src/vaadin-grid-scroll-mixin.js +2 -1
  31. package/src/vaadin-grid-selection-column-base-mixin.js +12 -4
  32. package/src/vaadin-grid-selection-column-mixin.d.ts +24 -0
  33. package/src/vaadin-grid-selection-column-mixin.js +194 -0
  34. package/src/vaadin-grid-selection-column.d.ts +13 -17
  35. package/src/vaadin-grid-selection-column.js +4 -186
  36. package/src/vaadin-grid-selection-mixin.js +4 -3
  37. package/src/vaadin-grid-sort-column-mixin.d.ts +36 -0
  38. package/src/vaadin-grid-sort-column-mixin.js +101 -0
  39. package/src/vaadin-grid-sort-column.d.ts +8 -26
  40. package/src/vaadin-grid-sort-column.js +3 -87
  41. package/src/vaadin-grid-sorter-mixin.d.ts +44 -0
  42. package/src/vaadin-grid-sorter-mixin.js +200 -0
  43. package/src/vaadin-grid-sorter.d.ts +3 -32
  44. package/src/vaadin-grid-sorter.js +5 -181
  45. package/src/vaadin-grid-styles.js +341 -345
  46. package/src/vaadin-grid-styling-mixin.js +8 -2
  47. package/src/vaadin-grid-tree-column-mixin.d.ts +18 -0
  48. package/src/vaadin-grid-tree-column-mixin.js +99 -0
  49. package/src/vaadin-grid-tree-column.d.ts +9 -7
  50. package/src/vaadin-grid-tree-column.js +3 -82
  51. package/src/vaadin-grid-tree-toggle-mixin.d.ts +39 -0
  52. package/src/vaadin-grid-tree-toggle-mixin.js +153 -0
  53. package/src/vaadin-grid-tree-toggle.d.ts +4 -27
  54. package/src/vaadin-grid-tree-toggle.js +9 -141
  55. package/src/vaadin-grid.d.ts +3 -0
  56. package/src/vaadin-grid.js +7 -2
  57. package/theme/lumo/vaadin-grid-sorter-styles.js +1 -1
  58. package/theme/lumo/vaadin-grid-styles.js +15 -14
  59. package/theme/material/vaadin-grid-styles.js +15 -10
  60. package/web-types.json +331 -126
  61. package/web-types.lit.json +114 -58
@@ -3,355 +3,351 @@
3
3
  * Copyright (c) 2016 - 2023 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
- import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
7
-
8
- registerStyles(
9
- 'vaadin-grid',
10
- css`
11
- @keyframes vaadin-grid-appear {
12
- to {
13
- opacity: 1;
14
- }
15
- }
16
-
17
- :host {
18
- display: flex;
19
- flex-direction: column;
20
- animation: 1ms vaadin-grid-appear;
21
- height: 400px;
22
- flex: 1 1 auto;
23
- align-self: stretch;
24
- position: relative;
25
- }
26
-
27
- :host([hidden]) {
28
- display: none !important;
29
- }
30
-
31
- :host([disabled]) {
32
- pointer-events: none;
33
- }
34
-
35
- #scroller {
36
- display: flex;
37
- flex-direction: column;
38
- min-height: 100%;
39
- transform: translateY(0);
40
- width: auto;
41
- height: auto;
6
+ import { css } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
7
+
8
+ export const gridStyles = css`
9
+ @keyframes vaadin-grid-appear {
10
+ to {
11
+ opacity: 1;
12
+ }
13
+ }
14
+
15
+ :host {
16
+ display: flex;
17
+ flex-direction: column;
18
+ animation: 1ms vaadin-grid-appear;
19
+ height: 400px;
20
+ flex: 1 1 auto;
21
+ align-self: stretch;
22
+ position: relative;
23
+ }
24
+
25
+ :host([hidden]) {
26
+ display: none !important;
27
+ }
28
+
29
+ :host([disabled]) {
30
+ pointer-events: none;
31
+ }
32
+
33
+ #scroller {
34
+ display: flex;
35
+ flex-direction: column;
36
+ min-height: 100%;
37
+ transform: translateY(0);
38
+ width: auto;
39
+ height: auto;
40
+ position: absolute;
41
+ inset: 0;
42
+ }
43
+
44
+ :host([all-rows-visible]) {
45
+ height: auto;
46
+ align-self: flex-start;
47
+ flex-grow: 0;
48
+ width: 100%;
49
+ }
50
+
51
+ :host([all-rows-visible]) #scroller {
52
+ width: 100%;
53
+ height: 100%;
54
+ position: relative;
55
+ }
56
+
57
+ :host([all-rows-visible]) #items {
58
+ min-height: 1px;
59
+ }
60
+
61
+ #table {
62
+ display: flex;
63
+ flex-direction: column;
64
+ width: 100%;
65
+ height: 100%;
66
+ overflow: auto;
67
+ position: relative;
68
+ outline: none;
69
+ /* Workaround for a Desktop Safari bug: new stacking context here prevents the scrollbar from getting hidden */
70
+ z-index: 0;
71
+ }
72
+
73
+ #header,
74
+ #footer {
75
+ display: block;
76
+ position: -webkit-sticky;
77
+ position: sticky;
78
+ left: 0;
79
+ overflow: visible;
80
+ width: 100%;
81
+ z-index: 1;
82
+ }
83
+
84
+ #header {
85
+ top: 0;
86
+ }
87
+
88
+ th {
89
+ text-align: inherit;
90
+ }
91
+
92
+ /* Safari doesn't work with "inherit" */
93
+ [safari] th {
94
+ text-align: initial;
95
+ }
96
+
97
+ #footer {
98
+ bottom: 0;
99
+ }
100
+
101
+ #items {
102
+ flex-grow: 1;
103
+ flex-shrink: 0;
104
+ display: block;
105
+ position: -webkit-sticky;
106
+ position: sticky;
107
+ width: 100%;
108
+ left: 0;
109
+ overflow: visible;
110
+ }
111
+
112
+ [part~='row'] {
113
+ display: flex;
114
+ width: 100%;
115
+ box-sizing: border-box;
116
+ margin: 0;
117
+ }
118
+
119
+ [part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
120
+ visibility: hidden;
121
+ }
122
+
123
+ [column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
124
+ transform: translateX(var(--_grid-lazy-columns-start));
125
+ }
126
+
127
+ #items [part~='row'] {
128
+ position: absolute;
129
+ }
130
+
131
+ #items [part~='row']:empty {
132
+ height: 100%;
133
+ }
134
+
135
+ [part~='cell']:not([part~='details-cell']) {
136
+ flex-shrink: 0;
137
+ flex-grow: 1;
138
+ box-sizing: border-box;
139
+ display: flex;
140
+ width: 100%;
141
+ position: relative;
142
+ align-items: center;
143
+ padding: 0;
144
+ white-space: nowrap;
145
+ }
146
+
147
+ [part~='cell'] > [tabindex] {
148
+ display: flex;
149
+ align-items: inherit;
150
+ outline: none;
151
+ position: absolute;
152
+ inset: 0;
153
+ }
154
+
155
+ [part~='details-cell'] {
156
+ position: absolute;
157
+ bottom: 0;
158
+ width: 100%;
159
+ box-sizing: border-box;
160
+ padding: 0;
161
+ }
162
+
163
+ [part~='cell'] ::slotted(vaadin-grid-cell-content) {
164
+ display: block;
165
+ width: 100%;
166
+ box-sizing: border-box;
167
+ overflow: hidden;
168
+ text-overflow: ellipsis;
169
+ }
170
+
171
+ [hidden] {
172
+ display: none !important;
173
+ }
174
+
175
+ [frozen],
176
+ [frozen-to-end] {
177
+ z-index: 2;
178
+ will-change: transform;
179
+ }
180
+
181
+ [no-scrollbars][safari] #table,
182
+ [no-scrollbars][firefox] #table {
183
+ overflow: hidden;
184
+ }
185
+
186
+ /* Reordering styles */
187
+ :host([reordering]) [part~='cell'] ::slotted(vaadin-grid-cell-content),
188
+ :host([reordering]) [part~='resize-handle'],
189
+ #scroller[no-content-pointer-events] [part~='cell'] ::slotted(vaadin-grid-cell-content) {
190
+ pointer-events: none;
191
+ }
192
+
193
+ [part~='reorder-ghost'] {
194
+ visibility: hidden;
195
+ position: fixed;
196
+ pointer-events: none;
197
+ opacity: 0.5;
198
+
199
+ /* Prevent overflowing the grid in Firefox */
200
+ top: 0;
201
+ left: 0;
202
+ }
203
+
204
+ :host([reordering]) {
205
+ -moz-user-select: none;
206
+ -webkit-user-select: none;
207
+ user-select: none;
208
+ }
209
+
210
+ /* Resizing styles */
211
+ [part~='resize-handle'] {
212
+ position: absolute;
213
+ top: 0;
214
+ right: 0;
215
+ height: 100%;
216
+ cursor: col-resize;
217
+ z-index: 1;
218
+ }
219
+
220
+ [part~='resize-handle']::before {
221
+ position: absolute;
222
+ content: '';
223
+ height: 100%;
224
+ width: 35px;
225
+ transform: translateX(-50%);
226
+ }
227
+
228
+ [last-column] [part~='resize-handle']::before,
229
+ [last-frozen] [part~='resize-handle']::before {
230
+ width: 18px;
231
+ transform: none;
232
+ right: 0;
233
+ }
234
+
235
+ [frozen-to-end] [part~='resize-handle'] {
236
+ left: 0;
237
+ right: auto;
238
+ }
239
+
240
+ [frozen-to-end] [part~='resize-handle']::before {
241
+ left: 0;
242
+ right: auto;
243
+ }
244
+
245
+ [first-frozen-to-end] [part~='resize-handle']::before {
246
+ width: 18px;
247
+ transform: none;
248
+ }
249
+
250
+ [first-frozen-to-end] {
251
+ margin-inline-start: auto;
252
+ }
253
+
254
+ /* Hide resize handle if scrolled to end */
255
+ :host(:not([overflow~='end'])) [first-frozen-to-end] [part~='resize-handle'] {
256
+ display: none;
257
+ }
258
+
259
+ #scroller[column-resizing] {
260
+ -ms-user-select: none;
261
+ -moz-user-select: none;
262
+ -webkit-user-select: none;
263
+ user-select: none;
264
+ }
265
+
266
+ /* Sizer styles */
267
+ #sizer {
268
+ display: flex;
269
+ position: absolute;
270
+ visibility: hidden;
271
+ }
272
+
273
+ #sizer [part~='details-cell'] {
274
+ display: none !important;
275
+ }
276
+
277
+ #sizer [part~='cell'][hidden] {
278
+ display: none !important;
279
+ }
280
+
281
+ #sizer [part~='cell'] {
282
+ display: block;
283
+ flex-shrink: 0;
284
+ line-height: 0;
285
+ height: 0 !important;
286
+ min-height: 0 !important;
287
+ max-height: 0 !important;
288
+ padding: 0 !important;
289
+ border: none !important;
290
+ }
291
+
292
+ #sizer [part~='cell']::before {
293
+ content: '-';
294
+ }
295
+
296
+ #sizer [part~='cell'] ::slotted(vaadin-grid-cell-content) {
297
+ display: none !important;
298
+ }
299
+
300
+ /* RTL specific styles */
301
+
302
+ :host([dir='rtl']) #items,
303
+ :host([dir='rtl']) #header,
304
+ :host([dir='rtl']) #footer {
305
+ left: auto;
306
+ }
307
+
308
+ :host([dir='rtl']) [part~='reorder-ghost'] {
309
+ left: auto;
310
+ right: 0;
311
+ }
312
+
313
+ :host([dir='rtl']) [part~='resize-handle'] {
314
+ left: 0;
315
+ right: auto;
316
+ }
317
+
318
+ :host([dir='rtl']) [part~='resize-handle']::before {
319
+ transform: translateX(50%);
320
+ }
321
+
322
+ :host([dir='rtl']) [last-column] [part~='resize-handle']::before,
323
+ :host([dir='rtl']) [last-frozen] [part~='resize-handle']::before {
324
+ left: 0;
325
+ right: auto;
326
+ }
327
+
328
+ :host([dir='rtl']) [frozen-to-end] [part~='resize-handle'] {
329
+ right: 0;
330
+ left: auto;
331
+ }
332
+
333
+ :host([dir='rtl']) [frozen-to-end] [part~='resize-handle']::before {
334
+ right: 0;
335
+ left: auto;
336
+ }
337
+
338
+ @media (forced-colors: active) {
339
+ [part~='selected-row'] [part~='first-column-cell']::after {
340
+ content: '';
42
341
  position: absolute;
43
- inset: 0;
44
- }
45
-
46
- :host([all-rows-visible]) {
47
- height: auto;
48
- align-self: flex-start;
49
- flex-grow: 0;
50
- width: 100%;
51
- }
52
-
53
- :host([all-rows-visible]) #scroller {
54
- width: 100%;
55
- height: 100%;
56
- position: relative;
57
- }
58
-
59
- :host([all-rows-visible]) #items {
60
- min-height: 1px;
61
- }
62
-
63
- #table {
64
- display: flex;
65
- flex-direction: column;
66
- width: 100%;
67
- height: 100%;
68
- overflow: auto;
69
- position: relative;
70
- outline: none;
71
- /* Workaround for a Desktop Safari bug: new stacking context here prevents the scrollbar from getting hidden */
72
- z-index: 0;
73
- }
74
-
75
- #header,
76
- #footer {
77
- display: block;
78
- position: -webkit-sticky;
79
- position: sticky;
80
- left: 0;
81
- overflow: visible;
82
- width: 100%;
83
- z-index: 1;
84
- }
85
-
86
- #header {
87
342
  top: 0;
88
- }
89
-
90
- th {
91
- text-align: inherit;
92
- }
93
-
94
- /* Safari doesn't work with "inherit" */
95
- [safari] th {
96
- text-align: initial;
97
- }
98
-
99
- #footer {
100
- bottom: 0;
101
- }
102
-
103
- #items {
104
- flex-grow: 1;
105
- flex-shrink: 0;
106
- display: block;
107
- position: -webkit-sticky;
108
- position: sticky;
109
- width: 100%;
110
343
  left: 0;
111
- overflow: visible;
112
- }
113
-
114
- [part~='row'] {
115
- display: flex;
116
- width: 100%;
117
- box-sizing: border-box;
118
- margin: 0;
119
- }
120
-
121
- [part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
122
- visibility: hidden;
123
- }
124
-
125
- [column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
126
- transform: translateX(var(--_grid-lazy-columns-start));
127
- }
128
-
129
- #items [part~='row'] {
130
- position: absolute;
131
- }
132
-
133
- #items [part~='row']:empty {
134
- height: 100%;
135
- }
136
-
137
- [part~='cell']:not([part~='details-cell']) {
138
- flex-shrink: 0;
139
- flex-grow: 1;
140
- box-sizing: border-box;
141
- display: flex;
142
- width: 100%;
143
- position: relative;
144
- align-items: center;
145
- padding: 0;
146
- white-space: nowrap;
147
- }
148
-
149
- [part~='cell'] > [tabindex] {
150
- display: flex;
151
- align-items: inherit;
152
- outline: none;
153
- position: absolute;
154
- inset: 0;
155
- }
156
-
157
- [part~='details-cell'] {
158
- position: absolute;
159
344
  bottom: 0;
160
- width: 100%;
161
- box-sizing: border-box;
162
- padding: 0;
163
- }
164
-
165
- [part~='cell'] ::slotted(vaadin-grid-cell-content) {
166
- display: block;
167
- width: 100%;
168
- box-sizing: border-box;
169
- overflow: hidden;
170
- text-overflow: ellipsis;
171
- }
172
-
173
- [hidden] {
174
- display: none !important;
175
- }
176
-
177
- [frozen],
178
- [frozen-to-end] {
179
- z-index: 2;
180
- will-change: transform;
181
- }
182
-
183
- [no-scrollbars][safari] #table,
184
- [no-scrollbars][firefox] #table {
185
- overflow: hidden;
186
- }
187
-
188
- /* Reordering styles */
189
- :host([reordering]) [part~='cell'] ::slotted(vaadin-grid-cell-content),
190
- :host([reordering]) [part~='resize-handle'],
191
- #scroller[no-content-pointer-events] [part~='cell'] ::slotted(vaadin-grid-cell-content) {
192
- pointer-events: none;
193
- }
194
-
195
- [part~='reorder-ghost'] {
196
- visibility: hidden;
197
- position: fixed;
198
- pointer-events: none;
199
- opacity: 0.5;
200
-
201
- /* Prevent overflowing the grid in Firefox */
202
- top: 0;
203
- left: 0;
204
- }
205
-
206
- :host([reordering]) {
207
- -moz-user-select: none;
208
- -webkit-user-select: none;
209
- user-select: none;
210
- }
211
-
212
- /* Resizing styles */
213
- [part~='resize-handle'] {
214
- position: absolute;
215
- top: 0;
216
- right: 0;
217
- height: 100%;
218
- cursor: col-resize;
219
- z-index: 1;
220
- }
221
-
222
- [part~='resize-handle']::before {
223
- position: absolute;
224
- content: '';
225
- height: 100%;
226
- width: 35px;
227
- transform: translateX(-50%);
228
- }
229
-
230
- [last-column] [part~='resize-handle']::before,
231
- [last-frozen] [part~='resize-handle']::before {
232
- width: 18px;
233
- transform: none;
234
- right: 0;
235
- }
236
-
237
- [frozen-to-end] [part~='resize-handle'] {
238
- left: 0;
239
- right: auto;
240
- }
241
-
242
- [frozen-to-end] [part~='resize-handle']::before {
243
- left: 0;
244
- right: auto;
245
- }
246
-
247
- [first-frozen-to-end] [part~='resize-handle']::before {
248
- width: 18px;
249
- transform: none;
250
- }
251
-
252
- [first-frozen-to-end] {
253
- margin-inline-start: auto;
254
- }
255
-
256
- /* Hide resize handle if scrolled to end */
257
- :host(:not([overflow~='end'])) [first-frozen-to-end] [part~='resize-handle'] {
258
- display: none;
259
- }
260
-
261
- #scroller[column-resizing] {
262
- -ms-user-select: none;
263
- -moz-user-select: none;
264
- -webkit-user-select: none;
265
- user-select: none;
266
- }
267
-
268
- /* Sizer styles */
269
- #sizer {
270
- display: flex;
271
- position: absolute;
272
- visibility: hidden;
273
- }
274
-
275
- #sizer [part~='details-cell'] {
276
- display: none !important;
277
- }
278
-
279
- #sizer [part~='cell'][hidden] {
280
- display: none !important;
281
- }
282
-
283
- #sizer [part~='cell'] {
284
- display: block;
285
- flex-shrink: 0;
286
- line-height: 0;
287
- height: 0 !important;
288
- min-height: 0 !important;
289
- max-height: 0 !important;
290
- padding: 0 !important;
291
- border: none !important;
292
- }
293
-
294
- #sizer [part~='cell']::before {
295
- content: '-';
296
- }
297
-
298
- #sizer [part~='cell'] ::slotted(vaadin-grid-cell-content) {
299
- display: none !important;
300
- }
301
-
302
- /* RTL specific styles */
303
-
304
- :host([dir='rtl']) #items,
305
- :host([dir='rtl']) #header,
306
- :host([dir='rtl']) #footer {
307
- left: auto;
308
- }
309
-
310
- :host([dir='rtl']) [part~='reorder-ghost'] {
311
- left: auto;
312
- right: 0;
313
- }
314
-
315
- :host([dir='rtl']) [part~='resize-handle'] {
316
- left: 0;
317
- right: auto;
318
- }
319
-
320
- :host([dir='rtl']) [part~='resize-handle']::before {
321
- transform: translateX(50%);
322
- }
323
-
324
- :host([dir='rtl']) [last-column] [part~='resize-handle']::before,
325
- :host([dir='rtl']) [last-frozen] [part~='resize-handle']::before {
326
- left: 0;
327
- right: auto;
328
- }
329
-
330
- :host([dir='rtl']) [frozen-to-end] [part~='resize-handle'] {
331
- right: 0;
332
- left: auto;
333
- }
334
-
335
- :host([dir='rtl']) [frozen-to-end] [part~='resize-handle']::before {
336
- right: 0;
337
- left: auto;
345
+ border: 2px solid;
338
346
  }
339
347
 
340
- @media (forced-colors: active) {
341
- [part~='selected-row'] [part~='first-column-cell']::after {
342
- content: '';
343
- position: absolute;
344
- top: 0;
345
- left: 0;
346
- bottom: 0;
347
- border: 2px solid;
348
- }
349
-
350
- [part~='focused-cell']::before {
351
- outline: 2px solid !important;
352
- outline-offset: -1px;
353
- }
348
+ [part~='focused-cell']::before {
349
+ outline: 2px solid !important;
350
+ outline-offset: -1px;
354
351
  }
355
- `,
356
- { moduleId: 'vaadin-grid-styles' },
357
- );
352
+ }
353
+ `;
@@ -31,7 +31,10 @@ export const StylingMixin = (superClass) =>
31
31
  * @type {GridCellClassNameGenerator | null | undefined}
32
32
  * @deprecated Use `cellPartNameGenerator` instead.
33
33
  */
34
- cellClassNameGenerator: Function,
34
+ cellClassNameGenerator: {
35
+ type: Function,
36
+ sync: true,
37
+ },
35
38
 
36
39
  /**
37
40
  * A function that allows generating CSS `part` names for grid cells in Shadow DOM based
@@ -52,7 +55,10 @@ export const StylingMixin = (superClass) =>
52
55
  *
53
56
  * @type {GridCellPartNameGenerator | null | undefined}
54
57
  */
55
- cellPartNameGenerator: Function,
58
+ cellPartNameGenerator: {
59
+ type: Function,
60
+ sync: true,
61
+ },
56
62
  };
57
63
  }
58
64