import * as Core from "@intelligentgraphics/ig.gfx.core";
import { MathTypes } from "@intelligentgraphics/ig.gfx.core";
export declare class GhostInsertMode {
    private componentDimensions;
    private componentConfiguration;
    private blockedPositions;
    addBlockedPosition(trafo: MathTypes.Transformation): void;
    private examinedRoots;
    private cachedMatches;
    /**
     * Creates a simple copy mode, for use in demos and tests.
     * No commercial information is updated!
     * @param templateGfxId
     * @returns {GhostInsertMode}
     */
    static makeSimpleCopyMode(templateGfxId: Core.ComponentId): GhostInsertMode;
    /** The instance of the GhostInsertMode */
    static instance: GhostInsertMode;
    /** The action to trigger after the mode has stoppend */
    private postDeletion;
    /** The color that will be used in the ghost mode. Default: a light blue shade */
    static ghostColor: Core.ColorRGB;
    /** The additional space to make a ghost larger than the actual article */
    static ghostPadding: number;
    /** The component id of which to create ghosts */
    private componentId;
    /** The ghosts object of the component */
    private ghosts;
    /** The snap calculator for finding the ghost positions. */
    private snapCalculator;
    /**
     * A function for creating a copy of the component.
     * This is a callback, because the creation of the copy may be non trivial (add to basket etc.e
     * This function should take care of creating a copy of the component and place it a the desired position.
     * This is responsible to call the refresh method after finishing (as copying is most likely async)
     */
    addCopy: (transformation: MathTypes.Transformation, actions?: Core.IGXM.IActionRule[], snapTo?: Core.ComponentId) => void;
    /** Callback for cleaning up after the ghost mode ended. */
    deleteOriginal: () => void;
    /**
     * Check if for the given id it is necessary to start a ghost mode.
     * This is the case if there is a viable snap match, e.g. an match to a point with Representation = "Ghost"
     * @param componentId
     * @returns {boolean}
     */
    static isGhostModeNecessary(componentId: Core.ComponentId, componentConfiguration?: object): boolean;
    /**
     * The constructor.
     * @param id
     * @param addCopy
     * @param postDeletion
     */
    constructor(id: Core.ComponentId, addCopy: (transformation: MathTypes.Transformation, actions?: Core.IGXM.IActionRule[], snapTo?: string) => void, postDeletion?: () => void, articleConfiguration?: any);
    /**
     * Refresh the displayed ghosts to reflect the current situation
     */
    refreshGhosts(): Promise<void>;
    private viableMatches;
    /**
     * Place a ghost at the given place
     * @param ghostPlacement
     */
    private placeGhost;
    /**
     * Start the ghost mode.
     */
    start(): void;
    /**
     * Returns all GhostIds
     */
    readonly GhostIds: string[];
    /**
     * Stop the mode, cleaning up all ghosts and deleting the invisible component.
     */
    stop(): void;
    static stopInstance(): void;
    static getEvaluatedBBox(actionHolder: string, actionRules: Core.IGXM.IActionRule[], componentConfiguration?: object, relativeSnapPosition?: Core.vec3): Partial<Record<"Width" | "Depth" | "Height", number>>;
}
export declare class CreateCopyInteractor extends Core.Interactor {
    private actionHolders;
    private copyLastPos;
    private copyLastRotation;
    /**
     * The constructor.
     * @param parameters
     */
    constructor(parameters: any);
    SingleTouchStart(touch: Core.Touch): void;
}
