import { PickerFileMetadata } from 'filestack-js';
import { Attachment, HeaderStyle, PortalTheme } from '@parlor/common';
import { DragDropValue } from '@parlor/components';
export declare enum ContentModuleType {
    Button = "Button",
    Header = "Header",
    Image = "Image",
    Text = "Text",
    Video = "Video"
}
export type StepToolbarProps = {
    currentStep: number;
    isSkipVisible?: boolean;
    onNextClick?: () => void;
    onPrevClick?: () => void;
    onSkipClick?: () => void;
    theme?: Partial<PortalTheme>;
    totalSteps: number;
};
export declare namespace IContentModule {
    type EnabledContentIds = Partial<Record<ContentModuleType, boolean>>;
    namespace IItem {
        type Props = {
            className?: string;
            defaultEditMode?: boolean;
            enabledContentIds?: EnabledContentIds;
            id: string;
            index: number;
            isActive?: boolean;
            isEditModeEnabled?: boolean;
            isWide?: boolean;
            namePath: string;
            onCancel?(index: number): void;
            onSave?(values: IContentModule.FormValues.SaveValue[]): Promise<any[]> | any[];
            onSelect?(index: number, value: IContentModule.FormValues.ContentValue): void;
            steps?: StepToolbarProps;
            variant: ContentModuleType;
        };
    }
    namespace IAddContent {
        type Props = {
            className?: string;
            enabledContentIds?: EnabledContentIds;
            index?: number;
            isSmall?: boolean;
            onSelect?(item: IContentModule.FormValues.ContentValue): void;
            steps?: StepToolbarProps;
            title?: string;
            variant?: 'guide' | 'contentModule';
        };
    }
    namespace IContent {
        type Props = {
            className?: string;
            isEditMode: boolean;
            isEditModeEnabled?: boolean;
            isWide?: boolean;
        };
    }
    namespace FormValues {
        type ItemBase = {
            action?: string;
            id: string;
            order: number;
            stepID?: string;
            variant: ContentModuleType;
        };
        type ItemValue<T> = T & ItemBase;
        type HeaderValue = ItemValue<{
            headerStyle: HeaderStyle;
            text: string;
        }>;
        type TextValue = ItemValue<{
            text: string;
        }>;
        type ImageValue = ItemValue<{
            attachments: Pick<Attachment, 'id' | 'signedUrl' | '__typename'> | PickerFileMetadata | DragDropValue;
        }>;
        type VideoValue = ItemValue<{
            isHTML?: boolean;
            text: {
                isHTML: boolean;
                videoInput: string;
            } | undefined | string;
            userInput?: string;
        }>;
        type ContentValue = HeaderValue | TextValue | ImageValue | VideoValue;
        type SaveValue = ContentValue & {
            action?: 'create' | 'update' | 'delete';
        };
        type ExtendedSaveValueForPosts = SaveValue | {
            action?: 'saved';
        };
    }
}
