import React from 'react';

declare class xy {
    x: number;
    y: number;
    constructor(x: number, y: number);
}
declare class SearchLeg {
    from: xy;
    to: xy;
    bearing: number;
    distance: number;
    constructor(from: xy, to: xy, distance: number, bearing: number);
}
declare class SearchPattern {
    sweepWidth: number;
    searchLegs: SearchLeg[];
    currentLeg: number;
    searchType?: string;
    constructor(sweepWidth: number);
    get leg(): SearchLeg;
    get complete(): boolean;
    get length(): number;
    getLegs(): SearchLeg[];
    nextLeg(): void;
    uniqueKey(): string;
}
declare class SectorSearch extends SearchPattern {
    startingDirection: number;
    multiplier: number;
    iterations: number;
    constructor(sweepWidth: number, multiplier: number, iterations: number, startingDirection: number);
    generateSearchLegs(): void;
    uniqueKey(): string;
}
declare class ExpandingBoxSearch extends SearchPattern {
    iterations: number;
    startingDirection: number;
    constructor(sweepWidth: number, iterations: number, startingDirection: number);
    generateSearchLegs(): void;
    uniqueKey(): string;
}
declare class CreepingLineAheadSearch extends SearchPattern {
    legLength: number;
    legs: number;
    progressDirection: number;
    constructor(sweepWidth: number, legLength: number, legs: number, progressDirection: number);
    generateSearchLegs(): void;
    uniqueKey(): string;
}

interface SearchDisplayProps {
    search: SearchPattern;
    leg?: number;
}
interface SearchDisplayState {
    search: SearchPattern;
}
declare class SearchDisplay extends React.Component<SearchDisplayProps, SearchDisplayState> {
    canvasRef: React.RefObject<HTMLCanvasElement | null>;
    minX: number;
    minY: number;
    maxX: number;
    maxY: number;
    constructor(props: SearchDisplayProps);
    updateX(x: number): void;
    updateY(y: number): void;
    determineXYRange(searchLegs: SearchLeg[]): number[];
    drawSearch(canvas: HTMLCanvasElement): void;
    componentDidMount(): void;
    render(): React.JSX.Element;
}
interface SearchConfigurationProps {
    updateSearch: (search?: SearchPattern) => void;
}
interface SearchConfigurationState {
    searchType: string;
    sweepWidth: number;
    legLength: number;
    iterations: number;
    initialDirection: number;
    multiplier: number;
}
declare class SearchConfiguration extends React.Component<SearchConfigurationProps, SearchConfigurationState> {
    constructor(props: SearchConfigurationProps);
    handleStateUpdate(): void;
    handleChangeSearch(event: React.ChangeEvent<HTMLSelectElement>): void;
    handleChangeSweepWidth(event: React.ChangeEvent<HTMLInputElement>): void;
    handleChangeLegLength(event: React.ChangeEvent<HTMLInputElement>): void;
    handleChangeMultiplier(event: React.ChangeEvent<HTMLInputElement>): void;
    handleChangeIterations(event: React.ChangeEvent<HTMLInputElement>): void;
    handleChangeDirection(event: React.ChangeEvent<HTMLInputElement>): void;
    render(): React.JSX.Element;
}

export { CreepingLineAheadSearch, ExpandingBoxSearch, SearchConfiguration, SearchDisplay, SearchLeg, SearchPattern, SectorSearch };
