import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * A trait that extends Voicing, adding support for "Reading Blocks" of the voicing feature. "Reading Blocks" are
 * UI components in the application that have unique functionality with respect to Voicing.
 *
 *  - Reading Blocks are generally around graphical objects that are not otherwise interactive (like Text).
 *  - They have a unique focus highlight to indicate they can be clicked on to hear voiced content.
 *  - When activated with press or click readingBlockNameResponse is spoken.
 *  - ReadingBlock content is always spoken if the voicingManager is enabled, ignoring Properties of responseCollector.
 *  - While speaking, a yellow highlight will appear over the Node composed with ReadingBlock.
 *  - While voicing is enabled, reading blocks will be added to the focus order.
 *
 * This trait is to be composed with Nodes and assumes that the Node is composed with ParallelDOM.  It uses Node to
 * support mouse/touch input and ParallelDOM to support being added to the focus order and alternative input.
 *
 * @author Jesse Greenberg (PhET Interactive Simulations)
 */
import TEmitter from '../../../../axon/js/TEmitter.js';
import { Shape } from '../../../../kite/js/imports.js';
import Constructor from '../../../../phet-core/js/types/Constructor.js';
import IntentionalAny from '../../../../phet-core/js/types/IntentionalAny.js';
import StrictOmit from '../../../../phet-core/js/types/StrictOmit.js';
import { ResolvedResponse, VoicingResponse } from '../../../../utterance-queue/js/ResponsePacket.js';
import ResponsePatternCollection from '../../../../utterance-queue/js/ResponsePatternCollection.js';
import { Highlight, Node, VoicingOptions } from '../../imports.js';
import type { TVoicing } from './Voicing.js';
type SelfOptions = {
    readingBlockTagName?: string | null;
    readingBlockDisabledTagName?: string | null;
    readingBlockNameResponse?: VoicingResponse;
    readingBlockHintResponse?: VoicingResponse;
    readingBlockResponsePatternCollection?: ResponsePatternCollection;
    readingBlockActiveHighlight?: null | Shape | Node;
};
type UnsupportedVoicingOptions = 'voicingNameResponse' | 'voicingObjectResponse' | 'voicingContextResponse' | 'voicingHintResponse' | 'voicingUtterance' | 'voicingResponsePatternCollection';
export type ReadingBlockOptions = SelfOptions & StrictOmit<VoicingOptions, UnsupportedVoicingOptions>;
export type TReadingBlock<SuperType extends Node = Node> = {
    readingBlockActiveHighlightChangedEmitter: TEmitter;
    get _isReadingBlock(): true;
    setReadingBlockTagName(tagName: string | null): void;
    readingBlockTagName: string | null;
    getReadingBlockTagName(): string | null;
    setReadingBlockDisabledTagName(tagName: string | null): void;
    readingBlockDisabledTagName: string | null;
    getReadingBlockDisabledTagName(): string | null;
    setReadingBlockNameResponse(content: VoicingResponse): void;
    set readingBlockNameResponse(content: VoicingResponse);
    get readingBlockNameResponse(): ResolvedResponse;
    getReadingBlockNameResponse(): ResolvedResponse;
    setReadingBlockHintResponse(content: VoicingResponse): void;
    set readingBlockHintResponse(content: VoicingResponse);
    get readingBlockHintResponse(): ResolvedResponse;
    getReadingBlockHintResponse(): ResolvedResponse;
    setReadingBlockResponsePatternCollection(patterns: ResponsePatternCollection): void;
    readingBlockResponsePatternCollection: ResponsePatternCollection;
    getReadingBlockResponsePatternCollection(): ResponsePatternCollection;
    setReadingBlockActiveHighlight(readingBlockActiveHighlight: Highlight): void;
    readingBlockActiveHighlight: Highlight;
    getReadingBlockActiveHighlight(): Highlight;
    isReadingBlockActivated(): boolean;
    get readingBlockActivated(): boolean;
} & TVoicing<SuperType>;
declare const ReadingBlock: <SuperType extends Constructor<Node>>(k: SuperType) => SuperType & Constructor<TReadingBlock<InstanceType<SuperType>>>;
export type ReadingBlockNode = Node & TReadingBlock;
export declare function isReadingBlock(something: IntentionalAny): something is ReadingBlockNode;
export default ReadingBlock;
//# sourceMappingURL=ReadingBlock.d.ts.map