import { Vector3 } from 'three'; import { type PropertyInfo } from './modules/filtering/PropertyManager.js'; import type { Query, QueryArgsResultMap } from './modules/queries/Query.js'; import { type TreeNode, WorldTree } from './modules/tree/WorldTree.js'; import { type Utils } from './modules/Utils.js'; import { World } from './modules/World.js'; import SpeckleRenderer from './modules/SpeckleRenderer.js'; import { Extension } from './modules/extensions/Extension.js'; import { Loader } from './modules/loaders/Loader.js'; import { type Constructor } from 'type-fest'; import type { Vector3Like } from './modules/batching/BatchObject.js'; import type { FilteringState } from './modules/extensions/FilteringExtension.js'; export type SpeckleReference = { referencedId: string; }; export type SpeckleObject = { [k: string]: unknown; speckle_type: string; id: string; elements?: SpeckleReference[]; children?: SpeckleObject[] | SpeckleReference[]; name?: string; referencedId?: string; units?: string; applicationId?: string; }; export type DataChunk = { id: string; data: number[]; references: number; processed?: boolean; }; export interface ViewerParams { showStats: boolean; environmentSrc: Asset; verbose: boolean; restrictInputToCanvas: boolean; } export declare enum AssetType { TEXTURE_8BPP = "png",// For now TEXTURE_HDR = "hdr", TEXTURE_EXR = "exr", FONT_JSON = "font-json" } export interface Asset { id: string; src: string; type: AssetType; } /** * The default HDRI the viewer uses is actually a true HDR image (.exr), * specified by the explicit TEXTURE_EXR * * We do this because bundling an actual .exr or .hdr image format would require * anybody consuming the viewer to make adjustments to their build config, to enable * its import. * * Three.js doesn't mind the extension of the asset you load, so an .exr hidden behind * a .png will work just fine. */ export declare const DefaultViewerParams: ViewerParams; export declare enum ViewerEvent { ObjectClicked = "object-clicked", ObjectDoubleClicked = "object-doubleclicked", LoadComplete = "load-complete", UnloadComplete = "unload-complete", UnloadAllComplete = "unload-all-complete", FilteringStateSet = "filtering-state-set", LightConfigUpdated = "light-config-updated" } export interface ViewerEventPayload { [ViewerEvent.ObjectClicked]: SelectionEvent | null; [ViewerEvent.ObjectDoubleClicked]: SelectionEvent | null; [ViewerEvent.LoadComplete]: string; [ViewerEvent.UnloadComplete]: string; [ViewerEvent.UnloadAllComplete]: void; [ViewerEvent.FilteringStateSet]: FilteringState; [ViewerEvent.LightConfigUpdated]: LightConfiguration; } export type SpeckleView = SpeckleObject & { origin: Vector3Like; target: Vector3Like; name?: string; upDirection?: Vector3Like; forwardDirection?: Vector3Like; }; export type SelectionEvent = { multiple: boolean; event?: PointerEvent; hits: Array<{ node: TreeNode; point: Vector3; }>; }; export interface LightConfiguration { enabled?: boolean; castShadow?: boolean; intensity?: number; color?: number; indirectLightIntensity?: number; shadowcatcher?: boolean; } export interface SunLightConfiguration extends LightConfiguration { elevation?: number; azimuth?: number; radius?: number; } export declare const DefaultLightConfiguration: SunLightConfiguration; export declare enum ObjectLayers { STREAM_CONTENT_MESH = 10, STREAM_CONTENT_LINE = 11, STREAM_CONTENT_POINT = 12, STREAM_CONTENT_TEXT = 13, STREAM_CONTENT_POINT_CLOUD = 14, NONE = 0, STREAM_CONTENT = 1, PROPS = 2, SHADOWCATCHER = 3, OVERLAY = 4, MEASUREMENTS = 5 } export declare enum UpdateFlags { RENDER = 1, SHADOWS = 2, CLIPPING_PLANES = 4, RENDER_RESET = 8 } export interface MaterialOptions { stencilOutlines?: StencilOutlineType; pointSize?: number; depthWrite?: number; } export declare enum StencilOutlineType { NONE = 0, OVERLAY = 1, OUTLINE_ONLY = 2 } export interface IViewer { get Utils(): Utils; get World(): World; init(): Promise; resize(): void; on(eventType: T, handler: (arg: ViewerEventPayload[T]) => void): void; requestRender(flags?: UpdateFlags): void; setLightConfiguration(config: LightConfiguration): void; getViews(): SpeckleView[]; loadObject(loader: Loader, zoomToObject?: boolean): Promise; cancelLoad(url: string, unload?: boolean): Promise; unloadObject(url: string): Promise; unloadAll(): Promise; screenshot(): Promise; getObjectProperties(resourceURL?: string, bypassCache?: boolean): Promise; /** Data ops */ getWorldTree(): WorldTree; query(query: T): QueryArgsResultMap[T['operation']] | null; getRenderer(): SpeckleRenderer; getContainer(): HTMLElement; getCanvas(): HTMLCanvasElement; createExtension(type: Constructor): T; getExtension(type: Constructor): T; hasExtension(type: Constructor): boolean; dispose(): void; }