11import { html , LitElement } from 'lit' ;
2- import {
3- property ,
4- queryAssignedElements ,
5- queryAssignedNodes ,
6- state ,
7- } from 'lit/decorators.js' ;
8-
2+ import { property , state } from 'lit/decorators.js' ;
93import { addThemingController } from '../../theming/theming-controller.js' ;
4+ import { addSlotController , setSlots } from '../common/controllers/slot.js' ;
105import { registerComponent } from '../common/definitions/register.js' ;
116import { partMap } from '../common/part-map.js' ;
127import { styles } from './themes/item.base.css.js' ;
@@ -30,10 +25,18 @@ export default class IgcNavDrawerItemComponent extends LitElement {
3025 public static override styles = [ styles , shared ] ;
3126
3227 /* blazorSuppress */
33- public static register ( ) {
28+ public static register ( ) : void {
3429 registerComponent ( IgcNavDrawerItemComponent ) ;
3530 }
3631
32+ private readonly _slots = addSlotController ( this , {
33+ slots : setSlots ( 'content' , 'icon' ) ,
34+ onChange : this . _handleSlotChange ,
35+ } ) ;
36+
37+ @state ( )
38+ private _hasContent = true ;
39+
3740 /**
3841 * Determines whether the drawer is disabled.
3942 * @attr
@@ -48,33 +51,21 @@ export default class IgcNavDrawerItemComponent extends LitElement {
4851 @property ( { type : Boolean , reflect : true } )
4952 public active = false ;
5053
51- @state ( )
52- private _textLength ! : number ;
53-
54- @queryAssignedElements ( { slot : 'content' } )
55- private _text ! : Array < HTMLElement > ;
56-
57- @queryAssignedNodes ( { slot : 'icon' , flatten : true } )
58- protected navdrawerIcon ! : Array < Node > ;
59-
6054 constructor ( ) {
6155 super ( ) ;
6256 addThemingController ( this , all ) ;
6357 }
6458
65- protected override createRenderRoot ( ) {
66- const root = super . createRenderRoot ( ) ;
67- root . addEventListener ( 'slotchange' , ( ) => {
68- this . _textLength = this . _text . length ;
69- } ) ;
70-
71- return root ;
59+ protected _handleSlotChange ( ) : void {
60+ this . _hasContent = this . _slots . hasAssignedElements ( 'content' ) ;
7261 }
7362
7463 protected override render ( ) {
64+ const hasNoIcon = ! this . _slots . hasAssignedNodes ( 'icon' , true ) ;
65+
7566 return html `
76- < div part =${ partMap ( { base : true , mini : this . _textLength < 1 } ) } >
77- < span part ="icon " . hidden =" ${ this . navdrawerIcon . length === 0 } " >
67+ < div part =${ partMap ( { base : true , mini : ! this . _hasContent } ) } >
68+ < span part ="icon " ? hidden =${ hasNoIcon } >
7869 < slot name ="icon "> </ slot >
7970 </ span >
8071 < span part ="content ">
0 commit comments