import * as i0 from '@angular/core';
import { TemplateRef } from '@angular/core';
import { NXComponent } from '@acorex/cdk/common';
import { AXComponentInputs, AXComponentContent } from '@acorex/core/components';
import { AXOverlayOptions } from '@acorex/cdk/overlay';
import { Subject } from 'rxjs';

declare class AXModalFooterComponent {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXModalFooterComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXModalFooterComponent, "ax-modal-footer", never, {}, {}, never, ["ax-prefix", "ax-suffix", "ax-modal-footer"], true, never>;
}

interface AXModalOptions extends AXOverlayOptions {
    title?: string;
    buttons?: {
        minimize?: {
            enable: boolean;
            position: 'bottom-right' | 'bottom-left';
        };
        maximize?: boolean;
        close?: boolean;
    };
    draggable?: boolean;
    size?: 'sm' | 'md' | 'lg' | 'full' | 'fit';
    header?: boolean;
    footer?: boolean;
    panelClass?: string;
    closeOnEscape?: boolean;
}
interface AXModalRef<TResult = any> {
    minimize: () => void;
    maximize: () => void;
    restore: () => void;
    close: (data?: TResult) => void;
    setInputs: (values: AXComponentInputs) => void;
    /** Brings this modal to the front of all other overlays */
    bringToFront: () => void;
    onClose: Subject<TResult>;
}
declare abstract class AXModalComponentBase {
    __modal__: i0.InputSignal<AXModalRef<any>>;
    close(data?: any): void;
    minimize(): void;
    restore(): void;
    maximize(): void;
    bringToFront(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXModalComponentBase, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AXModalComponentBase, never, never, { "__modal__": { "alias": "__modal__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class AXModalComponent extends NXComponent {
    private service;
    protected template: i0.Signal<TemplateRef<any>>;
    private ref;
    /**
     * Opens the modal with the specified options.
     * @param options - Configuration options for the modal
     * @returns Promise<AXModalRef> - Reference to the opened modal
     */
    open(options?: AXModalOptions): Promise<AXModalRef<any>>;
    /**
     * Closes the currently open modal.
     */
    close(): Promise<void>;
    /**
     * Sets input values for the modal content component.
     * @param values - Object containing input values to set
     */
    setInputs(values: AXComponentInputs): Promise<void>;
    /**
     * Minimizes the modal to the bottom bar.
     */
    minimize(): Promise<void>;
    /**
     * Maximizes the modal to fullscreen.
     */
    maximize(): Promise<void>;
    /**
     * Restores the modal from minimized or maximized state.
     */
    restore(): Promise<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXModalComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<AXModalComponent, "ax-modal", never, {}, {}, never, ["*"], true, never>;
}

declare class AXModalModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<AXModalModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<AXModalModule, never, [typeof AXModalComponent, typeof AXModalFooterComponent], [typeof AXModalComponent, typeof AXModalFooterComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<AXModalModule>;
}

declare class AXModalService {
    private stateService;
    private ref;
    /**
     * Opens a modal with the specified content and options.
     * @param content - Component, template, or HTML element to display
     * @param options - Configuration options for the modal
     * @returns Promise<AXModalRef> - Reference to the opened modal
     */
    open(content: AXComponentContent | HTMLElement, options?: AXModalOptions): Promise<AXModalRef>;
    /**
     * Closes the currently open modal.
     */
    close(): Promise<void>;
    /**
     * Sets input values for the modal content component.
     * @param values - Object containing input values to set
     */
    setInputs(values: AXComponentInputs): Promise<void>;
    /**
     * Minimizes the modal to the bottom bar.
     */
    minimize(): Promise<void>;
    /**
     * Maximizes the modal to fullscreen.
     */
    maximize(): Promise<void>;
    /**
     * Restores the modal from minimized or maximized state.
     */
    restore(): Promise<void>;
    /**
     * Brings the modal to the front of all other overlays.
     */
    bringToFront(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AXModalService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AXModalService>;
}

export { AXModalComponent, AXModalComponentBase, AXModalFooterComponent, AXModalModule, AXModalService };
export type { AXModalOptions, AXModalRef };
