{"version":3,"file":"ngwr-toast.mjs","sources":["../../../projects/lib/toast/toast-item.ts","../../../projects/lib/toast/toast-item.html","../../../projects/lib/toast/toast-host.ts","../../../projects/lib/toast/toast-host.html","../../../projects/lib/toast/toast-ref.ts","../../../projects/lib/toast/default-toast-config.ts","../../../projects/lib/toast/tokens/toast-config.token.ts","../../../projects/lib/toast/services/toast.ts","../../../projects/lib/toast/provide-wr-toast-config.ts","../../../projects/lib/toast/ngwr-toast.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, ElementRef, ViewEncapsulation, computed, inject, input, output, signal } from '@angular/core';\n\nimport type { WrToastConfig, WrToastType } from './interfaces';\n\n/**\n * One toast row inside the toast host. Not used directly — see\n * `WrToast.show()`.\n *\n * @internal\n */\n@Component({\n  selector: 'wr-toast',\n  templateUrl: './toast-item.html',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[class]': 'classes()',\n    '[style.--wr-toast-duration]': 'durationMs()',\n    '[style.transform]': 'swipeTransform()',\n    '[style.opacity]': 'swipeOpacity()',\n    '[style.transition]': 'swiping() ? \"none\" : null',\n    '[attr.role]': 'liveRole()',\n    '[attr.aria-live]': 'liveLevel()',\n    '(mouseenter)': 'pauseRequested.emit()',\n    '(mouseleave)': 'resumeRequested.emit()',\n    '(touchstart)': 'onSwipeStart($event)',\n    '(touchmove)': 'onSwipeMove($event)',\n    '(touchend)': 'onSwipeEnd()',\n    '(touchcancel)': 'onSwipeEnd()',\n  },\n})\nexport class WrToastItem {\n  readonly type = input<WrToastType>('info');\n  readonly title = input<string | null>(null);\n  readonly message = input.required<string>();\n  readonly dismissible = input<boolean>(true);\n  readonly showProgress = input<boolean>(false);\n  readonly showCopy = input<boolean>(false);\n  /** Auto-dismiss duration in ms — used to scale the progress bar. `0` hides it. */\n  readonly duration = input<number>(0);\n  readonly labels = input.required<WrToastConfig['labels']>();\n\n  readonly dismissed = output<void>();\n  readonly pauseRequested = output<void>();\n  readonly resumeRequested = output<void>();\n\n  /** True for ~1.5s after a successful copy; flips the icon to a check. */\n  protected readonly justCopied = signal(false);\n  private copyResetTimer: ReturnType<typeof setTimeout> | null = null;\n\n  protected readonly classes = computed(() => `wr-toast wr-toast--${this.type()}`);\n\n  /** Escalate to `alert`/`assertive` for danger/warning toasts. */\n  protected readonly liveRole = computed(() => (this.type() === 'danger' ? 'alert' : 'status'));\n  protected readonly liveLevel = computed(() =>\n    this.type() === 'danger' || this.type() === 'warning' ? 'assertive' : 'polite'\n  );\n\n  /** Inline CSS value for `--wr-toast-duration`. */\n  protected readonly durationMs = computed(() => `${this.duration()}ms`);\n\n  protected readonly progressVisible = computed(() => this.showProgress() && this.duration() > 0);\n\n  protected async onCopy(): Promise<void> {\n    try {\n      await navigator.clipboard.writeText(this.message());\n      this.justCopied.set(true);\n      if (this.copyResetTimer) clearTimeout(this.copyResetTimer);\n      this.copyResetTimer = setTimeout(() => this.justCopied.set(false), 1500);\n    } catch {\n      // Clipboard unavailable (insecure context / permission denied) — silent.\n    }\n  }\n\n  // Swipe-sideways-to-dismiss. The toast follows the finger and fades; releasing\n  // past 40% of its width emits `dismissed`, otherwise it snaps back.\n  private readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private swipeStartX = 0;\n  private swipeWidth = 0;\n  protected readonly swipeX = signal(0);\n  protected readonly swiping = signal(false);\n\n  protected readonly swipeTransform = computed(() => (this.swipeX() === 0 ? null : `translateX(${this.swipeX()}px)`));\n  protected readonly swipeOpacity = computed(() => {\n    const dist = Math.abs(this.swipeX());\n    return dist === 0 ? null : Math.max(0, 1 - dist / (this.swipeWidth || 1));\n  });\n\n  protected onSwipeStart(event: TouchEvent): void {\n    if (!this.dismissible()) return;\n    const touch = event.touches[0];\n    if (!touch) return;\n    this.swipeStartX = touch.clientX;\n    this.swipeWidth = this.elRef.nativeElement.offsetWidth;\n    this.swiping.set(true);\n  }\n\n  protected onSwipeMove(event: TouchEvent): void {\n    if (!this.swiping()) return;\n    const touch = event.touches[0];\n    if (!touch) return;\n    this.swipeX.set(touch.clientX - this.swipeStartX);\n  }\n\n  protected onSwipeEnd(): void {\n    if (!this.swiping()) return;\n    this.swiping.set(false);\n    if (Math.abs(this.swipeX()) > (this.swipeWidth || 0) * 0.4) {\n      this.dismissed.emit();\n    } else {\n      this.swipeX.set(0);\n    }\n  }\n}\n","<div class=\"wr-toast__body\">\n  @if (title(); as text) {\n    <p class=\"wr-toast__title\">{{ text }}</p>\n  }\n  <p class=\"wr-toast__message\">{{ message() }}</p>\n</div>\n\n<div class=\"wr-toast__actions\">\n  @if (showCopy()) {\n    <button\n      type=\"button\"\n      class=\"wr-toast__action\"\n      [attr.aria-label]=\"justCopied() ? labels().copied : labels().copy\"\n      [title]=\"justCopied() ? labels().copied : labels().copy\"\n      (click)=\"onCopy()\"\n    >\n      @if (justCopied()) {\n        <svg\n          class=\"wr-icon__svg\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n        >\n          <path d=\"M20 6 9 17l-5-5\" />\n        </svg>\n      } @else {\n        <svg\n          class=\"wr-icon__svg\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n          aria-hidden=\"true\"\n        >\n          <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n          <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n        </svg>\n      }\n    </button>\n  }\n\n  @if (dismissible()) {\n    <button\n      type=\"button\"\n      class=\"wr-toast__action\"\n      [attr.aria-label]=\"labels().close\"\n      [title]=\"labels().close\"\n      (click)=\"dismissed.emit()\"\n    >\n      <svg\n        class=\"wr-icon__svg\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        aria-hidden=\"true\"\n      >\n        <path d=\"M18 6 6 18\" />\n        <path d=\"m6 6 12 12\" />\n      </svg>\n    </button>\n  }\n</div>\n\n@if (progressVisible()) {\n  <span class=\"wr-toast__progress\" aria-hidden=\"true\"></span>\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { Component, DestroyRef, ViewEncapsulation, computed, inject, input, output, signal } from '@angular/core';\n\nimport type { WrToastConfig, WrToastMode, WrToastOptions, WrToastPosition } from './interfaces';\nimport { WrToastItem } from './toast-item';\n\n/** ms before a mouseleave actually collapses the stack. Buffers the cursor\n * briefly leaving the host as toasts reflow underneath it. */\nconst COLLAPSE_DELAY_MS = 120;\n\n/** Active entry pushed by the service — adds the bookkeeping fields the host renders. */\ntype ActiveToast = WrToastOptions & {\n  readonly id: number;\n  readonly resolvedDuration: number;\n};\n\n/**\n * Internal host that lives inside the toast overlay and renders the\n * active stack. Owned by `WrToast`.\n *\n * @internal\n */\n@Component({\n  selector: 'wr-toast-host',\n  templateUrl: './toast-host.html',\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    '[class]': 'classes()',\n    role: 'region',\n    'aria-label': 'Notifications',\n    '(mouseenter)': 'onMouseEnter()',\n    '(mouseleave)': 'onMouseLeave()',\n  },\n  imports: [WrToastItem],\n})\nexport class WrToastHost {\n  readonly position = input<WrToastPosition>('top-end');\n  readonly config = input.required<WrToastConfig>();\n  /** Layout mode. @default 'stack' (Sonner-style; hover to fan out) */\n  readonly mode = input<WrToastMode>('stack');\n\n  /** @internal — hover toggles this in stack mode. */\n  protected readonly expanded = signal(false);\n\n  private readonly destroyRef = inject(DestroyRef);\n  private collapseTimer: ReturnType<typeof setTimeout> | null = null;\n\n  constructor() {\n    this.destroyRef.onDestroy(() => this.clearCollapseTimer());\n  }\n\n  /** @internal */\n  protected onMouseEnter(): void {\n    this.clearCollapseTimer();\n    this.expanded.set(true);\n  }\n\n  /** @internal — delay the collapse so cursor briefly slipping off the host\n   * during a layout reflow doesn't cause a flicker. */\n  protected onMouseLeave(): void {\n    this.clearCollapseTimer();\n    this.collapseTimer = setTimeout(() => {\n      this.expanded.set(false);\n      this.collapseTimer = null;\n    }, COLLAPSE_DELAY_MS);\n  }\n\n  private clearCollapseTimer(): void {\n    if (this.collapseTimer !== null) {\n      clearTimeout(this.collapseTimer);\n      this.collapseTimer = null;\n    }\n  }\n\n  /** @internal — pushed by the service: the rendered (capped) stack. */\n  readonly toasts = signal<readonly ActiveToast[]>([]);\n\n  /** @internal — pushed by the service: count still queued behind the cap. */\n  readonly queued = signal(0);\n\n  /** Total outstanding toasts (visible + queued) — what \"Close all\" clears. */\n  protected readonly totalCount = computed(() => this.toasts().length + this.queued());\n\n  /** @internal — service listens to update its internal state. */\n  readonly dismissed = output<number>();\n  readonly pauseRequested = output<number>();\n  readonly resumeRequested = output<number>();\n  readonly dismissAllRequested = output<void>();\n\n  protected readonly classes = computed(() => {\n    const parts = ['wr-toast-host', `wr-toast-host--${this.position()}`, `wr-toast-host--${this.mode()}`];\n    if (this.mode() === 'stack' && this.expanded()) parts.push('wr-toast-host--expanded');\n    return parts.join(' ');\n  });\n\n  /** Distance from the front of the stack (0 = newest / fully visible). */\n  protected stackIndex(i: number): number {\n    return this.toasts().length - 1 - i;\n  }\n\n  protected readonly closeAllVisible = computed(() => {\n    const cfg = this.config();\n    // In stack mode the toasts cascade absolutely while collapsed, which\n    // makes the close-all button jump between layout positions on hover\n    // (button moves → cursor leaves → host collapses → cycle = blink).\n    // Only show it once the stack is expanded, or always in list mode.\n    if (this.mode() === 'stack' && !this.expanded()) return false;\n    return cfg.showCloseAll && this.toasts().length >= cfg.closeAllThreshold;\n  });\n\n  protected showProgressFor(t: WrToastOptions): boolean {\n    return t.showProgress ?? this.config().showProgress;\n  }\n\n  protected showCopyFor(t: WrToastOptions): boolean {\n    return t.showCopy ?? this.config().showCopy;\n  }\n}\n","@if (closeAllVisible()) {\n  <button type=\"button\" class=\"wr-toast-host__close-all\" (click)=\"dismissAllRequested.emit()\">\n    {{ config().labels.closeAll }} ({{ totalCount() }})\n  </button>\n}\n\n@for (toast of toasts(); track toast.id) {\n  <wr-toast\n    [style.--wr-toast-stack-index]=\"stackIndex($index)\"\n    [type]=\"toast.type ?? 'info'\"\n    [title]=\"toast.title ?? null\"\n    [message]=\"toast.message\"\n    [dismissible]=\"toast.dismissible ?? true\"\n    [showProgress]=\"showProgressFor(toast)\"\n    [showCopy]=\"showCopyFor(toast)\"\n    [duration]=\"toast.resolvedDuration\"\n    [labels]=\"config().labels\"\n    (dismissed)=\"dismissed.emit(toast.id)\"\n    (pauseRequested)=\"pauseRequested.emit(toast.id)\"\n    (resumeRequested)=\"resumeRequested.emit(toast.id)\"\n  />\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport type { WrToastOptions } from './interfaces';\n\n/**\n * Handle returned by `WrToast.show()`. Call `dismiss()` to remove\n * the toast early. Inspect `options` to see what the caller requested.\n */\nexport class WrToastRef {\n  constructor(\n    public readonly id: number,\n    public readonly options: WrToastOptions,\n    private readonly onDismiss: (id: number) => void\n  ) {}\n\n  /** Remove this toast from the stack. */\n  dismiss(): void {\n    this.onDismiss(this.id);\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport type { WrToastConfig } from './interfaces';\n\n/**\n * Library defaults applied when no {@link provideWrToastConfig} call is\n * registered. Merged shallowly with the consumer's overrides (the `labels`\n * sub-object is merged separately so callers can override one string at a\n * time).\n */\nexport const DEFAULT_TOAST_CONFIG: WrToastConfig = {\n  position: 'top-end',\n  mode: 'stack',\n  duration: 4000,\n  showProgress: true,\n  showCopy: false,\n  showCloseAll: true,\n  closeAllThreshold: 2,\n  maxStack: 5,\n  labels: {\n    close: 'Close',\n    copy: 'Copy',\n    copied: 'Copied',\n    closeAll: 'Close all',\n  },\n};\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { InjectionToken } from '@angular/core';\n\nimport { DEFAULT_TOAST_CONFIG } from '../default-toast-config';\nimport type { WrToastConfig } from '../interfaces';\n\n/**\n * Holds the global {@link WrToastConfig} used by {@link WrToast}.\n * The default factory returns {@link DEFAULT_TOAST_CONFIG} so the service\n * works out of the box; override via {@link provideWrToastConfig}.\n */\nexport const WR_TOAST_CONFIG = new InjectionToken<WrToastConfig>('WR_TOAST_CONFIG', {\n  providedIn: 'root',\n  factory: () => DEFAULT_TOAST_CONFIG,\n});\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { type ComponentRef, Service, inject } from '@angular/core';\n\nimport { WR_OVERLAY } from 'ngwr/overlay';\n\nimport type { WrToastOptions, WrToastPosition } from '../interfaces';\nimport { WrToastHost } from '../toast-host';\nimport { WrToastRef } from '../toast-ref';\nimport { WR_TOAST_CONFIG } from '../tokens';\n\ntype ActiveEntry = WrToastOptions & {\n  readonly id: number;\n  /** Resolved auto-dismiss duration in ms after merging with global config. */\n  readonly resolvedDuration: number;\n  /** Resolved corner for this stack. */\n  readonly resolvedPosition: WrToastPosition;\n  /** Pending timeout handle. */\n  timer?: ReturnType<typeof setTimeout>;\n  /** Timestamp of the last timer (re)start, used to compute remaining on pause. */\n  startedAt?: number;\n  /** Milliseconds left when paused. */\n  remaining: number;\n};\n\n/**\n * Opens toast notifications in a single shared overlay.\n *\n * Global defaults come from {@link WR_TOAST_CONFIG}; register\n * {@link provideWrToastConfig} once at bootstrap to customise. Each\n * `show()` call accepts per-toast overrides via {@link WrToastOptions}.\n *\n * @example\n * ```ts\n * const toast = inject(WrToast);\n *\n * toast.show({ type: 'success', title: 'Saved', message: 'Profile updated.' });\n * toast.show({ type: 'danger', message: 'Network error', duration: 0 });\n * toast.show({ message: 'Permalink copied', position: 'bottom', showCopy: true });\n * ```\n *\n * @see https://ngwr.dev/components/toast\n */\n@Service()\nexport class WrToast {\n  private readonly overlay = inject(WR_OVERLAY);\n  private readonly config = inject(WR_TOAST_CONFIG);\n\n  private overlayRef: OverlayRef | null = null;\n  private hostRef: ComponentRef<WrToastHost> | null = null;\n  private currentPosition: WrToastPosition = this.config.position;\n  private currentMode: 'stack' | 'list' = this.config.mode;\n  private nextId = 1;\n  /** Currently rendered toasts (capped at `config.maxStack`). */\n  private active: ActiveEntry[] = [];\n  /** Overflow waiting for a free slot — promoted FIFO as actives dismiss, so\n   * nothing is ever silently dropped. */\n  private queue: ActiveEntry[] = [];\n\n  /** Open a toast. Returns a handle you can `dismiss()` early. */\n  show(options: WrToastOptions): WrToastRef {\n    const resolvedPosition = options.position ?? this.config.position;\n    const resolvedDuration = options.duration ?? this.config.duration;\n\n    this.ensureHost(resolvedPosition);\n\n    const entry: ActiveEntry = {\n      ...options,\n      id: this.nextId++,\n      resolvedDuration,\n      resolvedPosition,\n      remaining: resolvedDuration,\n    };\n\n    const max = this.config.maxStack;\n    if (max > 0 && this.active.length >= max) {\n      // Stack is full — hold this one in the queue (no timer until it's shown).\n      this.queue = [...this.queue, entry];\n      this.pushToHost();\n    } else {\n      this.active = [...this.active, entry];\n      this.pushToHost();\n      this.startTimer(entry);\n    }\n\n    return new WrToastRef(entry.id, options, id => this.dismiss(id));\n  }\n\n  /** Dismiss a single toast by id. */\n  dismiss(id: number): void {\n    const entry = this.active.find(t => t.id === id);\n    if (entry?.timer) clearTimeout(entry.timer);\n    this.active = this.active.filter(t => t.id !== id);\n    // A dismiss can also target a still-queued toast.\n    this.queue = this.queue.filter(t => t.id !== id);\n    this.promoteFromQueue();\n    this.pushToHost();\n    if (this.active.length === 0 && this.queue.length === 0) this.disposeHost();\n  }\n\n  /** Dismiss every visible toast. Wired to the host's \"Close all\" button. */\n  dismissAll(): void {\n    for (const entry of this.active) {\n      if (entry.timer) clearTimeout(entry.timer);\n    }\n    this.active = [];\n    this.queue = [];\n    this.disposeHost();\n  }\n\n  /** Change the corner the stack opens in. Affects future toasts. */\n  setPosition(position: WrToastPosition): void {\n    this.currentPosition = position;\n    if (this.hostRef) this.hostRef.setInput('position', position);\n  }\n\n  /** Switch the layout mode at runtime. Persists across host re-creation. */\n  setMode(mode: 'stack' | 'list'): void {\n    this.currentMode = mode;\n    if (this.hostRef) this.hostRef.setInput('mode', mode);\n  }\n\n  // Timer\n\n  private startTimer(entry: ActiveEntry): void {\n    if (entry.remaining <= 0) return;\n    entry.startedAt = Date.now();\n    entry.timer = setTimeout(() => this.dismiss(entry.id), entry.remaining);\n  }\n\n  private pauseTimer(entry: ActiveEntry): void {\n    if (!entry.timer) return;\n    clearTimeout(entry.timer);\n    entry.timer = undefined;\n    if (entry.startedAt) {\n      entry.remaining = Math.max(0, entry.remaining - (Date.now() - entry.startedAt));\n    }\n  }\n\n  // Host plumbing\n\n  private ensureHost(position: WrToastPosition): void {\n    if (this.overlayRef) {\n      if (position !== this.currentPosition) this.setPosition(position);\n      return;\n    }\n\n    this.currentPosition = position;\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy: this.overlay.position().global(),\n      scrollStrategy: this.overlay.scrollStrategies.noop(),\n      hasBackdrop: false,\n      panelClass: ['wr-toast-overlay'],\n    });\n\n    const portal = new ComponentPortal(WrToastHost);\n    this.hostRef = this.overlayRef.attach(portal);\n    this.hostRef.setInput('position', position);\n    this.hostRef.setInput('mode', this.currentMode);\n    this.hostRef.setInput('config', this.config);\n\n    const inst = this.hostRef.instance;\n    inst.dismissed.subscribe(id => this.dismiss(id));\n    inst.dismissAllRequested.subscribe(() => this.dismissAll());\n    inst.pauseRequested.subscribe(id => {\n      const entry = this.active.find(t => t.id === id);\n      if (entry) this.pauseTimer(entry);\n    });\n    inst.resumeRequested.subscribe(id => {\n      const entry = this.active.find(t => t.id === id);\n      if (entry) this.startTimer(entry);\n    });\n  }\n\n  /** Fill any free stack slots from the queue (FIFO), starting each promoted\n   * toast's auto-dismiss timer only as it becomes visible. */\n  private promoteFromQueue(): void {\n    const max = this.config.maxStack;\n    while ((max <= 0 || this.active.length < max) && this.queue.length > 0) {\n      const [next, ...rest] = this.queue;\n      this.queue = rest;\n      this.active = [...this.active, next];\n      this.startTimer(next);\n    }\n  }\n\n  private pushToHost(): void {\n    this.hostRef?.instance.toasts.set([...this.active]);\n    this.hostRef?.instance.queued.set(this.queue.length);\n  }\n\n  private disposeHost(): void {\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n      this.hostRef = null;\n    }\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { DEFAULT_TOAST_CONFIG } from './default-toast-config';\nimport type { WrToastConfig } from './interfaces';\nimport { WR_TOAST_CONFIG } from './tokens';\n\n/**\n * Registers a global {@link WrToastConfig} for {@link WrToast}. Any\n * field you omit falls back to {@link DEFAULT_TOAST_CONFIG}; the `labels`\n * sub-object is merged separately so you can override a single string at a\n * time (useful for i18n).\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideWrToastConfig({\n *       position: 'bottom-end',\n *       showCopy: true,\n *       maxStack: 3,\n *       labels: { close: 'Закрыть', copy: 'Копировать', copied: 'Скопировано', closeAll: 'Закрыть все' },\n *     }),\n *   ],\n * });\n * ```\n */\nexport function provideWrToastConfig(config: Partial<WrToastConfig>): EnvironmentProviders {\n  const merged: WrToastConfig = {\n    ...DEFAULT_TOAST_CONFIG,\n    ...config,\n    labels: { ...DEFAULT_TOAST_CONFIG.labels, ...config.labels },\n  };\n  return makeEnvironmentProviders([{ provide: WR_TOAST_CONFIG, useValue: merged }]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}