{"version":3,"file":"sdcorejs-angular-services-notify.mjs","sources":["../../../projects/sdcorejs-angular/services/notify/src/components/toast/toast.component.ts","../../../projects/sdcorejs-angular/services/notify/src/components/toast/toast.component.html","../../../projects/sdcorejs-angular/services/notify/src/components/toast-container.component.ts","../../../projects/sdcorejs-angular/services/notify/src/notify.service.ts","../../../projects/sdcorejs-angular/services/notify/sdcorejs-angular-services-notify.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  SecurityContext,\n  computed,\n  signal,\n  inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\nimport { ToastData } from '../../notify.model';\nimport { SdNotifyService } from '../../notify.service';\n\nconst TOAST_EXIT_ANIMATION_MS = 200;\n\n@Component({\n  selector: 'toast',\n  standalone: true,\n  imports: [CommonModule, TranslatePipe],\n  templateUrl: './toast.component.html',\n  styleUrl: './toast.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClasses()',\n    '[attr.data-autoid]': 'autoId',\n    '[attr.data-type]': 'data.type',\n    '[attr.data-title]': 'data.title ?? null',\n    '[attr.data-message]': 'dataMessage',\n  },\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n  private notifyService = inject(SdNotifyService);\n  private sanitizer = inject(DomSanitizer);\n\n  @Input({ required: true }) data!: ToastData;\n\n  readonly isExpanded = signal(false);\n  readonly isClosing = signal(false);\n  readonly hostClasses = computed(() => (this.isClosing() ? 'bg-white sd-toast sd-toast--closing' : 'bg-white sd-toast'));\n  readonly MAX_SHOW = 2;\n\n  private timer: ReturnType<typeof setTimeout> | null = null;\n  private closeTimer: ReturnType<typeof setTimeout> | null = null;\n  private start = 0;\n  private remaining = 0;\n\n  /** Inserted by Angular inject() migration for backwards compatibility */\n  constructor(...args: unknown[]);\n\n  constructor() {}\n\n  ngOnInit(): void {\n    this.remaining = this.data.duration;\n    this.resumeTimer();\n  }\n\n  ngOnDestroy(): void {\n    this.clearAutoDismissTimer();\n    this.clearCloseTimer();\n  }\n\n  @HostListener('mouseenter')\n  pauseTimer(): void {\n    if (!this.timer || this.isClosing()) {\n      return;\n    }\n\n    clearTimeout(this.timer);\n    this.timer = null;\n    this.remaining = Math.max(this.remaining - (Date.now() - this.start), 0);\n  }\n\n  @HostListener('mouseleave')\n  resumeTimer(): void {\n    if (this.remaining <= 0 || this.timer || this.isClosing()) {\n      return;\n    }\n\n    this.start = Date.now();\n    this.timer = setTimeout(() => {\n      this.close();\n    }, this.remaining);\n  }\n\n  close(): void {\n    if (this.isClosing()) {\n      return;\n    }\n\n    this.clearAutoDismissTimer();\n    this.isClosing.set(true);\n    this.closeTimer = setTimeout(() => {\n      this.closeTimer = null;\n      this.notifyService.remove(this.data.id);\n    }, TOAST_EXIT_ANIMATION_MS);\n  }\n\n  onActionClick(): void {\n    this.data.onAction?.();\n  }\n\n  toggleExpand(): void {\n    this.isExpanded.update(v => !v);\n  }\n\n  sanitizeHtml(value: string): string {\n    return this.sanitizer.sanitize(SecurityContext.HTML, value) ?? '';\n  }\n\n  get singleMessage(): string {\n    return this.data.message as string;\n  }\n\n  get isMultiMessage(): boolean {\n    return Array.isArray(this.data.message);\n  }\n\n  get messages(): string[] {\n    return this.data.message as string[];\n  }\n\n  get displayMessages(): string[] {\n    const msgs = this.messages;\n    if (this.isExpanded()) return msgs;\n    return msgs.slice(0, this.MAX_SHOW);\n  }\n\n  get restCount(): number {\n    return this.messages.length - this.MAX_SHOW;\n  }\n\n  get hasMore(): boolean {\n    return this.isMultiMessage && this.messages.length > this.MAX_SHOW;\n  }\n\n  get autoId(): string {\n    return `services-notify-toast-${this.data.type}`;\n  }\n\n  get dataMessage(): string {\n    return Array.isArray(this.data.message) ? this.data.message.join(' | ') : this.data.message;\n  }\n\n  private clearAutoDismissTimer(): void {\n    if (!this.timer) {\n      return;\n    }\n\n    clearTimeout(this.timer);\n    this.timer = null;\n  }\n\n  private clearCloseTimer(): void {\n    if (!this.closeTimer) {\n      return;\n    }\n\n    clearTimeout(this.closeTimer);\n    this.closeTimer = null;\n  }\n}\n","<div class=\"sd-toast__bar\" [class]=\"'bg-' + data.type\"></div>\n\n<div class=\"sd-toast__icon\" [class]=\"'text-' + data.type\">\n  @switch (data.type) {\n    @case ('success') {\n      <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>\n    }\n    @case ('info') {\n      <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"/></svg>\n    }\n    @case ('warning') {\n      <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"/></svg>\n    }\n    @case ('error') {\n      <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n    }\n  }\n</div>\n\n<div class=\"sd-toast__content\">\n  <div class=\"sd-toast__header\">\n    <strong class=\"sd-toast__title\">{{ data.title || ('core.notify.type.' + data.type | translate) }}</strong>\n    <button class=\"sd-toast__close\" (click)=\"close()\">&times;</button>\n  </div>\n\n  <div class=\"sd-toast__body\">\n    @if (!isMultiMessage) {\n      <!-- Text rendering is the default safe path; HTML is opt-in and sanitized. -->\n      @if (data.html) {\n        <div [innerHTML]=\"sanitizeHtml(singleMessage)\"></div>\n      } @else {\n        <div>{{ singleMessage }}</div>\n      }\n    } @else {\n      <ul class=\"msg-list\">\n        @for (msg of displayMessages; track msg) {\n          @if (data.html) {\n            <li [innerHTML]=\"sanitizeHtml('- ' + msg)\"></li>\n          } @else {\n            <li>{{ '- ' + msg }}</li>\n          }\n        }\n      </ul>\n\n      @if (hasMore) {\n        <button\n          type=\"button\"\n          class=\"toggle-more btn-link\"\n          [class]=\"'text-' + data.type\"\n          (click)=\"toggleExpand()\">\n          {{ isExpanded() ? ('core.notify.show-less' | translate) : ('core.notify.show-more' | translate: { count: restCount }) }}\n        </button>\n      }\n    }\n  </div>\n\n  @if (data.actionLabel) {\n    <div class=\"sd-toast__actions\">\n      <button\n        class=\"btn-action\"\n        [class]=\"'bg-' + data.type + '-light text-' + data.type\"\n        (click)=\"onActionClick()\">\n        {{ data.actionLabel }}\n      </button>\n    </div>\n  }\n</div>\n","import { Component, signal, WritableSignal } from '@angular/core';\nimport { ToastData } from '../notify.model';\nimport { ToastComponent } from './toast/toast.component';\n\n@Component({\n  selector: 'toast-container',\n  standalone: true,\n  imports: [ToastComponent],\n  template: `\n    <div class=\"toast-container\">\n      @for (toast of toasts(); track toast.id) {\n        <toast [data]=\"toast\"> </toast>\n      }\n    </div>\n  `,\n  styles: [\n    `\n      .toast-container {\n        position: fixed;\n        top: 20px;\n        right: 20px;\n        z-index: 9999;\n        display: flex;\n        flex-direction: column;\n        pointer-events: none; /* Cho phép click xuyên qua vùng trống */\n      }\n      sd-toast {\n        pointer-events: auto; /* Bật lại click cho toast */\n      }\n    `,\n  ],\n})\nexport class ToastContainerComponent {\n  toasts: WritableSignal<ToastData[]> = signal([]);\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ApplicationRef, createComponent, EnvironmentInjector, inject, Injectable, signal } from '@angular/core';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { ToastContainerComponent } from './components/toast-container.component';\nimport { NotifyOption, ToastData, ToastType } from './notify.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SdNotifyService {\n  readonly toasts = signal<ToastData[]>([]);\n\n  // Constants\n  readonly #DEBOUNCE_TIME = 500;\n  readonly #DEFAULT_SUCCESS_DURATION = 3000;\n  readonly #DEFAULT_BUFFERED_DURATION = 5000;\n  readonly #MAX_TOASTS = 5;\n\n  // State\n  #buffer: Record<string, string[]> = {};\n  #timers: Record<string, ReturnType<typeof setTimeout> | null> = {};\n  private readonly appRef = inject(ApplicationRef);\n  private readonly injector = inject(EnvironmentInjector);\n  private readonly document = inject(DOCUMENT);\n  readonly #i18n = inject(I18nService);\n\n  constructor() {\n    this.#initContainer();\n  }\n\n  #initContainer() {\n    const componentRef = createComponent(ToastContainerComponent, {\n      environmentInjector: this.injector,\n    });\n    componentRef.instance.toasts = this.toasts;\n    this.appRef.attachView(componentRef.hostView);\n    const domElem = (componentRef.hostView as any).rootNodes[0] as HTMLElement;\n    this.document.body.appendChild(domElem);\n  }\n\n  // Public API\n  success(message: string, option?: NotifyOption) {\n    this.#addImmediate('success', message, option);\n  }\n\n  info(message: string, option?: NotifyOption) {\n    this.#addImmediate('info', message, option);\n  }\n\n  warning(message: string | string[], option?: NotifyOption) {\n    this.#addToBuffer('warning', message, option);\n  }\n\n  error(message: string | string[], option?: NotifyOption) {\n    this.#addToBuffer('error', message, option);\n  }\n\n  remove(id: string) {\n    this.toasts.update(current => current.filter(t => t.id !== id));\n  }\n\n  clearAll() {\n    this.toasts.set([]);\n    this.#clearAllTimers();\n  }\n\n  clearByType(type: ToastType) {\n    this.toasts.update(current => current.filter(t => t.type !== type));\n  }\n\n  // Private helpers\n  #addImmediate(type: ToastType, message: string, option?: NotifyOption) {\n    const newToast: ToastData = {\n      id: Utilities.generateUuid(),\n      type,\n      message,\n      title: option?.title,\n      duration: option?.duration ?? this.#DEFAULT_SUCCESS_DURATION,\n      actionLabel: option?.actionLabel,\n      onAction: option?.onAction,\n      html: option?.html,\n    };\n\n    this.toasts.update(current => {\n      const updated = [newToast, ...current];\n      return updated.slice(0, this.#MAX_TOASTS);\n    });\n  }\n\n  #addToBuffer(type: ToastType, message: string | string[], option?: NotifyOption) {\n    if (!this.#buffer[type]) {\n      this.#buffer[type] = [];\n    }\n\n    const msgs = Array.isArray(message) ? message : [message];\n    this.#buffer[type].push(...msgs);\n\n    // Clear existing timer and set new one\n    if (this.#timers[type]) {\n      clearTimeout(this.#timers[type]!);\n    }\n\n    this.#timers[type] = setTimeout(() => {\n      this.#flushBuffer(type, option);\n    }, this.#DEBOUNCE_TIME);\n  }\n\n  #flushBuffer(type: ToastType, option?: NotifyOption) {\n    const messages = [...new Set(this.#buffer[type])];\n\n    // Cleanup\n    this.#buffer[type] = [];\n    this.#timers[type] = null;\n\n    if (messages.length === 0) return;\n\n    const title = option?.title ?? this.#i18n.t(`core.notify.type.${type}`);\n    const finalTitle = messages.length > 1 ? `${title} (${messages.length})` : title;\n\n    const newToast: ToastData = {\n      id: Utilities.generateUuid(),\n      type,\n      message: messages.length === 1 ? messages[0] : messages,\n      title: finalTitle,\n      duration: option?.duration ?? this.#DEFAULT_BUFFERED_DURATION,\n      actionLabel: option?.actionLabel,\n      onAction: option?.onAction,\n      html: option?.html,\n    };\n\n    this.toasts.update(current => {\n      const updated = [newToast, ...current];\n      return updated.slice(0, this.#MAX_TOASTS);\n    });\n  }\n\n  #clearAllTimers() {\n    Object.values(this.#timers).forEach(timer => {\n      if (timer) clearTimeout(timer);\n    });\n    this.#timers = {};\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}