/**
 * echarts 3.2.2
 * http://echarts.baidu.com/api.html
 */
interface Echart {
    /**
     * 设置图表实例的配置项以及数据，万能接口，所有参数和数据的修改都可以通过setOption完成。
     * ECharts 会合并新的参数和数据，然后刷新图表。
     * 如果开启动画的话，ECharts 找到两组数据之间的差异然后通过合适的动画去表现数据的变化。
     */
    setOption(option: {}, notMerge?: boolean, notRefreshImmediately?: boolean): void;

    /**
     * 获取 ECharts 实例容器的宽度。
     */
    getWidth(): number;

    /**
     * 获取 ECharts 实例容器的高度。
     */
    getHeight(): number;

    /**
     * 获取 ECharts 实例容器的 dom 节点。
     */
    getDom(): HTMLDivElement | HTMLCanvasElement;

    /**
     * 获取当前实例中维护的option对象。
     * 返回的option对象中包含了用户多次setOption合并得到的配置项和数据，也记录了用户交互的状态，
     * 例如图例的开关，数据区域缩放选择的范围等等。
     * 所以从这份 option 可以恢复或者得到一个新的一模一样的实例。
     */
    getOption(): {};

    /**
     * 改变图表尺寸，在容器大小发生改变时需要手动调用。
     */
    resize(): void;

    /**
     * 触发图表行为。
     * 例如图例开关legendToggleSelect, 数据区域缩放dataZoom，显示提示框showTip等等。
     */
    dispatchAction(payload: {}): void;

    /**
     * 绑定事件处理函数。
     */
    on(eventName: string, handler: Function, context?: {}): void;

    /**
     * 解绑事件处理函数。
     */
    off(eventName: string, handler?: Function): void;

    /**
     * 显示加载动画效果。
     * 可以在加载数据前手动调用改接口显示加载动画，在数据加载完成后调用 hideLoading 隐藏加载动画。
     */
    showLoading(type?: string, opts?: {}): void;

    /**
     * 隐藏动画加载效果。
     */
    hideLoading(): void;

    /**
     * 导出图表图片，返回一个 base64 的 URL，可以设置为Image的src。
     */
    getDataURL(opts: { type?: string, pixelRatio?: number, backgroundColor?: string }): string;

    /**
     * 导出联动的图表图片，返回一个 base64 的 url，可以设置为Image的src。
     * 导出图片中每个图表的相对位置跟容器的相对位置有关。
     */
    getConnectedDataURL(opts: { type?: string, pixelRatio?: number, backgroundColor?: string }): string;

    /**
     * 清空当前实例，会移除实例中所有的组件和图表。
     * 清空后调用 getOption 方法返回一个{}空对象。
     */
    clear(): void;

    /**
     * 当前实例是否已经被释放。
     */
    isDisposed(): boolean;

    /**
     * 销毁实例，销毁后实例无法再被使用。
     */
    dispose(): void;
}

interface EchartStatic {
    init(dom: HTMLDivElement | HTMLCanvasElement, theme?: {} | string, opts?: {}): Echart;
}

declare var echarts: EchartStatic;