import { OrbitCamera, OrbitCameraOptions } from './camera/OrbitCamera'; import { OrbitControllerOptions } from './controls/OrbitController'; import { Axes3DOptions } from './Axes3D'; import { Tooltip3DOptions } from './Tooltip3D'; import { Renderer3DOptions, RenderStats3D, Renderer3DEventCallback } from './types'; import { CustomThemeOptions } from './colorThemes'; export interface ImpulseSeriesData { /** X coordinates */ x: Float32Array; /** Y coordinates (top of stems) */ y: Float32Array; /** Z coordinates */ z: Float32Array; /** Base Y value (default: 0) */ baseY?: number; /** Color per point (RGB) */ colors?: Float32Array; /** Single color for all stems */ color?: [number, number, number]; } export interface Impulse3DRendererOptions extends Renderer3DOptions { camera?: OrbitCameraOptions; controls?: OrbitControllerOptions; axes?: Axes3DOptions; showAxes?: boolean; /** Stem thickness (default: 0.03) */ stemWidth?: number; /** Number of sides for cylinder (default: 6) */ stemSides?: number; /** Show marker at top of stem (default: true) */ showMarkers?: boolean; /** Marker size multiplier (default: 2) */ markerSize?: number; /** Enable tooltips (default: true) */ enableTooltip?: boolean; tooltip?: Tooltip3DOptions; /** Color theme options */ theme?: CustomThemeOptions; } export declare class Impulse3DRenderer { private canvas; private gl; private dpr; private programs; private camera; private controller; private axes; private stemVao; private stemPositionBuffer; private stemNormalBuffer; private stemColorBuffer; private stemIndexBuffer; private stemIndexCount; private markerVao; private markerPositionBuffer; private markerNormalBuffer; private markerColorBuffer; private markerIndexBuffer; private markerIndexCount; private backgroundColor; private showAxes; private stemWidth; private stemSides; private showMarkers; private markerSize; private impulseData; private bounds; private animationFrameId; private needsRender; private eventListeners; private tooltip; private enableTooltip; private lastHitIndex; private boundHandleMouseMove?; private boundHandleMouseLeave?; private lastFrameTime; private frameCount; private fps; private lastFpsUpdate; private colorTheme; constructor(options: Impulse3DRendererOptions); private handleMouseMove; private handleMouseLeave; pickAtScreen(screenX: number, screenY: number): { index: number; distance: number; point: [number, number, number]; } | null; private initBuffers; private handleResize; resize(): void; /** * Set impulse data */ setData(data: ImpulseSeriesData): void; private buildGeometry; private buildStemGeometry; private buildMarkerGeometry; private calculateBounds; /** * Fit camera to show all data */ fitToData(): void; getCanvasSize(): { width: number; height: number; }; /** * Render a single frame */ render(): void; private renderBuffers; startRenderLoop(): void; stopRenderLoop(): void; getStats(): RenderStats3D; getCamera(): OrbitCamera; getAxisLabels(): import('./Axes3D').AxisLabel3D[]; getViewProjectionMatrix(): Float32Array; projectToScreen(worldPos: [number, number, number]): { x: number; y: number; visible: boolean; }; exportImage(format?: 'png' | 'jpeg' | 'webp', quality?: number, transparent?: boolean): string; on(event: string, callback: Renderer3DEventCallback): void; off(event: string, callback: Renderer3DEventCallback): void; private emitEvent; destroy(): void; }