ngx-kit 9.2.4 → 9.3.1
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.
- package/core/README.md +0 -21
- package/fesm2022/ngx-kit-core.mjs +30 -23
- package/fesm2022/ngx-kit-core.mjs.map +1 -1
- package/fesm2022/ngx-kit-drag-resize.mjs +2 -4
- package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -1
- package/fesm2022/ngx-kit-image-editor.mjs +13 -12
- package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
- package/fesm2022/ngx-kit-image-viewer.mjs +5 -3
- package/fesm2022/ngx-kit-image-viewer.mjs.map +1 -1
- package/fesm2022/ngx-kit-infinite-scroll.mjs +8 -7
- package/fesm2022/ngx-kit-infinite-scroll.mjs.map +1 -1
- package/fesm2022/ngx-kit-notify.mjs +0 -1
- package/fesm2022/ngx-kit-notify.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-kit-core.d.ts +9 -5
- package/types/ngx-kit-image-editor.d.ts +4 -3
- package/types/ngx-kit-image-viewer.d.ts +1 -0
- package/types/ngx-kit-infinite-scroll.d.ts +1 -0
|
@@ -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() ?
|
|
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 =
|
|
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
|
|
332
|
+
if (typeof this.doc === 'undefined')
|
|
332
333
|
return null;
|
|
333
|
-
return
|
|
334
|
-
?
|
|
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(
|
|
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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"}
|
|
@@ -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
package/types/ngx-kit-core.d.ts
CHANGED
|
@@ -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('
|
|
179
|
-
* @HostListener('
|
|
181
|
+
* @HostListener('doc:mousemove', ['$event'])
|
|
182
|
+
* @HostListener('doc:touchmove', ['$event'])
|
|
180
183
|
* onDrag(ev) { if (!this.isDragging) return; ... }
|
|
181
184
|
*
|
|
182
|
-
* مشکل: این listenerها برای کل عمر کامپوننت روی `
|
|
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) روی
|
|
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
|
|
|
@@ -93,6 +93,7 @@ declare class NgxImageEditor {
|
|
|
93
93
|
quality: _angular_core.InputSignal<number>;
|
|
94
94
|
defaultLocalization: NgxImageEditorLocalization;
|
|
95
95
|
localize: _angular_core.InputSignal<NgxImageEditorLocalization>;
|
|
96
|
+
private readonly doc;
|
|
96
97
|
saved: _angular_core.OutputEmitterRef<NgxImageEditorResult>;
|
|
97
98
|
cancelled: _angular_core.OutputEmitterRef<void>;
|
|
98
99
|
protected readonly loading: _angular_core.WritableSignal<boolean>;
|
|
@@ -159,7 +160,7 @@ declare function canvasToBlob(canvas: HTMLCanvasElement, type?: string, quality?
|
|
|
159
160
|
* کراپ روون بمونه؛ خروجی نهایی (save) همیشه از روی تصویر اصلیِ کامل رندر
|
|
160
161
|
* میشه، نه از روی این کپی.
|
|
161
162
|
*/
|
|
162
|
-
declare function createWorkingCopy(img: HTMLImageElement, maxSize?: number): HTMLCanvasElement;
|
|
163
|
+
declare function createWorkingCopy(doc: Document, img: HTMLImageElement, maxSize?: number): HTMLCanvasElement;
|
|
163
164
|
/** ابعاد جدید رو طوری حساب میکنه که از maxWidth/maxHeight بیشتر نشه، با حفظ نسبت تصویر */
|
|
164
165
|
declare function fitWithin(width: number, height: number, maxWidth?: number, maxHeight?: number): {
|
|
165
166
|
width: number;
|
|
@@ -167,7 +168,7 @@ declare function fitWithin(width: number, height: number, maxWidth?: number, max
|
|
|
167
168
|
};
|
|
168
169
|
|
|
169
170
|
/** تصویر مبدأ رو با زاویهی دادهشده روی یه canvas جدید (به اندازهی bounding-box نتیجه) میچرخونه */
|
|
170
|
-
declare function renderRotated(source: CanvasImageSource, width: number, height: number, degrees: number): HTMLCanvasElement;
|
|
171
|
+
declare function renderRotated(doc: Document, source: CanvasImageSource, width: number, height: number, degrees: number): HTMLCanvasElement;
|
|
171
172
|
/**
|
|
172
173
|
* کراپ + فیلترها رو روی یه canvas خروجی میسازه. brightness/contrast/
|
|
173
174
|
* saturation/grayscale/sepia/invert همه با ctx.filter بومیِ Canvas 2D انجام
|
|
@@ -178,7 +179,7 @@ declare function renderRotated(source: CanvasImageSource, width: number, height:
|
|
|
178
179
|
* برای واکنشگرا موندن حین کشیدن اسلایدرها) و خروجی نهایی (بدون محدودیت یا
|
|
179
180
|
* محدودیت دلخواه کاربر).
|
|
180
181
|
*/
|
|
181
|
-
declare function renderComposite(source: CanvasImageSource, sourceWidth: number, sourceHeight: number, crop: NgxCropRect, adjustments: NgxImageEditorAdjustments, maxWidth?: number, maxHeight?: number): HTMLCanvasElement;
|
|
182
|
+
declare function renderComposite(doc: Document, source: CanvasImageSource, sourceWidth: number, sourceHeight: number, crop: NgxCropRect, adjustments: NgxImageEditorAdjustments, maxWidth?: number, maxHeight?: number): HTMLCanvasElement;
|
|
182
183
|
|
|
183
184
|
/**
|
|
184
185
|
* افکت «کارتونی»: چون ctx.filter استاندارد چیزی شبیه cartoon نداره (فقط
|