export declare const PETDEX_ANIMATION_IDS: readonly ["idle", "running-right", "running-left", "waving", "jumping", "failed", "waiting", "running", "review"];
export type PetdexAnimationId = typeof PETDEX_ANIMATION_IDS[number];
export declare const PETDEX_SCHEMA: "qlogic.petdex.asset.v1";
export declare const PETDEX_VALIDATION_SCHEMA: "qlogic.petdex.validation.v1";
export declare const PETDEX_ATLAS_CONTRACT: {
    readonly format: "webp";
    readonly columns: 8;
    readonly rows: 9;
    readonly frameCount: 72;
    readonly cellWidth: 192;
    readonly cellHeight: 208;
    readonly width: 1536;
    readonly height: 1872;
};
export interface PetdexAnimation {
    row: number;
    frames: number[];
    durations: number[];
    loop: boolean;
}
export type PetdexAnimationMap = Record<PetdexAnimationId, PetdexAnimation>;
export interface PetdexAtlasManifest {
    image: "spritesheet.webp";
    format: "webp";
    columns: 8;
    rows: 9;
    frameCount: 72;
    cellWidth: 192;
    cellHeight: 208;
    width: 1536;
    height: 1872;
    sha256: string;
}
export interface PetdexAssetManifest {
    schema: typeof PETDEX_SCHEMA;
    id: string;
    name: string;
    description: string;
    createdAt: string;
    updatedAt: string;
    source: {
        kind: "upload" | "forge";
        prompt: string | null;
    };
    atlas: PetdexAtlasManifest;
    animations: PetdexAnimationMap;
    thumbnail: {
        frame: number;
    };
}
export interface PetdexAssetSummary {
    id: string;
    assetKind: "petdex";
    name: string;
    description: string;
    createdAt: string;
    updatedAt: string;
    atlas: Omit<PetdexAtlasManifest, "image"> & {
        imageUrl?: string;
    };
    sourcePrompt?: string;
}
export interface PetdexAssetValidation {
    schema: typeof PETDEX_VALIDATION_SCHEMA;
    assetId: string;
    valid: boolean;
    validatedAt: string;
    errors: string[];
    warnings: string[];
    atlas: Omit<PetdexAtlasManifest, "image">;
    animations: {
        ids: PetdexAnimationId[];
        minFrame: number;
        maxFrame: number;
    };
}
