import { type Y } from '@blockeditor/store';
import type { SurfaceBlockModel } from '../surface-model.js';
import { Bound } from '../utils/bound.js';
import { type SerializedXYWH } from '../utils/xywh.js';
export type BaseProps = {
    index: string;
};
export declare abstract class ElementModel<Props extends BaseProps = BaseProps> {
    static propsToY(props: Record<string, unknown>): Record<string, unknown>;
    /**
     * When the ymap is not connected to the doc, the value cannot be accessed.
     * But sometimes we need to access the value when creating the element model, those temporary values are stored here.
     */
    protected _preserved: Map<string, unknown>;
    protected _stashed: Map<keyof Props, unknown>;
    protected _local: Map<string | symbol, unknown>;
    protected _onChange: (props: Record<string, {
        oldValue: unknown;
    }>) => void;
    yMap: Y.Map<unknown>;
    surfaceModel: SurfaceBlockModel;
    abstract rotate: number;
    abstract xywh: SerializedXYWH;
    abstract get type(): string;
    index: string;
    display: boolean;
    opacity: number;
    constructor(options: {
        yMap: Y.Map<unknown>;
        model: SurfaceBlockModel;
        stashedStore: Map<unknown, unknown>;
        onChange: (props: Record<string, {
            oldValue: unknown;
        }>) => void;
    });
    get deserializedXYWH(): import("../utils/xywh.js").XYWH;
    get x(): number;
    get y(): number;
    get w(): number;
    get h(): number;
    get group(): import("./group.js").GroupElementModel | null;
    get id(): string;
    get elementBound(): Bound;
    stash(prop: keyof Props): void;
    pop(prop: keyof Props): void;
}
//# sourceMappingURL=base.d.ts.map