import { AllFloatTypes, AllIntTypes, AllSignedTypes, AllValueTypes, BaseType, BoolTypes, FloatTypes, IntTypes, SignedTypes, UintTypes, ValueTypes } from './types'; export type AddOutput = BaseType & (A extends B ? A : A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : A extends "float" ? B extends AllFloatTypes ? B : never : B extends "float" ? A extends AllFloatTypes ? A : never : never); export type SubOutput = AddOutput; export type MulOutput = BaseType & (A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : A extends "float" ? B extends AllFloatTypes ? B : never : B extends "float" ? A extends AllFloatTypes ? A : never : A extends IntTypes ? B extends A ? A : never : B extends IntTypes ? A extends B ? A : never : A extends UintTypes ? B extends A ? A : never : B extends UintTypes ? A extends B ? A : never : A extends "vec2" ? B extends "vec2" | "mat2" | "mat2x2" ? "vec2" : B extends "mat3x2" ? "vec3" : B extends "mat4x2" ? "vec4" : never : A extends "vec3" ? B extends "mat2x3" ? "vec2" : B extends "vec3" | "mat3" | "mat3x3" ? "vec3" : B extends "mat4x3" ? "vec4" : never : A extends "vec4" ? B extends "mat2x4" ? "vec2" : B extends "mat3x4" ? "vec3" : B extends "vec4" | "mat4" | "mat4x4" ? "vec4" : never : B extends "vec2" ? A extends "mat2" | "mat2x2" ? "vec2" : A extends "mat2x3" ? "vec3" : A extends "mat2x4" ? "vec4" : never : B extends "vec3" ? A extends "mat3x2" ? "vec2" : A extends "mat3" | "mat3x3" ? "vec3" : A extends "mat3x4" ? "vec4" : never : B extends "vec4" ? A extends "mat4x2" ? "vec2" : A extends "mat4x3" ? "vec3" : A extends "mat4" | "mat4x4" ? "vec4" : never : A extends "mat2" | "mat2x2" ? B extends "mat2" | "mat2x2" ? "mat2" : B extends "mat3x2" ? "mat3x2" : B extends "mat4x2" ? "mat4x2" : never : A extends "mat2x3" ? B extends "mat2" | "mat2x2" ? "mat2x3" : B extends "mat3x2" ? "mat3" : B extends "mat4x2" ? "mat4x3" : never : A extends "mat2x4" ? B extends "mat2" | "mat2x2" ? "mat2x4" : B extends "mat3x2" ? "mat3x4" : B extends "mat4x2" ? "mat4" : never : A extends "mat3x2" ? B extends "mat2x3" ? "mat2" : B extends "mat3" | "mat3x3" ? "mat3x2" : B extends "mat4x3" ? "mat4x2" : never : A extends "mat3" | "mat3x3" ? B extends "mat2x3" ? "mat2x3" : B extends "mat3" | "mat3x3" ? "mat3" : B extends "mat4x3" ? "mat4x3" : never : A extends "mat3x4" ? B extends "mat2x3" ? "mat2x4" : B extends "mat3" | "mat3x3" ? "mat3x4" : B extends "mat4x3" ? "mat4" : never : A extends "mat4x2" ? B extends "mat2x4" ? "mat2" : B extends "mat3x4" ? "mat3x2" : B extends "mat4" | "mat4x4" ? "mat4x2" : never : A extends "mat4x3" ? B extends "mat2x4" ? "mat2x3" : B extends "mat3x4" ? "mat3" : B extends "mat4" | "mat4x4" ? "mat4x3" : never : A extends "mat4" | "mat4x4" ? B extends "mat2x4" ? "mat2x4" : B extends "mat3x4" ? "mat3x4" : B extends "mat4" | "mat4x4" ? "mat4" : never : never); export type DivOutput = AddOutput; export type IModOutput = BaseType & (A extends B ? A : A extends "int" ? B extends IntTypes ? B : never : B extends "int" ? A extends IntTypes ? A : never : A extends "uint" ? B extends UintTypes ? B : never : B extends "uint" ? A extends UintTypes ? A : never : never); export type ModOutput = BaseType & (A extends B ? A : B extends "float" ? A : never); export type PowOutput = BaseType & (A extends B ? A : never); export type MinOutput = BaseType & (A extends B ? A : B extends "float" ? A extends FloatTypes ? A : never : B extends "int" ? A extends IntTypes ? A : never : B extends "uint" ? A extends UintTypes ? A : never : never); export type MaxOutput = MinOutput; export type ClampOutput = BaseType & (B extends "float" ? A extends FloatTypes ? A : never : B extends "int" ? A extends IntTypes ? A : never : B extends "uint" ? A extends UintTypes ? A : never : never); export type MixOutput = BaseType & (T extends A ? A : T extends "float" ? A : T extends "bool" ? A extends "float" ? A : never : T extends "bvec2" ? A extends "vec2" ? A : never : T extends "bvec3" ? A extends "vec3" ? A : never : T extends "bvec4" ? A extends "vec4" ? A : never : never); export type StepOutput = BaseType & (A extends B ? B : A extends "float" ? B : never); export type SmoothstepOutput = BaseType & (A extends B ? (A extends C ? C : A extends "float" ? C : never) : never); export type IsNanOutput = BaseType & (A extends "float" ? "bool" : A extends "vec2" ? "bvec2" : A extends "vec3" ? "bvec3" : A extends "vec4" ? "bvec4" : never); export type IsInfOutput = IsNanOutput; export declare function addOutputType(a: A, b: B, operation?: string): AddOutput; export declare function subOutputType(a: A, b: B): SubOutput; export declare function mulOutputType(a: A, b: B): MulOutput; export declare function divOutputType(a: A, b: B): DivOutput; export declare function imodOutputType(a: A, b: B): IModOutput; export declare function modOutputType(a: A, b: B): ModOutput; export declare function modfOutputType(a: A): A; export declare function negOutputType(a: A): A; export declare function absOutputType(a: A): A; export declare function signOutputType(a: A): A; export declare function floorOutputType(a: A): A; export declare function ceilOutputType(a: A): A; export declare function truncOutputType(a: A): A; export declare function roundOutputType(a: A): A; export declare function fractOutputType(a: A): A; export declare function powOutputType(a: A): A; export declare function expOutputType(a: A): A; export declare function exp2OutputType(a: A): A; export declare function logOutputType(a: A): A; export declare function log2OutputType(a: A): A; export declare function sqrOutputType(a: A): A; export declare function sqrtOutputType(a: A): A; export declare function inversesqrtOutputType(a: A): A; export declare function minOutputType(a: A, b: B, operation?: string): MinOutput; export declare function maxOutputType(a: A, b: B): MaxOutput; export declare function clampOutputType(a: A, b: B, _c: B): ClampOutput; export declare function mixOutputType(a: A, b: A, c: C): MixOutput; export declare function stepOutputType(a: A, b: B): StepOutput; export declare function smoothstepOutputType(a: A, b: B, c: C): SmoothstepOutput; export declare function isNanOutputType(a: A, operation?: string): IsNanOutput; export declare function isInfOutputType(a: A): IsInfOutput;