import { DesignWidget, LayoutOptions, PageRect, Point, SelectArea, WidgetOption } from "@/types";
import { Widget } from "./widget";
import { VNode, InjectionKey, Ref } from "vue";
import { DragService } from "./dragService";
export interface Model {
    pageRect: PageRect;
    newWidget: Widget | null;
    widgets: Widget[];
    selectedArea: SelectArea | null;
}
export declare class FreeLayoutService {
    container: Ref<HTMLElement | null>;
    $emit: (event: "createWidget" | "attached" | "drag-start" | "moving" | "moved" | "delete" | "widgetClick", ...args: any[]) => void;
    renderWidget?: ((widget: Widget) => VNode) | undefined;
    static token: InjectionKey<FreeLayoutService>;
    static inject: () => FreeLayoutService | undefined;
    dragService?: DragService;
    options: Required<LayoutOptions>;
    model: Model;
    constructor(options: LayoutOptions, container: Ref<HTMLElement | null>, $emit: (event: "createWidget" | "attached" | "drag-start" | "moving" | "moved" | "delete" | "widgetClick", ...args: any[]) => void, renderWidget?: ((widget: Widget) => VNode) | undefined, dragService?: DragService);
    setDragService(dragService?: DragService): void;
    getRect(): PageRect;
    setPosition(x?: number, y?: number): void;
    setSize(width?: number, height?: number): void;
    createNewWidget(option: WidgetOption, startEvent: MouseEvent): void;
    deleteNewWidget(): void;
    addWidget(options: DesignWidget): Widget;
    getWidgets(): Widget[];
    getWidget(id: string): Widget | undefined;
    deleteWidget(id: string): void;
    clearWidget(): void;
    createSelectedArea(): void;
    setSelectedWidgets(selectedArea: SelectArea): void;
    getSelectedWidgets(): Widget[];
    clearSelectedWidgets(): void;
    mousePToPageP(mouseX: number, mouseY: number): Point;
}
