import type GeoJSON from 'geojson';
import type { Location } from './location.js';
/**
 * Data type for connections in the Connection Layer.
 * @typeParam L - Object extending Location.
 */
export type Connection = {
    /** Array of connections */
    path: Location[];
};
/**
 * Shape of the Connection Layer Component Props.
 * @typeParam L - Object extending Location.
 * @typeParam T - Object extending Connection<L>.
 */
export interface ConnectionLayerProps<T extends Connection> {
    /** Set of data related to the connections */
    data: T[];
    /**
     * Specifies the line type.
     * @defaultValue 'solid'
     */
    line?: 'dashed' | 'solid';
    /**
     * Position of the arrows in relation of the connection direction
     */
    directionIndicator?: 'start' | 'end' | 'both';
    /**
     * Declare whether the curve is linear or smooth
     * @defaultValue 'linear'
     */
    curve?: CurvedLine;
    /**
     * Specifies the color of the connection layer.
     * @defaultValue Colors.Charts.Categorical.Color03.Default
     */
    color?: string | ((connection: T) => string);
    /**
     * Specifies the thickness of the connection path.
     * It can accept numbers from 1 to 64 (included).
     * @defaultValue 2
     */
    thickness?: number;
}
/** @internal */
export type InternalConnectionLayerProps<T extends Connection> = ConnectionLayerProps<T> & {
    layerId: string;
};
/** @internal */
export interface FeatureProperties {
    id: string;
    __lineColor: string;
    __lineHoveredColor: string;
    __lineWidth: number;
    __angle?: number;
    curve?: CurvedLine;
    path: Location[];
}
export type GeoJSONFeature<T extends GeoJSON.Geometry> = GeoJSON.Feature<T, FeatureProperties>;
/**
 * This property is responsible for setting the curve type
 * @defaultValue linear
 */
export type CurvedLine = 'linear' | 'smooth';
