import type { CustomLayerInterface, CustomRenderMethodInput, Map as MaplibreMap } from 'maplibre-gl';
import type { mat4 } from 'gl-matrix';
/**
 * Get the subsolar point (longitude and latitude) at the given date.
 * @param date If null, the current date is used.
 * @returns The subsolar point.
 */
export declare function getSubsolarPoint(date?: Date): {
    lng: number;
    lat: number;
};
type Color3 = [number, number, number];
type Color4 = [number, number, number, number];
type Color = Color3 | Color4;
/**
 * Options for the NightLayer.
 */
type Options = {
    /**
     * Date for the shadow.
     * If null, the current date is used.
     */
    date?: Date | null;
    /**
     * Opacity of the layer.
     * 0.0 means fully transparent, 1.0 means fully opaque
     * default: 0.5
     */
    opacity?: number;
    /**
     * Color of the shadow: [r, g, b, a]
     * Each value should be in the range [0, 255].
     * default: [0, 0, 0, 255]
     */
    color?: Color;
    /**
     * Color of the daytime: [r, g, b, a]
     * Each value should be in the range [0, 255].
     * default: [0, 0, 0, 0]
     */
    daytimeColor?: Color;
    /**
     * Number of twilight steps.
     * 0 means no steps (gradation), 1 means one step (day/night), etc.
     * default: 0
     */
    twilightSteps?: number;
    /**
     * Attenuation factor for each twilight step.
     * 0.0 means no attenuation, 1.0 means full attenuation
     * default: 0.5
     */
    twilightAttenuation?: number;
    /**
     * Update interval in milliseconds.
     * Periodically triggers a repaint.
     * default: 10000
     */
    updateInterval?: number;
};
/**
 * A custom Maplibre GL JS layer that renders the night side of the Earth.
 */
export declare class NightLayer implements CustomLayerInterface {
    #private;
    id: string;
    type: "custom";
    renderingMode: "2d";
    /**
     * Create a new NightLayer instance. Intended to be passed to `map.addLayer`.
     * @param opts The options.
     */
    constructor(opts?: Options);
    /**
     * Get the current subsolar point (longitude and latitude)
     * @returns The subsolar point.
     */
    getSubsolarPoint(): {
        lng: number;
        lat: number;
    };
    /**
     * Get the date for the shadow.
     * @returns The date. If null, the current date is used.
     */
    getDate(): Date | null;
    /**
     * Set the date for the shadow.
     * @param date If null, the current date is used.
     */
    setDate(date: Date | null): void;
    /**
     * Get the opacity of the shadow.
     * @returns The opacity. 0.0 means fully transparent, 1.0 means fully opaque.
     */
    getOpacity(): number;
    /**
     * Set the opacity of the shadow.
     * @param opacity 0.0 means fully transparent, 1.0 means fully opaque.
     */
    setOpacity(opacity: number): void;
    /**
     * Get the color of the shadow.
     * @returns The color. Each value is in the range [0, 255].
     */
    getColor(): Color4;
    /**
     * Set the color of the shadow.
     * @param color Each value should be in the range [0, 255].
     */
    setColor(color: Color): void;
    /**
     * Get the color of the daytime.
     * @returns The color [r, g, b, a]. Each value is in the range [0, 255].
     */
    getDaytimeColor(): Color4;
    /**
     * Set the color of the daytime.
     * @param color Each value should be in the range [0, 255].
     */
    setDaytimeColor(color: Color): void;
    /**
     * Get the number of twilight steps.
     * @returns The steps. 0 means no steps (gradation), 1 means one step (day/night), etc.
     */
    getTwilightSteps(): number;
    /**
     * Set the number of twilight steps.
     * @param steps 0 means no steps (gradation), 1 means one step (day/night), etc.
     */
    setTwilightSteps(steps: number): void;
    /**
     * Get the attenuation factor for each twilight step.
     * @returns The attenuation. 0.0 means no attenuation, 1.0 means full attenuation.
     */
    getTwilightAttenuation(): number;
    /**
     * Set the attenuation factor for each twilight step.
     * @param attenuation 0.0 means no attenuation, 1.0 means full attenuation.
     */
    setTwilightAttenuation(attenuation: number): void;
    /**
     * Get the update interval.
     * @returns The interval in milliseconds.
     */
    getUpdateInterval(): number;
    /**
     * Set the update interval.
     * @param interval The interval in milliseconds..
     */
    setUpdateInterval(interval: number): void;
    onAdd(map: MaplibreMap, gl: WebGLRenderingContext | WebGL2RenderingContext): void;
    onRemove(): void;
    render(gl: WebGLRenderingContext | WebGL2RenderingContext, matrix: mat4, options: CustomRenderMethodInput): void;
    render(gl: WebGLRenderingContext | WebGL2RenderingContext, options: CustomRenderMethodInput): void;
}
export default NightLayer;
