Skip to content

Commit 04ae7af

Browse files
committed
wip
1 parent f01cbeb commit 04ae7af

File tree

2 files changed

+79
-88
lines changed

2 files changed

+79
-88
lines changed

packages/grid/src/styles/vaadin-grid-base-styles.js

Lines changed: 71 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -124,67 +124,105 @@ export const gridStyles = css`
124124
color: var(--vaadin-grid-header-text-color, var(--vaadin-text-color));
125125
}
126126
127+
/* Rows */
128+
127129
[part~='row'] {
128130
--_row-background-color: var(--vaadin-grid-row-background-color, var(--vaadin-background-color));
131+
--_row-background-image: linear-gradient(var(--_row-background-color), var(--_row-background-color));
132+
129133
display: grid;
130134
grid-template-columns: var(--_template-columns);
131-
grid-template-rows: min-content 4px;
132135
width: 100%;
133136
box-sizing: border-box;
134137
margin: 0;
135138
position: relative;
139+
}
140+
141+
[part~='row']:not(:focus-within) {
142+
--_non-focused-row-none: none;
143+
}
144+
145+
[part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
146+
visibility: hidden;
147+
}
136148
149+
[part~='row']:where(:not(#sizer)) {
137150
&::before {
138151
content: '';
139-
display: none;
152+
inset: 0;
140153
position: absolute;
141-
box-sizing: border-box;
142-
grid-row: 1 / -1;
143154
grid-column: 1 / -1;
144-
inset: calc(var(--_row-border-width) * -1) 0 0 0;
145-
background-image: var(--_selected-background-image);
146155
background-color: var(--_row-background-color);
156+
background-image: var(--_selected-background-image, none);
147157
border-block: var(--_row-border-width) solid var(--_border-color);
148158
}
149-
150-
&:empty {
151-
height: 100%;
152-
}
153159
}
154160
155-
[part~='row']:not(:focus-within) {
156-
--_non-focused-row-none: none;
161+
[column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
162+
transform: translateX(var(--_grid-lazy-columns-start));
157163
}
158164
159-
[part~='row'][loading] [part~='body-cell'] ::slotted(vaadin-grid-cell-content) {
160-
visibility: hidden;
165+
#items [part~='row']:empty {
166+
height: 100%;
161167
}
162168
163169
[part~='body-row'] {
164-
&::before {
165-
display: block;
166-
}
167-
168170
&:focus,
169171
&:focus-within {
170172
z-index: 4;
171173
172-
&:not([part~='selected-row'])::before {
173-
border-color: transparent;
174-
background-clip: padding-box;
174+
&:not([part~='selected-row']):not([part~='first-row'])::before {
175+
inset-block-start: var(--_row-border-width);
175176
}
177+
178+
&:not([part~='selected-row']):not([part~='last-row'])::before {
179+
inset-block-end: var(--_row-border-width);
180+
}
181+
}
182+
183+
&:not([part~='first-row'])::before {
184+
inset-block-start: calc(var(--_row-border-width) * -1);
176185
}
177186
178-
&[selected] {
179-
z-index: 3;
187+
&:not([part~='last-row']) {
188+
padding-bottom: var(--_row-border-width);
180189
}
181190
}
182191
192+
#table[has-header] [part~='first-row'] {
193+
padding-top: var(--_row-border-width);
194+
}
195+
196+
#table[has-footer] [part~='last-row'] {
197+
padding-bottom: var(--_row-border-width);
198+
}
199+
200+
#header [part~='row']:not(:last-child),
201+
#footer [part~='row']:not(:last-child) {
202+
padding-bottom: var(--_row-border-width);
203+
}
204+
205+
/* Selected row */
206+
207+
[part~='selected-row'] {
208+
--_selected-background-color: var(
209+
--vaadin-grid-row-selected-background-color,
210+
color-mix(in srgb, currentColor 8%, transparent)
211+
);
212+
--_selected-background-image: linear-gradient(var(--_selected-background-color), var(--_selected-background-color));
213+
z-index: 3;
214+
215+
&::before {
216+
/* inset-block-start: calc(var(--_row-border-width) * -1); */
217+
}
218+
}
219+
220+
/* Cells */
221+
183222
[part~='cell'] {
184-
grid-row-start: 1;
185-
grid-column-end: span var(--_colspan, 1);
186223
padding: 0;
187224
box-sizing: border-box;
225+
grid-column-end: span var(--_colspan, 1);
188226
background: var(--vaadin-grid-cell-background, var(--vaadin-background-color));
189227
}
190228
@@ -198,8 +236,8 @@ export const gridStyles = css`
198236
position: relative;
199237
align-items: center;
200238
white-space: nowrap;
201-
z-index: 1;
202239
border-inline: var(--_column-border-width) var(--_border-color);
240+
z-index: 1;
203241
204242
&:focus {
205243
z-index: 4;
@@ -219,48 +257,22 @@ export const gridStyles = css`
219257
border-left-style: none;
220258
}
221259
222-
/* Row borders */
223-
#header {
224-
/* padding-bottom: var(--_row-border-width);
225-
margin-bottom: calc(var(--_row-border-width) * -1); */
226-
}
227-
228-
#header [part~='row'],
229-
#footer [part~='row'] {
230-
&::before {
231-
display: block;
232-
}
233-
}
234-
235-
[part~='first-row-cell'] {
236-
margin-top: 0;
237-
}
238-
[part~='last-header-row-cell'] {
239-
border-bottom: 0;
240-
}
241-
242-
[part~='body-cell']:not([part~='last-row-cell']),
243-
[part~='body-cell']:not([part~='last-row-cell']) + [part~='details-cell'] {
244-
/* padding-bottom: var(--_row-border-width); */
245-
}
246-
247-
[part~='body-cell'] {
260+
[part~='body-row'] {
248261
--_highlight-background-color: var(--vaadin-grid-row-highlight-background-color, transparent);
249262
--_highlight-background-image: linear-gradient(
250263
var(--_highlight-background-color),
251264
var(--_highlight-background-color)
252265
);
266+
}
267+
268+
[part~='body-cell'] {
253269
background:
254-
var(--_hover-background-image, none) padding-box,
270+
var(--_hover-background-image, none) border-box,
255271
var(--_selected-background-image, none) border-box,
256-
var(--_highlight-background-image) padding-box,
272+
var(--_highlight-background-image) border-box,
257273
var(--vaadin-grid-cell-background-color, var(--_row-background-color)) border-box;
258274
}
259275
260-
[column-rendering='lazy'] [part~='body-cell']:not([frozen]):not([frozen-to-end]) {
261-
transform: translateX(var(--_grid-lazy-columns-start));
262-
}
263-
264276
/* Variant: wrap cell contents */
265277
266278
:host([theme~='wrap-cell-content']) [part~='cell']:not([part~='details-cell']) {
@@ -281,21 +293,9 @@ export const gridStyles = css`
281293
282294
/* Raise highlighted rows above others */
283295
284-
/* @container style(--vaadin-grid-row-odd-background-color) {
285-
[part~='odd-row'] {
286-
z-index: 1;
287-
}
288-
} */
289-
290296
/* Row hover */
291297
@media (any-hover: hover) {
292-
/* @container style(--vaadin-grid-row-hover-background-color) {
293-
[part~='body-row']:hover {
294-
z-index: 2;
295-
}
296-
} */
297-
298-
[part~='body-row']:hover [part~='body-cell'] {
298+
[part~='body-row']:hover {
299299
--_hover-background-color: var(--vaadin-grid-row-hover-background-color, transparent);
300300
--_hover-background-image: linear-gradient(var(--_hover-background-color), var(--_hover-background-color));
301301
}
@@ -323,23 +323,6 @@ export const gridStyles = css`
323323
will-change: transform;
324324
}
325325
326-
/* Selected row */
327-
[part~='selected-row'] {
328-
--_selected-background-color: var(
329-
--vaadin-grid-row-selected-background-color,
330-
color-mix(in srgb, currentColor 8%, transparent)
331-
);
332-
--_selected-background-image: linear-gradient(var(--_selected-background-color), var(--_selected-background-color));
333-
}
334-
335-
[part~='selected-row-cell'] {
336-
/* border-top-style: solid; */
337-
}
338-
339-
[part~='selected-row-cell']:not([part~='first-row-cell']) {
340-
/* margin-top: calc(var(--_row-border-width) * -1); */
341-
}
342-
343326
/* Empty state */
344327
#scroller:not([empty-state]) #emptystatebody,
345328
#scroller[empty-state] #items {

packages/grid/src/vaadin-grid-mixin.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,14 @@ export const GridMixin = (superClass) =>
657657
row.hidden = !visibleRowCells.length;
658658
}
659659

660+
if (row.parentElement === this.$.header) {
661+
this.$.table.toggleAttribute('has-header', this.$.header.querySelector('tr:not([hidden])'));
662+
}
663+
664+
if (row.parentElement === this.$.footer) {
665+
this.$.table.toggleAttribute('has-footer', this.$.footer.querySelector('tr:not([hidden])'));
666+
}
667+
660668
// Make sure the section has a tabbable element
661669
this._resetKeyboardNavigation();
662670
this._a11yUpdateGridSize(this.size, this._columnTree, this.__emptyState);

0 commit comments

Comments
 (0)