import { ElementRef } from '@angular/core';
import * as i0 from "@angular/core";
/**
 * File upload context.
 */
export declare class KbqFileUploadContext {
    /** id for file input */
    readonly id: import("@angular/core").InputSignal<string | null>;
    /** Whether file input selectable or not */
    readonly disabled: import("@angular/core").ModelSignal<boolean | null>;
    /** Selection mode for file input */
    readonly multiple: import("@angular/core").InputSignalWithTransform<boolean | null, unknown>;
    /** File type specifiers */
    readonly accept: import("@angular/core").InputSignal<string | null>;
    /**
     * Reflects webkitdirectory attribute, which indicates that elements can only select directories instead of files.
     */
    readonly onlyDirectory: import("@angular/core").InputSignal<boolean | null>;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqFileUploadContext, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFileUploadContext, "[kbqFileUploadContext]", ["kbqFileUploadContext"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "onlyDirectory": { "alias": "onlyDirectory"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; }, never, never, true, never>;
}
/**
 * Loader component to trigger Browser API.
 */
export declare class KbqFileLoader {
    private fileUploadContext;
    /** Whether file input selectable or not */
    readonly disabled: import("@angular/core").InputSignal<boolean>;
    /** Selection mode for file input */
    readonly multiple: import("@angular/core").InputSignal<boolean | null>;
    /** File type specifiers */
    readonly accept: import("@angular/core").InputSignal<string | null>;
    /** id for file input  */
    readonly for: import("@angular/core").InputSignal<string | null>;
    /**
     * Reflects webkitdirectory attribute,
     * which indicates that elements can only select directories instead of files.
     * @link [`HTMLInputElement: webkitdirectory property`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory)
     */
    readonly onlyDirectory: import("@angular/core").InputSignal<boolean | null>;
    /** Event fires when file selected in file-picker. */
    readonly fileChange: import("@angular/core").OutputEmitterRef<Event>;
    /** Underlying file input element */
    readonly input: import("@angular/core").Signal<ElementRef<HTMLInputElement>>;
    /** @docs-private */
    protected readonly innerDisabled: import("@angular/core").Signal<boolean>;
    /** @docs-private */
    protected readonly innerMultiple: import("@angular/core").Signal<boolean | null>;
    /** @docs-private */
    protected readonly innerAccept: import("@angular/core").Signal<string | null>;
    /** @docs-private */
    protected readonly innerFor: import("@angular/core").Signal<string | null>;
    /** @docs-private */
    protected readonly innerOnlyDirectory: import("@angular/core").Signal<boolean | null>;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqFileLoader, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<KbqFileLoader, "[kbqFileLoader]", ["kbqFileLoader"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "onlyDirectory": { "alias": "onlyDirectory"; "required": false; "isSignal": true; }; }, { "fileChange": "fileChange"; }, never, ["*"], true, never>;
}
/**
 * Responsible for list update (add/remove)
 */
export declare class KbqFileList<T> {
    /** Current list of items. */
    readonly list: import("@angular/core").ModelSignal<T[]>;
    /**
     * Emits an event containing a tuple of file and file's index when removed from the file list.
     * Useful when handle removed files, skipping filtering file list.
     */
    readonly itemRemoved: import("@angular/core").OutputEmitterRef<[T, number]>;
    /** Emits array of items that were added to the list. */
    readonly itemsAdded: import("@angular/core").OutputEmitterRef<T[]>;
    /** Adds a single item to the list and emits event */
    add(item: T): void;
    /** Adds multiple items to the list and emits event */
    addArray(items: T[]): void;
    /** Removes the first occurrence of the specified item. Returns removed items and emits event. */
    remove(item: T): T[];
    /** Removes item at specified index. Returns removed items and emits event. */
    removeAt(index: number): T[];
    private update;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqFileList<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFileList<any>, "[kbqFileList]", ["kbqFileList"], { "list": { "alias": "list"; "required": false; "isSignal": true; }; }, { "list": "listChange"; "itemRemoved": "itemRemoved"; "itemsAdded": "itemsAdded"; }, never, never, true, never>;
}
