import * as THREE from 'three'; /** * Misc collection of types not specific to any XR Blocks module. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export type Constructor = new (...args: any[]) => T; export type ShaderUniforms = { [uniform: string]: THREE.IUniform; }; /** * Defines the structure for a shader object compatible with PanelMesh, * requiring uniforms, a vertex shader, and a fragment shader. */ export interface Shader { uniforms: ShaderUniforms; vertexShader: string; fragmentShader: string; defines?: {[key: string]: unknown}; } /** * A recursive readonly type. */ /* eslint-disable @typescript-eslint/no-explicit-any */ export type DeepReadonly = T extends (...args: any[]) => any ? T : T extends object ? {readonly [P in keyof T]: DeepReadonly} : T; /* eslint-enable @typescript-eslint/no-explicit-any */ /** * A recursive partial type. */ /* eslint-disable @typescript-eslint/no-explicit-any */ export type DeepPartial = T extends (...args: any[]) => any ? T : T extends object ? { [P in keyof T]?: DeepPartial; } : T; /* eslint-enable @typescript-eslint/no-explicit-any */