import IFile from "../storage/IFile";
import IManagedComponentSetItem from "./IManagedComponentSetItem";
import IComponent from "./IComponent";
import { IEventHandler } from "ste-events";
import IItemTypeBehaviorPack from "./IItemTypeBehaviorPack";
import { ManagedComponent } from "./ManagedComponent";
import IManagedComponent from "./IManagedComponent";
import IDefinition from "./IDefinition";
import Project from "../app/Project";
import ProjectItem from "../app/ProjectItem";
import RelationsIndex from "../app/RelationsIndex";
export default class ItemTypeDefinition implements IManagedComponentSetItem, IDefinition {
    private _wrapper;
    private _file?;
    private _id?;
    private _isLoaded;
    private _loadedWithComments;
    private _managed;
    private _data?;
    private _onLoaded;
    private _onComponentAdded;
    private _onComponentRemoved;
    private _onComponentChanged;
    get data(): IItemTypeBehaviorPack;
    get onComponentAdded(): import("ste-events").IEvent<ItemTypeDefinition, IManagedComponent>;
    get onComponentRemoved(): import("ste-events").IEvent<ItemTypeDefinition, string>;
    get onComponentChanged(): import("ste-events").IEvent<ItemTypeDefinition, IManagedComponent>;
    get isLoaded(): boolean;
    get behaviorPackFile(): IFile | undefined;
    get onLoaded(): import("ste-events").IEvent<ItemTypeDefinition, ItemTypeDefinition>;
    set behaviorPackFile(newFile: IFile | undefined);
    _handleFileUpdated(file: IFile, fileB: IFile): void;
    get id(): string;
    set id(newId: string);
    get formatVersion(): string;
    get shortId(): string;
    getFormatVersionIsCurrent(): Promise<boolean>;
    getFormatVersion(): number[] | undefined;
    setFormatVersion(version: string): void;
    constructor();
    ensureComponent(id: string, defaultData?: IComponent | string | string[] | boolean | number[] | number | undefined): IManagedComponent | ManagedComponent;
    getComponent(id: string): IManagedComponent;
    notifyComponentUpdated(id: string): void;
    getAllComponents(): IManagedComponent[];
    getCustomComponentIds(): string[];
    getComponents(): IManagedComponent[];
    addChildItems(project: Project, item: ProjectItem, index?: RelationsIndex): Promise<void>;
    setBehaviorPackFormatVersion(versionStr: string): void;
    addComponent(id: string, componentOrData: ManagedComponent | IComponent | string | string[] | boolean | number[] | number | undefined): ManagedComponent;
    removeComponent(id: string): void;
    _ensureBehaviorPackDataInitialized(): void;
    addCustomComponent(itemTypeItem: ProjectItem, componentName: string): Promise<void>;
    static ensureOnFile(file: IFile, loadHandler?: IEventHandler<ItemTypeDefinition, ItemTypeDefinition>, preserveComments?: boolean): Promise<ItemTypeDefinition>;
    static isVisualComponent(value: string): boolean;
    persist(): boolean;
    /**
     * Loads the definition from the file.
     * @param preserveComments If true, uses comment-preserving JSON parsing for edit/save cycles.
     *                         If false (default), uses efficient standard JSON parsing.
     *                         Can be called again with true to "upgrade" a read-only load to read/write.
     */
    load(preserveComments?: boolean): Promise<void>;
}
