import * as i0 from '@angular/core';
import { EventEmitter, WritableSignal, ElementRef, TemplateRef, InjectionToken, OnChanges, AfterViewInit, OnDestroy, ChangeDetectorRef, SimpleChanges, QueryList } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { ActionSheetComponent } from '@fundamental-ngx/core/action-sheet';
import { IconFont } from '@fundamental-ngx/core/icon';
import { DialogBodyComponent } from '@fundamental-ngx/core/dialog';
import { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';

interface WizardStepIndicator<Component = any> {
    stepIndicatorItemClicked: EventEmitter<Component>;
    stackedItems$: WritableSignal<Component[]>;
    glyph: Nullable<string>;
    setStackedItems(items: Component[]): void;
}

declare class WizardNextStepComponent {
    /**
     * Whether or not the next step button should float directly above the footer.
     */
    floating: boolean;
    /**
     * Whether or not element can be hidden when step status is completed.
     */
    set canHide(value: boolean);
    get canHide(): boolean;
    /** @hidden */
    private _canHide;
    /** @hidden */
    private readonly _elRef;
    /** @hidden */
    _getElRef(): ElementRef;
    /** @hidden */
    _showElement(): void;
    /** @hidden */
    _hideElement(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardNextStepComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardNextStepComponent, "fd-wizard-next-step", never, { "floating": { "alias": "floating"; "required": false; }; "canHide": { "alias": "canHide"; "required": false; }; }, {}, never, ["*"], true, never>;
}

type WizardSize = 'sm' | 'md' | 'lg' | 'xl';
declare class WizardProgressBarDirective {
    /**
     * Size (horizontal paddings) of the wizard progress bar.
     */
    size: Nullable<WizardSize>;
    /** @hidden */
    visible: boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardProgressBarDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<WizardProgressBarDirective, "[fd-wizard-progress-bar]", never, { "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
}

type WizardContentBackground = 'solid' | 'list' | 'transparent';
declare class WizardContentComponent {
    /**
     * The type of wizard background ('solid', 'list', or 'transparent').
     */
    contentBackground: WizardContentBackground;
    /**
     * Size (horizontal paddings) of the wizard content.
     */
    size: WizardSize;
    /** @hidden */
    contentTemplate: TemplateRef<any>;
    /** @hidden */
    nextStep: WizardNextStepComponent;
    /** @hidden */
    wizardContentId: string;
    /** @hidden */
    tallContent: boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardContentComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardContentComponent, "fd-wizard-content", never, { "contentBackground": { "alias": "contentBackground"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, ["nextStep"], ["*"], true, never>;
}

interface WizardComponentInterface {
    displaySummaryStep: boolean;
    ariaLabel: string;
}
declare const WIZARD: InjectionToken<WizardComponentInterface>;

declare class WizardNavigationComponent {
    private _wizard?;
    /** Aria label for the wizard navigation component element. */
    set ariaLabel(value: Nullable<string>);
    get ariaLabel(): string | undefined;
    /** @hidden */
    private _ariaLabel;
    /** @hidden */
    constructor(_wizard?: WizardComponentInterface | undefined);
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardNavigationComponent, [{ optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardNavigationComponent, "fd-wizard-navigation", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, {}, never, ["*"], true, never>;
}

type WizardStepStatus = 'completed' | 'current' | 'upcoming' | 'active';
declare class WizardStepComponent implements OnChanges, AfterViewInit, OnDestroy {
    private _elRef;
    private _cdRef;
    private _wizard;
    /**
     * The aria-label for the step container.
     */
    ariaLabel: Nullable<string>;
    /**
     * @deprecated
     */
    ariaRoleDecription: string;
    /**
     * The type of step ('completed', 'current', 'upcoming', and 'active'.)
     */
    status: WizardStepStatus;
    /**
     * Whether or not this is a 'branching' step.
     */
    branching: boolean;
    /**
     * The label text.
     */
    label: string;
    /**
     * The smaller text for labeling the step as optional.
     */
    optionalText: string;
    /**
     * Whether or not this step is the summary page.
     */
    isSummary: boolean;
    /**
     * User-defined validation function which determines if user can navigate between steps.
     */
    stepClickValidator: (visited: boolean, completed: boolean) => boolean | Promise<boolean>;
    /**
     * Event emitted when the wizard step's status changes.
     */
    statusChange: EventEmitter<WizardStepStatus>;
    /**
     * Event emitted when a step is clicked.
     */
    stepClicked: EventEmitter<WizardStepComponent>;
    /**
     * Event emitted when a step indicator is clicked.
     */
    stepIndicatorItemClicked: EventEmitter<WizardStepComponent>;
    /** @hidden */
    content: WizardContentComponent;
    /** @hidden */
    stepIndicator: WizardStepIndicator<WizardStepComponent>;
    /** The wizard label span element. */
    wizardLabel: ElementRef;
    /** @hidden */
    progressBarLink: ElementRef;
    /** @hidden */
    glyph: string;
    /** @hidden */
    visited: boolean;
    /** @hidden */
    completed: boolean;
    /** @hidden */
    _stepId: number;
    /** @hidden */
    _finalStep: boolean;
    /** @hidden */
    _isValidated: boolean;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(_elRef: ElementRef, _cdRef: ChangeDetectorRef, _wizard: WizardComponentInterface);
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    setFinalStep(val: boolean): void;
    /** @hidden */
    stepContainerKeypress(event?: KeyboardEvent): Promise<void>;
    /** @hidden */
    getClassList(): DOMTokenList;
    /** @hidden */
    hasLabel(label: string): boolean;
    /** @hidden */
    getStepClientWidth(): number;
    /** @hidden */
    removeFromDom(): void;
    /** @hidden */
    _summaryInit(): void;
    /** @hidden */
    _notSummaryInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardStepComponent, [null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardStepComponent, "[fd-wizard-step]", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaRoleDecription": { "alias": "ariaRoleDecription"; "required": false; }; "status": { "alias": "status"; "required": false; }; "branching": { "alias": "branching"; "required": false; }; "label": { "alias": "label"; "required": false; }; "optionalText": { "alias": "optionalText"; "required": false; }; "isSummary": { "alias": "isSummary"; "required": false; }; "stepClickValidator": { "alias": "stepClickValidator"; "required": false; }; }, { "statusChange": "statusChange"; "stepClicked": "stepClicked"; "stepIndicatorItemClicked": "stepIndicatorItemClicked"; }, ["content", "stepIndicator"], ["fd-wizard-step-indicator", "*"], true, never>;
}

declare class WizardStepIndicatorComponent implements WizardStepIndicator, OnDestroy {
    /**
     * The icon to use for this step.
     */
    glyph: Nullable<string>;
    /** Glyph font family */
    glyphFont: IconFont;
    /**
     * Event emitted when this step indicator is clicked.
     */
    stepIndicatorItemClicked: EventEmitter<WizardStepComponent>;
    /** @hidden */
    actionSheet: ActionSheetComponent;
    /** @hidden */
    stackedItems$: i0.WritableSignal<WizardStepComponent[]>;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    stepItemClicked(step?: WizardStepComponent, event?: MouseEvent): void;
    /** @hidden */
    setStackedItems(items: WizardStepComponent[]): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardStepIndicatorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardStepIndicatorComponent, "fd-wizard-step-indicator", never, { "glyph": { "alias": "glyph"; "required": false; }; "glyphFont": { "alias": "glyphFont"; "required": false; }; }, { "stepIndicatorItemClicked": "stepIndicatorItemClicked"; }, never, ["*"], true, never>;
}

declare const STEP_MIN_WIDTH = 168;
declare const STEP_STACKED_TOP_CLASS = "fd-wizard__step--stacked-top";
declare const STEP_STACKED_CLASS = "fd-wizard__step--stacked";
declare const STEP_NO_LABEL_CLASS = "fd-wizard__step--no-label";
declare const WIZARD_NAVIGATION_CLASS = "fd-wizard__navigation";
declare const WIZARD_CONTENT_CLASS = "fd-wizard__content";
declare const WIZARD_CONTAINER_WRAPPER_CLASS = "fd-wizard-container-wrapper";
declare const WIZARD_TALL_CONTENT_CLASS = "fd-wizard-tall-content";
declare const SHELLBAR_CLASS = "fd-shellbar";
declare const BAR_FOOTER_CLASS = "fd-bar--footer";
declare const BAR_FLOATING_FOOTER_CLASS = "fd-bar--floating-footer";
declare let _fromScrollToCurrentStep: any;
declare let timer: any;
declare const handleTimeoutReference: () => void;
declare class WizardComponent implements AfterViewInit, OnDestroy {
    private _elRef;
    private readonly _cdRef;
    private _dialogBodyComponent;
    /**
     * 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;
    /**
     * 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 | null>;
    /**
     * Whether or not apply responsive paddings styling.
     */
    responsivePaddings: boolean;
    /** Whether to display a summary step.  */
    displaySummaryStep: boolean;
    /**
     * adding aria label to the component
     * If not provided, is being translated by i18n package
     */
    ariaLabel: string;
    /** @hidden */
    steps: QueryList<WizardStepComponent>;
    /** @hidden */
    progressBar: WizardProgressBarDirective;
    /** @hidden */
    wizardContent: WizardContentComponent;
    /** @hidden */
    wrapperContainer: ElementRef<HTMLElement>;
    /** @hidden */
    scrollbar: ScrollbarDirective;
    /** @hidden */
    contentTemplates: TemplateRef<any>[];
    /** @hidden */
    stackedStepsLeft: WizardStepComponent[];
    /** @hidden */
    stackedStepsRight: WizardStepComponent[];
    /** @hidden */
    protected _defaultAriaLabel: i0.Signal<string>;
    /** @hidden */
    private _stepEventSubscriptions;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    private _previousWidth;
    /** @hidden */
    private readonly _tabbableService;
    /** @hidden */
    constructor(_elRef: ElementRef, _cdRef: ChangeDetectorRef, _dialogBodyComponent: DialogBodyComponent);
    /** @hidden */
    resizeHandler(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    scrollSpyChange($event: HTMLElement | undefined): void;
    /**
     * @hidden
     * @private
     * This function determines the height of the wizard content by looking for the document's shellbar, the wizard
     * navigation and the wizard footer, and calculating the height based on their presence.
     */
    private _calculateContentHeight;
    /** @hidden */
    private _getShellbarHeight;
    /** @hidden */
    private _getWizardNavHeight;
    /** @hidden */
    private _getWizardFooterHeight;
    /** @hidden */
    private _getDialogOffset;
    /** @hidden */
    private _setContainerAndTallContentHeight;
    /** @hidden */
    private _setupStepEvents;
    /** @hidden */
    private _wizardShrinking;
    /** @hidden */
    private _setContentTemplates;
    /** @hidden */
    private _scrollToCurrentStep;
    /** @hidden */
    private _focusFirstTabbableElement;
    /** @hidden */
    private _setUpScrollListener;
    /** @hidden */
    private _hideSomeStep;
    /** @hidden */
    private _setStackedTop;
    /** @hidden */
    private _resetStepClasses;
    /** @hidden */
    private _handleStepOrStatusChanges;
    /** @hidden */
    private _setFinalStep;
    /** @hidden */
    private _showSummary;
    /** @hidden */
    private _isCurrentStepSummary;
    /** @hidden */
    private _getCurrentStep;
    /** @hidden */
    private _shrinkWhileAnyStepIsTooNarrow;
    /** @hidden */
    private _anyStepIsTooNarrow;
    /** @hidden */
    private _stepClicked;
    /** @hidden */
    private _getLastNonSummaryStep;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardComponent, [null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<WizardComponent, "fd-wizard", never, { "appendToWizard": { "alias": "appendToWizard"; "required": false; }; "contentHeight": { "alias": "contentHeight"; "required": false; }; "responsivePaddings": { "alias": "responsivePaddings"; "required": false; }; "displaySummaryStep": { "alias": "displaySummaryStep"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, {}, ["progressBar", "steps", "wizardContent"], ["fd-wizard-navigation", "*"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of `WizardComponent`,
    `WizardNavigationComponent`,
    `WizardProgressBarDirective`,
    `WizardStepComponent`,
    `WizardStepIndicatorComponent`,
    `WizardContentComponent`,
    `WizardNextStepComponent`
 */
declare class WizardModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<WizardModule, never, [typeof WizardComponent, typeof WizardNavigationComponent, typeof WizardProgressBarDirective, typeof WizardStepComponent, typeof WizardStepIndicatorComponent, typeof WizardContentComponent, typeof WizardNextStepComponent], [typeof WizardComponent, typeof WizardNavigationComponent, typeof WizardProgressBarDirective, typeof WizardStepComponent, typeof WizardStepIndicatorComponent, typeof WizardContentComponent, typeof WizardNextStepComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<WizardModule>;
}

declare class WizardService {
    /** @hidden */
    private readonly _rtlService;
    /** @hidden */
    progressBarKeyHandler(event: any, steps: QueryList<WizardStepComponent>, index: number): void;
    /** @hidden */
    private _focusNext;
    /** @hidden */
    private _focusPrevious;
    static ɵfac: i0.ɵɵFactoryDeclaration<WizardService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<WizardService>;
}

export { BAR_FLOATING_FOOTER_CLASS, BAR_FOOTER_CLASS, SHELLBAR_CLASS, STEP_MIN_WIDTH, STEP_NO_LABEL_CLASS, STEP_STACKED_CLASS, STEP_STACKED_TOP_CLASS, WIZARD, WIZARD_CONTAINER_WRAPPER_CLASS, WIZARD_CONTENT_CLASS, WIZARD_NAVIGATION_CLASS, WIZARD_TALL_CONTENT_CLASS, WizardComponent, WizardContentComponent, WizardModule, WizardNavigationComponent, WizardNextStepComponent, WizardProgressBarDirective, WizardService, WizardStepComponent, WizardStepIndicatorComponent, _fromScrollToCurrentStep, handleTimeoutReference, timer };
export type { WizardComponentInterface, WizardContentBackground, WizardSize, WizardStepIndicator, WizardStepStatus };
