{"version":3,"file":"ngxtension-resize.mjs","sources":["../../../../libs/ngxtension/resize/src/resize.ts","../../../../libs/ngxtension/resize/src/ngxtension-resize.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tInput,\n\tNgZone,\n\tPLATFORM_ID,\n\tinject,\n\toutput,\n\ttype OnInit,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { createInjectionToken } from 'ngxtension/create-injection-token';\nimport {\n\tObservable,\n\tReplaySubject,\n\tdebounceTime,\n\tfromEvent,\n\tof,\n\tpipe,\n\tshare,\n\ttakeUntil,\n\ttype MonoTypeOperatorFunction,\n} from 'rxjs';\n\nexport type ResizeOptions = {\n\tbox: ResizeObserverBoxOptions;\n\tdebounce: number | { scroll: number; resize: number };\n\tscroll: boolean;\n\toffsetSize: boolean;\n\temitInZone: boolean;\n\temitInitialResult: boolean;\n};\n\nexport const defaultResizeOptions: ResizeOptions = {\n\tbox: 'content-box',\n\tscroll: false,\n\toffsetSize: false,\n\tdebounce: { scroll: 50, resize: 0 },\n\temitInZone: true,\n\temitInitialResult: false,\n};\n\nexport const [injectResizeOptions, provideResizeOptions, NGX_RESIZE_OPTIONS] =\n\tcreateInjectionToken(() => defaultResizeOptions);\n\nexport type ResizeResult = {\n\treadonly entries: ReadonlyArray<ResizeObserverEntry>;\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n\treadonly top: number;\n\treadonly right: number;\n\treadonly bottom: number;\n\treadonly left: number;\n\treadonly dpr: number;\n};\n\n/**\n * `injectResize` returns an `Observable<ResizeResult>` that observes the `resize` event on the Host element\n * of the component. `options` passed in is merged with default options\n *\n * @see {@link defaultResizeOptions}\n *\n * @param {Partial<ResizeOptions>} [options={}]\n * @see {@link ResizeOptions}\n *\n * @returns {Observable<ResizeResult>}\n * @see {@link ResizeResult}\n */\nexport function injectResize(\n\toptions: Partial<ResizeOptions> = {},\n): Observable<ResizeResult> {\n\tconst [{ nativeElement }, zone, document, platformId] = [\n\t\tinject(ElementRef) as ElementRef<HTMLElement>,\n\t\tinject(NgZone),\n\t\tinject(DOCUMENT),\n\t\tinject(PLATFORM_ID),\n\t];\n\tconst mergedOptions = { ...injectResizeOptions(), ...options };\n\treturn createResizeStream(\n\t\tmergedOptions,\n\t\tnativeElement,\n\t\tdocument,\n\t\tzone,\n\t\tplatformId,\n\t);\n}\n\n/**\n * A directive to be used on any element instead of the Host element. For Host element, there are 3 approaches:\n * - use {@link injectResize}\n * - use `hostDirectives`  with `HostListener` on `ngxResize`\n *\n * @param {Partial<ResizeOptions>} - partial options to control `Resize` behavior. merged with default options\n * @see {@link defaultResizeOptions}\n *\n * @returns {ResizeResult} - as an Output `(ngxResize)`\n */\n@Directive({ selector: '[ngxResize]', standalone: true })\nexport class NgxResize implements OnInit {\n\tprivate host = inject(ElementRef);\n\tprivate zone = inject(NgZone);\n\tprivate document = inject(DOCUMENT);\n\tprivate resizeOptions = injectResizeOptions();\n\tprivate destroyRef = inject(DestroyRef);\n\tprivate platformId = inject(PLATFORM_ID);\n\n\t@Input() ngxResizeOptions: Partial<ResizeOptions> = {};\n\treadonly ngxResize = output<ResizeResult>();\n\n\tngOnInit() {\n\t\tconst mergedOptions = { ...this.resizeOptions, ...this.ngxResizeOptions };\n\t\tcreateResizeStream(\n\t\t\tmergedOptions,\n\t\t\tthis.host.nativeElement,\n\t\t\tthis.document,\n\t\t\tthis.zone,\n\t\t\tthis.platformId,\n\t\t)\n\t\t\t.pipe(takeUntilDestroyed(this.destroyRef))\n\t\t\t.subscribe((result) => this.ngxResize.emit(result));\n\t}\n}\n\n// return ResizeResult observable\nfunction createResizeStream(\n\t{\n\t\tdebounce,\n\t\tscroll,\n\t\toffsetSize,\n\t\tbox,\n\t\temitInZone,\n\t\temitInitialResult,\n\t}: ResizeOptions,\n\tnativeElement: HTMLElement,\n\tdocument: Document,\n\tzone: NgZone,\n\tplatformId?: any,\n) {\n\tif (!isPlatformBrowser(platformId)) {\n\t\treturn of();\n\t}\n\n\tconst window = document.defaultView;\n\tconst screen = window?.screen;\n\tconst isSupport = !!window?.ResizeObserver;\n\n\tlet observer: ResizeObserver;\n\tlet lastBounds: Omit<ResizeResult, 'entries' | 'dpr'>;\n\tlet lastEntries: ResizeObserverEntry[] = [];\n\n\tconst torndown$ = new ReplaySubject<void>();\n\tconst scrollContainers: HTMLOrSVGElement[] | null = findScrollContainers(\n\t\tnativeElement,\n\t\twindow,\n\t\tdocument.body,\n\t);\n\n\t// set actual debounce values early, so effects know if they should react accordingly\n\tconst scrollDebounce = debounce\n\t\t? typeof debounce === 'number'\n\t\t\t? debounce\n\t\t\t: debounce.scroll\n\t\t: null;\n\tconst resizeDebounce = debounce\n\t\t? typeof debounce === 'number'\n\t\t\t? debounce\n\t\t\t: debounce.resize\n\t\t: null;\n\n\tconst debounceAndTorndown = <T>(\n\t\tdebounce: number | null,\n\t): MonoTypeOperatorFunction<T> => {\n\t\treturn pipe(debounceTime(debounce ?? 0), takeUntil(torndown$));\n\t};\n\n\treturn new Observable<ResizeResult>((subscriber) => {\n\t\tif (!isSupport) {\n\t\t\tsubscriber.error(\n\t\t\t\t'[ngx-resize] your browser does not support ResizeObserver. Please consider using a polyfill',\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tzone.runOutsideAngular(() => {\n\t\t\tif (emitInitialResult) {\n\t\t\t\tconst [result] = calculateResult(nativeElement, window, offsetSize, []);\n\t\t\t\tif (emitInZone) zone.run(() => void subscriber.next(result));\n\t\t\t\telse subscriber.next(result);\n\t\t\t}\n\n\t\t\tconst callback = (entries: ResizeObserverEntry[]) => {\n\t\t\t\tlastEntries = entries;\n\t\t\t\tconst [result, size] = calculateResult(\n\t\t\t\t\tnativeElement,\n\t\t\t\t\twindow,\n\t\t\t\t\toffsetSize,\n\t\t\t\t\tentries,\n\t\t\t\t);\n\n\t\t\t\tif (emitInZone) zone.run(() => void subscriber.next(result));\n\t\t\t\telse subscriber.next(result);\n\n\t\t\t\tif (!areBoundsEqual(lastBounds || {}, size)) lastBounds = size;\n\t\t\t};\n\n\t\t\tconst boundCallback = () => void callback(lastEntries);\n\n\t\t\tobserver = new ResizeObserver(callback);\n\n\t\t\tobserver.observe(nativeElement, { box });\n\t\t\tif (scroll) {\n\t\t\t\tif (scrollContainers) {\n\t\t\t\t\tscrollContainers.forEach((scrollContainer) => {\n\t\t\t\t\t\tfromEvent(scrollContainer as HTMLElement, 'scroll', {\n\t\t\t\t\t\t\tcapture: true,\n\t\t\t\t\t\t\tpassive: true,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.pipe(debounceAndTorndown(scrollDebounce))\n\t\t\t\t\t\t\t.subscribe(boundCallback);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfromEvent(window, 'scroll', { capture: true, passive: true })\n\t\t\t\t\t.pipe(debounceAndTorndown(scrollDebounce))\n\t\t\t\t\t.subscribe(boundCallback);\n\t\t\t}\n\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(debounceAndTorndown(resizeDebounce))\n\t\t\t\t.subscribe(boundCallback);\n\n\t\t\tif (\n\t\t\t\tscreen &&\n\t\t\t\t'orientation' in screen &&\n\t\t\t\t'addEventListener' in screen.orientation\n\t\t\t) {\n\t\t\t\tfromEvent(screen.orientation, 'change')\n\t\t\t\t\t.pipe(debounceAndTorndown(scrollDebounce))\n\t\t\t\t\t.subscribe(boundCallback);\n\t\t\t} else if (window && 'orientationchange' in window) {\n\t\t\t\tfromEvent(window, 'orientationchange')\n\t\t\t\t\t.pipe(debounceAndTorndown(scrollDebounce))\n\t\t\t\t\t.subscribe(boundCallback);\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tif (observer) {\n\t\t\t\tobserver.unobserve(nativeElement);\n\t\t\t\tobserver.disconnect();\n\t\t\t}\n\t\t\ttorndown$.next();\n\t\t\ttorndown$.complete();\n\t\t};\n\t}).pipe(\n\t\tdebounceTime(scrollDebounce ?? 0),\n\t\tshare({ connector: () => new ReplaySubject(1) }),\n\t);\n}\n\nfunction calculateResult(\n\tnativeElement: HTMLElement,\n\twindow: Window,\n\toffsetSize: boolean,\n\tentries: ResizeObserverEntry[],\n): [ResizeResult, Omit<DOMRect, 'toJSON'>] {\n\tconst { left, top, width, height, bottom, right, x, y } =\n\t\tnativeElement.getBoundingClientRect();\n\tconst size = { left, top, width, height, bottom, right, x, y };\n\n\tif (nativeElement instanceof HTMLElement && offsetSize) {\n\t\tsize.height = nativeElement.offsetHeight;\n\t\tsize.width = nativeElement.offsetWidth;\n\t}\n\n\tObject.freeze(size);\n\treturn [{ entries, dpr: window.devicePixelRatio, ...size }, size];\n}\n\n// Returns a list of scroll offsets\nfunction findScrollContainers(\n\telement: HTMLOrSVGElement | null,\n\twindow: Window | null,\n\tdocumentBody: HTMLElement,\n): HTMLOrSVGElement[] {\n\tconst result: HTMLOrSVGElement[] = [];\n\tif (!element || !window || element === documentBody) return result;\n\tconst { overflow, overflowX, overflowY } = window.getComputedStyle(\n\t\telement as HTMLElement,\n\t);\n\tif (\n\t\t[overflow, overflowX, overflowY].some(\n\t\t\t(prop) => prop === 'auto' || prop === 'scroll',\n\t\t)\n\t)\n\t\tresult.push(element);\n\treturn [\n\t\t...result,\n\t\t...findScrollContainers(\n\t\t\t(element as HTMLElement).parentElement,\n\t\t\twindow,\n\t\t\tdocumentBody,\n\t\t),\n\t];\n}\n\n// Checks if element boundaries are equal\nconst keys: (keyof Omit<ResizeResult, 'entries' | 'dpr'>)[] = [\n\t'x',\n\t'y',\n\t'top',\n\t'bottom',\n\t'left',\n\t'right',\n\t'width',\n\t'height',\n];\nconst areBoundsEqual = (\n\ta: Omit<ResizeResult, 'entries' | 'dpr'>,\n\tb: Omit<ResizeResult, 'entries' | 'dpr'>,\n) => keys.every((key) => a[key] === b[key]);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}