import spellu from "./spellu-engine";
import scriptkit from "./spellu-scriptkit";
import dom from "./pixture-dom";
declare type Dictionary<V = any> = spellu.Dictionary<V>;
declare namespace pixture {
    function pluck<V extends Dictionary<any>>(array: V[], keyName: string): Dictionary<V>;
    function stepGeneratorOf<T, V extends T = T>(array: T[]): (condition: (item: T) => boolean) => Generator<V, void, unknown>;
}
declare namespace pixture {
    interface Environment {
        readText(path: string): string;
        writeText(path: string, data: string): void;
        universeGlobals(): Dictionary<any>;
        universeConstructors(): Function[];
    }
    type ConfigDataFormat = {
        data?: string;
        pages?: PageRecipe[];
    };
    type Config = {
        data: string;
        components: [string];
        pages: PageRecipe[];
    };
    type PageRecipe = {
        in: string;
        out: string;
    };
    type Input = {
        document: dom.PageDocument;
        components: Dictionary<dom.Component>;
        dimensions: scriptkit.Dimension[];
        constructors: Function[];
    };
    type Output = {
        document: dom.PageDocument;
        text: string;
    };
    type GenerateResult = {};
    type TranspileResult = {};
}
declare namespace pixture {
    function loadConfig(): void;
}
declare namespace pixture {
    function generate(env: Environment, config: Config): TranspileResult;
}
declare namespace pixture {
    type Source = {
        source: string;
        location: string;
    };
    export function transpile(page: string | Source, components: (string | Source)[], dimensions: scriptkit.Dimension[], constructors: Function[]): string;
    export {};
}
declare namespace pixture {
    function load(env: Environment, config: Config, recipe: PageRecipe): Input;
}
declare namespace pixture {
    function save(env: Environment, config: Config, recipe: PageRecipe, output: Output): TranspileResult;
}
declare namespace pixture {
    function process(input: Input): Output;
}
declare namespace pixture {
    function applyComponent(world: scriptkit.World, page: dom.PageDocument, components: Dictionary<dom.Component>): void;
}
declare namespace pixture {
    function applyControl(world: scriptkit.World, page: dom.PageDocument): void;
    /**
     * ノードの子要素・テキストに対し、applyString()を実行する。
     *
     * @param world
     * @param node
     * @param context
     */
    function evaluateInterpolationCode(world: scriptkit.World, node: dom.Node, context: Dictionary<any>): void;
}
declare namespace pixture {
    function applyString(world: scriptkit.ScriptWorld, context: Dictionary<any>, string: string, location?: string): string;
}
declare namespace pixture {
    function evaluateExpression(world: scriptkit.ScriptWorld, context: Dictionary<any>, string: string, location?: string): any;
}
export default pixture;
export { spellu, scriptkit, dom };
//# sourceMappingURL=pixture-engine.d.ts.map