import { AppObject, AppObjectEntityRepo, AppObjectRepo, Vector2 } from "@vived/core";
import { Challenge } from "../../Challenge";
import { Transform3D } from "../../Transform3D";
import { LabelDropItemEntity } from "./LabelDropItemEntity";
export interface LabelDropResult {
    id: string;
    isCorrect: boolean;
}
export declare enum LabelDropDragMode {
    SCREEN = "SCREEN",
    WORLD = "WORLD"
}
export type OnLabelDropSubmissionObserver = (result: LabelDropResult) => void;
export declare abstract class LabelDropRepo extends AppObjectEntityRepo<LabelDropItemEntity> implements Challenge {
    static readonly type = "LabelDropRepo";
    readonly challengeID = "LABEL_DROP";
    name: string;
    helpHeading: string;
    consumerHelpText: string;
    authorHelpText: string;
    static LABEL_DROP_ANSWER_REQUIRED: string;
    abstract readonly dragLabelTransform: Transform3D;
    abstract readonly dragHelperTransform: Transform3D;
    abstract labelDropItemFactory(id: string): LabelDropItemEntity;
    abstract makeLabelDropItem(id?: string): LabelDropItemEntity;
    abstract deleteItem(id: string): void;
    abstract deleteAllItems(): void;
    abstract getRemainingLabelDrops: () => string[];
    abstract submitLabelDrop: (labelDropID: string, hitAppObjectID: string) => boolean;
    abstract reset: () => void;
    abstract addLabelDropSubmissionObserver(observer: OnLabelDropSubmissionObserver): void;
    abstract removeLabelDropSubmissionObserver(observer: OnLabelDropSubmissionObserver): void;
    abstract get editingID(): string | undefined;
    abstract set editingID(val: string | undefined);
    abstract get isEditingNewAnswer(): boolean;
    abstract set isEditingNewAnswer(val: boolean);
    abstract get draggingID(): string | undefined;
    abstract set draggingID(val: string | undefined);
    abstract get screenPosition(): Vector2;
    abstract set screenPosition(val: Vector2);
    abstract get dragMode(): LabelDropDragMode;
    abstract set dragMode(val: LabelDropDragMode);
    abstract get resultIsCorrect(): boolean | undefined;
    abstract set resultIsCorrect(val: boolean | undefined);
    abstract get dragAlpha(): number;
    abstract set dragAlpha(val: number);
    abstract get validationMessage(): string | null;
    static get(appObjects: AppObjectRepo): LabelDropRepo | undefined;
}
export declare function makeLabelDropRepo(appObj: AppObject): LabelDropRepo;
//# sourceMappingURL=LabelDropRepo.d.ts.map