import { JSDocMetadata, NgDocApi, NgDocCategory, NgDocPage } from '@ng-doc/core';
import { Observable } from 'rxjs';
import { ObjectLiteralExpression, SourceFile } from 'ts-morph';
import { DeclarationEntry, DeclarationTabEntry, Entry } from './entry';
import { MarkdownEntry } from './markdown-entry';
export interface EntryMetadata<T extends Entry = Entry> {
    id: string;
    dir: string;
    path: string;
    dirName: string;
    outDir: string;
    outPath: string;
    route: string;
    title: string;
    keywordTitle: string;
    absoluteRoute: () => string;
    breadcrumbs: () => string[];
    refresh: () => Promise<void>;
    selfDestroy: Observable<void>;
    sourceFile: SourceFile;
    objectExpression: () => ObjectLiteralExpression;
    parent: ParentEntryMetadata<T>;
    entry: T;
    jsDocMetadata: () => JSDocMetadata;
    isCategory: boolean;
    order?: number;
    hidden?: boolean;
}
export type ParentEntryMetadata<T extends Entry> = T extends NgDocPage ? EntryMetadata<NgDocCategory> | undefined : T extends NgDocApi ? EntryMetadata<NgDocCategory> | undefined : T extends DeclarationTabEntry ? EntryMetadata<DeclarationEntry> : T extends MarkdownEntry ? EntryMetadata<NgDocPage> : T extends DeclarationEntry ? undefined : EntryMetadata<NgDocCategory> | undefined;
/**
 *
 * @param entry
 */
export declare function isPageEntryMetadata(entry: EntryMetadata): entry is EntryMetadata<NgDocPage>;
