import { Component } from "./component";
import { DTModel, DTVector3 } from "./model";
import { Object3D } from "three";
export type TextPoiOptions = {
    text: string;
    isSprite: boolean;
    position: DTVector3;
    className?: string;
    fixed?: boolean;
    offsets: DTVector3;
    replace?: boolean;
    modelId?: string;
    polyIds?: string[];
    poiId?: string;
} & Omit<Partial<CSSStyleDeclaration>, "position">;
export type ImagePoiOptions = {
    url: string;
    isSprite: boolean;
    position: DTVector3;
    className?: string;
    fixed?: boolean;
    offsets: DTVector3;
    replace?: boolean;
    modelId?: string;
    polyIds?: string[];
    poiId?: string;
} & Omit<Partial<CSSStyleDeclaration>, "position">;
export type HtmlPoiOptions = {
    el: string | HTMLElement;
    isSprite: boolean;
    position: DTVector3;
    offsets: DTVector3;
    poiId?: string;
} & Omit<Partial<CSSStyleDeclaration>, "position">;
export interface PoiInstance<M extends DTModel, O> {
    applyToComponent(component: Component<M> | Component<M>[], interceptor?: (component: Component<M> | DTVector3, options: O) => O): Array<Object3D>;
    applyToType(type: string | string[], interceptor?: (component: Component<M> | DTVector3, options: O) => O): Array<Object3D>;
    applyToPosition(position: DTVector3 | DTVector3[], interceptor?: (component: Component<M> | DTVector3, options: O) => O): Array<Object3D>;
}
export interface UnityPoiInstance<M extends DTModel, O> {
    applyToComponent(component: Component<M> | Component<M>[], interceptor?: (component: Component<M> | DTVector3, options: O) => O): Promise<string[]> | Promise<void>;
    applyToType(type: string | string[], interceptor?: (component: Component<M> | DTVector3, options: O) => O): Promise<string[]> | Promise<void>;
    applyToPosition(position: DTVector3 | DTVector3[], interceptor?: (position: Component<M> | DTVector3, options: O) => O): Promise<string[]> | Promise<void>;
}
export type POI<M extends DTModel> = {
    /**
     * 创建 image
     * @param target
     */
    createText(options?: Partial<TextPoiOptions>): PoiInstance<M, TextPoiOptions>;
    createImage(options?: Partial<ImagePoiOptions>): PoiInstance<M, ImagePoiOptions>;
    createHtml(options?: Partial<HtmlPoiOptions>): Omit<PoiInstance<M, HtmlPoiOptions>, "applyToType">;
    clear(component: Component<M> | Component<M>[]): Promise<void>;
    clearByType(type: string): Promise<void>;
};
