import type { Callback } from 's2/style/parseFeature.js';
import type { ColorArray } from 'style/color/index.js';
import type { IDGen } from './process.spec.js';
import type { BuildCodeFunction, GPUType, InteractiveWorkerLayer, NotNullOrObject, Property, ValueType } from 'style/style.spec.js';
import type { InteractiveObject, TileRequest } from '../worker.spec.js';
import type { Properties, S2CellId } from 'gis-tools/index.js';
/** Code design input wrapper */
export type CodeDesignInput<T extends NotNullOrObject> = [T | Property<T>, Callback<T, ColorArray>] | [T | Property<T>];
/** Code design wrapper */
export type CodeDesign<T = any> = Array<CodeDesignInput<ValueType<T>>>;
/**
 * Color function to convert a color to either RBG or LCH
 * @param lch - flag to use lch if true
 * @returns a color parsing function
 */
export declare const colorFunc: (lch: boolean) => Callback<string, ColorArray>;
/**
 * Clamp tool to ensure the number is between -1 and 1
 * @param i - input number
 * @returns clamped number
 */
export declare const clamp: Callback<number, number>;
/**
 * # Vector Worker
 *
 * Base class for all vector workers.
 * Ensurses that all vector workers can reuse things like prepping and shipping interactive features,
 * flusing, id-generation, etc.
 */
export default class VectorWorker {
    idGen: IDGen;
    gpuType: GPUType;
    interactiveMap: Map<number, InteractiveObject>;
    /**
     * @param idGen - id generator to ensure features don't overlap
     * @param gpuType - the GPU context of the map renderer (WebGL(1|2) | WebGPU)
     */
    constructor(idGen: IDGen, gpuType: GPUType);
    /**
     * Add an interactive feature
     * @param id - feature id
     * @param properties - feature properties
     * @param workerLayer - worker layer to pull the interactive-properties from
     */
    _addInteractiveFeature(id: number, properties: Properties, workerLayer: InteractiveWorkerLayer): void;
    /**
     * Flush a tile-request to the render thread
     * @param mapID - id of the map to ship the data back to
     * @param tile - tile request
     * @param sourceName - name of the source the data belongs to
     * @param _wait - wait function. Not needed at this flush level.
     */
    flush(mapID: string, tile: TileRequest, sourceName: string, _wait: Promise<void>): Promise<void>;
    /**
     * Build code for a vector layer
     * @param design - the design to modify
     * @returns the build function
     */
    buildCode(design: CodeDesign<NotNullOrObject>): BuildCodeFunction;
    /**
     * Post an interactive feature set to the render thread
     * @param mapID - id of the map to ship the data back to
     * @param sourceName - name of the source the data belongs to
     * @param tileID - tile id the features belong to
     */
    postInteractive(mapID: string, sourceName: string, tileID: S2CellId): void;
}
/**
 * A convenience function to convert an ID to an RGBA encoded color
 * @param id - the id to convert
 * @returns an RGBA encoded color
 */
export declare function idToRGB(id: number): ColorArray;
