ngx-kit 9.2.3 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, output, inject, ElementRef, NgZone, DestroyRef, PLATFORM_ID, signal, effect, Directive } from '@angular/core';
2
+ import { input, output, inject, ElementRef, NgZone, DestroyRef, PLATFORM_ID, DOCUMENT, signal, effect, Directive } from '@angular/core';
3
3
  import { isPlatformBrowser } from '@angular/common';
4
4
 
5
5
  const DEFAULT_DISTANCE = 200;
@@ -40,6 +40,7 @@ class NgxInfiniteScroll {
40
40
  zone = inject(NgZone);
41
41
  destroyRef = inject(DestroyRef);
42
42
  platformId = inject(PLATFORM_ID);
43
+ doc = inject(DOCUMENT);
43
44
  ready = signal(false, /* @ts-ignore */
44
45
  ...(ngDevMode ? [{ debugName: "ready" }] : /* istanbul ignore next */ []));
45
46
  previousConfiguration;
@@ -261,7 +262,7 @@ class NgxInfiniteScroll {
261
262
  return container;
262
263
  }
263
264
  if (typeof container === 'string' && container.trim()) {
264
- const scope = this.fromRoot() ? document : this.hostRef.nativeElement;
265
+ const scope = this.fromRoot() ? this.doc : this.hostRef.nativeElement;
265
266
  return scope.querySelector(container) ?? this.hostRef.nativeElement;
266
267
  }
267
268
  return this.hostRef.nativeElement;
@@ -279,7 +280,7 @@ class NgxInfiniteScroll {
279
280
  return `${up}px 0px ${down}px 0px`;
280
281
  }
281
282
  createSentinel(position) {
282
- const node = document.createElement('span');
283
+ const node = this.doc.createElement('span');
283
284
  node.dataset['ngxInfiniteScrollSentinel'] = position;
284
285
  node.setAttribute('aria-hidden', 'true');
285
286
  node.style.display = 'block';
@@ -328,10 +329,10 @@ class NgxInfiniteScroll {
328
329
  return Math.max(0, override ?? this.infiniteScrollDistance());
329
330
  }
330
331
  getDocumentScroller() {
331
- if (typeof document === 'undefined')
332
+ if (typeof this.doc === 'undefined')
332
333
  return null;
333
- return document.scrollingElement?.nodeType === Node.ELEMENT_NODE
334
- ? document.scrollingElement
334
+ return this.doc.scrollingElement?.nodeType === Node.ELEMENT_NODE
335
+ ? this.doc.scrollingElement
335
336
  : null;
336
337
  }
337
338
  getScrollMetrics() {
@@ -346,7 +347,7 @@ class NgxInfiniteScroll {
346
347
  return {
347
348
  element: null,
348
349
  scrollTop: window.scrollY,
349
- scrollHeight: Math.max(document.documentElement.scrollHeight, document.body?.scrollHeight ?? 0),
350
+ scrollHeight: Math.max(this.doc.documentElement.scrollHeight, this.doc.body?.scrollHeight ?? 0),
350
351
  };
351
352
  }
352
353
  capturePrependSnapshot() {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-kit-infinite-scroll.mjs","sources":["../../../projects/libs/infinite-scroll/directives/infinite-scroll.directive.ts","../../../projects/libs/infinite-scroll/ngx-kit-infinite-scroll.ts"],"sourcesContent":["import {\n AfterViewInit,\n DestroyRef,\n Directive,\n ElementRef,\n NgZone,\n PLATFORM_ID,\n input,\n output,\n inject,\n signal,\n effect,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { NgxInfiniteScrollDirection, NgxInfiniteScrollEvent } from '../types/infinite-scroll.types';\n\nconst DEFAULT_DISTANCE = 200;\nconst DEFAULT_MIN_INTERVAL = 100;\nconst PREPEND_MAX_WAIT_MS = 5000;\nconst MANUAL_CHECK_DELAY_MS = 0;\n\n@Directive({\n selector: '[infiniteScroll]',\n standalone: true,\n exportAs: 'infiniteScroll',\n})\nexport class NgxInfiniteScroll implements AfterViewInit {\n readonly infiniteScrollDistance = input(DEFAULT_DISTANCE, {\n alias: 'infiniteScrollDistance',\n transform: numberInput,\n });\n\n readonly infiniteScrollDisabled = input(false, {\n alias: 'infiniteScrollDisabled',\n transform: booleanInput,\n });\n\n readonly infiniteScrollImmediateCheck = input(true, {\n alias: 'infiniteScrollImmediateCheck',\n transform: booleanInput,\n });\n\n readonly infiniteScrollMinInterval = input(DEFAULT_MIN_INTERVAL, {\n alias: 'infiniteScrollMinInterval',\n transform: numberInput,\n });\n\n readonly infiniteScrollUpDistance = input<number | null>(null, {\n alias: 'infiniteScrollUpDistance',\n transform: nullableNumberInput,\n });\n\n readonly infiniteScrollDownDistance = input<number | null>(null, {\n alias: 'infiniteScrollDownDistance',\n transform: nullableNumberInput,\n });\n\n readonly infiniteScrollDirection = input<NgxInfiniteScrollDirection>('down', {\n alias: 'infiniteScrollDirection',\n });\n\n readonly infiniteScrollContainer = input<string | HTMLElement | null>(null, {\n alias: 'infiniteScrollContainer',\n });\n\n readonly infiniteScrollRoot = input<HTMLElement | null>(null, {\n alias: 'infiniteScrollRoot',\n });\n\n readonly scrollWindow = input(true, {\n alias: 'scrollWindow',\n transform: booleanInput,\n });\n\n readonly fromRoot = input(false, {\n alias: 'fromRoot',\n transform: booleanInput,\n });\n\n /** Preserve the visual scroll position when older content is prepended. */\n readonly infiniteScrollMaintainScrollPosition = input(true, {\n alias: 'infiniteScrollMaintainScrollPosition',\n transform: booleanInput,\n });\n\n /** Optional CSS scroll behavior used while compensating a prepend. */\n readonly infiniteScrollPreserveScrollBehavior = input<ScrollBehavior>('auto', {\n alias: 'infiniteScrollPreserveScrollBehavior',\n });\n\n readonly scrolled = output<NgxInfiniteScrollEvent>();\n readonly scrolledUp = output<NgxInfiniteScrollEvent>();\n readonly scrolledDown = output<NgxInfiniteScrollEvent>();\n readonly scrollStartReached = output<NgxInfiniteScrollEvent>();\n readonly scrollEndReached = output<NgxInfiniteScrollEvent>();\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly ready = signal(false);\n private previousConfiguration?: {\n distance: number;\n upDistance: number | null;\n downDistance: number | null;\n direction: NgxInfiniteScrollDirection;\n scrollWindow: boolean;\n fromRoot: boolean;\n container: string | HTMLElement | null;\n root: HTMLElement | null;\n };\n private observer?: IntersectionObserver;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private topSentinel?: HTMLElement;\n private bottomSentinel?: HTMLElement;\n private root: HTMLElement | null = null;\n private lastTriggerAt = Number.NEGATIVE_INFINITY;\n private armedUp = true;\n private armedDown = true;\n private destroyRequested = false;\n private prependFrame = 0;\n\n private prependSnapshot?: {\n scrollTop: number;\n scrollHeight: number;\n };\n\n constructor() {\n effect(() => {\n const disabled = this.infiniteScrollDisabled();\n const configuration = {\n distance: this.infiniteScrollDistance(),\n upDistance: this.infiniteScrollUpDistance(),\n downDistance: this.infiniteScrollDownDistance(),\n direction: this.infiniteScrollDirection(),\n scrollWindow: this.scrollWindow(),\n fromRoot: this.fromRoot(),\n container: this.infiniteScrollContainer(),\n root: this.infiniteScrollRoot(),\n };\n\n if (!this.ready() || !isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n if (!this.sameConfiguration(configuration)) {\n this.previousConfiguration = configuration;\n this.setup();\n }\n\n if (disabled) {\n this.armedUp = true;\n this.armedDown = true;\n return;\n }\n\n this.armedUp = true;\n this.armedDown = true;\n if (this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n });\n\n this.destroyRef.onDestroy(() => {\n this.destroyRequested = true;\n this.destroyObserver();\n this.clearSentinels();\n this.cancelPrependWatcher();\n });\n }\n\n ngAfterViewInit(): void {\n this.ready.set(true);\n\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n this.previousConfiguration = undefined;\n this.setup();\n if (this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n }\n\n /**\n * Re-check the sentinels after application code has appended/prepended data.\n * Usually not needed, but useful for custom rendering pipelines.\n */\n check(): void {\n if (!this.ready() || !isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.armedUp = true;\n this.armedDown = true;\n this.scheduleCheck();\n }\n\n /**\n * Explicitly finish a pending prepend operation.\n * Useful when an application knows exactly when its async batch has rendered.\n */\n completePrepend(): void {\n this.tryCompensatePrepend(true);\n }\n\n private sameConfiguration(next: NonNullable<typeof this.previousConfiguration>): boolean {\n const previous = this.previousConfiguration;\n if (!previous) return false;\n\n return (\n previous.distance === next.distance &&\n previous.upDistance === next.upDistance &&\n previous.downDistance === next.downDistance &&\n previous.direction === next.direction &&\n previous.scrollWindow === next.scrollWindow &&\n previous.fromRoot === next.fromRoot &&\n previous.container === next.container &&\n previous.root === next.root\n );\n }\n\n private setup(): void {\n this.destroyObserver();\n this.clearSentinels();\n\n this.root = this.resolveRoot();\n\n this.topSentinel = this.createSentinel('top');\n this.bottomSentinel = this.createSentinel('bottom');\n\n const host = this.hostRef.nativeElement;\n\n host.prepend(this.topSentinel);\n host.append(this.bottomSentinel);\n\n this.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n if (entry.target === this.topSentinel) this.armedUp = true;\n if (entry.target === this.bottomSentinel) this.armedDown = true;\n continue;\n }\n\n if (entry.target === this.topSentinel && this.allowsDirection('up')) {\n this.trigger('up');\n }\n\n if (entry.target === this.bottomSentinel && this.allowsDirection('down')) {\n this.trigger('down');\n }\n }\n },\n {\n root: this.root,\n rootMargin: this.buildRootMargin(),\n threshold: 0,\n },\n );\n\n this.observer.observe(this.topSentinel);\n this.observer.observe(this.bottomSentinel);\n\n this.resizeObserver = new ResizeObserver(() => {\n if (this.destroyRequested) return;\n if (this.prependSnapshot) {\n this.tryCompensatePrepend(false);\n }\n if (!this.infiniteScrollDisabled() && this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n\n const observedRoot = this.root ?? this.getDocumentScroller();\n if (observedRoot) {\n this.resizeObserver.observe(observedRoot);\n }\n this.resizeObserver.observe(host);\n\n this.mutationObserver = new MutationObserver(() => {\n if (this.destroyRequested) return;\n if (this.prependSnapshot) {\n this.tryCompensatePrepend(false);\n }\n if (!this.infiniteScrollDisabled() && this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n\n this.mutationObserver.observe(host, {\n childList: true,\n subtree: true,\n });\n }\n\n private trigger(direction: 'up' | 'down'): void {\n if (this.infiniteScrollDisabled()) {\n return;\n }\n\n const armed = direction === 'up' ? this.armedUp : this.armedDown;\n if (!armed) {\n return;\n }\n\n const now = performance.now();\n if (now - this.lastTriggerAt < Math.max(0, this.infiniteScrollMinInterval())) {\n return;\n }\n\n const target = this.hostRef.nativeElement;\n const event: NgxInfiniteScrollEvent = {\n direction,\n distance: this.distanceFor(direction),\n target,\n root: this.root,\n };\n\n this.lastTriggerAt = now;\n\n if (direction === 'up') {\n this.armedUp = false;\n if (this.infiniteScrollMaintainScrollPosition()) {\n this.capturePrependSnapshot();\n }\n } else {\n this.armedDown = false;\n }\n\n this.zone.run(() => {\n this.scrolled.emit(event);\n if (direction === 'up') {\n this.scrolledUp.emit(event);\n this.scrollStartReached.emit(event);\n } else {\n this.scrolledDown.emit(event);\n this.scrollEndReached.emit(event);\n }\n });\n }\n\n private allowsDirection(direction: 'up' | 'down'): boolean {\n const configured = this.infiniteScrollDirection();\n return configured === 'both' || configured === direction;\n }\n\n private resolveRoot(): HTMLElement | null {\n if (this.scrollWindow()) {\n return null;\n }\n\n const explicit = this.infiniteScrollRoot();\n if (explicit) {\n return explicit;\n }\n\n const container = this.infiniteScrollContainer();\n //TODO: not safe instanceof: node.nodeType === Node.ELEMENT_NODE\n if (container instanceof HTMLElement) {\n return container;\n }\n\n if (typeof container === 'string' && container.trim()) {\n const scope: ParentNode = this.fromRoot() ? document : this.hostRef.nativeElement;\n return scope.querySelector<HTMLElement>(container) ?? this.hostRef.nativeElement;\n }\n\n return this.hostRef.nativeElement;\n }\n\n private buildRootMargin(): string {\n const up = this.distanceFor('up');\n const down = this.distanceFor('down');\n const direction = this.infiniteScrollDirection();\n\n if (direction === 'up') {\n return `${up}px 0px 0px 0px`;\n }\n\n if (direction === 'down') {\n return `0px 0px ${down}px 0px`;\n }\n\n return `${up}px 0px ${down}px 0px`;\n }\n\n private createSentinel(position: 'top' | 'bottom'): HTMLElement {\n const node = document.createElement('span');\n node.dataset['ngxInfiniteScrollSentinel'] = position;\n node.setAttribute('aria-hidden', 'true');\n node.style.display = 'block';\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.margin = '0';\n node.style.padding = '0';\n node.style.border = '0';\n node.style.pointerEvents = 'none';\n node.style.visibility = 'hidden';\n return node;\n }\n\n private scheduleCheck(): void {\n window.setTimeout(() => {\n if (this.destroyRequested || this.infiniteScrollDisabled()) return;\n this.checkVisibilityDirectly();\n }, MANUAL_CHECK_DELAY_MS);\n }\n\n private checkVisibilityDirectly(): void {\n if (!this.topSentinel || !this.bottomSentinel || this.infiniteScrollDisabled()) {\n return;\n }\n\n const rootRect = this.root\n ? this.root.getBoundingClientRect()\n : { top: 0, bottom: window.innerHeight };\n\n const rootTop = rootRect.top;\n const rootBottom = rootRect.bottom;\n const upDistance = this.distanceFor('up');\n const downDistance = this.distanceFor('down');\n\n if (this.allowsDirection('up') && this.armedUp) {\n const rect = this.topSentinel.getBoundingClientRect();\n if (rect.bottom >= rootTop - upDistance && rect.top <= rootBottom) {\n this.trigger('up');\n }\n }\n\n if (this.allowsDirection('down') && this.armedDown) {\n const rect = this.bottomSentinel.getBoundingClientRect();\n if (rect.top <= rootBottom + downDistance && rect.bottom >= rootTop) {\n this.trigger('down');\n }\n }\n }\n\n private distanceFor(direction: 'up' | 'down'): number {\n const override =\n direction === 'up' ? this.infiniteScrollUpDistance() : this.infiniteScrollDownDistance();\n return Math.max(0, override ?? this.infiniteScrollDistance());\n }\n\n private getDocumentScroller(): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n return document.scrollingElement?.nodeType === Node.ELEMENT_NODE\n ? (document.scrollingElement as HTMLElement)\n : null;\n }\n\n private getScrollMetrics(): {\n element: HTMLElement | null;\n scrollTop: number;\n scrollHeight: number;\n } {\n const element = this.root ?? this.getDocumentScroller();\n if (element) {\n return {\n element,\n scrollTop: element.scrollTop,\n scrollHeight: element.scrollHeight,\n };\n }\n\n return {\n element: null,\n scrollTop: window.scrollY,\n scrollHeight: Math.max(\n document.documentElement.scrollHeight,\n document.body?.scrollHeight ?? 0,\n ),\n };\n }\n\n private capturePrependSnapshot(): void {\n const metrics = this.getScrollMetrics();\n this.prependSnapshot = {\n scrollTop: metrics.scrollTop,\n scrollHeight: metrics.scrollHeight,\n };\n\n this.watchPrepend();\n }\n\n private watchPrepend(): void {\n this.cancelPrependWatcher();\n\n const startedAt = performance.now();\n\n const frame = () => {\n if (!this.prependSnapshot || this.destroyRequested) {\n this.prependFrame = 0;\n return;\n }\n\n const compensated = this.tryCompensatePrepend(false);\n if (compensated || performance.now() - startedAt >= PREPEND_MAX_WAIT_MS) {\n this.prependFrame = 0;\n return;\n }\n\n this.prependFrame = window.requestAnimationFrame(frame);\n };\n\n this.prependFrame = window.requestAnimationFrame(frame);\n }\n\n private tryCompensatePrepend(force: boolean): boolean {\n const snapshot = this.prependSnapshot;\n if (!snapshot) return true;\n\n const metrics = this.getScrollMetrics();\n const delta = metrics.scrollHeight - snapshot.scrollHeight;\n\n if (delta <= 0) {\n if (force) {\n this.prependSnapshot = undefined;\n this.cancelPrependWatcher();\n }\n return false;\n }\n\n /*\n * Do not fight an intentional user scroll while the request is in-flight.\n * A tiny tolerance absorbs layout rounding and browser scroll anchoring.\n */\n const currentTop = metrics.scrollTop;\n const movedByUser = Math.abs(currentTop - snapshot.scrollTop) > 4;\n\n if (!movedByUser || force) {\n const nextTop = snapshot.scrollTop + delta;\n\n if (metrics.element) {\n metrics.element.scrollTo({\n top: nextTop,\n behavior: this.infiniteScrollPreserveScrollBehavior(),\n });\n } else {\n window.scrollTo({\n top: nextTop,\n behavior: this.infiniteScrollPreserveScrollBehavior(),\n });\n }\n\n this.prependSnapshot = undefined;\n this.cancelPrependWatcher();\n return true;\n }\n\n return false;\n }\n\n private cancelPrependWatcher(): void {\n if (this.prependFrame) {\n window.cancelAnimationFrame(this.prependFrame);\n this.prependFrame = 0;\n }\n }\n\n private destroyObserver(): void {\n this.observer?.disconnect();\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n this.observer = undefined;\n this.resizeObserver = undefined;\n this.mutationObserver = undefined;\n }\n\n private clearSentinels(): void {\n this.topSentinel?.remove();\n this.bottomSentinel?.remove();\n this.topSentinel = undefined;\n this.bottomSentinel = undefined;\n }\n}\n\nfunction numberInput(value: number | string | null | undefined): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction nullableNumberInput(value: number | string | null | undefined | unknown): number | null {\n if (value == null || value === '') return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction booleanInput(value: boolean | string | null | undefined): boolean {\n if (value === '' || value === true) return true;\n if (value === 'false' || value === false || value == null) return false;\n return Boolean(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-kit-infinite-scroll.mjs","sources":["../../../projects/libs/infinite-scroll/directives/infinite-scroll.directive.ts","../../../projects/libs/infinite-scroll/ngx-kit-infinite-scroll.ts"],"sourcesContent":["import {\n AfterViewInit,\n DestroyRef,\n Directive,\n ElementRef,\n NgZone,\n PLATFORM_ID,\n input,\n output,\n inject,\n signal,\n effect,\n DOCUMENT,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { NgxInfiniteScrollDirection, NgxInfiniteScrollEvent } from '../types/infinite-scroll.types';\n\nconst DEFAULT_DISTANCE = 200;\nconst DEFAULT_MIN_INTERVAL = 100;\nconst PREPEND_MAX_WAIT_MS = 5000;\nconst MANUAL_CHECK_DELAY_MS = 0;\n\n@Directive({\n selector: '[infiniteScroll]',\n standalone: true,\n exportAs: 'infiniteScroll',\n})\nexport class NgxInfiniteScroll implements AfterViewInit {\n readonly infiniteScrollDistance = input(DEFAULT_DISTANCE, {\n alias: 'infiniteScrollDistance',\n transform: numberInput,\n });\n\n readonly infiniteScrollDisabled = input(false, {\n alias: 'infiniteScrollDisabled',\n transform: booleanInput,\n });\n\n readonly infiniteScrollImmediateCheck = input(true, {\n alias: 'infiniteScrollImmediateCheck',\n transform: booleanInput,\n });\n\n readonly infiniteScrollMinInterval = input(DEFAULT_MIN_INTERVAL, {\n alias: 'infiniteScrollMinInterval',\n transform: numberInput,\n });\n\n readonly infiniteScrollUpDistance = input<number | null>(null, {\n alias: 'infiniteScrollUpDistance',\n transform: nullableNumberInput,\n });\n\n readonly infiniteScrollDownDistance = input<number | null>(null, {\n alias: 'infiniteScrollDownDistance',\n transform: nullableNumberInput,\n });\n\n readonly infiniteScrollDirection = input<NgxInfiniteScrollDirection>('down', {\n alias: 'infiniteScrollDirection',\n });\n\n readonly infiniteScrollContainer = input<string | HTMLElement | null>(null, {\n alias: 'infiniteScrollContainer',\n });\n\n readonly infiniteScrollRoot = input<HTMLElement | null>(null, {\n alias: 'infiniteScrollRoot',\n });\n\n readonly scrollWindow = input(true, {\n alias: 'scrollWindow',\n transform: booleanInput,\n });\n\n readonly fromRoot = input(false, {\n alias: 'fromRoot',\n transform: booleanInput,\n });\n\n /** Preserve the visual scroll position when older content is prepended. */\n readonly infiniteScrollMaintainScrollPosition = input(true, {\n alias: 'infiniteScrollMaintainScrollPosition',\n transform: booleanInput,\n });\n\n /** Optional CSS scroll behavior used while compensating a prepend. */\n readonly infiniteScrollPreserveScrollBehavior = input<ScrollBehavior>('auto', {\n alias: 'infiniteScrollPreserveScrollBehavior',\n });\n\n readonly scrolled = output<NgxInfiniteScrollEvent>();\n readonly scrolledUp = output<NgxInfiniteScrollEvent>();\n readonly scrolledDown = output<NgxInfiniteScrollEvent>();\n readonly scrollStartReached = output<NgxInfiniteScrollEvent>();\n readonly scrollEndReached = output<NgxInfiniteScrollEvent>();\n\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly doc = inject(DOCUMENT);\n\n private readonly ready = signal(false);\n private previousConfiguration?: {\n distance: number;\n upDistance: number | null;\n downDistance: number | null;\n direction: NgxInfiniteScrollDirection;\n scrollWindow: boolean;\n fromRoot: boolean;\n container: string | HTMLElement | null;\n root: HTMLElement | null;\n };\n private observer?: IntersectionObserver;\n private resizeObserver?: ResizeObserver;\n private mutationObserver?: MutationObserver;\n private topSentinel?: HTMLElement;\n private bottomSentinel?: HTMLElement;\n private root: HTMLElement | null = null;\n private lastTriggerAt = Number.NEGATIVE_INFINITY;\n private armedUp = true;\n private armedDown = true;\n private destroyRequested = false;\n private prependFrame = 0;\n\n private prependSnapshot?: {\n scrollTop: number;\n scrollHeight: number;\n };\n\n constructor() {\n effect(() => {\n const disabled = this.infiniteScrollDisabled();\n const configuration = {\n distance: this.infiniteScrollDistance(),\n upDistance: this.infiniteScrollUpDistance(),\n downDistance: this.infiniteScrollDownDistance(),\n direction: this.infiniteScrollDirection(),\n scrollWindow: this.scrollWindow(),\n fromRoot: this.fromRoot(),\n container: this.infiniteScrollContainer(),\n root: this.infiniteScrollRoot(),\n };\n\n if (!this.ready() || !isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n if (!this.sameConfiguration(configuration)) {\n this.previousConfiguration = configuration;\n this.setup();\n }\n\n if (disabled) {\n this.armedUp = true;\n this.armedDown = true;\n return;\n }\n\n this.armedUp = true;\n this.armedDown = true;\n if (this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n });\n\n this.destroyRef.onDestroy(() => {\n this.destroyRequested = true;\n this.destroyObserver();\n this.clearSentinels();\n this.cancelPrependWatcher();\n });\n }\n\n ngAfterViewInit(): void {\n this.ready.set(true);\n\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n this.previousConfiguration = undefined;\n this.setup();\n if (this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n }\n\n /**\n * Re-check the sentinels after application code has appended/prepended data.\n * Usually not needed, but useful for custom rendering pipelines.\n */\n check(): void {\n if (!this.ready() || !isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.armedUp = true;\n this.armedDown = true;\n this.scheduleCheck();\n }\n\n /**\n * Explicitly finish a pending prepend operation.\n * Useful when an application knows exactly when its async batch has rendered.\n */\n completePrepend(): void {\n this.tryCompensatePrepend(true);\n }\n\n private sameConfiguration(next: NonNullable<typeof this.previousConfiguration>): boolean {\n const previous = this.previousConfiguration;\n if (!previous) return false;\n\n return (\n previous.distance === next.distance &&\n previous.upDistance === next.upDistance &&\n previous.downDistance === next.downDistance &&\n previous.direction === next.direction &&\n previous.scrollWindow === next.scrollWindow &&\n previous.fromRoot === next.fromRoot &&\n previous.container === next.container &&\n previous.root === next.root\n );\n }\n\n private setup(): void {\n this.destroyObserver();\n this.clearSentinels();\n\n this.root = this.resolveRoot();\n\n this.topSentinel = this.createSentinel('top');\n this.bottomSentinel = this.createSentinel('bottom');\n\n const host = this.hostRef.nativeElement;\n\n host.prepend(this.topSentinel);\n host.append(this.bottomSentinel);\n\n this.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n if (entry.target === this.topSentinel) this.armedUp = true;\n if (entry.target === this.bottomSentinel) this.armedDown = true;\n continue;\n }\n\n if (entry.target === this.topSentinel && this.allowsDirection('up')) {\n this.trigger('up');\n }\n\n if (entry.target === this.bottomSentinel && this.allowsDirection('down')) {\n this.trigger('down');\n }\n }\n },\n {\n root: this.root,\n rootMargin: this.buildRootMargin(),\n threshold: 0,\n },\n );\n\n this.observer.observe(this.topSentinel);\n this.observer.observe(this.bottomSentinel);\n\n this.resizeObserver = new ResizeObserver(() => {\n if (this.destroyRequested) return;\n if (this.prependSnapshot) {\n this.tryCompensatePrepend(false);\n }\n if (!this.infiniteScrollDisabled() && this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n\n const observedRoot = this.root ?? this.getDocumentScroller();\n if (observedRoot) {\n this.resizeObserver.observe(observedRoot);\n }\n this.resizeObserver.observe(host);\n\n this.mutationObserver = new MutationObserver(() => {\n if (this.destroyRequested) return;\n if (this.prependSnapshot) {\n this.tryCompensatePrepend(false);\n }\n if (!this.infiniteScrollDisabled() && this.infiniteScrollImmediateCheck()) {\n this.scheduleCheck();\n }\n });\n\n this.mutationObserver.observe(host, {\n childList: true,\n subtree: true,\n });\n }\n\n private trigger(direction: 'up' | 'down'): void {\n if (this.infiniteScrollDisabled()) {\n return;\n }\n\n const armed = direction === 'up' ? this.armedUp : this.armedDown;\n if (!armed) {\n return;\n }\n\n const now = performance.now();\n if (now - this.lastTriggerAt < Math.max(0, this.infiniteScrollMinInterval())) {\n return;\n }\n\n const target = this.hostRef.nativeElement;\n const event: NgxInfiniteScrollEvent = {\n direction,\n distance: this.distanceFor(direction),\n target,\n root: this.root,\n };\n\n this.lastTriggerAt = now;\n\n if (direction === 'up') {\n this.armedUp = false;\n if (this.infiniteScrollMaintainScrollPosition()) {\n this.capturePrependSnapshot();\n }\n } else {\n this.armedDown = false;\n }\n\n this.zone.run(() => {\n this.scrolled.emit(event);\n if (direction === 'up') {\n this.scrolledUp.emit(event);\n this.scrollStartReached.emit(event);\n } else {\n this.scrolledDown.emit(event);\n this.scrollEndReached.emit(event);\n }\n });\n }\n\n private allowsDirection(direction: 'up' | 'down'): boolean {\n const configured = this.infiniteScrollDirection();\n return configured === 'both' || configured === direction;\n }\n\n private resolveRoot(): HTMLElement | null {\n if (this.scrollWindow()) {\n return null;\n }\n\n const explicit = this.infiniteScrollRoot();\n if (explicit) {\n return explicit;\n }\n\n const container = this.infiniteScrollContainer();\n //TODO: not safe instanceof: node.nodeType === Node.ELEMENT_NODE\n if (container instanceof HTMLElement) {\n return container;\n }\n\n if (typeof container === 'string' && container.trim()) {\n const scope: ParentNode = this.fromRoot() ? this.doc : this.hostRef.nativeElement;\n return scope.querySelector<HTMLElement>(container) ?? this.hostRef.nativeElement;\n }\n\n return this.hostRef.nativeElement;\n }\n\n private buildRootMargin(): string {\n const up = this.distanceFor('up');\n const down = this.distanceFor('down');\n const direction = this.infiniteScrollDirection();\n\n if (direction === 'up') {\n return `${up}px 0px 0px 0px`;\n }\n\n if (direction === 'down') {\n return `0px 0px ${down}px 0px`;\n }\n\n return `${up}px 0px ${down}px 0px`;\n }\n\n private createSentinel(position: 'top' | 'bottom'): HTMLElement {\n const node = this.doc.createElement('span');\n node.dataset['ngxInfiniteScrollSentinel'] = position;\n node.setAttribute('aria-hidden', 'true');\n node.style.display = 'block';\n node.style.width = '1px';\n node.style.height = '1px';\n node.style.margin = '0';\n node.style.padding = '0';\n node.style.border = '0';\n node.style.pointerEvents = 'none';\n node.style.visibility = 'hidden';\n return node;\n }\n\n private scheduleCheck(): void {\n window.setTimeout(() => {\n if (this.destroyRequested || this.infiniteScrollDisabled()) return;\n this.checkVisibilityDirectly();\n }, MANUAL_CHECK_DELAY_MS);\n }\n\n private checkVisibilityDirectly(): void {\n if (!this.topSentinel || !this.bottomSentinel || this.infiniteScrollDisabled()) {\n return;\n }\n\n const rootRect = this.root\n ? this.root.getBoundingClientRect()\n : { top: 0, bottom: window.innerHeight };\n\n const rootTop = rootRect.top;\n const rootBottom = rootRect.bottom;\n const upDistance = this.distanceFor('up');\n const downDistance = this.distanceFor('down');\n\n if (this.allowsDirection('up') && this.armedUp) {\n const rect = this.topSentinel.getBoundingClientRect();\n if (rect.bottom >= rootTop - upDistance && rect.top <= rootBottom) {\n this.trigger('up');\n }\n }\n\n if (this.allowsDirection('down') && this.armedDown) {\n const rect = this.bottomSentinel.getBoundingClientRect();\n if (rect.top <= rootBottom + downDistance && rect.bottom >= rootTop) {\n this.trigger('down');\n }\n }\n }\n\n private distanceFor(direction: 'up' | 'down'): number {\n const override =\n direction === 'up' ? this.infiniteScrollUpDistance() : this.infiniteScrollDownDistance();\n return Math.max(0, override ?? this.infiniteScrollDistance());\n }\n\n private getDocumentScroller(): HTMLElement | null {\n if (typeof this.doc === 'undefined') return null;\n return this.doc.scrollingElement?.nodeType === Node.ELEMENT_NODE\n ? (this.doc.scrollingElement as HTMLElement)\n : null;\n }\n\n private getScrollMetrics(): {\n element: HTMLElement | null;\n scrollTop: number;\n scrollHeight: number;\n } {\n const element = this.root ?? this.getDocumentScroller();\n if (element) {\n return {\n element,\n scrollTop: element.scrollTop,\n scrollHeight: element.scrollHeight,\n };\n }\n\n return {\n element: null,\n scrollTop: window.scrollY,\n scrollHeight: Math.max(\n this.doc.documentElement.scrollHeight,\n this.doc.body?.scrollHeight ?? 0,\n ),\n };\n }\n\n private capturePrependSnapshot(): void {\n const metrics = this.getScrollMetrics();\n this.prependSnapshot = {\n scrollTop: metrics.scrollTop,\n scrollHeight: metrics.scrollHeight,\n };\n\n this.watchPrepend();\n }\n\n private watchPrepend(): void {\n this.cancelPrependWatcher();\n\n const startedAt = performance.now();\n\n const frame = () => {\n if (!this.prependSnapshot || this.destroyRequested) {\n this.prependFrame = 0;\n return;\n }\n\n const compensated = this.tryCompensatePrepend(false);\n if (compensated || performance.now() - startedAt >= PREPEND_MAX_WAIT_MS) {\n this.prependFrame = 0;\n return;\n }\n\n this.prependFrame = window.requestAnimationFrame(frame);\n };\n\n this.prependFrame = window.requestAnimationFrame(frame);\n }\n\n private tryCompensatePrepend(force: boolean): boolean {\n const snapshot = this.prependSnapshot;\n if (!snapshot) return true;\n\n const metrics = this.getScrollMetrics();\n const delta = metrics.scrollHeight - snapshot.scrollHeight;\n\n if (delta <= 0) {\n if (force) {\n this.prependSnapshot = undefined;\n this.cancelPrependWatcher();\n }\n return false;\n }\n\n /*\n * Do not fight an intentional user scroll while the request is in-flight.\n * A tiny tolerance absorbs layout rounding and browser scroll anchoring.\n */\n const currentTop = metrics.scrollTop;\n const movedByUser = Math.abs(currentTop - snapshot.scrollTop) > 4;\n\n if (!movedByUser || force) {\n const nextTop = snapshot.scrollTop + delta;\n\n if (metrics.element) {\n metrics.element.scrollTo({\n top: nextTop,\n behavior: this.infiniteScrollPreserveScrollBehavior(),\n });\n } else {\n window.scrollTo({\n top: nextTop,\n behavior: this.infiniteScrollPreserveScrollBehavior(),\n });\n }\n\n this.prependSnapshot = undefined;\n this.cancelPrependWatcher();\n return true;\n }\n\n return false;\n }\n\n private cancelPrependWatcher(): void {\n if (this.prependFrame) {\n window.cancelAnimationFrame(this.prependFrame);\n this.prependFrame = 0;\n }\n }\n\n private destroyObserver(): void {\n this.observer?.disconnect();\n this.resizeObserver?.disconnect();\n this.mutationObserver?.disconnect();\n this.observer = undefined;\n this.resizeObserver = undefined;\n this.mutationObserver = undefined;\n }\n\n private clearSentinels(): void {\n this.topSentinel?.remove();\n this.bottomSentinel?.remove();\n this.topSentinel = undefined;\n this.bottomSentinel = undefined;\n }\n}\n\nfunction numberInput(value: number | string | null | undefined): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction nullableNumberInput(value: number | string | null | undefined | unknown): number | null {\n if (value == null || value === '') return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction booleanInput(value: boolean | string | null | undefined): boolean {\n if (value === '' || value === true) return true;\n if (value === 'false' || value === false || value == null) return false;\n return Boolean(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -168,11 +168,11 @@ class NgxNotificationComponent {
168
168
  return div.textContent;
169
169
  }
170
170
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
171
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxNotificationComponent, isStandalone: true, selector: "ngx-notification", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose", onFinish: "onFinish" }, viewQueries: [{ propertyName: "bar", first: true, predicate: ["bar"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n", styles: [":host{display:block;margin:8px 0;--ngx-notify-content-bg: light-dark(#ffffff, #262b35);--ngx-notify-content-fg: light-dark(#000, #fff)}.ngx-notify{display:flex;min-width:240px;min-width:min(350px,100dvw);max-width:100%;border-radius:8px;box-shadow:0 0 20px light-dark(#797979,rgba(2,2,2,.7411764706));opacity:0;transform:translateY(-8px);transition:opacity .28s ease,transform .28s ease;pointer-events:auto;overflow:hidden}.ngx-notify-icon-container{width:60px;min-width:60px;display:flex;align-items:center;justify-content:center}.ngx-notify-icon-container .ngx-notify-icon{padding:15px}.ngx-notify-icon-container .ngx-notify-icon svg{width:100%;height:100%}.ngx-notify-content{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);padding:15px;border-radius:0 0 0 15px;flex:auto}.ngx-notify-content .ngx-notify-title{font-size:1rem}.ngx-notify-content .ngx-notify-description{opacity:.8;font-size:.8rem}.ngx-show{opacity:1;transform:translateY(0)}.ngx-notify-info{background:#1cacff;--var-ngx-progress-bar-bg: #1cacff;color:#e8f3ff}.ngx-notify-success{background:#54c999;--var-ngx-progress-bar-bg: #54c999;color:#ebeceb}.ngx-notify-warning{background:#ffb242;--var-ngx-progress-bar-bg: #ffb242;color:#ffecec}.ngx-notify-error{background:#ff3c39;--var-ngx-progress-bar-bg: #ff3c39;color:#ffecec}.ngx-notify-close-container{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);display:flex;align-items:center;justify-content:center}.ngx-notify-close-container .ngx-notify-close{background:transparent;border:none;width:22px;height:22px;line-height:0;margin:0 5px;cursor:pointer;transform:rotate(0);transition:transform .4s}.ngx-notify-close-container .ngx-notify-close:hover{transform:rotate(90deg)}.ngx-notify-progress{position:absolute;bottom:0;height:4px;left:60px;right:0;overflow:hidden}.ngx-notify-progress .progress-bar{background-color:var(--var-ngx-progress-bar-bg);height:100%;transform:scaleX(0);transform-origin:left}:host-context([dir=rtl]) .ngx-notify-content{border-radius:0 0 15px}:host-context([dir=rtl]) .ngx-notify-progress{left:0;right:60px}:host-context([dir=rtl]) .ngx-notify-progress .progress-bar{transform-origin:right!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
171
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NgxNotificationComponent, isStandalone: true, selector: "ngx-notification", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null }, containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose", onFinish: "onFinish" }, viewQueries: [{ propertyName: "bar", first: true, predicate: ["bar"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n", styles: [":host{display:block;margin:8px 0;--ngx-notify-content-bg: light-dark(#ffffff, #262b35);--ngx-notify-content-fg: light-dark(#000, #fff)}.ngx-notify{display:flex;min-width:240px;width:min(500px,100dvw);max-width:100%;border-radius:8px;box-shadow:0 0 20px light-dark(#797979,rgba(2,2,2,.7411764706));opacity:0;transform:translateY(-8px);transition:opacity .28s ease,transform .28s ease;pointer-events:auto;overflow:hidden}.ngx-notify-icon-container{width:60px;min-width:60px;display:flex;align-items:center;justify-content:center}.ngx-notify-icon-container .ngx-notify-icon{padding:15px}.ngx-notify-icon-container .ngx-notify-icon svg{width:100%;height:100%}.ngx-notify-content{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);padding:15px;border-radius:0 0 0 15px;flex:auto}.ngx-notify-content .ngx-notify-title{font-size:1rem}.ngx-notify-content .ngx-notify-description{opacity:.8;font-size:.8rem}.ngx-show{opacity:1;transform:translateY(0)}.ngx-notify-info{background:#1cacff;--var-ngx-progress-bar-bg: #1cacff;color:#e8f3ff}.ngx-notify-success{background:#54c999;--var-ngx-progress-bar-bg: #54c999;color:#ebeceb}.ngx-notify-warning{background:#ffb242;--var-ngx-progress-bar-bg: #ffb242;color:#ffecec}.ngx-notify-error{background:#ff3c39;--var-ngx-progress-bar-bg: #ff3c39;color:#ffecec}.ngx-notify-close-container{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);display:flex;align-items:center;justify-content:center}.ngx-notify-close-container .ngx-notify-close{background:transparent;border:none;width:22px;height:22px;line-height:0;margin:0 5px;cursor:pointer;transform:rotate(0);transition:transform .4s}.ngx-notify-close-container .ngx-notify-close:hover{transform:rotate(90deg)}.ngx-notify-progress{position:absolute;bottom:0;height:4px;left:60px;right:0;overflow:hidden}.ngx-notify-progress .progress-bar{background-color:var(--var-ngx-progress-bar-bg);height:100%;transform:scaleX(0);transform-origin:left}:host-context([dir=rtl]) .ngx-notify-content{border-radius:0 0 15px}:host-context([dir=rtl]) .ngx-notify-progress{left:0;right:60px}:host-context([dir=rtl]) .ngx-notify-progress .progress-bar{transform-origin:right!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
172
172
  }
173
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxNotificationComponent, decorators: [{
174
174
  type: Component,
175
- args: [{ selector: 'ngx-notification', imports: [CommonModule], template: "<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n", styles: [":host{display:block;margin:8px 0;--ngx-notify-content-bg: light-dark(#ffffff, #262b35);--ngx-notify-content-fg: light-dark(#000, #fff)}.ngx-notify{display:flex;min-width:240px;min-width:min(350px,100dvw);max-width:100%;border-radius:8px;box-shadow:0 0 20px light-dark(#797979,rgba(2,2,2,.7411764706));opacity:0;transform:translateY(-8px);transition:opacity .28s ease,transform .28s ease;pointer-events:auto;overflow:hidden}.ngx-notify-icon-container{width:60px;min-width:60px;display:flex;align-items:center;justify-content:center}.ngx-notify-icon-container .ngx-notify-icon{padding:15px}.ngx-notify-icon-container .ngx-notify-icon svg{width:100%;height:100%}.ngx-notify-content{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);padding:15px;border-radius:0 0 0 15px;flex:auto}.ngx-notify-content .ngx-notify-title{font-size:1rem}.ngx-notify-content .ngx-notify-description{opacity:.8;font-size:.8rem}.ngx-show{opacity:1;transform:translateY(0)}.ngx-notify-info{background:#1cacff;--var-ngx-progress-bar-bg: #1cacff;color:#e8f3ff}.ngx-notify-success{background:#54c999;--var-ngx-progress-bar-bg: #54c999;color:#ebeceb}.ngx-notify-warning{background:#ffb242;--var-ngx-progress-bar-bg: #ffb242;color:#ffecec}.ngx-notify-error{background:#ff3c39;--var-ngx-progress-bar-bg: #ff3c39;color:#ffecec}.ngx-notify-close-container{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);display:flex;align-items:center;justify-content:center}.ngx-notify-close-container .ngx-notify-close{background:transparent;border:none;width:22px;height:22px;line-height:0;margin:0 5px;cursor:pointer;transform:rotate(0);transition:transform .4s}.ngx-notify-close-container .ngx-notify-close:hover{transform:rotate(90deg)}.ngx-notify-progress{position:absolute;bottom:0;height:4px;left:60px;right:0;overflow:hidden}.ngx-notify-progress .progress-bar{background-color:var(--var-ngx-progress-bar-bg);height:100%;transform:scaleX(0);transform-origin:left}:host-context([dir=rtl]) .ngx-notify-content{border-radius:0 0 15px}:host-context([dir=rtl]) .ngx-notify-progress{left:0;right:60px}:host-context([dir=rtl]) .ngx-notify-progress .progress-bar{transform-origin:right!important}\n"] }]
175
+ args: [{ selector: 'ngx-notification', imports: [CommonModule], template: "<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n", styles: [":host{display:block;margin:8px 0;--ngx-notify-content-bg: light-dark(#ffffff, #262b35);--ngx-notify-content-fg: light-dark(#000, #fff)}.ngx-notify{display:flex;min-width:240px;width:min(500px,100dvw);max-width:100%;border-radius:8px;box-shadow:0 0 20px light-dark(#797979,rgba(2,2,2,.7411764706));opacity:0;transform:translateY(-8px);transition:opacity .28s ease,transform .28s ease;pointer-events:auto;overflow:hidden}.ngx-notify-icon-container{width:60px;min-width:60px;display:flex;align-items:center;justify-content:center}.ngx-notify-icon-container .ngx-notify-icon{padding:15px}.ngx-notify-icon-container .ngx-notify-icon svg{width:100%;height:100%}.ngx-notify-content{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);padding:15px;border-radius:0 0 0 15px;flex:auto}.ngx-notify-content .ngx-notify-title{font-size:1rem}.ngx-notify-content .ngx-notify-description{opacity:.8;font-size:.8rem}.ngx-show{opacity:1;transform:translateY(0)}.ngx-notify-info{background:#1cacff;--var-ngx-progress-bar-bg: #1cacff;color:#e8f3ff}.ngx-notify-success{background:#54c999;--var-ngx-progress-bar-bg: #54c999;color:#ebeceb}.ngx-notify-warning{background:#ffb242;--var-ngx-progress-bar-bg: #ffb242;color:#ffecec}.ngx-notify-error{background:#ff3c39;--var-ngx-progress-bar-bg: #ff3c39;color:#ffecec}.ngx-notify-close-container{background-color:var(--ngx-notify-content-bg);color:var(--ngx-notify-content-fg);display:flex;align-items:center;justify-content:center}.ngx-notify-close-container .ngx-notify-close{background:transparent;border:none;width:22px;height:22px;line-height:0;margin:0 5px;cursor:pointer;transform:rotate(0);transition:transform .4s}.ngx-notify-close-container .ngx-notify-close:hover{transform:rotate(90deg)}.ngx-notify-progress{position:absolute;bottom:0;height:4px;left:60px;right:0;overflow:hidden}.ngx-notify-progress .progress-bar{background-color:var(--var-ngx-progress-bar-bg);height:100%;transform:scaleX(0);transform-origin:left}:host-context([dir=rtl]) .ngx-notify-content{border-radius:0 0 15px}:host-context([dir=rtl]) .ngx-notify-progress{left:0;right:60px}:host-context([dir=rtl]) .ngx-notify-progress .progress-bar{transform-origin:right!important}\n"] }]
176
176
  }], ctorParameters: () => [], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }], containerClass: [{
177
177
  type: Input
178
178
  }], bar: [{ type: i0.ViewChild, args: ['bar', { isSignal: true }] }], onClose: [{ type: i0.Output, args: ["onClose"] }], onFinish: [{ type: i0.Output, args: ["onFinish"] }] } });
@@ -329,7 +329,6 @@ class NgxNotifyService {
329
329
  if (!this.container) {
330
330
  this.configureContainer(payload.options);
331
331
  }
332
- // Use DOCUMENT rather than the global document.
333
332
  const host = this.doc.createElement('div');
334
333
  this.container.appendChild(host);
335
334
  const compRef = createComponent(NgxNotificationComponent, {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-kit-notify.mjs","sources":["../../../projects/libs/notify/models/notify-config.ts","../../../projects/libs/notify/notify-facade.ts","../../../projects/libs/notify/components/notification.component.ts","../../../projects/libs/notify/components/notification.component.html","../../../projects/libs/notify/services/notify.service.ts","../../../projects/libs/notify/notify-provider.ts","../../../projects/libs/notify/ngx-kit-notify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NgxNotifyOptions } from './notify-options';\nimport { NgxNotifyService } from '../services/notify.service';\n\nexport const NGX_NOTIFY_CONFIG = new InjectionToken<NgxNotifyOptions>('NgxNotifyOption');\nexport const NGX_NOTIFY_API = new InjectionToken<NgxNotifyService>('NgxNotifyService');\n\nexport const NGX_NOTIFY_DEFAULTS: Required<NgxNotifyOptions> = {\n timeout: 3000,\n position: 'top-center',\n maxVisible: 10,\n allowHtml: false,\n pauseOnHover: true,\n dismissible: true,\n closeOnTap: true,\n containerClass: 'ngx-bg-notify',\n notificationClass: 'ngx-notify',\n usePopover: true,\n};\n","import { Injector } from '@angular/core';\nimport { NgxNotifyOptions } from './models/notify-options';\nimport { NGX_NOTIFY_API } from './models/notify-config';\nimport { NgxNotifyPayload } from './models/notify.model';\n\n/**\n * Static facade so call sites can use: Notify.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class Notify {\n static injector: Injector;\n\n static show(\n type: 'info' | 'success' | 'warning' | 'error' = 'info',\n message: string,\n description?: string,\n options?: NgxNotifyOptions,\n ): NgxNotifyPayload {\n if (!Notify.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideNotify()\" in root provider.',\n );\n }\n return Notify.injector.get(NGX_NOTIFY_API).show(message, description, type, options);\n }\n\n static info(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('info', message, description, options);\n }\n\n static success(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('success', message, description, options);\n }\n static warning(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('warning', message, description, options);\n }\n static error(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('error', message, description, options);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n ChangeDetectorRef,\n DOCUMENT,\n inject,\n ElementRef,\n afterNextRender,\n signal,\n output,\n input,\n effect,\n viewChild,\n} from '@angular/core';\nimport { INotifyEnd, NgxNotifyPayload } from '../models/notify.model';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n selector: 'ngx-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n imports: [CommonModule],\n})\nexport class NgxNotificationComponent implements OnInit, OnDestroy {\n payload = input.required<NgxNotifyPayload>();\n @Input() containerClass = 'ngx-notify';\n\n bar = viewChild<ElementRef<HTMLElement>>('bar');\n onClose = output<INotifyEnd>();\n onFinish = output<INotifyEnd>();\n\n private _rafId = 0;\n private _duration = 0;\n private _remaining = 0;\n private _endTs = 0;\n private _paused = false;\n\n safeMessage: SafeHtml | string = '';\n safeDescription: SafeHtml | string = '';\n showClass = signal('');\n protected doc = inject(DOCUMENT);\n el = inject(ElementRef);\n protected sanitizer = inject(DomSanitizer);\n protected chdr = inject(ChangeDetectorRef);\n constructor() {\n afterNextRender(() => {\n this.showClass.set('ngx-show');\n this.chdr.detectChanges();\n });\n effect(() => {\n const payload = this.payload();\n\n // decide how to render message\n if (payload.options.allowHtml) {\n this.safeMessage = this.sanitizer.bypassSecurityTrustHtml(payload.message);\n this.safeDescription = this.sanitizer.bypassSecurityTrustHtml(payload.description ?? '');\n } else {\n this.safeMessage = this.escapeHtml(payload.message);\n this.safeDescription = this.escapeHtml(payload.description);\n }\n });\n effect(() => {\n const timeout = this.payload().options.timeout ?? 0;\n this.startTimer(timeout);\n });\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.clearTimer();\n }\n\n // Public API to start timer (used by service when created)\n startTimer(ms: number) {\n this.clearTimer();\n\n if (!this._paused) {\n this._duration = ms;\n }\n this._remaining = ms;\n this._endTs = performance.now() + ms;\n\n const bar = this.bar()?.nativeElement;\n if (bar) {\n bar.style.transition = `transform ${ms}ms linear`;\n bar.style.transform = 'scaleX(1)';\n }\n\n this.animateProgress();\n }\n pauseTimer() {\n this._paused = true;\n cancelAnimationFrame(this._rafId);\n this._remaining = Math.max(0, this._endTs - performance.now());\n const bar = this.bar()?.nativeElement;\n if (bar) {\n const matrix = getComputedStyle?.(bar)?.transform;\n bar.style.transition = 'none';\n bar.style.transform = matrix;\n }\n }\n\n resumeTimer() {\n if (!this._paused || this._remaining <= 0) {\n return;\n }\n\n this._paused = false;\n\n this.startTimer(this._remaining);\n }\n\n private clearTimer() {\n cancelAnimationFrame(this._rafId);\n this._rafId = 0;\n }\n\n private animateProgress() {\n const update = () => {\n const remaining = Math.max(0, this._endTs - performance.now());\n if (remaining <= 0) {\n this.onFinish.emit({\n id: this.payload().id,\n el: this.el.nativeElement,\n });\n return;\n }\n\n this._rafId = requestAnimationFrame(update);\n };\n\n this._rafId = requestAnimationFrame(update);\n }\n\n close(ev?: Event) {\n if (ev) ev.stopPropagation();\n this.onClose.emit({ id: this.payload().id, el: this.el.nativeElement });\n }\n\n onMouseEnter() {\n if (this.payload().options.pauseOnHover) this.pauseTimer();\n }\n onMouseLeave() {\n if (this.payload().options.pauseOnHover) this.resumeTimer();\n }\n onTap() {\n if (this.payload().options.closeOnTap) this.close();\n }\n\n escapeHtml(input?: string) {\n if (!input) return '';\n const div = this.doc.createElement('div');\n div.appendChild(this.doc.createTextNode(input));\n return div.textContent;\n }\n}\n","<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n","import {\n Injectable,\n ComponentRef,\n DOCUMENT,\n inject,\n createComponent,\n EnvironmentInjector,\n ApplicationRef,\n EventEmitter,\n} from '@angular/core';\n\nimport { NgxNotifyOptions } from '../models/notify-options';\nimport { INotifyEnd, NgxNotifyPayload, NgxNotifyType } from '../models/notify.model';\nimport { WINDOW } from 'ngx-kit/core';\nimport { NGX_NOTIFY_CONFIG } from '../models/notify-config';\nimport { NgxNotificationComponent } from '../components/notification.component';\n\nfunction makeId(): string {\n return 'n_' + Math.random().toString(36).substring(2, 11);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgxNotifyService {\n private queue: NgxNotifyPayload[] = [];\n\n private visible: {\n ref: ComponentRef<NgxNotificationComponent>;\n payload: NgxNotifyPayload;\n }[] = [];\n\n private container: HTMLElement | null = null;\n\n private envInjector = inject(EnvironmentInjector);\n private appRef = inject(ApplicationRef);\n private doc = inject(DOCUMENT);\n private win = inject(WINDOW);\n private defaultOptions = inject(NGX_NOTIFY_CONFIG);\n\n private removalTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n constructor() {}\n\n configureContainer(opt: NgxNotifyOptions): void {\n const { containerClass, position, usePopover } = opt;\n\n if (!this.container) {\n this.container = this.doc.createElement('div');\n this.doc.body.appendChild(this.container);\n }\n\n const container = this.container;\n\n container.className = containerClass + ' ngx-notify-container ngx-pos-' + position;\n\n // Explicitly reset positioning so changing options does not leave\n // stale styles from the previous configuration.\n Object.assign(container.style, {\n position: 'fixed',\n zIndex: '99999',\n inset: 'auto',\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto',\n margin: '0',\n transform: 'none',\n width: 'max-content',\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n boxSizing: 'border-box',\n border: '0',\n padding: '0',\n background: 'transparent',\n color: 'inherit',\n overflow: 'visible',\n pointerEvents: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n });\n\n // Detect the page's direction without requiring an extra option.\n const direction =\n container.closest('[dir]')?.getAttribute('dir') ||\n this.doc.documentElement.getAttribute('dir') ||\n this.doc.body?.getAttribute('dir') ||\n 'ltr';\n\n container.dir = direction === 'rtl' ? 'rtl' : 'ltr';\n\n // Keep left/right as physical viewport positions.\n // RTL affects text direction, not the meaning of these positions.\n switch (position) {\n case 'center':\n container.style.top = '50%';\n container.style.left = '50%';\n container.style.transform = 'translate(-50%, -50%)';\n container.style.alignItems = 'center';\n break;\n\n default: {\n if (position?.includes('top')) {\n container.style.top = '20px';\n } else {\n container.style.bottom = '20px';\n }\n\n if (position?.includes('left')) {\n container.style.left = '20px';\n container.style.alignItems = 'flex-start';\n } else if (position?.includes('right')) {\n container.style.right = '20px';\n container.style.alignItems = 'flex-end';\n } else if (position?.includes('center')) {\n container.style.left = '50%';\n container.style.transform = 'translateX(-50%)';\n container.style.alignItems = 'center';\n }\n\n if (position?.includes('bottom')) {\n container.style.flexDirection = 'column-reverse';\n }\n\n break;\n }\n }\n\n if (usePopover) {\n // Apply the positioning styles before entering the top layer.\n container.setAttribute('popover', 'manual');\n\n if (!container.matches(':popover-open')) {\n try {\n container.showPopover();\n } catch {\n // Avoid breaking notification display if the browser does not\n // support Popover or the element cannot enter the top layer.\n container.removeAttribute('popover');\n }\n }\n } else {\n if (container.matches(':popover-open')) {\n try {\n container.hidePopover();\n } catch {\n // The element may already have left the top layer.\n }\n }\n\n container.removeAttribute('popover');\n }\n }\n\n show(\n message: string,\n description?: string,\n type: NgxNotifyType = 'info',\n options?: NgxNotifyOptions,\n ) {\n const opts: NgxNotifyOptions = {\n ...this.defaultOptions,\n ...(options || {}),\n };\n\n const id =\n typeof (this.win as any).crypto?.randomUUID === 'function'\n ? (this.win as any).crypto.randomUUID()\n : makeId();\n\n const payload: NgxNotifyPayload = {\n id,\n message,\n description,\n type,\n options: opts,\n onClose: new EventEmitter(),\n onFinish: new EventEmitter(),\n close: () => this.close(id),\n };\n\n this.configureContainer(opts);\n\n // Cancel a pending removal if the same ID is ever reused.\n const timer = this.removalTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.removalTimers.delete(id);\n }\n\n if (this.visible.length >= opts.maxVisible!) {\n this.queue.push(payload);\n } else {\n this._createAndShow(payload);\n }\n\n return payload;\n }\n\n private _createAndShow(payload: NgxNotifyPayload): void {\n if (!this.container) {\n this.configureContainer(payload.options);\n }\n\n // Use DOCUMENT rather than the global document.\n const host = this.doc.createElement('div');\n\n this.container!.appendChild(host);\n\n const compRef = createComponent(NgxNotificationComponent, {\n environmentInjector: this.envInjector,\n hostElement: host,\n });\n\n compRef.setInput('payload', payload);\n\n compRef.instance.onClose.subscribe((d) => {\n this.removeEl(d);\n payload.onClose.emit(d);\n });\n\n compRef.instance.onFinish.subscribe((d) => {\n this.removeEl(d);\n payload.onFinish.emit(d);\n payload.onClose.emit(d);\n });\n\n // Registers the component’s view so it participates in change detection cycle.\n this.appRef.attachView(compRef.hostView);\n // store visible\n this.visible.push({ ref: compRef, payload });\n }\n\n private close(id: string): void {\n const item = this.visible.find((x) => x.payload.id === id);\n\n if (item) {\n const el = item.ref.instance.el.nativeElement;\n\n if (el) {\n this.removeEl({ id, el });\n }\n }\n\n // If the notification is still queued, remove it immediately.\n this.queue = this.queue.filter((q) => q.id !== id);\n\n this.cleanupIfEmpty();\n }\n\n private removeNode(node: HTMLElement, id: string): void {\n // Prevent multiple close/finish events from scheduling duplicate\n // removal operations for the same notification.\n if (this.removalTimers.has(id)) {\n return;\n }\n\n node.style.opacity = '0';\n node.style.transform = 'translateY(-30px)';\n node.style.transition = 'all 300ms';\n\n const timer = setTimeout(() => {\n this.removalTimers.delete(id);\n\n const item = this.visible.find((x) => x.payload.id === id);\n\n if (item) {\n this.appRef.detachView(item.ref.hostView);\n item.ref.destroy();\n }\n\n this.visible = this.visible.filter((v) => v.payload.id !== id);\n\n // Preserve queue behavior: make room first, then clean up.\n this._showNextIfPossible();\n\n this.cleanupIfEmpty();\n }, 300);\n\n this.removalTimers.set(id, timer);\n }\n\n private removeEl(d: INotifyEnd): void {\n if (d.el) {\n this.removeNode(d.el, d.id);\n } else {\n this.queue = this.queue.filter((q) => q.id !== d.id);\n this.cleanupIfEmpty();\n }\n }\n\n private _showNextIfPossible(): void {\n if (!this.queue.length) {\n return;\n }\n\n const next = this.queue[0];\n\n if (this.visible.length < next.options.maxVisible!) {\n this.queue.shift();\n\n // Reapply this notification's configuration if needed.\n this.configureContainer(next.options);\n this._createAndShow(next);\n }\n }\n\n private cleanupIfEmpty(): void {\n // Do not remove the container while notifications are visible,\n // waiting in the queue, or still animating out.\n if (this.visible.length > 0 || this.queue.length > 0 || this.removalTimers.size > 0) {\n return;\n }\n\n const container = this.container;\n\n if (!container) {\n return;\n }\n\n if (container.matches(':popover-open')) {\n try {\n container.hidePopover();\n } catch {\n // Ignore an already-closed popover.\n }\n }\n\n container.remove();\n this.container = null;\n }\n}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { NGX_NOTIFY_API, NGX_NOTIFY_CONFIG, NGX_NOTIFY_DEFAULTS } from './models/notify-config';\nimport { NgxNotifyOptions } from './models/notify-options';\nimport { Notify as NotifyFacade } from './notify-facade';\nimport { NgxNotifyService } from './services/notify.service';\nexport function provideNotify(options?: NgxNotifyOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_NOTIFY_CONFIG,\n useValue: { ...NGX_NOTIFY_DEFAULTS, ...(options || {}) },\n },\n {\n provide: NGX_NOTIFY_API,\n useExisting: NgxNotifyService,\n },\n provideEnvironmentInitializer(() => {\n NotifyFacade.injector = inject(Injector);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NotifyFacade"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-kit-notify.mjs","sources":["../../../projects/libs/notify/models/notify-config.ts","../../../projects/libs/notify/notify-facade.ts","../../../projects/libs/notify/components/notification.component.ts","../../../projects/libs/notify/components/notification.component.html","../../../projects/libs/notify/services/notify.service.ts","../../../projects/libs/notify/notify-provider.ts","../../../projects/libs/notify/ngx-kit-notify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NgxNotifyOptions } from './notify-options';\nimport { NgxNotifyService } from '../services/notify.service';\n\nexport const NGX_NOTIFY_CONFIG = new InjectionToken<NgxNotifyOptions>('NgxNotifyOption');\nexport const NGX_NOTIFY_API = new InjectionToken<NgxNotifyService>('NgxNotifyService');\n\nexport const NGX_NOTIFY_DEFAULTS: Required<NgxNotifyOptions> = {\n timeout: 3000,\n position: 'top-center',\n maxVisible: 10,\n allowHtml: false,\n pauseOnHover: true,\n dismissible: true,\n closeOnTap: true,\n containerClass: 'ngx-bg-notify',\n notificationClass: 'ngx-notify',\n usePopover: true,\n};\n","import { Injector } from '@angular/core';\nimport { NgxNotifyOptions } from './models/notify-options';\nimport { NGX_NOTIFY_API } from './models/notify-config';\nimport { NgxNotifyPayload } from './models/notify.model';\n\n/**\n * Static facade so call sites can use: Notify.warn('msg', opts)\n * Module will set the service instance in its constructor.\n */\nexport class Notify {\n static injector: Injector;\n\n static show(\n type: 'info' | 'success' | 'warning' | 'error' = 'info',\n message: string,\n description?: string,\n options?: NgxNotifyOptions,\n ): NgxNotifyPayload {\n if (!Notify.injector) {\n throw new Error(\n 'ngx-kit: Error on EnvironmentProvider. Ensure \"provideNotify()\" in root provider.',\n );\n }\n return Notify.injector.get(NGX_NOTIFY_API).show(message, description, type, options);\n }\n\n static info(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('info', message, description, options);\n }\n\n static success(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('success', message, description, options);\n }\n static warning(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('warning', message, description, options);\n }\n static error(message: string, description?: string, options?: NgxNotifyOptions) {\n return this.show('error', message, description, options);\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n Input,\n ChangeDetectorRef,\n DOCUMENT,\n inject,\n ElementRef,\n afterNextRender,\n signal,\n output,\n input,\n effect,\n viewChild,\n} from '@angular/core';\nimport { INotifyEnd, NgxNotifyPayload } from '../models/notify.model';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n selector: 'ngx-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n imports: [CommonModule],\n})\nexport class NgxNotificationComponent implements OnInit, OnDestroy {\n payload = input.required<NgxNotifyPayload>();\n @Input() containerClass = 'ngx-notify';\n\n bar = viewChild<ElementRef<HTMLElement>>('bar');\n onClose = output<INotifyEnd>();\n onFinish = output<INotifyEnd>();\n\n private _rafId = 0;\n private _duration = 0;\n private _remaining = 0;\n private _endTs = 0;\n private _paused = false;\n\n safeMessage: SafeHtml | string = '';\n safeDescription: SafeHtml | string = '';\n showClass = signal('');\n protected doc = inject(DOCUMENT);\n el = inject(ElementRef);\n protected sanitizer = inject(DomSanitizer);\n protected chdr = inject(ChangeDetectorRef);\n constructor() {\n afterNextRender(() => {\n this.showClass.set('ngx-show');\n this.chdr.detectChanges();\n });\n effect(() => {\n const payload = this.payload();\n\n // decide how to render message\n if (payload.options.allowHtml) {\n this.safeMessage = this.sanitizer.bypassSecurityTrustHtml(payload.message);\n this.safeDescription = this.sanitizer.bypassSecurityTrustHtml(payload.description ?? '');\n } else {\n this.safeMessage = this.escapeHtml(payload.message);\n this.safeDescription = this.escapeHtml(payload.description);\n }\n });\n effect(() => {\n const timeout = this.payload().options.timeout ?? 0;\n this.startTimer(timeout);\n });\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.clearTimer();\n }\n\n // Public API to start timer (used by service when created)\n startTimer(ms: number) {\n this.clearTimer();\n\n if (!this._paused) {\n this._duration = ms;\n }\n this._remaining = ms;\n this._endTs = performance.now() + ms;\n\n const bar = this.bar()?.nativeElement;\n if (bar) {\n bar.style.transition = `transform ${ms}ms linear`;\n bar.style.transform = 'scaleX(1)';\n }\n\n this.animateProgress();\n }\n pauseTimer() {\n this._paused = true;\n cancelAnimationFrame(this._rafId);\n this._remaining = Math.max(0, this._endTs - performance.now());\n const bar = this.bar()?.nativeElement;\n if (bar) {\n const matrix = getComputedStyle?.(bar)?.transform;\n bar.style.transition = 'none';\n bar.style.transform = matrix;\n }\n }\n\n resumeTimer() {\n if (!this._paused || this._remaining <= 0) {\n return;\n }\n\n this._paused = false;\n\n this.startTimer(this._remaining);\n }\n\n private clearTimer() {\n cancelAnimationFrame(this._rafId);\n this._rafId = 0;\n }\n\n private animateProgress() {\n const update = () => {\n const remaining = Math.max(0, this._endTs - performance.now());\n if (remaining <= 0) {\n this.onFinish.emit({\n id: this.payload().id,\n el: this.el.nativeElement,\n });\n return;\n }\n\n this._rafId = requestAnimationFrame(update);\n };\n\n this._rafId = requestAnimationFrame(update);\n }\n\n close(ev?: Event) {\n if (ev) ev.stopPropagation();\n this.onClose.emit({ id: this.payload().id, el: this.el.nativeElement });\n }\n\n onMouseEnter() {\n if (this.payload().options.pauseOnHover) this.pauseTimer();\n }\n onMouseLeave() {\n if (this.payload().options.pauseOnHover) this.resumeTimer();\n }\n onTap() {\n if (this.payload().options.closeOnTap) this.close();\n }\n\n escapeHtml(input?: string) {\n if (!input) return '';\n const div = this.doc.createElement('div');\n div.appendChild(this.doc.createTextNode(input));\n return div.textContent;\n }\n}\n","<div\n class=\"{{ containerClass }} {{ containerClass }}-{{ payload().type }} {{ showClass() }}\"\n role=\"status\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (click)=\"onTap()\"\n [attr.aria-live]=\"\n payload().type === 'error' || payload().type === 'warning' ? 'assertive' : 'polite'\n \"\n [attr.data-id]=\"payload().id\">\n <div class=\"ngx-notify-icon-container\">\n <div class=\"ngx-notify-icon\">\n @switch (payload().type) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M235.3 331.3C229.1 337.6 218.9 337.6 212.7 331.3L148.7 267.3C142.4 261.1 142.4 250.9 148.7 244.7C154.9 238.4 165.1 238.4 171.3 244.7L224 297.4L340.7 180.7C346.9 174.4 357.1 174.4 363.3 180.7C369.6 186.9 369.6 197.1 363.3 203.3L235.3 331.3zM512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256zM256 32C132.3 32 32 132.3 32 256C32 379.7 132.3 480 256 480C379.7 480 480 379.7 480 256C480 132.3 379.7 32 256 32z\" />\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M180.7 180.7C186.9 174.4 197.1 174.4 203.3 180.7L256 233.4L308.7 180.7C314.9 174.4 325.1 174.4 331.3 180.7C337.6 186.9 337.6 197.1 331.3 203.3L278.6 255.1L331.3 308.7C337.6 314.9 337.6 325.1 331.3 331.3C325.1 337.6 314.9 337.6 308.7 331.3L256 278.6L203.3 331.3C197.1 337.6 186.9 337.6 180.7 331.3C174.4 325.1 174.4 314.9 180.7 308.7L233.4 255.1L180.7 203.3C174.4 197.1 174.4 186.9 180.7 180.7V180.7zM.0669 191.5C.0669 172.4 7.652 154.1 21.16 140.6L140.6 21.15C154.1 7.648 172.4 .0625 191.5 .0625H320.5C339.6 .0625 357.9 7.648 371.4 21.15L490.8 140.6C504.3 154.1 511.9 172.4 511.9 191.5V320.5C511.9 339.6 504.3 357.9 490.8 371.4L371.4 490.8C357.9 504.3 339.6 511.9 320.5 511.9H191.5C172.4 511.9 154.1 504.3 140.6 490.8L21.15 371.4C7.652 357.9 .0666 339.6 .0666 320.5L.0669 191.5zM43.78 163.2C36.28 170.7 32.07 180.9 32.07 191.5V320.5C32.07 331.1 36.28 341.3 43.78 348.8L163.2 468.2C170.7 475.7 180.9 479.9 191.5 479.9H320.5C331.1 479.9 341.3 475.7 348.8 468.2L468.2 348.8C475.7 341.3 479.9 331.1 479.9 320.5V191.5C479.9 180.9 475.7 170.7 468.2 163.2L348.8 43.78C341.3 36.28 331.1 32.06 320.5 32.06H191.5C180.9 32.06 170.7 36.28 163.2 43.78L43.78 163.2zM43.78 348.8L21.15 371.4z\" />\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 360c-13.25 0-23.1 10.74-23.1 24c0 13.25 10.75 24 23.1 24c13.25 0 23.1-10.75 23.1-24C280 370.7 269.3 360 256 360zM256 320c8.843 0 15.1-7.156 15.1-16V160c0-8.844-7.155-16-15.1-16S240 151.2 240 160v144C240 312.8 247.2 320 256 320zM504.3 397.3L304.5 59.38C294.4 42.27 276.2 32.03 256 32C235.8 32 217.7 42.22 207.5 59.36l-199.9 338c-10.05 16.97-10.2 37.34-.4218 54.5C17.29 469.5 35.55 480 56.1 480h399.9c20.51 0 38.75-10.53 48.81-28.17C514.6 434.7 514.4 414.3 504.3 397.3zM476.1 435.1C472.7 443.5 464.8 448 455.1 448H56.1c-8.906 0-16.78-4.484-21.08-12c-4.078-7.156-4.015-15.3 .1562-22.36L235.1 75.66C239.4 68.36 247.2 64 256 64c0 0-.0156 0 0 0c8.765 .0156 16.56 4.359 20.86 11.64l199.9 338C480.1 420.7 481.1 428.8 476.1 435.1z\" />\n </svg>\n }\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path\n fill=\"currentColor\"\n d=\"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 480c-123.5 0-224-100.5-224-224s100.5-224 224-224s224 100.5 224 224S379.5 480 256 480zM256 184c13.25 0 24-10.74 24-24c0-13.25-10.75-24-24-24S232 146.7 232 160C232 173.3 242.7 184 256 184zM304 352h-32V240C272 231.2 264.8 224 256 224H224C215.2 224 208 231.2 208 240S215.2 256 224 256h16v96h-32C199.2 352 192 359.2 192 368C192 376.8 199.2 384 208 384h96c8.836 0 16-7.164 16-16C320 359.2 312.8 352 304 352z\" />\n </svg>\n }\n }\n </div>\n </div>\n\n <div class=\"ngx-notify-content\">\n <div class=\"ngx-notify-title\" [innerHTML]=\"safeMessage\"></div>\n <div class=\"ngx-notify-description\" [innerHTML]=\"safeDescription\"></div>\n </div>\n\n @if (payload().options.dismissible) {\n <div class=\"ngx-notify-close-container\">\n <button class=\"ngx-notify-close\" (click)=\"close($event)\" aria-label=\"close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M315.3 411.3c-6.253 6.253-16.37 6.253-22.63 0L160 278.6l-132.7 132.7c-6.253 6.253-16.37 6.253-22.63 0c-6.253-6.253-6.253-16.37 0-22.63L137.4 256L4.69 123.3c-6.253-6.253-6.253-16.37 0-22.63c6.253-6.253 16.37-6.253 22.63 0L160 233.4l132.7-132.7c6.253-6.253 16.37-6.253 22.63 0c6.253 6.253 6.253 16.37 0 22.63L182.6 256l132.7 132.7C321.6 394.9 321.6 405.1 315.3 411.3z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"ngx-notify-progress\">\n <div class=\"progress-bar\" #bar></div>\n </div>\n</div>\n","import {\n Injectable,\n ComponentRef,\n DOCUMENT,\n inject,\n createComponent,\n EnvironmentInjector,\n ApplicationRef,\n EventEmitter,\n} from '@angular/core';\n\nimport { NgxNotifyOptions } from '../models/notify-options';\nimport { INotifyEnd, NgxNotifyPayload, NgxNotifyType } from '../models/notify.model';\nimport { WINDOW } from 'ngx-kit/core';\nimport { NGX_NOTIFY_CONFIG } from '../models/notify-config';\nimport { NgxNotificationComponent } from '../components/notification.component';\n\nfunction makeId(): string {\n return 'n_' + Math.random().toString(36).substring(2, 11);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NgxNotifyService {\n private queue: NgxNotifyPayload[] = [];\n\n private visible: {\n ref: ComponentRef<NgxNotificationComponent>;\n payload: NgxNotifyPayload;\n }[] = [];\n\n private container: HTMLElement | null = null;\n\n private envInjector = inject(EnvironmentInjector);\n private appRef = inject(ApplicationRef);\n private doc = inject(DOCUMENT);\n private win = inject(WINDOW);\n private defaultOptions = inject(NGX_NOTIFY_CONFIG);\n\n private removalTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n constructor() {}\n\n configureContainer(opt: NgxNotifyOptions): void {\n const { containerClass, position, usePopover } = opt;\n\n if (!this.container) {\n this.container = this.doc.createElement('div');\n this.doc.body.appendChild(this.container);\n }\n\n const container = this.container;\n\n container.className = containerClass + ' ngx-notify-container ngx-pos-' + position;\n\n // Explicitly reset positioning so changing options does not leave\n // stale styles from the previous configuration.\n Object.assign(container.style, {\n position: 'fixed',\n zIndex: '99999',\n inset: 'auto',\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto',\n margin: '0',\n transform: 'none',\n width: 'max-content',\n maxWidth: 'calc(100vw - 40px)',\n maxHeight: 'calc(100vh - 40px)',\n boxSizing: 'border-box',\n border: '0',\n padding: '0',\n background: 'transparent',\n color: 'inherit',\n overflow: 'visible',\n pointerEvents: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n });\n\n // Detect the page's direction without requiring an extra option.\n const direction =\n container.closest('[dir]')?.getAttribute('dir') ||\n this.doc.documentElement.getAttribute('dir') ||\n this.doc.body?.getAttribute('dir') ||\n 'ltr';\n\n container.dir = direction === 'rtl' ? 'rtl' : 'ltr';\n\n // Keep left/right as physical viewport positions.\n // RTL affects text direction, not the meaning of these positions.\n switch (position) {\n case 'center':\n container.style.top = '50%';\n container.style.left = '50%';\n container.style.transform = 'translate(-50%, -50%)';\n container.style.alignItems = 'center';\n break;\n\n default: {\n if (position?.includes('top')) {\n container.style.top = '20px';\n } else {\n container.style.bottom = '20px';\n }\n\n if (position?.includes('left')) {\n container.style.left = '20px';\n container.style.alignItems = 'flex-start';\n } else if (position?.includes('right')) {\n container.style.right = '20px';\n container.style.alignItems = 'flex-end';\n } else if (position?.includes('center')) {\n container.style.left = '50%';\n container.style.transform = 'translateX(-50%)';\n container.style.alignItems = 'center';\n }\n\n if (position?.includes('bottom')) {\n container.style.flexDirection = 'column-reverse';\n }\n\n break;\n }\n }\n\n if (usePopover) {\n // Apply the positioning styles before entering the top layer.\n container.setAttribute('popover', 'manual');\n\n if (!container.matches(':popover-open')) {\n try {\n container.showPopover();\n } catch {\n // Avoid breaking notification display if the browser does not\n // support Popover or the element cannot enter the top layer.\n container.removeAttribute('popover');\n }\n }\n } else {\n if (container.matches(':popover-open')) {\n try {\n container.hidePopover();\n } catch {\n // The element may already have left the top layer.\n }\n }\n\n container.removeAttribute('popover');\n }\n }\n\n show(\n message: string,\n description?: string,\n type: NgxNotifyType = 'info',\n options?: NgxNotifyOptions,\n ) {\n const opts: NgxNotifyOptions = {\n ...this.defaultOptions,\n ...(options || {}),\n };\n\n const id =\n typeof (this.win as any).crypto?.randomUUID === 'function'\n ? (this.win as any).crypto.randomUUID()\n : makeId();\n\n const payload: NgxNotifyPayload = {\n id,\n message,\n description,\n type,\n options: opts,\n onClose: new EventEmitter(),\n onFinish: new EventEmitter(),\n close: () => this.close(id),\n };\n\n this.configureContainer(opts);\n\n // Cancel a pending removal if the same ID is ever reused.\n const timer = this.removalTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.removalTimers.delete(id);\n }\n\n if (this.visible.length >= opts.maxVisible!) {\n this.queue.push(payload);\n } else {\n this._createAndShow(payload);\n }\n\n return payload;\n }\n\n private _createAndShow(payload: NgxNotifyPayload): void {\n if (!this.container) {\n this.configureContainer(payload.options);\n }\n\n const host = this.doc.createElement('div');\n\n this.container!.appendChild(host);\n\n const compRef = createComponent(NgxNotificationComponent, {\n environmentInjector: this.envInjector,\n hostElement: host,\n });\n\n compRef.setInput('payload', payload);\n\n compRef.instance.onClose.subscribe((d) => {\n this.removeEl(d);\n payload.onClose.emit(d);\n });\n\n compRef.instance.onFinish.subscribe((d) => {\n this.removeEl(d);\n payload.onFinish.emit(d);\n payload.onClose.emit(d);\n });\n\n // Registers the component’s view so it participates in change detection cycle.\n this.appRef.attachView(compRef.hostView);\n // store visible\n this.visible.push({ ref: compRef, payload });\n }\n\n private close(id: string): void {\n const item = this.visible.find((x) => x.payload.id === id);\n\n if (item) {\n const el = item.ref.instance.el.nativeElement;\n\n if (el) {\n this.removeEl({ id, el });\n }\n }\n\n // If the notification is still queued, remove it immediately.\n this.queue = this.queue.filter((q) => q.id !== id);\n\n this.cleanupIfEmpty();\n }\n\n private removeNode(node: HTMLElement, id: string): void {\n // Prevent multiple close/finish events from scheduling duplicate\n // removal operations for the same notification.\n if (this.removalTimers.has(id)) {\n return;\n }\n\n node.style.opacity = '0';\n node.style.transform = 'translateY(-30px)';\n node.style.transition = 'all 300ms';\n\n const timer = setTimeout(() => {\n this.removalTimers.delete(id);\n\n const item = this.visible.find((x) => x.payload.id === id);\n\n if (item) {\n this.appRef.detachView(item.ref.hostView);\n item.ref.destroy();\n }\n\n this.visible = this.visible.filter((v) => v.payload.id !== id);\n\n // Preserve queue behavior: make room first, then clean up.\n this._showNextIfPossible();\n\n this.cleanupIfEmpty();\n }, 300);\n\n this.removalTimers.set(id, timer);\n }\n\n private removeEl(d: INotifyEnd): void {\n if (d.el) {\n this.removeNode(d.el, d.id);\n } else {\n this.queue = this.queue.filter((q) => q.id !== d.id);\n this.cleanupIfEmpty();\n }\n }\n\n private _showNextIfPossible(): void {\n if (!this.queue.length) {\n return;\n }\n\n const next = this.queue[0];\n\n if (this.visible.length < next.options.maxVisible!) {\n this.queue.shift();\n\n // Reapply this notification's configuration if needed.\n this.configureContainer(next.options);\n this._createAndShow(next);\n }\n }\n\n private cleanupIfEmpty(): void {\n // Do not remove the container while notifications are visible,\n // waiting in the queue, or still animating out.\n if (this.visible.length > 0 || this.queue.length > 0 || this.removalTimers.size > 0) {\n return;\n }\n\n const container = this.container;\n\n if (!container) {\n return;\n }\n\n if (container.matches(':popover-open')) {\n try {\n container.hidePopover();\n } catch {\n // Ignore an already-closed popover.\n }\n }\n\n container.remove();\n this.container = null;\n }\n}\n","import {\n EnvironmentProviders,\n inject,\n Injector,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { NGX_NOTIFY_API, NGX_NOTIFY_CONFIG, NGX_NOTIFY_DEFAULTS } from './models/notify-config';\nimport { NgxNotifyOptions } from './models/notify-options';\nimport { Notify as NotifyFacade } from './notify-facade';\nimport { NgxNotifyService } from './services/notify.service';\nexport function provideNotify(options?: NgxNotifyOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_NOTIFY_CONFIG,\n useValue: { ...NGX_NOTIFY_DEFAULTS, ...(options || {}) },\n },\n {\n provide: NGX_NOTIFY_API,\n useExisting: NgxNotifyService,\n },\n provideEnvironmentInitializer(() => {\n NotifyFacade.injector = inject(Injector);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NotifyFacade"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-kit",
3
- "version": "9.2.3",
3
+ "version": "9.3.0",
4
4
  "description": "Angular input components",
5
5
  "author": "Mohammadreza Samani <mr.samani1368@gmail.com>",
6
6
  "license": "MIT",
@@ -58,6 +58,7 @@ declare class RangeSliderComponent implements OnInit, OnDestroy, ControlValueAcc
58
58
  private sliderRect?;
59
59
  private thumbRect?;
60
60
  private stopDrag?;
61
+ private readonly doc;
61
62
  constructor(changeDetectorRef: ChangeDetectorRef);
62
63
  ngOnInit(): void;
63
64
  ngOnDestroy(): void;
@@ -109,6 +110,7 @@ declare class SaturationComponent implements ControlValueAccessor, OnDestroy {
109
110
  private saturationRect?;
110
111
  private thumbRect?;
111
112
  private stopDrag?;
113
+ private readonly doc;
112
114
  constructor();
113
115
  ngOnDestroy(): void;
114
116
  private updateRects;
@@ -147,6 +149,7 @@ declare class SliderComponent implements OnInit, OnDestroy, ControlValueAccessor
147
149
  private thumbRect?;
148
150
  private stopDrag?;
149
151
  private readonly cd;
152
+ private readonly doc;
150
153
  constructor();
151
154
  ngOnInit(): void;
152
155
  ngOnDestroy(): void;
@@ -175,11 +178,11 @@ declare function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLEle
175
178
  * تمام کامپوننت‌های قابل‌درگ کتابخانه (saturation، slider، range-slider،
176
179
  * box-shadow) قبلاً یک الگوی تکراری داشتن:
177
180
  *
178
- * @HostListener('document:mousemove', ['$event'])
179
- * @HostListener('document:touchmove', ['$event'])
181
+ * @HostListener('doc:mousemove', ['$event'])
182
+ * @HostListener('doc:touchmove', ['$event'])
180
183
  * onDrag(ev) { if (!this.isDragging) return; ... }
181
184
  *
182
- * مشکل: این listenerها برای کل عمر کامپوننت روی `document` باقی می‌مونن —
185
+ * مشکل: این listenerها برای کل عمر کامپوننت روی `doc` باقی می‌مونن —
183
186
  * حتی وقتی اصلاً دراگی در حال انجام نیست. یعنی روی صفحه‌ای با چند تا
184
187
  * color-picker/slider، هر حرکت موس/انگشت روی کل صفحه (نه فقط روی خودِ
185
188
  * اسلایدر) باعث اجرای N تابع (به تعداد اینستنس‌ها) می‌شه که هرکدوم هم چرخه‌ی
@@ -187,7 +190,7 @@ declare function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLEle
187
190
  * با چند نمونه هم‌زمان یا حرکت زیاد موس.
188
191
  *
189
192
  * این تابع جایگزین اون الگو می‌شه: listenerها فقط در طول یک دراگِ واقعی
190
- * (بین mousedown/touchstart تا mouseup/touchend) روی document اضافه می‌شن و
193
+ * (بین mousedown/touchstart تا mouseup/touchend) روی doc اضافه می‌شن و
191
194
  * بلافاصله بعدش پاک می‌شن.
192
195
  *
193
196
  * یه فایده‌ی جانبیِ مهم دیگه هم داره: روی touchmove مقدار `{ passive: false }`
@@ -196,11 +199,12 @@ declare function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLEle
196
199
  * چون هیچ‌جا preventDefault روی touchmove صدا زده نمی‌شد).
197
200
  */
198
201
  interface DragSessionCallbacks {
202
+ doc: Document;
199
203
  onMove: (ev: MouseEvent | TouchEvent) => void;
200
204
  onEnd?: (ev: MouseEvent | TouchEvent) => void;
201
205
  }
202
206
  /** با فراخوانی این تابع (مثلاً داخل dragStart) یک نشست‌ درگ شروع می‌شه. */
203
- declare function startDragSession({ onMove, onEnd }: DragSessionCallbacks): () => void;
207
+ declare function startDragSession({ doc, onMove, onEnd }: DragSessionCallbacks): () => void;
204
208
 
205
209
  declare const WINDOW: InjectionToken<Window | null>;
206
210
 
@@ -435,6 +435,7 @@ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy, AfterConte
435
435
  * When `true`, presses on native interactive controls (`button, a, input, textarea, select`,
436
436
  * `[contenteditable]`) do not start a drag either. Off by default so that a page-builder canvas
437
437
  * block can be grabbed by its own button/link, which is exactly what you want while editing.
438
+ * @default false
438
439
  */
439
440
  readonly ignoreInteractive: _angular_core.InputSignal<boolean>;
440
441
  set data(v: T);
@@ -497,8 +498,6 @@ declare class NgxDraggable<T = unknown> implements OnInit, OnDestroy, AfterConte
497
498
  /** Swallow the single `click` the browser dispatches right after a completed drag. */
498
499
  private swallowNextClick;
499
500
  private isOnHandle;
500
- /** Should a press on `target` be left alone (no drag)? */
501
- private isExcluded;
502
501
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxDraggable<any>, never>;
503
502
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxDraggable<any>, "[NgxDraggable],[ngxDraggable]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "boundary": { "alias": "boundary"; "required": false; "isSignal": true; }; "dragRootElement": { "alias": "dragRootElement"; "required": false; "isSignal": true; }; "dragHandle": { "alias": "dragHandle"; "required": false; "isSignal": true; }; "lockAxis": { "alias": "lockAxis"; "required": false; "isSignal": true; }; "dragThreshold": { "alias": "dragThreshold"; "required": false; "isSignal": true; }; "keyboardStep": { "alias": "keyboardStep"; "required": false; "isSignal": true; }; "autoScroll": { "alias": "autoScroll"; "required": false; "isSignal": true; }; "noDragSelector": { "alias": "noDragSelector"; "required": false; "isSignal": true; }; "ignoreInteractive": { "alias": "ignoreInteractive"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; }; }, { "disabled": "disabledChange"; "dragRootElement": "dragRootElementChange"; "dragHandle": "dragHandleChange"; "dragStart": "dragStart"; "dragMove": "dragMove"; "dragEnd": "dragEnd"; }, ["customPreview"], never, true, never>;
504
503
  }