import * as Y from 'yjs';
import { EditorConfig } from '../../edit/EditorConfig';
import { ShadowEmitter } from '../../utils/ShadowEmitter';
import { LiveCursor } from '../../LiveCursor';
export declare abstract class ElementModel<ITEM extends paper.Item = paper.Item> {
    static KEYS: {
        index: string;
        uuid: string;
        strokeWidth: string;
        strokeColor: string;
        fillColor: string;
        dashArray: string;
        pointsMatrix: string;
        points: string;
        ownerId: string;
        ctrlId: string;
        shadow: string;
    };
    shadowEmitter: ShadowEmitter | null;
    readonly root: Y.Map<any>;
    readonly scope: paper.PaperScope;
    abstract item: ITEM | null;
    protected abstract clearLocalPointsWhenYPointsChange: boolean;
    protected abstract shouldUseLocalPoints: boolean;
    protected abstract localPointsPick: number;
    private liveCursor;
    private appendPointsTimer;
    private setPointsTimer;
    private pointsUpdateTimer;
    private isPerformanceMode;
    protected localPoints: number[];
    protected abstract subDispose(): void;
    protected abstract createPaperItem(): void;
    protected abstract onVectorUpdate(): void;
    protected abstract vectorKeys(): string[];
    protected abstract styleKeys(): {
        include: string[];
        exclude: string[];
    };
    protected abstract liveCursorPoint(): paper.Point | null;
    protected abstract onStyleKeyUpdate(key: string): void;
    abstract editorConfig(): EditorConfig;
    get index(): number;
    get uuid(): string;
    get type(): string | undefined;
    get strokeWidth(): number;
    set strokeWidth(v: number);
    get strokeColor(): string;
    set strokeColor(value: string);
    get fillColor(): string | null;
    set fillColor(value: string | null);
    get dashArray(): number[];
    set dashArray(value: number[]);
    get pointsMatrix(): number[];
    get points(): number[];
    set ownerId(value: string);
    get ownerId(): string;
    get ctrlId(): string;
    set ctrlId(value: string);
    get shadow(): string;
    set shadow(value: string);
    get isPerformanceEnvironment(): boolean;
    constructor(root: Y.Map<any>, scope: paper.PaperScope, liveCursor: LiveCursor, isPerformanceMode: () => boolean);
    bindObserver(): void;
    protected subBindObserver(): void;
    private handlePropChange;
    private handlePointsChangeDirect;
    private handlePointsChangePerformance;
    private onPointsArrayChange;
    createPaperElement(): void;
    appendPoints(points: number[]): void;
    private appendPointsDirect;
    private appendPointsPerformance;
    setPoints(points: number[]): void;
    private setPointsDirect;
    private setPointsPerformance;
    appendPointsMatrix(matrix: paper.Matrix): void;
    rotateByOffset(angle: number, centerX: number, centerY: number): number;
    getStyleKeys(): string[];
    dispose(): void;
    disposeObserver(): void;
}
//# sourceMappingURL=ElementModel.d.ts.map