{"version":3,"file":"seniorsistemas-angular-components-tooltip.mjs","sources":["../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.html","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.directive.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.module.ts","../../projects/angular-components/tooltip/src/seniorsistemas-angular-components-tooltip.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nimport { TooltipPositions } from './models/tooltip-position';\n\n/**\n * @description Componente de apresentação do tooltip. Utilizado internamente pela diretiva `TooltipDirective`.\n * O posicionamento é gerenciado pelo CDK Overlay via `TooltipDirective`.\n */\n@Component({\n    selector: 's-tooltip',\n    templateUrl: './tooltip.component.html',\n    styleUrls: ['./tooltip.component.scss'],\n    standalone: true,\n    imports: [NgClass],\n})\nexport class TooltipComponent {\n    /** @description Texto ou HTML a ser exibido no tooltip. */\n    public readonly tooltip = input<string>('');\n\n    /** @description Posição do tooltip — usada para renderizar a seta no lado correto. */\n    public readonly position = input<TooltipPositions>('top');\n\n    /** @description Controla a visibilidade (opacidade) do tooltip via transição CSS. */\n    public readonly visible = input<boolean>(false);\n\n    /** @description Quando `true`, o conteúdo é renderizado como texto puro (escapa HTML). */\n    public readonly escape = input<boolean>(false);\n}\n\n","<div\n    class=\"tooltip relative max-w-[220px] break-words rounded-xsmall bg-grayscale-100 p-2 text-center font-open-sans text-sm font-normal leading-normal text-grayscale-0 transition-opacity duration-300\"\n    [class.opacity-0]=\"!visible()\"\n    [class.opacity-100]=\"visible()\"\n    [class.tooltip--visible]=\"visible()\"\n    [ngClass]=\"'tooltip--' + position()\"\n>\n    @if (escape()) {\n        <span class=\"tooltip__content\">\n            {{ tooltip() }}\n        </span>\n    } @else {\n        <span\n            class=\"tooltip__content\"\n            [innerHTML]=\"tooltip()\"\n        >\n        </span>\n    }\n</div>\n\n","import { ConnectedPosition, FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n    ComponentRef,\n    Directive,\n    ElementRef,\n    HostListener,\n    OnDestroy,\n    OnInit,\n    Renderer2,\n    inject,\n    input,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DebounceUtils } from '@seniorsistemas/angular-components/common';\nimport { MobileBehavior } from './models/mobile-behavior';\nimport { TooltipEvent } from './models/tooltip-event';\nimport { TooltipPositions } from './models/tooltip-position';\nimport { TooltipComponent } from './tooltip.component';\n\n/**\n * @description Diretiva que exibe um tooltip (dica de ferramenta) flutuante ao interagir com o elemento hospedeiro.\n * Posiciona-se automaticamente considerando o espaço disponível na tela, utilizando o CDK Overlay.\n * Suporta eventos de hover, click e focus, além de comportamentos customizados para mobile.\n *\n * @example\n * ```html\n * <button sTooltip=\"Clique aqui\" tooltipPosition=\"top\">Ação</button>\n * ```\n *\n * @category Overlay\n */\n@Directive({\n    selector: '[sTooltip]',\n    standalone: true,\n})\nexport class TooltipDirective implements OnInit, OnDestroy {\n    /**\n     * @description Texto exibido no tooltip. Quando vazio ou `undefined`, o tooltip não é renderizado.\n     */\n    public readonly tooltip = input<string | undefined>(undefined, { alias: 'sTooltip' });\n\n    /**\n     * @description Posição preferencial do tooltip em relação ao elemento hospedeiro.\n     * O tooltip se reposiciona automaticamente se não houver espaço suficiente.\n     *\n     * @default 'top'\n     */\n    public readonly tooltipPosition = input<TooltipPositions>('top');\n\n    /**\n     * @description Tempo em milissegundos antes do tooltip aparecer após o evento de ativação.\n     *\n     * @default 500\n     */\n    public readonly showDelay = input<number>(500);\n\n    /**\n     * @description Tempo em milissegundos que o tooltip permanece visível após aparecer.\n     * Quando não informado, o tooltip permanece até o usuário sair do elemento.\n     */\n    public readonly displayTime = input<number | undefined>(undefined);\n\n    /**\n     * @description Evento do elemento hospedeiro que dispara a exibição do tooltip.\n     * - `'hover'`: exibe ao passar o mouse (padrão).\n     * - `'click'`: exibe ao clicar.\n     * - `'focus'`: exibe ao focar no elemento.\n     *\n     * @default 'hover'\n     */\n    public readonly tooltipEvent = input<TooltipEvent>('hover');\n\n    /**\n     * @description Quando `true`, o conteúdo HTML do tooltip é escapado antes de ser renderizado.\n     *\n     * @default false\n     */\n    public readonly escape = input<boolean>(false);\n\n    /**\n     * @description Quando `false`, o tooltip nunca é exibido, mesmo que haja interação do usuário.\n     * Útil para desabilitar tooltips dinamicamente.\n     *\n     * @default true\n     */\n    public readonly visible = input<boolean>(true);\n\n    /**\n     * @description Comportamento do tooltip em dispositivos móveis (touch).\n     * - `'pressing'`: exibe ao pressionar e manter o toque (padrão).\n     * - `'none'`: desabilita o tooltip em dispositivos táteis.\n     *\n     * @default 'pressing'\n     */\n    public readonly mobileBehavior = input<MobileBehavior>('pressing');\n\n    /**\n     * @description Referência a um input HTML para sincronizar a exibição do tooltip com o foco no campo.\n     */\n    public readonly focusedInputRef = input<HTMLInputElement | null>(null);\n\n    /**\n     * @description Quando `true`, o tooltip só é exibido se o texto do elemento estiver truncado (overflow).\n     * Útil para cells de tabela ou elementos com `text-overflow: ellipsis`.\n     *\n     * @default false\n     */\n    public readonly checkTruncatedText = input<boolean>(false);\n\n    private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    private readonly overlay = inject(Overlay);\n    private readonly debounceUtils = inject(DebounceUtils);\n    private readonly renderer = inject(Renderer2);\n\n    private overlayRef: OverlayRef | null = null;\n    private componentRef: ComponentRef<TooltipComponent> | null = null;\n    private positionChangeSubscription: Subscription | null = null;\n    private showTimeout?: number;\n    private touchTimeout?: number;\n    private tooltipCreatedByFocus = false;\n    private readonly debounceCreateTooltipFunction = this.debounceUtils.debounceLeading(() =>\n        this._createTooltip(true, true),\n    );\n\n    public ngOnInit(): void {\n        this.validatePosition();\n        this.updateTooltipVisibilityWhenFocusOnInput();\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy();\n    }\n\n    // whenever the component with the tooltip is clicked I destroy the tooltip.\n    // whenever a key is pressed on the component with the tooltip I destroy the tooltip.\n    @HostListener('click')\n    @HostListener('keydown')\n    public onClick(): void {\n        if (\n            this.tooltipEvent() === 'hover' &&\n            !navigator.userAgent.match(/Android/i) &&\n            !navigator.userAgent.match(/iPhone/i)\n        ) {\n            this.destroy();\n        }\n    }\n\n    @HostListener('focus')\n    public onFocus(): void {\n        if (this.tooltipEvent() === 'focus') {\n            this._createTooltip(true, true);\n        }\n    }\n\n    @HostListener('blur')\n    public onBlur(): void {\n        if (this.tooltipEvent() === 'focus') {\n            this.destroy();\n        }\n    }\n\n    @HostListener('mouseenter')\n    public onMouseEnter(): void {\n        if (this.tooltipEvent() === 'hover' || this.focusedInputRef()) {\n            this.debounceCreateTooltipFunction();\n        }\n    }\n\n    @HostListener('mouseleave')\n    @HostListener('wheel')\n    public onMouseLeave(): void {\n        if ((this.tooltipEvent() === 'hover' || this.focusedInputRef()) && !this.tooltipCreatedByFocus) {\n            this.destroy();\n        }\n    }\n\n    @HostListener('touchstart')\n    public onTouchStart(): void {\n        if (this.tooltipEvent() === 'hover') {\n            window.clearTimeout(this.touchTimeout);\n            const delay = this.mobileBehavior() === 'pressing' ? this.showDelay() : 0;\n            this.touchTimeout = window.setTimeout(() => {\n                this._createTooltip(true, true);\n            }, delay);\n        }\n    }\n\n    @HostListener('touchend')\n    public onTouchEnd(): void {\n        if (this.tooltipEvent() === 'hover' && this.mobileBehavior() === 'pressing') {\n            window.clearTimeout(this.touchTimeout);\n            this.destroy();\n        }\n    }\n\n    private validatePosition(): void {\n        const containsPosition = ['top', 'right', 'bottom', 'left'].includes(this.tooltipPosition());\n        if (!containsPosition) {\n            throw new Error(`Tooltip position \"${this.tooltipPosition()}\" is unexpected`);\n        }\n    }\n\n    /**\n     * Manipula a visibilidade do tooltip quando houver uma referência de input.\n     */\n    private updateTooltipVisibilityWhenFocusOnInput(): void {\n        const inputRef = this.focusedInputRef();\n        if (!inputRef) return;\n\n        this.renderer.listen(inputRef, 'focus', () => {\n            this._createTooltip(false, false);\n            this.tooltipCreatedByFocus = true;\n        });\n        this.renderer.listen(inputRef, 'blur', () => {\n            this.destroy();\n            this.tooltipCreatedByFocus = false;\n        });\n    }\n\n    private _createTooltip(useShowDelay = false, autoDestroy = true): void {\n        const tooltipText = this.tooltip() ?? '';\n        if (!tooltipText.length || this.overlayRef !== null) return;\n\n        if (this.checkTruncatedText() && !this.contentIsTruncated) return;\n\n        const positionStrategy = this.buildPositionStrategy();\n        const scrollStrategy = this.overlay.scrollStrategies.reposition();\n\n        this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy });\n\n        const portal = new ComponentPortal(TooltipComponent);\n        this.componentRef = this.overlayRef.attach(portal);\n\n        this.componentRef.setInput('tooltip', tooltipText);\n        this.componentRef.setInput('escape', this.escape());\n        this.componentRef.setInput('position', this.tooltipPosition());\n\n        this.positionChangeSubscription = positionStrategy.positionChanges.subscribe((change) => {\n            const mappedPosition = this.mapCdkPositionToTooltipPosition(change.connectionPair);\n            this.componentRef?.setInput('position', mappedPosition);\n        });\n\n        const delay = useShowDelay ? this.showDelay() : 0;\n        this.showTimeout = window.setTimeout(() => {\n            this.componentRef?.setInput('visible', this.visible());\n        }, delay);\n\n        if (autoDestroy && this.displayTime()) {\n            window.setTimeout(() => {\n                this.destroy();\n            }, this.displayTime()!);\n        }\n    }\n\n    private buildPositionStrategy(): FlexibleConnectedPositionStrategy {\n        const preferred = this.tooltipPosition();\n        const allPositions: TooltipPositions[] = ['top', 'bottom', 'left', 'right'];\n        const orderedPositions = [preferred, ...allPositions.filter((p) => p !== preferred)];\n\n        return this.overlay\n            .position()\n            .flexibleConnectedTo(this.elementRef)\n            .withPositions(orderedPositions.map((p) => this.getConnectedPosition(p)))\n            .withFlexibleDimensions(false)\n            .withPush(false);\n    }\n\n    private getConnectedPosition(pos: TooltipPositions): ConnectedPosition {\n        const offset = 10;\n        const positionMap: Record<TooltipPositions, ConnectedPosition> = {\n            top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset },\n            bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset },\n            left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset },\n            right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset },\n        };\n        return positionMap[pos];\n    }\n\n    private mapCdkPositionToTooltipPosition(pair: { overlayX: string; overlayY: string }): TooltipPositions {\n        if (pair.overlayY === 'bottom') return 'top';\n        if (pair.overlayY === 'top') return 'bottom';\n        if (pair.overlayX === 'end') return 'left';\n        return 'right';\n    }\n\n    private destroy(): void {\n        window.clearTimeout(this.showTimeout);\n        window.clearTimeout(this.touchTimeout);\n        this.positionChangeSubscription?.unsubscribe();\n        this.positionChangeSubscription = null;\n        if (this.overlayRef) {\n            this.overlayRef.dispose();\n            this.overlayRef = null;\n            this.componentRef = null;\n        }\n    }\n\n    private get contentIsTruncated(): boolean {\n        const element = this.elementRef.nativeElement as HTMLElement;\n        return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n    }\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\n\n@NgModule({\n    imports: [TooltipDirective, TooltipComponent],\n    exports: [TooltipDirective],\n})\nexport class TooltipModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAKA;;;AAGG;MAQU,gBAAgB,CAAA;;AAET,IAAA,OAAO,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;;AAG5B,IAAA,QAAQ,GAAG,KAAK,CAAmB,KAAK,CAAC,CAAC;;AAG1C,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;;AAGhC,IAAA,MAAM,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;wGAXtC,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB7B,soBAoBA,EAAA,MAAA,EAAA,CAAA,4lBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNc,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAER,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAGT,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,soBAAA,EAAA,MAAA,EAAA,CAAA,4lBAAA,CAAA,EAAA,CAAA;;;AEMtB;;;;;;;;;;;AAWG;MAKU,gBAAgB,CAAA;AACzB;;AAEG;IACa,OAAO,GAAG,KAAK,CAAqB,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAEtF;;;;;AAKG;AACa,IAAA,eAAe,GAAG,KAAK,CAAmB,KAAK,CAAC,CAAC;AAEjE;;;;AAIG;AACa,IAAA,SAAS,GAAG,KAAK,CAAS,GAAG,CAAC,CAAC;AAE/C;;;AAGG;AACa,IAAA,WAAW,GAAG,KAAK,CAAqB,SAAS,CAAC,CAAC;AAEnE;;;;;;;AAOG;AACa,IAAA,YAAY,GAAG,KAAK,CAAe,OAAO,CAAC,CAAC;AAE5D;;;;AAIG;AACa,IAAA,MAAM,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAE/C;;;;;AAKG;AACa,IAAA,OAAO,GAAG,KAAK,CAAU,IAAI,CAAC,CAAC;AAE/C;;;;;;AAMG;AACa,IAAA,cAAc,GAAG,KAAK,CAAiB,UAAU,CAAC,CAAC;AAEnE;;AAEG;AACa,IAAA,eAAe,GAAG,KAAK,CAA0B,IAAI,CAAC,CAAC;AAEvE;;;;;AAKG;AACa,IAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAE1C,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AACzD,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAEtC,UAAU,GAAsB,IAAI,CAAC;IACrC,YAAY,GAA0C,IAAI,CAAC;IAC3D,0BAA0B,GAAwB,IAAI,CAAC;AACvD,IAAA,WAAW,CAAU;AACrB,IAAA,YAAY,CAAU;IACtB,qBAAqB,GAAG,KAAK,CAAC;AACrB,IAAA,6BAA6B,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAChF,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAClC,CAAC;IAEK,QAAQ,GAAA;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,uCAAuC,EAAE,CAAC;KAClD;IAEM,WAAW,GAAA;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;;;IAMM,OAAO,GAAA;AACV,QAAA,IACI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO;AAC/B,YAAA,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;YACtC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EACvC;YACE,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;KACJ;IAGM,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACnC;KACJ;IAGM,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;KACJ;IAGM,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC3D,IAAI,CAAC,6BAA6B,EAAE,CAAC;SACxC;KACJ;IAIM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC5F,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;KACJ;IAGM,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,EAAE;AACjC,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACvC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACnC,EAAE,KAAK,CAAC,CAAC;SACb;KACJ;IAGM,UAAU,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,UAAU,EAAE;AACzE,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;KACJ;IAEO,gBAAgB,GAAA;AACpB,QAAA,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,gBAAgB,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,CAAqB,kBAAA,EAAA,IAAI,CAAC,eAAe,EAAE,CAAiB,eAAA,CAAA,CAAC,CAAC;SACjF;KACJ;AAED;;AAEG;IACK,uCAAuC,GAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAK;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACtC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAK;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACvC,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,cAAc,CAAC,YAAY,GAAG,KAAK,EAAE,WAAW,GAAG,IAAI,EAAA;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO;QAE5D,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;AAElE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAElE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC,CAAC;AAE5E,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACpF,MAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnF,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC5D,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC1D,EAAE,KAAK,CAAC,CAAC;AAEV,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACnC,YAAA,MAAM,CAAC,UAAU,CAAC,MAAK;gBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,aAAC,EAAE,IAAI,CAAC,WAAW,EAAG,CAAC,CAAC;SAC3B;KACJ;IAEO,qBAAqB,GAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,YAAY,GAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5E,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;QAErF,OAAO,IAAI,CAAC,OAAO;AACd,aAAA,QAAQ,EAAE;AACV,aAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,aAAA,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;aACxE,sBAAsB,CAAC,KAAK,CAAC;aAC7B,QAAQ,CAAC,KAAK,CAAC,CAAC;KACxB;AAEO,IAAA,oBAAoB,CAAC,GAAqB,EAAA;QAC9C,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,QAAA,MAAM,WAAW,GAAgD;YAC7D,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;YACpG,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;YACtG,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE;YACpG,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;SACvG,CAAC;AACF,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;KAC3B;AAEO,IAAA,+BAA+B,CAAC,IAA4C,EAAA;AAChF,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;AAAE,YAAA,OAAO,MAAM,CAAC;AAC3C,QAAA,OAAO,OAAO,CAAC;KAClB;IAEO,OAAO,GAAA;AACX,QAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtC,QAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,0BAA0B,EAAE,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;KACJ;AAED,IAAA,IAAY,kBAAkB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B,CAAC;AAC7D,QAAA,OAAO,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;KACnG;wGAzQQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;8BAuGU,OAAO,EAAA,CAAA;sBAFb,YAAY;uBAAC,OAAO,CAAA;;sBACpB,YAAY;uBAAC,SAAS,CAAA;gBAYhB,OAAO,EAAA,CAAA;sBADb,YAAY;uBAAC,OAAO,CAAA;gBAQd,MAAM,EAAA,CAAA;sBADZ,YAAY;uBAAC,MAAM,CAAA;gBAQb,YAAY,EAAA,CAAA;sBADlB,YAAY;uBAAC,YAAY,CAAA;gBASnB,YAAY,EAAA,CAAA;sBAFlB,YAAY;uBAAC,YAAY,CAAA;;sBACzB,YAAY;uBAAC,OAAO,CAAA;gBAQd,YAAY,EAAA,CAAA;sBADlB,YAAY;uBAAC,YAAY,CAAA;gBAYnB,UAAU,EAAA,CAAA;sBADhB,YAAY;uBAAC,UAAU,CAAA;;;MCnLf,aAAa,CAAA;wGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAHZ,OAAA,EAAA,CAAA,gBAAgB,EAAE,gBAAgB,aAClC,gBAAgB,CAAA,EAAA,CAAA,CAAA;yGAEjB,aAAa,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;oBAC7C,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC9B,iBAAA,CAAA;;;ACRD;;AAEG;;;;"}