/** * Type declarations for SenangWebs Kiln. * * This library is browser-only: it accesses `window` at import time and * renders with WebGL. Do not import it in Node/SSR environments. */ export interface SWKConfig { container?: HTMLElement | string; width?: string; height?: string; viewport?: { background?: string | number; }; grid?: { show?: boolean; size?: number; divisions?: number; centerColor?: string; linesColor?: string; }; camera?: { mode?: "perspective" | "orthographic"; position?: { x?: number; y?: number; z?: number }; }; history?: { enabled?: boolean; maxSize?: number; }; ui?: { enabled?: boolean; panels?: { shapes?: boolean; properties?: boolean; outliner?: boolean; controls?: boolean; }; }; features?: { export?: boolean; grouping?: boolean; undo?: boolean; }; transform?: { mode?: "translate" | "rotate" | "scale"; snap?: boolean; snapUnit?: number; }; callbacks?: { onObjectAdded?: (object: unknown) => void; onObjectRemoved?: (object: unknown) => void; onSelectionChanged?: (selected: unknown[], deselected: unknown[]) => void; onGroupCreated?: (container: unknown) => void; onGroupRemoved?: (container: unknown) => void; }; [key: string]: unknown; } export interface ExportFormat { format: "gltf" | "glb" | "stl"; name: string; extension: string; binary: boolean; } export interface ExportOptions { binary?: boolean; filename?: string; } export interface GroupStats { totalGroups: number; groups: Array<{ id: string; name: string; childCount: number }>; } export interface HistoryStats { canUndo: boolean; canRedo: boolean; undoCount: number; redoCount: number; [key: string]: unknown; } export default class SWK { constructor(selector: HTMLElement | string, options?: SWKConfig); // Lifecycle destroy(): void; readonly initialized: boolean; // Scene access getScene(): unknown; getRenderer(): unknown; getCamera(): unknown; setBackground(color: string | number): void; // Camera setCameraMode(mode: "perspective" | "orthographic"): void; getCameraMode(): string | null; resetCamera(): void; setCameraView(viewName: string): void; // Objects addShape( type: string, options?: Record ): unknown | null; getAllObjects(): unknown[]; deleteObject(mesh?: unknown): boolean; duplicateObject(mesh?: unknown): unknown | unknown[] | null; clearScene(skipCapture?: boolean): void; // Selection selectObject(mesh: unknown): void; deselectAll(): void; getSelectedObjects(): unknown[]; getSelectedObject(): unknown | null; // Transform setTransformMode(mode: "translate" | "rotate" | "scale"): void; getTransformMode(): string | null; setTransformSpace(space: "world" | "local"): void; getTransformSpace(): string | null; setSnapUnit(value: number): void; getSnapUnit(): number; toggleSnap(): void; // Grouping groupSelected(): unknown | null; ungroupSelected(): unknown[] | null; isGrouped(object: unknown): boolean; isGroupContainer(object: unknown): boolean; getAllGroups(): Array>; getGroupChildren(groupContainer: unknown): unknown[]; // History captureState(description?: string): boolean; undo(): boolean; redo(): boolean; canUndo(): boolean; canRedo(): boolean; getHistoryStats(): HistoryStats | null; clearHistory(): void; // Export / import exportGLTF(options?: ExportOptions): Promise; exportGLB(options?: ExportOptions): Promise; exportSTL(options?: ExportOptions): Promise; exportSelected(format?: "gltf" | "glb" | "stl", options?: ExportOptions): Promise; exportJSON(options?: { filename?: string }): Promise; importJSON(source: string | object | File): Promise; getAvailableExportFormats(): ExportFormat[]; // Events (EventEmitter-style) on(event: string, listener: (...args: any[]) => void): this; off(event: string, listener: (...args: any[]) => void): this; once(event: string, listener: (...args: any[]) => void): this; /** * Initialize editors for all [data-swk] elements in the document. * Available after the module has loaded (script must run after DOM is * ready or be loaded with `defer`). */ static autoInit(): SWK[]; }