import { Signal, OnDestroy } from '@angular/core';
import { Maybe } from '@dereekb/util';
import { ZipReader, Entry, FileEntry } from '@zip.js/zip.js';
import { Observable } from 'rxjs';
import { LoadingState } from '@dereekb/rxjs';
import { DbxZipBlobPreviewEntryTreeNode } from './zip.blob';
import { DbxListTitleGroupData, DbxListTitleGroupTitleDelegate } from '../../layout';
import { AnchorForValueFunction } from '../../router';
import { DbxDownloadBlobButtonConfig } from '../download/blob/download.blob.button.component';
import * as i0 from "@angular/core";
export type DbxZipBlobPreviewMode = 'view_directory' | 'view_entry';
export type DbxZipBlobPreviewGroupValue = 'directory' | 'file';
export type DbxZipBlobPreviewGroupData = DbxListTitleGroupData<DbxZipBlobPreviewGroupValue> & {
    sort: number;
};
/**
 * Used to display a zip preview based on the input blob.
 */
export declare class DbxZipBlobPreviewComponent implements OnDestroy {
    readonly blob: import("@angular/core").InputSignal<Maybe<Blob>>;
    /**
     * The download file name for the zip file.
     *
     * If not defined, then the file cannot be downloaded directly.
     */
    readonly downloadFileName: import("@angular/core").InputSignal<Maybe<string>>;
    readonly hasBlob: Signal<boolean>;
    readonly zipReader: Signal<ZipReader<unknown> | undefined>;
    readonly downloadZipFileBlobButtonConfigSignal: Signal<DbxDownloadBlobButtonConfig | undefined>;
    readonly zipReader$: Observable<ZipReader<unknown> | undefined>;
    readonly allEntriesLoadingState$: Observable<LoadingState<Entry[]>>;
    readonly allEntries$: Observable<Maybe<Entry[]>>;
    readonly allEntriesRoot$: Observable<import("./zip.blob").DbxZipBlobPreviewEntryTreeRoot>;
    readonly allEntriesRootSignal: Signal<import("./zip.blob").DbxZipBlobPreviewEntryTreeRoot | undefined>;
    readonly selectedNodeSignal: import("@angular/core").WritableSignal<Maybe<DbxZipBlobPreviewEntryTreeNode>>;
    readonly listTitleGroupDelegate: DbxListTitleGroupTitleDelegate<DbxZipBlobPreviewEntryTreeNode, DbxZipBlobPreviewGroupValue, DbxZipBlobPreviewGroupData>;
    readonly mode: Signal<string>;
    readonly listEntries: Signal<DbxZipBlobPreviewEntryTreeNode[]>;
    readonly listEntries$: Observable<DbxZipBlobPreviewEntryTreeNode[]>;
    readonly listEntriesState$: Observable<LoadingState<DbxZipBlobPreviewEntryTreeNode[]>>;
    readonly selectedNodeIconSignal: Signal<string>;
    readonly selectedNodePathSignal: Signal<string>;
    readonly selectedFileNodeSignal: Signal<Maybe<DbxZipBlobPreviewEntryTreeNode<FileEntry>>>;
    readonly selectedFileEntry$: Observable<Maybe<DbxZipBlobPreviewEntryTreeNode<FileEntry>>>;
    readonly selectedFileEntryBlob$: Observable<Maybe<Blob>>;
    readonly selectedFileEntryBlobSignal: Signal<Maybe<Blob>>;
    readonly context: import("@dereekb/rxjs").MutableLoadingStateContext<unknown, LoadingState<Entry[]>, import("@dereekb/rxjs").LoadingContextEvent & LoadingState<Entry[]>>;
    ngOnDestroy(): void;
    readonly makeEntryAnchor: AnchorForValueFunction<DbxZipBlobPreviewEntryTreeNode>;
    readonly homeClicked: () => void;
    readonly backClicked: () => void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DbxZipBlobPreviewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DbxZipBlobPreviewComponent, "dbx-zip-blob-preview", never, { "blob": { "alias": "blob"; "required": false; "isSignal": true; }; "downloadFileName": { "alias": "downloadFileName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}
