import * as _angular_core from '@angular/core';

type PropertyFilterBuilderValueMode = 'single' | 'multi' | 'range' | 'none';
interface PropertyFilterBuilderFieldOption {
    key: string;
    label?: string;
    viewType?: string;
}
interface PropertyFilterBuilderOperatorOption {
    key: string;
    label?: string;
    valueMode?: PropertyFilterBuilderValueMode;
}
interface PropertyFilterBuilderSchema {
    allowedFields: Array<string | PropertyFilterBuilderFieldOption>;
    allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;
    maxFilters?: number;
}
interface PropertyFilterBuilderRule {
    field: string;
    op: string;
    value?: unknown;
    values?: unknown[];
    from?: unknown;
    to?: unknown;
}
interface PropertyFilterBuilderDraft {
    id: string;
    field: string;
    op: string;
    value: unknown;
    from: unknown;
    to: unknown;
}
interface SelectOption {
    key: string;
    label: string;
    viewType?: string;
}
declare class PropertyFilterBuilder {
    readonly schema: _angular_core.InputSignal<PropertyFilterBuilderSchema | null>;
    readonly filters: _angular_core.ModelSignal<PropertyFilterBuilderRule[]>;
    readonly title: _angular_core.InputSignal<string>;
    readonly buttonLabel: _angular_core.InputSignal<string>;
    readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
    readonly applied: _angular_core.OutputEmitterRef<PropertyFilterBuilderRule[]>;
    readonly cleared: _angular_core.OutputEmitterRef<void>;
    private readonly rowSeed;
    private readonly syncedSignature;
    protected readonly drafts: _angular_core.WritableSignal<PropertyFilterBuilderDraft[]>;
    protected readonly fieldOptions: _angular_core.Signal<SelectOption[]>;
    protected readonly operatorOptions: _angular_core.Signal<(SelectOption & {
        valueMode: PropertyFilterBuilderValueMode;
    })[]>;
    protected readonly hasSchema: _angular_core.Signal<boolean>;
    protected readonly maxFilters: _angular_core.Signal<number>;
    protected readonly canAddFilter: _angular_core.Signal<boolean>;
    protected readonly activeFilterCount: _angular_core.Signal<number>;
    constructor();
    onPopoverToggle(event: Event, popover: {
        toggle: (event: Event) => void;
    }): void;
    addFilter(): void;
    removeFilter(index: number): void;
    clearAll(popover: {
        hide: () => void;
    }): void;
    apply(popover: {
        hide: () => void;
    }): void;
    onFieldChange(index: number, field: string): void;
    onOperatorChange(index: number, op: string): void;
    onValueChange(index: number, value: unknown): void;
    onFromChange(index: number, from: unknown): void;
    onToChange(index: number, to: unknown): void;
    getValueMode(op: string): PropertyFilterBuilderValueMode;
    getValueInputType(field: string, op: string): string;
    isDateField(field: string): boolean;
    isDateTimeField(field: string): boolean;
    private buildRulesFromDrafts;
    private getFieldViewType;
    private patchDraft;
    private createDraft;
    private toDraftValue;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyFilterBuilder, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyFilterBuilder, "mt-property-filter-builder", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "filters": "filtersChange"; "applied": "applied"; "cleared": "cleared"; }, never, never, true, never>;
}

export { PropertyFilterBuilder };
export type { PropertyFilterBuilderFieldOption, PropertyFilterBuilderOperatorOption, PropertyFilterBuilderRule, PropertyFilterBuilderSchema, PropertyFilterBuilderValueMode };
