{"version":3,"file":"chunk-ho5bi9ew.js","sources":["packages/vanilla/lib/features/overlay/src/animated-overlay-ref.ts","packages/vanilla/lib/features/overlay/src/overlay.service.ts","packages/vanilla/lib/features/overlay/src/overlay.component.ts","packages/vanilla/lib/features/overlay/src/overlay-bootstrap.service.ts","packages/vanilla/lib/features/overlay/src/overlay.feature.ts"],"sourcesContent":["import { AnimationEvent } from '@angular/animations';\nimport { OverlayRef } from '@angular/cdk/overlay';\n\nimport { AnimatedOverlayStates } from '@frontend/vanilla/shared/overlay-factory';\nimport { Observable, Subject } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nenum AnimationStage {\n StartOpen,\n EndOpen,\n StartClose,\n EndClose,\n}\n\n/**\n * @whatItDoes Represents a reference to a cdk overlay and provides functionality to handle closing it with an animation.\n *\n * @stable\n */\nexport class AnimatedOverlayRef {\n private beforeClosedStream = new Subject();\n private afterClosedStream = new Subject();\n private animationStream = new Subject();\n\n get states(): Partial {\n return this.animationStates || {};\n }\n\n get shouldAnimate(): boolean {\n return !!this.animationStates;\n }\n\n constructor(\n private overlayRef: OverlayRef,\n private animationStates: AnimatedOverlayStates | null,\n ) {}\n\n close() {\n this.beforeClosedStream.next();\n this.beforeClosedStream.complete();\n\n if (this.shouldAnimate) {\n this.animationStream.pipe(first((s) => s === AnimationStage.StartClose)).subscribe(() => this.overlayRef.detachBackdrop());\n\n this.animationStream.pipe(first((s) => s === AnimationStage.EndClose)).subscribe(() => this.closeOverlay());\n } else {\n this.closeOverlay();\n }\n }\n\n onAnimationEvent(event: AnimationEvent) {\n if (!this.shouldAnimate) {\n return;\n }\n\n this.animationStream.next(this.resolveAnimationStage(event.phaseName, event.toState));\n }\n\n afterClosed(): Observable {\n return this.afterClosedStream.asObservable();\n }\n\n beforeClose(): Observable {\n return this.beforeClosedStream.asObservable();\n }\n\n private closeOverlay() {\n this.overlayRef.dispose();\n this.afterClosedStream.next();\n this.afterClosedStream.complete();\n }\n\n private resolveAnimationStage(phase: string, toState: string): AnimationStage | undefined {\n switch (phase) {\n case 'start':\n switch (toState) {\n case this.states.off:\n return AnimationStage.StartClose;\n case this.states.on:\n return AnimationStage.StartOpen;\n }\n break;\n case 'done':\n switch (toState) {\n case this.states.off:\n return AnimationStage.EndClose;\n case this.states.on:\n return AnimationStage.EndOpen;\n }\n break;\n }\n\n return;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * @stable\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class OverlayService {\n private currentlyActiveHandler: OverlayHandler | null;\n private activeHandlerEvents = new BehaviorSubject(null);\n /**\n * @internal\n */\n get activeHandler(): Observable {\n return this.activeHandlerEvents;\n }\n\n /** An observable that reports overall status of the overlay (whether it is shown or not). */\n get active(): Observable {\n return this.activeHandlerEvents.pipe(map((h) => !!h));\n }\n\n /** An returns true if overlay is currently shown, otherwise false. */\n get isActive(): boolean {\n return this.currentlyActiveHandler != null;\n }\n\n constructor() {\n this.activeHandler.subscribe((handler) => (this.currentlyActiveHandler = handler));\n }\n\n /**\n * Gets a handler that can show or hide the overlay.\n */\n getHandler(options?: OverlayOptions): OverlayHandler {\n const handler = new OverlayHandler(options);\n\n handler.activate.subscribe((activate: boolean) => {\n if (activate) {\n if (this.currentlyActiveHandler && this.currentlyActiveHandler !== handler) {\n throw new Error('Another overlay is already displayed');\n }\n\n this.activeHandlerEvents.next(handler);\n } else {\n if (this.currentlyActiveHandler === handler) {\n this.activeHandlerEvents.next(null);\n }\n }\n });\n\n return handler;\n }\n}\n\n/**\n * @whatItDoes Handler returned by {@link OverlayService} to control the main overlay.\n *\n * @stable\n */\nexport class OverlayHandler {\n private activateEvents: Subject = new Subject();\n\n get activate(): Observable {\n return this.activateEvents;\n }\n\n /**\n * @internal\n */\n constructor(options?: OverlayOptions) {\n options = options || {};\n\n if (options.onClick) {\n this.onClick = options.onClick;\n }\n }\n\n /**\n * @internal\n */\n onClick: () => boolean | void = () => true;\n\n /**\n * Shows the overlay. If an overlay is already active, it throws an error.\n */\n show(): void {\n this.activateEvents.next(true);\n }\n\n /**\n * Hides the overlay if it's the currently shown one.\n */\n hide(): void {\n this.activateEvents.next(false);\n }\n\n /**\n * Calls `show()` or `hide()` based on the parameter `value`.\n */\n toggle(value: boolean) {\n if (value) {\n this.show();\n } else {\n this.hide();\n }\n }\n}\n\n/**\n * Options for overlay handler.\n *\n * @stable\n */\nexport interface OverlayOptions {\n /**\n * A callback that is called when overlay is clicked. If it returns true, the overlay\n * stays open after click. Otherwise it's closed.\n */\n onClick?: () => boolean | void;\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { Component } from '@angular/core';\n\nimport { OverlayHandler, OverlayService } from './overlay.service';\n\n/**\n * @stable\n */\n@Component({\n standalone: true,\n imports: [OverlayModule],\n selector: 'vn-overlay',\n template: '
',\n})\nexport class OverlayComponent {\n overlayHandler: OverlayHandler | null;\n\n constructor(private service: OverlayService) {\n this.service.activeHandler.subscribe((handler) => {\n this.overlayHandler = handler;\n });\n }\n\n hide() {\n if (this.overlayHandler && !this.overlayHandler.onClick()) {\n // NOTE: check again because onClick handler might have already closed the overlay\n if (this.overlayHandler) {\n this.overlayHandler.hide();\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { DynamicLayoutService, OnFeatureInit, SlotName } from '@frontend/vanilla/core';\n\nimport { OverlayComponent } from './overlay.component';\n\n@Injectable()\nexport class OverlayBootstrapService implements OnFeatureInit {\n constructor(private dynamicLayoutService: DynamicLayoutService) {}\n\n onFeatureInit() {\n this.dynamicLayoutService.addComponent(SlotName.Bottom, OverlayComponent, null);\n }\n}\n","import { runOnFeatureInit } from '@frontend/vanilla/core';\n\nimport { OverlayBootstrapService } from './overlay-bootstrap.service';\n\nexport function provide() {\n return [runOnFeatureInit(OverlayBootstrapService)];\n}\n"],"names":["AnimationStage","AnimatedOverlayRef","states","animationStates","shouldAnimate","constructor","overlayRef","beforeClosedStream","Subject","afterClosedStream","animationStream","close","next","complete","pipe","first","s","StartClose","subscribe","detachBackdrop","EndClose","closeOverlay","onAnimationEvent","event","resolveAnimationStage","phaseName","toState","afterClosed","asObservable","beforeClose","dispose","phase","off","on","StartOpen","EndOpen","OverlayService","activeHandler","activeHandlerEvents","active","map","h","isActive","currentlyActiveHandler","BehaviorSubject","handler","getHandler","options","OverlayHandler","activate","Error","factory","ɵfac","providedIn","_OverlayService","activateEvents","onClick","show","hide","toggle","value","OverlayComponent","service","overlayHandler","ɵɵdirectiveInject","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","ɵɵelementEnd","ɵɵproperty","OverlayModule","encapsulation","_OverlayComponent","OverlayBootstrapService","dynamicLayoutService","onFeatureInit","addComponent","SlotName","Bottom","ɵɵinject","DynamicLayoutService","l","_OverlayBootstrapService","provide","runOnFeatureInit"],"mappings":"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"}