/**
 * @typedef {object} RangeEntry Represents a location of a vertex subset
 * @prop {number} offset in vertices
 * @prop {number} count in vertices
 * @prop {import("../utils/binnedIndex.js").Lookup} xIndex
 */
export class GeometryBuilder {
    /**
     * @typedef {import("./arrayBuilder.js").ConverterMetadata} Converter
     * @typedef {import("../types/encoder.js").Encoder} Encoder
     */
    /**
     * @param {object} object
     * @param {Record<import("../spec/channel.js").Channel, Encoder>} object.encoders
     * @param {string[]} [object.attributes]
     * @param {number} [object.numVertices] If the number of data items is known, a
     *      preallocated TypedArray is used
     */
    constructor({ encoders, numVertices, attributes }: {
        encoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
        attributes?: string[];
        numVertices?: number;
    });
    encoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
    variableEncoders: Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>;
    allocatedVertices: number;
    variableBuilder: ArrayBuilder;
    /** @type {Partial<Record<import("../spec/channel.js").Channel, string>>} */
    attributeNames: Partial<Record<import("../spec/channel.js").Channel, string>>;
    xIndexConfig: {
        domain: [number, number];
        xAttributeName: string;
        x2AttributeName: string;
    };
    lastOffset: number;
    /** @type {Map<any, RangeEntry>} keep track of facet locations within the vertex array */
    rangeMap: Map<any, RangeEntry>;
    /**
     * Must be called at the end of `addBatch`
     *
     * @param {any} key
     */
    registerBatch(key: any): void;
    /**
     * @param {Map<any, object[]>} batches
     */
    addBatches(batches: Map<any, object[]>): void;
    /**
     * @param {any} key The facet id, for example
     * @param {object[]} data
     */
    addBatch(key: any, data: object[], lo?: number, hi?: number): void;
    /**
     * Builds the x-domain lookup for the current batch if x indexing is enabled.
     *
     * @param {number} startVertexIndex
     * @param {number} endVertexIndex
     * @returns {import("../utils/binnedIndex.js").Lookup | undefined}
     */
    createXIndex(startVertexIndex: number, endVertexIndex: number): import("../utils/binnedIndex.js").Lookup | undefined;
    toArrays(): {
        /** @type {Record<string, {data: Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array, numComponents: number, divisor?: number}>} */
        arrays: Record<string, {
            data: Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array;
            numComponents: number;
            divisor?: number;
        }>;
        /** Number of vertices used */
        vertexCount: number;
        /** Number of vertices allocated in buffers */
        allocatedVertices: number;
        rangeMap: Map<any, RangeEntry>;
    };
}
export class RectVertexBuilder extends GeometryBuilder {
    /**
     *
     * @param {Object} object
     * @param {Record<string, Encoder>} object.encoders
     * @param {string[]} object.attributes
     * @param {number} [object.numItems] Number of data items
     */
    constructor({ encoders, attributes, numItems }: {
        encoders: Record<string, import("../types/encoder.js").Encoder>;
        attributes: string[];
        numItems?: number;
    });
    pushAllSixTimes: any;
}
export class RuleVertexBuilder extends GeometryBuilder {
    /**
     *
     * @param {Object} object
     * @param {Record<string, Encoder>} object.encoders
     * @param {string[]} object.attributes
     * @param {number} [object.tessellationThreshold]
     *     If the rule is wider than the threshold, tessellate it into pieces
     * @param {number[]} [object.visibleRange]
     * @param {number} [object.numItems] Number of data items
     */
    constructor({ encoders, attributes, tessellationThreshold, visibleRange, numItems, }: {
        encoders: Record<string, import("../types/encoder.js").Encoder>;
        attributes: string[];
        tessellationThreshold?: number;
        visibleRange?: number[];
        numItems?: number;
    });
    visibleRange: number[];
    tessellationThreshold: number;
    updateSide: (arg0: number | number[]) => any;
    updatePos: (arg0: number | number[]) => any;
}
export class PointVertexBuilder extends GeometryBuilder {
    /**
     *
     * @param {object} object
     * @param {Record<string, Encoder>} object.encoders
     * @param {string[]} object.attributes
     * @param {number} [object.numItems] Number of points if known, uses TypedArray
     */
    constructor({ encoders, attributes, numItems }: {
        encoders: Record<string, import("../types/encoder.js").Encoder>;
        attributes: string[];
        numItems?: number;
    });
}
export class LinkVertexBuilder extends GeometryBuilder {
    /**
     * @param {object} object
     * @param {Record<string, Encoder>} object.encoders
     * @param {string[]} object.attributes
     * @param {number} [object.numItems ] Number of points if known, uses TypedArray
     */
    constructor({ encoders, attributes, numItems }: {
        encoders: Record<string, import("../types/encoder.js").Encoder>;
        attributes: string[];
        numItems?: number;
    });
}
export class TextVertexBuilder extends GeometryBuilder {
    /**
     *
     * @param {object} object
     * @param {Record<string, Encoder>} object.encoders
     * @param {string[]} object.attributes
     * @param {import("../fonts/bmFontMetrics.js").BMFontMetrics} object.fontMetrics
     * @param {Record<string, any>} object.properties
     * @param {number} [object.numCharacters] number of characters
     * @param {boolean} [object.logoLetters]
     */
    constructor({ encoders, attributes, fontMetrics, properties, numCharacters, }: {
        encoders: Record<string, import("../types/encoder.js").Encoder>;
        attributes: string[];
        fontMetrics: import("../fonts/bmFontMetrics.js").BMFontMetrics;
        properties: Record<string, any>;
        numCharacters?: number;
        logoLetters?: boolean;
    });
    metadata: import("../fonts/bmFontMetrics.js").BMFontMetrics;
    metrics: import("../fonts/bmFontMetrics.js").BMFontMetrics;
    properties: Record<string, any>;
    /** @type {(value: any) => string} */
    numberFormat: (value: any) => string;
    updateVertexCoord: (arg0: number | number[]) => any;
    updateTextureCoord: (arg0: number | number[]) => any;
    updateWidth: (arg0: number | number[]) => any;
}
/**
 * Represents a location of a vertex subset
 */
export type RangeEntry = {
    /**
     * in vertices
     */
    offset: number;
    /**
     * in vertices
     */
    count: number;
    xIndex: import("../utils/binnedIndex.js").Lookup;
};
import ArrayBuilder from "./arrayBuilder.js";
//# sourceMappingURL=dataToVertices.d.ts.map