{"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,\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 {\n return this.visible$.asObservable();\n }\n\n get expanded(): boolean {\n return this.visible$.getValue();\n }\n\n protected open(component: Type, options: ModalDialogOptions | 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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"}