import type { Shape } from '../shape'; export interface PluginManager { register(plugin: Plugin): void; unregister(name: string): void; getPlugin(name: string): Plugin | undefined; getAllPlugins(): Plugin[]; executeHook(hookName: string, ...args: any[]): T | undefined; addHook(hookName: string, callback: Function): void; removeHook(hookName: string, callback: Function): void; loadPlugin(plugin: Plugin): Promise; loadPluginFromPath(path: string): Promise; loadPluginFromNpm(packageName: string): Promise; isPluginEnabled(name: string): boolean; setPluginEnabled(name: string, enabled: boolean): void; } export interface Plugin { name: string; version: string; description?: string; author?: string; dependencies?: string[]; initialize?(manager: PluginManager): void | Promise; activate?(): void | Promise; deactivate?(): void | Promise; primitives?: Record; transforms?: Record; fileHandlers?: FileHandler[]; scadFunctions?: Record; viewportExtensions?: ViewportExtension[]; } export interface PrimitiveFunction { (...args: any[]): Shape; } export interface TransformFunction { (shape: Shape, ...args: any[]): Shape; } export interface FileHandler { name: string; extensions: string[]; import?: (data: string | ArrayBuffer) => Shape | Promise; export?: (shape: Shape) => string | ArrayBuffer | Promise; } export interface SCADFunction { (...args: any[]): any; } export interface ViewportExtension { name: string; type: 'renderer' | 'control' | 'effect' | 'ui'; initialize?(viewport: any): void; render?(context: any): void; cleanup?(): void; } export interface PluginConfig { enabled: boolean; priority: number; settings?: Record; } export interface PluginHook { name: string; priority: number; callback: Function; } export type HookName = 'shape.create' | 'shape.create.after' | 'transform.apply' | 'transform.apply.after' | 'geometry.compute' | 'geometry.compute.after' | 'file.import' | 'file.import.after' | 'file.export' | 'file.export.after' | 'scad.parse' | 'scad.parse.after' | 'scad.evaluate' | 'scad.evaluate.after' | 'viewport.render' | 'viewport.render.after' | 'plugin.register' | 'plugin.unregister'; //# sourceMappingURL=types.d.ts.map