import { control, Destructor } from '@synnaxlabs/x';
import { z } from 'zod';
import { aether } from '../../../aether/aether';
import { StateProvider } from './state';
export declare const legendStateZ: z.ZodObject<{
    needsControlOf: z.ZodArray<z.ZodNumber, "many">;
    states: z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
        subject: z.ZodObject<{
            name: z.ZodString;
            key: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            key: string;
            name: string;
        }, {
            key: string;
            name: string;
        }>;
        resource: z.ZodNumber;
        authority: z.ZodUnion<[z.ZodType<control.Authority, z.ZodTypeDef, control.Authority>, z.ZodEffects<z.ZodNumber, control.Authority, number>, z.ZodEffects<z.ZodType<Number, z.ZodTypeDef, Number>, control.Authority, Number>]>;
    }, {
        subjectColor: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodType<import('../../../color/external').Color, z.ZodTypeDef, import('../../../color/external').Color>, z.ZodObject<{
            rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
        }, "strip", z.ZodTypeAny, {
            rgba255: [number, number, number, number];
        }, {
            rgba255: [number, number, number, number];
        }>]>, import('../../../color/external').Color, string | [number, number, number, number] | {
            rgba255: [number, number, number, number];
        } | import('../../../color/external').Color | [number, number, number]>;
    }>, "strip", z.ZodTypeAny, {
        resource: number;
        authority: control.Authority;
        subjectColor: import('../../../color/external').Color;
        subject: {
            key: string;
            name: string;
        };
    }, {
        resource: number;
        authority: number | Number | control.Authority;
        subjectColor: string | [number, number, number, number] | {
            rgba255: [number, number, number, number];
        } | import('../../../color/external').Color | [number, number, number];
        subject: {
            key: string;
            name: string;
        };
    }>, "many">;
}, "strip", z.ZodTypeAny, {
    needsControlOf: number[];
    states: {
        resource: number;
        authority: control.Authority;
        subjectColor: import('../../../color/external').Color;
        subject: {
            key: string;
            name: string;
        };
    }[];
}, {
    needsControlOf: number[];
    states: {
        resource: number;
        authority: number | Number | control.Authority;
        subjectColor: string | [number, number, number, number] | {
            rgba255: [number, number, number, number];
        } | import('../../../color/external').Color | [number, number, number];
        subject: {
            key: string;
            name: string;
        };
    }[];
}>;
interface InternalState {
    stateProv: StateProvider;
    disconnectStateProv?: Destructor;
}
export declare class Legend extends aether.Leaf<typeof legendStateZ, InternalState> {
    static readonly TYPE = "Legend";
    schema: z.ZodObject<{
        needsControlOf: z.ZodArray<z.ZodNumber, "many">;
        states: z.ZodArray<z.ZodObject<z.objectUtil.extendShape<{
            subject: z.ZodObject<{
                name: z.ZodString;
                key: z.ZodString;
            }, "strip", z.ZodTypeAny, {
                key: string;
                name: string;
            }, {
                key: string;
                name: string;
            }>;
            resource: z.ZodNumber;
            authority: z.ZodUnion<[z.ZodType<control.Authority, z.ZodTypeDef, control.Authority>, z.ZodEffects<z.ZodNumber, control.Authority, number>, z.ZodEffects<z.ZodType<Number, z.ZodTypeDef, Number>, control.Authority, Number>]>;
        }, {
            subjectColor: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodType<import('../../../color/external').Color, z.ZodTypeDef, import('../../../color/external').Color>, z.ZodObject<{
                rgba255: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
            }, "strip", z.ZodTypeAny, {
                rgba255: [number, number, number, number];
            }, {
                rgba255: [number, number, number, number];
            }>]>, import('../../../color/external').Color, string | [number, number, number, number] | {
                rgba255: [number, number, number, number];
            } | import('../../../color/external').Color | [number, number, number]>;
        }>, "strip", z.ZodTypeAny, {
            resource: number;
            authority: control.Authority;
            subjectColor: import('../../../color/external').Color;
            subject: {
                key: string;
                name: string;
            };
        }, {
            resource: number;
            authority: number | Number | control.Authority;
            subjectColor: string | [number, number, number, number] | {
                rgba255: [number, number, number, number];
            } | import('../../../color/external').Color | [number, number, number];
            subject: {
                key: string;
                name: string;
            };
        }>, "many">;
    }, "strip", z.ZodTypeAny, {
        needsControlOf: number[];
        states: {
            resource: number;
            authority: control.Authority;
            subjectColor: import('../../../color/external').Color;
            subject: {
                key: string;
                name: string;
            };
        }[];
    }, {
        needsControlOf: number[];
        states: {
            resource: number;
            authority: number | Number | control.Authority;
            subjectColor: string | [number, number, number, number] | {
                rgba255: [number, number, number, number];
            } | import('../../../color/external').Color | [number, number, number];
            subject: {
                key: string;
                name: string;
            };
        }[];
    }>;
    afterUpdate(): Promise<void>;
    afterDelete(): Promise<void>;
    render(): Promise<void>;
}
export {};
//# sourceMappingURL=legend.d.ts.map