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;
    showMaximizeToggle?: boolean;
    maximizeTooltip?: string;
    restoreTooltip?: string;
}
declare class DrawerService {
    private appRef;
    private env;
    private rootInjector;
    private destroyRef;
    private doc;
    private hostRef?;
    defauiltConfig: DynamicDrawerConfigInterface;
    constructor();
    open<T>(component: Type<any>, config?: DynamicDrawerConfigInterface): DynamicDialogRef<T>;
    private preloadDrawerHost;
    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;
    private _maximized;
    /** 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>;
    /** Get the current maximized (full-width) state */
    get maximized(): _angular_core.WritableSignal<boolean>;
    /** 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;
    /** Set maximized (full-width) state */
    setMaximized(maximized: boolean): void;
    /** Toggle maximized (full-width) state */
    toggleMaximized(): 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 closed;
    private drawerController;
    private readonly host;
    private readonly renderer;
    private readonly transloco;
    private resizeAnimTimer;
    private readonly RESIZE_ANIM_CLASS;
    private readonly RESIZE_ANIM_DURATION_MS;
    constructor();
    /** Computed styleClass combining config + dynamic controller class */
    computedStyleClass: _angular_core.Signal<string>;
    /** Whether the maximize toggle button is visible in the header */
    canShowMaximizeToggle: _angular_core.Signal<boolean>;
    /** Tooltip for maximize/restore button (state-aware) */
    maximizeButtonTooltip: _angular_core.Signal<any>;
    /** Icon for maximize/restore button (state-aware) */
    maximizeButtonIcon: _angular_core.Signal<"layout.minimize-01" | "layout.maximize-01">;
    /** Toggle the drawer's full-width state */
    toggleMaximized(): void;
    computedDrawerStyle: _angular_core.Signal<Record<string, string> | null>;
    /** 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;
    show(): void;
    handleHide(data?: null): void;
    /** Close the drawer ref at most once, regardless of the close path. */
    private closeOnce;
    onDrawerShow(): void;
    onDrawerHide(): void;
    private getDrawerElement;
    private applyMaximizedInlineStyles;
    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 };
