import * as _angular_core from '@angular/core';
import { Type, InjectionToken, Injector } from '@angular/core';
import { DynamicDialogRef } from 'primeng/dynamicdialog';

interface DynamicDrawerConfigInterface {
    header?: string;
    position?: string;
    data?: any;
    fullScreen?: boolean;
    modal?: boolean;
    closable?: boolean;
    closeOnEscape?: boolean;
    dismissible?: boolean;
    appendTo?: any;
    transitionOptions?: string;
    styleClass?: string;
    inputValues?: any;
}
declare class DrawerService {
    private appRef;
    private env;
    private rootInjector;
    private destroyRef;
    private doc;
    private hostRef?;
    defauiltConfig: DynamicDrawerConfigInterface;
    open<T>(component: Type<any>, config?: DynamicDrawerConfigInterface): DynamicDialogRef<T>;
    private resolveAppendTarget;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<DrawerService>;
}

declare const DynamicDrawerConfig: InjectionToken<any>;
/**
 * Controller to dynamically update drawer properties from inside the child component.
 * Inject this in your drawer content component to modify drawer behavior.
 */
declare class DrawerController {
    private _styleClass;
    private _header;
    private _fullScreen;
    /** Get the current additional styleClass */
    get styleClass(): _angular_core.WritableSignal<string>;
    /** Get the current header */
    get header(): _angular_core.WritableSignal<string>;
    /** Get the current fullScreen state */
    get fullScreen(): _angular_core.WritableSignal<boolean | undefined>;
    /** Add or replace the dynamic styleClass */
    setStyleClass(styleClass: string): void;
    /** Append a class to the existing styleClass */
    addClass(className: string): void;
    /** Remove a class from the styleClass */
    removeClass(className: string): void;
    /** Toggle a class on/off */
    toggleClass(className: string): void;
    /** Update the drawer header */
    setHeader(header: string): void;
    /** Toggle fullScreen mode */
    setFullScreen(fullScreen: boolean): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerController, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<DrawerController>;
}
declare class DynamicDrawerHost {
    visible: _angular_core.ModelSignal<boolean>;
    cmp: _angular_core.WritableSignal<any>;
    cfg: _angular_core.WritableSignal<any>;
    cmpInputs: _angular_core.WritableSignal<Record<string, unknown>>;
    childInjector: Injector;
    private ref?;
    private drawerController;
    /** Computed styleClass combining config + dynamic controller class */
    computedStyleClass: _angular_core.Signal<string>;
    /** Computed header - controller overrides config if set */
    computedHeader: _angular_core.Signal<any>;
    /** Computed fullScreen - controller overrides config if set */
    computedFullScreen: _angular_core.Signal<any>;
    connect(opts: {
        component: any;
        config?: any;
        parent: Injector;
        ref: DynamicDialogRef;
    }): void;
    handleHide(data?: null): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicDrawerHost, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicDrawerHost, "mt-dynamic-drawer-host", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "connect": { "alias": "connect"; "required": true; }; }, { "visible": "visibleChange"; }, never, never, true, never>;
}

export { DrawerController, DrawerService, DynamicDrawerConfig, DynamicDrawerHost };
export type { DynamicDrawerConfigInterface };
