55 */
66import { Component , Input , ViewChild , TemplateRef , OnInit } from '@angular/core' ;
77import { DropoutPlacement } from '@cloukit/dropout' ;
8+ import {
9+ CloukitComponentTheme , CloukitStatefulAndModifierAwareElementThemeStyleDefinition ,
10+ CloukitThemeService ,
11+ } from '@cloukit/theme' ;
812
913@Component ( {
1014 selector : 'cloukit-tooltip' ,
1115 template : `
1216 <ng-template #tooltip>
13- <div [ngStyle]="style">
14- {{tooltipText}}
17+ <div [ngStyle]="getStyle('wrapper').style">
18+ <div [ngStyle]="getStyle('tooltip').style">
19+ {{tooltipText}}
20+ </div>
1521 </div>
1622 </ng-template>
1723 ` ,
@@ -25,23 +31,58 @@ export class CloukitTooltipComponent implements OnInit {
2531 public tooltipTemplate : TemplateRef < any > ;
2632
2733 @Input ( 'cloukitTooltipPlacement' )
28- cloukitDropoutPlacement : DropoutPlacement ;
34+ public cloukitDropoutPlacement : DropoutPlacement ;
2935
30- public style = {
31- backgroundColor : '#333' ,
32- padding : '4px' ,
33- color : '#fff' ,
34- transform : '' ,
36+ @Input ( )
37+ public wrapperMargin : string ;
38+
39+ @Input ( )
40+ public theme : string ;
41+
42+ private themeSelected : CloukitComponentTheme ;
43+ private state = {
44+ uiModifier : 'base' ,
45+ uiState : 'init' ,
46+ tooltipTransform : '' ,
3547 } ;
3648
49+ constructor ( private themeService : CloukitThemeService ) {
50+ this . themeSelected = this . themeService . getComponentTheme ( 'tooltip' ) ;
51+ }
52+
53+ public getStyle ( element : string ) : CloukitStatefulAndModifierAwareElementThemeStyleDefinition {
54+ if ( this . themeSelected !== undefined && this . themeSelected !== null ) {
55+ const style = this . themeSelected . getStyle ( element , this . state . uiState , this . state . uiModifier ) ;
56+ if ( element === 'tooltip' ) {
57+ style . style [ 'transform' ] = this . state . tooltipTransform ;
58+ }
59+ if ( element === 'wrapper' ) {
60+ style . style [ this . wrapperMargin ] = this . state . uiState === 'ready' ? '5px' : '0px' ;
61+ }
62+ return this . themeService . prefixStyle ( style ) ;
63+ }
64+ return { style : { } , icon : { } } as CloukitStatefulAndModifierAwareElementThemeStyleDefinition ;
65+ }
66+
3767 ngOnInit ( ) {
38- console . log ( 'changes' ) ;
68+ const self = this ;
3969 if ( this . cloukitDropoutPlacement === DropoutPlacement . DOWN_CENTER || this . cloukitDropoutPlacement === DropoutPlacement . UP_CENTER ) {
40- this . style . transform = 'translate(-50%, 0)' ;
70+ this . state . tooltipTransform = 'translate(-50%, 0)' ;
4171 }
4272 if ( this . cloukitDropoutPlacement === DropoutPlacement . LEFT_CENTER || this . cloukitDropoutPlacement === DropoutPlacement . RIGHT_CENTER ) {
43- this . style . transform = 'translate(0, -50%)' ;
73+ this . state . tooltipTransform = 'translate(0, -50%)' ;
74+ }
75+ if ( this . theme !== undefined && this . theme !== null ) {
76+ this . themeSelected = this . themeService . getComponentTheme ( this . theme ) ;
77+ if ( this . themeSelected === null ) {
78+ console . log ( `WARN: requested theme ${ this . theme } does not exist. Falling back to default theme for tooltip.` ) ;
79+ this . themeSelected = this . themeService . getComponentTheme ( 'tooltip' ) ;
80+ }
4481 }
82+ // Transition to ready state once component is created
83+ setTimeout ( ( ) => {
84+ self . state . uiState = 'ready' ;
85+ } , 10 )
4586 }
4687
4788}
0 commit comments