import { RegionParams } from 'wavesurfer.js/src/plugin/regions';
import { EventHandler } from 'wavesurfer.js/types/util';
import { MarkerParams } from 'wavesurfer.js/src/plugin/markers';
import React from 'react';
import * as WaveSurferRef from 'wavesurfer.js';
import WaveSurferRef__default from 'wavesurfer.js';
import { WaveSurferParams } from 'wavesurfer.js/types/params';

interface RegionProps extends RegionParams {
    onClick?: EventHandler;
    onOver?: EventHandler;
    onLeave?: EventHandler;
    onDoubleClick?: EventHandler;
    onIn?: EventHandler;
    onOut?: EventHandler;
    onRemove?: EventHandler;
    onUpdate?: EventHandler;
    onUpdateEnd?: EventHandler;
    id: string;
}
declare const Region: ({ onOver, onLeave, onClick, onDoubleClick, onIn, onOut, onRemove, onUpdate, onUpdateEnd, ...props }: RegionProps) => null;

interface MarkerProps extends MarkerParams {
    draggable?: boolean;
    onClick?: EventHandler;
    onDrop?: EventHandler;
    onDrag?: EventHandler;
}
declare function Marker({ onClick, onDrop, onDrag, ...data }: MarkerProps): null;

interface PluginType {
    plugin: object;
    options: any;
    creator?: string;
}

interface WaveSurferProps {
    children: React.ReactNode;
    plugins: PluginType[];
    onMount: (wavesurferRef: null | WaveSurferRef__default) => any;
}
declare const WaveSurfer: {
    ({ children, plugins, onMount, ...props }: WaveSurferProps): JSX.Element;
    defaultProps: {
        children: null;
        plugins: never[];
    };
};

interface WaveFormProps extends Partial<WaveSurferParams> {
    id: string;
    children?: React.ReactNode;
}
declare const WaveForm: ({ id, children }: WaveFormProps) => JSX.Element;

declare type UseWaveSurferParams = {
    container?: string | HTMLElement;
    plugins: PluginType[];
    onMount: (wavesurferRef: null | WaveSurferRef__default) => any;
};
declare function useWavesurfer({ container, plugins, onMount, ...props }: UseWaveSurferParams): WaveSurferRef__default | null;

declare function useWavesurferContext(): WaveSurferRef | null;

export { Marker, Region, WaveForm, WaveSurfer, useWavesurfer, useWavesurferContext };
