export type ConnectorVec3 = readonly [number, number, number]; export interface ConnectorSocket { id: string; type: string; offset: ConnectorVec3; accepts?: readonly string[]; } export interface ConnectorPieceDef { kind: string; sockets: readonly ConnectorSocket[]; } export interface PlacedPiece { id: string; kind: string; position: ConnectorVec3; rotationY: number; } export interface WorldSocket { pieceId: string; socket: ConnectorSocket; position: ConnectorVec3; } export interface SnapResult { socketId: string; targetPieceId: string; targetSocketId: string; position: ConnectorVec3; rotationY: number; distance: number; } export interface SnapOptions { snapDistance?: number; rotationY?: number; } export declare function socketsCompatible(a: ConnectorSocket, b: ConnectorSocket): boolean; export declare function socketWorldPosition(socket: ConnectorSocket, origin: ConnectorVec3, rotationY: number): ConnectorVec3; export declare function worldSockets(def: ConnectorPieceDef, piece: PlacedPiece): WorldSocket[]; export type ConnectorRegistry = (kind: string) => ConnectorPieceDef | null; export declare function collectWorldSockets(registry: ConnectorRegistry, pieces: readonly PlacedPiece[]): WorldSocket[]; export declare function snapToNearest(registry: ConnectorRegistry, placed: readonly PlacedPiece[], movingDef: ConnectorPieceDef, cursor: ConnectorVec3, options?: SnapOptions): SnapResult | null;