import { IObject } from "@daybrush/utils";
import { MoveableManagerState, Able, MoveableClientRect, MoveableProps, ControlPose, InvertTypes } from "./types";
export declare function round(num: number): number;
export declare function multiply2(pos1: number[], pos2: number[]): number[];
export declare function prefix(...classNames: string[]): string;
export declare function createIdentityMatrix3(): number[];
export declare function getTransformMatrix(transform: string | number[]): number[];
export declare function getAbsoluteMatrix(matrix: number[], n: number, origin: number[]): number[];
export declare function measureSVGSize(el: SVGElement, unit: string, isHorizontal: boolean): number;
export declare function getBeforeTransformOrigin(el: SVGElement): number[];
export declare function getTransformOrigin(style: CSSStyleDeclaration): string[];
export declare function getOffsetInfo(el: SVGElement | HTMLElement | null | undefined, lastParent: SVGElement | HTMLElement | null | undefined, isParent?: boolean): {
    isStatic: boolean;
    isEnd: boolean;
    offsetParent: HTMLElement;
};
export declare function getOffsetPosInfo(el: HTMLElement | SVGElement, container: SVGElement | HTMLElement | null, style: CSSStyleDeclaration, isFixed: boolean): {
    isSVG: boolean;
    hasOffset: boolean;
    offset: number[];
    origin: number[];
    targetOrigin: number[];
};
export declare function getMatrixStackInfo(target: SVGElement | HTMLElement, container: SVGElement | HTMLElement | null, prevMatrix?: number[]): {
    offsetContainer: HTMLElement;
    matrixes: number[][];
    targetMatrix: number[];
    transformOrigin: number[];
    targetOrigin: number[];
    is3d: boolean;
};
export declare function getElementMatrixStack(target: SVGElement | HTMLElement, container: SVGElement | HTMLElement | null, rootContainer?: SVGElement | HTMLElement | null): {
    rootMatrix: number[];
    beforeMatrix: number[];
    offsetMatrix: number[];
    allMatrix: number[];
    targetMatrix: number[];
    targetTransform: string;
    transformOrigin: number[];
    targetOrigin: number[];
    is3d: boolean;
};
export declare function caculateMatrixStack(target: SVGElement | HTMLElement, container: SVGElement | HTMLElement | null, rootContainer?: SVGElement | HTMLElement | null, isAbsolute3d?: boolean, prevMatrix?: number[], prevRootMatrix?: number[], prevN?: number): {
    rootMatrix: number[];
    beforeMatrix: number[];
    offsetMatrix: number[];
    allMatrix: number[];
    targetMatrix: number[];
    targetTransform: string;
    transformOrigin: number[];
    targetOrigin: number[];
    is3d: boolean;
};
export declare function makeMatrixCSS(matrix: number[], is3d?: boolean): string;
export declare function getSVGViewBox(el: SVGSVGElement): {
    x: number;
    y: number;
    width: number;
    height: number;
};
export declare function getSVGMatrix(el: SVGSVGElement, n: number): number[];
export declare function getSVGGraphicsOffset(el: SVGGraphicsElement, origin: number[]): number[];
export declare function caculatePosition(matrix: number[], pos: number[], n: number): number[];
export declare function caculatePoses(matrix: number[], width: number, height: number, n: number): number[][];
export declare function getRect(poses: number[][]): {
    left: number;
    top: number;
    right: number;
    bottom: number;
    width: number;
    height: number;
};
export declare function caculateRect(matrix: number[], width: number, height: number, n: number): {
    left: number;
    top: number;
    right: number;
    bottom: number;
    width: number;
    height: number;
};
export declare function getSVGOffset(el: SVGElement, container: HTMLElement | SVGElement, n: number, origin: number[], beforeMatrix: number[], absoluteMatrix: number[]): number[];
export declare function caculateMoveablePosition(matrix: number[], origin: number[], width: number, height: number): [number[], number[], number[][], 1 | -1];
export declare function getDistSize(vec: number[]): number;
export declare function getDiagonalSize(pos1: number[], pos2: number[]): number;
export declare function getLineStyle(pos1: number[], pos2: number[], rad?: number): {
    transform: string;
    width: string;
};
export declare function getControlTransform(rotation: number, ...poses: number[][]): {
    transform: string;
};
export declare function getCSSSize(target: SVGElement | HTMLElement): number[];
export declare function getSize(target: SVGElement | HTMLElement, style?: CSSStyleDeclaration, isOffset?: boolean, isBoxSizing?: boolean): number[];
export declare function getRotationRad(poses: number[][], direction: number): number;
export declare function getTargetInfo(moveableElement?: HTMLElement, target?: HTMLElement | SVGElement, container?: HTMLElement | SVGElement | null, parentContainer?: HTMLElement | SVGElement | null, rootContainer?: HTMLElement | SVGElement | null, state?: Partial<MoveableManagerState> | false | undefined): Partial<MoveableManagerState>;
export declare function resetClientRect(): MoveableClientRect;
export declare function getClientRect(el: HTMLElement | SVGElement, isExtends?: boolean): MoveableClientRect;
export declare function getDirection(target: SVGElement | HTMLElement): number[] | undefined;
export declare function getAbsolutePoses(poses: number[][], dist: number[]): number[][];
export declare function getAbsolutePosesByState({ left, top, pos1, pos2, pos3, pos4, }: {
    left: number;
    top: number;
    pos1: number[];
    pos2: number[];
    pos3: number[];
    pos4: number[];
}): number[][];
export declare function roundSign(num: number): number;
export declare function throttle(num: number, unit: number): number;
export declare function throttleArray(nums: number[], unit: number): number[];
export declare function unset(self: any, name: string): void;
export declare function getOrientationDirection(pos: number[], pos1: number[], pos2: number[]): number;
export declare function isInside(pos: number[], pos1: number[], pos2: number[], pos3: number[], pos4: number[]): boolean;
export declare function fillParams<T extends IObject<any>>(moveable: any, e: any, params: Pick<T, Exclude<keyof T, "target" | "clientX" | "clientY" | "inputEvent" | "datas" | "currentTarget">>): T;
export declare function fillEndParams<T extends IObject<any>>(moveable: any, e: any, params: Pick<T, Exclude<keyof T, "target" | "clientX" | "clientY" | "inputEvent" | "datas" | "currentTarget" | "lastEvent" | "isDrag" | "isDouble">> & {
    isDrag?: boolean;
}): T;
export declare function triggerEvent<T extends IObject<any> = MoveableProps, U extends keyof T = string>(moveable: any, name: U, params: T[U] extends ((e: infer P) => any) | undefined ? P : IObject<any>, isManager?: boolean): any;
export declare function getComputedStyle(el: HTMLElement | SVGElement, pseudoElt?: string | null): CSSStyleDeclaration;
export declare function filterAbles(ables: Able[], methods: Array<keyof Able>, triggerAblesSimultaneously?: boolean): Able<IObject<any>, IObject<any>>[];
export declare function getKeepRatioHeight(width: number, isWidth: boolean, ratio: number): number;
export declare function getKeepRatioWidth(height: number, isWidth: boolean, ratio: number): number;
export declare function equals(a1: any, a2: any): boolean;
export declare function selectValue<T = any>(...values: any[]): T;
export declare function groupBy<T>(arr: T[], func: (el: T, index: number, arr: T[]) => any): T[][];
export declare function groupByMap<T>(arr: T[], func: (el: T, index: number, arr: T[]) => string | number): T[][];
export declare function flat<T>(arr: T[][]): T[];
export declare function equalSign(a: number, b: number): boolean;
export declare function maxOffset(...args: number[]): number;
export declare function minOffset(...args: number[]): number;
export declare function caculateInversePosition(matrix: number[], pos: number[], n: number): number[];
export declare function convertDragDist(state: MoveableManagerState, e: any): any;
export declare function caculatePadding(matrix: number[], pos: number[], transformOrigin: number[], origin: number[], n: number): number[];
export declare function checkSize(targetSize: number[], compareSize: number[], isMax: boolean): number[];
export declare function caculateBoundSize(size: number[], minSize: number[], maxSize: number[], keepRatio?: boolean): number[];
export declare function convertCSSSize(value: number, size: number, isRelative?: boolean): string;
export declare function moveControlPos(controlPoses: ControlPose[], nextPoses: number[][], index: number, distX: number, distY: number): void;
export declare function getTinyDist(v: number): number;
export declare function directionCondition(e: any): any;
export declare function invertObject<T extends IObject<any>>(obj: T): InvertTypes<T>;
export declare function getTransform(transforms: string[], index: number): {
    transforms: string[];
    beforeFunctionMatrix: number[];
    targetFunctionMatrix: number[];
    afterFunctionMatrix: number[];
    beforeFunctions: import("css-to-mat").MatrixInfo[];
    targetFunction: import("css-to-mat").MatrixInfo;
    afterFunctions: import("css-to-mat").MatrixInfo[];
    beforeFunctionTexts: string[];
    targetFunctionText: string;
    afterFunctionTexts: string[];
};
