import type { CSSProperties } from 'react';
import { ForwardRefExoticComponent } from 'react';
import { MemoExoticComponent } from 'react';
import type { PropsWithChildren } from 'react';
import type { ReactElement } from 'react';
import { ReactNode } from 'react';
import { RefAttributes } from 'react';

export declare interface CursorTimeConfig {
    zIndex?: number;
    customShowTimeStyle?: CSSProperties;
}

export declare interface InstanceMethodType {
    seekTo?: (offsetTime: number, play?: boolean) => void;
    destroy?: () => void;
    play?: () => void;
    pause?: () => void;
    volume?: (volume: number) => void;
    playbackRate?: (playbackRate: number) => void;
}

declare enum LoadStateEnum {
    "EMPTY" = -1,
    "INIT" = 0,
    "LOADING" = 1,
    "SUCCESS" = 2,
    "ERROR" = 3
}
export { LoadStateEnum }
export { LoadStateEnum as LoadStateEnumType }

export declare const ReactAudioWave: MemoExoticComponent<ForwardRefExoticComponent<ReactAudioWaveProps & {
children?: ReactNode;
} & RefAttributes<InstanceMethodType>>>;

export declare interface ReactAudioWaveProps {
    waveHeight: number;
    colors: Wavecolors;
    audioSrc: string;
    placeholder: PropsWithChildren<any>;
    emptyElement?: ReactElement;
    barGap?: number;
    barWidth?: number;
    progressStyle?: CSSProperties;
    supportPlaybackRate?: boolean;
    mono?: boolean;
    progressCursorVisible?: boolean;
    cursorVisible?: boolean;
    cursorTimeConfig?: CursorTimeConfig;
    className?: string;
    timeFormat?: (seconds: number) => string;
    onChangeLoadState?: (state: LoadStateEnum, duration?: number) => void;
    onCurrentTimeChange?: (current: number) => void;
    onWaveSizeChange?: (size: Size) => void;
    onPlayEnded?: () => void;
    renderErrorElement?: (error?: string) => ReactElement;
}

export declare type Size = {
    width: number;
    height: number;
};

export declare interface Wavecolors {
    progressColor: string;
    waveColor: string;
    cursorColor?: string;
    waveBackground?: string;
}

export { }
