@@ -22,8 +22,8 @@ export const gridStyles = css`
2222 cursor : default;
2323 - - _bor der- color : var(- - vaadin- grid- bor der- color , var (- - vaadin- bor der- color - secondary));
2424 - - _bor der- width: 0;
25- - - _row- bor der- width: var(- - vaadin- grid- row- bor der- width, 1px );
26- - - _column- bor der- width: var(- - vaadin- grid- column- bor der- width, 0px );
25+ - - _row- bor der- width: var(- - vaadin- grid- row- bor der- width, 4px );
26+ - - _column- bor der- width: var(- - vaadin- grid- column- bor der- width, 4px );
2727 bor der- radius: var(- - _bor der- radius);
2828 - - _bor der- radius: 0;
2929 }
@@ -121,142 +121,19 @@ export const gridStyles = css`
121121 [part ~= 'reorder-ghost' ] {
122122 font-size : var (--vaadin-grid-header-font-size , 1em );
123123 font-weight : var (--vaadin-grid-header-font-weight , 500 );
124- color : var (--vaadin-grid-header-color , var (--vaadin-text-color ));
124+ color : var (--vaadin-grid-text- header-color , var (--vaadin-text-color ));
125125 }
126126
127127 [part ~= 'row' ] {
128- display : inline- flex;
129- min- width: 100% ;
128+ display : flex;
129+ width : 100% ;
130130 box-sizing : border-box;
131131 margin : 0 ;
132132 position : relative;
133- background : var (--vaadin-cell-background , var (--vaadin-background-color ));
134- border-block : var (--_row-border-width ) solid var (--_border-color );
135- }
136-
137- [part ~= 'details-cell' ] {
138- border-block-start : var (--_row-border-width ) solid var (--_border-color );
139- }
140-
141- # header {
142- [part ~= 'row' ] {
143- border-block-start-style : none;
144- }
145-
146- /* Focus outline */
147- [part ~= 'row' ]: first- child::after ,
148- [part ~= 'row' ]: first- child [part ~= 'cell' ]::after {
149- inset-block-start : 0 ;
150- }
151-
152- [part ~= 'row' ]: last-child {
153- border-block-end-style : none;
154- background : transparent;
155- }
156-
157- /* Header bottom border */
158- [part ~= 'row' ]: last-child ::before {
159- content : '' ;
160- height : var (--_row-border-width );
161- background : var (--_border-color );
162- position : absolute;
163- inset-block-end : calc (-1 * var (--_row-border-width ));
164- inset-inline : 0 ;
165- }
166-
167- : host ([overflow ~= 'top' ]) & {
168- padding-block-end : var (--_row-border-width );
169- }
170- }
171-
172- # items {
173- [part ~= 'row' ] {
174- border-block-start-style : none;
175- }
176-
177- [part ~= 'row' ]: empty {
178- height : 100% ;
179- }
180- }
181-
182- # footer {
183- [part ~= 'row' ] {
184- border-block-end-style : none;
185- }
186-
187- [part ~= 'row' ]: first-child {
188- border-block-start-style : none;
189- }
190-
191- /* Footer top border */
192- # scroller [empty-state ] & ,
193- : host ([overflow ~= 'top' ]) & ,
194- : host ([overflow ~= 'bottom' ]) & {
195- [part ~= 'row' ]: first-child ::before {
196- content : '' ;
197- height : var (--_row-border-width );
198- background : var (--_border-color );
199- position : absolute;
200- inset-block-start : calc (-1 * var (--_row-border-width ));
201- inset-inline : 0 ;
202- }
203- }
204-
205- /* Focus outline */
206- [part ~= 'row' ]: last- child::after ,
207- [part ~= 'row' ]: last- child [part ~= 'cell' ]::after {
208- inset-block-end : 0 ;
209- }
210- }
211-
212- /* Grid with header */
213- # table : has (# header > tr : not ([hidden ])) {
214- # emptystatebody {
215- margin-top : calc (var (--_row-border-width ) * -1 );
216- }
217-
218- # emptystatecell {
219- border-block : var (--_row-border-width ) solid transparent;
220- }
221-
222- [part ~= 'first-row' ] {
223- border-block-start-color : transparent;
224- border-block-start-style : solid;
225- }
226- }
227-
228- /* Grid without header */
229- # table : not (: has (# header > tr : not ([hidden ]))) {
230- /* Focus outline */
231- [part ~= 'first-row' ]::after ,
232- [part ~= 'first-row' ] [part ~= 'cell' ]::after {
233- inset-block-start : 0 ;
234- }
235- }
236-
237- /* Grid with footer */
238- # table : has (# footer > tr : not ([hidden ])) {
239- : host ([overflow ~= 'top' ]) & ,
240- : host ([overflow ~= 'bottom' ]) & {
241- [part ~= 'last-row' ] {
242- border-block-end-color : transparent;
243- }
244- }
245133 }
246134
247- /* Grid without footer */
248- # table : not (: has (# footer > tr : not ([hidden ]))) {
249- : host ([overflow ~= 'top' ]) & {
250- [part ~= 'last-row' ] {
251- border-block-end-style : none;
252- }
253-
254- /* Focus outline */
255- [part ~= 'last-row' ]::after ,
256- [part ~= 'last-row' ] [part ~= 'cell' ]::after {
257- inset-block-end : 0 ;
258- }
259- }
135+ [part ~= 'row' ]: empty {
136+ height : 100% ;
260137 }
261138
262139 [part ~= 'row' ][loading ] [part ~= 'body-cell' ] ::slotted (vaadin-grid-cell-content ) {
@@ -268,12 +145,16 @@ export const gridStyles = css`
268145 }
269146
270147 [part ~= 'cell' ] {
148+ --vaadin-grid-cell-background-color : yellow;
271149 padding : 0 ;
272150 box-sizing : border-box;
273151 background : var (--vaadin-grid-cell-background , var (--vaadin-background-color ));
152+ border-block : var (--_row-border-width ) var (--_border-color );
274153 }
275154
276- [part ~= 'cell' ]: where (: not ([part ~= 'details-cell' ])) {
155+ [part ~= 'body-cell' ],
156+ [part ~= 'header-cell' ],
157+ [part ~= 'footer-cell' ] {
277158 flex-shrink : 0 ;
278159 flex-grow : 1 ;
279160 display : flex;
@@ -282,30 +163,73 @@ export const gridStyles = css`
282163 align-items : center;
283164 white-space : nowrap;
284165 border-inline : var (--_column-border-width ) var (--_border-color );
285- border-inline-start-style : solid;
286166 }
287167
288- [part ~= 'first-column-cell' ] {
289- border-inline-start-style : none;
168+ /* Column borders */
169+ [part ~= 'cell' ]: not ([part ~= 'first-column-cell' ]) {
170+ border-left-style : solid;
171+ }
172+
173+ [part ~= 'last-frozen-cell' ]: not ([part ~= 'last-column-cell' ]) {
174+ border-right-style : solid;
175+ }
176+
177+ [part ~= 'last-frozen-cell' ] + [part ~= 'cell' ] {
178+ border-left-style : none;
179+ }
180+
181+ /* Row borders */
182+ # header {
183+ padding-bottom : var (--_row-border-width );
184+ margin-bottom : calc (var (--_row-border-width ) * -1 );
185+ }
186+
187+ [part ~= 'header-cell' ]: not ([part ~= 'last-header-row-cell' ]),
188+ [part ~= 'footer-cell' ]: not ([part ~= 'last-footer-row-cell' ]) {
189+ border-bottom-style : solid;
190+ }
191+
192+ [part ~= 'body-cell' ]: not ([part ~= 'last-row-cell' ]),
193+ [part ~= 'body-cell' ]: not ([part ~= 'last-row-cell' ]) + [part ~= 'details-cell' ] {
194+ border-bottom-style : solid;
195+ }
196+
197+ /* Grid with header */
198+ # table : has (# header > tr : not ([hidden ])) {
199+ [part ~= 'first-row-cell' ] {
200+ border-block-start-style : solid;
201+ }
290202 }
291203
292- [part ~= 'last-frozen-cell' ] {
293- border-inline-end-style : solid;
204+ /* Grid with footer */
205+ # table : has (# footer > tr : not ([hidden ])) {
206+ [part ~= 'last-row-cell' ] {
207+ border-block-end-style : solid;
208+ }
209+ }
210+
211+ /* Grid with header */
212+ # table : has (# header > tr : not ([hidden ])) {
213+ # emptystatebody {
214+ /* margin-top: calc(var(--_row-border-width) * -1); */
215+ }
294216
295- & + [ part ~= 'cell' ] {
296- border-inline-start-style : none ;
217+ # emptystatecell {
218+ border-block : var ( --_row-border-width ) solid transparent ;
297219 }
298220 }
299221
300- [part ~= 'body-cell' ]: where ( : not ([ part ~= 'details-cell' ])) {
222+ [part ~= 'body-cell' ] {
301223 --_highlight-background-color : var (--vaadin-grid-row-highlight-background-color , transparent);
302224 --_highlight-background-image : linear-gradient (
303225 var (--_highlight-background-color ),
304226 var (--_highlight-background-color )
305227 );
306228 background :
307- var (--_hover-background-image , none), var (--_selected-background-image , none), var (--_highlight-background-image ),
308- var (--vaadin-grid-cell-background-color , var (--vaadin-background-color ));
229+ var (--_hover-background-image , none) padding-box,
230+ var (--_selected-background-image , none) border-box,
231+ var (--_highlight-background-image ) padding-box,
232+ var (--vaadin-grid-cell-background-color ) border-box;
309233 }
310234
311235 /* Variant: wrap cell contents */
@@ -328,27 +252,34 @@ export const gridStyles = css`
328252
329253 /* Raise highlighted rows above others */
330254
331- [part ~= 'row' ]: focus,
332- [part ~= 'row' ]: focus- within,
333- [part ~= 'body-row' ]: where ([selected ]) {
255+ [part ~= 'selected-row' ] {
334256 z-index : 3 ;
335257 }
336258
337- @container style(- - vaadin- grid- row- odd- background- color ) {
259+ [part ~= 'row' ]: focus,
260+ [part ~= 'row' ]: focus-within {
261+ z-index : 4 ;
262+
263+ [part ~= 'cell' ]: not ([part ~= 'selected-row-cell' ]) {
264+ border-top-color : transparent;
265+ }
266+ }
267+
268+ /* @container style(--vaadin-grid-row-odd-background-color) {
338269 [part~='odd-row'] {
339270 z-index: 1;
340271 }
341- }
272+ } */
342273
343274 /* Row hover */
344275 @media (any-hover : hover) {
345- @container style (--vaadin-grid-row-hover-background-color ) {
276+ /* @container style(--vaadin-grid-row-hover-background-color) {
346277 [part~='body-row']:hover {
347278 z-index: 2;
348279 }
349- }
280+ } */
350281
351- [part ~= 'body-row' ]: hover [part ~= 'cell' ] : where ( : not ([ part ~= 'details -cell' ])) {
282+ [part ~= 'body-row' ]: hover [part ~= 'body -cell' ] {
352283 --_hover-background-color : var (--vaadin-grid-row-hover-background-color , transparent);
353284 --_hover-background-image : linear-gradient (var (--_hover-background-color ), var (--_hover-background-color ));
354285 }
@@ -377,14 +308,22 @@ export const gridStyles = css`
377308 }
378309
379310 /* Selected row */
380- [part ~= 'body -row' ][ selected ] {
311+ [part ~= 'selected -row' ] {
381312 --_selected-background-color : var (
382313 --vaadin-grid-row-selected-background-color ,
383314 color-mix (in srgb, currentColor 8% , transparent)
384315 );
385316 --_selected-background-image : linear-gradient (var (--_selected-background-color ), var (--_selected-background-color ));
386317 }
387318
319+ [part ~= 'selected-row-cell' ] {
320+ border-top-style : solid;
321+ }
322+
323+ [part ~= 'selected-row-cell' ]: not ([part ~= 'first-row-cell' ]) {
324+ margin-top : calc (var (--_row-border-width ) * -1 );
325+ }
326+
388327 /* Empty state */
389328 # scroller : not ([empty-state ]) # emptystatebody ,
390329 # scroller [empty-state ] # items {
@@ -535,20 +474,40 @@ export const gridStyles = css`
535474 /* Focus outline element, also used for d'n'd indication */
536475 : is ([part ~= 'row' ], [part ~= 'cell' ])::after {
537476 position : absolute;
538- inset : calc (var (--_row-border-width ) * -1 ) calc (var (--_column-border-width ) * -1 );
539477 z-index : 3 ;
540478 pointer-events : none;
541479 outline : var (--vaadin-focus-ring-width ) solid var (--vaadin-focus-ring-color );
542480 outline-offset : calc (var (--vaadin-focus-ring-width ) * -1 );
543481 }
544482
483+ [part ~= 'cell' ]::after {
484+ inset : calc (var (--_row-border-width ) * -1 ) calc (var (--_column-border-width ) * -1 );
485+ }
486+
545487 [part ~= 'first-column-cell' ]::after {
546488 inset-inline-start : 0 ;
547489 }
490+
548491 [part ~= 'last-column-cell' ]::after {
549492 inset-inline-end : 0 ;
550493 }
551494
495+ [part ~= 'row' ]::after {
496+ inset-block : calc (var (--_row-border-width ) * -1 ) 0 ;
497+ inset-inline : 0 ;
498+ }
499+
500+ # header [part ~= 'row' ]: first- child::after ,
501+ # header [part ~= 'row' ]: first- child [part ~= 'cell' ]::after {
502+ inset-block-start : 0 ;
503+ }
504+
505+ # table : has (# header > tr : not ([hidden ])) {
506+ [part ~= 'first-row' ]::after {
507+ inset-block-start : 0 ;
508+ }
509+ }
510+
552511 : host ([navigating ]) [part ~= 'row' ]: focus,
553512 : host ([navigating ]) [part ~= 'cell' ]: focus {
554513 outline : 0 ;
0 commit comments