import './PhetioIDUtils.js';
import '../../globals.js';
import IntentionalAny from '../../phet-core/js/types/IntentionalAny.js';
import PickRequired from '../../phet-core/js/types/PickRequired.js';
export type PhetioID = string;
export type IOTypeName = string;
export type PhetioElementData = {
    initialState: PhetioElementState;
};
export type PhetioElement = {
    _metadata: PhetioElementMetadata;
    _data?: PhetioElementData;
};
export type PhetioElements = {
    [name: string]: PhetioElements;
} & PhetioElement;
export type Method = {
    returnType: string;
    parameterTypes: string[];
    documentation: string;
    invocableForReadOnlyElements?: boolean;
};
export type PhetioElementState = Record<string, IntentionalAny>;
export type PhetioState = Record<PhetioID, PhetioElementState>;
export type FullPhetioState = Record<PhetioID, PhetioElementState | 'DELETED'>;
export type Methods = Record<string, Method>;
export type CompositeStateSchemaAPI = Record<string, IOTypeName>;
export type StateSchemaAPI = string | CompositeStateSchemaAPI;
export type PhetioType = {
    methods: Methods;
    supertype?: string;
    typeName: IOTypeName;
    documentation?: string;
    events: string[];
    metadataDefaults?: Partial<PhetioElementMetadata>;
    dataDefaults?: Record<string, unknown>;
    methodOrder?: string[];
    stateSchema?: StateSchemaAPI;
    apiStateKeys?: (keyof CompositeStateSchemaAPI)[];
    parameterTypes?: string[];
};
export type PhetioTypes = Record<IOTypeName, PhetioType>;
export type PhetioOverrides = Record<string, Partial<PhetioElementMetadata>>;
export type PhetioAPIVersion = {
    major: number;
    minor: number;
};
export type AbstractPhetioAPI = {
    version: PhetioAPIVersion;
    phetioFullAPI?: boolean;
    sim: string;
    phetioTypes: PhetioTypes;
};
export type PhetioAPI = AbstractPhetioAPI & {
    phetioElements: PhetioElements;
};
export type FlattenedAPIPhetioElements = Record<PhetioID, PhetioElement>;
export type PhetioElementMetadata = {
    phetioState: boolean;
    phetioReadOnly: boolean;
    phetioEventType: string;
    phetioDocumentation: string;
    phetioHighFrequency: boolean;
    phetioPlayback: boolean;
    phetioFeatured?: boolean;
    phetioDynamicElement: boolean;
    phetioDesigned: boolean;
    phetioTypeName: IOTypeName;
    phetioIsArchetype: boolean;
    phetioArchetypePhetioID?: string | null;
    phetioDynamicElementName?: string | null;
};
declare const TandemConstants: {
    readonly OBJECT_IO_TYPE_NAME: "ObjectIO";
    readonly EVENT_TYPE_MODEL: "MODEL";
    readonly PHET_IO_OBJECT_METADATA_DEFAULTS: PhetioElementMetadata & PickRequired<PhetioElementMetadata, "phetioFeatured">;
    readonly METADATA_KEY_NAME: "_metadata";
    readonly DATA_KEY_NAME: "_data";
    readonly BASE_TANDEM_CHARACTER_CLASS: "a-zA-Z0-9[\\],";
    readonly BASE_DYNAMIC_TANDEM_CHARACTER_CLASS: "a-zA-Z0-9[\\],_";
    readonly BASE_DERIVED_TANDEM_CHARACTER_CLASS: "a-zA-Z0-9[\\],_\\-";
};
export default TandemConstants;
//# sourceMappingURL=TandemConstants.d.ts.map