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).
65 lines (64 loc) • 4.02 kB
TypeScript
import { type SetOptionalAndNullable } from '@augment-vir/common';
import { type PropertyInitMapBase } from 'element-vir';
import { type EmptyObject } from 'type-fest';
import { type GlobalValues } from '../../../ui/elements/element-book-app/global-values.js';
import { type InfiniteRecursionLimiter } from '../../../util/type.js';
import { type BookPageControlsInitBase } from './book-page-controls.js';
import { type BookElementExampleInit, type BookPage } from './book-page.js';
/**
* The callback type for a book page definition's `defineExample` callback.
*
* @category Internal
*/
export type DefineExampleCallback<GlobalValuesType extends GlobalValues = {}, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = <State extends PropertyInitMapBase>(exampleInit: BookElementExampleInit<GlobalValuesType, ControlsInit, State>) => void;
/**
* Used for `defineExamples` in a book page's init.
*
* @category Internal
*/
export type ElementExamplesDefiner<GlobalValuesType extends GlobalValues = {}, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = (params: {
defineExample: DefineExampleCallback<GlobalValuesType, ControlsInit>;
}) => void;
/**
* Collapses all element-book control inits into a single flag object.
*
* @category Internal
*/
export type CollapseControlsInit<ParentPage extends BookPage | undefined, CurrentControlsInit extends BookPageControlsInitBase,
/** Prevent infinite recursion TypeScript errors. */
RecursionDepth = InfiniteRecursionLimiter> = CurrentControlsInit & (RecursionDepth extends [
any,
...infer RemainingDepth
] ? ParentPage extends BookPage<infer GlobalValuesType, infer GrandParentPage, infer ParentControls> ? CollapseControlsInit<GrandParentPage, ParentControls, RemainingDepth> : EmptyObject : EmptyObject);
/**
* Collapses all element-book global values into a single flag object.
*
* @category Internal
*/
export type CollapseGlobalValuesType<ParentPage extends BookPage | undefined, GlobalValuesType extends GlobalValues,
/** Prevent infinite recursion TypeScript errors. */
RecursionDepth = InfiniteRecursionLimiter> = GlobalValuesType & (RecursionDepth extends [
any,
...infer RemainingDepth
] ? ParentPage extends BookPage<infer GlobalValuesType, infer GrandParentPage, infer ParentControls> ? CollapseGlobalValuesType<GrandParentPage, GlobalValuesType, RemainingDepth> : EmptyObject : EmptyObject);
/**
* The parameters for initializing a new element-book page.
*
* @category Type
*/
export type BookPageInit<GlobalValuesType extends GlobalValues, ParentPage extends BookPage | undefined, CurrentControlsInit extends BookPageControlsInitBase> = SetOptionalAndNullable<Omit<BookPage<any, ParentPage, CurrentControlsInit>, 'entryType' | 'elementExamples' | 'errors'>, 'controls' | 'descriptionParagraphs' | 'useVerticalExamples'> & {
defineExamples?: ElementExamplesDefiner<CollapseGlobalValuesType<ParentPage, GlobalValuesType>, CollapseControlsInit<ParentPage, CurrentControlsInit>> | undefined;
};
/**
* A variant of {@link defineBookPage} that allows you specify what the expected global element-book
* values are for the page that you are defining.
*
* @category Main
*/
export declare function defineBookPageWithGlobals<const GlobalValuesType extends GlobalValues = {}>(): <const ParentPage extends BookPage | undefined = undefined, const ControlsInit extends BookPageControlsInitBase = {}>(pageInit: BookPageInit<GlobalValuesType, ParentPage, ControlsInit>) => BookPage<GlobalValuesType, ParentPage, ControlsInit>;
/**
* Define an element-book page. This is how you create new entries for your element-book instance.
*
* @category Main
*/
export declare function defineBookPage<const GlobalValuesType extends GlobalValues = {}, const ParentPage extends BookPage | undefined = undefined, const ControlsInit extends BookPageControlsInitBase = {}>(pageInit: BookPageInit<GlobalValuesType, ParentPage, ControlsInit>): BookPage<GlobalValuesType, ParentPage, ControlsInit>;