{"version":3,"file":"ngx-com-components-tooltip.mjs","sources":["../../../projects/com/components/tooltip/tooltip.variants.ts","../../../projects/com/components/tooltip/tooltip.utils.ts","../../../projects/com/components/tooltip/tooltip-panel.component.ts","../../../projects/com/components/tooltip/tooltip.directive.ts","../../../projects/com/components/tooltip/index.ts","../../../projects/com/components/tooltip/ngx-com-components-tooltip.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { TooltipColor, TooltipSize, TooltipSide } from './tooltip.models';\n\n/**\n * CVA variants for the tooltip panel wrapper.\n *\n * @tokens `--color-tooltip`, `--color-tooltip-foreground`, `--color-primary`, `--color-primary-foreground`,\n *         `--color-accent`, `--color-accent-foreground`, `--color-warn`, `--color-warn-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border`\n */\nexport const tooltipPanelVariants: (props?: {\n  color?: TooltipColor;\n  size?: TooltipSize;\n}) => string = cva(\n  [\n    'com-tooltip-panel',\n    'z-50',\n    'pointer-events-auto',\n    'select-none',\n    'leading-normal',\n  ],\n  {\n    variants: {\n      color: {\n        default: 'bg-tooltip text-tooltip-foreground',\n        primary: 'bg-primary text-primary-foreground',\n        accent: 'bg-accent text-accent-foreground',\n        warn: 'bg-warn text-warn-foreground',\n        invert: 'bg-popover text-popover-foreground border border-border shadow-overlay',\n      },\n      size: {\n        sm: 'px-2 py-1 text-xs max-w-48 rounded-popover',\n        md: 'px-3 py-1.5 text-sm max-w-64 rounded-popover',\n        lg: 'px-4 py-2.5 text-sm max-w-80 rounded-popover',\n      },\n    },\n    defaultVariants: {\n      color: 'default',\n      size: 'md',\n    },\n  },\n);\n\n/**\n * CVA variants for the tooltip arrow element.\n * The arrow points toward the trigger element.\n *\n * @tokens `--color-tooltip`, `--color-primary`, `--color-accent`, `--color-warn`,\n *         `--color-popover`, `--color-border`\n */\nexport const tooltipArrowVariants: (props?: {\n  color?: TooltipColor;\n  side?: TooltipSide;\n}) => string = cva('absolute size-2 rotate-45', {\n  variants: {\n    color: {\n      default: 'bg-tooltip',\n      primary: 'bg-primary',\n      accent: 'bg-accent',\n      warn: 'bg-warn',\n      invert: 'bg-popover border-l border-t border-border',\n    },\n    side: {\n      // Arrow points DOWN (tooltip is above trigger)\n      top: 'left-1/2 -translate-x-1/2 bottom-0 translate-y-1/2',\n      // Arrow points UP (tooltip is below trigger)\n      bottom: 'left-1/2 -translate-x-1/2 top-0 -translate-y-1/2',\n      // Arrow points RIGHT (tooltip is left of trigger)\n      left: 'top-1/2 -translate-y-1/2 right-px translate-x-1/2',\n      // Arrow points LEFT (tooltip is right of trigger)\n      right: 'top-1/2 -translate-y-1/2 left-px -translate-x-1/2',\n    },\n  },\n  compoundVariants: [\n    // Invert arrow needs different rotation for border visibility\n    { color: 'invert', side: 'top', class: 'rotate-[225deg]' },\n    { color: 'invert', side: 'bottom', class: 'rotate-45' },\n    { color: 'invert', side: 'left', class: 'rotate-[135deg]' },\n    { color: 'invert', side: 'right', class: '-rotate-45' },\n  ],\n  defaultVariants: {\n    color: 'default',\n    side: 'top',\n  },\n});\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet tooltipIdCounter = 0;\n\n/**\n * Generate a unique ID for a tooltip instance.\n */\nexport function generateTooltipId(): string {\n  return `tooltip-${++tooltipIdCounter}`;\n}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport type { Signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { tooltipPanelVariants, tooltipArrowVariants } from './tooltip.variants';\nimport type { TooltipColor, TooltipSize, TooltipSide, TooltipTemplateContext } from './tooltip.models';\nimport { mergeClasses } from './tooltip.utils';\n\n/**\n * Internal tooltip panel component rendered inside the CDK overlay.\n * Receives content (string or template) and variant inputs from the directive.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-tooltip`, `--color-tooltip-foreground`, `--color-primary`, `--color-primary-foreground`,\n *         `--color-accent`, `--color-accent-foreground`, `--color-warn`, `--color-warn-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border`\n */\n@Component({\n  selector: 'com-tooltip-panel',\n  template: `\n    <div\n      class=\"relative\"\n      [attr.data-state]=\"visible() ? 'visible' : 'hidden'\"\n      [attr.data-side]=\"activeSide()\"\n    >\n      @if (showArrow()) {\n        <span [class]=\"arrowClasses()\" aria-hidden=\"true\"></span>\n      }\n      <div\n        [class]=\"panelClasses()\"\n        role=\"tooltip\"\n        [attr.id]=\"tooltipId()\"\n      >\n        @if (templateRef()) {\n          <ng-container\n            [ngTemplateOutlet]=\"templateRef()!\"\n            [ngTemplateOutletContext]=\"templateContext()\"\n          />\n        } @else {\n          {{ textContent() }}\n        }\n      </div>\n    </div>\n  `,\n  styles: `\n    :host {\n      display: contents;\n    }\n\n    /* Animation styles */\n    [data-state='visible'] {\n      animation: tooltip-in 120ms ease-out;\n    }\n\n    [data-state='hidden'] {\n      animation: tooltip-out 80ms ease-in forwards;\n    }\n\n    /* Transform origin based on side */\n    [data-side='top'] {\n      transform-origin: bottom center;\n    }\n\n    [data-side='bottom'] {\n      transform-origin: top center;\n    }\n\n    [data-side='left'] {\n      transform-origin: right center;\n    }\n\n    [data-side='right'] {\n      transform-origin: left center;\n    }\n\n    @keyframes tooltip-in {\n      from {\n        opacity: 0;\n        transform: scale(0.95);\n      }\n      to {\n        opacity: 1;\n        transform: scale(1);\n      }\n    }\n\n    @keyframes tooltip-out {\n      from {\n        opacity: 1;\n        transform: scale(1);\n      }\n      to {\n        opacity: 0;\n        transform: scale(0.95);\n      }\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      [data-state='visible'],\n      [data-state='hidden'] {\n        animation: none;\n      }\n    }\n  `,\n  imports: [NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TooltipPanelComponent {\n  /** Plain text content to display. */\n  readonly textContent: WritableSignal<string> = signal('');\n\n  /** Optional template for rich content. */\n  readonly templateRef: WritableSignal<TemplateRef<TooltipTemplateContext> | null> = signal(null);\n\n  /** Color variant. */\n  readonly color: WritableSignal<TooltipColor> = signal<TooltipColor>('default');\n\n  /** Size variant. */\n  readonly size: WritableSignal<TooltipSize> = signal<TooltipSize>('md');\n\n  /** Whether to show the arrow. */\n  readonly showArrow: WritableSignal<boolean> = signal(true);\n\n  /** Which side the tooltip is positioned on. */\n  readonly activeSide: WritableSignal<TooltipSide> = signal<TooltipSide>('top');\n\n  /** Unique ID for accessibility. */\n  readonly tooltipId: WritableSignal<string> = signal('');\n\n  /** Whether the tooltip is visible (for animation state). */\n  readonly visible: WritableSignal<boolean> = signal(false);\n\n  /** Function to hide the tooltip (passed to template context). */\n  readonly hideFn: WritableSignal<() => void> = signal(() => {});\n\n  /** Computed template context. */\n  protected readonly templateContext: Signal<TooltipTemplateContext> = computed(() => ({\n    $implicit: this.textContent(),\n    hide: this.hideFn(),\n  }));\n\n  /** Computed panel CSS classes. */\n  protected readonly panelClasses: Signal<string> = computed(() =>\n    mergeClasses(\n      tooltipPanelVariants({\n        color: this.color(),\n        size: this.size(),\n      }),\n    ),\n  );\n\n  /** Computed arrow CSS classes. */\n  protected readonly arrowClasses: Signal<string> = computed(() =>\n    mergeClasses(\n      tooltipArrowVariants({\n        color: this.color(),\n        side: this.activeSide(),\n      }),\n    ),\n  );\n}\n","import {\n  booleanAttribute,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  numberAttribute,\n  output,\n  PLATFORM_ID,\n  Renderer2,\n  signal,\n  ViewContainerRef,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  InputSignalWithTransform,\n  OutputEmitterRef,\n  TemplateRef,\n  WritableSignal,\n} from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport type { ConnectedPosition, ConnectedOverlayPositionChange, ConnectionPositionPair, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { TooltipPanelComponent } from './tooltip-panel.component';\nimport { generateTooltipId } from './tooltip.utils';\nimport type {\n  TooltipColor,\n  TooltipPosition,\n  TooltipSize,\n  TooltipSide,\n  TooltipTemplateContext,\n  TooltipTouchGestures,\n} from './tooltip.models';\n\n/** Default show delay in milliseconds. */\nconst DEFAULT_SHOW_DELAY = 200;\n\n/** Default hide delay in milliseconds. */\nconst DEFAULT_HIDE_DELAY = 100;\n\n/** Offset between trigger and tooltip in pixels. */\nconst TOOLTIP_OFFSET = 8;\n\n/** Viewport margin in pixels. */\nconst VIEWPORT_MARGIN = 8;\n\n/**\n * Build position strategy entries for the tooltip.\n * Primary position is the preferred direction, with fallbacks.\n */\nfunction buildTooltipPositions(position: TooltipPosition): ConnectedPosition[] {\n  const positions: Record<TooltipPosition, ConnectedPosition[]> = {\n    top: [\n      // Top center (preferred)\n      { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_OFFSET },\n      // Bottom center (flip)\n      { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_OFFSET },\n      // Right center (fallback)\n      { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_OFFSET },\n      // Left center (fallback)\n      { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_OFFSET },\n    ],\n    bottom: [\n      { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_OFFSET },\n      { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_OFFSET },\n      { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_OFFSET },\n      { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_OFFSET },\n    ],\n    left: [\n      { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_OFFSET },\n      { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_OFFSET },\n      { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_OFFSET },\n      { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_OFFSET },\n    ],\n    right: [\n      { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_OFFSET },\n      { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_OFFSET },\n      { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_OFFSET },\n      { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_OFFSET },\n    ],\n  };\n\n  return positions[position];\n}\n\n/**\n * Derive the tooltip side from a position change event.\n */\nfunction deriveSideFromPosition(pair: ConnectionPositionPair): TooltipSide {\n  if (pair.originY === 'top' && pair.overlayY === 'bottom') return 'top';\n  if (pair.originY === 'bottom' && pair.overlayY === 'top') return 'bottom';\n  if (pair.originX === 'start' && pair.overlayX === 'end') return 'left';\n  if (pair.originX === 'end' && pair.overlayX === 'start') return 'right';\n  return 'top';\n}\n\n/**\n * Tooltip directive — displays supplementary information on hover/focus.\n *\n * Applied as an attribute directive to any trigger element. The tooltip panel\n * is rendered via CDK Overlay when triggered by mouse hover, keyboard focus,\n * or programmatically.\n *\n * @tokens `--color-tooltip`, `--color-tooltip-foreground`, `--color-primary`, `--color-primary-foreground`,\n *         `--color-accent`, `--color-accent-foreground`, `--color-warn`, `--color-warn-foreground`,\n *         `--color-popover`, `--color-popover-foreground`, `--color-border`\n *\n * @example Simple text tooltip\n * ```html\n * <button comTooltip=\"Save your changes\">\n *   <com-icon name=\"save\" />\n * </button>\n * ```\n *\n * @example Positioned\n * ```html\n * <button comTooltip=\"Settings\" comTooltipPosition=\"right\">\n *   <com-icon name=\"settings\" />\n * </button>\n * ```\n *\n * @example Color variants\n * ```html\n * <com-icon name=\"alert-triangle\" comTooltip=\"3 warnings found\" comTooltipColor=\"warn\" />\n * ```\n *\n * @example Custom template\n * ```html\n * <button\n *   comTooltip=\"Keyboard shortcuts\"\n *   [comTooltipTpl]=\"shortcutsTpl\"\n *   comTooltipSize=\"lg\"\n * >\n *   <com-icon name=\"keyboard\" />\n * </button>\n *\n * <ng-template #shortcutsTpl let-hide=\"hide\">\n *   <div class=\"flex flex-col gap-1\">\n *     <span>Press Ctrl+S to save</span>\n *     <button (click)=\"hide()\">Got it</button>\n *   </div>\n * </ng-template>\n * ```\n *\n * @example Programmatic control\n * ```html\n * <input\n *   #tooltipRef=\"comTooltip\"\n *   comTooltip=\"Invalid email\"\n *   comTooltipColor=\"warn\"\n *   [comTooltipDisabled]=\"true\"\n * />\n * ```\n *\n * ```ts\n * // Show tooltip on validation error\n * if (emailInvalid) {\n *   this.tooltipRef.show();\n * }\n * ```\n */\n@Directive({\n  selector: '[comTooltip]',\n  exportAs: 'comTooltip',\n  host: {\n    '(mouseenter)': 'onMouseEnter()',\n    '(mouseleave)': 'onMouseLeave()',\n    '(focusin)': 'onFocusIn()',\n    '(focusout)': 'onFocusOut()',\n    '(keydown.escape)': 'onEscapeKey()',\n    '(touchstart)': 'onTouchStart($event)',\n  },\n})\nexport class ComTooltip {\n  private readonly overlay = inject(Overlay);\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly viewContainerRef = inject(ViewContainerRef);\n  private readonly injector = inject(Injector);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly renderer = inject(Renderer2);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly document = inject(DOCUMENT);\n\n  private overlayRef: OverlayRef | null = null;\n  private panelInstance: TooltipPanelComponent | null = null;\n  private showTimeoutId: ReturnType<typeof setTimeout> | null = null;\n  private hideTimeoutId: ReturnType<typeof setTimeout> | null = null;\n  private touchTimeoutId: ReturnType<typeof setTimeout> | null = null;\n  private readonly tooltipId = generateTooltipId();\n\n  /** Current active side (updated from position changes). */\n  private readonly activeSide: WritableSignal<TooltipSide> = signal<TooltipSide>('top');\n\n  /** Whether the tooltip is currently visible. */\n  private readonly isVisible: WritableSignal<boolean> = signal(false);\n\n  // ─── Content Inputs ───\n\n  /** Simple text content for the tooltip. Also serves as the directive selector. */\n  readonly comTooltip: InputSignal<string> = input.required<string>();\n\n  /** Custom template for rich tooltip content. Takes precedence over text when provided. */\n  readonly comTooltipTpl: InputSignal<TemplateRef<TooltipTemplateContext> | null> =\n    input<TemplateRef<TooltipTemplateContext> | null>(null);\n\n  // ─── Positioning Inputs ───\n\n  /** Preferred position direction. Default: 'top'. */\n  readonly comTooltipPosition: InputSignal<TooltipPosition> = input<TooltipPosition>('top');\n\n  // ─── Behavior Inputs ───\n\n  /** Delay in ms before showing the tooltip. Default: 200. */\n  readonly comTooltipShowDelay: InputSignalWithTransform<number, unknown> = input(DEFAULT_SHOW_DELAY, {\n    transform: numberAttribute,\n  });\n\n  /** Delay in ms before hiding the tooltip. Default: 100. */\n  readonly comTooltipHideDelay: InputSignalWithTransform<number, unknown> = input(DEFAULT_HIDE_DELAY, {\n    transform: numberAttribute,\n  });\n\n  /** Disable the tooltip entirely. Default: false. */\n  readonly comTooltipDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Touch device handling. Default: 'auto'. */\n  readonly comTooltipTouchGestures: InputSignal<TooltipTouchGestures> = input<TooltipTouchGestures>('auto');\n\n  // ─── Variant Inputs ───\n\n  /** Color variant. Default: 'default'. */\n  readonly comTooltipColor: InputSignal<TooltipColor> = input<TooltipColor>('default');\n\n  /** Size variant. Default: 'md'. */\n  readonly comTooltipSize: InputSignal<TooltipSize> = input<TooltipSize>('md');\n\n  /** Whether to show the arrow/caret. Default: true. */\n  readonly comTooltipHasArrow: InputSignalWithTransform<boolean, unknown> = input(true, {\n    transform: booleanAttribute,\n  });\n\n  // ─── Outputs ───\n\n  /** Emitted when the tooltip becomes visible (after delay + animation). */\n  readonly comTooltipShown: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when the tooltip is fully hidden. */\n  readonly comTooltipHidden: OutputEmitterRef<void> = output<void>();\n\n  constructor() {\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      this.clearTimers();\n      this.disposeOverlay();\n    });\n  }\n\n  // ─── Public API ───\n\n  /** Programmatically show the tooltip (ignores disabled state for error validation use cases). */\n  show(): void {\n    if (this.isVisible()) return;\n    this.clearTimers();\n    this.createOverlay();\n    this.attachPanel();\n  }\n\n  /** Programmatically hide the tooltip. */\n  hide(): void {\n    if (!this.isVisible()) return;\n    this.clearTimers();\n    this.detachPanel();\n  }\n\n  // ─── Event Handlers ───\n\n  protected onMouseEnter(): void {\n    if (this.comTooltipDisabled()) return;\n    this.scheduleShow(this.comTooltipShowDelay());\n  }\n\n  protected onMouseLeave(): void {\n    this.scheduleHide(this.comTooltipHideDelay());\n  }\n\n  protected onFocusIn(): void {\n    if (this.comTooltipDisabled()) return;\n    // Keyboard users get instant feedback\n    this.scheduleShow(0);\n  }\n\n  protected onFocusOut(): void {\n    this.scheduleHide(this.comTooltipHideDelay());\n  }\n\n  protected onEscapeKey(): void {\n    if (this.isVisible()) {\n      this.hide();\n    }\n  }\n\n  protected onTouchStart(_event: TouchEvent): void {\n    const touchMode = this.comTooltipTouchGestures();\n    if (touchMode === 'off' || this.comTooltipDisabled()) return;\n\n    // Long-press to show (500ms)\n    this.clearTimers();\n    this.touchTimeoutId = setTimeout(() => {\n      this.show();\n\n      // Set up tap-elsewhere to hide\n      const touchEndHandler = (e: Event): void => {\n        const touch = (e as TouchEvent).changedTouches?.[0];\n        if (touch) {\n          const target = this.document.elementFromPoint(touch.clientX, touch.clientY);\n          if (!this.overlayRef?.overlayElement.contains(target)) {\n            this.hide();\n          }\n        }\n        this.document.removeEventListener('touchend', touchEndHandler);\n      };\n      this.document.addEventListener('touchend', touchEndHandler);\n    }, 500);\n\n    // Cancel long-press if finger moves\n    const touchMoveHandler = (): void => {\n      this.clearTouchTimeout();\n      this.document.removeEventListener('touchmove', touchMoveHandler);\n    };\n    this.document.addEventListener('touchmove', touchMoveHandler);\n\n    // Cancel long-press if finger lifts before timeout\n    const touchEndCancelHandler = (): void => {\n      this.clearTouchTimeout();\n      this.document.removeEventListener('touchend', touchEndCancelHandler);\n    };\n    this.document.addEventListener('touchend', touchEndCancelHandler);\n  }\n\n  // ─── Panel Mouse Events ───\n\n  /** Called when mouse enters the tooltip panel. */\n  private onPanelMouseEnter(): void {\n    // Cancel hide timer when hovering over panel (for interactive templates)\n    this.clearHideTimeout();\n  }\n\n  /** Called when mouse leaves the tooltip panel. */\n  private onPanelMouseLeave(): void {\n    this.scheduleHide(this.comTooltipHideDelay());\n  }\n\n  // ─── Timer Management ───\n\n  private scheduleShow(delay: number): void {\n    this.clearTimers();\n    if (delay === 0) {\n      this.createOverlay();\n      this.attachPanel();\n    } else {\n      this.showTimeoutId = setTimeout(() => {\n        this.createOverlay();\n        this.attachPanel();\n      }, delay);\n    }\n  }\n\n  private scheduleHide(delay: number): void {\n    this.clearShowTimeout();\n    if (!this.isVisible()) return;\n\n    if (delay === 0) {\n      this.detachPanel();\n    } else {\n      this.hideTimeoutId = setTimeout(() => {\n        this.detachPanel();\n      }, delay);\n    }\n  }\n\n  private clearTimers(): void {\n    this.clearShowTimeout();\n    this.clearHideTimeout();\n    this.clearTouchTimeout();\n  }\n\n  private clearShowTimeout(): void {\n    if (this.showTimeoutId !== null) {\n      clearTimeout(this.showTimeoutId);\n      this.showTimeoutId = null;\n    }\n  }\n\n  private clearHideTimeout(): void {\n    if (this.hideTimeoutId !== null) {\n      clearTimeout(this.hideTimeoutId);\n      this.hideTimeoutId = null;\n    }\n  }\n\n  private clearTouchTimeout(): void {\n    if (this.touchTimeoutId !== null) {\n      clearTimeout(this.touchTimeoutId);\n      this.touchTimeoutId = null;\n    }\n  }\n\n  // ─── Overlay Management ───\n\n  private createOverlay(): void {\n    if (this.overlayRef) return;\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(this.elementRef)\n      .withPositions(buildTooltipPositions(this.comTooltipPosition()))\n      .withFlexibleDimensions(false)\n      .withPush(true)\n      .withViewportMargin(VIEWPORT_MARGIN);\n\n    const scrollStrategy = this.overlay.scrollStrategies.reposition({ autoClose: true });\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy,\n      panelClass: 'com-tooltip-overlay',\n      hasBackdrop: false,\n    });\n\n    // Track position changes for arrow orientation\n    (positionStrategy as FlexibleConnectedPositionStrategy).positionChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((change: ConnectedOverlayPositionChange) => {\n        const side = deriveSideFromPosition(change.connectionPair);\n        this.activeSide.set(side);\n        if (this.panelInstance) {\n          this.panelInstance.activeSide.set(side);\n        }\n      });\n\n    // Close when overlay detaches\n    this.overlayRef\n      .detachments()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.handleDetachment();\n      });\n  }\n\n  private attachPanel(): void {\n    if (!this.overlayRef || this.overlayRef.hasAttached()) return;\n\n    const portal = new ComponentPortal(TooltipPanelComponent, this.viewContainerRef, this.injector);\n    const componentRef = this.overlayRef.attach(portal);\n    this.panelInstance = componentRef.instance;\n\n    // Configure panel inputs\n    this.panelInstance.textContent.set(this.comTooltip());\n    this.panelInstance.templateRef.set(this.comTooltipTpl());\n    this.panelInstance.color.set(this.comTooltipColor());\n    this.panelInstance.size.set(this.comTooltipSize());\n    this.panelInstance.showArrow.set(this.comTooltipHasArrow());\n    this.panelInstance.activeSide.set(this.activeSide());\n    this.panelInstance.tooltipId.set(this.tooltipId);\n    this.panelInstance.hideFn.set(() => this.hide());\n\n    // Set up panel mouse events for interactive templates\n    const overlayElement = this.overlayRef.overlayElement;\n    this.renderer.listen(overlayElement, 'mouseenter', () => this.onPanelMouseEnter());\n    this.renderer.listen(overlayElement, 'mouseleave', () => this.onPanelMouseLeave());\n\n    // Set ARIA on trigger\n    this.renderer.setAttribute(this.elementRef.nativeElement, 'aria-describedby', this.tooltipId);\n\n    // Trigger show animation after a microtask (allows initial styles to apply)\n    requestAnimationFrame(() => {\n      if (this.panelInstance) {\n        this.panelInstance.visible.set(true);\n      }\n    });\n\n    this.isVisible.set(true);\n    this.comTooltipShown.emit();\n  }\n\n  private detachPanel(): void {\n    if (!this.panelInstance) return;\n\n    // Trigger hide animation\n    this.panelInstance.visible.set(false);\n\n    // Wait for animation to complete before detaching\n    setTimeout(() => {\n      this.disposeOverlay();\n    }, 80); // Match animation duration\n  }\n\n  private handleDetachment(): void {\n    // Remove ARIA from trigger\n    this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n\n    this.isVisible.set(false);\n    this.panelInstance = null;\n    this.comTooltipHidden.emit();\n  }\n\n  private disposeOverlay(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n    this.panelInstance = null;\n    this.isVisible.set(false);\n\n    // Remove ARIA from trigger\n    this.renderer.removeAttribute(this.elementRef.nativeElement, 'aria-describedby');\n  }\n}\n","// Public API for the tooltip directive\n\n// Main directive\nexport { ComTooltip } from './tooltip.directive';\n\n// Types and interfaces\nexport type {\n  TooltipPosition,\n  TooltipColor,\n  TooltipSize,\n  TooltipTouchGestures,\n  TooltipTemplateContext,\n} from './tooltip.models';\n\n// Variants (for advanced customization)\nexport { tooltipPanelVariants, tooltipArrowVariants } from './tooltip.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}