Ionic Advanced Tooltip (@phazric/ionic-adv-tooltip)

November 14, 2025 · View on GitHub

Rich, media-friendly tooltip/popover for Ionic Angular: render templates, images, videos, or even a live component preview inside a lightweight tooltip.
Works on any host (span, ion-item, ion-chip, ion-button, ...).
Angular 16–20 · Ionic 6–8

npm version Angular Ionic License


✨ Features

  • 🧩 Drop-in directive: iatTooltip (template) or iatTooltipText (plain text)
  • 🖼️ Rich content: images, videos, GIFs, arbitrary HTML
  • 🧪 Component preview: render any Angular component inside the tooltip
  • 🎯 Positioning: top | bottom | left | right | auto, with start | center | end alignment
  • 🕒 Timings: open delay, close delay, optional auto-hide on touch
  • 🖱️ Click-through by default (tooltips don’t block target clicks)
  • 🧱 Standalone or NgModule friendly
  • ⚙️ Type-safe API and small footprint

📦 Installation

npm i ionic-adv-tooltip

Then import the directive:

import { AdvTooltipDirective } from 'ionic-adv-tooltip';

@Component({
  selector: 'app-demo',
  standalone: true,
  imports: [AdvTooltipDirective],
  templateUrl: './demo.component.html',
})
export class DemoComponent {}

🚀 Usage Examples

1️⃣ Simple text tooltip

<ion-button iatTooltipText="Save changes">
  <ion-icon name="save-outline"></ion-icon>
</ion-button>

2️⃣ Template-based tooltip

<ion-chip [iatTooltip]="tpl">Hover me</ion-chip>

<ng-template #tpl>
  <img src="assets/preview.png" width="120">
  <div>Preview image</div>
</ng-template>

3️⃣ Component tooltip

<div
  [iatEnableComponent]="true"
  [iatComponent]="TestComponent"
  [iatComponentInputs]="{ title: 'Hello Tooltip' }"
  [iatDirection]="'right'"
  [iatMaxWidth]="260"
  >
  Hover here
</div>
import { Component} from '@angular/core';
import { AdvTooltipDirective } from 'ionic-adv-tooltip';
import { TestComponent } from '../test/test.component';

@Component({
  selector: 'app-home',
  standalone: true,
  imports: [AdvTooltipDirective], 
  templateUrl: './home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

  protected  TestComponent = TestComponent

}


import { Component, Input, OnInit } from '@angular/core';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  standalone: true,
  styleUrls: ['./test.component.scss'],
})
export class TestComponent  implements OnInit {
  @Input() title: string = 'Default title';

  constructor() { }

  ngOnInit() {}

}

If you are using NgModules instead of standalone components, make sure you also import the directive and the preview component in the parent module where the tooltip is used:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';

import { HomePage } from './home.page';
import { AdvTooltipDirective } from 'ionic-adv-tooltip';
import { TestComponent } from '../test/test.component';

@NgModule({
  declarations: [HomePage],
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    AdvTooltipDirective,
    TestComponent
  ]
})
export class HomePageModule {}



⚙️ Directive Inputs

ParameterDescription
iatTooltipRich content via Angular ng-template (images, HTML, etc.). Use [iatTooltip]="myTpl".
iatTooltipTextPlain text tooltip content.
iatEnableComponentEnables live Angular component rendering inside tooltip.
iatComponentComponent type to render when iatEnableComponent is true.
iatComponentInputsObject containing inputs for the rendered component.
iatInteractiveIf true, tooltip is clickable; otherwise pointer-events are disabled (default).
iatOpenDelayDelay before opening (ms). Default: 150.
iatCloseDelayDelay before closing (ms). Default: 0.
iatAutoHideMsAuto-hide timeout (ms) after touch open. Use 0 to disable. Default: 1800.
iatMaxWidthLegacy width (px). Prefer iatPopoverWidth for precise sizing. Default: 280.
iatDirectionTooltip side: 'auto', 'top', 'bottom', 'left', 'right'. Default: 'auto'.
iatAlignAlignment: 'start', 'center', 'end'. Default: 'center'.
iatPopoverBgBackground color (e.g., '#222', rgba(...), or var(--ion-color-light)).
iatPopoverWidthTooltip width (number = px, or string with CSS units like '28rem', '80vw').
iatPopoverMinWidthMinimum width.
iatPopoverMaxWidthMaximum width.
iatPopoverHeightTooltip height (number or CSS string).
iatPopoverMinHeightMinimum height.
iatPopoverMaxHeightMaximum height.
iatEnterEnter animation: 'fade', 'scale', 'up', 'right', 'pop'.
iatExitExit animation: 'fade', 'scale', 'down', 'left', 'shrink'.
iatAnimDurationMsAnimation duration (ms). Default: 180.
iatAnimEasingAnimation easing (e.g., 'cubic-bezier(.2,.8,.2,1)').

🧱 Backward Compatibility

AliasMaps to
appTooltipiatTooltip
appTooltipTextiatTooltipText
appTooltipDelayiatOpenDelay
appTooltipCloseDelayiatCloseDelay
appTooltipAutoHideMsiatAutoHideMs
appTooltipMaxWidthiatMaxWidth
appTooltipDirectioniatDirection
appTooltipAligniatAlign

🧩 Compatibility

  • ✅ Angular 16 → 20
  • ✅ Ionic 6 → 8
  • ✅ Works in Standalone Components and NgModules
  • ✅ SSR-safe (no direct DOM assumptions)

📜 License

MIT © Phazric