/**
 * @aedart/vuepress-utils
 * 
 * BSD-3-Clause, Copyright (c) 2023-present Alin Eugen Deac <aedart@gmail.com>.
 */

import { Archive as Archive$1, PagesCollection as PagesCollection$1 } from '@aedart/vuepress-utils/contracts';
import { NavbarGroupOptions, NavbarLinkOptions, SidebarOptions, NavGroup, SidebarArrayOptions, SidebarObjectOptions, SidebarItemOptions } from '@vuepress/theme-default';

/**
 * Archive
 *
 * @typedef {import('@vuepress/theme-default').NavbarGroupOptions} NavbarGroupOptions
 * @typedef {import('@vuepress/theme-default').NavbarLinkOptions} NavbarLinkOptions
 * @typedef {import('@vuepress/theme-default').NavGroup} NavGroup
 * @typedef {import('@vuepress/theme-default').SidebarOptions} SidebarOptions
 */
declare class Archive implements Archive$1 {
    /**
     * Name of this archive
     *
     * @type {string}
     * @private
     */
    private _name;
    /**
     * Archive's path
     *
     * @type {string}
     * @private
     */
    private _path;
    /**
     * Collection to be marked as "current"
     *
     * @type {PagesCollection}
     * @private
     */
    private _current;
    /**
     * Collection to be marked as "next"
     *
     * @type {PagesCollection}
     * @private
     */
    private _next;
    /**
     * Collections in this archive
     *
     * @type {PagesCollection[]}
     * @private
     */
    private _collections;
    /**
     * Navigation label for the "current" collection
     *
     * @type {string}
     * @private
     */
    private _currentLabel;
    /**
     * Navigation label for the "next" collection
     *
     * @type {string}
     * @private
     */
    private _nextLabel;
    /**
     * Relative path for the "current" collection, in archive
     *
     * @type {string}
     * @private
     */
    private _currentPath;
    /**
     * Relative path for the "next" collection, in archive
     *
     * @type {string}
     * @private
     */
    private _nextPath;
    /**
     * Creates a new Archive instance
     *
     * @param {PagesCollection} current
     * @param {PagesCollection} next
     * @param {PagesCollection[]} [collections=[]]
     */
    constructor(current: PagesCollection$1, next: PagesCollection$1, collections?: PagesCollection$1[]);
    /**
     * Creates a new Archive instance
     *
     * @param {PagesCollection} current
     * @param {PagesCollection} next
     * @param {PagesCollection[]} [collections=[]]
     *
     * @returns {Archive}
     */
    static make(current: PagesCollection$1, next: PagesCollection$1, collections?: PagesCollection$1[]): Archive;
    /**
     * @inheritdoc
     */
    set name(name: string);
    /**
     * @inheritdoc
     */
    get name(): string;
    /**
     * @inheritdoc
     */
    set path(path: string);
    /**
     * @inheritdoc
     */
    get path(): string;
    /**
     * @inheritdoc
     */
    set current(collection: PagesCollection$1);
    /**
     * @inheritdoc
     */
    get current(): PagesCollection$1;
    /**
     * @inheritdoc
     */
    set next(collection: PagesCollection$1);
    /**
     * @inheritdoc
     */
    get next(): PagesCollection$1;
    /**
     * @inheritdoc
     */
    set collections(pageCollections: PagesCollection$1[]);
    /**
     * @inheritdoc
     */
    get collections(): PagesCollection$1[];
    /**
     * @inheritdoc
     */
    set currentLabel(name: string);
    /**
     * @inheritdoc
     */
    get currentLabel(): string;
    /**
     * @inheritdoc
     */
    set nextLabel(name: string);
    /**
     * @inheritdoc
     */
    get nextLabel(): string;
    /**
     * @inheritdoc
     */
    set currentPath(path: string);
    /**
     * @inheritdoc
     */
    get currentPath(): string;
    /**
     * @inheritdoc
     */
    get currentFullPath(): string;
    /**
     * @inheritdoc
     */
    set nextPath(path: string);
    /**
     * @inheritdoc
     */
    get nextPath(): string;
    /**
     * @inheritdoc
     */
    get nextFullPath(): string;
    /**
     * @inheritdoc
     */
    asNavigationItem(): NavbarGroupOptions | NavbarLinkOptions;
    /**
     * @inheritdoc
     */
    sidebarConfiguration(): SidebarOptions;
    /*****************************************************************
     * Internals
     ****************************************************************/
    /**
     * Returns collections as list of navbar item
     *
     * @returns {(NavbarLinkOptions | NavGroup<NavbarLinkOptions>)[]}
     * @protected
     */
    protected makeNavbarItemChildren(): (NavbarLinkOptions | NavGroup<NavbarLinkOptions>)[];
    /**
     * "Mark" the current and next collections
     *
     * @param {PagesCollection[]} collections
     *
     * @returns {PagesCollection[]}
     * @protected
     */
    protected markCurrentAndNextCollections(collections: PagesCollection$1[]): PagesCollection$1[];
}

/**
 * Pages Collection
 *
 * @typedef {import('@vuepress/theme-default').NavGroup} NavGroup
 * @typedef {import('@vuepress/theme-default').NavbarLinkOptions} NavbarLinkOptions
 * @typedef {import('@vuepress/theme-default').SidebarObjectOptions} SidebarObjectOptions
 * @typedef {import('@vuepress/theme-default').SidebarArrayOptions} SidebarArrayOptions
 * @typedef {import('@vuepress/theme-default').SidebarItemOptions} SidebarItemOptions
 * @typedef {import('@vuepress/theme-default').SidebarGroupOptions} SidebarGroupOptions
 */
declare class PagesCollection implements PagesCollection$1 {
    /**
     * Name of this collection
     *
     * @type {string}
     *
     * @private
     */
    private _name;
    /**
     * Relative path of this collection inside an archive
     *
     * @type {string}
     * @private
     */
    private _path;
    /**
     * Archive that this collection belongs to
     *
     * @type {Archive | null}
     * @private
     */
    private _archive;
    /**
     * The pages in this collection
     *
     * @type {SidebarArrayOptions}
     */
    pages: SidebarArrayOptions;
    /**
     * Creates a new pages collection instance
     *
     * @param {string} name
     * @param {string} path
     * @param {SidebarArrayOptions} [pages=[]]
     */
    constructor(name: string, path: string, pages?: SidebarArrayOptions);
    /**
     * Creates a new pages collection instance
     *
     * @param {string} name
     * @param {string} path
     * @param {SidebarArrayOptions} [pages=[]]
     *
     * @returns {PagesCollection}
     */
    static make(name: string, path: string, pages?: SidebarArrayOptions): PagesCollection;
    /**
     * @inheritdoc
     */
    set name(name: string);
    /**
     * @inheritdoc
     */
    get name(): string;
    /**
     * @inheritdoc
     */
    set path(path: string);
    /**
     * @inheritdoc
     */
    get path(): string;
    /**
     * @inheritdoc
     */
    get fullPath(): string;
    /**
     * @inheritdoc
     */
    set archive(archive: Archive$1 | null);
    /**
     * @inheritdoc
     */
    get archive(): Archive$1 | null;
    /**
     * @inheritdoc
     */
    asNavigationItem(): NavbarLinkOptions | NavGroup<NavbarLinkOptions>;
    /**
     * @inheritdoc
     */
    asSidebarObject(): SidebarObjectOptions;
    /**
     * @inheritdoc
     */
    sidebar(): SidebarArrayOptions;
    /*****************************************************************
     * Internals
     ****************************************************************/
    /**
     * Resolves pages' path
     *
     * @param {SidebarArrayOptions} pages
     *
     * @returns {SidebarArrayOptions}
     * @protected
     */
    protected resolvePages(pages: SidebarArrayOptions): SidebarArrayOptions;
    /**
     * Resolves given page's path
     *
     * @param {SidebarItemOptions} page
     *
     * @returns {SidebarItemOptions}
     *
     * @protected
     */
    protected resolvePage(page: SidebarItemOptions): SidebarItemOptions;
    /**
     * Prefix given path with {@link fullPath}
     *
     * @param {string} path
     *
     * @returns {string}
     * @protected
     */
    protected prefixWillFullPath(path: string): string;
    /**
     * Prefix given path with {@link Archive.path}
     *
     * @param {string} path
     * @returns {string}
     *
     * @protected
     */
    protected prefixWithArchivePath(path: string): string;
}

export { Archive, PagesCollection };
