/**
 * Vector class
 */
export default class Vector {
    /**
     * @typedef {Object} AbstractVector
     * @prop {PositionDefinition} [start] - Start coordinates
     * @prop {PositionDefinition} [end] - End coordinates
     */
    /**
     * @typedef {Array<PositionDefinition>|AbstractVector} VectorDefinition
     */
    /**
     * Create a Vector from a generic definition
     * @param {VectorDefinition} [vectorDefinition] - Vector definition
     * @return {Vector}
     */
    static from(vectorDefinition?: PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }): Vector;
    /**
     * Vector constructor
     * @param {PositionDefinition} start - Starting vector's position
     * @param {PositionDefinition} end - Ending vector's position
     */
    constructor(start: PositionDefinition, end: PositionDefinition);
    start: Position;
    end: Position;
    /**
     * Get this vector horizontal component
     * @return {Number}
     */
    get width(): number;
    /**
     * Get this vector vertical component
     * @return {Number}
     */
    get height(): number;
    /**
     * Return this vector's length
     * @return {Number}
     */
    get length(): number;
    /**
     * Create a new copy of this vector
     * @return {Vector}
     */
    clone(): Vector;
    /**
     * Determine if is equal to another vector
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Boolean}
     */
    equals(vectorDefinition: PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }): boolean;
    /**
     * Get the vector move with start at (0, 0)
     * @return {Position}
     */
    getDelta(): Position;
    /**
     * Add a vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    add(modification: (PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }) | PositionDefinition | number): Vector;
    /**
     * Move this vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    translate(modification: (PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }) | PositionDefinition | number): Vector;
    /**
     * Multiply this vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    multiply(modification: (PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }) | PositionDefinition | number): Vector;
    /**
     * Define if this vector intersect another
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Boolean}
     */
    intersect(vectorDefinition: PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }): boolean;
    /**
     * Return the intersection point between two vector or null if no intersection happen
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Position}
     */
    getIntersectionPoint(vectorDefinition: PositionDefinition[] | {
        /**
         * - Start coordinates
         */
        start?: PositionDefinition;
        /**
         * - End coordinates
         */
        end?: PositionDefinition;
    }): Position;
    /**
     * Find the closest position to a point on this vector
     * @param {PositionDefinition} positionDefinition - Any position
     * @return {Position}
     */
    getClosestToPoint(positionDefinition: PositionDefinition): Position;
    /**
     * Return a JSON ready Vector definition
     * @return {Array<Array<Number>>}
     */
    toJSON(): Array<Array<number>>;
}
import Position from "@pencil.js/position";
