import IFile from "../storage/IFile";
import { IEventHandler } from "ste-events";
import IModelGeometry, { IGeometry } from "./IModelGeometry";
export default class ModelGeometryDefinition {
    private _file?;
    private _isLoaded;
    private _loadedWithComments;
    private _data?;
    definitions: IGeometry[];
    private _identifiers;
    private _onLoaded;
    get data(): IModelGeometry;
    get formatVersion(): string;
    get isLoaded(): boolean;
    get defaultGeometry(): IGeometry;
    get file(): IFile | undefined;
    set file(newFile: IFile | undefined);
    get onLoaded(): import("ste-events").IEvent<ModelGeometryDefinition, ModelGeometryDefinition>;
    get identifiers(): string[];
    getById(id: string): IGeometry | undefined;
    getVisibleBoundsWidth(defIndex: number): number | undefined;
    getVisibleBoundsHeight(defIndex: number): number | undefined;
    getVisibleBoundsOffset(defIndex: number): number[] | undefined;
    getTextureWidth(defIndex: number): number | undefined;
    ensureDefault(id: string): void;
    getTextureHeight(defIndex: number): number | undefined;
    static ensureOnFile(file: IFile, loadHandler?: IEventHandler<ModelGeometryDefinition, ModelGeometryDefinition>): Promise<ModelGeometryDefinition>;
    getFormatVersionIsCurrent(): Promise<boolean>;
    getFormatVersion(): number[];
    persist(): boolean;
    ensureDefinition(name: string): void;
    save(): Promise<void>;
    populateDefsAndIds(): void;
    /**
     * Load geometry data from a raw JavaScript object (parsed JSON).
     * Useful for loading geometry data without a file reference.
     * @param data The geometry JSON data object
     * @param geometryId Optional specific geometry identifier to select from multi-geometry files
     */
    loadFromData(data: object, geometryId?: string): void;
    /**
     * 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>;
}
