import { HNode, Pointlight, Spotlight, Scale3, Vec3, Color } from '@hiberworld/code-kit';
import { DURATION } from './constants';
export type Primitive = string | boolean | number;
export type DeepPartial<K> = {
    [attr in keyof K]?: K[attr] extends Array<unknown> | Primitive ? K[attr] : DeepPartial<K[attr]>;
};
export type Merge<T> = {
    [P in keyof T]: T[P];
};
export type OptionalButKeys<T, K = keyof T> = Merge<Partial<T> & {
    [P in keyof T as P extends K ? P : never]-?: T[P];
}>;
export type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & DeepPartial<Pick<Type, Key>>;
export type DefaultOptions = {
    p: Vec3;
    r: Vec3;
    s: Scale3;
    name?: string;
    seed?: number;
    children?: HNode[];
};
export interface IDefaultOptions {
    p: Vec3;
    r: Vec3;
    s: Scale3;
    name?: string;
    seed?: number;
    children?: HNode[];
}
export interface IPointlightOptions extends Partial<IDefaultOptions>, Partial<Omit<Pointlight, 'color'>> {
    name?: string;
    seed?: number;
    color?: Color;
    children?: HNode[];
}
export interface ISpotlightOptions extends Partial<IDefaultOptions>, Partial<Omit<Spotlight, 'color'>> {
    color: Color;
    strength: number;
    radius: number;
    size: number;
    offset: Vec3;
}
export type Duration = keyof typeof DURATION;
//# sourceMappingURL=types.d.ts.map