import type { LegendColorLayerProps, LocationColorProps } from './coloring.js';
import type { Location } from './location.js';
/**
 * Base props to configure a BubbleLayer
 * @typeParam T - Object extending Location
 */
export interface BubbleLayerBaseProps<T extends Location> {
    /**
     * An array of location data items to be displayed as bubbles in the BubbleLayer
     */
    data: T[];
    /**
     * Determines the interpolation mode for bubble size.
     * 'zoom': Bubble size changes with zoom.
     * 'fixed': Constant bubble size regardless of zoom level.
     * @defaultValue 'fixed'
     */
    sizeInterpolation?: 'zoom' | 'fixed';
}
/**
 * The BubbleLayer props
 * @typeParam T - Object extending Location
 */
export type BubbleLayerProps<T extends Location> = BubbleLayerBaseProps<T> & (LocationColorProps<T> | LegendColorLayerProps) & (ScaleRadiusProps<T> | ScaleNoneProps<T>);
/**
 * When there's no scale provided, the radius prop is used as radius size in pixels
 * @typeParam T - Object extending Location
 */
export interface ScaleNoneProps<T> {
    /**
     * The way to indicate that scale should not be used
     */
    scale: 'none';
    /**
     * The radius property, which determines the size of the bubbles.
     * It can be a constant number or a function that calculates the radius based on the data item
     * @defaultValue 12
     */
    radius?: number | ((item: T) => number);
}
/**
 * When a scale is provided, all the values in the dataset will be scaled to fit between the `radiusRange`.
 * @typeParam T - Object extending Location
 */
export interface ScaleRadiusProps<T extends Location> {
    /**
     * The way the radius is scaled.
     * @defaultValue 'linear'
     */
    scale?: 'linear' | 'log';
    /**
     * The radius property, which determines the size of the bubbles.
     * It requires a callback that is used as data accessor.
     */
    radius: (item: T) => number;
    /**
     * It determines the min and max size for the bubble radius
     * @defaultValue [10, 100]
     */
    radiusRange?: [number, number];
}
/**
 * Type guard to know whether radius should apply the scale
 * @param props - BubbleLayerProps
 */
export declare function isScaleRadius<T extends Location>(props: BubbleLayerProps<T>): props is BubbleLayerProps<T> & ScaleRadiusProps<T>;
/** @internal */
export type InternalBubbleLayerProps<T extends Location> = {
    layerId: string;
} & BubbleLayerProps<T>;
