import { ThunkAction } from 'redux-thunk';
import { Action } from './types';
import { KnapsackPattern, KnapsackPatternsConfig, KnapsackPatternTemplate, KnapsackTemplateDemo, KsTemplateSpec } from '../../schemas/patterns';
import { KnapsackCustomPageSlice } from '../../schemas/custom-pages';
import { Actions as NavActions } from './navs';
import { TemplateRendererMeta } from '../../schemas/knapsack-config';
declare type AppState = import('./index').AppState;
declare type PatternsState = {
    isFetching?: boolean;
    didInvalidate?: boolean;
    patterns: {
        [id: string]: KnapsackPattern;
    };
    renderers: {
        [id: string]: {
            meta: TemplateRendererMeta;
        };
    };
} & KnapsackPatternsConfig;
declare const UPDATE_TEMPLATE_DEMO = "knapsack/patterns/UPDATE_TEMPLATE_DEMO";
declare const REMOVE_TEMPLATE_DEMO = "knapsack/patterns/REMOVE_TEMPLATE_DEMO";
declare const ADD_TEMPLATE_DATA_DEMO = "knapsack/patterns/ADD_TEMPLATE_DATA_DEMO";
declare const ADD_TEMPLATE_TEMPLATE_DEMO = "knapsack/patterns/ADD_TEMPLATE_TEMPLATE_DEMO";
declare const ADD_TEMPLATE = "knapsack/patterns/ADD_TEMPLATE";
declare const UPDATE_PATTERN = "knapsack/patterns/UPDATE_PATTERN";
declare const ADD_PATTERN = "knapsack/patterns/ADD_PATTERN";
declare const UPDATE_PATTERN_INFO = "knapsack/patterns/UPDATE_PATTERN_INFO";
declare const UPDATE_TEMPLATE_INFO = "knapsack/patterns/UPDATE_TEMPLATE_INFO";
declare const UPDATE_PATTERN_SLICES = "knapsack/patterns/UPDATE_PATTERN_SLICES";
declare const DELETE_PATTERN = "knapsack/patterns/DELETE_PATTERN";
interface DeletePatternAction extends Action {
    type: typeof DELETE_PATTERN;
    payload: {
        patternId: string;
    };
}
export declare function deletePattern({ patternId, }: DeletePatternAction['payload']): ThunkAction<void, AppState, {}, Actions | NavActions>;
declare const DELETE_TEMPLATE = "knapsack/patterns/DELETE_TEMPLATE";
interface DeleteTemplateAction extends Action {
    type: typeof DELETE_TEMPLATE;
    payload: {
        patternId: string;
        templateId: string;
    };
}
/** Delete a pattern's template */
export declare function deleteTemplate(payload: DeleteTemplateAction['payload']): DeleteTemplateAction;
declare const UPDATE_SPEC = "knapsack/patterns/Update Spec";
interface UpdateSpecAction extends Action {
    type: typeof UPDATE_SPEC;
    payload: {
        patternId: string;
        templateId: string;
        spec: KsTemplateSpec;
    };
}
export declare function updateSpec(payload: UpdateSpecAction['payload']): UpdateSpecAction;
declare const DUPLICATE_DEMO = "knapsack/patterns/Duplicate Demo";
interface DuplicateDemoAction extends Action {
    type: typeof DUPLICATE_DEMO;
    payload: {
        patternId: string;
        templateId: string;
        demoId: string;
        newDemoId?: string;
    };
}
export declare function duplicateDemo(payload: DuplicateDemoAction['payload']): DuplicateDemoAction;
interface UpdatePatternSlicesAction extends Action {
    type: typeof UPDATE_PATTERN_SLICES;
    payload: {
        patternId: string;
        slices: KnapsackCustomPageSlice[];
    };
}
export declare function updatePatternSlices(patternId: string, slices: KnapsackCustomPageSlice[]): UpdatePatternSlicesAction;
interface UpdateTemplateDemoAction extends Action {
    type: typeof UPDATE_TEMPLATE_DEMO;
    payload: {
        patternId: string;
        templateId: string;
        demo: KnapsackTemplateDemo;
    };
}
export declare function updateTemplateDemo({ patternId, templateId, demo, }: {
    patternId: string;
    templateId: string;
    demo: KnapsackTemplateDemo;
}): UpdateTemplateDemoAction;
interface AddTemplateDataDemoAction extends Action {
    type: typeof ADD_TEMPLATE_DATA_DEMO;
    payload: {
        patternId: string;
        templateId: string;
        demoId?: string;
    };
}
interface AddTemplateAction extends Action {
    type: typeof ADD_TEMPLATE;
    payload: {
        patternId: string;
        templateId?: string;
        templateLanguageId: string;
        path: string;
        alias?: string;
        assetSetIds?: string[];
    };
}
export declare function addTemplate({ path, alias, patternId, templateId, templateLanguageId, assetSetIds, }: AddTemplateAction['payload']): ThunkAction<void, AppState, {}, Actions | NavActions>;
export declare function addTemplateDataDemo({ patternId, templateId, demoId, }: {
    patternId: string;
    templateId: string;
    demoId?: string;
}): AddTemplateDataDemoAction;
interface AddTemplateTemplateDemoAction extends Action {
    type: typeof ADD_TEMPLATE_TEMPLATE_DEMO;
    payload: {
        patternId: string;
        templateId: string;
        path: string;
        alias?: string;
    };
}
export declare function addTemplateTemplateDemo({ path, alias, patternId, templateId, }: AddTemplateTemplateDemoAction['payload']): AddTemplateTemplateDemoAction;
interface RemoveTemplateDemoAction extends Action {
    type: typeof REMOVE_TEMPLATE_DEMO;
    payload: {
        patternId: string;
        templateId: string;
        demoId: string;
    };
}
/**
 * @todo add option to delete file (ifTemplateDemo)
 */
export declare function removeTemplateDemo({ patternId, templateId, demoId, }: {
    patternId: string;
    templateId: string;
    demoId: string;
}): RemoveTemplateDemoAction;
interface UpdatePatternAction extends Action {
    type: typeof UPDATE_PATTERN;
    payload: KnapsackPattern;
}
export declare function updatePattern(pattern: KnapsackPattern): UpdatePatternAction;
interface UpdatePatternInfoAction extends Action {
    type: typeof UPDATE_PATTERN_INFO;
    payload: Partial<KnapsackPattern>;
}
interface UpdateTemplateInfoAction extends Action {
    type: typeof UPDATE_TEMPLATE_INFO;
    payload: {
        patternId: string;
        templateId: string;
        template: Partial<KnapsackPatternTemplate>;
    };
}
interface AddPatternAction extends Action {
    type: typeof ADD_PATTERN;
    payload: {
        patternId?: string;
        title: string;
    };
}
export declare function addPattern({ patternId, title, }: AddPatternAction['payload']): ThunkAction<void, AppState, {}, Actions | NavActions>;
/**
 * Update basic Pattern Info
 * Basically everything besides `templates`
 */
export declare function updatePatternInfo(patternId: string, pattern: Partial<KnapsackPattern>): UpdatePatternInfoAction;
/**
 * Update basic Template Info by doing a shallow merge of `template`
 */
export declare function updateTemplateInfo({ patternId, templateId, template, }: {
    patternId: string;
    templateId: string;
    template: Partial<KnapsackPatternTemplate>;
}): UpdateTemplateInfoAction;
declare type Actions = AddPatternAction | DeletePatternAction | AddTemplateAction | UpdatePatternAction | UpdatePatternInfoAction | UpdateTemplateInfoAction | UpdateTemplateDemoAction | AddTemplateDataDemoAction | UpdatePatternSlicesAction | RemoveTemplateDemoAction | AddTemplateTemplateDemoAction | DuplicateDemoAction | DeleteTemplateAction | UpdateSpecAction;
export default function reducer(state: PatternsState, action: Actions): PatternsState;
export {};
//# sourceMappingURL=patterns.d.ts.map