import type { Style } from 'maplibre-gl';
import type { CSSProperties } from 'react';
/**
 * Type to disallow al props in a given type
 */
export type DisallowAll<T> = {
    [P in keyof T]?: never;
};
/**
 * Props to set the initial view state on the map.
 */
export interface ViewState {
    /** Longitude at map center */
    longitude?: number;
    /** Latitude at map center */
    latitude?: number;
    /** Map zoom level */
    zoom?: number;
}
/**
 * Type to use in a controlled Map.
 * It disallows the initial state and gives the user complete control over the interactions
 */
export interface MapViewControlledProps extends ViewState {
    /**
     * The initial state of the Map. Disallowed on the controlled Map
     */
    initialViewState?: never;
}
/**
 * Type to use in an uncontrolled Map.
 * It allows only setting up an initial state and interactions come out of the box
 */
export interface MapViewUncontrolledProps extends DisallowAll<ViewState> {
    /**
     * The initial state of the Map.
     */
    initialViewState?: ViewState;
}
/**
 * Props present in both ways of controlling a Map
 */
export interface MapViewBaseProps {
    /**
     * CSS styles to override the inline styles of main container of the component
     */
    style?: CSSProperties;
    /**
     * Styles of maplibre to be overridden
     */
    mapStyle?: Style;
    /**
     * Callback to listen for the changes in the ViewState
     * @param viewState - the new ViewState
     */
    onViewStateChange?: (viewState: ViewState) => void;
    /**
     * Set whether map is loading
     * @defaultValue false
     */
    loading?: boolean;
    /**
     * The height of the chart. If a number is passed, it will be treated as px
     * @defaultValue 400px
     */
    height?: number | string;
    /**
     * CSS class to append to the class list of the main container of the component
     */
    className?: string;
}
/**
 * Props to configure a Map
 */
export type MapViewProps = MapViewBaseProps & (MapViewControlledProps | MapViewUncontrolledProps);
/** The Map component ref */
export interface MapViewRef {
    /** The map component root element */
    readonly element: HTMLDivElement | null;
    /** Downloads map raw data .*/
    downloadData: () => void;
}
