@ng-doc/ui-kit
Version:
<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>
1 lines • 10.8 kB
Source Map (JSON)
{"version":3,"file":"ng-doc-ui-kit-classes-overlay-ref.mjs","sources":["../../../../libs/ui-kit/classes/overlay-ref/overlay-ref.ts","../../../../libs/ui-kit/classes/overlay-ref/ng-doc-ui-kit-classes-overlay-ref.ts"],"sourcesContent":["import {\n ConnectedOverlayPositionChange,\n FlexibleConnectedPositionStrategy,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { Location } from '@angular/common';\nimport { NgZone } from '@angular/core';\nimport { Event, NavigationEnd, Router } from '@angular/router';\nimport { isPresent } from '@ng-doc/core';\nimport { toElement } from '@ng-doc/ui-kit/helpers';\nimport { NgDocOverlayConfig, NgDocOverlayContainer } from '@ng-doc/ui-kit/interfaces';\nimport { fromSubscribe, ngDocZoneDetach, ngDocZoneOptimize } from '@ng-doc/ui-kit/observables';\nimport { NgDocOverlayAnimationEvent } from '@ng-doc/ui-kit/types';\nimport { fromEvent, merge, NEVER, Observable } from 'rxjs';\nimport { debounceTime, filter, map, pairwise, switchMap, take, takeUntil } from 'rxjs/operators';\n\nexport class NgDocOverlayRef<T = unknown> {\n private overlayResult: T | null = null;\n private opened: boolean = true;\n\n constructor(\n readonly overlayRef: OverlayRef,\n private readonly overlayConfig: NgDocOverlayConfig,\n readonly overlayContainer: NgDocOverlayContainer,\n private readonly ngZone: NgZone,\n private readonly router?: Router,\n private readonly location?: Location,\n ) {\n /* Closes overlay when it was outside click */\n this.afterOpen()\n .pipe(\n switchMap(() =>\n this.ngZone.runOutsideAngular(() => this.overlayRef.outsidePointerEvents()),\n ),\n filter(\n (event: MouseEvent) =>\n !!this.overlayConfig.closeIfOutsideClick && this.outsideClickChecker(event),\n ),\n ngDocZoneOptimize(this.ngZone),\n )\n .subscribe(() => this.close());\n\n /* Closes overlay when it was inner click */\n fromEvent(this.overlayRef.overlayElement, 'click')\n .pipe(\n filter(() => !!this.overlayConfig.closeIfInnerClick),\n takeUntil(this.overlayRef.detachments()),\n ngDocZoneOptimize(this.ngZone),\n )\n .subscribe(() => this.close());\n\n /* Closes overlay if route was changed */\n if (this.router && this.overlayConfig.disposeOnRouteNavigation) {\n this.router.events\n .pipe(\n filter((event: Event) => event instanceof NavigationEnd),\n ngDocZoneOptimize(this.ngZone),\n takeUntil(this.overlayRef.detachments()),\n )\n .subscribe(() => this.close());\n }\n\n if (this.location && this.overlayConfig.disposeOnNavigation) {\n fromSubscribe(this.location)\n .pipe(takeUntil(this.overlayRef.detachments()))\n .subscribe(() => this.close());\n }\n\n if (!this.overlayConfig.disableClose) {\n merge(\n this.overlayRef.backdropClick(),\n this.overlayRef.keydownEvents().pipe(filter((e: KeyboardEvent) => e.code === 'Escape')),\n )\n .pipe(take(1), takeUntil(this.overlayRef.detachments()))\n .subscribe(() => this.close());\n }\n\n /* Update position if origin changes its position */\n const origin: unknown = toElement(this.overlayConfig.origin);\n\n if (origin instanceof HTMLElement) {\n this.ngZone.onStable\n .pipe(\n debounceTime(10),\n map(() => origin.getBoundingClientRect()),\n pairwise(),\n filter(\n ([a, b]: [DOMRect, DOMRect]) =>\n isPresent(a) &&\n isPresent(b) &&\n (a.x !== b.x || a.y !== b.y || a.width !== b.width || a.height !== b.height),\n ),\n ngDocZoneDetach(this.ngZone),\n takeUntil(this.overlayRef.detachments()),\n )\n .subscribe(() => this.overlayRef.updatePosition());\n }\n }\n\n /** Sets focus to overlay */\n focus(): void {\n this.overlayContainer.focus();\n }\n\n /** Overlay has focus */\n get isFocused(): boolean {\n return this.overlayContainer.isFocused;\n }\n\n /** Overlay is opened */\n get isOpened(): boolean {\n return this.opened;\n }\n\n /** Overlay has attached */\n get hasAttached(): boolean {\n return this.overlayRef.hasAttached();\n }\n\n /**\n * Closes overlay\n * @param closeResult\n */\n close(closeResult?: T): void {\n this.overlayResult = isPresent(closeResult) ? closeResult : null;\n this.afterClose().subscribe(() => void this.overlayRef.detach());\n this.overlayContainer.close();\n this.overlayRef.detachBackdrop();\n this.opened = false;\n }\n\n beforeOpen(): Observable<void> {\n return this.overlayContainer.animationEvent.pipe(\n filter((event: NgDocOverlayAnimationEvent) => event === 'beforeOpen'),\n take(1),\n map(() => void 0),\n );\n }\n\n afterOpen(): Observable<void> {\n return this.overlayContainer.animationEvent.pipe(\n filter((event: NgDocOverlayAnimationEvent) => event === 'afterOpen'),\n take(1),\n map(() => void 0),\n );\n }\n\n beforeClose(): Observable<T | null> {\n return merge(\n this.overlayContainer.animationEvent.pipe(\n filter((event: NgDocOverlayAnimationEvent) => event === 'beforeClose'),\n ),\n this.overlayRef.detachments(),\n ).pipe(\n take(1),\n map(() => this.overlayResult),\n );\n }\n\n afterClose(): Observable<T | null> {\n return merge(\n this.overlayContainer.animationEvent.pipe(\n filter((event: NgDocOverlayAnimationEvent) => event === 'afterClose'),\n ),\n this.overlayRef.detachments(),\n ).pipe(\n take(1),\n map(() => this.overlayResult),\n );\n }\n\n positionChanges(): Observable<ConnectedOverlayPositionChange> {\n return this.overlayConfig.positionStrategy instanceof FlexibleConnectedPositionStrategy\n ? this.overlayConfig.positionStrategy.positionChanges\n : NEVER;\n }\n\n private outsideClickChecker(event: MouseEvent): boolean {\n const target: EventTarget | null = event.target;\n if (target instanceof Element) {\n const origin: unknown = toElement(this.overlayConfig.origin);\n if (origin instanceof HTMLElement) {\n return !origin.contains(target);\n }\n }\n return true;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAgBa,eAAe,CAAA;IAI1B,WAAA,CACW,UAAsB,EACd,aAAiC,EACzC,gBAAuC,EAC/B,MAAc,EACd,MAAe,EACf,QAAmB,EAAA;QAL3B,IAAA,CAAA,UAAU,GAAV,UAAU;QACF,IAAA,CAAA,aAAa,GAAb,aAAa;QACrB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QACR,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;QATnB,IAAA,CAAA,aAAa,GAAa,IAAI;QAC9B,IAAA,CAAA,MAAM,GAAY,IAAI;;QAW5B,IAAI,CAAC,SAAS;aACX,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAC5E,EACD,MAAM,CACJ,CAAC,KAAiB,KAChB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAC9E,EACD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;aAE/B,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;;QAGhC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO;AAC9C,aAAA,IAAI,CACH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EACpD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EACxC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;aAE/B,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;;QAGhC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC9D,IAAI,CAAC,MAAM,CAAC;AACT,iBAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAY,KAAK,KAAK,YAAY,aAAa,CAAC,EACxD,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAC9B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;iBAEzC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC;QAEA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE;AAC3D,YAAA,aAAa,CAAC,IAAI,CAAC,QAAQ;iBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;iBAC7C,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACpC,YAAA,KAAK,CACH,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAC/B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAgB,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AAEtF,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;iBACtD,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC;;QAGA,MAAM,MAAM,GAAY,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAE5D,QAAA,IAAI,MAAM,YAAY,WAAW,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC;AACT,iBAAA,IAAI,CACH,YAAY,CAAC,EAAE,CAAC,EAChB,GAAG,CAAC,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAC,EACzC,QAAQ,EAAE,EACV,MAAM,CACJ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,KACzB,SAAS,CAAC,CAAC,CAAC;gBACZ,SAAS,CAAC,CAAC,CAAC;iBACX,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAC/E,EACD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;iBAEzC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;QACtD;IACF;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IAC/B;;AAGA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS;IACxC;;AAGA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,MAAM;IACpB;;AAGA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;IACtC;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,WAAe,EAAA;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,IAAI;AAChE,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AAChE,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAC9C,MAAM,CAAC,CAAC,KAAiC,KAAK,KAAK,KAAK,YAAY,CAAC,EACrE,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAClB;IACH;IAEA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAC9C,MAAM,CAAC,CAAC,KAAiC,KAAK,KAAK,KAAK,WAAW,CAAC,EACpE,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAClB;IACH;IAEA,WAAW,GAAA;QACT,OAAO,KAAK,CACV,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CACvC,MAAM,CAAC,CAAC,KAAiC,KAAK,KAAK,KAAK,aAAa,CAAC,CACvE,EACD,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAC9B,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAC9B;IACH;IAEA,UAAU,GAAA;QACR,OAAO,KAAK,CACV,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CACvC,MAAM,CAAC,CAAC,KAAiC,KAAK,KAAK,KAAK,YAAY,CAAC,CACtE,EACD,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAC9B,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,CAC9B;IACH;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,YAAY;AACpD,cAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;cACpC,KAAK;IACX;AAEQ,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAuB,KAAK,CAAC,MAAM;AAC/C,QAAA,IAAI,MAAM,YAAY,OAAO,EAAE;YAC7B,MAAM,MAAM,GAAY,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5D,YAAA,IAAI,MAAM,YAAY,WAAW,EAAE;AACjC,gBAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC;QACF;AACA,QAAA,OAAO,IAAI;IACb;AACD;;AC3LD;;AAEG;;;;"}