import { ElementRef } from '@angular/core';
import { Observable } from 'rxjs';
import { SpotlightConfig, SpotlightStep } from './types/spotlight-step';
import { SpotlightStepChangedEvent, SpotlightStopEvent } from './types/spotlight-stop-event';
import * as i0 from "@angular/core";
/** @internal */
type SpotlightStepInternal = SpotlightStep & {
    showDoNotShowAgain?: boolean;
};
/**
 * Serviço central do Spotlight Tour.
 *
 * Gerencia o estado do tour (passos, índice atual, ativo/inativo), a navegação entre
 * passos e o registro de elementos do DOM associados a cada `stepId`.
 *
 * Use `start()` para iniciar um tour com múltiplos passos ou `spotlight()` para
 * exibir um destaque simples em um único elemento.
 *
 * @example
 * ```typescript
 * // Tour com múltiplos passos
 * this.tourService.start([
 *   { stepId: 'passo-1', title: 'Título', message: 'Mensagem' },
 *   { stepId: 'passo-2', title: 'Título', message: 'Mensagem' },
 * ]);
 *
 * // Destaque simples
 * this.tourService.spotlight('meu-elemento', { title: 'Dica', message: 'Detalhes' });
 * ```
 */
export declare class SpotlightTourService {
    private readonly overlay;
    private readonly environmentInjector;
    private overlayRef;
    private readonly _steps;
    private readonly _currentIndex;
    private readonly _isActive;
    private readonly _registrationVersion;
    private readonly _registeredElements;
    private _pendingDoNotShowAgain;
    private readonly _stopped$;
    private readonly _stepChanged$;
    /** Signal somente-leitura que indica se o tour está ativo no momento. */
    readonly isActive: import("@angular/core").Signal<boolean>;
    /** Signal somente-leitura com o índice (0-based) do passo exibido atualmente. */
    readonly currentIndex: import("@angular/core").Signal<number>;
    /** Signal computado com o total de passos do tour em andamento. */
    readonly totalSteps: import("@angular/core").Signal<number>;
    /** Signal computado com os dados do passo atualmente exibido. */
    readonly currentStep: import("@angular/core").Signal<SpotlightStepInternal | undefined>;
    /**
     * Observable emitido quando o tour é encerrado, seja por conclusão, interrupção
     * ou descarte. Carrega um `SpotlightStopEvent` com o motivo e o estado final.
     */
    readonly stopped$: Observable<SpotlightStopEvent>;
    /**
     * Observable emitido sempre que o passo exibido muda, incluindo o início do tour.
     * Carrega um `SpotlightStepChangedEvent` com o `stepId` e o índice do novo passo.
     */
    readonly stepChanged$: Observable<SpotlightStepChangedEvent>;
    /**
     * Signal somente-leitura incrementado a cada chamada de `registerElement` ou
     * `unregisterElement`. Permite que outros componentes reajam a mudanças no
     * registro de elementos sem polling.
     */
    readonly registrationVersion: import("@angular/core").Signal<number>;
    /**
     * Inicia um tour com a lista de passos fornecida.
     *
     * O tour começa pelo primeiro passo da lista. Emite `stepChanged$` para o passo inicial.
     * Se `steps` for um array vazio, o método não faz nada.
     * Se já houver um tour ativo, ele é encerrado (emitindo `stopped$` com `reason: 'interrupted'`)
     * antes de o novo tour começar.
     *
     * @param steps Lista de passos a percorrer em ordem.
     */
    start(steps: SpotlightStep[]): void;
    /**
     * Exibe um destaque simples (passo único) no elemento identificado por `stepId`.
     *
     * Equivalente a chamar `start()` com um array de um único passo.
     * O checkbox "Não mostrar novamente" é exibido por padrão (`showDoNotShowAgain: true`);
     * passe `showDoNotShowAgain: false` em `config` para suprimi-lo.
     *
     * @param stepId ID do elemento registrado via `sSpotlightStep` ou `registerElement`.
     * @param config Configuração visual e comportamental do destaque.
     */
    spotlight(stepId: string, config: SpotlightConfig): void;
    /**
     * Avança para o próximo passo do tour.
     *
     * Se o passo atual definir `beforeNext`, aguarda sua resolução antes de avançar.
     * No último passo, encerra o tour com `reason: 'completed'`.
     *
     * @param doNotShowAgain Quando `true`, o evento `stopped$` será emitido com
     *   `doNotShowAgain: true` ao concluir o tour. Relevante apenas no último passo.
     */
    next(doNotShowAgain?: boolean): void;
    /**
     * Retorna ao passo anterior do tour.
     *
     * Se o passo atual definir `beforePrevious`, aguarda sua resolução antes de voltar.
     * Não faz nada se o tour estiver no primeiro passo.
     */
    previous(): void;
    /**
     * Encerra o tour imediatamente e emite o evento `stopped$`.
     *
     * @param event Dados parciais do evento de parada. Valores não fornecidos são
     *   preenchidos com os defaults: `reason: 'interrupted'`, `doNotShowAgain: false`
     *   e o `stepId`/`stepIndex`/`totalSteps` do momento atual.
     */
    stop(event?: Partial<SpotlightStopEvent>): void;
    /**
     * Registra um elemento do DOM como alvo do passo identificado por `stepId`.
     *
     * Normalmente chamado pela diretiva `sSpotlightStep`. Use diretamente apenas
     * quando precisar registrar elementos criados programaticamente.
     *
     * @param stepId ID único do passo ao qual o elemento pertence.
     * @param el Referência ao elemento do DOM.
     */
    registerElement(stepId: string, el: ElementRef): void;
    /**
     * Remove o registro do elemento associado a `stepId`.
     *
     * Normalmente chamado pela diretiva `sSpotlightStep` no `ngOnDestroy`.
     *
     * @param stepId ID do passo cujo elemento deve ser removido.
     */
    unregisterElement(stepId: string): void;
    /**
     * Retorna o `ElementRef` registrado para o `stepId` informado,
     * ou `undefined` se nenhum elemento estiver registrado.
     *
     * @param stepId ID do passo a buscar.
     */
    getElement(stepId: string): ElementRef | undefined;
    private advance;
    private retreat;
    private attachOverlay;
    private detachOverlay;
    static ɵfac: i0.ɵɵFactoryDeclaration<SpotlightTourService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SpotlightTourService>;
}
export {};
