Skip to content

Commit 600043b

Browse files
authored
fix: display master content only after layout calculated sizes (#11464)
1 parent fc399e7 commit 600043b

3 files changed

Lines changed: 23 additions & 1 deletion

File tree

packages/master-detail-layout/src/styles/vaadin-master-detail-layout-base-styles.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ export const masterDetailLayoutStyles = css`
6969
#master {
7070
grid-column: master-start / detail-start;
7171
grid-row: 1;
72+
opacity: 0;
73+
pointer-events: none;
74+
}
75+
76+
:host([has-master]) #master {
77+
opacity: 1;
78+
pointer-events: auto;
7279
}
7380
7481
:is(#detail, #detail-placeholder, #outgoing) {

packages/master-detail-layout/src/vaadin-master-detail-layout.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,11 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
344344
__readLayoutState() {
345345
const isVertical = this.orientation === 'vertical';
346346

347+
const masterContent = this.querySelector(':scope > :is([slot=""], :not([slot]))');
347348
const detailContent = this.querySelector(':scope > [slot="detail"]');
348349
const detailPlaceholder = this.querySelector(':scope > [slot="detail-placeholder"]');
349350

351+
const hasMaster = !!masterContent;
350352
const hadDetail = this.hasAttribute('has-detail');
351353
const hasDetail = detailContent != null && detailContent.checkVisibility();
352354
const hasDetailPlaceholder = !!detailPlaceholder;
@@ -362,6 +364,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
362364
const focusTarget = !hadDetail && hasDetail && hasOverflow ? getFocusableElements(detailContent)[0] : null;
363365

364366
return {
367+
hasMaster,
365368
hadDetail,
366369
hasDetail,
367370
hasDetailPlaceholder,
@@ -376,7 +379,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
376379
* Applies layout state to DOM attributes. Pure writes, no reads.
377380
* @private
378381
*/
379-
__writeLayoutState({ hadDetail, hasDetail, hasDetailPlaceholder, hasOverflow, focusTarget, trackSizes }) {
382+
__writeLayoutState({ hasMaster, hadDetail, hasDetail, hasDetailPlaceholder, hasOverflow, focusTarget, trackSizes }) {
380383
const [_masterSize, _masterExtra, detailSize] = trackSizes;
381384

382385
// If no detailSize is explicitily set, cache the intrinsic size (min-content) of
@@ -398,6 +401,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
398401
}
399402

400403
this.toggleAttribute('overlay', hasOverflow);
404+
this.toggleAttribute('has-master', hasMaster);
401405
this.toggleAttribute('has-detail', hasDetail);
402406
this.toggleAttribute('has-detail-placeholder', hasDetailPlaceholder);
403407

packages/master-detail-layout/test/dom/__snapshots__/master-detail-layout.test.snap.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const snapshots = {};
44
snapshots["vaadin-master-detail-layout host default"] =
55
`<vaadin-master-detail-layout
66
expand="master"
7+
has-master=""
78
orientation="horizontal"
89
overlay-containment="layout"
910
>
@@ -17,6 +18,7 @@ snapshots["vaadin-master-detail-layout host default"] =
1718
snapshots["vaadin-master-detail-layout host masterSize"] =
1819
`<vaadin-master-detail-layout
1920
expand="master"
21+
has-master=""
2022
orientation="horizontal"
2123
overlay-containment="layout"
2224
style="--_master-size: 300px;"
@@ -31,6 +33,7 @@ snapshots["vaadin-master-detail-layout host masterSize"] =
3133
snapshots["vaadin-master-detail-layout host detailSize"] =
3234
`<vaadin-master-detail-layout
3335
expand="master"
36+
has-master=""
3437
orientation="horizontal"
3538
overlay-containment="layout"
3639
style="--_detail-size: 400px;"
@@ -45,6 +48,7 @@ snapshots["vaadin-master-detail-layout host detailSize"] =
4548
snapshots["vaadin-master-detail-layout host masterSize and detailSize"] =
4649
`<vaadin-master-detail-layout
4750
expand="master"
51+
has-master=""
4852
orientation="horizontal"
4953
overlay-containment="layout"
5054
style="--_master-size: 300px; --_detail-size: 400px;"
@@ -98,6 +102,7 @@ snapshots["vaadin-master-detail-layout detail default"] =
98102
`<vaadin-master-detail-layout
99103
expand="master"
100104
has-detail=""
105+
has-master=""
101106
master-size="300px"
102107
orientation="horizontal"
103108
overlay-containment="layout"
@@ -117,6 +122,7 @@ snapshots["vaadin-master-detail-layout detail overflow"] =
117122
`<vaadin-master-detail-layout
118123
expand="master"
119124
has-detail=""
125+
has-master=""
120126
master-size="300px"
121127
orientation="horizontal"
122128
overlay-containment="layout"
@@ -135,6 +141,7 @@ snapshots["vaadin-master-detail-layout detail overflow"] =
135141
snapshots["vaadin-master-detail-layout detail hidden"] =
136142
`<vaadin-master-detail-layout
137143
expand="master"
144+
has-master=""
138145
master-size="300px"
139146
orientation="horizontal"
140147
overlay-containment="layout"
@@ -156,6 +163,7 @@ snapshots["vaadin-master-detail-layout detail hidden"] =
156163
snapshots["vaadin-master-detail-layout detail removed"] =
157164
`<vaadin-master-detail-layout
158165
expand="master"
166+
has-master=""
159167
master-size="300px"
160168
orientation="horizontal"
161169
overlay-containment="layout"
@@ -172,6 +180,7 @@ snapshots["vaadin-master-detail-layout detail placeholder default"] =
172180
`<vaadin-master-detail-layout
173181
expand="master"
174182
has-detail-placeholder=""
183+
has-master=""
175184
master-size="300px"
176185
orientation="horizontal"
177186
overlay-containment="layout"
@@ -191,6 +200,7 @@ snapshots["vaadin-master-detail-layout detail placeholder overflow"] =
191200
`<vaadin-master-detail-layout
192201
expand="master"
193202
has-detail-placeholder=""
203+
has-master=""
194204
master-size="300px"
195205
orientation="horizontal"
196206
overlay-containment="layout"
@@ -209,6 +219,7 @@ snapshots["vaadin-master-detail-layout detail placeholder overflow"] =
209219
snapshots["vaadin-master-detail-layout detail placeholder removed"] =
210220
`<vaadin-master-detail-layout
211221
expand="master"
222+
has-master=""
212223
master-size="300px"
213224
orientation="horizontal"
214225
overlay-containment="layout"

0 commit comments

Comments
 (0)