import { Choice } from "../nlcore/elements/menu";
import { Image } from "../nlcore/elements/displayable/image";
import { EventDispatcher } from "../../util/data";
import { ImageEvents } from "./elements/image/Image";
import { Transform } from "../nlcore/elements/transform/transform";
import { Transition } from "../nlcore/elements/transition/transition";
import { Layer } from "../nlcore/elements/layer";
import { Text } from "../nlcore/elements/displayable/text";
import { Displayable } from "../nlcore/elements/displayable/displayable";
import { Scene } from "../nlcore/elements/scene";
import { Sound } from "../nlcore/elements/sound";
import { Video } from "../nlcore/elements/video";
import { Timeline } from "./Tasks";
export * from "./elements/type";
export type Chosen = Choice & {
    evaluated: string;
};
export declare enum ExposedStateType {
    image = "narraleaf:image",
    text = "narraleaf:text",
    layer = "narraleaf:layer",
    scene = "narraleaf:scene",
    video = "narraleaf:video"
}
export type ExposedState = {
    [ExposedStateType.image]: {
        createWearable: (wearable: Image) => void;
        disposeWearable: (wearable: Image) => void;
        events: EventDispatcher<ImageEvents>;
        initDisplayable: (onResolve: () => void) => Timeline;
        applyTransform: (transform: Transform, onResolve: () => void) => Timeline;
        applyTransition: (transition: Transition<any>, onResolve: () => void) => Timeline;
        updateStyleSync: () => void;
    };
    [ExposedStateType.text]: {
        initDisplayable: (onResolve: () => void) => Timeline;
        applyTransform: (transform: Transform, onResolve: () => void) => Timeline;
        applyTransition: (transition: Transition<any>, onResolve: () => void) => Timeline;
        updateStyleSync: () => void;
        flush: () => void;
    };
    [ExposedStateType.layer]: {
        initDisplayable: (onResolve: () => void) => Timeline;
        applyTransform: (transform: Transform, onResolve: () => void) => Timeline;
        applyTransition: (transition: Transition<any>, onResolve: () => void) => Timeline;
        updateStyleSync: () => void;
    };
    [ExposedStateType.scene]: {
        setBackgroundMusic: (music: Sound | null, fade: number) => Promise<void>;
    };
    [ExposedStateType.video]: {
        show: () => void;
        hide: () => void;
        play: () => Promise<void>;
        pause: () => void;
        resume: () => Promise<void>;
        stop: () => void;
        seek: (time: number) => void;
    };
};
export type ExposedKeys = {
    [ExposedStateType.image]: Image | Displayable<any, any>;
    [ExposedStateType.text]: Text | Displayable<any, any>;
    [ExposedStateType.layer]: Layer | Displayable<any, any>;
    [ExposedStateType.scene]: Scene;
    [ExposedStateType.video]: Video;
};
export type { INotificationsProps } from "./elements/notification/type";
