import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * The ResponsePacket collects the categories of a single "response" into the following sections:
 * "Name Response" - A response that labels (names) some element to describe.
 * "Object Response" - A response directly describing the state of the named element.
 * "Context Response" - A response that describes surrounding context related to the named element or changes to it.
 * "Hint Response" - A response that gives a hint about what en element is for or how to interact with it.
 *
 * A response is most often tied to an element, or an object that is being described/voiced.
 *
 * Individual categories of responses can be enabled or disabled. The ResponsePacket keeps track of all these
 * responses. When it is time to alert the responses of this ResponsePacket, the ResponseCollector will assemble
 * a final string depending on which categories of responses are enabled.
 *
 * @author Jesse Greenberg
 * @author Michael Kauzmann (PhET Interactive Simulations)
 */
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import { OptionizeDefaults } from '../../phet-core/js/optionize.js';
import ResponsePatternCollection from './ResponsePatternCollection.js';
export type ResolvedResponse = string | number | null | TReadOnlyProperty<string>;
type ResponseCreator = TReadOnlyProperty<string> | (() => ResolvedResponse);
export type VoicingResponse = ResponseCreator | ResolvedResponse;
export type SpeakableResolvedResponse = ResolvedResponse | TReadOnlyProperty<string>;
export type ResponsePacketOptions = {
    nameResponse?: VoicingResponse;
    objectResponse?: VoicingResponse;
    contextResponse?: VoicingResponse;
    hintResponse?: VoicingResponse;
    ignoreProperties?: boolean;
    responsePatternCollection?: ResponsePatternCollection;
};
export type SpeakableResolvedOptions = {
    [PropertyName in keyof ResponsePacketOptions]: ResponsePacketOptions[PropertyName] extends (VoicingResponse | undefined) ? SpeakableResolvedResponse : ResponsePacketOptions[PropertyName];
};
export type SpeakableNullableResolvedOptions = {
    [PropertyName in keyof SpeakableResolvedOptions]: SpeakableResolvedOptions[PropertyName] extends SpeakableResolvedResponse ? SpeakableResolvedResponse | null : SpeakableResolvedOptions[PropertyName];
};
declare class ResponsePacket {
    private _nameResponse;
    private _objectResponse;
    private _contextResponse;
    private _hintResponse;
    ignoreProperties: boolean;
    responsePatternCollection: ResponsePatternCollection;
    static readonly DEFAULT_OPTIONS: OptionizeDefaults<SpeakableNullableResolvedOptions>;
    constructor(providedOptions?: ResponsePacketOptions);
    getNameResponse(): ResolvedResponse;
    get nameResponse(): ResolvedResponse;
    set nameResponse(nameResponse: VoicingResponse);
    setNameResponse(nameResponse: VoicingResponse): void;
    getObjectResponse(): ResolvedResponse;
    get objectResponse(): ResolvedResponse;
    set objectResponse(objectResponse: VoicingResponse);
    setObjectResponse(objectResponse: VoicingResponse): void;
    getContextResponse(): ResolvedResponse;
    get contextResponse(): ResolvedResponse;
    set contextResponse(contextResponse: VoicingResponse);
    setContextResponse(contextResponse: VoicingResponse): void;
    getHintResponse(): ResolvedResponse;
    get hintResponse(): ResolvedResponse;
    set hintResponse(hintResponse: VoicingResponse);
    setHintResponse(hintResponse: VoicingResponse): void;
    static getResponseText(response: VoicingResponse): ResolvedResponse;
    copy(): ResponsePacket;
    serialize(): Required<SpeakableNullableResolvedOptions>;
}
export default ResponsePacket;
//# sourceMappingURL=ResponsePacket.d.ts.map