@@ -318,9 +318,10 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
318318 this . __resizeObserver = this . __resizeObserver || new ResizeObserver ( ( ) => this . __onResize ( ) ) ;
319319 this . __resizeObserver . disconnect ( ) ;
320320
321- const children = this . querySelectorAll ( ':scope > [slot="detail"], :scope >:not([slot])' ) ;
322- [ this , this . $ . master , this . $ . detail , ...children ] . forEach ( ( node ) => {
323- this . __resizeObserver . observe ( node ) ;
321+ [ this , this . $ . master , this . $ . detail , this . __slottedMaster , this . __slottedDetail ] . forEach ( ( node ) => {
322+ if ( node ) {
323+ this . __resizeObserver . observe ( node ) ;
324+ }
324325 } ) ;
325326 }
326327
@@ -344,14 +345,14 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
344345 __readLayoutState ( ) {
345346 const isVertical = this . orientation === 'vertical' ;
346347
347- const masterContent = this . querySelector ( ':scope > :is([slot=""], :not([slot]))' ) ;
348- const detailContent = this . querySelector ( ':scope > [slot="detail"]' ) ;
349- const detailPlaceholder = this . querySelector ( ':scope > [slot="detail-placeholder"]' ) ;
348+ const slottedMaster = this . __slottedMaster ;
349+ const slottedDetail = this . __slottedDetail ;
350+ const slottedDetailPlaceholder = this . __slottedDetailPlaceholder ;
350351
351- const hasMaster = ! ! masterContent ;
352+ const hasMaster = ! ! slottedMaster ;
352353 const hadDetail = this . hasAttribute ( 'has-detail' ) ;
353- const hasDetail = detailContent != null && detailContent . checkVisibility ( ) ;
354- const hasDetailPlaceholder = ! ! detailPlaceholder ;
354+ const hasDetail = slottedDetail != null && slottedDetail . checkVisibility ( ) ;
355+ const hasDetailPlaceholder = ! ! slottedDetailPlaceholder ;
355356
356357 const computedStyle = getComputedStyle ( this ) ;
357358 const hostSizeProp = isVertical ? 'height' : 'width' ;
@@ -361,7 +362,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
361362 const trackSizes = parseTrackSizes ( computedStyle [ trackSizesProp ] ) ;
362363
363364 const hasOverflow = ( hasDetail || hasDetailPlaceholder ) && detectOverflow ( hostSize , trackSizes ) ;
364- const focusTarget = ! hadDetail && hasDetail && hasOverflow ? getFocusableElements ( detailContent ) [ 0 ] : null ;
365+ const focusTarget = ! hadDetail && hasDetail && hasOverflow ? getFocusableElements ( slottedDetail ) [ 0 ] : null ;
365366
366367 return {
367368 hasMaster,
@@ -500,7 +501,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
500501 */
501502 async _setDetail ( newDetail , skipTransition ) {
502503 // Don't start a transition if detail didn't change
503- const oldDetail = this . querySelector ( '[slot="detail"]' ) ;
504+ const oldDetail = this . __slottedDetail ;
504505 if ( oldDetail === ( newDetail || null ) ) {
505506 return ;
506507 }
@@ -526,7 +527,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
526527 return ;
527528 }
528529
529- const hasPlaceholder = ! ! this . querySelector ( '[slot="detail-placeholder"]' ) ;
530+ const hasPlaceholder = ! ! this . __slottedDetailPlaceholder ;
530531 if ( ( oldDetail && newDetail ) || ( hasPlaceholder && ! this . hasAttribute ( 'overlay' ) ) ) {
531532 await this . _startTransition ( 'replace' , updateSlot ) ;
532533 } else if ( ! oldDetail && newDetail ) {
@@ -631,7 +632,7 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
631632 * @private
632633 */
633634 __snapshotDetailOutgoing ( ) {
634- const currentDetail = this . querySelector ( '[slot="detail"]' ) ;
635+ const currentDetail = this . __slottedDetail ;
635636 if ( ! currentDetail ) {
636637 return ;
637638 }
@@ -650,6 +651,21 @@ class MasterDetailLayout extends ElementMixin(ThemableMixin(PolylitMixin(LitElem
650651 this . __replacing = false ;
651652 }
652653
654+ /** @private */
655+ get __slottedMaster ( ) {
656+ return this . querySelector ( ':scope > :is([slot=""], :not([slot]))' ) ;
657+ }
658+
659+ /** @private */
660+ get __slottedDetail ( ) {
661+ return this . querySelector ( ':scope > [slot="detail"]' ) ;
662+ }
663+
664+ /** @private */
665+ get __slottedDetailPlaceholder ( ) {
666+ return this . querySelector ( ':scope > [slot="detail-placeholder"]' ) ;
667+ }
668+
653669 /**
654670 * @event backdrop-click
655671 * Fired when the user clicks the backdrop in the overlay mode.
0 commit comments