element-book
Version:
An [`element-vir`](https://npmjs.com/package/element-vir) drop-in element for building, testing, and demonstrating a collection of elements (or, in other words, a design system).
47 lines (46 loc) • 1.53 kB
TypeScript
import { type Values } from '@augment-vir/common';
import { type AnyBookEntryType, type BookEntryType } from '../book-entry/book-entry-type.js';
import { type BookEntry } from '../book-entry/book-entry.js';
/**
* Property used to mark tree nodes.
*
* @category Internal
*/
export declare const isBookTreeNodeMarker = "_isBookTreeNode";
/**
* The base tree node type for {@link BookTreeNode}.
*
* @category Internal
*/
export type InternalBookTreeNodeType<Entry> = {
[isBookTreeNodeMarker]: true;
entry: Entry;
/** UrlBreadcrumb is different from entry.title because it's modified to support URLs. */
urlBreadcrumb: string;
fullUrlBreadcrumbs: ReadonlyArray<string>;
children: Record<string, BookTreeNode>;
/**
* False when an entry has been added by traversing manually added parents. True when the entry
* was added as an explicit entry.
*/
manuallyAdded: boolean;
};
/**
* Any element-book tree node.
*
* @category Internal
*/
export type BookTreeNode<EntryTypes extends BookEntryType = AnyBookEntryType> = Values<{
[EntryType in EntryTypes]: InternalBookTreeNodeType<Extract<BookEntry, {
entryType: EntryType;
}>>;
}> | (AnyBookEntryType extends EntryTypes ? InternalBookTreeNodeType<BookEntry> : never);
/**
* The full element-book app tree for representing page structure.
*
* @category Internal
*/
export type BookTree = Readonly<{
tree: Readonly<BookTreeNode<BookEntryType.Root>>;
flattenedNodes: ReadonlyArray<Readonly<BookTreeNode>>;
}>;