import type { IframeMessenger } from "../iframe-messenger.js";
import { ElementColorApi } from "./element-colors.js";
import { RenderGeojsonApi } from "./renderGeoJson.js";
import { RenderGlbApi } from "./renderGlb.js";
/**
 * Flattened list of a standard 4x4 affine transform matrix in column-major order.
 * Translation values use metres as unit.
 * */
export type Transform = [
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number,
    number
];
/**
 * Data format for generic triangulated mesh geometry.
 */
export type GeometryData = {
    /** A flat array of x,y,z vertices. Each x,y,z tuple is know as a vertex. */
    position: Float32Array;
    /** The UV used for texture mapping for each vertex. Should be given as a u,v pair for each x,y,z position */
    uv?: Float32Array | undefined;
    /** A normal vector for each vertex */
    normal?: Float32Array | undefined;
    /** Flattened indexes for reusing vertices across triangles. Each three indices represents a triangle */
    index?: number[] | undefined;
    /** A flat list of r,g,b,a color per vertices. Each x,y,z tuple has a coorresponding r,g,b,a value. */
    color?: Uint8Array | undefined;
};
/**
 * Render or color objects and elements in the 3D scene.
 *
 * These APIs will only do visual changes to the proposal while extension is open.
 * None of the changes will be saved to the proposal. And when the extension is
 * closed we automatically clean up all changes made by these APIs.
 *
 * @remarks
 * Available via {@link auto.Forma | Forma}.{@link index.EmbeddedViewSdk.render | render}.
 */
export declare class RenderApi {
    #private;
    glb: RenderGlbApi;
    geojson: RenderGeojsonApi;
    elementColors: ElementColorApi;
    /** @hidden */
    constructor(iframeMessenger: IframeMessenger);
    /**
     * Hide an element from the scene.
     *
     * @example
     * await Forma.render.hideElement({ path: "root/myElementPath" })
     */
    hideElement(request: {
        path: string;
    }): Promise<void>;
    /**
     * Hide a set of elements from the scene.
     *
     * @example
     * await Forma.render.hideElementsBatch({ paths: ["root/myElement1", "root/myElement2"] })
     */
    hideElementsBatch(request: {
        paths: string[];
    }): Promise<void>;
    /**
     * Unhide an element from the scene.
     *
     * @example
     * await Forma.render.unhideElement({ path: "root/myElementPath" })
     */
    unhideElement(request: {
        path: string;
    }): Promise<void>;
    /**
     * Unhide a set of elements from the scene.
     *
     * @example
     * await Forma.render.unhideElementsBatch({ paths: ["root/myElement1", "root/myElement2"] })
     */
    unhideElementsBatch(request: {
        paths: string[];
    }): Promise<void>;
    /**
     * Hides or unhides elements from the scene based on the `visible` parameter for each path.
     *
     * @example
     * await Forma.render.setElementsVisibility( { [ { "root/myElement1", true}, { "root/myElement2", false} ] } )
     */
    setElementsVisibility(request: {
        paths: {
            path: string;
            visible: boolean;
        }[];
    }): Promise<void>;
    /**
     * Unhide all elements added by the hideElements function of this API from the scene.
     *
     * Called automatically when the extension is unloaded.
     *
     * @example
     * await Forma.render.unhideAllElements()
     */
    unhideAllElements(): Promise<void>;
    /**
     * Add a mesh to the scene.
     *
     * @returns Unique identifier of the mesh object in the scene.
     *
     * @example
     * const {id} = await Forma.render.addMesh({ geometryData }),
     */
    addMesh(request: {
        /** Data describing the mesh to be added. */
        geometryData: GeometryData;
        /** Transform to position the element relative to the project reference point. Defaults to identity matrix. */
        transform?: Transform | undefined;
    }): Promise<{
        id: string;
    }>;
    /**
     * Upsert an mesh in the scene. If the mesh does not exist, it will be added.
     *
     * @example
     * await Forma.render.updateMesh({ id: "myPreviouslyAddedGlbId", geometryData })
     */
    updateMesh(request: {
        /** Scene identifier of the mesh object to update. */
        id: string;
        /** Updated data describing the mesh. */
        geometryData: GeometryData;
        /** Updated transform to apply. */
        transform?: Transform | undefined;
    }): Promise<void>;
    /**
     * Remove an existing mesh from the scene.
     *
     * @example
     * await Forma.render.remove({ id: "myPreviouslyAddedMeshId" })
     */
    remove(request: {
        /** Scene identifier of the mesh object to remove. */
        id: string;
    }): Promise<void>;
    /**
     * Remove all meshes added by this API from the scene.
     *
     * Called automatically when the extension is unloaded.
     *
     * @example
     * await Forma.render.cleanup()
     */
    cleanup(): Promise<void>;
}
