@vaadin/vaadin-lumo-styles 25.0.0-alpha1 → 25.0.0-alpha11

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 (226) hide show
  1. package/auto-complete.css +3 -73
  2. package/components/accordion-heading.css +14 -0
  3. package/components/accordion-panel.css +15 -0
  4. package/components/accordion.css +7 -0
  5. package/components/app-layout.css +11 -0
  6. package/components/avatar-group.css +31 -0
  7. package/components/avatar.css +17 -0
  8. package/components/button.css +11 -0
  9. package/components/card.css +50 -0
  10. package/components/charts.css +11 -0
  11. package/components/checkbox-group.css +23 -0
  12. package/components/checkbox.css +14 -0
  13. package/components/combo-box.css +47 -0
  14. package/components/confirm-dialog.css +17 -0
  15. package/components/context-menu.css +32 -0
  16. package/components/crud.css +40 -0
  17. package/components/custom-field.css +20 -0
  18. package/components/dashboard.css +34 -0
  19. package/components/date-picker.css +49 -0
  20. package/components/date-time-picker.css +28 -0
  21. package/components/details-summary.css +11 -0
  22. package/components/details.css +12 -0
  23. package/components/dialog.css +16 -0
  24. package/components/drawer-toggle.css +14 -0
  25. package/components/email-field.css +25 -0
  26. package/components/field-highlighter.css +22 -0
  27. package/components/form-item.css +11 -0
  28. package/components/form-layout.css +11 -0
  29. package/components/grid-filter-column.css +6 -0
  30. package/components/grid-filter.css +12 -0
  31. package/components/grid-pro-edit-column.css +48 -0
  32. package/components/grid-pro.css +14 -0
  33. package/components/grid-selection-column.css +6 -0
  34. package/components/grid-sort-column.css +6 -0
  35. package/components/grid-sorter.css +19 -0
  36. package/components/grid-tree-column.css +6 -0
  37. package/components/grid-tree-toggle.css +11 -0
  38. package/components/grid.css +11 -0
  39. package/components/horizontal-layout.css +11 -0
  40. package/components/icon.css +11 -0
  41. package/components/input-container.css +11 -0
  42. package/components/integer-field.css +25 -0
  43. package/components/item.css +11 -0
  44. package/components/list-box.css +11 -0
  45. package/components/login-form.css +14 -0
  46. package/components/login.css +15 -0
  47. package/components/map.css +11 -0
  48. package/components/master-detail-layout.css +19 -0
  49. package/components/menu-bar.css +47 -0
  50. package/components/message-input.css +13 -0
  51. package/components/message-list.css +6 -0
  52. package/components/message.css +12 -0
  53. package/components/multi-select-combo-box.css +61 -0
  54. package/components/notification.css +15 -0
  55. package/components/number-field.css +25 -0
  56. package/components/overlay.css +11 -0
  57. package/components/password-field.css +32 -0
  58. package/components/popover.css +14 -0
  59. package/components/progress-bar.css +11 -0
  60. package/components/radio-button.css +14 -0
  61. package/components/radio-group.css +23 -0
  62. package/components/rich-text-editor.css +26 -0
  63. package/components/scroller.css +11 -0
  64. package/components/select.css +48 -0
  65. package/components/side-nav-item.css +14 -0
  66. package/components/side-nav.css +12 -0
  67. package/components/split-layout.css +11 -0
  68. package/components/tab.css +11 -0
  69. package/components/tabs.css +12 -0
  70. package/components/tabsheet.css +19 -0
  71. package/components/text-area.css +25 -0
  72. package/components/text-field.css +23 -0
  73. package/components/time-picker.css +43 -0
  74. package/components/tooltip.css +14 -0
  75. package/components/upload.css +28 -0
  76. package/components/vertical-layout.css +11 -0
  77. package/components.css +71 -0
  78. package/font-icons.js +28 -26
  79. package/global.css +8 -0
  80. package/lumo.css +8 -0
  81. package/mixins/input-field-shared.js +1 -2
  82. package/mixins/menu-overlay.js +0 -2
  83. package/mixins/required-field.js +0 -1
  84. package/package.json +16 -12
  85. package/props.css +12 -0
  86. package/src/components/accordion-heading.css +42 -0
  87. package/src/components/accordion-panel.css +38 -0
  88. package/src/components/app-layout.css +193 -0
  89. package/src/components/avatar-group-menu-item.css +22 -0
  90. package/src/components/avatar-group-overlay.css +11 -0
  91. package/src/components/avatar-group.css +67 -0
  92. package/src/components/avatar.css +86 -0
  93. package/src/components/button.css +334 -0
  94. package/src/components/card.css +38 -0
  95. package/src/components/chart.css +85 -0
  96. package/src/components/checkbox-group.css +18 -0
  97. package/src/components/checkbox.css +341 -0
  98. package/src/components/combo-box-item.css +18 -0
  99. package/src/components/combo-box-overlay.css +15 -0
  100. package/src/components/combo-box.css +14 -0
  101. package/src/components/confirm-dialog-overlay.css +59 -0
  102. package/src/components/context-menu-item.css +39 -0
  103. package/src/components/context-menu-list-box.css +40 -0
  104. package/src/components/context-menu-overlay.css +41 -0
  105. package/src/components/crud-dialog-overlay.css +57 -0
  106. package/src/components/crud-edit.css +30 -0
  107. package/src/components/crud.css +157 -0
  108. package/src/components/custom-field.css +102 -0
  109. package/src/components/dashboard-layout.css +94 -0
  110. package/src/components/dashboard-section.css +113 -0
  111. package/src/components/dashboard-widget.css +224 -0
  112. package/src/components/dashboard.css +23 -0
  113. package/src/components/date-picker-month-calendar.css +192 -0
  114. package/src/components/date-picker-overlay-content.css +161 -0
  115. package/src/components/date-picker-overlay.css +60 -0
  116. package/src/components/date-picker-year.css +35 -0
  117. package/src/components/date-picker.css +41 -0
  118. package/src/components/date-time-picker.css +36 -0
  119. package/src/components/details-summary.css +131 -0
  120. package/src/components/details.css +37 -0
  121. package/src/components/dialog-overlay.css +163 -0
  122. package/src/components/drawer-toggle.css +51 -0
  123. package/src/components/email-field.css +26 -0
  124. package/src/components/field-outline.css +51 -0
  125. package/src/components/form-item.css +36 -0
  126. package/src/components/form-layout.css +12 -0
  127. package/src/components/grid-filter.css +16 -0
  128. package/src/components/grid-pro-edit-select.css +19 -0
  129. package/src/components/grid-pro.css +84 -0
  130. package/src/components/grid-sorter.css +70 -0
  131. package/src/components/grid-tree-toggle.css +104 -0
  132. package/src/components/grid.css +755 -0
  133. package/src/components/horizontal-layout.css +34 -0
  134. package/src/components/icon.css +11 -0
  135. package/src/components/input-container.css +228 -0
  136. package/src/components/item.css +94 -0
  137. package/src/components/list-box.css +31 -0
  138. package/src/components/login-form-wrapper.css +113 -0
  139. package/src/components/login-overlay-wrapper.css +189 -0
  140. package/src/components/map.css +182 -0
  141. package/src/components/menu-bar-button.css +128 -0
  142. package/src/components/menu-bar-item.css +23 -0
  143. package/src/components/menu-bar-overlay.css +10 -0
  144. package/src/components/menu-bar.css +31 -0
  145. package/src/components/message-input.css +30 -0
  146. package/src/components/message.css +82 -0
  147. package/src/components/multi-select-combo-box-chip.css +113 -0
  148. package/src/components/multi-select-combo-box-container.css +20 -0
  149. package/src/components/multi-select-combo-box-item.css +13 -0
  150. package/src/components/multi-select-combo-box-overlay.css +18 -0
  151. package/src/components/multi-select-combo-box.css +102 -0
  152. package/src/components/notification-card.css +228 -0
  153. package/src/components/notification-container.css +60 -0
  154. package/src/components/number-field.css +53 -0
  155. package/src/components/password-field-button.css +19 -0
  156. package/src/components/password-field.css +24 -0
  157. package/src/components/popover-overlay.css +156 -0
  158. package/src/components/progress-bar.css +295 -0
  159. package/src/components/radio-button.css +156 -0
  160. package/src/components/radio-group.css +18 -0
  161. package/src/components/rich-text-editor-popup-overlay.css +27 -0
  162. package/src/components/rich-text-editor.css +485 -0
  163. package/src/components/scroller.css +40 -0
  164. package/src/components/select-overlay.css +54 -0
  165. package/src/components/select-value-button.css +57 -0
  166. package/src/components/select.css +60 -0
  167. package/src/components/side-nav-item.css +170 -0
  168. package/src/components/side-nav.css +102 -0
  169. package/src/components/split-layout.css +131 -0
  170. package/src/components/tab.css +246 -0
  171. package/src/components/tabs.css +285 -0
  172. package/src/components/tabsheet.css +59 -0
  173. package/src/components/text-area.css +116 -0
  174. package/src/components/time-picker-overlay.css +15 -0
  175. package/src/components/time-picker.css +36 -0
  176. package/src/components/tooltip-overlay.css +50 -0
  177. package/src/components/upload-file-list.css +24 -0
  178. package/src/components/upload-file.css +133 -0
  179. package/src/components/upload-icon.css +20 -0
  180. package/src/components/upload.css +56 -0
  181. package/src/components/user-tag.css +48 -0
  182. package/src/components/user-tags-overlay.css +64 -0
  183. package/src/components/vertical-layout.css +34 -0
  184. package/src/global/badge.css +167 -0
  185. package/src/global/color-scheme.css +99 -0
  186. package/src/global/typography.css +113 -0
  187. package/src/mixins/checkable-field.css +67 -0
  188. package/src/mixins/combo-box-loader.css +14 -0
  189. package/src/mixins/combo-box-overlay.css +30 -0
  190. package/src/mixins/dashboard-item.css +252 -0
  191. package/src/mixins/field-base.css +187 -0
  192. package/src/mixins/field-button.css +46 -0
  193. package/src/mixins/field-error-message.css +36 -0
  194. package/src/mixins/field-helper.css +62 -0
  195. package/src/mixins/field-label.css +62 -0
  196. package/src/mixins/field-required.css +26 -0
  197. package/src/mixins/grid-pro-editor.css +35 -0
  198. package/src/mixins/group-field.css +58 -0
  199. package/src/mixins/loader.css +48 -0
  200. package/src/mixins/menu-overlay-core.css +36 -0
  201. package/src/mixins/menu-overlay-ext.css +63 -0
  202. package/src/mixins/overlay.css +121 -0
  203. package/src/mixins/resizable-overlay.css +100 -0
  204. package/src/props/color.css +98 -0
  205. package/src/props/icons.css +61 -0
  206. package/src/props/reset.css +11 -0
  207. package/src/props/sizing.css +19 -0
  208. package/src/props/spacing.css +27 -0
  209. package/src/props/style.css +21 -0
  210. package/src/props/typography.css +24 -0
  211. package/src/utilities/accessibility.css +17 -0
  212. package/src/utilities/background.css +189 -0
  213. package/src/utilities/border.css +173 -0
  214. package/src/utilities/filter.css +37 -0
  215. package/src/utilities/flexbox-grid.css +781 -0
  216. package/src/utilities/layout.css +629 -0
  217. package/src/utilities/shadows.css +29 -0
  218. package/src/utilities/sizing.css +142 -0
  219. package/src/utilities/spacing.css +682 -0
  220. package/src/utilities/transition.css +46 -0
  221. package/src/utilities/typography.css +424 -0
  222. package/style.d.ts +0 -2
  223. package/style.js +1 -89
  224. package/utilities/transition.js +3 -2
  225. package/utility.css +17 -0
  226. package/vaadin-iconset.js +2 -0
@@ -0,0 +1,755 @@
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
+ @media lumo_components_grid {
7
+ @keyframes vaadin-grid-appear {
8
+ to {
9
+ opacity: 1;
10
+ }
11
+ }
12
+
13
+ :host {
14
+ display: flex;
15
+ flex-direction: column;
16
+ animation: 1ms vaadin-grid-appear;
17
+ height: 400px;
18
+ min-height: var(--_grid-min-height, 0);
19
+ flex: 1 1 auto;
20
+ align-self: stretch;
21
+ position: relative;
22
+ font-family: var(--lumo-font-family);
23
+ font-size: var(--lumo-font-size-m);
24
+ line-height: var(--lumo-line-height-s);
25
+ color: var(--lumo-body-text-color);
26
+ background-color: var(--lumo-base-color);
27
+ box-sizing: border-box;
28
+ -webkit-text-size-adjust: 100%;
29
+ -webkit-tap-highlight-color: transparent;
30
+ -webkit-font-smoothing: antialiased;
31
+ -moz-osx-font-smoothing: grayscale;
32
+ --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));
33
+ --_focus-ring-width: var(--vaadin-focus-ring-width, 2px);
34
+ /* For internal use only */
35
+ --_lumo-grid-border-color: var(--lumo-contrast-20pct);
36
+ --_lumo-grid-secondary-border-color: var(--lumo-contrast-10pct);
37
+ --_lumo-grid-border-width: 1px;
38
+ --_lumo-grid-selected-row-color: var(--lumo-primary-color-10pct);
39
+ }
40
+
41
+ :host([hidden]) {
42
+ display: none !important;
43
+ }
44
+
45
+ :host([disabled]) {
46
+ pointer-events: none;
47
+ opacity: 0.7;
48
+ }
49
+
50
+ #scroller {
51
+ display: flex;
52
+ flex-direction: column;
53
+ min-height: 100%;
54
+ transform: translateY(0);
55
+ width: auto;
56
+ height: auto;
57
+ position: absolute;
58
+ inset: 0;
59
+ }
60
+
61
+ :host([all-rows-visible]) {
62
+ height: auto;
63
+ align-self: flex-start;
64
+ min-height: auto;
65
+ flex-grow: 0;
66
+ width: 100%;
67
+ }
68
+
69
+ :host([all-rows-visible]) #scroller {
70
+ width: 100%;
71
+ height: 100%;
72
+ position: relative;
73
+ }
74
+
75
+ :host([all-rows-visible]) #items {
76
+ min-height: 1px;
77
+ }
78
+
79
+ #table {
80
+ display: flex;
81
+ flex-direction: column;
82
+ width: 100%;
83
+ height: 100%;
84
+ overflow: auto;
85
+ position: relative;
86
+ outline: none;
87
+ /* Workaround for a Desktop Safari bug: new stacking context here prevents the scrollbar from getting hidden */
88
+ z-index: 0;
89
+ }
90
+
91
+ #header,
92
+ #footer {
93
+ display: block;
94
+ position: sticky;
95
+ left: 0;
96
+ overflow: visible;
97
+ width: 100%;
98
+ z-index: 1;
99
+ }
100
+
101
+ #header {
102
+ top: 0;
103
+ }
104
+
105
+ th {
106
+ text-align: inherit;
107
+ }
108
+
109
+ /* Safari doesn't work with "inherit" */
110
+ [safari] th {
111
+ text-align: initial;
112
+ }
113
+
114
+ #footer {
115
+ bottom: 0;
116
+ }
117
+
118
+ #items {
119
+ flex-grow: 1;
120
+ flex-shrink: 0;
121
+ display: block;
122
+ position: sticky;
123
+ width: 100%;
124
+ left: 0;
125
+ overflow: visible;
126
+ }
127
+
128
+ [part~='row'] {
129
+ display: flex;
130
+ width: 100%;
131
+ box-sizing: border-box;
132
+ margin: 0;
133
+ position: relative;
134
+ }
135
+
136
+ [part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
137
+ visibility: hidden;
138
+ }
139
+
140
+ [column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
141
+ transform: translateX(var(--_grid-lazy-columns-start));
142
+ }
143
+
144
+ #items [part~='row'] {
145
+ position: absolute;
146
+ }
147
+
148
+ #items [part~='row']:empty {
149
+ height: 100%;
150
+ }
151
+
152
+ [part~='cell']:not([part~='details-cell']) {
153
+ flex-shrink: 0;
154
+ flex-grow: 1;
155
+ box-sizing: border-box;
156
+ display: flex;
157
+ width: 100%;
158
+ position: relative;
159
+ align-items: center;
160
+ padding: 0;
161
+ white-space: nowrap;
162
+ }
163
+
164
+ [part~='cell'] {
165
+ outline: none;
166
+ min-height: var(--lumo-size-m);
167
+ background-color: var(--vaadin-grid-cell-background, var(--lumo-base-color));
168
+ cursor: default;
169
+ --_cell-padding: var(--vaadin-grid-cell-padding, var(--_cell-default-padding));
170
+ --_cell-default-padding: var(--lumo-space-xs) var(--lumo-space-m);
171
+ }
172
+
173
+ [part~='cell'] > [tabindex] {
174
+ display: flex;
175
+ align-items: inherit;
176
+ outline: none;
177
+ position: absolute;
178
+ inset: 0;
179
+ }
180
+
181
+ /* Switch the focusButtonMode wrapping element to "position: static" temporarily
182
+ when measuring real width of the cells in the auto-width columns. */
183
+ [measuring-auto-width] [part~='cell'] > [tabindex] {
184
+ position: static;
185
+ }
186
+
187
+ [part~='details-cell'] {
188
+ position: absolute;
189
+ bottom: 0;
190
+ width: 100%;
191
+ box-sizing: border-box;
192
+ padding: 0;
193
+ }
194
+
195
+ [part~='cell'] ::slotted(vaadin-grid-cell-content) {
196
+ display: block;
197
+ width: 100%;
198
+ box-sizing: border-box;
199
+ overflow: hidden;
200
+ text-overflow: ellipsis;
201
+ cursor: inherit;
202
+ padding: var(--_cell-padding);
203
+ }
204
+
205
+ [hidden] {
206
+ display: none !important;
207
+ }
208
+
209
+ [frozen],
210
+ [frozen-to-end] {
211
+ z-index: 2;
212
+ will-change: transform;
213
+ }
214
+
215
+ [no-scrollbars][safari] #table,
216
+ [no-scrollbars][firefox] #table {
217
+ overflow: hidden;
218
+ }
219
+
220
+ /* Empty state */
221
+
222
+ #scroller:not([empty-state]) #emptystatebody,
223
+ #scroller[empty-state] #items {
224
+ display: none;
225
+ }
226
+
227
+ #emptystatebody {
228
+ display: flex;
229
+ position: sticky;
230
+ inset: 0;
231
+ flex: 1;
232
+ overflow: hidden;
233
+ }
234
+
235
+ #emptystaterow {
236
+ display: flex;
237
+ flex: 1;
238
+ }
239
+
240
+ #emptystatecell {
241
+ display: block;
242
+ flex: 1;
243
+ overflow: auto;
244
+ }
245
+
246
+ /* Reordering styles */
247
+ :host([reordering]) [part~='cell'] ::slotted(vaadin-grid-cell-content),
248
+ :host([reordering]) [part~='resize-handle'],
249
+ #scroller[no-content-pointer-events] [part~='cell'] ::slotted(vaadin-grid-cell-content) {
250
+ pointer-events: none;
251
+ }
252
+
253
+ [part~='reorder-ghost'] {
254
+ visibility: hidden;
255
+ position: fixed;
256
+ pointer-events: none;
257
+
258
+ /* Prevent overflowing the grid in Firefox */
259
+ top: 0;
260
+ left: 0;
261
+ opacity: 0.85;
262
+ box-shadow: var(--lumo-box-shadow-s);
263
+ /* TODO Use the same styles as for the cell element (reorder-ghost copies styles from the cell element) */
264
+ padding: var(--lumo-space-s) var(--lumo-space-m) !important;
265
+ }
266
+
267
+ :host([reordering]) {
268
+ -webkit-user-select: none;
269
+ user-select: none;
270
+ }
271
+
272
+ /* Resizing styles */
273
+ [part~='resize-handle'] {
274
+ position: absolute;
275
+ top: 0;
276
+ right: 0;
277
+ height: 100%;
278
+ cursor: col-resize;
279
+ z-index: 1;
280
+ }
281
+
282
+ [part~='resize-handle']::before {
283
+ position: absolute;
284
+ content: '';
285
+ height: 100%;
286
+ width: 35px;
287
+ transform: translateX(-50%);
288
+ }
289
+
290
+ [last-column] [part~='resize-handle']::before,
291
+ [last-frozen] [part~='resize-handle']::before {
292
+ width: 18px;
293
+ transform: none;
294
+ right: 0;
295
+ }
296
+
297
+ [frozen-to-end] [part~='resize-handle'] {
298
+ left: 0;
299
+ right: auto;
300
+ }
301
+
302
+ [frozen-to-end] [part~='resize-handle']::before {
303
+ left: 0;
304
+ right: auto;
305
+ }
306
+
307
+ [first-frozen-to-end] [part~='resize-handle']::before {
308
+ width: 18px;
309
+ transform: none;
310
+ }
311
+
312
+ [first-frozen-to-end] {
313
+ margin-inline-start: auto;
314
+ border-left: var(--_lumo-grid-border-width) solid transparent;
315
+ }
316
+
317
+ /* Hide resize handle if scrolled to end */
318
+ :host(:not([overflow~='end'])) [first-frozen-to-end] [part~='resize-handle'] {
319
+ display: none;
320
+ }
321
+
322
+ #scroller[column-resizing],
323
+ #scroller[range-selecting] {
324
+ -webkit-user-select: none;
325
+ user-select: none;
326
+ }
327
+
328
+ /* Sizer styles */
329
+ #sizer {
330
+ display: flex;
331
+ position: absolute;
332
+ visibility: hidden;
333
+ }
334
+
335
+ #sizer [part~='details-cell'] {
336
+ display: none !important;
337
+ }
338
+
339
+ #sizer [part~='cell'][hidden] {
340
+ display: none !important;
341
+ }
342
+
343
+ #sizer [part~='cell'] {
344
+ display: block;
345
+ flex-shrink: 0;
346
+ line-height: 0;
347
+ height: 0 !important;
348
+ min-height: 0 !important;
349
+ max-height: 0 !important;
350
+ padding: 0 !important;
351
+ border: none !important;
352
+ }
353
+
354
+ #sizer [part~='cell']::before {
355
+ content: '-';
356
+ }
357
+
358
+ #sizer [part~='cell'] ::slotted(vaadin-grid-cell-content) {
359
+ display: none !important;
360
+ }
361
+
362
+ /* RTL specific styles */
363
+
364
+ :host([dir='rtl']) #items,
365
+ :host([dir='rtl']) #header,
366
+ :host([dir='rtl']) #footer {
367
+ left: auto;
368
+ }
369
+
370
+ :host([dir='rtl']) [part~='reorder-ghost'] {
371
+ left: auto;
372
+ right: 0;
373
+ }
374
+
375
+ :host([dir='rtl']) [part~='resize-handle'] {
376
+ left: 0;
377
+ right: auto;
378
+ }
379
+
380
+ :host([dir='rtl']) [part~='resize-handle']::before {
381
+ transform: translateX(50%);
382
+ }
383
+
384
+ :host([dir='rtl']) [last-column] [part~='resize-handle']::before,
385
+ :host([dir='rtl']) [last-frozen] [part~='resize-handle']::before {
386
+ left: 0;
387
+ right: auto;
388
+ }
389
+
390
+ :host([dir='rtl']) [frozen-to-end] [part~='resize-handle'] {
391
+ right: 0;
392
+ left: auto;
393
+ }
394
+
395
+ :host([dir='rtl']) [frozen-to-end] [part~='resize-handle']::before {
396
+ right: 0;
397
+ left: auto;
398
+ }
399
+
400
+ /* No (outer) border */
401
+
402
+ :host(:not([theme~='no-border'])) {
403
+ border: var(--_lumo-grid-border-width) solid var(--_lumo-grid-border-color);
404
+ }
405
+
406
+ /* Cell styles */
407
+
408
+ /* Apply row borders by default and introduce the "no-row-borders" variant */
409
+ :host(:not([theme~='no-row-borders'])) [part~='cell']:not([part~='details-cell']) {
410
+ border-top: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);
411
+ }
412
+
413
+ /* Hide first body row top border */
414
+ :host(:not([theme~='no-row-borders'])) [part~='first-row'] [part~='cell']:not([part~='details-cell']) {
415
+ border-top: 0;
416
+ min-height: calc(var(--lumo-size-m) - var(--_lumo-grid-border-width));
417
+ }
418
+
419
+ /* Focus-ring */
420
+
421
+ [part~='row']:focus,
422
+ [part~='focused-cell']:focus {
423
+ outline: none;
424
+ }
425
+
426
+ :host([navigating]) [part~='row']:focus::before,
427
+ :host([navigating]) [part~='focused-cell']:focus::before {
428
+ content: '';
429
+ position: absolute;
430
+ inset: 0;
431
+ pointer-events: none;
432
+ box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
433
+ }
434
+
435
+ :host([navigating]) [part~='row']:focus::before {
436
+ transform: translateX(var(--_grid-horizontal-scroll-position));
437
+ z-index: 3;
438
+ }
439
+
440
+ /* Empty state */
441
+ [part~='empty-state'] {
442
+ padding: var(--lumo-space-m);
443
+ color: var(--lumo-secondary-text-color);
444
+ }
445
+
446
+ /* Drag and Drop styles */
447
+ :host([dragover])::after {
448
+ content: '';
449
+ position: absolute;
450
+ z-index: 100;
451
+ inset: 0;
452
+ pointer-events: none;
453
+ box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
454
+ }
455
+
456
+ [part~='row'][dragover] {
457
+ z-index: 100 !important;
458
+ }
459
+
460
+ [part~='row'][dragover] [part~='cell'] {
461
+ overflow: visible;
462
+ }
463
+
464
+ [part~='row'][dragover] [part~='cell']::after {
465
+ content: '';
466
+ position: absolute;
467
+ inset: 0;
468
+ height: calc(var(--_lumo-grid-border-width) + 2px);
469
+ pointer-events: none;
470
+ background: var(--lumo-primary-color-50pct);
471
+ }
472
+
473
+ [part~='row'][dragover] [part~='cell'][last-frozen]::after {
474
+ right: -1px;
475
+ }
476
+
477
+ :host([theme~='no-row-borders']) [dragover] [part~='cell']::after {
478
+ height: 2px;
479
+ }
480
+
481
+ [part~='row'][dragover='below'] [part~='cell']::after {
482
+ top: 100%;
483
+ bottom: auto;
484
+ margin-top: -1px;
485
+ }
486
+
487
+ :host([all-rows-visible]) [part~='last-row'][dragover='below'] [part~='cell']::after {
488
+ height: 1px;
489
+ }
490
+
491
+ [part~='row'][dragover='above'] [part~='cell']::after {
492
+ top: auto;
493
+ bottom: 100%;
494
+ margin-bottom: -1px;
495
+ }
496
+
497
+ [part~='row'][details-opened][dragover='below'] [part~='cell']:not([part~='details-cell'])::after,
498
+ [part~='row'][details-opened][dragover='above'] [part~='details-cell']::after {
499
+ display: none;
500
+ }
501
+
502
+ [part~='row'][dragover][dragover='on-top'] [part~='cell']::after {
503
+ height: 100%;
504
+ opacity: 0.5;
505
+ }
506
+
507
+ [part~='row'][dragstart] [part~='cell'] {
508
+ border: none !important;
509
+ box-shadow: none !important;
510
+ }
511
+
512
+ [part~='row'][dragstart] [part~='cell'][last-column] {
513
+ border-radius: 0 var(--lumo-border-radius-s) var(--lumo-border-radius-s) 0;
514
+ }
515
+
516
+ [part~='row'][dragstart] [part~='cell'][first-column] {
517
+ border-radius: var(--lumo-border-radius-s) 0 0 var(--lumo-border-radius-s);
518
+ }
519
+
520
+ #scroller [part~='row'][dragstart]:not([dragstart=''])::after {
521
+ display: block;
522
+ position: absolute;
523
+ left: var(--_grid-drag-start-x);
524
+ top: var(--_grid-drag-start-y);
525
+ z-index: 100;
526
+ content: attr(dragstart);
527
+ align-items: center;
528
+ justify-content: center;
529
+ box-sizing: border-box;
530
+ padding: calc(var(--lumo-space-xs) * 0.8);
531
+ color: var(--lumo-error-contrast-color);
532
+ background-color: var(--lumo-error-color);
533
+ border-radius: var(--lumo-border-radius-m);
534
+ font-family: var(--lumo-font-family);
535
+ font-size: var(--lumo-font-size-xxs);
536
+ line-height: 1;
537
+ font-weight: 500;
538
+ text-transform: initial;
539
+ letter-spacing: initial;
540
+ min-width: calc(var(--lumo-size-s) * 0.7);
541
+ text-align: center;
542
+ }
543
+
544
+ /* Headers and footers */
545
+
546
+ [part~='header-cell'],
547
+ [part~='footer-cell'],
548
+ [part~='reorder-ghost'] {
549
+ font-size: var(--lumo-font-size-s);
550
+ font-weight: 500;
551
+ }
552
+
553
+ [part~='footer-cell'] {
554
+ font-weight: 400;
555
+ }
556
+
557
+ [part~='row']:only-child [part~='header-cell'] {
558
+ min-height: var(--lumo-size-xl);
559
+ }
560
+
561
+ /* Header borders */
562
+
563
+ /* Hide first header row top border */
564
+ :host(:not([theme~='no-row-borders'])) [part~='row']:first-child [part~='header-cell'] {
565
+ border-top: 0;
566
+ }
567
+
568
+ /* Hide header row top border if previous row is hidden */
569
+ [part~='row'][hidden] + [part~='row'] [part~='header-cell'] {
570
+ border-top: 0;
571
+ }
572
+
573
+ [part~='row']:last-child [part~='header-cell'] {
574
+ border-bottom: var(--_lumo-grid-border-width) solid transparent;
575
+ }
576
+
577
+ :host(:not([theme~='no-row-borders'])) [part~='row']:last-child [part~='header-cell'] {
578
+ border-bottom-color: var(--_lumo-grid-secondary-border-color);
579
+ }
580
+
581
+ /* Overflow uses a stronger border color */
582
+ :host([overflow~='top']) [part~='row']:last-child [part~='header-cell'] {
583
+ border-bottom-color: var(--_lumo-grid-border-color);
584
+ }
585
+
586
+ /* Footer borders */
587
+
588
+ [part~='row']:first-child [part~='footer-cell'] {
589
+ border-top: var(--_lumo-grid-border-width) solid transparent;
590
+ }
591
+
592
+ :host(:not([theme~='no-row-borders'])) [part~='row']:first-child [part~='footer-cell'] {
593
+ border-top-color: var(--_lumo-grid-secondary-border-color);
594
+ }
595
+
596
+ /* Overflow uses a stronger border color */
597
+ :host([overflow~='bottom']) [part~='row']:first-child [part~='footer-cell'] {
598
+ border-top-color: var(--_lumo-grid-border-color);
599
+ }
600
+
601
+ /* Column reordering */
602
+
603
+ :host([reordering]) [part~='cell'] {
604
+ background: linear-gradient(var(--lumo-shade-20pct), var(--lumo-shade-20pct)) var(--lumo-base-color);
605
+ }
606
+
607
+ :host([reordering]) [part~='cell'][reorder-status='allowed'] {
608
+ background: var(--lumo-base-color);
609
+ }
610
+
611
+ :host([reordering]) [part~='cell'][reorder-status='dragging'] {
612
+ background: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct)) var(--lumo-base-color);
613
+ }
614
+
615
+ /* Column resizing */
616
+
617
+ [part='resize-handle'] {
618
+ --_resize-handle-width: 3px;
619
+ width: var(--_resize-handle-width);
620
+ background-color: var(--lumo-primary-color-50pct);
621
+ opacity: 0;
622
+ transition: opacity 0.2s;
623
+ }
624
+
625
+ [part='resize-handle']::before {
626
+ transform: translateX(calc(-50% + var(--_resize-handle-width) / 2));
627
+ width: var(--lumo-size-s);
628
+ }
629
+
630
+ :host(:not([reordering])) *:not([column-resizing]) [part~='cell']:hover [part='resize-handle'],
631
+ [part='resize-handle']:active {
632
+ opacity: 1;
633
+ transition-delay: 0.15s;
634
+ }
635
+
636
+ /* Column borders */
637
+
638
+ :host([theme~='column-borders']) [part~='cell']:not([last-column]):not([part~='details-cell']) {
639
+ border-right: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);
640
+ }
641
+
642
+ /* Frozen columns */
643
+
644
+ [last-frozen] {
645
+ border-right: var(--_lumo-grid-border-width) solid transparent;
646
+ overflow: hidden;
647
+ }
648
+
649
+ :host([overflow~='start']) [part~='cell'][last-frozen]:not([part~='details-cell']) {
650
+ border-right-color: var(--_lumo-grid-border-color);
651
+ }
652
+
653
+ :host([overflow~='end']) [part~='cell'][first-frozen-to-end]:not([part~='details-cell']) {
654
+ border-left-color: var(--_lumo-grid-border-color);
655
+ }
656
+
657
+ /* Row stripes */
658
+
659
+ :host([theme~='row-stripes']) [part~='even-row'] [part~='body-cell'],
660
+ :host([theme~='row-stripes']) [part~='even-row'] [part~='details-cell'] {
661
+ background-image: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct));
662
+ background-repeat: repeat-x;
663
+ }
664
+
665
+ /* Selected row */
666
+
667
+ /* Raise the selected rows above unselected rows (so that box-shadow can cover unselected rows) */
668
+ :host(:not([reordering])) [part~='row'][selected] {
669
+ z-index: 1;
670
+ }
671
+
672
+ :host(:not([reordering])) [part~='row'][selected] [part~='body-cell']:not([part~='details-cell']) {
673
+ background-image: linear-gradient(var(--_lumo-grid-selected-row-color), var(--_lumo-grid-selected-row-color));
674
+ background-repeat: repeat;
675
+ }
676
+
677
+ /* Cover the border of an unselected row */
678
+ :host(:not([theme~='no-row-borders'])) [part~='row'][selected] [part~='cell']:not([part~='details-cell']) {
679
+ box-shadow: 0 var(--_lumo-grid-border-width) 0 0 var(--_lumo-grid-selected-row-color);
680
+ }
681
+
682
+ /* Compact */
683
+
684
+ :host([theme~='compact']) [part~='row']:only-child [part~='header-cell'] {
685
+ min-height: var(--lumo-size-m);
686
+ }
687
+
688
+ :host([theme~='compact']) [part~='cell'] {
689
+ min-height: var(--lumo-size-s);
690
+ --_cell-default-padding: var(--lumo-space-xs) var(--lumo-space-s);
691
+ }
692
+
693
+ :host([theme~='compact']) [part~='first-row'] [part~='cell']:not([part~='details-cell']) {
694
+ min-height: calc(var(--lumo-size-s) - var(--_lumo-grid-border-width));
695
+ }
696
+
697
+ :host([theme~='compact']) [part~='empty-state'] {
698
+ padding: var(--lumo-space-s);
699
+ }
700
+
701
+ /* Wrap cell contents */
702
+
703
+ :host([theme~='wrap-cell-content']) [part~='cell'] ::slotted(vaadin-grid-cell-content) {
704
+ white-space: normal;
705
+ }
706
+
707
+ /* RTL specific styles */
708
+
709
+ :host([dir='rtl']) [part~='row'][dragstart] [part~='cell'][last-column] {
710
+ border-radius: var(--lumo-border-radius-s) 0 0 var(--lumo-border-radius-s);
711
+ }
712
+
713
+ :host([dir='rtl']) [part~='row'][dragstart] [part~='cell'][first-column] {
714
+ border-radius: 0 var(--lumo-border-radius-s) var(--lumo-border-radius-s) 0;
715
+ }
716
+
717
+ :host([dir='rtl'][theme~='column-borders']) [part~='cell']:not([last-column]):not([part~='details-cell']) {
718
+ border-right: none;
719
+ border-left: var(--_lumo-grid-border-width) solid var(--_lumo-grid-secondary-border-color);
720
+ }
721
+
722
+ :host([dir='rtl']) [last-frozen] {
723
+ border-right: none;
724
+ border-left: var(--_lumo-grid-border-width) solid transparent;
725
+ }
726
+
727
+ :host([dir='rtl']) [first-frozen-to-end] {
728
+ border-left: none;
729
+ border-right: var(--_lumo-grid-border-width) solid transparent;
730
+ }
731
+
732
+ :host([dir='rtl'][overflow~='start']) [part~='cell'][last-frozen]:not([part~='details-cell']) {
733
+ border-left-color: var(--_lumo-grid-border-color);
734
+ }
735
+
736
+ :host([dir='rtl'][overflow~='end']) [part~='cell'][first-frozen-to-end]:not([part~='details-cell']) {
737
+ border-right-color: var(--_lumo-grid-border-color);
738
+ }
739
+
740
+ @media (forced-colors: active) {
741
+ [part~='selected-row'] [part~='first-column-cell']::after {
742
+ content: '';
743
+ position: absolute;
744
+ top: 0;
745
+ left: 0;
746
+ bottom: 0;
747
+ border: 2px solid;
748
+ }
749
+
750
+ [part~='focused-cell']::before {
751
+ outline: 2px solid !important;
752
+ outline-offset: -1px;
753
+ }
754
+ }
755
+ }