Tooltip Component synced with Web Awesome 3.0.0
Preparing for Web Awesome 1.0.0. This wrapper will not target a version above 1.0.0 until it is released.
Overview
Import
Import the tooltip directive from the angular-awesome package:
// Import the tooltip directive
import { WaTooltipDirective } from 'angular-awesome/tooltip';
Examples
Tooltip Examples
Basic Usage
<wa-tooltip for="my-button">This is a tooltip</wa-tooltip>
<wa-button id="my-button">Hover Me</wa-button>
Placement
<div class="tooltip-placement-example">
<div class="tooltip-placement-example-row">
<wa-button id="tooltip-top-start"></wa-button>
<wa-button id="tooltip-top"></wa-button>
<wa-button id="tooltip-top-end"></wa-button>
</div>
<div class="tooltip-placement-example-row">
<wa-button id="tooltip-left-start"></wa-button>
<wa-button id="tooltip-right-start"></wa-button>
</div>
<div class="tooltip-placement-example-row">
<wa-button id="tooltip-left"></wa-button>
<wa-button id="tooltip-right"></wa-button>
</div>
<div class="tooltip-placement-example-row">
<wa-button id="tooltip-left-end"></wa-button>
<wa-button id="tooltip-right-end"></wa-button>
</div>
<div class="tooltip-placement-example-row">
<wa-button id="tooltip-bottom-start"></wa-button>
<wa-button id="tooltip-bottom"></wa-button>
<wa-button id="tooltip-bottom-end"></wa-button>
</div>
</div>
<wa-tooltip for="tooltip-top-start" placement="top-start">top-start</wa-tooltip>
<wa-tooltip for="tooltip-top" placement="top">top</wa-tooltip>
<wa-tooltip for="tooltip-top-end" placement="top-end">top-end</wa-tooltip>
<wa-tooltip for="tooltip-left-start" placement="left-start">left-start</wa-tooltip>
<wa-tooltip for="tooltip-right-start" placement="right-start">right-start</wa-tooltip>
<wa-tooltip for="tooltip-left" placement="left">left</wa-tooltip>
<wa-tooltip for="tooltip-right" placement="right">right</wa-tooltip>
<wa-tooltip for="tooltip-left-end" placement="left-end">left-end</wa-tooltip>
<wa-tooltip for="tooltip-right-end" placement="right-end">right-end</wa-tooltip>
<wa-tooltip for="tooltip-bottom-start" placement="bottom-start">bottom-start</wa-tooltip>
<wa-tooltip for="tooltip-bottom" placement="bottom">bottom</wa-tooltip>
<wa-tooltip for="tooltip-bottom-end" placement="bottom-end">bottom-end</wa-tooltip>
Click Trigger
<wa-button id="toggle-button">Click to Toggle</wa-button>
<wa-tooltip for="toggle-button" trigger="click">Click again to dismiss</wa-tooltip>
Manual Trigger
<wa-button style="margin-right: 4rem;" (click)="toggleTooltip()">Toggle Manually</wa-button>
<wa-tooltip for="manual-trigger-tooltip" trigger="manual" #manualTooltip>This is an avatar!</wa-tooltip>
<wa-avatar id="manual-trigger-tooltip" label="User"></wa-avatar>
@Component({
// ...
})
export class TooltipManualExample {
@ViewChild('manualTooltip') tooltip!: WaTooltipDirective;
toggleTooltip() {
if (this.tooltip.open) {
this.tooltip.hide();
} else {
this.tooltip.show();
}
}
}
Removing Arrows
<wa-button id="no-arrow">No Arrow</wa-button>
<wa-tooltip for="no-arrow" [withoutArrow]="true">This is a tooltip with no arrow</wa-tooltip>
You can also remove arrows globally by setting the CSS custom property:
:root {
--wa-tooltip-arrow-size: 0;
}
HTML in Tooltips
<wa-button id="rich-tooltip">Hover me</wa-button>
<wa-tooltip for="rich-tooltip">
<div>I'm not <strong>just</strong> a tooltip, I'm a <em>tooltip</em> with HTML!</div>
</wa-tooltip>
Setting a Maximum Width
<wa-tooltip for="wrapping-tooltip" [maxWidth]="'80px'">
This tooltip will wrap after only 80 pixels.
</wa-tooltip>
<wa-button id="wrapping-tooltip">Hover me</wa-button>
Custom Distance and Skidding
<!-- Custom distance from target -->
<wa-button id="tooltip-distance">Distance</wa-button>
<wa-tooltip for="tooltip-distance" [distance]="16">16px away from target</wa-tooltip>
<!-- Custom skidding (offset along the target) -->
<wa-button id="tooltip-skidding">Skidding</wa-button>
<wa-tooltip for="tooltip-skidding" [skidding]="10">Offset 10px along the target</wa-tooltip>
<!-- Combined distance and skidding -->
<wa-button id="tooltip-combined">Combined</wa-button>
<wa-tooltip for="tooltip-combined" [distance]="20" [skidding]="-15">Custom positioning</wa-tooltip>
Custom Delays
<!-- Custom show delay -->
<wa-button id="tooltip-show-delay">Slow to appear</wa-button>
<wa-tooltip for="tooltip-show-delay" [showDelay]="500">Appears after 500ms</wa-tooltip>
<!-- Custom hide delay -->
<wa-button id="tooltip-hide-delay">Slow to disappear</wa-button>
<wa-tooltip for="tooltip-hide-delay" [hideDelay]="1000">Disappears after 1000ms</wa-tooltip>
Custom Styling
<!-- Custom background color -->
<wa-button id="tooltip-bg">Custom background</wa-button>
<wa-tooltip for="tooltip-bg" [backgroundColor]="'#3f51b5'">Blue background</wa-tooltip>
<!-- Custom border radius -->
<wa-button id="tooltip-radius">Custom radius</wa-button>
<wa-tooltip for="tooltip-radius" [borderRadius]="'0'">Square tooltip</wa-tooltip>
<!-- Custom max width -->
<wa-button id="tooltip-width">Custom width</wa-button>
<wa-tooltip for="tooltip-width" [maxWidth]="'300px'">This tooltip can be up to 300px wide, which is useful for longer content that would otherwise be truncated.</wa-tooltip>
<!-- Custom padding -->
<wa-button id="tooltip-padding">Custom padding</wa-button>
<wa-tooltip for="tooltip-padding" [padding]="'16px'">More spacious tooltip</wa-tooltip>
<!-- Custom arrow size -->
<wa-button id="tooltip-arrow">Custom arrow</wa-button>
<wa-tooltip for="tooltip-arrow" [arrowSize]="'12px'">Tooltip with larger arrow</wa-tooltip>
<!-- Combined custom styling -->
<wa-button id="tooltip-custom">Fully customized</wa-button>
<wa-tooltip
for="tooltip-custom"
[backgroundColor]="'#212121'"
[borderRadius]="'8px'"
[maxWidth]="'250px'"
[padding]="'12px'"
[arrowSize]="'8px'"
>
A fully customized tooltip with dark background, rounded corners, custom width, padding, and arrow size.
</wa-tooltip>
Event Handling
import { Component } from '@angular/core';
import { WaTooltipDirective } from '@angular-awesome/directives/tooltip';
@Component({
selector: 'app-tooltip-events-demo',
template: `
<wa-button id="tooltip-events">Hover for events</wa-button>
<wa-tooltip
for="tooltip-events"
(waShow)="onShow($event)"
(waAfterShow)="onAfterShow($event)"
(waHide)="onHide($event)"
(waAfterHide)="onAfterHide($event)"
>
This tooltip triggers events
</wa-tooltip>
<div class="event-log">
<p>Last event: {{ lastEvent }}</p>
</div>
`,
standalone: true,
imports: [WaTooltipDirective]
})
export class TooltipEventsDemoComponent {
lastEvent = 'None';
onShow(event: CustomEvent) {
this.lastEvent = 'Show started';
console.log('Tooltip show started');
}
onAfterShow(event: CustomEvent) {
this.lastEvent = 'Show completed';
console.log('Tooltip show completed');
}
onHide(event: CustomEvent) {
this.lastEvent = 'Hide started';
console.log('Tooltip hide started');
}
onAfterHide(event: CustomEvent) {
this.lastEvent = 'Hide completed';
console.log('Tooltip hide completed');
}
}
Dynamic Content
import { Component } from '@angular/core';
import { WaTooltipDirective } from '@angular-awesome/directives/tooltip';
@Component({
selector: 'app-dynamic-tooltip-demo',
template: `
<div class="user-list">
<div
*ngFor="let user of users; let i = index"
class="user-item"
[id]="'user-' + i"
>
{{ user.name }}
</div>
<wa-tooltip
*ngFor="let user of users; let i = index"
[for]="'user-' + i"
>
<div class="user-tooltip">
<h3>{{ user.name }}</h3>
<p>Email: {{ user.email }}</p>
<p>Role: {{ user.role }}</p>
</div>
</wa-tooltip>
</div>
`,
standalone: true,
imports: [WaTooltipDirective]
})
export class DynamicTooltipDemoComponent {
users = [
{ name: 'John Doe', email: 'john@example.com', role: 'Admin' },
{ name: 'Jane Smith', email: 'jane@example.com', role: 'Editor' },
{ name: 'Bob Johnson', email: 'bob@example.com', role: 'Viewer' }
];
}