{"version":3,"file":"ironsource-fusion-ui-directives-click-outside.mjs","sources":["../../../projects/fusion-ui/directives/click-outside/click-outside.directive.ts","../../../projects/fusion-ui/directives/click-outside/click-outside.module.ts","../../../projects/fusion-ui/directives/click-outside/ironsource-fusion-ui-directives-click-outside.ts"],"sourcesContent":["import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {BehaviorSubject, fromEvent, Subject, Subscription} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {isFunction} from '@ironsource/fusion-ui/utils';\n\n@Directive({\n    selector: '[fusionClickOutside]'\n})\nexport class ClickOutsideDirective implements OnInit, OnDestroy {\n    @Input() set clickOutsideActivate(value: boolean) {\n        this.listenClickOutside$.next(value);\n    }\n\n    /**\n     * Use this when the click event will remove the host element from the DOM\n     * @param value\n     */\n    @Input() set clickOutsideByCoordinates(value: boolean) {\n        this.byCoordinatesMode = value;\n    }\n    @Output() fusionClickOutside = new EventEmitter();\n\n    private onDestroy$ = new Subject();\n    private listenClickOutside$: BehaviorSubject<boolean> = new BehaviorSubject(true);\n    private clickOutSideSubscription: Subscription;\n    private byCoordinatesMode = false;\n\n    constructor(private elementRef: ElementRef) {}\n\n    ngOnInit(): void {\n        this.listenClickOutside$.asObservable().pipe(takeUntil(this.onDestroy$)).subscribe(this.handleClickOutSideListener.bind(this));\n    }\n\n    ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    private handleClickOutSideListener(value: boolean): void {\n        if (value && !this.clickOutSideSubscription) {\n            this.clickOutSideSubscription = fromEvent(document, 'click').subscribe((event: MouseEvent) => {\n                const clickedInside =\n                    this.byCoordinatesMode && event.clientY !== 0 && event.clientY !== 0\n                        ? this.isClickInsideByCoordinates(event)\n                        : this.isInsideByTargetPath(event);\n                if (!clickedInside) {\n                    this.fusionClickOutside.emit(event.target);\n                }\n            });\n        } else {\n            if (this.clickOutSideSubscription && typeof this.clickOutSideSubscription.unsubscribe === 'function') {\n                this.clickOutSideSubscription.unsubscribe();\n                this.clickOutSideSubscription = null;\n            }\n        }\n    }\n\n    private isClickInsideByCoordinates(event: MouseEvent): boolean {\n        const parentRect = this.elementRef.nativeElement.getBoundingClientRect();\n        return (\n            parentRect.left <= event.clientX &&\n            parentRect.right >= event.clientX &&\n            parentRect.top <= event.clientY &&\n            parentRect.bottom >= event.clientY\n        );\n    }\n\n    isInsideByTargetPath(event: MouseEvent) {\n        if (isFunction(event.composedPath)) {\n            const elements = event.composedPath();\n            return elements.some(el => {\n                return el == this.elementRef.nativeElement;\n            });\n        } else {\n            return this.elementRef.nativeElement.contains(this.getEventElement(event));\n        }\n    }\n\n    getEventElement(event: MouseEvent) {\n        let element;\n\n        console.log('--', this.elementRef.nativeElement, event.composedPath());\n\n        if (isFunction(event.composedPath)) {\n            // event.composedPath()[0] support opened shadow root\n            const elements = event.composedPath();\n\n            elements.forEach(el => {\n                console.log(':', el, el == this.elementRef.nativeElement);\n            });\n\n            element = elements.length > 0 ? elements[0] : null;\n        }\n\n        return element || event.target;\n    }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ClickOutsideDirective} from './click-outside.directive';\n\n@NgModule({\n    declarations: [ClickOutsideDirective],\n    exports: [ClickOutsideDirective],\n    imports: [CommonModule]\n})\nexport class ClickOutsideModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}