import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * API Context for description plugins.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import CallbackTimer, { CallbackTimerOptions } from '../../axon/js/CallbackTimer.js';
import { UnknownMultilink } from '../../axon/js/Multilink.js';
import TEmitter, { TEmitterListener, TReadOnlyEmitter } from '../../axon/js/TEmitter.js';
import TProperty from '../../axon/js/TProperty.js';
import TReadOnlyProperty, { PropertyLazyLinkListener, PropertyLinkListener } from '../../axon/js/TReadOnlyProperty.js';
import { Node, NodeOptions } from '../../scenery/js/imports.js';
import PhetioObject from '../../tandem/js/PhetioObject.js';
import Utterance, { UtteranceOptions } from '../../utterance-queue/js/Utterance.js';
import { Locale } from './i18n/localeProperty.js';
export type DescriptionStrings = {
    locale: Locale;
};
export type DescriptionLogic = {
    launch(context: DescriptionContext, strings: DescriptionStrings): void;
    added(tandemID: string, obj: PhetioObject): void;
    removed(tandemID: string, obj: PhetioObject): void;
    dispose(): void;
};
export default class DescriptionContext {
    private readonly links;
    private readonly listens;
    private readonly assignments;
    private readonly propertyAssignments;
    private readonly multilinks;
    private readonly disposables;
    get(tandemID: string): PhetioObject | null;
    link(property: TReadOnlyProperty<unknown>, listener: PropertyLinkListener<unknown>): void;
    lazyLink(property: TReadOnlyProperty<unknown>, listener: PropertyLazyLinkListener<unknown>): void;
    unlink(property: TReadOnlyProperty<unknown>, listener: PropertyLazyLinkListener<unknown>): void;
    createDerivedProperty(dependencies: TReadOnlyProperty<unknown>[], derivation: (...args: unknown[]) => unknown): TReadOnlyProperty<unknown>;
    multilink(dependencies: Readonly<TReadOnlyProperty<unknown>[]>, callback: () => void): UnknownMultilink;
    addListener(emitter: TReadOnlyEmitter<unknown[]>, listener: TEmitterListener<unknown[]>): void;
    removeListener(emitter: TEmitter<unknown[]>, listener: TEmitterListener<unknown[]>): void;
    nodeSet(node: Node, property: keyof Node, value: unknown): void;
    propertySet(property: TProperty<unknown>, value: unknown): void;
    createCallbackTimer(options?: CallbackTimerOptions): CallbackTimer;
    createUtterance(options?: UtteranceOptions): Utterance;
    /**
     * Creates a Node through the context.
     *
     * TODO: Consider making the tagName required for this context? See https://github.com/phetsims/joist/issues/941
     */
    createNode(options?: NodeOptions): Node;
    dispose(): void;
    private static readonly stringsMap;
    private static readonly logicProperty;
    private static readonly isStartupCompleteProperty;
    private static readonly activeContextProperty;
    private static activeLogic;
    static startupComplete(): void;
    private static reload;
    static registerStrings(strings: DescriptionStrings): DescriptionStrings;
    static registerLogic(logic: DescriptionLogic): DescriptionLogic;
    static externalLoad(str: string): Promise<Error | null>;
}
export declare class ExternalLoadError extends Error {
    readonly error: Error;
    readonly line: number;
    readonly column: number;
    constructor(error: Error, dataURI: string);
}
//# sourceMappingURL=DescriptionContext.d.ts.map