export interface LayerParamChangeEvent extends CustomEvent {
    detail: {
        id: string;
        value: boolean | string | number | ColorResult;
    };
}
export type LayerEvent = "layer:play" | "layer:pause" | "layer:reset" | "layer:preview" | "layer:parameters" | "layer:paramchange";
export type ParameterOption = {
    value: string;
    label?: string;
};
export type Parameter = NumberParameter | BooleanParameter | ColorParameter | ListParameter | HashParameter;
export type BaseParameter = {
    id: string;
    name: string;
    kind: "NUMBER" | "BOOLEAN" | "COLOR" | "LIST" | "HASH";
    description?: string;
    customization_level?: "ARTIST" | "CURATOR" | "VIEWER";
    default?: any;
};
export type ColorParameter = BaseParameter & {
    kind: "COLOR";
    default?: string;
};
export type BooleanParameter = BaseParameter & {
    kind: "BOOLEAN";
    default?: boolean;
};
export type NumberParameter = BaseParameter & {
    kind: "NUMBER";
    min?: number | string;
    max?: number | string;
    step?: number | string;
    default?: number | string;
};
export type ListParameter = BaseParameter & {
    kind: "LIST";
    options: Array<ParameterOption | string>;
    default?: string;
};
export type HashParameter = BaseParameter & {
    kind: "HASH";
    default?: string;
    minLength?: number;
    maxLength?: number;
    pattern?: "BASE64" | "HEX" | "ALPHABETICAL" | "ALPHANUMERIC";
};
export interface ColorResult {
    readonly rgb: [number, number, number] | null;
    readonly hsl: [number, number, number] | null;
    readonly hex: string | null;
}
export type LayerSDK = {
    canvas: HTMLCanvasElement | null;
    previewEnabled: boolean;
    debug: boolean;
    readonly uuid: string;
    readonly width: number;
    readonly height: number;
    readonly prng: () => number;
    readonly controlled: boolean;
    readonly parameters: Readonly<Record<string, boolean | string | number | ColorResult>>;
    params(...params: Parameter[]): Promise<LayerSDK["parameters"]>;
    preview(video: Blob, thumbnail?: Blob): LayerSDK;
    registerCanvas(canvasElement: HTMLCanvasElement): LayerSDK;
    startFPSOverlay(targetFPS?: number, fill?: boolean): LayerSDK;
    stopFPSOverlay(): LayerSDK;
};
