import * as i0 from '@angular/core';
import { QueryList, EventEmitter, DestroyRef, ChangeDetectorRef, TemplateRef, OnInit, OnDestroy, OnChanges, SimpleChanges, ModuleWithProviders } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { WizardStepStatus } from '@fundamental-ngx/core/wizard';
import * as i1 from '@fundamental-ngx/platform/form';
import { DynamicFormGroup, SubmitFormEventResult, DynamicFormFieldGroup, DynamicFormFieldItem, FormGeneratorComponent, FormGeneratorService, DynamicFormValue, FormGeneratorModuleConfig } from '@fundamental-ngx/platform/form';
import { HintInput } from '@fundamental-ngx/platform/shared';
import { ButtonType } from '@fundamental-ngx/core/button';
import { ContentDensityMode } from '@fundamental-ngx/core/content-density';
import { DialogRef, DialogService, DialogConfig } from '@fundamental-ngx/core/dialog';
import { HeaderSizes } from '@fundamental-ngx/core/title';

interface WizardGeneratorFormsValue {
    [key: string]: WizardStepFormsValue;
}
interface WizardStepFormsValue {
    [key: string]: {
        [key: string]: any;
    };
}
interface WizardVisibleSteps {
    [key: string]: boolean;
}
interface WizardGeneratorDependencyFields {
    [key: string]: {
        [key: string]: string[];
    };
}
interface WizardStepSubmittedForms {
    [key: string]: SubmitFormEventResult;
}
interface WizardStepForms {
    [key: string]: {
        title: string;
        form: DynamicFormGroup;
    };
}

interface WizardGeneratorFormGroup {
    /**
     * @description Specify the column layout in the format `XLn-Ln-Mn-Sn`
     * where n is the number of columns and can be different for each size.
     * eg: XL2-L2-M2-S1 would create 2-column layouts for XL, L,
     * and M sizes and single-column layout for S size.
     */
    columnLayout?: string;
    /**
     * @description Form main title.
     */
    title: string;
    /**
     * @description List of @see DynamicFormItem representing the list of items
     * to be rendered in the form.
     */
    formItems: WizardGeneratorFormItem[];
    /**
     * @description Unique form ID.
     */
    id: string;
    /**
     * @description Should return true or false depending on whether this form group should be visible.
     * @returns Boolean
     */
    when?: (completedSteps: string[], answers: WizardGeneratorFormsValue, forms: Map<string, DynamicFormGroup>) => boolean | Promise<boolean> | Observable<boolean>;
    /**
     * @description Object of dependency fields that are used with `when` function
     */
    dependencyFields?: WizardGeneratorDependencyFields;
    /**
     * @description
     * Additional set of options that can affect UI of the form item form control.
     */
    guiOptions?: WizardGeneratorFormGroupGuiOptions;
}
interface WizardGeneratorFormGroupGuiOptions {
    /**
     * Hint options. Either only text or full config
     */
    hint?: HintInput;
}
type WizardGeneratorFormItem = WizardGeneratorFormGroupItem | WizardGeneratorFormFieldItem;
interface WizardGeneratorFormGroupItem extends DynamicFormFieldGroup {
    /**
     * @description Object of dependency fields that are used with `when` function
     */
    dependencyFields?: WizardGeneratorDependencyFields;
}
type WizardGeneratorFormFieldItem = DynamicFormFieldItem<{
    dependencyFields?: WizardGeneratorDependencyFields;
}>;

interface WizardGeneratorItem {
    /**
     * @description Name of the wizard step. Will be used in navigation bar.
     * @param stepIndex Current step index.
     * @returns Step title
     */
    name: string | ((stepIndex: string) => string | Promise<string> | Observable<string>);
    /**
     * @description Title of the wizard step. Will be used in wizard step body.
     * @param stepIndex Current step index.
     * @returns Step title
     */
    title?: string | ((stepIndex: string) => string | Promise<string> | Observable<string>);
    /**
     * @description The smaller text for labeling the step as optional.
     */
    optionalText?: string | ((stepIndex: string) => string | Promise<string> | Observable<string>);
    /**
     * @description Unique step ID.
     */
    id: string;
    /**
     * @description Icon class name which will be used to display an icon in the navigation bar.
     */
    icon?: string;
    /**
     * @description Should return true or false depending on whether this step should be visible.
     * @returns Boolean
     */
    when?: (completedSteps: string[], answers: WizardGeneratorFormsValue, forms: Map<string, DynamicFormGroup>) => boolean | Promise<boolean> | Observable<boolean>;
    /**
     * @description Object of dependency fields that are used with `when` function
     */
    dependencyFields?: WizardGeneratorDependencyFields;
    /**
     * @description Whether or not this step is going to create a branch.
     */
    branching?: boolean;
    /**
     * @description List of forms to render.
     */
    formGroups?: WizardGeneratorFormGroup[];
    /**
     * @description Step status.
     */
    status?: WizardStepStatus;
    /**
     * @description Is this step is a summary step
     */
    summary?: boolean;
    /**
     * @hidden
     * @description Used for internal navigation logic to summary step.
     */
    completed?: boolean;
}
type PreparedWizardGeneratorItemFields = {
    name: string;
    title: string;
    optionalText: string;
    status: WizardStepStatus;
};
/**
 * @hidden
 * Internal representation of WizardGeneratorItem with all fields resolved to a plain value
 */
type PreparedWizardGeneratorItem = Omit<WizardGeneratorItem, keyof PreparedWizardGeneratorItemFields> & PreparedWizardGeneratorItemFields;

interface WizardNavigationButtons {
    /**
     * @description Text for 'Go Next' button.
     */
    goNext?: WizardNavigationButton;
    /**
     * @description Text for 'Go Back' button.
     */
    goBack?: WizardNavigationButton;
    /**
     * @description Text for 'Finish' button.
     */
    finish?: WizardNavigationButton;
    /**
     * @description Text for 'Cancel' button.
     */
    cancel?: WizardNavigationButton;
    /**
     * @description Text for 'Review' button.
     */
    review?: WizardNavigationButton;
}
interface WizardNavigationButton {
    label: string;
    contentDensity: ContentDensityMode;
    type: ButtonType;
}

interface WizardGeneratorStep {
    formGenerators: QueryList<FormGeneratorComponent>;
    getVisibleForms(): WizardStepForms;
    submitForms(skipIfUntouched?: boolean): Subject<WizardStepSubmittedForms | null>;
    updateFormsState(): Promise<void>;
    refreshFormsVisibility(): Promise<void>;
}

type StepsComponents = Map<string, WizardGeneratorStep>;
declare enum WizardGeneratorRefreshStrategy {
    REFRESH_STEP_VISIBILITY = "refreshStepVisibility",
    REVALIDATE_STEP_FORMS = "revalidateStepForms",
    REFRESH_FORM_VISIBILITY = "refreshFormVisibility"
}
interface DependencySteps {
    /** Step ID */
    [key: string]: {
        /** Form ID with array of form control id's */
        [key: string]: {
            [key in WizardGeneratorRefreshStrategy]?: string[];
        };
    };
}
interface StepDependencyFields {
    /** Dependent step */
    [key: string]: DependencySteps;
}
/**
 * @description Helper service to keep all transformations and data in one place.
 */
declare class WizardGeneratorService {
    private _formGeneratorService;
    /** @hidden */
    items: PreparedWizardGeneratorItem[];
    /**
     * @description Visible steps components
     */
    stepsComponents: StepsComponents;
    /**
     * @description Object with steps that are dependencies for another steps.
     */
    dependencySteps: StepDependencyFields;
    /**
     * @description Whether to append the step to the wizard. If false, each step will be displayed on a different page.
     * Default is true.
     */
    appendToWizard: boolean;
    /** @hidden */
    _shouldRedirectToSummary: boolean;
    /**
     * @description Steps that are visible to the user.
     */
    visibleWizardSteps: PreparedWizardGeneratorItem[];
    /** @hidden */
    private _visibleWizardSteps$;
    /** @hidden */
    private _appendToWizard$;
    /** @hidden */
    private _stepsComponents$;
    /** @hidden */
    private _stepsOrderChanged$;
    /** @hidden */
    private _nextStepIndex$;
    /** @hidden */
    private _submittedFormRawValues;
    /** @hidden */
    private _wizardStepIds;
    /** @hidden */
    constructor(_formGeneratorService: FormGeneratorService);
    /**
     * @description Returns current step ID in Wizard.
     * @returns {string | undefined} Current step ID.
     */
    getCurrentStepId(): string | undefined;
    /**
     * @description Returns current step index.
     * @returns {number} Index of the current step in array of Wizard steps.
     */
    getCurrentStepIndex(): number;
    /**
     * Searches for the index of the step based on it's ID
     * @param stepId Step ID
     * @returns Index in the array of steps for defined step ID.
     */
    getStepIndex(stepId?: string): number;
    /**
     * @description Sends command to submit all forms inside the step.
     * @param stepId Step ID for which forms need's to be submitted.
     * @param skipIfUntouched Skip validation if form haven't been touched.
     * @returns {Observable<WizardStepSubmittedForms>} Observable, which will emit
     * when all visible forms in step are submitted.
     */
    submitStepForms(stepId?: string, skipIfUntouched?: boolean): Observable<WizardStepSubmittedForms | null>;
    /**
     * @description Triggers validation for current step forms.
     * @returns {Observable<boolean>} Observable with validation result.
     */
    validateStepForms(skipIfUntouched?: boolean): Observable<boolean>;
    /**
     * @description Sets new array of visible steps for Wizard.
     * @param steps steps that needs to be shown in Wizard.
     */
    setVisibleSteps(steps: PreparedWizardGeneratorItem[]): void;
    /**
     * @returns {Observable<PreparedWizardGeneratorItem[]>} Observable, which will emit every time
     * when array of visible step items has been changed.
     */
    getVisibleSteps(): Observable<PreparedWizardGeneratorItem[]>;
    /**
     * @description Runs initial transformation for passed Wizard steps.
     * @param items All Wizard steps.
     * @returns {Promise<PreparedWizardGeneratorItem[]>} Array of transformed Wizard steps.
     */
    prepareWizardItems(items: WizardGeneratorItem[]): Promise<PreparedWizardGeneratorItem[]>;
    /**
     * @description Runs conditional function for each step to define if step should be shown.
     */
    refreshStepVisibility(): Promise<void>;
    /**
     * Checks whether current form group should be visible.
     * @param formGroup Form Group.
     */
    refreshFormVisibility(formGroup: WizardGeneratorFormGroup): Promise<boolean>;
    /**
     * @description Clears array of Wizard steps components.
     */
    clearWizardStepComponents(): void;
    /**
     * @returns {Observable<StepsComponents>} Observable, which will emit every time
     * when Set visible steps components has been changed.
     */
    trackStepsComponents(): Observable<StepsComponents>;
    /**
     * @description Adds new component to the set of Wizard steps components.
     * @param component Wizard Step component to add.
     * @param key Wizard Step ID.
     */
    addWizardStepComponent(component: WizardGeneratorStep, key: string): void;
    /**
     * @description Removes Component from the set of Wizard steps components.
     * @param key
     */
    removeWizardStepComponent(key: string): void;
    /**
     * @param step Step ID which includes dependency fields.
     * @returns Object with forms and their fields that are dependencies for other steps.
     */
    getStepDependencyFields(step: string): DependencySteps;
    /**
     * Notifies step components to revalidate inner forms.
     * @param stepIds Step ID's which needs to be revalidated.
     */
    notifyStepsToRevalidateForms(stepIds: string[]): void;
    /**
     * Notifies step components to refresh form groups visibility.
     * @param stepIds Step ID's which needs to be checked.
     */
    refreshFormsVisibility(stepIds: string[]): Promise<void>;
    /**
     * @param formatted Flag defining whether form value should be formatted by form control
     * transformers, or return raw value
     * @returns {WizardGeneratorFormsValue} Wizard form value
     */
    getWizardFormValue(formatted?: boolean): Promise<WizardGeneratorFormsValue>;
    /**
     *
     * @param stepId Step ID to check.
     * @returns {Boolean} indicator if step was previously validated and submitted.
     */
    stepSubmitted(stepId: string): boolean;
    /**
     *
     * @returns {Boolean} if steps are untouched, will return true, if yes - false
     */
    isStepsUntouched(): boolean;
    /**
     * Reverts wizard to defined step.
     * @param stepId Step ID to edit
     */
    editStep(stepId: string): void;
    /**
     * Set's current set of step ID's
     * @param ids step ID's
     */
    setWizardStepIds(ids: string[]): void;
    /**
     * Set next step index.
     * @param index Next step index.
     */
    setNextStepIndex(index: number): void;
    /**
     * Returns observable of next step index which emits when index is changed.
     */
    trackNextStepIndex(): Observable<number>;
    /**
     * Returns observable which emits when steps order has been changed.
     */
    trackStepsOrder(): Observable<number>;
    /**
     * Stores original 'appendToWizard' input property.
     * @param value
     */
    setOriginalAppendToWizardState(value: boolean): void;
    /**
     * Resets modified 'appendToWizard' property to original one.
     */
    restoreAppendToWizardState(): void;
    /**
     * Returns observable which emits when 'appendToWizard' property has been changed.
     */
    trackAppendToWizardState(): Observable<boolean>;
    /**
     * @hidden
     * @param items
     * @param index
     * @param key
     * @returns
     */
    private _getFormItemPropertyValue;
    /**
     * @hidden
     * @description Returns value from Promise-like, Observable-like, simple function or just some object.
     * @param obj
     * @returns
     */
    private _getFunctionValue;
    /**
     * @hidden
     * @description Sets `branching` property for the steps that will create new branches.
     * @param items
     * @returns
     */
    private _setBranchingSteps;
    /** @hidden */
    private _normalizeDependencyStep;
    /** @hidden */
    private _buildDependencyMap;
    /** @hidden */
    private _getCompletedStepIds;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WizardGeneratorService>;
}

/**
 * @description Default button labels.
 */
declare const DEFAULT_WIZARD_NAVIGATION_BUTTONS: Required<WizardNavigationButtons>;
/**
 * @description Base Wizard Generator component with necessary inputs and methods.
 */
declare class BaseWizardGenerator {
    /**
     * @description Whether or not apply responsive paddings styling.
     */
    responsivePaddings: boolean;
    /**
     * @description Button labels to be used in Wizard navigation
     */
    set navigationButtonLabels(value: WizardNavigationButtons);
    get navigationButtonLabels(): WizardNavigationButtons;
    /**
     * @description Array of Wizard Steps.
     */
    set items(items: WizardGeneratorItem[]);
    get items(): WizardGeneratorItem[];
    /**
     * Whether to append the step to the wizard. If false, each step will be displayed on a different page.
     * Default is true.
     */
    set appendToWizard(value: boolean);
    get appendToWizard(): boolean;
    /** If navigation buttons should be visible. */
    navigationButtons: boolean;
    /**
     * Custom height to use for the wizard's content pane. By default, this value is calc(100vh - 144px), where 144px
     * is the combined height of the shellbar, wizard header and wizard footer.
     */
    contentHeight: Nullable<string>;
    /**
     * @description Boolean flag indicating whether to display Summary step in Wizard progress bar.
     */
    displaySummaryStep: boolean;
    /** Whether all form items should have identical layout provided for form group. */
    unifiedLayout: boolean;
    /**
     * @description Emits wizard value when it's completed.
     */
    wizardFinished: EventEmitter<WizardGeneratorFormsValue>;
    /**
     * Flag indicating that wizard is ready to be shown
     */
    wizardCreated: boolean;
    /**
     * @description Is current step is summary step.
     */
    get isSummaryStep(): boolean;
    /**
     * @description Array of visible Wizard Steps.
     */
    set visibleItems(items: PreparedWizardGeneratorItem[]);
    get visibleItems(): PreparedWizardGeneratorItem[];
    /**
     * @description Whether or not Wizard is currently on the first step
     */
    get isFirstStep(): boolean;
    /**
     * @description Whether or not Wizard is currently on the last step
     */
    get isLastStep(): boolean;
    /**
     * Whether current step is a branching step.
     */
    get isBranchingStep(): boolean;
    /**
     * Whether the next step is a Summary step.
     */
    get isNextStepSummary(): boolean;
    /** Whether the current step is completed */
    get isCurrentStepCompleted(): boolean;
    /**
     * @hidden
     */
    _visibleItems: PreparedWizardGeneratorItem[];
    /** @hidden */
    _nextStepIndex: number;
    /** @hidden */
    _stepsOrderChanged: boolean;
    /**
     * @hidden
     */
    _navigationButtonLabels: Required<WizardNavigationButtons>;
    /**
     * @hidden
     */
    protected readonly _destroyRef: DestroyRef;
    /** @hidden */
    protected readonly _wizardGeneratorService: WizardGeneratorService;
    /** @hidden */
    protected readonly _cd: ChangeDetectorRef;
    /**
     * @hidden
     */
    private _items;
    /** @hidden */
    private _appendToWizard;
    /**
     * @hidden
     */
    private _formPending;
    /** @hidden */
    constructor();
    /**
     * @description Reverts Wizard progress one step back.
     */
    goBack(): void;
    /**
     * @description Progresses the Wizard one step further.
     */
    goNext(): Promise<void>;
    /**
     * @description Submits step forms.
     * @param currentStepIndex current step index.
     * @returns {Observable<WizardStepSubmittedForms | null>} Observable with form values.
     */
    submitStepForms(currentStepIndex?: string): Observable<WizardStepSubmittedForms | null>;
    /**
     * @description Completes the wizard and emits it's formatted value.
     */
    finish(): Promise<void>;
    /**
     * @description Callback function to update steps status.
     * @param stepId Step ID to be updated.
     * @param status New step status.
     */
    stepStatusChanged(stepId: string, status: WizardStepStatus): Promise<void>;
    /**
     * @hidden
     */
    private _setVisibleSteps;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseWizardGenerator, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseWizardGenerator, never, never, { "responsivePaddings": { "alias": "responsivePaddings"; "required": false; }; "navigationButtonLabels": { "alias": "navigationButtonLabels"; "required": false; }; "items": { "alias": "items"; "required": false; }; "appendToWizard": { "alias": "appendToWizard"; "required": false; }; "navigationButtons": { "alias": "navigationButtons"; "required": false; }; "contentHeight": { "alias": "contentHeight"; "required": false; }; "displaySummaryStep": { "alias": "displaySummaryStep"; "required": false; }; "unifiedLayout": { "alias": "unifiedLayout"; "required": false; }; }, { "wizardFinished": "wizardFinished"; }, never, never, true, never>;
}

interface WizardTitle {
    /**
     * @description Text to display in the Wizard Dialog title
     */
    text: string;
    /**
     * @description Size of the Wizard Dialog title
     */
    size: HeaderSizes;
}

interface WizardDialogData {
    /**
     * @description Whether or not apply responsive paddings styling.
     */
    responsivePaddings: boolean;
    /**
     * @description Button labels to be used in Wizard navigation.
     */
    navigationButtonLabels?: WizardNavigationButtons;
    /**
     * @description Array of Wizard Steps.
     */
    items: WizardGeneratorItem[];
    /**
     * @description Whether or not to append the step to the wizard. If false, each step will be displayed on a different page.
     * Default is true.
     */
    appendToWizard: boolean;
    /**
     * @description Custom height to use for the wizard's content pane. By default, this value is calc(100vh - 144px), where 144px
     * is the combined height of the shellbar, wizard header and wizard footer.
     */
    contentHeight?: string;
    /**
     * @description Boolean flag indicating whether or not to display Summary step in Wizard progress bar.
     */
    displaySummaryStep: boolean;
    /**
     * @description Wizards dialog title configuration.
     */
    title: WizardTitle;
    /**
     * @description Text that will be displayed if user clicks on Cancel button.
     */
    confirmationDialogText?: string;
    /**
     * @description Text that will be displayed if user clicks on Close button in confirmation dialog.
     */
    confirmationDialogCloseText?: string;
    /**
     * @description Text that will be displayed if user clicks on Cancel button in confirmation dialog.
     */
    confirmationDialogCancelText?: string;
    /**
     * User-defined template for "Go Next" button.
     */
    goNextButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Go Back" button.
     */
    goBackButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Finish" button.
     */
    finishButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Cancel" button.
     */
    cancelButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for cancel confirmation dialog.
     */
    confirmationDialogTemplate?: TemplateRef<HTMLElement>;
    /** User-defined template for Summary step. */
    summaryStepTemplate?: TemplateRef<HTMLElement>;
    /** User-defined template for "Review" button. */
    reviewButtonTemplate?: TemplateRef<HTMLElement>;
    /** If navigation buttons should be visible. */
    navigationButtons?: boolean;
    /** Whether or not all form items should have identical layout provided for form group. */
    unifiedLayout?: boolean;
}

declare class DialogWizardGeneratorComponent extends BaseWizardGenerator {
    private _dialogRef;
    /** @hidden */
    defaultConfirmationDialogTemplate: TemplateRef<HTMLElement>;
    /**
     * @description Wizards dialog title configuration.
     */
    title: WizardTitle;
    /**
     * @description Confirmation message when wizard dialog close button has been clicked.
     */
    confirmationDialogText: string;
    /**
     * @description Confirm button text for close confirmation dialog.
     */
    confirmationDialogCloseText: string;
    /**
     * @description Cancel button text for close confirmation dialog.
     */
    confirmationDialogCancelText: string;
    /**
     * User-defined template for "Go Next" button.
     */
    goNextButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Go Back" button.
     */
    goBackButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Finish" button.
     */
    finishButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Cancel" button.
     */
    cancelButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for cancellation confirmation dialog.
     */
    confirmationDialogTemplate?: TemplateRef<HTMLElement>;
    /**
     * User-defined template for summary step.
     */
    summaryStepTemplate?: TemplateRef<HTMLElement>;
    /** User-defined template for "Review" button */
    reviewButtonTemplate?: TemplateRef<HTMLElement>;
    /** @hidden */
    private readonly _messageBoxService;
    /** @hidden */
    constructor(_dialogRef: DialogRef<WizardDialogData>);
    /**
     * @description Cancels Wizard progress and closes the dialog.
     */
    cancel(): void;
    /**
     * @description Completes Wizard process, emits Wizard result and closes the dialog.
     */
    finish(): Promise<void>;
    /**
     * @hidden
     */
    _goBackFn: () => void;
    /**
     * @hidden
     */
    _goNextFn: () => Promise<void>;
    /**
     * @hidden
     */
    _finishFn: () => Promise<void>;
    /**
     * @hidden
     */
    _cancelFn: () => void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DialogWizardGeneratorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DialogWizardGeneratorComponent, "fdp-dialog-wizard-generator", never, {}, {}, never, never, true, never>;
}

interface WizardStepChange {
    id: string;
    status: WizardStepStatus;
}
declare class WizardBodyComponent implements OnInit {
    private _wizardGeneratorService;
    private _cd;
    /**
     * @description Whether or not apply responsive paddings styling.
     */
    responsivePaddings: boolean;
    /**
     * @description Button labels to be used in Wizard navigation
     */
    navigationButtonLabels: Required<WizardNavigationButtons>;
    /**
     * @description Whether or not to append the step to the wizard. If false, each step will be displayed on a different page.
     * Default is true.
     */
    appendToWizard: boolean;
    /**
     * @description Custom height to use for the wizard's content pane. By default, this value is calc(100vh - 144px), where 144px
     * is the combined height of the Shellbar, wizard header and wizard footer.
     */
    contentHeight: Nullable<string>;
    /**
     * @description Whether or not Wizard is currently on the first step
     */
    isFirstStep: boolean;
    /**
     * @description Whether Wizard is currently on the last step.
     */
    isLastStep: boolean;
    /**
     * Whether next step is a Summary step.
     */
    isNextStepSummary: boolean;
    /**
     * @description Boolean flag indicating whether to display Summary step in Wizard progress bar.
     */
    displaySummaryStep: boolean;
    /**
     * User-defined template for "Go Next" button.
     */
    goNextButtonTemplate: TemplateRef<any>;
    /**
     * User-defined template for "Finish" button.
     */
    finishButtonTemplate: TemplateRef<any>;
    /**
     * User-defined template for summary step.
     */
    customSummaryStepTemplate?: TemplateRef<HTMLElement>;
    /** User-defined template for "Review" button */
    reviewButtonTemplate?: TemplateRef<HTMLElement>;
    /**
     * @description Is current step is summary step.
     */
    isSummaryStep: boolean;
    /** If navigation buttons should be visible. */
    navigationButtons: boolean;
    /** Whether or not all form items should have identical layout provided for form group. */
    unifiedLayout: boolean;
    /** Whether current step is a branching step. */
    isBranchingStep: boolean;
    /** Whether current step is completed */
    isCurrentStepCompleted: boolean;
    /** Whether order of steps was changed  */
    stepsOrderChanged: boolean;
    /**
     * @description Emits when some step status has been changed.
     */
    statusChange: EventEmitter<WizardStepChange>;
    /**
     * @description Emits when "Go next" button has been clicked
     */
    goNext: EventEmitter<void>;
    /**
     * @description Emits when "Finish" button has been clicked
     */
    finish: EventEmitter<void>;
    /**
     * @hidden
     * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)
     */
    private readonly _destroyRef;
    /**
     * @hidden
     */
    private _visibleItems;
    /**
     * @description Array of visible Wizard Steps.
     */
    set visibleItems(items: PreparedWizardGeneratorItem[]);
    get visibleItems(): PreparedWizardGeneratorItem[];
    /** @hidden */
    constructor(_wizardGeneratorService: WizardGeneratorService, _cd: ChangeDetectorRef);
    /**
     * @hidden
     */
    _goNextFn: () => void;
    /**
     * @hidden
     */
    _finishFn: () => void;
    /**
     * @description Custom step status change validator function.
     * @param index Current step index.
     * @returns {Promise<boolean>} If this step status can be changed.
     */
    stepClickValidatorFn(index: number): () => Promise<boolean>;
    /**
     * @hidden
     */
    ngOnInit(): void;
    /**
     * @description Callback function for status change.
     * @param id step ID.
     * @param status new step status.
     */
    stepStatusChanged(id: string, status: WizardStepStatus): void;
    /** @hidden */
    stepClicked(stepId: string): void;
    /**
     * @hidden
     * @param _index
     * @param item
     * @returns
     */
    _trackFn(_index: number, item: WizardGeneratorItem): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardBodyComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardBodyComponent, "fdp-wizard-body", never, { "responsivePaddings": { "alias": "responsivePaddings"; "required": false; }; "navigationButtonLabels": { "alias": "navigationButtonLabels"; "required": false; }; "appendToWizard": { "alias": "appendToWizard"; "required": false; }; "contentHeight": { "alias": "contentHeight"; "required": false; }; "isFirstStep": { "alias": "isFirstStep"; "required": false; }; "isLastStep": { "alias": "isLastStep"; "required": false; }; "isNextStepSummary": { "alias": "isNextStepSummary"; "required": false; }; "displaySummaryStep": { "alias": "displaySummaryStep"; "required": false; }; "goNextButtonTemplate": { "alias": "goNextButtonTemplate"; "required": false; }; "finishButtonTemplate": { "alias": "finishButtonTemplate"; "required": false; }; "customSummaryStepTemplate": { "alias": "customSummaryStepTemplate"; "required": false; }; "reviewButtonTemplate": { "alias": "reviewButtonTemplate"; "required": false; }; "isSummaryStep": { "alias": "isSummaryStep"; "required": false; }; "navigationButtons": { "alias": "navigationButtons"; "required": false; }; "unifiedLayout": { "alias": "unifiedLayout"; "required": false; }; "isBranchingStep": { "alias": "isBranchingStep"; "required": false; }; "isCurrentStepCompleted": { "alias": "isCurrentStepCompleted"; "required": false; }; "stepsOrderChanged": { "alias": "stepsOrderChanged"; "required": false; }; }, { "statusChange": "statusChange"; "goNext": "goNext"; "finish": "finish"; }, never, never, true, never>;
}

declare class WizardGeneratorStepComponent implements WizardGeneratorStep, OnInit, OnDestroy, OnChanges {
    private _wizardGeneratorService;
    private _formGeneratorService;
    /**
     * @description Step Form Generator components.
     */
    formGenerators: QueryList<FormGeneratorComponent>;
    /**
     * @description Current step.
     */
    item: WizardGeneratorItem;
    /**
     * Wizard step status.
     */
    stepStatus: WizardStepStatus;
    /** Whether all form items should have identical layout provided for form group. */
    unifiedLayout: boolean;
    /**
     * @description Emits when all forms in the step has been submited
     */
    formsSubmitted: EventEmitter<DynamicFormValue[]>;
    /**
     * @description Emits when all forms in the step has been created
     */
    formsCreated: EventEmitter<WizardStepForms>;
    /**
     * @hidden
     */
    _visibleFormGroupIds: Record<string, boolean>;
    /**
     * @hidden
     */
    private _submittedForms;
    /**
     * @hidden
     */
    private _formSubmitted$;
    /**
     * @hidden
     */
    private _forms;
    /**
     * @hidden
     */
    private _trackedFields;
    /**
     * @hidden
     * @private
     */
    private _hiddenFormGroupValues;
    /**
     * @hidden
     * An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing)
     */
    private readonly _destroyRef;
    /** @hidden */
    constructor(_wizardGeneratorService: WizardGeneratorService, _formGeneratorService: FormGeneratorService);
    /**
     * @hidden
     */
    ngOnInit(): Promise<void>;
    /**
     * @hidden
     */
    ngOnDestroy(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): Promise<void>;
    /**
     * @description Adds created form instance to the object of the forms.
     * @param form Form instance
     * @param key Form ID from @see item
     */
    onFormCreated(form: DynamicFormGroup, key: string): Promise<void>;
    /**
     * @description Adds component to the service for further usage.
     */
    addComponentToParent(): Promise<void>;
    /**
     * @description Callback function when form has been submitted.
     * @param result Form submission result.
     * @param index Form index in the step.
     */
    onFormSubmitted(result: SubmitFormEventResult, index: string): void;
    /**
     * Returns visible forms in the step.
     */
    getVisibleForms(): WizardStepForms;
    /**
     * @description Clears previously submitted form values and re-submit them again.
     * @returns Subject, which will return forms value.
     */
    submitForms(skipIfUntouched?: boolean): Subject<WizardStepSubmittedForms | null>;
    /**
     * Triggers form value revalidation and checks if field in form should be visible.
     */
    updateFormsState(): Promise<void>;
    /**
     * Refreshes step form group visibility.
     */
    refreshFormsVisibility(): Promise<void>;
    /**
     * @hidden
     * @description Keeps track on dependency fields for other steps and refreshes the view when they changed.
     * @param form
     * @param key
     */
    private _trackDependencyFieldsChanges;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorStepComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardGeneratorStepComponent, "fdp-wizard-generator-step", never, { "item": { "alias": "item"; "required": false; }; "stepStatus": { "alias": "stepStatus"; "required": false; }; "unifiedLayout": { "alias": "unifiedLayout"; "required": false; }; }, { "formsSubmitted": "formsSubmitted"; "formsCreated": "formsCreated"; }, never, never, true, never>;
}

declare class WizardGeneratorComponent extends BaseWizardGenerator {
    /**
     * User-defined template for "Finish" button.
     */
    finishButtonTemplate: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Go Next" button.
     */
    goNextButtonTemplate: TemplateRef<HTMLElement>;
    /**
     * User-defined template for Summary step.
     */
    customSummaryStepTemplate: TemplateRef<HTMLElement>;
    /**
     * User-defined template for "Review" button
     */
    reviewButtonTemplate: TemplateRef<HTMLElement>;
    /** @hidden */
    readonly loadingRange: number[];
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardGeneratorComponent, "fdp-wizard-generator", never, {}, {}, ["finishButtonTemplate", "goNextButtonTemplate", "customSummaryStepTemplate", "reviewButtonTemplate"], never, true, never>;
}

interface WizardGeneratorSummaryItem {
    id: string;
    name?: string;
    title?: string;
    forms: FormattedFormStep[];
}
interface FormattedFormStep {
    title: string;
    id: string;
    items: FormattedFormStepItem[];
}
interface FormattedFormStepItem {
    label: string;
    value: any;
}

declare class WizardSummarySectionComponent {
    /**
     * @description Current step for the section.
     */
    step: WizardGeneratorSummaryItem;
    /**
     * Emits when step edit button clicked.
     */
    editStep: EventEmitter<string>;
    /**
     * @hidden
     * @description Sets current step on wizard.
     * @param event Mouse click event to prevent.
     */
    _editStep(event: MouseEvent | KeyboardEvent | TouchEvent): void;
    /** @hidden */
    _trackFn(_: number, form: FormattedFormStep): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardSummarySectionComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardSummarySectionComponent, "fdp-wizard-summary-section", never, { "step": { "alias": "step"; "required": false; }; }, { "editStep": "editStep"; }, never, never, true, never>;
}

declare class WizardSummaryStepComponent {
    private _wizardGeneratorService;
    private _formGeneratorService;
    private _cd;
    /**
     * @description Summary step status.
     */
    set status(status: WizardStepStatus);
    /**
     * User-defined template for Summary step.
     */
    customSummaryStepTemplate: Nullable<TemplateRef<HTMLElement>>;
    /**
     * Formatted wizard value with steps and their forms.
     */
    formattedWizardValue: WizardGeneratorSummaryItem[];
    /**
     * @hidden
     */
    _submittedForms: WizardGeneratorFormsValue;
    /**
     * @hidden
     */
    _shouldRender: boolean;
    /**
     * @hidden
     */
    _wizardSteps: WizardGeneratorItem[];
    /** @hidden */
    constructor(_wizardGeneratorService: WizardGeneratorService, _formGeneratorService: FormGeneratorService, _cd: ChangeDetectorRef);
    /**
     * Opens defined step for editing.
     * @param stepId Defined step ID.
     */
    editStep(stepId: string): void;
    /** @hidden */
    _trackFn(_: number, step: WizardGeneratorSummaryItem): string;
    /** @hidden */
    _editStepFn: (stepId: string) => void;
    /** @hidden */
    private _formatWizardValue;
    /** @hidden */
    private _formatStepValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardSummaryStepComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardSummaryStepComponent, "fdp-wizard-summary-step", never, { "status": { "alias": "status"; "required": false; }; "customSummaryStepTemplate": { "alias": "customSummaryStepTemplate"; "required": false; }; }, {}, never, never, true, never>;
}

declare class WizardGeneratorFinishButtonDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorFinishButtonDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<WizardGeneratorFinishButtonDirective, "[fdpWizardGeneratorFinishButton], [fdp-wizard-generator-finish-button]", never, {}, {}, never, never, true, never>;
}

declare class WizardGeneratorGoNextButtonDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorGoNextButtonDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<WizardGeneratorGoNextButtonDirective, "[fdpWizardGeneratorGoNextButton], [fdp-wizard-generator-go-next-button]", never, {}, {}, never, never, true, never>;
}

declare class WizardGeneratorReviewButtonDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorReviewButtonDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<WizardGeneratorReviewButtonDirective, "[fdpWizardGeneratorReviewButton], [fdp-wizard-generator-review-button]", never, {}, {}, never, never, true, never>;
}

declare class WizardGeneratorSummaryStepDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardGeneratorSummaryStepDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<WizardGeneratorSummaryStepDirective, "[fdpWizardGeneratorSummaryStep], [fdp-wizard-generator-summary-step]", never, {}, {}, never, never, true, never>;
}

/**
 * @description Helper service to launch Wizard in dialog with minimal user input.
 */
declare class WizardDialogGeneratorService {
    private _dialogService;
    /** @hidden */
    constructor(_dialogService: DialogService);
    /**
     * @description Opens dialog with wizard component inside.
     * @param config Dialog options with wizard config.
     * @returns DialogRef instance.
     */
    open(config: DialogConfig<WizardDialogData>): DialogRef<WizardDialogData, WizardGeneratorFormsValue>;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardDialogGeneratorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WizardDialogGeneratorService>;
}

/**
 * Adds Wizard Generator functionality to your application.
 *
 * Can be imported in two ways:
 * * Plain PlatformWizardGeneratorModule with default configuration
 * * With `withConfig()` method which allows passing custom default configuration.
 */
/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class PlatformWizardGeneratorModule {
    /**
     * Allows configuring module on a global level with custom configuration.
     * @param config User's custom configuration.
     */
    static withConfig(config: Partial<FormGeneratorModuleConfig>): ModuleWithProviders<PlatformWizardGeneratorModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<PlatformWizardGeneratorModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<PlatformWizardGeneratorModule, never, [typeof i1.PlatformFormGeneratorModule, typeof WizardGeneratorComponent, typeof WizardGeneratorStepComponent, typeof WizardBodyComponent, typeof DialogWizardGeneratorComponent, typeof WizardSummaryStepComponent, typeof WizardSummarySectionComponent, typeof WizardGeneratorGoNextButtonDirective, typeof WizardGeneratorFinishButtonDirective, typeof WizardGeneratorSummaryStepDirective, typeof WizardGeneratorReviewButtonDirective], [typeof WizardGeneratorComponent, typeof WizardGeneratorStepComponent, typeof WizardBodyComponent, typeof DialogWizardGeneratorComponent, typeof WizardSummaryStepComponent, typeof WizardSummarySectionComponent, typeof WizardGeneratorGoNextButtonDirective, typeof WizardGeneratorFinishButtonDirective, typeof WizardGeneratorSummaryStepDirective, typeof WizardGeneratorReviewButtonDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<PlatformWizardGeneratorModule>;
}

export { BaseWizardGenerator, DEFAULT_WIZARD_NAVIGATION_BUTTONS, DialogWizardGeneratorComponent, PlatformWizardGeneratorModule, WizardBodyComponent, WizardDialogGeneratorService, WizardGeneratorComponent, WizardGeneratorFinishButtonDirective, WizardGeneratorGoNextButtonDirective, WizardGeneratorRefreshStrategy, WizardGeneratorReviewButtonDirective, WizardGeneratorService, WizardGeneratorStepComponent, WizardGeneratorSummaryStepDirective, WizardSummarySectionComponent, WizardSummaryStepComponent };
export type { DependencySteps, FormattedFormStep, FormattedFormStepItem, PreparedWizardGeneratorItem, StepDependencyFields, StepsComponents, WizardDialogData, WizardGeneratorDependencyFields, WizardGeneratorFormFieldItem, WizardGeneratorFormGroup, WizardGeneratorFormGroupGuiOptions, WizardGeneratorFormGroupItem, WizardGeneratorFormItem, WizardGeneratorFormsValue, WizardGeneratorItem, WizardGeneratorStep, WizardGeneratorSummaryItem, WizardNavigationButton, WizardNavigationButtons, WizardStepChange, WizardStepForms, WizardStepFormsValue, WizardStepSubmittedForms, WizardTitle, WizardVisibleSteps };
