import { ElementRef, OnDestroy, OnInit, Renderer2 } from '@angular/core';
import { AbstractControl, RxapFormControl } from '@rxap/forms';
import { ControlContainer, NgControl } from '@angular/forms';
import { ExtractControlFromParentMixin } from '../mixins/extract-control-from-parent.mixin';
import { ExtractFormDefinitionMixin } from '../mixins/extract-form-definition.mixin';
import * as i0 from "@angular/core";
export declare const RXAP_FORM_SYSTEM_SHOW_METADATA = "rxap/form-system/show-function";
export declare const RXAP_FORM_SYSTEM_HIDE_METADATA = "rxap/form-system/hide-function";
export declare const RXAP_FORM_SYSTEM_HIDE_SHOW_OPTIONS = "rxap/form-system/hide-show-options";
export type ControlHideShowFunction<T = any> = (this: T, control: AbstractControl) => boolean | null;
export interface ControlHideShowOptions {
    /**
     * Weather the hide/showFunction should be called on root group changes
     */
    rootChange?: boolean;
}
export declare function UseHideFunction(hideFunction: ControlHideShowFunction, options?: ControlHideShowOptions): (target: any, propertyKey: string) => void;
export declare function UseShowFunction(showFunction: ControlHideShowFunction, options?: ControlHideShowOptions): (target: any, propertyKey: string) => void;
export interface ControlHideShowDirective extends ExtractControlFromParentMixin, ExtractFormDefinitionMixin {
}
export declare class ControlHideShowDirective implements OnInit, OnDestroy {
    private readonly renderer;
    private readonly elementRef;
    private readonly parent;
    private readonly ngControl;
    controlId?: string;
    control: RxapFormControl;
    private subscription;
    constructor(renderer: Renderer2, elementRef: ElementRef, parent: ControlContainer | null, ngControl: NgControl | null);
    ngOnInit(): void;
    ngOnDestroy(): void;
    private extractOptions;
    private extractHideFunction;
    private extractShowFunction;
    private hide;
    private show;
    private reset;
    static ɵfac: i0.ɵɵFactoryDeclaration<ControlHideShowDirective, [null, null, { optional: true; }, { optional: true; self: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<ControlHideShowDirective, "[rxapControlHideShow]", never, { "controlId": { "alias": "rxapControlHideShow"; "required": false; }; }, {}, never, never, true, never>;
}
