import '../../tandem/js/PhetioIDUtils.js';
import '../../globals.js';
import TEmitter from '../../axon/js/TEmitter.js';
import { EmptySelfOptions } from '../../phet-core/js/optionize.js';
import PhetioObject, { PhetioObjectOptions } from '../../tandem/js/PhetioObject.js';
import IOType from '../../tandem/js/types/IOType.js';
import { ResolvedResponse } from './ResponsePacket.js';
import Utterance from './Utterance.js';
type SelfOptions = {
    respectResponseCollectorProperties?: boolean;
};
export type AnnouncerAnnounceOptions = EmptySelfOptions;
export type AnnouncerOptions = SelfOptions & PhetioObjectOptions;
declare abstract class Announcer extends PhetioObject {
    readonly respectResponseCollectorProperties: boolean;
    readyToAnnounce: boolean;
    hasSpoken: boolean;
    readonly announcementCompleteEmitter: TEmitter<[Utterance, ResolvedResponse]>;
    constructor(providedOptions?: AnnouncerOptions);
    /**
     * Announce an alert, setting textContent to an aria-live element.
     *
     * @param announceText - The string that was formulated from the utterance
     * @param utterance - Utterance with content to announce
     * @param [providedOptions] - specify support for options particular to this announcer's features.
     */
    abstract announce(announceText: ResolvedResponse, utterance: Utterance, providedOptions?: AnnouncerAnnounceOptions): void;
    /**
     * Cancel announcement if this Announcer is currently announcing the Utterance. Does nothing
     * to queued Utterances. The announcer needs to implement cancellation of speech.
     */
    abstract cancelUtterance(utterance: Utterance): void;
    /**
     ’   * Cancel announcement of any Utterance that is being spoken. The announcer needs to implement cancellation of speech.
     */
    abstract cancel(): void;
    /**
     * Determine if one utterance should cancel another. Default behavior for this superclass is to cancel when
     * the new Utterance is of higher priority. But subclasses may re-implement this function if it has special logic
     * or announcerOptions that override this behavior.
     */
    shouldUtteranceCancelOther(utterance: Utterance, utteranceToCancel: Utterance): boolean;
    /**
     * Intended to be overridden by subtypes if necessary as a way to order the queue if there is announcer
     * specific logic.
     */
    onUtterancePriorityChange(utterance: Utterance): void;
    static AnnouncerIO: IOType<any, any, any>;
}
export default Announcer;
//# sourceMappingURL=Announcer.d.ts.map