import { type GeoPath, type GeoPermissibleObjects } from 'd3';
import { type Geometry } from 'geojson';
import { type Topology } from 'topojson-specification';
import { type LatLngLiteral } from '../types';
export type Styles = Record<string, any>;
export type Style = 'background' | 'water' | 'graticule' | 'land' | 'border' | 'dots' | 'point' | 'line' | 'cursor' | 'arc';
export type StyleSet = Partial<Record<Style, Styles>>;
export type Features = {
    points?: LatLngLiteral[];
    lines?: {
        source: LatLngLiteral;
        target: LatLngLiteral;
    }[];
};
/**
 * Per-feature bounding circle used for view-frustum culling on an
 * orthographic globe. `centroid` is in lon/lat degrees and `radius` is the
 * angular distance (degrees) from the centroid to the farthest sampled
 * vertex of the feature.
 */
export type FeatureBounds = {
    geometry: Geometry;
    centroid: [number, number];
    radius: number;
};
export type Layer = {
    styles: Styles;
    path: GeoPermissibleObjects;
    /**
     * If present, this layer is treated as a `GeometryCollection` whose
     * member geometries are filtered per-frame by `viewCenter` against each
     * member's `FeatureBounds`. `path` becomes the *unculled* fallback used
     * when no `viewCenter` is supplied (e.g. non-orthographic projections).
     */
    cullable?: FeatureBounds[];
};
/**
 * Create rendering layers.
 */
export declare const createLayers: (topology: Topology, features: Features, styles: StyleSet) => Layer[];
/**
 * Render layers created above.
 *
 * When `viewCenter` is supplied (orthographic globe), layers with a
 * `cullable` index are filtered to just the features whose bounding circle
 * intersects the visible hemisphere — keeping the d3-geo walk proportional
 * to what's actually on-screen.
 */
export declare const renderLayers: (generator: GeoPath, layers: Layer[], scale: number, styles: StyleSet, viewCenter?: [number, number]) => CanvasRenderingContext2D;
//# sourceMappingURL=render.d.ts.map