import type Style from 'ol/style/Style';
import { ExprEvalContext } from './expr-eval-context';
import { OLFeature } from './ol-types';
/**
 * The source of a vector layer style
 *
 * @since 0.14
 */
export declare enum VectorStyleSource {
    /**
     * The base vector layer style
     */
    Base = 0,
    /**
     * The clustered layer style
     */
    Cluster = 1
}
/**
 * Defines a style for a vector layer
 */
export interface IVectorLayerStyle {
    /**
     * The vector style for the given filter
     */
    [filter: string]: IVectorFeatureStyle;
    /**
     * The default vector style
     */
    default: IVectorFeatureStyle;
}
/**
 * @since 0.14
 */
export declare enum ClusterClickAction {
    ZoomToClusterExtents = "ZoomToClusterExtents",
    ShowPopup = "ShowPopup"
}
/**
 * Point cluster settings
 *
 * @since 0.14
 */
export interface IClusterSettings {
    /**
     * The clustering distance
     */
    distance: number;
    /**
     * What happens if this cluster is clicked
     */
    onClick: ClusterClickAction;
    /**
     * The style to use for point clusters
     */
    style: IVectorLayerStyle;
}
/**
 * Heatmap layer settings
 * @since 0.14
 */
export interface IHeatmapSettings {
    /**
     * Heatmap blur
     */
    blur: number;
    /**
     * Heatmap radius
     */
    radius: number;
}
/**
 * @since 0.14
 */
export declare type TextPlacement = "point" | "line";
/**
 * @since 0.14
 */
export declare type TextBaseline = "bottom" | "top" | "middle" | "alphabetic" | "hanging" | "ideographic";
/**
 * @since 0.14
 */
export interface IEvaluatable {
    expr: string;
}
/**
 * @since 0.14
 */
export declare type ExprOr<T> = IEvaluatable | T;
/**
 * @since 0.14
 */
export declare function isEvaluatable<T>(arg: any): arg is IEvaluatable;
/**
 * Label settings
 * @since 0.14
 */
export interface ILabelSettings {
    font?: ExprOr<string>;
    maxAngle?: ExprOr<number>;
    offsetX?: ExprOr<number>;
    offsetY?: ExprOr<number>;
    overflow?: ExprOr<boolean>;
    placement?: TextPlacement;
    scale?: ExprOr<number>;
    rotateWithView?: ExprOr<boolean>;
    rotation?: ExprOr<number>;
    text?: ExprOr<string>;
    textAlign?: ExprOr<string>;
    textBaseline?: ExprOr<string>;
    fill?: IBasicFill;
    stroke?: IBasicStroke;
    backgroundFill?: IBasicFill;
    backgroundStroke?: IBasicStroke;
    padding?: [number, number, number, number];
}
/**
 * Defines label settings for a vector layer
 * @since 0.14
 */
export interface IVectorLabelSettings {
    label?: ILabelSettings;
}
/**
 * Defines a style for vector features
 * @since 0.13
 */
export interface IVectorFeatureStyle {
    /**
     * @since 0.14
     */
    label?: string;
    point?: IBasicVectorPointStyle;
    line?: IBasicVectorLineStyle;
    polygon?: IBasicVectorPolygonStyle;
}
/**
 * Point circle style settings
 * @since 0.13
 */
export interface IBasicPointCircleStyle extends IVectorLabelSettings {
    type: "Circle";
    fill: IBasicFill;
    radius: ExprOr<number>;
    stroke: IBasicStroke;
}
/**
 * Point icon style settings
 * @since 0.13
 */
export interface IPointIconStyle extends IVectorLabelSettings {
    type: "Icon";
    anchor: [number, number];
    src: ExprOr<string>;
    rotateWithView: ExprOr<boolean>;
    rotation: ExprOr<number>;
    scale: ExprOr<number>;
}
/**
 * Point style settings
 * @since 0.13
 */
export declare type IBasicVectorPointStyle = (IBasicPointCircleStyle | IPointIconStyle) & IVectorLabelSettings;
/**
 * Line style settings
 * @since 0.13
 */
export declare type IBasicVectorLineStyle = IBasicStroke & IVectorLabelSettings;
/**
 * Polygon style settings
 * @since 0.13
 */
export interface IBasicVectorPolygonStyle extends IVectorLabelSettings {
    fill: IBasicFill;
    stroke: IBasicStroke;
}
/**
 * Line stroke settings
 * @since 0.13
 */
export interface IBasicStroke {
    color: ExprOr<string>;
    alpha: ExprOr<number>;
    width: ExprOr<number>;
}
/**
 * Color fill settings
 * @since 0.13
 */
export interface IBasicFill {
    color: ExprOr<string>;
    alpha: ExprOr<number>;
}
/**
 * The default style for point features
 * @since 0.13
 * @since 0.14 Made deep const immutable
 */
export declare const DEFAULT_POINT_CIRCLE_STYLE: IBasicPointCircleStyle;
/**
 * The default style for clustered point features
 * @since 0.14
 */
export declare const DEFAULT_CLUSTERED_POINT_CIRCLE_STYLE: IBasicPointCircleStyle;
/**
 * The default icon style for point features
 * @since 0.13
 * @since 0.14 Made deep const immutable
 */
export declare const DEFAULT_POINT_ICON_STYLE: IPointIconStyle;
/**
 * The default color
 * @since 0.13
 */
export declare const DEFAULT_COLOR = "#000000";
/**
 * The default style for line features
 * @since 0.13
 * @since 0.14 Made deep const immutable
 */
export declare const DEFAULT_LINE_STYLE: IBasicVectorLineStyle;
/**
 * The default style for polygon features
 * @since 0.13
 * @since 0.14 Made deep const immutable
 */
export declare const DEFAULT_POLY_STYLE: IBasicVectorPolygonStyle;
/**
 * The default vector layer style
 * @since 0.14
 */
export declare const DEFAULT_VECTOR_LAYER_STYLE: {
    readonly default: {
        readonly point: IBasicPointCircleStyle;
        readonly line: IBasicVectorLineStyle;
        readonly polygon: IBasicVectorPolygonStyle;
    };
};
/**
 * The default vector layer style for clustered points
 * @since 0.14
 */
export declare const DEFAULT_CLUSTERED_LAYER_STYLE: {
    readonly default: {
        readonly point: IBasicPointCircleStyle;
    };
};
/**
 * An OpenLayers style map
 *
 * @export
 * @interface IOlStyleMap
 * @since 0.13
 */
export interface IOlStyleMap {
    id: string;
    "Point": Style;
    "LineString": Style;
    "MultiLineString": Style;
    "MultiPoint": Style;
    "MultiPolygon": Style;
    "Polygon": Style;
    "GeometryCollection": Style;
    "Circle": Style;
}
export declare type DynamicStyleMap = (feature: OLFeature | undefined, context: ExprEvalContext | undefined) => IOlStyleMap;
