{"version":3,"file":"chunk-nq6b2gfi.js","sources":["packages/sports/libs/common/ui/overflow/src/lib/when-overflowed.directive.ts","packages/sports/web/app/src/event-details/event-switcher/services/switcher-toggle.service.ts"],"sourcesContent":["import { ChangeDetectorRef, DestroyRef, Directive, ElementRef, HostBinding, Input, OnInit, Renderer2, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { MutationObserverService, ResizeObserverService } from '@frontend/sports/common/core/utils/dom';\nimport { WINDOW } from '@frontend/vanilla/core';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\n\nexport interface WhenOverflowedOptions {\n    classNameToAdd?: string;\n    resizeFont?: boolean;\n    minFontSize?: number;\n    listenToResize?: boolean;\n    manualMutationCheck?: boolean;\n    adjustRatio?: number;\n}\n\n@Directive({\n    selector: '[msWhenOverflowed]',\n    standalone: true,\n})\nexport class WhenOverflowedDirective implements OnInit {\n    @Input('msWhenOverflowed') options: WhenOverflowedOptions = {};\n\n    @HostBinding('style.font-size.px') fontSize?: number;\n\n    private defaultFont = 0;\n    private readonly destroyRef = inject(DestroyRef);\n    readonly #window = inject(WINDOW);\n\n    constructor(\n        private elementRef: ElementRef<HTMLElement>,\n        private renderer: Renderer2,\n        private mutationObserver: MutationObserverService,\n        private resizeObserver: ResizeObserverService,\n        private changeDetectionRef: ChangeDetectorRef,\n    ) {}\n\n    ngOnInit(): void {\n        if (!this.options.manualMutationCheck && (this.options.classNameToAdd || this.options.resizeFont)) {\n            this.initMutationObserver();\n        }\n\n        if (this.options.listenToResize) {\n            this.initResizeObserver();\n        }\n    }\n\n    private get element(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    forceRefresh(): void {\n        this.recalculate();\n    }\n\n    private initResizeObserver(): void {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        this.resizeObserver\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            .observe(this.elementRef)\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            .pipe(\n                map((entry: ResizeObserverEntry) => Math.round(entry.contentRect.width)),\n                filter((w) => w > 0),\n                distinctUntilChanged(),\n                takeUntilDestroyed(this.destroyRef),\n            )\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            .subscribe(() => this.recalculate());\n    }\n\n    private initMutationObserver(): void {\n        const options = {\n            characterData: true,\n            childList: true,\n            subtree: true,\n        };\n\n        this.mutationObserver\n            .observe(this.element, options)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.recalculate());\n    }\n\n    private recalculate(): void {\n        this.renderer.removeClass(this.element, this.options.classNameToAdd ?? '');\n        this.fontSize = undefined;\n        this.changeDetectionRef.detectChanges();\n\n        if (this.options.resizeFont && !this.defaultFont) {\n            const style = this.#window.getComputedStyle(this.element);\n            this.defaultFont = parseFloat(style.fontSize);\n        }\n\n        if (this.overflowRatio < 1) {\n            if (this.options.resizeFont && this.options.minFontSize) {\n                const newFont = +Math.max(\n                    this.options.minFontSize,\n                    Math.min(this.defaultFont, this.defaultFont * this.overflowRatio * (this.options.adjustRatio ?? 1)),\n                ).toFixed(2);\n                this.fontSize = newFont;\n            }\n\n            this.renderer.addClass(this.element, this.options.classNameToAdd ?? '');\n            this.changeDetectionRef.detectChanges();\n        }\n    }\n\n    private get overflowRatio(): number {\n        return this.element.offsetWidth / this.element.scrollWidth;\n    }\n}\n","import { Type, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { ModalDialogOptions, ModalDialogService, ModalRef } from '@frontend/sports/modal/feature';\nimport { HtmlNode, WINDOW } from '@frontend/vanilla/core';\nimport { BehaviorSubject, Observable, fromEvent } from 'rxjs';\nimport { filter, skip, switchMap, takeUntil } from 'rxjs/operators';\n\nexport abstract class SwitcherToggleService {\n    private dialogRef?: ModalRef;\n    private visible$ = new BehaviorSubject(false);\n    readonly #window = inject(WINDOW);\n    private readonly switcherEnabled: boolean;\n\n    constructor(\n        private dialogService: ModalDialogService,\n        private htmlNode: HtmlNode,\n        isSwitcherEnabled: boolean,\n    ) {\n        this.switcherEnabled = isSwitcherEnabled;\n\n        const show$ = this.visible$.pipe(filter((v) => v));\n        const hide$ = this.visible$.pipe(filter((v) => !v));\n        show$\n            .pipe(\n                switchMap(() => fromEvent(this.#window, 'click').pipe(skip(1), takeUntil(hide$))),\n                takeUntilDestroyed(),\n            )\n            .subscribe(() => this.close());\n    }\n\n    get expanded$(): Observable<boolean> {\n        return this.visible$.asObservable();\n    }\n\n    get expanded(): boolean {\n        return this.visible$.getValue();\n    }\n\n    protected open<TComponent>(component: Type<TComponent>, options: ModalDialogOptions<Partial<TComponent> | void>): void {\n        if (!this.switcherEnabled) {\n            return;\n        }\n        this.toggleHtmlClasses(true);\n        this.dialogRef = this.dialogService.openDialog(component, options);\n        this.visible$.next(true);\n    }\n\n    close(): void {\n        if (!this.expanded) {\n            return;\n        }\n        this.toggleHtmlClasses(false);\n        this.dialogRef?.close();\n        this.dialogRef = undefined;\n        this.visible$.next(false);\n    }\n\n    closeSwitcher(): void {\n        this.close();\n    }\n\n    getHtmlToggleClass(): string {\n        return 'event-switcher-visible';\n    }\n\n    private toggleHtmlClasses(visible: boolean): void {\n        this.htmlNode.setCssClass(this.getHtmlToggleClass(), visible);\n    }\n}\n"],"names":["WhenOverflowedDirective","_window","constructor","elementRef","renderer","mutationObserver","resizeObserver","changeDetectionRef","__privateAdd","options","defaultFont","destroyRef","inject","DestroyRef","__privateSet","WINDOW","ngOnInit","manualMutationCheck","classNameToAdd","resizeFont","initMutationObserver","listenToResize","initResizeObserver","element","nativeElement","forceRefresh","recalculate","observe","pipe","map","entry","Math","round","contentRect","width","filter","w","distinctUntilChanged","takeUntilDestroyed","subscribe","characterData","childList","subtree","removeClass","fontSize","undefined","detectChanges","style","__privateGet","getComputedStyle","parseFloat","overflowRatio","minFontSize","newFont","max","min","adjustRatio","toFixed","addClass","offsetWidth","scrollWidth","ɵɵdirectiveInject","ElementRef","Renderer2","MutationObserverService","ResizeObserverService","ChangeDetectorRef","z","selectors","hostVars","hostBindings","rf","ctx","ɵɵstyleProp","_WhenOverflowedDirective","SwitcherToggleService","dialogService","htmlNode","isSwitcherEnabled","visible$","BehaviorSubject","switcherEnabled","show$","v","hide$","switchMap","fromEvent","skip","takeUntil","close","expanded$","asObservable","expanded","getValue","open","component","toggleHtmlClasses","dialogRef","openDialog","next","_a","closeSwitcher","getHtmlToggleClass","visible","setCssClass"],"mappings":"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"}