Skip to content

Commit bf9d04a

Browse files
committed
wip
1 parent f01cbeb commit bf9d04a

File tree

2 files changed

+77
-86
lines changed

2 files changed

+77
-86
lines changed

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

Lines changed: 69 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -124,32 +124,18 @@ 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;
136-
137-
&::before {
138-
content: '';
139-
display: none;
140-
position: absolute;
141-
box-sizing: border-box;
142-
grid-row: 1 / -1;
143-
grid-column: 1 / -1;
144-
inset: calc(var(--_row-border-width) * -1) 0 0 0;
145-
background-image: var(--_selected-background-image);
146-
background-color: var(--_row-background-color);
147-
border-block: var(--_row-border-width) solid var(--_border-color);
148-
}
149-
150-
&:empty {
151-
height: 100%;
152-
}
153139
}
154140
155141
[part~='row']:not(:focus-within) {
@@ -160,31 +146,79 @@ export const gridStyles = css`
160146
visibility: hidden;
161147
}
162148
163-
[part~='body-row'] {
149+
[part~='row']:where(:not(#sizer)) {
164150
&::before {
165-
display: block;
151+
content: '';
152+
inset: 0;
153+
position: absolute;
154+
grid-column: 1 / -1;
155+
background-color: var(--_row-background-color);
156+
background-image: var(--_selected-background-image, none);
157+
border-block: var(--_row-border-width) solid var(--_border-color);
166158
}
159+
}
160+
161+
#items [part~='row']:empty {
162+
height: 100%;
163+
}
167164
165+
[part~='body-row'] {
168166
&:focus,
169167
&:focus-within {
170168
z-index: 4;
171169
172-
&:not([part~='selected-row'])::before {
173-
border-color: transparent;
174-
background-clip: padding-box;
170+
&:not([part~='selected-row']):not([part~='first-row'])::before {
171+
inset-block-start: var(--_row-border-width);
172+
}
173+
174+
&:not([part~='selected-row']):not([part~='last-row'])::before {
175+
inset-block-end: var(--_row-border-width);
175176
}
176177
}
177178
178-
&[selected] {
179-
z-index: 3;
179+
&:not([part~='first-row'])::before {
180+
inset-block-start: calc(var(--_row-border-width) * -1);
180181
}
182+
183+
&:not([part~='last-row']) {
184+
padding-bottom: var(--_row-border-width);
185+
}
186+
}
187+
188+
#table[has-header] [part~='first-row'] {
189+
padding-top: var(--_row-border-width);
190+
}
191+
192+
#table[has-footer] [part~='last-row'] {
193+
padding-bottom: var(--_row-border-width);
194+
}
195+
196+
#header [part~='row']:not(:last-child),
197+
#footer [part~='row']:not(:last-child) {
198+
padding-bottom: var(--_row-border-width);
181199
}
182200
201+
/* Selected row */
202+
203+
[part~='selected-row'] {
204+
--_selected-background-color: var(
205+
--vaadin-grid-row-selected-background-color,
206+
color-mix(in srgb, currentColor 8%, transparent)
207+
);
208+
--_selected-background-image: linear-gradient(var(--_selected-background-color), var(--_selected-background-color));
209+
z-index: 3;
210+
211+
&::before {
212+
/* inset-block-start: calc(var(--_row-border-width) * -1); */
213+
}
214+
}
215+
216+
/* Cells */
217+
183218
[part~='cell'] {
184-
grid-row-start: 1;
185-
grid-column-end: span var(--_colspan, 1);
186219
padding: 0;
187220
box-sizing: border-box;
221+
grid-column-end: span var(--_colspan, 1);
188222
background: var(--vaadin-grid-cell-background, var(--vaadin-background-color));
189223
}
190224
@@ -198,8 +232,8 @@ export const gridStyles = css`
198232
position: relative;
199233
align-items: center;
200234
white-space: nowrap;
201-
z-index: 1;
202235
border-inline: var(--_column-border-width) var(--_border-color);
236+
z-index: 1;
203237
204238
&:focus {
205239
z-index: 4;
@@ -219,41 +253,19 @@ export const gridStyles = css`
219253
border-left-style: none;
220254
}
221255
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'] {
256+
[part~='body-row'] {
248257
--_highlight-background-color: var(--vaadin-grid-row-highlight-background-color, transparent);
249258
--_highlight-background-image: linear-gradient(
250259
var(--_highlight-background-color),
251260
var(--_highlight-background-color)
252261
);
262+
}
263+
264+
[part~='body-cell'] {
253265
background:
254-
var(--_hover-background-image, none) padding-box,
266+
var(--_hover-background-image, none) border-box,
255267
var(--_selected-background-image, none) border-box,
256-
var(--_highlight-background-image) padding-box,
268+
var(--_highlight-background-image) border-box,
257269
var(--vaadin-grid-cell-background-color, var(--_row-background-color)) border-box;
258270
}
259271
@@ -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)