{"version":3,"file":"ngx-com-components-toast.mjs","sources":["../../../projects/com/components/toast/toast.ref.ts","../../../projects/com/components/toast/toast.variants.ts","../../../projects/com/components/toast/toast.utils.ts","../../../projects/com/components/toast/toast.component.ts","../../../projects/com/components/toast/toast.providers.ts","../../../projects/com/components/toast/toast-container.component.ts","../../../projects/com/components/toast/toast.service.ts","../../../projects/com/components/toast/index.ts","../../../projects/com/components/toast/ngx-com-components-toast.ts"],"sourcesContent":["import { Observable, Subject } from 'rxjs';\nimport type { ComToastDismissEvent } from './toast.models';\n\n/**\n * Reference to an active toast notification.\n * Returned by `ComToastService` methods for programmatic control.\n */\nexport class ComToastRef {\n  private readonly dismissSubject = new Subject<ComToastDismissEvent>();\n  private readonly actionSubject = new Subject<void>();\n  private readonly dismissFn: () => void;\n  private dismissed = false;\n\n  constructor(dismissFn: () => void) {\n    this.dismissFn = dismissFn;\n  }\n\n  /** Programmatically dismiss the toast. */\n  dismiss(): void {\n    if (!this.dismissed) {\n      this.dismissFn();\n    }\n  }\n\n  /** Emits once when the toast is dismissed (for any reason). */\n  afterDismissed(): Observable<ComToastDismissEvent> {\n    return this.dismissSubject.asObservable();\n  }\n\n  /** Emits when the action button is clicked. */\n  afterAction(): Observable<void> {\n    return this.actionSubject.asObservable();\n  }\n\n  /** @internal */\n  _notifyDismissed(event: ComToastDismissEvent): void {\n    if (this.dismissed) return;\n    this.dismissed = true;\n    this.dismissSubject.next(event);\n    this.dismissSubject.complete();\n    this.actionSubject.complete();\n  }\n\n  /** @internal */\n  _notifyAction(): void {\n    this.actionSubject.next();\n  }\n}\n","import { cva } from 'class-variance-authority';\nimport type { ComToastType, ComToastPosition } from './toast.models';\n\n/**\n * CVA variants for an individual toast card.\n *\n * @tokens `--color-success`, `--color-success-foreground`,\n *         `--color-warn`, `--color-warn-foreground`,\n *         `--color-warn-subtle`, `--color-warn-subtle-foreground`,\n *         `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n *         `--color-border`, `--shadow-overlay`, `--radius-card`\n */\nexport const toastVariants: (props?: {\n  type?: ComToastType;\n}) => string = cva(\n  [\n    'flex',\n    'w-full',\n    'max-w-sm',\n    'items-start',\n    'gap-3',\n    'rounded-card',\n    'border',\n    'p-4',\n    'shadow-overlay',\n    'pointer-events-auto',\n    'relative',\n    'overflow-hidden',\n  ],\n  {\n    variants: {\n      type: {\n        success: 'bg-success text-success-foreground border-success',\n        warn: 'bg-warn-subtle text-warn-subtle-foreground border-warn',\n        error: 'bg-warn text-warn-foreground border-warn',\n        info: 'bg-primary-subtle text-primary-subtle-foreground border-primary',\n      },\n    },\n    defaultVariants: {\n      type: 'info',\n    },\n  },\n);\n\n/**\n * CVA variants for the toast container positioning.\n */\nexport const toastContainerVariants: (props?: {\n  position?: ComToastPosition;\n}) => string = cva(\n  [\n    'flex',\n    'gap-3',\n    'pointer-events-none',\n    'max-h-screen',\n    'p-4',\n  ],\n  {\n    variants: {\n      position: {\n        'top-right': 'flex-col items-end',\n        'top-left': 'flex-col items-start',\n        'top-center': 'flex-col items-center',\n        'bottom-right': 'flex-col-reverse items-end',\n        'bottom-left': 'flex-col-reverse items-start',\n        'bottom-center': 'flex-col-reverse items-center',\n      },\n    },\n    defaultVariants: {\n      position: 'bottom-right',\n    },\n  },\n);\n\n/**\n * CVA variants for the toast progress bar.\n */\nexport const toastProgressVariants: (props?: {\n  type?: ComToastType;\n}) => string = cva(\n  [\n    'absolute',\n    'bottom-0',\n    'left-0',\n    'h-0.5',\n    'rounded-pill',\n  ],\n  {\n    variants: {\n      type: {\n        success: 'bg-success-foreground-track',\n        warn: 'bg-warn-subtle-foreground-track',\n        error: 'bg-warn-foreground-track',\n        info: 'bg-primary-subtle-foreground-track',\n      },\n    },\n    defaultVariants: {\n      type: 'info',\n    },\n  },\n);\n\n/**\n * CVA variants for the toast close button.\n *\n * @tokens `--color-ring`, `--radius-card`,\n *         `--color-success-foreground-muted`, `--color-warn-subtle-foreground-muted`,\n *         `--color-warn-foreground-muted`, `--color-primary-subtle-foreground-muted`\n */\nexport const toastCloseButtonVariants: (props?: {\n  type?: ComToastType;\n}) => string = cva(\n  [\n    'shrink-0',\n    'rounded-card',\n    'p-0.5',\n    'transition-colors',\n    'outline-none',\n    'focus-visible:outline-2',\n    'focus-visible:outline-offset-2',\n    'focus-visible:outline-[--color-ring]',\n  ],\n  {\n    variants: {\n      type: {\n        success: 'text-success-foreground-muted hover:text-success-foreground',\n        warn: 'text-warn-subtle-foreground-muted hover:text-warn-subtle-foreground',\n        error: 'text-warn-foreground-muted hover:text-warn-foreground',\n        info: 'text-primary-subtle-foreground-muted hover:text-primary-subtle-foreground',\n      },\n    },\n    defaultVariants: {\n      type: 'info',\n    },\n  },\n);\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet toastIdCounter = 0;\n\n/**\n * Generate a unique ID for a toast notification.\n */\nexport function generateToastId(): number {\n  return ++toastIdCounter;\n}\n\n/** Default Lucide icon names per toast type. */\nexport const DEFAULT_TOAST_ICONS: Record<string, string> = {\n  success: 'circle-check',\n  warn: 'triangle-alert',\n  error: 'circle-x',\n  info: 'info',\n};\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport type { InputSignal, OutputEmitterRef, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport {\n  toastVariants,\n  toastProgressVariants,\n  toastCloseButtonVariants,\n} from './toast.variants';\nimport { mergeClasses, DEFAULT_TOAST_ICONS } from './toast.utils';\nimport type { ComToastState, ComToastTemplateContext } from './toast.models';\n\n/**\n * Internal toast notification component rendered inside the container.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-success`, `--color-success-foreground`,\n *         `--color-warn`, `--color-warn-foreground`,\n *         `--color-warn-subtle`, `--color-warn-subtle-foreground`,\n *         `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n *         `--color-border`, `--shadow-overlay`, `--radius-card`, `--color-ring`\n */\n@Component({\n  selector: 'com-toast',\n  template: `\n    <div\n      [class]=\"toastClasses()\"\n      [attr.role]=\"ariaRole()\"\n      [attr.aria-live]=\"ariaLive()\"\n      [attr.data-state]=\"state().visible ? 'open' : 'closed'\"\n      (animationend)=\"onAnimationEnd()\"\n    >\n      @if (state().data.customTemplate) {\n        <ng-container\n          [ngTemplateOutlet]=\"state().data.customTemplate!\"\n          [ngTemplateOutletContext]=\"templateContext()\"\n        />\n      } @else {\n        <com-icon\n          [name]=\"resolvedIcon()\"\n          size=\"md\"\n          class=\"mt-0.5 shrink-0\"\n          aria-hidden=\"true\"\n        />\n        <div class=\"flex-1 min-w-0\">\n          @if (state().data.title) {\n            <p data-part=\"title\" class=\"text-sm font-semibold\">{{ state().data.title }}</p>\n          }\n          <p data-part=\"message\" class=\"text-sm\" [class.mt-1]=\"state().data.title\">\n            {{ state().data.message }}\n          </p>\n          @if (state().data.action) {\n            <button\n              type=\"button\"\n              class=\"mt-2 text-sm font-medium underline underline-offset-4\n                     outline-none\n                     focus-visible:outline-2\n                     focus-visible:outline-offset-2\n                     focus-visible:outline-[--color-ring]\"\n              (click)=\"onAction.emit(state().id)\"\n            >\n              {{ state().data.action!.label }}\n            </button>\n          }\n        </div>\n        @if (state().showClose) {\n          <button\n            type=\"button\"\n            [class]=\"closeButtonClasses()\"\n            aria-label=\"Dismiss notification\"\n            (click)=\"onDismiss.emit(state().id)\"\n          >\n            <com-icon name=\"x\" size=\"sm\" aria-hidden=\"true\" />\n          </button>\n        }\n      }\n      @if (state().showProgress && state().duration > 0) {\n        <div\n          [class]=\"progressClasses()\"\n          [style.width.%]=\"state().remainingPercent\"\n        ></div>\n      }\n    </div>\n  `,\n  styles: `\n    :host {\n      display: contents;\n    }\n\n    [data-state='open'] {\n      --tw-enter-opacity: 0;\n      --tw-enter-translate-x: 0;\n      --tw-enter-translate-y: 0;\n    }\n\n    [data-state='closed'] {\n      --tw-exit-opacity: 0;\n      --tw-exit-translate-x: 0;\n      --tw-exit-translate-y: 0;\n    }\n\n    @media (prefers-reduced-motion: reduce) {\n      [data-state='open'],\n      [data-state='closed'] {\n        animation: none;\n      }\n    }\n  `,\n  imports: [NgTemplateOutlet, ComIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComToastComponent {\n  /** The toast state, set by the container. */\n  readonly state: InputSignal<ComToastState> = input.required<ComToastState>();\n\n  /** Emitted when the toast should be dismissed. */\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix -- intentional API naming for toast event delegation\n  readonly onDismiss: OutputEmitterRef<number> = output<number>();\n\n  /** Emitted when the action button is clicked. */\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix -- intentional API naming for toast event delegation\n  readonly onAction: OutputEmitterRef<number> = output<number>();\n\n  /** Emitted when the mouse enters the toast. */\n  readonly mouseEnter: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when the mouse leaves the toast. */\n  readonly mouseLeave: OutputEmitterRef<void> = output<void>();\n\n  /** Emitted when the exit animation completes. */\n  readonly animationDone: OutputEmitterRef<number> = output<number>();\n\n  /** Resolved icon name. */\n  protected readonly resolvedIcon: Signal<string> = computed(\n    () => this.state().data.icon ?? DEFAULT_TOAST_ICONS[this.state().type] ?? 'info',\n  );\n\n  /** ARIA role based on toast type. */\n  protected readonly ariaRole: Signal<string> = computed(() =>\n    this.state().type === 'error' ? 'alert' : 'status',\n  );\n\n  /** ARIA live region politeness. */\n  protected readonly ariaLive: Signal<string> = computed(() =>\n    this.state().type === 'error' ? 'assertive' : 'polite',\n  );\n\n  /** Computed toast card classes. */\n  protected readonly toastClasses: Signal<string> = computed(() =>\n    mergeClasses(\n      toastVariants({ type: this.state().type }),\n      this.state().visible\n        ? 'animate-in fade-in-0 slide-in-from-bottom-2'\n        : 'animate-out fade-out-0 slide-out-to-right-full',\n    ),\n  );\n\n  /** Computed progress bar classes. */\n  protected readonly progressClasses: Signal<string> = computed(() =>\n    mergeClasses(toastProgressVariants({ type: this.state().type })),\n  );\n\n  /** Computed close button classes. */\n  protected readonly closeButtonClasses: Signal<string> = computed(() =>\n    mergeClasses(toastCloseButtonVariants({ type: this.state().type })),\n  );\n\n  /** Template context for custom templates. */\n  protected readonly templateContext: Signal<ComToastTemplateContext> = computed(() => ({\n    $implicit: this.state().data,\n    dismiss: () => this.onDismiss.emit(this.state().id),\n    action: () => this.onAction.emit(this.state().id),\n  }));\n\n  protected onAnimationEnd(): void {\n    if (!this.state().visible) {\n      this.animationDone.emit(this.state().id);\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { Provider } from '@angular/core';\nimport type { ComToastConfig, ComToastContainerData } from './toast.models';\n\n/**\n * Injection token for global toast configuration.\n */\nexport const COM_TOAST_CONFIG: InjectionToken<ComToastConfig> =\n  new InjectionToken<ComToastConfig>('COM_TOAST_CONFIG');\n\n/**\n * Injection token for internal container communication.\n * @internal\n */\nexport const COM_TOAST_CONTAINER_DATA: InjectionToken<ComToastContainerData> =\n  new InjectionToken<ComToastContainerData>('COM_TOAST_CONTAINER_DATA');\n\n/**\n * Provides global toast configuration.\n *\n * @example\n * ```typescript\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideComToastConfig({ position: 'top-center', duration: 3000 }),\n *   ],\n * });\n * ```\n */\nexport function provideComToastConfig(config: ComToastConfig): Provider {\n  return { provide: COM_TOAST_CONFIG, useValue: config };\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n} from '@angular/core';\nimport type { Signal } from '@angular/core';\nimport { ComToastComponent } from './toast.component';\nimport { toastContainerVariants } from './toast.variants';\nimport { mergeClasses } from './toast.utils';\nimport { COM_TOAST_CONTAINER_DATA } from './toast.providers';\nimport type { ComToastContainerData, ComToastState } from './toast.models';\n\n/**\n * Internal toast container component that manages positioning and stacking.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-success`, `--color-success-foreground`,\n *         `--color-warn`, `--color-warn-foreground`,\n *         `--color-warn-subtle`, `--color-warn-subtle-foreground`,\n *         `--color-primary-subtle`, `--color-primary-subtle-foreground`,\n *         `--color-border`, `--shadow-overlay`, `--radius-card`\n */\n@Component({\n  selector: 'com-toast-container',\n  host: {\n    '(keydown.escape)': 'onEscapeKey()',\n    tabindex: '-1',\n  },\n  template: `\n    <div\n      [class]=\"containerClasses()\"\n      role=\"region\"\n      aria-label=\"Notifications\"\n    >\n      @for (toast of toasts(); track toast.id) {\n        <com-toast\n          [state]=\"toast\"\n          (onDismiss)=\"containerData.onDismiss($event)\"\n          (onAction)=\"containerData.onAction($event)\"\n          (mouseEnter)=\"containerData.onMouseEnter(toast.id)\"\n          (mouseLeave)=\"containerData.onMouseLeave(toast.id)\"\n          (animationDone)=\"containerData.onAnimationDone($event)\"\n        />\n      }\n    </div>\n  `,\n  styles: `\n    :host {\n      display: contents;\n    }\n  `,\n  imports: [ComToastComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComToastContainerComponent {\n  protected readonly containerData: ComToastContainerData = inject(COM_TOAST_CONTAINER_DATA);\n\n  /** Active toast states, read from the service's signal. */\n  protected readonly toasts: Signal<ComToastState[]> = computed(() => this.containerData.toasts());\n\n  /** Computed container positioning classes. */\n  protected readonly containerClasses: Signal<string> = computed(() =>\n    mergeClasses(toastContainerVariants({ position: this.containerData.position() })),\n  );\n\n  protected onEscapeKey(): void {\n    this.containerData.onDismissLatest();\n  }\n}\n","import {\n  DestroyRef,\n  inject,\n  Injectable,\n  Injector,\n  PLATFORM_ID,\n  signal,\n} from '@angular/core';\nimport type { WritableSignal } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Overlay } from '@angular/cdk/overlay';\nimport type { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComToastRef } from './toast.ref';\nimport { ComToastContainerComponent } from './toast-container.component';\nimport { COM_TOAST_CONFIG, COM_TOAST_CONTAINER_DATA } from './toast.providers';\nimport { generateToastId } from './toast.utils';\nimport type {\n  ComToastConfig,\n  ComToastContainerData,\n  ComToastData,\n  ComToastDismissReason,\n  ComToastPosition,\n  ComToastState,\n  ComToastTimerState,\n  ComToastType,\n} from './toast.models';\n\n/** Default durations by toast type. */\nconst DEFAULT_DURATION: Record<ComToastType, number> = {\n  success: 5000,\n  warn: 5000,\n  error: 0,\n  info: 5000,\n};\n\n/** Fallback timeout for exit animation removal when animationend doesn't fire. */\nconst ANIMATION_FALLBACK_MS = 200;\n\n/**\n * Service for creating toast notifications imperatively.\n *\n * @example\n * ```typescript\n * const toast = inject(ComToastService);\n * toast.success('File uploaded successfully.');\n * toast.error('Failed to save.', 'Error');\n *\n * const ref = toast.show({ type: 'info', message: 'Item deleted.', action: { label: 'Undo' } });\n * ref.afterAction().subscribe(() => undoDelete());\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ComToastService {\n  private readonly overlay = inject(Overlay);\n  private readonly injector = inject(Injector);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly document = inject(DOCUMENT);\n  private readonly globalConfig = inject(COM_TOAST_CONFIG, { optional: true });\n\n  private overlayRef: OverlayRef | null = null;\n  private readonly toasts: WritableSignal<ComToastState[]> = signal([]);\n  private readonly position: WritableSignal<ComToastPosition>;\n  private readonly timers = new Map<number, ComToastTimerState>();\n  private readonly refs = new Map<number, ComToastRef>();\n  private readonly animationFallbacks = new Map<number, ReturnType<typeof setTimeout>>();\n  private readonly dismissReasons = new Map<number, ComToastDismissReason>();\n  private rafHandle: number | null = null;\n\n  private readonly config: Required<ComToastConfig>;\n\n  constructor() {\n    this.config = {\n      position: 'bottom-right',\n      duration: 5000,\n      maxVisible: 5,\n      pauseOnHover: true,\n      showProgress: true,\n      showClose: true,\n      ...this.globalConfig,\n    };\n    this.position = signal(this.config.position);\n    this.destroyRef.onDestroy(() => this.dispose());\n  }\n\n  /**\n   * Show a toast notification with full configuration.\n   */\n  show(data: ComToastData): ComToastRef {\n    this.ensureContainer();\n\n    const id = generateToastId();\n    const type: ComToastType = data.type ?? 'info';\n    const duration = data.duration ?? DEFAULT_DURATION[type] ?? this.config.duration;\n    const showProgress = data.showProgress ?? this.config.showProgress;\n    const showClose = data.showClose ?? this.config.showClose;\n\n    const ref = new ComToastRef(() => this.dismiss(id, 'manual'));\n    this.refs.set(id, ref);\n\n    const state: ComToastState = {\n      id,\n      data,\n      type,\n      duration,\n      showProgress,\n      showClose,\n      visible: true,\n      remainingPercent: 100,\n    };\n\n    this.toasts.update((list) => [...list, state]);\n    this.enforceMaxVisible();\n\n    if (duration > 0) {\n      this.startTimer(id, duration);\n    }\n\n    return ref;\n  }\n\n  /** Show a success toast. */\n  success(message: string, title?: string): ComToastRef {\n    return this.showByType('success', message, title);\n  }\n\n  /** Show a warning toast. */\n  warn(message: string, title?: string): ComToastRef {\n    return this.showByType('warn', message, title);\n  }\n\n  /** Show an error toast. */\n  error(message: string, title?: string): ComToastRef {\n    return this.showByType('error', message, title);\n  }\n\n  /** Show an info toast. */\n  info(message: string, title?: string): ComToastRef {\n    return this.showByType('info', message, title);\n  }\n\n  /** Dismiss all active toasts. */\n  dismissAll(): void {\n    for (const toast of this.toasts()) {\n      this.dismiss(toast.id, 'manual');\n    }\n  }\n\n  // ─── Private ───\n\n  private showByType(type: ComToastType, message: string, title?: string): ComToastRef {\n    const data: ComToastData = { type, message };\n    if (title !== undefined) data.title = title;\n    return this.show(data);\n  }\n\n  private ensureContainer(): void {\n    if (this.overlayRef || !isPlatformBrowser(this.platformId)) return;\n\n    const positionStrategy = this.buildPositionStrategy(this.config.position);\n\n    const containerData: ComToastContainerData = {\n      toasts: this.toasts.asReadonly(),\n      position: this.position.asReadonly(),\n      onMouseEnter: (id: number) => this.pauseTimer(id),\n      onMouseLeave: (id: number) => this.resumeTimer(id),\n      onDismiss: (id: number) => this.dismiss(id, 'manual'),\n      onAction: (id: number) => this.handleAction(id),\n      onDismissLatest: () => this.dismissLatest(),\n      onAnimationDone: (id: number) => this.removeToast(id),\n    };\n\n    const containerInjector = Injector.create({\n      providers: [{ provide: COM_TOAST_CONTAINER_DATA, useValue: containerData }],\n      parent: this.injector,\n    });\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.noop(),\n      hasBackdrop: false,\n      panelClass: 'com-toast-overlay',\n      disposeOnNavigation: false,\n    });\n\n    const portal = new ComponentPortal(ComToastContainerComponent, null, containerInjector);\n    this.overlayRef.attach(portal);\n  }\n\n  private buildPositionStrategy(position: ComToastPosition): GlobalPositionStrategy {\n    const strategy = this.overlay.position().global();\n\n    switch (position) {\n      case 'top-right':\n        return strategy.top('0').right('0');\n      case 'top-left':\n        return strategy.top('0').left('0');\n      case 'top-center':\n        return strategy.top('0').centerHorizontally();\n      case 'bottom-right':\n        return strategy.bottom('0').right('0');\n      case 'bottom-left':\n        return strategy.bottom('0').left('0');\n      case 'bottom-center':\n        return strategy.bottom('0').centerHorizontally();\n    }\n  }\n\n  private dismiss(id: number, reason: ComToastDismissReason): void {\n    this.clearTimer(id);\n    this.dismissReasons.set(id, reason);\n\n    // Trigger exit animation\n    this.updateToast(id, { visible: false });\n\n    // Set fallback timeout in case animationend doesn't fire\n    const fallback = setTimeout(() => this.removeToast(id), ANIMATION_FALLBACK_MS);\n    this.animationFallbacks.set(id, fallback);\n  }\n\n  private removeToast(id: number): void {\n    // Clear animation fallback\n    const fallback = this.animationFallbacks.get(id);\n    if (fallback) {\n      clearTimeout(fallback);\n      this.animationFallbacks.delete(id);\n    }\n\n    // Check if toast still exists (may have been removed already)\n    if (!this.toasts().some((t) => t.id === id)) return;\n\n    this.toasts.update((list) => list.filter((t) => t.id !== id));\n\n    const reason = this.dismissReasons.get(id) ?? 'auto';\n    this.dismissReasons.delete(id);\n\n    const ref = this.refs.get(id);\n    if (ref) {\n      ref._notifyDismissed({ reason });\n      this.refs.delete(id);\n    }\n\n    if (this.toasts().length === 0) {\n      this.disposeOverlay();\n    }\n  }\n\n  private handleAction(id: number): void {\n    const ref = this.refs.get(id);\n    if (ref) {\n      ref._notifyAction();\n    }\n    this.dismiss(id, 'action');\n  }\n\n  private dismissLatest(): void {\n    const visible = this.toasts().filter((t) => t.visible);\n    const latest = visible[visible.length - 1];\n    if (latest) {\n      this.dismiss(latest.id, 'manual');\n    }\n  }\n\n  private enforceMaxVisible(): void {\n    const currentToasts = this.toasts();\n    const visibleCount = currentToasts.filter((t) => t.visible).length;\n\n    if (visibleCount > this.config.maxVisible) {\n      const oldest = currentToasts.find((t) => t.visible);\n      if (oldest) {\n        this.dismiss(oldest.id, 'limit');\n      }\n    }\n  }\n\n  // ─── Timer (rAF) ───\n\n  private startTimer(id: number, duration: number): void {\n    const now = this.now();\n    this.timers.set(id, {\n      startTime: now,\n      elapsed: 0,\n      duration,\n      paused: false,\n      pausedAt: 0,\n    });\n\n    this.ensureRafLoop();\n  }\n\n  private ensureRafLoop(): void {\n    if (this.rafHandle !== null) return;\n\n    const win = this.document.defaultView;\n    if (!win) return;\n\n    const tick = (): void => {\n      const now = this.now();\n      let needsUpdate = false;\n\n      for (const [id, timer] of this.timers) {\n        if (timer.paused) continue;\n\n        const elapsed = timer.elapsed + (now - timer.startTime);\n        const remaining = Math.max(0, 100 - (elapsed / timer.duration) * 100);\n        const rounded = Math.round(remaining);\n\n        // Find current state to compare\n        const toast = this.toasts().find((t) => t.id === id);\n        if (!toast || !toast.visible) {\n          this.clearTimer(id);\n          continue;\n        }\n\n        if (Math.round(toast.remainingPercent) !== rounded) {\n          needsUpdate = true;\n        }\n\n        if (remaining <= 0) {\n          this.clearTimer(id);\n          this.dismiss(id, 'auto');\n          needsUpdate = true;\n        }\n      }\n\n      // Batch-update all progress values in a single signal write\n      if (needsUpdate) {\n        const now2 = this.now();\n        this.toasts.update((list) =>\n          list.map((t) => {\n            const timer = this.timers.get(t.id);\n            if (!timer || timer.paused) return t;\n\n            const elapsed = timer.elapsed + (now2 - timer.startTime);\n            const remaining = Math.max(0, 100 - (elapsed / timer.duration) * 100);\n            return { ...t, remainingPercent: remaining };\n          }),\n        );\n      }\n\n      // Continue loop if there are active timers\n      if (this.timers.size > 0) {\n        this.rafHandle = win.requestAnimationFrame(tick);\n      } else {\n        this.rafHandle = null;\n      }\n    };\n\n    this.rafHandle = win.requestAnimationFrame(tick);\n  }\n\n  private pauseTimer(id: number): void {\n    if (!this.config.pauseOnHover) return;\n\n    const timer = this.timers.get(id);\n    if (!timer || timer.paused) return;\n\n    const now = this.now();\n    timer.elapsed += now - timer.startTime;\n    timer.paused = true;\n    timer.pausedAt = now;\n  }\n\n  private resumeTimer(id: number): void {\n    if (!this.config.pauseOnHover) return;\n\n    const timer = this.timers.get(id);\n    if (!timer || !timer.paused) return;\n\n    timer.paused = false;\n    timer.startTime = this.now();\n  }\n\n  private clearTimer(id: number): void {\n    this.timers.delete(id);\n  }\n\n  private now(): number {\n    return this.document.defaultView?.performance.now() ?? Date.now();\n  }\n\n  // ─── Helpers ───\n\n  private updateToast(id: number, patch: Partial<ComToastState>): void {\n    this.toasts.update((list) =>\n      list.map((t) => (t.id === id ? { ...t, ...patch } : t)),\n    );\n  }\n\n  private disposeOverlay(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n\n    const win = this.document.defaultView;\n    if (this.rafHandle !== null && win) {\n      win.cancelAnimationFrame(this.rafHandle);\n      this.rafHandle = null;\n    }\n  }\n\n  private dispose(): void {\n    for (const id of this.timers.keys()) {\n      this.clearTimer(id);\n    }\n    for (const [, fallback] of this.animationFallbacks) {\n      clearTimeout(fallback);\n    }\n    this.animationFallbacks.clear();\n    this.dismissReasons.clear();\n    this.refs.clear();\n    this.disposeOverlay();\n  }\n}\n","// Public API for the toast notification system\n\n// Service\nexport { ComToastService } from './toast.service';\n\n// Ref\nexport { ComToastRef } from './toast.ref';\n\n// Types and interfaces\nexport type {\n  ComToastConfig,\n  ComToastData,\n  ComToastType,\n  ComToastPosition,\n  ComToastDismissEvent,\n  ComToastDismissReason,\n  ComToastTemplateContext,\n} from './toast.models';\n\n// Providers\nexport { provideComToastConfig, COM_TOAST_CONFIG } from './toast.providers';\n\n// Variants (for advanced customization)\nexport {\n  toastVariants,\n  toastContainerVariants,\n  toastProgressVariants,\n  toastCloseButtonVariants,\n} from './toast.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}