UNPKG

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).

59 lines (58 loc) 3.98 kB
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'> & { 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>;