import 'vue-router'
import { Component } from 'vue'

declare module 'vue-router' {
  interface RouteMeta {
    /**
     * 路由参数
     */
    routeParams?: {
      [key: string]: 'String' | 'StringArray' | 'Number' | 'NumberArray' | 'Array' | 'Hash' | 'Boolean'
    }
  }
}


declare module 'vue' {
  interface VNode {
    __isWrapped__: boolean
  }
}

declare module 'vue-drag-resize/src' {
  interface VueDragResizeProps {
    // 组件的宽度
    width?: number | string;
    // 组件的高度
    height?: number | string;
    // 组件的最小宽度
    minWidth?: number;
    // 组件的最小高度
    minHeight?: number;
    // 组件的最大宽度
    maxWidth?: number;
    // 组件的最大高度
    maxHeight?: number;
    // 组件的 x 坐标
    x?: number;
    // 组件的 y 坐标
    y?: number;
    // 是否可以拖拽
    draggable?: boolean;
    // 是否可以调整大小
    resizable?: boolean;
    // 拖拽时的边界限制
    parent?: boolean;
    // 调整大小时的边界限制
    bounds?: string;
    // 拖拽时的样式类名
    dragClass?: string;
    // 调整大小时的样式类名
    resizeClass?: string;
    // 禁用组件的某个角的调整大小功能
    disable?: {
      tl?: boolean;
      tm?: boolean;
      tr?: boolean;
      mr?: boolean;
      br?: boolean;
      bm?: boolean;
      bl?: boolean;
      ml?: boolean;
    };
    // 拖拽时是否锁定 x 轴
    lockAspectRatio?: boolean;
    // 拖拽时是否锁定 x 轴
    lockX?: boolean;
    // 拖拽时是否锁定 y 轴
    lockY?: boolean;
    // 拖拽时的网格大小
    grid?: [ number, number ];
    // 拖拽开始时的回调函数
    onDragStart?: (e: MouseEvent | TouchEvent, x: number, y: number) => void;
    // 拖拽过程中的回调函数
    onDrag?: (e: MouseEvent | TouchEvent, x: number, y: number) => void;
    // 拖拽结束时的回调函数
    onDragStop?: (e: MouseEvent | TouchEvent, x: number, y: number) => void;
    // 调整大小开始时的回调函数
    onResizeStart?: (
        e: MouseEvent | TouchEvent,
        direction: string,
        refToElement: HTMLElement,
        deltaX: number,
        deltaY: number
    ) => void;
    // 调整大小过程中的回调函数
    onResize?: (
        e: MouseEvent | TouchEvent,
        direction: string,
        refToElement: HTMLElement,
        deltaX: number,
        deltaY: number
    ) => void;
    // 调整大小结束时的回调函数
    onResizeStop?: (
        e: MouseEvent | TouchEvent,
        direction: string,
        refToElement: HTMLElement,
        deltaX: number,
        deltaY: number
    ) => void;
  }

  const VueDragResize: Component<VueDragResizeProps>
  export default VueDragResize
}
    
