export type VoxelCoord = readonly [number, number, number]; export type VoxelFace = "px" | "nx" | "py" | "ny" | "pz" | "nz"; export interface VoxelFieldConfig { chunkSize?: number; } export interface VoxelCell { x: number; y: number; z: number; type: T; } export interface VoxelHit { x: number; y: number; z: number; type: T; face: VoxelFace; adjacent: VoxelCoord; distance: number; } export interface VoxelBounds { min: VoxelCoord; max: VoxelCoord; } export interface VoxelFieldSummary { blocks: number; types: Record; bounds: VoxelBounds | null; } export interface VoxelField { set(x: number, y: number, z: number, type: T): boolean; remove(x: number, y: number, z: number): boolean; get(x: number, y: number, z: number): T | null; has(x: number, y: number, z: number): boolean; fill(min: VoxelCoord, max: VoxelCoord, type: T): number; clear(): void; count(): number; cells(): IterableIterator>; bounds(): VoxelBounds | null; neighbors(x: number, y: number, z: number): VoxelCell[]; exposedFaces(x: number, y: number, z: number): readonly VoxelFace[]; raycast(origin: VoxelCoord, direction: VoxelCoord, maxDistance: number): VoxelHit | null; chunkOf(x: number, y: number, z: number): { cx: number; cy: number; cz: number; }; chunkVersion(cx: number, cy: number, cz: number): number; subscribe(listener: () => void): () => void; summary(): VoxelFieldSummary; } export declare const VOXEL_FACES: readonly VoxelFace[]; export declare const VOXEL_FACE_NORMALS: Record; export declare function createVoxelField(config?: VoxelFieldConfig): VoxelField;