@vaadin/grid 24.8.4 → 25.0.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 (144) hide show
  1. package/README.md +0 -36
  2. package/package.json +14 -14
  3. package/src/array-data-provider.js +6 -0
  4. package/src/lit/column-renderer-directives.d.ts +0 -1
  5. package/src/styles/vaadin-grid-base-styles.d.ts +8 -0
  6. package/src/styles/vaadin-grid-base-styles.js +510 -0
  7. package/src/styles/vaadin-grid-core-styles.d.ts +8 -0
  8. package/src/{vaadin-grid-styles.js → styles/vaadin-grid-core-styles.js} +2 -3
  9. package/src/styles/vaadin-grid-filter-base-styles.d.ts +8 -0
  10. package/src/styles/vaadin-grid-filter-base-styles.js +18 -0
  11. package/src/styles/vaadin-grid-filter-core-styles.d.ts +8 -0
  12. package/src/styles/vaadin-grid-filter-core-styles.js +18 -0
  13. package/src/styles/vaadin-grid-sorter-base-styles.d.ts +8 -0
  14. package/src/styles/vaadin-grid-sorter-base-styles.js +63 -0
  15. package/src/styles/vaadin-grid-sorter-core-styles.d.ts +8 -0
  16. package/src/styles/vaadin-grid-sorter-core-styles.js +61 -0
  17. package/src/styles/vaadin-grid-tree-toggle-base-styles.d.ts +8 -0
  18. package/src/styles/vaadin-grid-tree-toggle-base-styles.js +76 -0
  19. package/src/styles/vaadin-grid-tree-toggle-core-styles.d.ts +8 -0
  20. package/src/styles/vaadin-grid-tree-toggle-core-styles.js +78 -0
  21. package/src/vaadin-grid-column-auto-width-mixin.js +8 -2
  22. package/src/vaadin-grid-column-group.js +3 -3
  23. package/src/vaadin-grid-column-mixin.js +0 -8
  24. package/src/vaadin-grid-column.js +3 -2
  25. package/src/vaadin-grid-data-provider-mixin.js +19 -76
  26. package/src/vaadin-grid-drag-and-drop-mixin.js +3 -0
  27. package/src/vaadin-grid-filter-element-mixin.d.ts +1 -2
  28. package/src/vaadin-grid-filter-element-mixin.js +1 -21
  29. package/src/vaadin-grid-filter.js +14 -6
  30. package/src/vaadin-grid-mixin.js +50 -31
  31. package/src/vaadin-grid-row-details-mixin.js +4 -4
  32. package/src/vaadin-grid-scroll-mixin.js +20 -4
  33. package/src/vaadin-grid-sorter-mixin.js +0 -60
  34. package/src/vaadin-grid-sorter.js +17 -9
  35. package/src/vaadin-grid-tree-toggle-mixin.js +0 -77
  36. package/src/vaadin-grid-tree-toggle.js +13 -3
  37. package/src/vaadin-grid.d.ts +0 -2
  38. package/src/vaadin-grid.js +29 -19
  39. package/theme/lumo/vaadin-grid-styles.js +1 -1
  40. package/web-types.json +4 -4
  41. package/web-types.lit.json +4 -4
  42. package/src/lit-all-imports.js +0 -14
  43. package/src/vaadin-lit-grid-column-group.js +0 -28
  44. package/src/vaadin-lit-grid-column.js +0 -30
  45. package/src/vaadin-lit-grid-filter-column.js +0 -28
  46. package/src/vaadin-lit-grid-filter.js +0 -35
  47. package/src/vaadin-lit-grid-selection-column.js +0 -28
  48. package/src/vaadin-lit-grid-sort-column.js +0 -28
  49. package/src/vaadin-lit-grid-sorter.js +0 -42
  50. package/src/vaadin-lit-grid-tree-column.js +0 -28
  51. package/src/vaadin-lit-grid-tree-toggle.js +0 -39
  52. package/src/vaadin-lit-grid.js +0 -78
  53. package/theme/lumo/lit-all-imports.d.ts +0 -11
  54. package/theme/lumo/lit-all-imports.js +0 -11
  55. package/theme/lumo/vaadin-lit-grid-column-group.d.ts +0 -1
  56. package/theme/lumo/vaadin-lit-grid-column-group.js +0 -1
  57. package/theme/lumo/vaadin-lit-grid-column.d.ts +0 -1
  58. package/theme/lumo/vaadin-lit-grid-column.js +0 -1
  59. package/theme/lumo/vaadin-lit-grid-filter-column.d.ts +0 -2
  60. package/theme/lumo/vaadin-lit-grid-filter-column.js +0 -2
  61. package/theme/lumo/vaadin-lit-grid-filter.d.ts +0 -2
  62. package/theme/lumo/vaadin-lit-grid-filter.js +0 -2
  63. package/theme/lumo/vaadin-lit-grid-selection-column.d.ts +0 -2
  64. package/theme/lumo/vaadin-lit-grid-selection-column.js +0 -2
  65. package/theme/lumo/vaadin-lit-grid-sort-column.d.ts +0 -2
  66. package/theme/lumo/vaadin-lit-grid-sort-column.js +0 -2
  67. package/theme/lumo/vaadin-lit-grid-sorter.d.ts +0 -2
  68. package/theme/lumo/vaadin-lit-grid-sorter.js +0 -2
  69. package/theme/lumo/vaadin-lit-grid-tree-column.d.ts +0 -2
  70. package/theme/lumo/vaadin-lit-grid-tree-column.js +0 -2
  71. package/theme/lumo/vaadin-lit-grid-tree-toggle.d.ts +0 -2
  72. package/theme/lumo/vaadin-lit-grid-tree-toggle.js +0 -2
  73. package/theme/lumo/vaadin-lit-grid.d.ts +0 -2
  74. package/theme/lumo/vaadin-lit-grid.js +0 -2
  75. package/theme/material/all-imports.d.ts +0 -11
  76. package/theme/material/all-imports.js +0 -11
  77. package/theme/material/lit-all-imports.d.ts +0 -11
  78. package/theme/material/lit-all-imports.js +0 -11
  79. package/theme/material/vaadin-grid-column-group.d.ts +0 -1
  80. package/theme/material/vaadin-grid-column-group.js +0 -1
  81. package/theme/material/vaadin-grid-column.d.ts +0 -1
  82. package/theme/material/vaadin-grid-column.js +0 -1
  83. package/theme/material/vaadin-grid-filter-column.d.ts +0 -2
  84. package/theme/material/vaadin-grid-filter-column.js +0 -2
  85. package/theme/material/vaadin-grid-filter.d.ts +0 -2
  86. package/theme/material/vaadin-grid-filter.js +0 -2
  87. package/theme/material/vaadin-grid-selection-column.d.ts +0 -2
  88. package/theme/material/vaadin-grid-selection-column.js +0 -2
  89. package/theme/material/vaadin-grid-sort-column.d.ts +0 -2
  90. package/theme/material/vaadin-grid-sort-column.js +0 -2
  91. package/theme/material/vaadin-grid-sorter-styles.d.ts +0 -2
  92. package/theme/material/vaadin-grid-sorter-styles.js +0 -73
  93. package/theme/material/vaadin-grid-sorter.d.ts +0 -2
  94. package/theme/material/vaadin-grid-sorter.js +0 -2
  95. package/theme/material/vaadin-grid-styles.d.ts +0 -2
  96. package/theme/material/vaadin-grid-styles.js +0 -266
  97. package/theme/material/vaadin-grid-tree-column.d.ts +0 -2
  98. package/theme/material/vaadin-grid-tree-column.js +0 -2
  99. package/theme/material/vaadin-grid-tree-toggle-styles.d.ts +0 -3
  100. package/theme/material/vaadin-grid-tree-toggle-styles.js +0 -42
  101. package/theme/material/vaadin-grid-tree-toggle.d.ts +0 -2
  102. package/theme/material/vaadin-grid-tree-toggle.js +0 -2
  103. package/theme/material/vaadin-grid.d.ts +0 -2
  104. package/theme/material/vaadin-grid.js +0 -2
  105. package/theme/material/vaadin-lit-grid-column-group.d.ts +0 -1
  106. package/theme/material/vaadin-lit-grid-column-group.js +0 -1
  107. package/theme/material/vaadin-lit-grid-column.d.ts +0 -1
  108. package/theme/material/vaadin-lit-grid-column.js +0 -1
  109. package/theme/material/vaadin-lit-grid-filter-column.d.ts +0 -2
  110. package/theme/material/vaadin-lit-grid-filter-column.js +0 -2
  111. package/theme/material/vaadin-lit-grid-filter.d.ts +0 -2
  112. package/theme/material/vaadin-lit-grid-filter.js +0 -2
  113. package/theme/material/vaadin-lit-grid-selection-column.d.ts +0 -2
  114. package/theme/material/vaadin-lit-grid-selection-column.js +0 -2
  115. package/theme/material/vaadin-lit-grid-sort-column.d.ts +0 -2
  116. package/theme/material/vaadin-lit-grid-sort-column.js +0 -2
  117. package/theme/material/vaadin-lit-grid-sorter.d.ts +0 -2
  118. package/theme/material/vaadin-lit-grid-sorter.js +0 -2
  119. package/theme/material/vaadin-lit-grid-tree-column.d.ts +0 -2
  120. package/theme/material/vaadin-lit-grid-tree-column.js +0 -2
  121. package/theme/material/vaadin-lit-grid-tree-toggle.d.ts +0 -2
  122. package/theme/material/vaadin-lit-grid-tree-toggle.js +0 -2
  123. package/theme/material/vaadin-lit-grid.d.ts +0 -2
  124. package/theme/material/vaadin-lit-grid.js +0 -2
  125. package/vaadin-lit-grid-column-group.d.ts +0 -1
  126. package/vaadin-lit-grid-column-group.js +0 -3
  127. package/vaadin-lit-grid-column.d.ts +0 -1
  128. package/vaadin-lit-grid-column.js +0 -3
  129. package/vaadin-lit-grid-filter-column.d.ts +0 -1
  130. package/vaadin-lit-grid-filter-column.js +0 -3
  131. package/vaadin-lit-grid-filter.d.ts +0 -1
  132. package/vaadin-lit-grid-filter.js +0 -3
  133. package/vaadin-lit-grid-selection-column.d.ts +0 -1
  134. package/vaadin-lit-grid-selection-column.js +0 -3
  135. package/vaadin-lit-grid-sort-column.d.ts +0 -1
  136. package/vaadin-lit-grid-sort-column.js +0 -3
  137. package/vaadin-lit-grid-sorter.d.ts +0 -1
  138. package/vaadin-lit-grid-sorter.js +0 -3
  139. package/vaadin-lit-grid-tree-column.d.ts +0 -1
  140. package/vaadin-lit-grid-tree-column.js +0 -3
  141. package/vaadin-lit-grid-tree-toggle.d.ts +0 -1
  142. package/vaadin-lit-grid-tree-toggle.js +0 -3
  143. package/vaadin-lit-grid.d.ts +0 -1
  144. package/vaadin-lit-grid.js +0 -3
package/README.md CHANGED
@@ -49,42 +49,6 @@ import '@vaadin/grid/vaadin-grid-sort-column.js';
49
49
  import '@vaadin/grid/vaadin-grid-tree-column.js';
50
50
  ```
51
51
 
52
- ## Themes
53
-
54
- Vaadin components come with two built-in [themes](https://vaadin.com/docs/latest/styling), Lumo and Material.
55
- The [main entrypoint](https://github.com/vaadin/web-components/blob/main/packages/grid/vaadin-grid.js) of the package uses the Lumo theme.
56
-
57
- To use the Material theme, import the components from the `theme/material` folder:
58
-
59
- ```js
60
- import '@vaadin/grid/theme/material/vaadin-grid.js';
61
- import '@vaadin/grid/theme/material/vaadin-grid-filter-column.js';
62
- import '@vaadin/grid/theme/material/vaadin-grid-selection-column.js';
63
- import '@vaadin/grid/theme/material/vaadin-grid-sort-column.js';
64
- import '@vaadin/grid/theme/material/vaadin-grid-tree-column.js';
65
- ```
66
-
67
- You can also import the Lumo version of the components explicitly:
68
-
69
- ```js
70
- import '@vaadin/grid/theme/lumo/vaadin-grid.js';
71
- import '@vaadin/grid/theme/lumo/vaadin-grid-filter-column.js';
72
- import '@vaadin/grid/theme/lumo/vaadin-grid-selection-column.js';
73
- import '@vaadin/grid/theme/lumo/vaadin-grid-sort-column.js';
74
- import '@vaadin/grid/theme/lumo/vaadin-grid-tree-column.js';
75
- ```
76
-
77
- Finally, you can import the un-themed components from the `src` folder to get a minimal starting point:
78
-
79
- ```js
80
- import '@vaadin/grid/src/vaadin-grid.js';
81
- import '@vaadin/grid/src/vaadin-grid-column-group.js';
82
- import '@vaadin/grid/src/vaadin-grid-filter-column.js';
83
- import '@vaadin/grid/src/vaadin-grid-selection-column.js';
84
- import '@vaadin/grid/src/vaadin-grid-sort-column.js';
85
- import '@vaadin/grid/src/vaadin-grid-tree-column.js';
86
- ```
87
-
88
52
  ## Contributing
89
53
 
90
54
  Read the [contributing guide](https://vaadin.com/docs/latest/contributing) to learn about our development process, how to propose bugfixes and improvements, and how to test your changes to Vaadin components.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/grid",
3
- "version": "24.8.4",
3
+ "version": "25.0.0-alpha10",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -25,6 +25,8 @@
25
25
  "lit.d.ts",
26
26
  "lit.js",
27
27
  "src",
28
+ "!src/styles/*-base-styles.d.ts",
29
+ "!src/styles/*-base-styles.js",
28
30
  "theme",
29
31
  "vaadin-*.d.ts",
30
32
  "vaadin-*.js",
@@ -45,26 +47,24 @@
45
47
  ],
46
48
  "dependencies": {
47
49
  "@open-wc/dedupe-mixin": "^1.3.0",
48
- "@polymer/polymer": "^3.0.0",
49
- "@vaadin/a11y-base": "~24.8.4",
50
- "@vaadin/checkbox": "~24.8.4",
51
- "@vaadin/component-base": "~24.8.4",
52
- "@vaadin/lit-renderer": "~24.8.4",
53
- "@vaadin/text-field": "~24.8.4",
54
- "@vaadin/vaadin-lumo-styles": "~24.8.4",
55
- "@vaadin/vaadin-material-styles": "~24.8.4",
56
- "@vaadin/vaadin-themable-mixin": "~24.8.4",
50
+ "@vaadin/a11y-base": "25.0.0-alpha10",
51
+ "@vaadin/checkbox": "25.0.0-alpha10",
52
+ "@vaadin/component-base": "25.0.0-alpha10",
53
+ "@vaadin/lit-renderer": "25.0.0-alpha10",
54
+ "@vaadin/text-field": "25.0.0-alpha10",
55
+ "@vaadin/vaadin-lumo-styles": "25.0.0-alpha10",
56
+ "@vaadin/vaadin-themable-mixin": "25.0.0-alpha10",
57
57
  "lit": "^3.0.0"
58
58
  },
59
59
  "devDependencies": {
60
- "@vaadin/chai-plugins": "~24.8.4",
61
- "@vaadin/test-runner-commands": "~24.8.4",
62
- "@vaadin/testing-helpers": "^1.1.0",
60
+ "@vaadin/chai-plugins": "25.0.0-alpha10",
61
+ "@vaadin/test-runner-commands": "25.0.0-alpha10",
62
+ "@vaadin/testing-helpers": "^2.0.0",
63
63
  "sinon": "^18.0.0"
64
64
  },
65
65
  "web-types": [
66
66
  "web-types.json",
67
67
  "web-types.lit.json"
68
68
  ],
69
- "gitHead": "849e54e967563080a685965e2dced02060b3ab23"
69
+ "gitHead": "6cc6c94079e805fa5b2f0af4dbf3b2a7485e57d0"
70
70
  }
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2000 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+
1
7
  /**
2
8
  * Returns a sub-property of an object
3
9
  *
@@ -3,7 +3,6 @@
3
3
  * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
- /* eslint-disable max-classes-per-file */
7
6
  import type { DirectiveResult } from 'lit/directive.js';
8
7
  import type { LitRenderer, LitRendererResult } from '@vaadin/lit-renderer';
9
8
  import { LitRendererDirective } from '@vaadin/lit-renderer';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2016 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import type { CSSResult } from 'lit';
7
+
8
+ export const gridStyles: CSSResult;
@@ -0,0 +1,510 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2016 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import '@vaadin/component-base/src/style-props.js';
7
+ import { css } from 'lit';
8
+
9
+ export const gridStyles = css`
10
+ @keyframes vaadin-grid-appear {
11
+ to {
12
+ opacity: 1;
13
+ }
14
+ }
15
+
16
+ :host {
17
+ display: flex;
18
+ animation: 1ms vaadin-grid-appear;
19
+ max-width: 100%;
20
+ height: 400px;
21
+ min-height: var(--_grid-min-height, 0);
22
+ flex: 1 1 auto;
23
+ align-self: stretch;
24
+ position: relative;
25
+ box-sizing: border-box;
26
+ -webkit-tap-highlight-color: transparent;
27
+ background: var(--vaadin-grid-background, var(--vaadin-background-color));
28
+ border: var(--_border-width) solid var(--vaadin-grid-border-color, var(--vaadin-border-color));
29
+ cursor: default;
30
+ --_border-width: 0;
31
+ --_row-border-width: var(--vaadin-grid-cell-border-width, 1px);
32
+ --_column-border-width: var(--vaadin-grid-cell-border-width, 0);
33
+ --_cell-padding: var(--vaadin-grid-cell-padding, var(--vaadin-padding-container));
34
+ --_selection-background-image: none;
35
+ border-radius: var(--_border-radius);
36
+ --_border-radius: 0;
37
+ }
38
+
39
+ :host([hidden]),
40
+ [hidden] {
41
+ display: none !important;
42
+ }
43
+
44
+ :host([disabled]) {
45
+ pointer-events: none;
46
+ opacity: 0.7;
47
+ }
48
+
49
+ /* Variant: No outer border */
50
+ :host(:not([theme~='no-border'])) {
51
+ --_border-width: var(--vaadin-grid-border-width, 1px);
52
+ --_border-radius: var(--vaadin-grid-border-radius, var(--vaadin-radius-l));
53
+ }
54
+
55
+ :host([all-rows-visible]) {
56
+ height: auto;
57
+ align-self: flex-start;
58
+ min-height: auto;
59
+ flex-grow: 0;
60
+ }
61
+
62
+ #scroller {
63
+ contain: layout;
64
+ border-radius: calc(var(--_border-radius) - var(--_border-width));
65
+ position: relative;
66
+ display: flex;
67
+ width: 100%;
68
+ min-width: 0;
69
+ min-height: 0;
70
+ align-self: stretch;
71
+ overflow: hidden;
72
+ }
73
+
74
+ #items {
75
+ flex-grow: 1;
76
+ flex-shrink: 0;
77
+ display: block;
78
+ position: sticky;
79
+ width: 100%;
80
+ left: 0;
81
+ min-height: 1px;
82
+ }
83
+
84
+ #table {
85
+ display: flex;
86
+ flex-direction: column;
87
+ width: 100%;
88
+ overflow: auto;
89
+ position: relative;
90
+ border-radius: inherit;
91
+ /* Workaround for a Chrome bug: new stacking context here prevents the scrollbar from getting hidden */
92
+ z-index: 0;
93
+ }
94
+
95
+ [no-scrollbars]:is([safari], [firefox]) #table {
96
+ overflow: hidden;
97
+ }
98
+
99
+ #header,
100
+ #footer {
101
+ display: block;
102
+ position: sticky;
103
+ left: 0;
104
+ width: 100%;
105
+ z-index: 1;
106
+ }
107
+
108
+ :host([dir='rtl']) #items,
109
+ :host([dir='rtl']) #header,
110
+ :host([dir='rtl']) #footer {
111
+ left: auto;
112
+ }
113
+
114
+ #header {
115
+ top: 0;
116
+ }
117
+
118
+ #footer {
119
+ bottom: 0;
120
+ }
121
+
122
+ th {
123
+ text-align: inherit;
124
+ }
125
+
126
+ #header th,
127
+ [part~='reorder-ghost'] {
128
+ font-size: var(--vaadin-grid-header-font-size, 1em);
129
+ font-weight: var(--vaadin-grid-header-font-weight, 500);
130
+ color: var(--vaadin-grid-header-color, var(--vaadin-color));
131
+ }
132
+
133
+ [part~='row'] {
134
+ display: flex;
135
+ width: 100%;
136
+ box-sizing: border-box;
137
+ margin: 0;
138
+ position: relative;
139
+ }
140
+
141
+ [part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
142
+ visibility: hidden;
143
+ }
144
+
145
+ [column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
146
+ transform: translateX(var(--_grid-lazy-columns-start));
147
+ }
148
+
149
+ #items [part~='row']:empty {
150
+ height: 100%;
151
+ }
152
+
153
+ [part~='cell'] {
154
+ padding: 0;
155
+ box-sizing: border-box;
156
+ }
157
+
158
+ [part~='row'],
159
+ [part~='cell'] {
160
+ --_hover-background-image: var(--vaadin-grid-cell-background-hover, none);
161
+ background:
162
+ var(--_hover-background-image), var(--_selection-background-image),
163
+ var(--vaadin-grid-cell-background, var(--vaadin-background-color));
164
+ }
165
+
166
+ [part~='cell']:not([part~='details-cell']) {
167
+ flex-shrink: 0;
168
+ flex-grow: 1;
169
+ box-sizing: border-box;
170
+ display: flex;
171
+ width: 100%;
172
+ position: relative;
173
+ align-items: center;
174
+ white-space: nowrap;
175
+ }
176
+
177
+ :focus-visible,
178
+ [part~='row']::after {
179
+ outline: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
180
+ outline-offset: calc(var(--vaadin-focus-ring-width) * -1);
181
+ }
182
+
183
+ [part~='row']:focus-visible {
184
+ z-index: 1;
185
+ }
186
+
187
+ /* Used for focus outline and drag'n'drop target indication */
188
+ [part~='row']::after {
189
+ content: '';
190
+ position: absolute;
191
+ inset: calc(var(--_row-border-width) * -1) 0;
192
+ z-index: 3;
193
+ transform: translateX(var(--_grid-horizontal-scroll-position));
194
+ pointer-events: none;
195
+ visibility: hidden;
196
+ }
197
+
198
+ [part~='row']:focus-visible::after {
199
+ visibility: visible;
200
+ }
201
+
202
+ /* Variant: wrap cell contents */
203
+
204
+ :host([theme~='wrap-cell-content']) [part~='cell']:not([part~='details-cell']) {
205
+ white-space: normal;
206
+ }
207
+
208
+ /* Variant: row & column borders */
209
+
210
+ :host([theme~='no-row-borders']) {
211
+ --_row-border-width: 0;
212
+ }
213
+
214
+ :host([theme~='column-borders']) {
215
+ --_column-border-width: var(--vaadin-grid-cell-border-width, 1px);
216
+ }
217
+
218
+ [part~='cell']:not([part~='last-column-cell'], [part~='details-cell']) {
219
+ border-inline-end: var(--_column-border-width, 0) solid
220
+ var(--vaadin-grid-cell-border-color, var(--vaadin-border-color));
221
+ }
222
+
223
+ [part~='cell']:where(:not([part~='details-cell'], [part~='first-row-cell'])) {
224
+ border-top: var(--_row-border-width) solid var(--vaadin-grid-cell-border-color, var(--vaadin-border-color));
225
+ }
226
+
227
+ [part~='first-header-row-cell'] {
228
+ border-top: 0;
229
+ }
230
+
231
+ [part~='last-header-row-cell'] {
232
+ border-bottom: var(--_row-border-width, 1px) solid var(--vaadin-grid-cell-border-color, var(--vaadin-border-color));
233
+ }
234
+
235
+ [part~='first-footer-row-cell'] {
236
+ border-top: var(--_row-border-width, 1px) solid var(--vaadin-grid-cell-border-color, var(--vaadin-border-color));
237
+ }
238
+
239
+ /* Variant: row stripes */
240
+ :host([theme~='row-stripes']) [part~='odd-row'],
241
+ :host([theme~='row-stripes']) [part~='odd-row'] [part~='cell'] {
242
+ --vaadin-grid-cell-background: var(
243
+ --vaadin-grid-odd-row-cell-background,
244
+ linear-gradient(var(--vaadin-background-container), var(--vaadin-background-container))
245
+ );
246
+ }
247
+
248
+ [part~='details-cell'] {
249
+ position: absolute;
250
+ bottom: 0;
251
+ width: 100%;
252
+ }
253
+
254
+ [part~='cell'] ::slotted(vaadin-grid-cell-content) {
255
+ display: block;
256
+ overflow: hidden;
257
+ text-overflow: ellipsis;
258
+ padding: var(--_cell-padding);
259
+ flex: 1;
260
+ min-width: 0;
261
+ }
262
+
263
+ [frozen],
264
+ [frozen-to-end] {
265
+ z-index: 2;
266
+ will-change: transform;
267
+ }
268
+
269
+ /* Selected row */
270
+ [part~='row'][selected] [part~='body-cell']:not([part~='details-cell']) {
271
+ --_color: color-mix(in srgb, currentColor 8%, transparent);
272
+ --_selection-background-image: var(
273
+ --vaadin-grid-row-selected-background,
274
+ linear-gradient(var(--_color), var(--_color))
275
+ );
276
+ }
277
+
278
+ /* Empty state */
279
+ #scroller:not([empty-state]) #emptystatebody,
280
+ #scroller[empty-state] #items {
281
+ display: none;
282
+ }
283
+
284
+ #emptystatebody {
285
+ display: flex;
286
+ position: sticky;
287
+ inset: 0;
288
+ flex: 1;
289
+ overflow: hidden;
290
+ }
291
+
292
+ #emptystaterow {
293
+ display: flex;
294
+ flex: 1;
295
+ }
296
+
297
+ #emptystatecell {
298
+ display: block;
299
+ flex: 1;
300
+ overflow: auto;
301
+ padding: var(--_cell-padding);
302
+ }
303
+
304
+ /* Reordering styles */
305
+ :host([reordering]) [part~='cell'] ::slotted(vaadin-grid-cell-content),
306
+ :host([reordering]) [part~='resize-handle'],
307
+ #scroller[no-content-pointer-events] [part~='cell'] ::slotted(vaadin-grid-cell-content) {
308
+ pointer-events: none;
309
+ }
310
+
311
+ [part~='reorder-ghost'] {
312
+ visibility: hidden;
313
+ position: fixed;
314
+ pointer-events: none;
315
+ box-shadow:
316
+ 0 0 0 1px hsla(0deg, 0%, 0%, 0.2),
317
+ 0 8px 24px -2px hsla(0deg, 0%, 0%, 0.2);
318
+ padding: var(--_cell-padding) !important;
319
+ border-radius: 3px;
320
+
321
+ /* Prevent overflowing the grid in Firefox */
322
+ top: 0;
323
+ inset-inline-start: 0;
324
+ }
325
+
326
+ :host([reordering]) {
327
+ -webkit-user-select: none;
328
+ user-select: none;
329
+ }
330
+
331
+ :host([reordering]) [part~='cell'] {
332
+ /* TODO expose a custom property to control this */
333
+ --_reorder-curtain-filter: brightness(0.9) contrast(1.1);
334
+ }
335
+
336
+ :host([reordering]) [part~='cell']::after {
337
+ content: '';
338
+ position: absolute;
339
+ inset: 0;
340
+ z-index: 1;
341
+ -webkit-backdrop-filter: var(--_reorder-curtain-filter);
342
+ backdrop-filter: var(--_reorder-curtain-filter);
343
+ }
344
+
345
+ :host([reordering]) [part~='cell'][reorder-status='allowed'] {
346
+ /* TODO expose a custom property to control this */
347
+ --_reorder-curtain-filter: brightness(0.94) contrast(1.07);
348
+ }
349
+
350
+ :host([reordering]) [part~='cell'][reorder-status='dragging'] {
351
+ --_reorder-curtain-filter: none;
352
+ }
353
+
354
+ /* Resizing styles */
355
+ [part~='resize-handle'] {
356
+ position: absolute;
357
+ top: 0;
358
+ inset-inline-end: 0;
359
+ height: 100%;
360
+ cursor: col-resize;
361
+ z-index: 1;
362
+ opacity: 0;
363
+ width: var(--vaadin-focus-ring-width);
364
+ background: var(--vaadin-grid-column-resize-handle-color, var(--vaadin-focus-ring-color));
365
+ transition: opacity 0.2s;
366
+ translate: var(--_column-border-width);
367
+ }
368
+
369
+ [part~='last-column-cell'] [part~='resize-handle'] {
370
+ translate: 0;
371
+ }
372
+
373
+ :host(:not([reordering])) *:not([column-resizing]) [part='resize-handle']:hover,
374
+ [part='resize-handle']:active {
375
+ opacity: 1;
376
+ transition-delay: 0.15s;
377
+ }
378
+
379
+ [part~='resize-handle']::before {
380
+ position: absolute;
381
+ content: '';
382
+ height: 100%;
383
+ width: 16px;
384
+ translate: calc(-50% + var(--vaadin-focus-ring-width) / 2);
385
+ }
386
+
387
+ :host([dir='rtl']) [part~='resize-handle']::before {
388
+ translate: calc(50% - var(--vaadin-focus-ring-width) / 2);
389
+ }
390
+
391
+ [first-frozen-to-end] [part~='resize-handle']::before,
392
+ :is([last-column], [last-frozen]) [part~='resize-handle']::before {
393
+ width: 8px;
394
+ translate: 0;
395
+ }
396
+
397
+ :is([last-column], [last-frozen]) [part~='resize-handle']::before {
398
+ inset-inline-end: 0;
399
+ }
400
+
401
+ [frozen-to-end] :is([part~='resize-handle'], [part~='resize-handle']::before) {
402
+ inset-inline: 0 auto;
403
+ }
404
+
405
+ [first-frozen-to-end] {
406
+ margin-inline-start: auto;
407
+ }
408
+
409
+ /* Hide resize handle if scrolled to end */
410
+ :host(:not([overflow~='end'])) [first-frozen-to-end] [part~='resize-handle'] {
411
+ display: none;
412
+ }
413
+
414
+ #scroller:is([column-resizing], [range-selecting]) {
415
+ -webkit-user-select: none;
416
+ user-select: none;
417
+ }
418
+
419
+ /* Drag'n'drop styles */
420
+ :host([dragover]) {
421
+ outline: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
422
+ outline-offset: calc(var(--_border-width) * -1);
423
+ }
424
+
425
+ [part~='row'][dragover] {
426
+ z-index: 100 !important;
427
+ }
428
+
429
+ [part~='row'][dragover]::after {
430
+ visibility: visible;
431
+ }
432
+
433
+ [part~='row'][dragover='above']::after {
434
+ outline: 0;
435
+ border-top: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
436
+ top: calc(var(--vaadin-focus-ring-width) / -2);
437
+ }
438
+
439
+ [part~='row'][dragover='below']::after {
440
+ outline: 0;
441
+ border-bottom: var(--vaadin-focus-ring-width) solid var(--vaadin-focus-ring-color);
442
+ bottom: calc(var(--vaadin-focus-ring-width) / -2);
443
+ }
444
+
445
+ :is([part~='row']:first-child, [part~='first-row'])::after {
446
+ top: 0;
447
+ }
448
+
449
+ :is([part~='row']:last-child, [part~='last-row'])::after {
450
+ bottom: 0;
451
+ }
452
+
453
+ [part~='row'][dragstart] [part~='cell'] {
454
+ border-top: 0 !important;
455
+ }
456
+
457
+ [part~='row'][dragstart] [part~='cell'][last-column] {
458
+ border-radius: 0 3px 3px 0;
459
+ }
460
+
461
+ [part~='row'][dragstart] [part~='cell'][first-column] {
462
+ border-radius: 3px 0 0 3px;
463
+ }
464
+
465
+ /* Indicates the number of dragged rows */
466
+ /* TODO export custom properties to control styles */
467
+ #scroller [part~='row'][dragstart]:not([dragstart=''])::before {
468
+ position: absolute;
469
+ left: var(--_grid-drag-start-x);
470
+ top: var(--_grid-drag-start-y);
471
+ z-index: 100;
472
+ content: attr(dragstart);
473
+ box-sizing: border-box;
474
+ padding: 0.3em;
475
+ color: white;
476
+ background-color: red;
477
+ border-radius: 1em;
478
+ font-size: 0.75rem;
479
+ line-height: 1;
480
+ font-weight: 500;
481
+ min-width: 1.6em;
482
+ text-align: center;
483
+ }
484
+
485
+ /* Sizer styles */
486
+ #sizer {
487
+ display: flex;
488
+ visibility: hidden;
489
+ }
490
+
491
+ #sizer [part~='details-cell'],
492
+ #sizer [part~='cell'] ::slotted(vaadin-grid-cell-content) {
493
+ display: none !important;
494
+ }
495
+
496
+ #sizer [part~='cell'] {
497
+ display: block;
498
+ flex-shrink: 0;
499
+ line-height: 0;
500
+ height: 0 !important;
501
+ min-height: 0 !important;
502
+ max-height: 0 !important;
503
+ padding: 0 !important;
504
+ border: none !important;
505
+ }
506
+
507
+ #sizer [part~='cell']::before {
508
+ content: '-';
509
+ }
510
+ `;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2016 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import type { CSSResult } from 'lit';
7
+
8
+ export const gridStyles: CSSResult;
@@ -3,7 +3,7 @@
3
3
  * Copyright (c) 2016 - 2025 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 } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
6
+ import { css } from 'lit';
7
7
 
8
8
  export const gridStyles = css`
9
9
  @keyframes vaadin-grid-appear {
@@ -21,6 +21,7 @@ export const gridStyles = css`
21
21
  flex: 1 1 auto;
22
22
  align-self: stretch;
23
23
  position: relative;
24
+ box-sizing: border-box;
24
25
  }
25
26
 
26
27
  :host([hidden]) {
@@ -75,7 +76,6 @@ export const gridStyles = css`
75
76
  #header,
76
77
  #footer {
77
78
  display: block;
78
- position: -webkit-sticky;
79
79
  position: sticky;
80
80
  left: 0;
81
81
  overflow: visible;
@@ -104,7 +104,6 @@ export const gridStyles = css`
104
104
  flex-grow: 1;
105
105
  flex-shrink: 0;
106
106
  display: block;
107
- position: -webkit-sticky;
108
107
  position: sticky;
109
108
  width: 100%;
110
109
  left: 0;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2016 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import type { CSSResult } from 'lit';
7
+
8
+ export const gridFilterStyles: CSSResult;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2016 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ import { css } from 'lit';
7
+
8
+ export const gridFilterStyles = css`
9
+ :host {
10
+ display: inline-flex;
11
+ max-width: 100%;
12
+ }
13
+
14
+ ::slotted(*) {
15
+ width: 100%;
16
+ box-sizing: border-box;
17
+ }
18
+ `;