{"version":3,"file":"seniorsistemas-angular-components-spotlight.mjs","sources":["../../projects/angular-components/spotlight/src/lib/spotlight/spotlight.component.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight.component.html","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-overlay/spotlight-overlay.component.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-overlay/spotlight-overlay.component.html","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-tour.service.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-step.directive.ts","../../projects/angular-components/spotlight/src/seniorsistemas-angular-components-spotlight.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, input, output, signal, TemplateRef } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';\n\nimport { SpotlightPosition } from './types/spotlight-position';\nimport { SpotlightStepAction } from './types/spotlight-step';\n\n/**\n * Componente de popover do Spotlight.\n *\n * Exibe o card de destaque com título, mensagem, seta direcional, contador de passos,\n * botões de navegação e, em modo simples (passo único), o checkbox \"não mostrar novamente\".\n *\n * Este componente é instanciado programaticamente pelo `SpotlightOverlayComponent`\n * via CDK Overlay. Normalmente não é usado diretamente no template.\n */\n@Component({\n    selector: 's-spotlight',\n    templateUrl: './spotlight.component.html',\n    standalone: true,\n    imports: [CommonModule, ButtonModule, CheckboxComponent, TranslateModule],\n})\nexport class SpotlightComponent {\n    /** Título do popover. Aceita string ou `TemplateRef` para conteúdo dinâmico. */\n    title = input<string | TemplateRef<any>>('');\n\n    /** Mensagem principal do popover. Aceita string ou `TemplateRef` para conteúdo dinâmico. */\n    message = input<string | TemplateRef<any>>();\n\n    /** Template opcional para área de mídia/conteúdo customizado acima da mensagem. */\n    content = input<TemplateRef<any> | null>(null);\n\n    /** Posição do popover em relação ao elemento alvo. @default 'bottom-center' */\n    position = input<SpotlightPosition>('bottom-center');\n\n    /** Número do passo atual (1-based) exibido no contador. @default 1 */\n    currentStep = input(1);\n\n    /** Total de passos do tour, usado no contador e para controle de botões. @default 1 */\n    totalSteps = input(1);\n\n    /**\n     * Exibe o checkbox \"não mostrar novamente\" (apenas em passo único).\n     * Passe `false` para suprimir o checkbox quando não for necessário persistir a preferência.\n     * @default true\n     */\n    showDoNotShowAgain = input(true);\n\n    /** Lista de botões de ação adicionais exibidos na área de rodapé. */\n    actions = input<SpotlightStepAction[]>([]);\n\n    /**\n     * Deslocamento em pixels para posicionar a seta manualmente no eixo principal.\n     * Quando `null`, o alinhamento é controlado pela `position`. @default null\n     */\n    arrowOffsetPx = input<number | null>(null);\n\n    /** Emitido ao clicar no botão de fechar (X). */\n    closed = output<void>();\n\n    /** Emitido ao clicar em \"Próximo\". */\n    next = output<void>();\n\n    /** Emitido ao clicar em \"Voltar\". */\n    previous = output<void>();\n\n    /** Emitido ao clicar em \"Entendido\" (modo simples, passo único). */\n    understand = output<void>();\n\n    /** Estado atual do checkbox \"não mostrar novamente\". */\n    isDoNotShowAgainChecked = signal(false);\n\n    private static instanceCount = 0;\n\n    /** @internal */\n    protected readonly instanceId = `spotlight-${++SpotlightComponent.instanceCount}`;\n\n    /** @internal */\n    readonly titleId = `${this.instanceId}-title`;\n\n    /** @internal */\n    readonly descId = `${this.instanceId}-desc`;\n\n    get titleTemplate(): TemplateRef<any> | null {\n        const v = this.title();\n        return v instanceof TemplateRef ? v : null;\n    }\n\n    get titleString(): string {\n        const v = this.title();\n        return v instanceof TemplateRef ? '' : (v ?? '');\n    }\n\n    get messageTemplate(): TemplateRef<any> | null {\n        const v = this.message();\n        return v instanceof TemplateRef ? v : null;\n    }\n\n    get messageString(): string {\n        const v = this.message();\n        return v instanceof TemplateRef ? '' : (v ?? '');\n    }\n\n    get arrowPosition(): SpotlightPosition {\n        const [direction] = this.position().split('-') as [string, string];\n        const [, alignment] = this.position().split('-') as [string, string];\n        const oppositeDirection = this.getOppositeDirection(direction);\n\n        return `${oppositeDirection}-${alignment}` as SpotlightPosition;\n    }\n\n    get isArrowTop(): boolean {\n        return this.arrowPosition.startsWith('top-');\n    }\n\n    get isArrowBottom(): boolean {\n        return this.arrowPosition.startsWith('bottom-');\n    }\n\n    get isArrowLeft(): boolean {\n        return this.arrowPosition.startsWith('left-');\n    }\n\n    get isArrowRight(): boolean {\n        return this.arrowPosition.startsWith('right-');\n    }\n\n    get arrowRotation(): string {\n        const direction = this.arrowPosition.split('-')[0];\n\n        switch (direction) {\n            case 'top':\n                return '';\n            case 'bottom':\n                return 'rotate-180';\n            case 'left':\n                return '-rotate-90';\n            case 'right':\n                return 'rotate-90';\n            default:\n                return '';\n        }\n    }\n\n    get arrowAlignmentClass(): string {\n        const offset = this.arrowOffsetPx();\n\n        if (offset !== null) {\n            return 'justify-start';\n        }\n\n        const alignment = this.arrowPosition.split('-')[1];\n\n        if (this.isArrowTop || this.isArrowBottom) {\n            switch (alignment) {\n                case 'start':\n                    return 'justify-start';\n                case 'center':\n                    return 'justify-center';\n                case 'end':\n                    return 'justify-end';\n                default:\n                    return '';\n            }\n        } else {\n            switch (alignment) {\n                case 'start':\n                    return 'items-start justify-start';\n                case 'center':\n                    return 'items-center justify-center';\n                case 'end':\n                    return 'items-end justify-end';\n                default:\n                    return '';\n            }\n        }\n    }\n\n    get arrowPaddingStyle(): Record<string, string> {\n        const offset = this.arrowOffsetPx();\n        if (offset === null) {\n            return {};\n        }\n\n        if (this.isArrowTop || this.isArrowBottom) {\n            return { 'padding-left': `${offset}px`, 'padding-right': '0' };\n        }\n\n        return { 'padding-top': `${offset}px`, 'padding-bottom': '0' };\n    }\n\n    /** Emite o evento `closed`. Chamado pelo botão de fechar no template. */\n    onClose(): void {\n        this.closed.emit();\n    }\n\n    /** Emite o evento `next`. Chamado pelo botão \"Próximo\" no template. */\n    onNext(): void {\n        this.next.emit();\n    }\n\n    /** Emite o evento `previous`. Chamado pelo botão \"Voltar\" no template. */\n    onPrevious(): void {\n        this.previous.emit();\n    }\n\n    /** Emite o evento `understand`. Chamado pelo botão \"Entendido\" no template. */\n    onUnderstand(): void {\n        this.understand.emit();\n    }\n\n    /** Alterna o estado de `isDoNotShowAgainChecked`. */\n    toggleDoNotShowAgain(): void {\n        this.isDoNotShowAgainChecked.update((v) => !v);\n    }\n\n    private getOppositeDirection(direction: string): string {\n        switch (direction) {\n            case 'top':\n                return 'bottom';\n            case 'bottom':\n                return 'top';\n            case 'left':\n                return 'right';\n            case 'right':\n                return 'left';\n            default:\n                return direction;\n        }\n    }\n}\n\n","<div\n    [attr.role]=\"totalSteps() > 1 ? 'dialog' : 'tooltip'\"\n    [attr.aria-modal]=\"totalSteps() > 1 ? 'true' : null\"\n    [attr.aria-labelledby]=\"titleId\"\n    [attr.aria-describedby]=\"descId\"\n    class=\"flex max-w-[342px]\"\n    [ngClass]=\"isArrowLeft || isArrowRight ? 'flex-row' : 'flex-col'\"\n>\n    @if (isArrowTop) {\n        <ng-container *ngTemplateOutlet=\"arrowTopTemplate\"></ng-container>\n    }\n\n    @if (isArrowLeft) {\n        <ng-container *ngTemplateOutlet=\"arrowLeftTemplate\"></ng-container>\n    }\n\n    <div\n        class=\"relative flex w-full flex-col overflow-hidden rounded-[4px] bg-grayscale-0\"\n        style=\"\n            box-shadow:\n                0 3px 5px rgba(0, 0, 0, 0.2),\n                0 1px 18px rgba(0, 0, 0, 0.12),\n                0 6px 10px rgba(0, 0, 0, 0.14);\n        \"\n    >\n        <!-- Região aria-live para anunciação de mudança de passo para leitores de tela -->\n        <span\n            class=\"sr-only\"\n            aria-live=\"polite\"\n            aria-atomic=\"true\"\n        >\n            @if (totalSteps() > 1) {\n                {{\n                    'platform.angular_components.step_progress'\n                        | translate: { current: currentStep(), total: totalSteps() }\n                }}\n            }\n        </span>\n        <div class=\"flex h-[40px] w-full items-center justify-between p-[12px]\">\n            <div class=\"flex min-w-0 flex-1 items-center gap-[8px]\">\n                <h2\n                    [id]=\"titleId\"\n                    class=\"flex-1 overflow-hidden overflow-ellipsis whitespace-nowrap font-open-sans text-[14px] font-bold leading-[1.5] text-grayscale-90\"\n                >\n                    @if (titleTemplate) {\n                        <ng-container *ngTemplateOutlet=\"titleTemplate\"></ng-container>\n                    } @else {\n                        {{ titleString }}\n                    }\n                </h2>\n            </div>\n            <button\n                (click)=\"onClose()\"\n                class=\"flex h-[16px] w-[16px] flex-none items-center justify-center text-grayscale-90 transition-colors hover:text-grayscale-100\"\n                [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n            >\n                <i class=\"fas fa-times\"></i>\n            </button>\n        </div>\n\n        @if (content()) {\n            <ng-container *ngTemplateOutlet=\"content()\"></ng-container>\n        }\n\n        <div class=\"flex w-full flex-col items-start gap-[20px] bg-grayscale-0 p-[12px]\">\n            <div\n                [id]=\"descId\"\n                class=\"w-full whitespace-pre-wrap font-open-sans text-[14px] font-normal leading-[1.5] text-grayscale-90\"\n            >\n                @if (messageTemplate) {\n                    <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n                } @else {\n                    {{ messageString }}\n                }\n            </div>\n\n            <div class=\"flex w-full flex-wrap gap-3\">\n                @if (totalSteps() > 1) {\n                    <p class=\"font-open-sans text-[14px] font-normal leading-[1.5] text-grayscale-90\">\n                        {{\n                            'platform.angular_components.step_counter'\n                                | translate: { current: currentStep(), total: totalSteps() }\n                        }}\n                    </p>\n                }\n\n                @if (totalSteps() === 1 && showDoNotShowAgain()) {\n                    <s-checkbox\n                        [checked]=\"isDoNotShowAgainChecked()\"\n                        (checkedChange)=\"toggleDoNotShowAgain()\"\n                        [label]=\"'platform.angular_components.dont_show_again' | translate\"\n                    ></s-checkbox>\n                }\n\n                <div\n                    class=\"flex flex-wrap items-start justify-end gap-[8px]\"\n                    [ngClass]=\"totalSteps() > 1 ? 'w-full' : ''\"\n                >\n                    @for (action of actions(); track action.label) {\n                        <s-button\n                            [label]=\"action.label\"\n                            (clicked)=\"action.handler()\"\n                            priority=\"default\"\n                            size=\"small\"\n                            class=\"flex-none\"\n                        ></s-button>\n                    }\n\n                    @if (totalSteps() > 1 && currentStep() > 1) {\n                        <s-button\n                            [label]=\"'platform.angular_components.back' | translate\"\n                            (clicked)=\"onPrevious()\"\n                            priority=\"default\"\n                            size=\"small\"\n                            class=\"flex-none\"\n                        ></s-button>\n                    }\n\n                    <s-button\n                        [label]=\"\n                            totalSteps() <= 1\n                                ? ('platform.angular_components.understood' | translate)\n                                : currentStep() < totalSteps()\n                                  ? ('platform.angular_components.next' | translate)\n                                  : ('platform.angular_components.complete' | translate)\n                        \"\n                        (clicked)=\"totalSteps() > 1 ? onNext() : onUnderstand()\"\n                        priority=\"secondary\"\n                        size=\"small\"\n                        class=\"flex-none\"\n                    ></s-button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    @if (isArrowBottom) {\n        <ng-container *ngTemplateOutlet=\"arrowBottomTemplate\"></ng-container>\n    }\n\n    @if (isArrowRight) {\n        <ng-container *ngTemplateOutlet=\"arrowRightTemplate\"></ng-container>\n    }\n</div>\n\n<!-- Arrow Templates -->\n<ng-template #arrowTopTemplate>\n    <div\n        class=\"relative z-10 flex h-[8px] w-full px-[12px] py-0\"\n        [ngClass]=\"arrowAlignmentClass\"\n        [ngStyle]=\"arrowPaddingStyle\"\n    >\n        <svg\n            width=\"16\"\n            height=\"8\"\n            viewBox=\"0 0 16 8\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"text-grayscale-0\"\n            [ngClass]=\"arrowRotation\"\n        >\n            <path\n                d=\"M0 8L8 0L16 8\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    </div>\n</ng-template>\n\n<ng-template #arrowBottomTemplate>\n    <div\n        class=\"relative z-10 flex h-[8px] w-full px-[12px] py-0\"\n        [ngClass]=\"arrowAlignmentClass\"\n        [ngStyle]=\"arrowPaddingStyle\"\n    >\n        <svg\n            width=\"16\"\n            height=\"8\"\n            viewBox=\"0 0 16 8\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"text-grayscale-0\"\n            [ngClass]=\"arrowRotation\"\n        >\n            <path\n                d=\"M0 8L8 0L16 8\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    </div>\n</ng-template>\n\n<ng-template #arrowLeftTemplate>\n    <div\n        class=\"relative z-10 flex w-[8px] flex-col items-center self-stretch px-0\"\n        [ngClass]=\"arrowAlignmentClass\"\n        [ngStyle]=\"arrowPaddingStyle\"\n    >\n        <svg\n            width=\"16\"\n            height=\"8\"\n            viewBox=\"0 0 16 8\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"text-grayscale-0\"\n            [ngClass]=\"arrowRotation\"\n        >\n            <path\n                d=\"M0 8L8 0L16 8\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    </div>\n</ng-template>\n\n<ng-template #arrowRightTemplate>\n    <div\n        class=\"relative z-10 flex w-[8px] flex-col items-center self-stretch px-0\"\n        [ngClass]=\"arrowAlignmentClass\"\n        [ngStyle]=\"arrowPaddingStyle\"\n    >\n        <svg\n            width=\"16\"\n            height=\"8\"\n            viewBox=\"0 0 16 8\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            class=\"text-grayscale-0\"\n            [ngClass]=\"arrowRotation\"\n        >\n            <path\n                d=\"M0 8L8 0L16 8\"\n                fill=\"currentColor\"\n            />\n        </svg>\n    </div>\n</ng-template>\n\n","import { NgStyle } from '@angular/common';\nimport {\n    Component,\n    ComponentRef,\n    computed,\n    DestroyRef,\n    EnvironmentInjector,\n    inject,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { ConnectedPosition, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { combineLatest, debounceTime, fromEvent } from 'rxjs';\n\nimport { SpotlightComponent } from '../spotlight.component';\nimport { SpotlightTourService } from '../spotlight-tour.service';\nimport { SpotlightPosition } from '../types/spotlight-position';\nimport { SpotlightStep } from '../types/spotlight-step';\n\nconst POPOVER_WIDTH = 342;\nconst SPOTLIGHT_PADDING = 8;\nconst ARROW_HALF_SIZE = 8;\nconst ARROW_OFFSET_MIN = 4;\nconst ARROW_OFFSET_MAX = POPOVER_WIDTH - 4 - 16;\nconst MASK_BG = 'rgba(0,0,0,0.5)';\nconst MASK_TRANSITION = 'all 0.2s ease';\nconst OVERLAY_Z = '10000';\nconst POPOVER_Z = '10001';\n\nfunction toConnectedPositions(position: SpotlightPosition): ConnectedPosition[] {\n    const [direction, alignment] = position.split('-');\n    const p = SPOTLIGHT_PADDING + 2;\n    const hAlign = alignment as 'start' | 'center' | 'end';\n    const vAlignMap: Record<string, 'top' | 'center' | 'bottom'> = { start: 'top', center: 'center', end: 'bottom' };\n    const vAlign = vAlignMap[alignment] ?? 'center';\n\n    let primary: ConnectedPosition;\n    let opposite: ConnectedPosition;\n\n    switch (direction) {\n        case 'top':\n            primary = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };\n            opposite = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };\n            break;\n        case 'right':\n            primary = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };\n            opposite = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };\n            break;\n        case 'left':\n            primary = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };\n            opposite = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };\n            break;\n        default: // 'bottom'\n            primary = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };\n            opposite = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };\n    }\n\n    return [\n        primary,\n        opposite,\n        { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: p },\n        { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -p },\n        { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: p },\n        { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -p },\n    ];\n}\n\n@Component({\n    selector: 's-spotlight-overlay',\n    templateUrl: './spotlight-overlay.component.html',\n    standalone: true,\n    imports: [NgStyle],\n})\nexport class SpotlightOverlayComponent implements OnInit, OnDestroy {\n    private readonly tourService = inject(SpotlightTourService);\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly zone = inject(NgZone);\n    private readonly cdkOverlay = inject(Overlay);\n    private readonly environmentInjector = inject(EnvironmentInjector);\n    private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n    /** @internal */\n    readonly isActive = this.tourService.isActive;\n    /** @internal */\n    readonly currentStep = this.tourService.currentStep;\n    /** @internal */\n    readonly currentIndex = this.tourService.currentIndex;\n    /** @internal */\n    readonly totalSteps = this.tourService.totalSteps;\n\n    /** @internal*/\n    readonly targetRect = signal<DOMRect | null>(null);\n\n    /** @internal */\n    readonly topMaskStyle = computed<Record<string, string>>(() => {\n        const rect = this.targetRect();\n        const base = {\n            position: 'fixed',\n            'z-index': OVERLAY_Z,\n            background: MASK_BG,\n            transition: MASK_TRANSITION,\n            cursor: 'default',\n        };\n        if (!rect) {\n            return { ...base, top: '0', left: '0', right: '0', bottom: '0' };\n        }\n        const top = Math.max(0, rect.top - SPOTLIGHT_PADDING);\n        return { ...base, top: '0', left: '0', right: '0', height: `${top}px` };\n    });\n\n    /** @internal */\n    readonly leftMaskStyle = computed<Record<string, string>>(() => {\n        const rect = this.targetRect();\n\n        if (!rect) {\n            return {} as Record<string, string>;\n        }\n\n        const p = SPOTLIGHT_PADDING;\n        const top = Math.max(0, rect.top - p);\n        const bottom = Math.min(window.innerHeight, rect.bottom + p);\n        const left = Math.max(0, rect.left - p);\n\n        return {\n            position: 'fixed',\n            'z-index': OVERLAY_Z,\n            background: MASK_BG,\n            transition: MASK_TRANSITION,\n            cursor: 'default',\n            top: `${top}px`,\n            left: '0',\n            width: `${left}px`,\n            height: `${bottom - top}px`,\n        };\n    });\n\n    /** @internal */\n    readonly rightMaskStyle = computed<Record<string, string>>(() => {\n        const rect = this.targetRect();\n\n        if (!rect) {\n            return {} as Record<string, string>;\n        }\n\n        const p = SPOTLIGHT_PADDING;\n        const top = Math.max(0, rect.top - p);\n        const bottom = Math.min(window.innerHeight, rect.bottom + p);\n        const right = Math.min(window.innerWidth, rect.right + p);\n\n        return {\n            position: 'fixed',\n            'z-index': OVERLAY_Z,\n            background: MASK_BG,\n            transition: MASK_TRANSITION,\n            cursor: 'default',\n            top: `${top}px`,\n            left: `${right}px`,\n            right: '0',\n            height: `${bottom - top}px`,\n        };\n    });\n\n    /** @internal */\n    readonly bottomMaskStyle = computed<Record<string, string>>(() => {\n        const rect = this.targetRect();\n\n        if (!rect) {\n            return {} as Record<string, string>;\n        }\n\n        const p = SPOTLIGHT_PADDING;\n        const bottom = Math.min(window.innerHeight, rect.bottom + p);\n\n        return {\n            position: 'fixed',\n            'z-index': OVERLAY_Z,\n            background: MASK_BG,\n            transition: MASK_TRANSITION,\n            cursor: 'default',\n            top: `${bottom}px`,\n            left: '0',\n            right: '0',\n            bottom: '0',\n        };\n    });\n\n    /** @internal */\n    readonly transparentBlockerStyle = computed<Record<string, string>>(() => ({\n        position: 'fixed',\n        top: '0',\n        left: '0',\n        right: '0',\n        bottom: '0',\n        'z-index': OVERLAY_Z,\n        cursor: 'default',\n    }));\n\n    private resizeObserver: ResizeObserver | null = null;\n    private popoverOverlayRef: OverlayRef | null = null;\n    private popoverComponentRef: ComponentRef<SpotlightComponent> | null = null;\n    private popoverSubs: Array<{ unsubscribe(): void }> = [];\n    private focusTrap: FocusTrap | null = null;\n    private previouslyFocusedElement: HTMLElement | null = null;\n\n    constructor() {\n        combineLatest([\n            toObservable(this.currentStep),\n            toObservable(this.isActive),\n            toObservable(this.tourService.registrationVersion),\n        ])\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(([step, active]) => {\n                this.disconnectResizeObserver();\n\n                if (!step || !active) {\n                    this.targetRect.set(null);\n                    this.destroyPopoverOverlay();\n                    return;\n                }\n\n                const el = this.tourService.getElement(step.stepId);\n                if (el?.nativeElement) {\n                    el.nativeElement.scrollIntoView({ block: 'nearest' });\n\n                    const target = el.nativeElement;\n\n                    this.zone.runOutsideAngular(() => {\n                        requestAnimationFrame(() => {\n                            this.zone.run(() => {\n                                if (!this.isActive()) {\n                                    return;\n                                }\n\n                                this.updateTargetRect(target);\n                                this.observeElement(target);\n                                this.updatePopoverOverlay(target, step);\n                            });\n                        });\n                    });\n                } else {\n                    this.targetRect.set(null);\n                    this.updatePopoverOverlay(null, step);\n                }\n            });\n    }\n\n    ngOnInit(): void {\n        this.zone.runOutsideAngular(() => {\n            const scrollOpts = { capture: true, passive: true } as AddEventListenerOptions;\n\n            fromEvent(document, 'scroll', scrollOpts)\n                .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))\n                .subscribe(() =>\n                    this.zone.run(() => {\n                        this.refreshRect();\n                        this.popoverOverlayRef?.updatePosition();\n                        this.scheduleSync();\n                    }),\n                );\n\n            fromEvent(window, 'resize', { passive: true } as AddEventListenerOptions)\n                .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))\n                .subscribe(() =>\n                    this.zone.run(() => {\n                        this.refreshRect();\n                        this.popoverOverlayRef?.updatePosition();\n                        this.scheduleSync();\n                    }),\n                );\n\n            fromEvent<KeyboardEvent>(document, 'keydown')\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe((event) => {\n                    if (event.key === 'Escape') {\n                        this.zone.run(() => this.onDismiss());\n                    }\n                });\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.destroyPopoverOverlay();\n    }\n\n    /** @internal */\n    onNext(): void {\n        this.tourService.next();\n    }\n\n    /** @internal */\n    onPrevious(): void {\n        this.tourService.previous();\n    }\n\n    /** @internal */\n    onClose(): void {\n        this.tourService.stop();\n    }\n\n    /** @internal */\n    onDismiss(): void {\n        const step = this.currentStep();\n\n        if (!step || step.dismissible === false) {\n            return;\n        }\n\n        this.tourService.stop({\n            reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',\n            doNotShowAgain: false,\n        });\n    }\n\n    private updatePopoverOverlay(targetEl: HTMLElement | null, step: SpotlightStep): void {\n        const strategy = targetEl\n            ? this.cdkOverlay\n                  .position()\n                  .flexibleConnectedTo(targetEl)\n                  .withPositions(toConnectedPositions(step.position ?? 'bottom-center'))\n                  .withFlexibleDimensions(false)\n                  .withPush(true)\n                  .withViewportMargin(8)\n            : this.cdkOverlay.position().global().centerHorizontally().centerVertically();\n\n        if (!this.popoverOverlayRef) {\n            this.popoverOverlayRef = this.cdkOverlay.create({\n                hasBackdrop: false,\n                scrollStrategy: targetEl\n                    ? this.cdkOverlay.scrollStrategies.reposition()\n                    : this.cdkOverlay.scrollStrategies.noop(),\n                positionStrategy: strategy,\n                width: POPOVER_WIDTH,\n            });\n\n            this.setPopoverZIndex();\n            this.attachPopoverPortal(step);\n        } else {\n            this.popoverOverlayRef.updatePositionStrategy(strategy);\n            this.popoverOverlayRef.updatePosition();\n            this.updatePopoverInputs(step);\n            if (targetEl) {\n                this.scheduleSync();\n            }\n            this.scheduleFocusTrapRefocus();\n        }\n    }\n\n    private setPopoverZIndex(): void {\n        if (!this.popoverOverlayRef) {\n            return;\n        }\n\n        this.popoverOverlayRef.overlayElement.style.zIndex = POPOVER_Z;\n\n        const host = this.popoverOverlayRef.hostElement;\n\n        if (host !== this.popoverOverlayRef.overlayElement) {\n            host.style.zIndex = POPOVER_Z;\n        }\n    }\n\n    private attachPopoverPortal(step: SpotlightStep): void {\n        this.previouslyFocusedElement = document.activeElement as HTMLElement;\n\n        const portal = new ComponentPortal(SpotlightComponent, null, this.environmentInjector);\n        this.popoverComponentRef = this.popoverOverlayRef!.attach(portal);\n        this.updatePopoverInputs(step);\n        this.scheduleSync();\n\n        if (this.totalSteps() > 1) {\n            this.activateTourMode();\n        }\n        this.popoverSubs.push(\n            this.popoverComponentRef.instance.next.subscribe(() => {\n                const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;\n                this.tourService.next(doNotShowAgain);\n            }),\n            this.popoverComponentRef.instance.previous.subscribe(() => this.tourService.previous()),\n            this.popoverComponentRef.instance.closed.subscribe(() =>\n                this.tourService.stop({\n                    reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',\n                    doNotShowAgain: false,\n                }),\n            ),\n            this.popoverComponentRef.instance.understand.subscribe(() => {\n                const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;\n                this.tourService.stop({ reason: 'completed', doNotShowAgain });\n            }),\n        );\n    }\n\n    private updatePopoverInputs(step: SpotlightStep & { showDoNotShowAgain?: boolean }): void {\n        const ref = this.popoverComponentRef;\n\n        if (!ref) {\n            return;\n        }\n\n        ref.setInput('title', step.title);\n        ref.setInput('message', step.message);\n        ref.setInput('position', step.position ?? 'bottom-center');\n        ref.setInput('currentStep', this.currentIndex() + 1);\n        ref.setInput('totalSteps', this.totalSteps());\n        ref.setInput('content', step.content ?? null);\n        ref.setInput('actions', step.actions ?? []);\n        ref.setInput('showDoNotShowAgain', step.showDoNotShowAgain ?? true);\n        ref.setInput('arrowOffsetPx', null);\n    }\n\n    private scheduleSync(): void {\n        this.zone.runOutsideAngular(() => {\n            requestAnimationFrame(() => this.zone.run(() => this.syncDirectionAndArrow()));\n        });\n    }\n\n    private activateTourMode(): void {\n        document.body.style.overflow = 'hidden';\n        this.zone.runOutsideAngular(() => {\n            requestAnimationFrame(() => {\n                this.zone.run(() => {\n                    const paneEl = this.popoverOverlayRef?.overlayElement;\n                    if (paneEl) {\n                        this.focusTrap = this.focusTrapFactory.create(paneEl);\n                        this.focusTrap.focusInitialElementWhenReady();\n                    }\n                });\n            });\n        });\n    }\n\n    /**\n     * After a step change, moves focus back to the first tabbable element inside the\n     * popover so the user does not lose keyboard position.\n     * No-op when there is no active focus trap (simple spotlight mode).\n     */\n    private scheduleFocusTrapRefocus(): void {\n        if (!this.focusTrap) return;\n        this.zone.runOutsideAngular(() => {\n            requestAnimationFrame(() => {\n                this.zone.run(() => this.focusTrap?.focusFirstTabbableElement());\n            });\n        });\n    }\n\n    private syncDirectionAndArrow(): void {\n        const ref = this.popoverComponentRef;\n        const paneEl = this.popoverOverlayRef?.overlayElement;\n        const rect = this.targetRect();\n\n        if (!ref || !paneEl || !rect) {\n            ref?.setInput('arrowOffsetPx', null);\n            return;\n        }\n\n        const pane = paneEl.getBoundingClientRect();\n        const tol = SPOTLIGHT_PADDING + 4;\n\n        let dir: 'top' | 'bottom' | 'left' | 'right';\n\n        if (pane.top >= rect.bottom - tol) {\n            dir = 'bottom';\n        } else if (pane.bottom <= rect.top + tol) {\n            dir = 'top';\n        } else if (pane.left >= rect.right - tol) {\n            dir = 'right';\n        } else if (pane.right <= rect.left + tol) {\n            dir = 'left';\n        } else {\n            const dy = Math.abs(pane.top + pane.height / 2 - (rect.top + rect.height / 2));\n            const dx = Math.abs(pane.left + pane.width / 2 - (rect.left + rect.width / 2));\n            dir =\n                dy >= dx\n                    ? pane.top + pane.height / 2 < rect.top + rect.height / 2\n                        ? 'top'\n                        : 'bottom'\n                    : pane.left + pane.width / 2 < rect.left + rect.width / 2\n                      ? 'left'\n                      : 'right';\n        }\n\n        ref.setInput('position', `${dir}-center` as SpotlightPosition);\n\n        const tgtCX = rect.left + rect.width / 2;\n        const tgtCY = rect.top + rect.height / 2;\n        const offset =\n            dir === 'top' || dir === 'bottom'\n                ? tgtCX - pane.left - ARROW_HALF_SIZE\n                : tgtCY - pane.top - ARROW_HALF_SIZE;\n        ref.setInput('arrowOffsetPx', Math.max(ARROW_OFFSET_MIN, Math.min(ARROW_OFFSET_MAX, offset)));\n    }\n\n    private destroyPopoverOverlay(): void {\n        this.popoverSubs.forEach((s) => s.unsubscribe());\n        this.popoverSubs = [];\n        this.popoverComponentRef = null;\n\n        if (this.focusTrap) {\n            this.focusTrap.destroy();\n            this.focusTrap = null;\n        }\n\n        document.body.style.overflow = '';\n\n        if (this.previouslyFocusedElement) {\n            this.previouslyFocusedElement.focus();\n            this.previouslyFocusedElement = null;\n        }\n\n        if (this.popoverOverlayRef) {\n            this.popoverOverlayRef.detach();\n            this.popoverOverlayRef.dispose();\n            this.popoverOverlayRef = null;\n        }\n    }\n\n    private updateTargetRect(el: HTMLElement): void {\n        this.targetRect.set(el.getBoundingClientRect());\n    }\n\n    private refreshRect(): void {\n        const step = this.currentStep();\n\n        if (!step || !this.isActive()) {\n            return;\n        }\n        const el = this.tourService.getElement(step.stepId);\n\n        if (el?.nativeElement) {\n            this.updateTargetRect(el.nativeElement);\n        }\n    }\n\n    private observeElement(el: HTMLElement): void {\n        this.resizeObserver = new ResizeObserver(() => {\n            this.zone.run(() => this.updateTargetRect(el));\n        });\n        this.resizeObserver.observe(el);\n    }\n\n    private disconnectResizeObserver(): void {\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n            this.resizeObserver = null;\n        }\n    }\n}\n\n","@if (isActive() && currentStep(); as step) {\n    @if (step.showBackdrop !== false) {\n        <div\n            [ngStyle]=\"topMaskStyle()\"\n            (click)=\"onDismiss()\"\n        ></div>\n\n        @if (targetRect()) {\n            <div\n                [ngStyle]=\"leftMaskStyle()\"\n                (click)=\"onDismiss()\"\n            ></div>\n            <div\n                [ngStyle]=\"rightMaskStyle()\"\n                (click)=\"onDismiss()\"\n            ></div>\n            <div\n                [ngStyle]=\"bottomMaskStyle()\"\n                (click)=\"onDismiss()\"\n            ></div>\n        }\n    }\n\n    @if (step.showBackdrop === false) {\n        @if (step.dismissible === false) {\n            <div [ngStyle]=\"transparentBlockerStyle()\"></div>\n        } @else {\n            <div\n                [ngStyle]=\"transparentBlockerStyle()\"\n                (click)=\"onDismiss()\"\n            ></div>\n        }\n    }\n}\n\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { computed, ElementRef, EnvironmentInjector, inject, Injectable, signal } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SpotlightOverlayComponent } from './spotlight-overlay/spotlight-overlay.component';\nimport { SpotlightConfig, SpotlightStep } from './types/spotlight-step';\nimport { SpotlightStepChangedEvent, SpotlightStopEvent } from './types/spotlight-stop-event';\n\n/** @internal */\ntype SpotlightStepInternal = SpotlightStep & { showDoNotShowAgain?: boolean };\n\n/**\n * Serviço central do Spotlight Tour.\n *\n * Gerencia o estado do tour (passos, índice atual, ativo/inativo), a navegação entre\n * passos e o registro de elementos do DOM associados a cada `stepId`.\n *\n * Use `start()` para iniciar um tour com múltiplos passos ou `spotlight()` para\n * exibir um destaque simples em um único elemento.\n *\n * @example\n * ```typescript\n * // Tour com múltiplos passos\n * this.tourService.start([\n *   { stepId: 'passo-1', title: 'Título', message: 'Mensagem' },\n *   { stepId: 'passo-2', title: 'Título', message: 'Mensagem' },\n * ]);\n *\n * // Destaque simples\n * this.tourService.spotlight('meu-elemento', { title: 'Dica', message: 'Detalhes' });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SpotlightTourService {\n    private readonly overlay = inject(Overlay);\n    private readonly environmentInjector = inject(EnvironmentInjector);\n\n    private overlayRef: OverlayRef | null = null;\n\n    private readonly _steps = signal<SpotlightStepInternal[]>([]);\n    private readonly _currentIndex = signal(0);\n    private readonly _isActive = signal(false);\n    private readonly _registrationVersion = signal(0);\n\n    private readonly _registeredElements = new Map<string, ElementRef>();\n\n    private _pendingDoNotShowAgain = false;\n\n    private readonly _stopped$ = new Subject<SpotlightStopEvent>();\n    private readonly _stepChanged$ = new Subject<SpotlightStepChangedEvent>();\n\n    /** Signal somente-leitura que indica se o tour está ativo no momento. */\n    readonly isActive = this._isActive.asReadonly();\n\n    /** Signal somente-leitura com o índice (0-based) do passo exibido atualmente. */\n    readonly currentIndex = this._currentIndex.asReadonly();\n\n    /** Signal computado com o total de passos do tour em andamento. */\n    readonly totalSteps = computed(() => this._steps().length);\n\n    /** Signal computado com os dados do passo atualmente exibido. */\n    readonly currentStep = computed<SpotlightStepInternal | undefined>(() => this._steps()[this._currentIndex()]);\n\n    /**\n     * Observable emitido quando o tour é encerrado, seja por conclusão, interrupção\n     * ou descarte. Carrega um `SpotlightStopEvent` com o motivo e o estado final.\n     */\n    readonly stopped$: Observable<SpotlightStopEvent> = this._stopped$.asObservable();\n\n    /**\n     * Observable emitido sempre que o passo exibido muda, incluindo o início do tour.\n     * Carrega um `SpotlightStepChangedEvent` com o `stepId` e o índice do novo passo.\n     */\n    readonly stepChanged$: Observable<SpotlightStepChangedEvent> = this._stepChanged$.asObservable();\n\n    /**\n     * Signal somente-leitura incrementado a cada chamada de `registerElement` ou\n     * `unregisterElement`. Permite que outros componentes reajam a mudanças no\n     * registro de elementos sem polling.\n     */\n    readonly registrationVersion = this._registrationVersion.asReadonly();\n\n    /**\n     * Inicia um tour com a lista de passos fornecida.\n     *\n     * O tour começa pelo primeiro passo da lista. Emite `stepChanged$` para o passo inicial.\n     * Se `steps` for um array vazio, o método não faz nada.\n     * Se já houver um tour ativo, ele é encerrado (emitindo `stopped$` com `reason: 'interrupted'`)\n     * antes de o novo tour começar.\n     *\n     * @param steps Lista de passos a percorrer em ordem.\n     */\n    start(steps: SpotlightStep[]): void {\n        if (steps.length === 0) return;\n\n        if (this._isActive()) {\n            this.stop();\n        }\n\n        this._steps.set(steps as SpotlightStepInternal[]);\n        this._currentIndex.set(0);\n        this._isActive.set(true);\n        this.attachOverlay();\n        this._stepChanged$.next({ stepId: steps[0].stepId, stepIndex: 0, totalSteps: steps.length });\n    }\n\n    /**\n     * Exibe um destaque simples (passo único) no elemento identificado por `stepId`.\n     *\n     * Equivalente a chamar `start()` com um array de um único passo.\n     * O checkbox \"Não mostrar novamente\" é exibido por padrão (`showDoNotShowAgain: true`);\n     * passe `showDoNotShowAgain: false` em `config` para suprimi-lo.\n     *\n     * @param stepId ID do elemento registrado via `sSpotlightStep` ou `registerElement`.\n     * @param config Configuração visual e comportamental do destaque.\n     */\n    spotlight(stepId: string, config: SpotlightConfig): void {\n        const step: SpotlightStepInternal = { stepId, ...config };\n        this.start([step]);\n    }\n\n    /**\n     * Avança para o próximo passo do tour.\n     *\n     * Se o passo atual definir `beforeNext`, aguarda sua resolução antes de avançar.\n     * No último passo, encerra o tour com `reason: 'completed'`.\n     *\n     * @param doNotShowAgain Quando `true`, o evento `stopped$` será emitido com\n     *   `doNotShowAgain: true` ao concluir o tour. Relevante apenas no último passo.\n     */\n    next(doNotShowAgain = false): void {\n        const current = this.currentStep();\n        this._pendingDoNotShowAgain = doNotShowAgain;\n\n        if (current?.beforeNext) {\n            const result = current.beforeNext();\n            if (result instanceof Promise) {\n                result.then(() => this.advance()).catch(() => {});\n            } else {\n                this.advance();\n            }\n        } else {\n            this.advance();\n        }\n    }\n\n    /**\n     * Retorna ao passo anterior do tour.\n     *\n     * Se o passo atual definir `beforePrevious`, aguarda sua resolução antes de voltar.\n     * Não faz nada se o tour estiver no primeiro passo.\n     */\n    previous(): void {\n        if (this._currentIndex() <= 0) return;\n\n        const current = this.currentStep();\n\n        if (current?.beforePrevious) {\n            const result = current.beforePrevious();\n            if (result instanceof Promise) {\n                result.then(() => this.retreat()).catch(() => {});\n            } else {\n                this.retreat();\n            }\n        } else {\n            this.retreat();\n        }\n    }\n\n    /**\n     * Encerra o tour imediatamente e emite o evento `stopped$`.\n     *\n     * @param event Dados parciais do evento de parada. Valores não fornecidos são\n     *   preenchidos com os defaults: `reason: 'interrupted'`, `doNotShowAgain: false`\n     *   e o `stepId`/`stepIndex`/`totalSteps` do momento atual.\n     */\n    stop(event?: Partial<SpotlightStopEvent>): void {\n        const steps = this._steps();\n        const index = this._currentIndex();\n        const fullEvent: SpotlightStopEvent = {\n            reason: 'interrupted',\n            doNotShowAgain: false,\n            stepId: steps[index]?.stepId ?? '',\n            stepIndex: index,\n            totalSteps: steps.length,\n            ...event,\n        };\n        this._isActive.set(false);\n        this._steps.set([]);\n        this._currentIndex.set(0);\n        this._pendingDoNotShowAgain = false;\n        this._stopped$.next(fullEvent);\n        this.detachOverlay();\n    }\n\n    /**\n     * Registra um elemento do DOM como alvo do passo identificado por `stepId`.\n     *\n     * Normalmente chamado pela diretiva `sSpotlightStep`. Use diretamente apenas\n     * quando precisar registrar elementos criados programaticamente.\n     *\n     * @param stepId ID único do passo ao qual o elemento pertence.\n     * @param el Referência ao elemento do DOM.\n     */\n    registerElement(stepId: string, el: ElementRef): void {\n        this._registeredElements.set(stepId, el);\n        this._registrationVersion.update((v) => v + 1);\n    }\n\n    /**\n     * Remove o registro do elemento associado a `stepId`.\n     *\n     * Normalmente chamado pela diretiva `sSpotlightStep` no `ngOnDestroy`.\n     *\n     * @param stepId ID do passo cujo elemento deve ser removido.\n     */\n    unregisterElement(stepId: string): void {\n        this._registeredElements.delete(stepId);\n        this._registrationVersion.update((v) => v + 1);\n    }\n\n    /**\n     * Retorna o `ElementRef` registrado para o `stepId` informado,\n     * ou `undefined` se nenhum elemento estiver registrado.\n     *\n     * @param stepId ID do passo a buscar.\n     */\n    getElement(stepId: string): ElementRef | undefined {\n        return this._registeredElements.get(stepId);\n    }\n\n    private advance(): void {\n        const steps = this._steps();\n        const currentIndex = this._currentIndex();\n        if (currentIndex < steps.length - 1) {\n            const newIndex = currentIndex + 1;\n            this._pendingDoNotShowAgain = false;\n            this._currentIndex.set(newIndex);\n            this._stepChanged$.next({ stepId: steps[newIndex].stepId, stepIndex: newIndex, totalSteps: steps.length });\n        } else {\n            this.stop({ reason: 'completed', doNotShowAgain: this._pendingDoNotShowAgain });\n        }\n    }\n\n    private retreat(): void {\n        const steps = this._steps();\n        const newIndex = this._currentIndex() - 1;\n        this._currentIndex.set(newIndex);\n        this._stepChanged$.next({ stepId: steps[newIndex].stepId, stepIndex: newIndex, totalSteps: steps.length });\n    }\n\n    private attachOverlay(): void {\n        if (this.overlayRef) {\n            return;\n        }\n\n        this.overlayRef = this.overlay.create({\n            hasBackdrop: false,\n            scrollStrategy: this.overlay.scrollStrategies.noop(),\n            positionStrategy: this.overlay.position().global(),\n        });\n\n        const portal = new ComponentPortal(SpotlightOverlayComponent, null, this.environmentInjector);\n        this.overlayRef.attach(portal);\n    }\n\n    private detachOverlay(): void {\n        if (this.overlayRef) {\n            this.overlayRef.detach();\n            this.overlayRef.dispose();\n            this.overlayRef = null;\n        }\n    }\n}\n\n","import { Directive, effect, ElementRef, inject, input, OnDestroy } from '@angular/core';\n\nimport { SpotlightTourService } from './spotlight-tour.service';\n\n/**\n * Diretiva que registra um elemento do DOM como alvo de um passo do Spotlight Tour.\n *\n * Aplique a diretiva em qualquer elemento e forneça um ID único que corresponda\n * ao `stepId` configurado no `SpotlightTourService`. O elemento será automaticamente\n * registrado ao ser criado e atualizado caso o ID mude dinamicamente.\n *\n * @example\n * ```html\n * <button [sSpotlightStep]=\"'meu-botao'\">Clique aqui</button>\n * ```\n */\n@Directive({\n    selector: '[sSpotlightStep]',\n    standalone: true,\n})\nexport class SpotlightStepDirective implements OnDestroy {\n    /**\n     * ID único do passo do tour ao qual este elemento está associado.\n     * Deve corresponder ao `stepId` definido em `SpotlightStep`.\n     */\n    sSpotlightStep = input.required<string>();\n\n    private readonly el = inject(ElementRef);\n    private readonly tourService = inject(SpotlightTourService);\n\n    private currentId: string | null = null;\n\n    constructor() {\n        effect(\n            () => {\n                const newId = this.sSpotlightStep();\n                if (this.currentId !== null && this.currentId !== newId) {\n                    this.tourService.unregisterElement(this.currentId);\n                }\n                this.currentId = newId;\n                this.tourService.registerElement(newId, this.el);\n            },\n            { allowSignalWrites: true },\n        );\n    }\n\n    ngOnDestroy(): void {\n        if (this.currentId !== null) {\n            this.tourService.unregisterElement(this.currentId);\n        }\n    }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}