11import { html , LitElement , nothing } from 'lit' ;
2- import {
3- property ,
4- query ,
5- queryAssignedElements ,
6- state ,
7- } from 'lit/decorators.js' ;
2+ import { property , query , state } from 'lit/decorators.js' ;
83import { createRef , ref } from 'lit/directives/ref.js' ;
94import { startViewTransition } from '../../animations/player.js' ;
105import { addThemingController } from '../../theming/theming-controller.js' ;
@@ -19,17 +14,12 @@ import {
1914 type DragCallbackParameters ,
2015} from '../common/controllers/drag.js' ;
2116import { addFullscreenController } from '../common/controllers/fullscreen.js' ;
17+ import { addSlotController , setSlots } from '../common/controllers/slot.js' ;
2218import { registerComponent } from '../common/definitions/register.js' ;
2319import type { Constructor } from '../common/mixins/constructor.js' ;
2420import { EventEmitterMixin } from '../common/mixins/event-emitter.js' ;
2521import { partMap } from '../common/part-map.js' ;
26- import {
27- asNumber ,
28- createCounter ,
29- findElementFromEventPath ,
30- isEmpty ,
31- isLTR ,
32- } from '../common/util.js' ;
22+ import { asNumber , findElementFromEventPath , isLTR } from '../common/util.js' ;
3323import IgcDividerComponent from '../divider/divider.js' ;
3424import IgcResizeContainerComponent from '../resize-container/resize-container.js' ;
3525import type { ResizeCallbackParams } from '../resize-container/types.js' ;
@@ -60,6 +50,17 @@ export interface IgcTileComponentEventMap {
6050 igcTileResizeCancel : CustomEvent < IgcTileComponent > ;
6151}
6252
53+ let nextId = 1 ;
54+ const Slots = setSlots (
55+ 'title' ,
56+ 'maximize-action' ,
57+ 'fullscreen-action' ,
58+ 'actions' ,
59+ 'side-adorner' ,
60+ 'corner-adorner' ,
61+ 'bottom-adorner'
62+ ) ;
63+
6364/**
6465 * The tile component is used within the `igc-tile-manager` as a container
6566 * for displaying various types of information.
@@ -101,7 +102,7 @@ export default class IgcTileComponent extends EventEmitterMixin<
101102 public static styles = [ styles , shared ] ;
102103
103104 /* blazorSuppress */
104- public static register ( ) {
105+ public static register ( ) : void {
105106 registerComponent (
106107 IgcTileComponent ,
107108 IgcIconButtonComponent ,
@@ -110,9 +111,9 @@ export default class IgcTileComponent extends EventEmitterMixin<
110111 ) ;
111112 }
112113
113- private static readonly increment = createCounter ( ) ;
114+ private readonly _slots = addSlotController ( this , { slots : Slots } ) ;
114115
115- private _dragController = addDragController ( this , {
116+ private readonly _dragController = addDragController ( this , {
116117 skip : this . _skipDrag ,
117118 matchTarget : this . _match ,
118119 ghost : this . _createDragGhost ,
@@ -122,26 +123,19 @@ export default class IgcTileComponent extends EventEmitterMixin<
122123 cancel : this . _handleDragCancel ,
123124 } ) ;
124125
125- private _fullscreenController = addFullscreenController ( this , {
126+ private readonly _fullscreenController = addFullscreenController ( this , {
126127 enter : this . _emitFullScreenEvent ,
127128 exit : this . _emitFullScreenEvent ,
128129 } ) ;
129130
131+ private readonly _resizeState = createTileResizeState ( ) ;
132+ private readonly _dragStack = createTileDragStack ( ) ;
133+
130134 private _colSpan = 1 ;
131135 private _rowSpan = 1 ;
132136 private _colStart : number | null = null ;
133137 private _rowStart : number | null = null ;
134138 private _position = - 1 ;
135- private _resizeState = createTileResizeState ( ) ;
136- private _dragStack = createTileDragStack ( ) ;
137-
138- private _customAdorners = new Map < string , boolean > (
139- Object . entries ( {
140- side : false ,
141- corner : false ,
142- bottom : false ,
143- } )
144- ) ;
145139
146140 // Tile manager context properties and helpers
147141
@@ -159,7 +153,7 @@ export default class IgcTileComponent extends EventEmitterMixin<
159153 } ) ;
160154 } ;
161155
162- private _context = createAsyncContext (
156+ private readonly _context = createAsyncContext (
163157 this ,
164158 tileManagerContext ,
165159 this . _setDragConfiguration
@@ -184,16 +178,10 @@ export default class IgcTileComponent extends EventEmitterMixin<
184178 return this . _tileManager ?. resizeMode ?? 'none' ;
185179 }
186180
187- protected _headerRef = createRef < HTMLElement > ( ) ;
188-
189- @queryAssignedElements ( { slot : 'title' } )
190- private _titleElements ! : HTMLElement [ ] ;
191-
192- @queryAssignedElements ( { slot : 'actions' } )
193- private _actionsElements ! : HTMLElement [ ] ;
181+ protected readonly _headerRef = createRef < HTMLElement > ( ) ;
194182
195183 @query ( IgcResizeContainerComponent . tagName )
196- protected _resizeContainer ?: IgcResizeContainerComponent ;
184+ protected readonly _resizeContainer ?: IgcResizeContainerComponent ;
197185
198186 @query ( '[part~="base"]' , true )
199187 public _tileContent ! : HTMLElement ;
@@ -374,7 +362,7 @@ export default class IgcTileComponent extends EventEmitterMixin<
374362 /** @internal */
375363 public override connectedCallback ( ) : void {
376364 super . connectedCallback ( ) ;
377- this . id = this . id || `tile-${ IgcTileComponent . increment ( ) } ` ;
365+ this . id = this . id || `tile-${ nextId ++ } ` ;
378366
379367 this . style . viewTransitionName =
380368 this . style . viewTransitionName || `tile-transition-${ this . id } ` ;
@@ -632,11 +620,13 @@ export default class IgcTileComponent extends EventEmitterMixin<
632620 }
633621
634622 protected _renderHeader ( ) {
623+ const hasNoContent = ! (
624+ this . _slots . hasAssignedElements ( 'title' ) &&
625+ this . _slots . hasAssignedElements ( 'actions' )
626+ ) ;
627+
635628 const hideHeader =
636- isEmpty ( this . _titleElements ) &&
637- isEmpty ( this . _actionsElements ) &&
638- this . disableMaximize &&
639- this . disableFullscreen ;
629+ hasNoContent && this . disableMaximize && this . disableFullscreen ;
640630
641631 const hasMaximizeSlot = ! ( this . disableMaximize || this . fullscreen ) ;
642632 const hasFullscreenSlot = ! this . disableFullscreen ;
@@ -692,14 +682,7 @@ export default class IgcTileComponent extends EventEmitterMixin<
692682 }
693683
694684 private _renderAdornerSlot ( name : AdornerType ) {
695- return html `
696- < slot
697- @slotchange =${ ( ) => this . _customAdorners . set ( name , true ) }
698- name ="${ name } -adorner"
699- slot="${ name } -adorner"
700- >
701- </ slot >
702- ` ;
685+ return html `< slot name ="${ name } -adorner " slot ="${ name } -adorner "> </ slot > ` ;
703686 }
704687
705688 protected override render ( ) {
@@ -711,9 +694,11 @@ export default class IgcTileComponent extends EventEmitterMixin<
711694 < igc-resize
712695 part =${ partMap ( {
713696 resize : true ,
714- 'side-adorner' : this . _customAdorners . get ( 'side' ) ! ,
715- 'corner-adorner' : this . _customAdorners . get ( 'corner' ) ! ,
716- 'bottom-adorner' : this . _customAdorners . get ( 'bottom' ) ! ,
697+ 'side-adorner' : this . _slots . hasAssignedElements ( 'side-adorner' ) ,
698+ 'corner-adorner' :
699+ this . _slots . hasAssignedElements ( 'corner-adorner' ) ,
700+ 'bottom-adorner' :
701+ this . _slots . hasAssignedElements ( 'bottom-adorner' ) ,
717702 } ) }
718703 exportparts ="trigger-side, trigger, trigger-bottom"
719704 mode="deferred"
0 commit comments