import { EventEmitter, OnInit, QueryList, ViewContainerRef } from '@angular/core';
import { MatTabGroup } from '@angular/material/tabs';
import { MatDrawerContainer } from '@angular/material/sidenav';
import { FileGridComponent } from './file-grid/file-grid.component';
import { ToolbarComponent } from './toolbar/toolbar.component';
import { TreeViewComponent } from './tree-view/tree-view.component';
import { FileSorting, NgxWebComponentsConfig } from '../types';
import { IconResolver } from './icon-resolver';
import { LazyLoaderService } from '../lazy-loader/lazy-loader.service';
import { Fetch } from '../../public-api';
import * as i0 from "@angular/core";
/**
 * Multiple music / video / image files selected turns into a playlist
 * Dragging music / video / image queues the file(s)
 * Can save and edit a list of files as playlist
 * Can "loop" "randomize"
 */
export type DirectoryDescriptor = {
    kind: "directory";
    path: string;
    name: string;
    contents: {
        dirs: DirectoryDescriptor[];
        files: FileDescriptor[];
    };
};
export type FileDescriptor = {
    kind: "file";
    stats: {
        size: number;
        compressedSize?: number;
        atimeMs: number;
        mtimeMs: number;
        ctimeMs: number;
        birthtimeMs: number;
    };
    path: string;
    name: string;
    ext: string;
    comment?: string;
};
export type FSDescriptor = DirectoryDescriptor | FileDescriptor;
export type FileViewTab = {
    id: string;
    label: string;
    breadcrumb: {
        id: string;
        label: string;
    }[];
    path: string;
    selection: FSDescriptor[];
    viewMode: "grid" | "list";
    historyIndex: number;
    history: string[];
    sidebarItems: FSDescriptor[];
    sortOrder: FileSorting;
};
export type NgxFileManagerConfiguration = Partial<{
    /**
     * Initial path
     */
    path: string;
    /**
     * Custom root path (will appear as '/').
     * Defaults to '/'.
     *
     * User cannot view outside of this path.
     *   (Not to be used as a security measure!)
     */
    chrootPath: string;
    /**
     * Restrict users to only navigate around to subpaths of the specified `path`
     */
    navigateOnlyToDescendants: boolean;
    showBreadcrumb: boolean;
    showTreeview: boolean;
    /**
     * Name of the "root" path `/`
     * Defaults to "Storage"
     */
    rootName: string;
    /**
     * Maximum number of items to be stored in history.
     */
    maxHistoryLength: number;
    apiSettings: {
        listEntriesUrl?: string;
        listEntriesUrlTemplate?: (path: string) => string;
        downloadEntryUrl?: string;
        downloadEntryUrlTemplate?: (path: string) => string;
        uploadEntryUrl?: string;
        uploadEntryUrlTemplate?: (path: string) => string;
        deleteEntryUrl?: string;
        deleteEntryUrlTemplate?: (path: string) => string;
        renameEntryUrl?: string;
        renameEntryUrlTemplate?: (path: string) => string;
        createDirectoryUrl?: string;
        createDirectoryUrlTemplate?: (path: string) => string;
    };
    /**
     * The path that images are loaded from.
     * Default value `/assets/dotglitch/webcomponents/`
     */
    assetPath: string;
    sidebarLocationStrategy: "known" | "currentDirectory";
    iconResolver: (file: FSDescriptor) => string;
    imageSize: "normal" | "small" | "huge";
    /**
     *
     */
    selectionMode: "single" | "multiple";
    /**
     * This determines if the filemanager shows selected entries
     *
     * If set to `focusFiles`, file paths that match from the provided `focusedFiles`
     * will be highlighted, and can be selected / deselected.
     */
    mode: "focusFiles" | "normal";
    focusedFiles: string[];
}>;
export declare class FilemanagerComponent implements OnInit {
    readonly libConfig: NgxWebComponentsConfig;
    private readonly lazyLoader;
    private viewContainer;
    private fetch;
    tabGroup: MatTabGroup;
    fileGrids: QueryList<FileGridComponent>;
    treeView: TreeViewComponent;
    toolbar: ToolbarComponent;
    drawer: MatDrawerContainer;
    config: NgxFileManagerConfiguration;
    gridSize: "small" | "normal" | "large";
    mode: "grid" | "list";
    contextTags: {
        [key: string]: string;
    };
    value: FSDescriptor[];
    valueChange: EventEmitter<FSDescriptor[]>;
    gridValues: FSDescriptor[][];
    /**
     * Emits when focused files change.
     * Only available in `focusFiles` mode.
     */
    focusedFilesChange: EventEmitter<any>;
    /**
     * Emits when a file is uploaded.
     */
    fileUpload: EventEmitter<any>;
    /**
     * Emits when a file is downloaded.
     */
    fileDownload: EventEmitter<any>;
    fileRename: EventEmitter<any>;
    fileDelete: EventEmitter<any>;
    fileCopy: EventEmitter<any>;
    filePaste: EventEmitter<any>;
    fileSelect: EventEmitter<FileDescriptor>;
    fileDblClick: EventEmitter<FileDescriptor>;
    folderSelect: EventEmitter<DirectoryDescriptor>;
    folderDblClick: EventEmitter<DirectoryDescriptor>;
    /**
     * Emits when multiple file selections change.
     */
    filesSelect: EventEmitter<FSDescriptor[]>;
    /**
     * Emits when any selection changes, single or multiple files.
     */
    showHiddenFiles: boolean;
    showSidebar: boolean;
    sidebarOverlay: boolean;
    width: number;
    isHomeAncestor: boolean;
    currentTab: FileViewTab;
    get currentFileGrid(): FileGridComponent;
    tabIndex: number;
    tabs: FileViewTab[];
    iconResolver: IconResolver;
    constructor(libConfig: NgxWebComponentsConfig, lazyLoader: LazyLoaderService, viewContainer: ViewContainerRef, fetch: Fetch);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    onTreeViewLoadChildren({ item, cb }: {
        item: any;
        cb: any;
    }): void;
    initTab(path: string): void;
    closeTab(tab: FileViewTab): void;
    calcBreadcrumb(path: string): {
        id: string;
        label: string;
    }[];
    onBreadcrumbClick(crumb: any): void;
    onTabPathChange(tab: FileViewTab): void;
    onTreeViewSelect(item: FSDescriptor): void;
    onTabLoadFiles(tab: FileViewTab, files: FSDescriptor[]): void;
    onGridValueChange(): void;
    getTabLabel(path: string): string;
    onResize(): Promise<void>;
    onResizeEnd(): Promise<void>;
    getSelection(): FSDescriptor[];
    clearSelection(): void;
    refreshSorting(): void;
    refreshData(): void;
    getFileData(file: FileDescriptor): string;
    downloadFile(file: FSDescriptor): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<FilemanagerComponent, [{ optional: true; }, null, null, null]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FilemanagerComponent, "app-filemanager", never, { "config": { "alias": "config"; "required": false; }; "gridSize": { "alias": "gridSize"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "contextTags": { "alias": "contextTags"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; "focusedFilesChange": "focusedFilesChange"; "fileUpload": "fileUpload"; "fileDownload": "fileDownload"; "fileRename": "fileRename"; "fileDelete": "fileDelete"; "fileCopy": "fileCopy"; "filePaste": "filePaste"; "fileSelect": "fileSelect"; "fileDblClick": "fileDblClick"; "folderSelect": "folderSelect"; "folderDblClick": "folderDblClick"; "filesSelect": "filesSelect"; }, never, never, true, never>;
}
