import { KnapsackDesignToken } from '@knapsack/core/types';
import { KsCloudConfig, KnapsackFile } from '@knapsack/core';
import { KsServerPlugin } from './plugins';
import { KnapsackPattern, KnapsackPatternTemplate, KnapsackTemplateDemo, KsTemplateSpec } from './patterns';
declare type Patterns = import('../server/patterns').Patterns;
export interface KnapsackTemplateRendererResults {
    ok: boolean;
    html: string;
    usage?: string;
    templateLanguage?: string;
    message?: string;
}
export interface KsRenderResults extends KnapsackTemplateRendererResults {
    wrappedHtml: string;
    /** md5 hash of `demo` used */
    dataId: string;
}
export interface KsTemplateUrls {
    /**
     * Is not in iframe, is wrapped html
     */
    external: string;
    /**
     * Is in iframe, is wrapped html
     */
    iframeSrc: string;
}
export interface KsTemplateRenderedMeta extends KsRenderResults {
    urls: KsTemplateUrls;
}
export interface GetHeadParams {
    cssUrls?: string[];
    headJsUrls?: string[];
    inlineHead?: string;
    isInIframe?: boolean;
}
export interface GetFootParams {
    jsUrls?: string[];
    inlineJs?: string;
    inlineCss?: string;
    inlineFoot?: string;
    isInIframe?: boolean;
}
export interface TemplateRendererMeta {
    id: string;
    title: string;
    iconSvg?: string;
    version?: string;
    aliasTitle?: string;
    aliasDescription?: string;
    aliasUse: 'off' | 'optional' | 'required';
    syntaxHighlightingLanguage?: string;
}
export declare type KsTemplateRendererWrapHtmlParams = {
    html: string;
} & GetHeadParams & GetFootParams;
export interface KnapsackTemplateRendererBase {
    id: string;
    /**
     * Used for syntax highlighting
     */
    language?: string;
    build?: (opt: {
        templatePaths: string[];
    }) => Promise<void>;
    watch?: (opt: {
        templatePaths: string[];
    }) => Promise<void>;
    init?: (opt: {
        config: KnapsackConfig;
        patterns: Patterns;
        cacheDir: string;
    }) => Promise<void>;
    wrapHtml: (opt: KsTemplateRendererWrapHtmlParams) => string;
    getHead: (opt: GetHeadParams) => string;
    getFoot: (opt: GetFootParams) => string;
    onChange: (opt: {
        path: string;
    }) => void;
    onAdd: (opt: {
        path: string;
    }) => void;
    onRemove: (opt: {
        path: string;
    }) => void;
    formatCode: (code: string) => string;
    inferSpec?: ({ template: KnapsackPatternTemplate, templatePath: string, }: {
        template: any;
        templatePath: any;
    }) => Promise<KsTemplateSpec | false>;
    getTemplateMeta?: (opt: {
        pattern: KnapsackPattern;
        template: KnapsackPatternTemplate;
    }) => Promise<KnapsackFile[]>;
    /**
     * The result of all the `getTemplateMeta` runs aggregated together
     * @see {KnapsackTemplateRendererBase['getTemplateMeta']}
     * @see getTemplateMeta
     * @see {getTemplateMeta}
     */
    alterTemplateMetaFiles?: (opt: {
        files: KnapsackFile[];
        metaDir: string;
    }) => Promise<KnapsackFile[]>;
}
export interface KnapsackRenderParams {
    template: KnapsackPatternTemplate;
    pattern: KnapsackPattern;
    demo?: KnapsackTemplateDemo;
    patternManifest: Patterns;
}
export declare type KnapsackRenderFunc = (opt: KnapsackRenderParams) => Promise<KnapsackTemplateRendererResults>;
export interface KnapsackTemplateRenderer extends KnapsackTemplateRendererBase {
    render: KnapsackRenderFunc;
    getUsage: (opt: KnapsackRenderParams) => Promise<string>;
    getMeta: () => TemplateRendererMeta;
}
export interface KnapsackConfig {
    /** Output of knapsack build directory */
    dist: string;
    /** Knapsack data including site meta and page builder */
    data: string;
    /** Hosted by knapsack server. Place compiled Design System css and js as well as images and other assets needed by knapsack */
    public: string;
    templateRenderers: KnapsackTemplateRenderer[];
    designTokens: {
        createCodeSnippet?: (token: KnapsackDesignToken) => string;
        data: {
            tokens: KnapsackDesignToken[];
        };
    };
    plugins?: KsServerPlugin<any>[];
    version?: string;
    cloud?: KsCloudConfig;
}
export {};
//# sourceMappingURL=knapsack-config.d.ts.map