import type Camera from 'ui/camera/index.js';
import type { MapOptions } from 'ui/s2mapUI.js';
import type { TileShared as Tile } from 'source/tile.spec.js';
import type { UrlMap } from 's2/index.js';
import type { FillDefinition, LayerDefinition, ShadeDefinition, StyleDefinition } from './style.spec.js';
/**
 * # Style Engine
 *
 * The Style Engine is responsible for:
 * - PRE) If style is a string (url), ship it off to Source Worker to fetch the style
 * - 1) Build workflows necessary to render the style
 * - 2) Build out the layers
 * - 3) Ship off appropriate style params to Tile Workers so they know how to build the tiles
 * - 4) Build the layers for the painter
 */
export default class Style {
    #private;
    camera: Camera;
    apiKey?: string;
    urlMap?: UrlMap;
    maskLayers: Array<FillDefinition | ShadeDefinition>;
    layers: LayerDefinition[];
    interactive: boolean;
    dirty: boolean;
    /**
     * @param camera - render camera
     * @param options - map options
     */
    constructor(camera: Camera, options: MapOptions);
    /**
     * Build the style, preparing it for rendering and tile/source processing
     * @param style - style definition
     * @param ignorePosition - if true, we want to leave the position of the camera unchanged.
     * @returns true if we can start rendering
     */
    buildStyle(style: string | StyleDefinition, ignorePosition?: boolean): Promise<boolean>;
    /**
     * Inject mask layers
     * @param tile - tile to inject the mask layers for
     */
    injectMaskLayers(tile: Tile): void;
    /**
     * Request tiles. The projector will forward requests throug this class so it can build the
     * tile requests with style specific data before forwarding it to the worker pool
     * @param tiles - tiles to request data for
     */
    requestTiles(tiles: Tile[]): void;
}
