element-book 7.0.7 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/book-entry/book-element-example/book-element-example.d.ts +6 -5
- package/dist/data/book-entry/book-page/book-page.d.ts +2 -1
- package/dist/data/book-entry/book-page/current-controls.d.ts +2 -1
- package/dist/data/book-entry/book-page/current-controls.js +8 -5
- package/dist/data/book-entry/book-page/define-book-page.d.ts +16 -7
- package/dist/data/book-entry/book-page/define-book-page.js +9 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/ui/elements/element-book-app/element-book-app.element.d.ts +3 -2
- package/dist/ui/elements/element-book-app/element-book-app.element.js +5 -3
- package/dist/ui/elements/element-book-app/element-book-config.d.ts +2 -0
- package/package.json +6 -6
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Overwrite, RequireNonVoid, SetOptionalAndNullable } from '@augment-vir/common';
|
|
2
2
|
import { PropertyInitMapBase, RenderParams, TypedEvent } from 'element-vir';
|
|
3
3
|
import { CSSResult } from 'lit';
|
|
4
|
+
import { GlobalValues } from '../../../ui/elements/element-book-app/element-book-config';
|
|
4
5
|
import { BaseBookEntry } from '../base-book-entry';
|
|
5
6
|
import { BookEntryTypeEnum } from '../book-entry-type';
|
|
6
7
|
import { BookPage } from '../book-page/book-page';
|
|
7
8
|
import { BookPageControlsInitBase, ControlsToValues } from '../book-page/book-page-controls';
|
|
8
|
-
export type BookPageExampleRenderParams<ControlsInit extends BookPageControlsInitBase, StateInit extends PropertyInitMapBase> = Pick<RenderParams<any, any, StateInit, any, any, any>, 'state' | 'updateState'> & {
|
|
9
|
-
controls: ControlsToValues<ControlsInit
|
|
9
|
+
export type BookPageExampleRenderParams<GlobalValuesType extends GlobalValues, ControlsInit extends BookPageControlsInitBase, StateInit extends PropertyInitMapBase> = Pick<RenderParams<any, any, StateInit, any, any, any>, 'state' | 'updateState'> & {
|
|
10
|
+
controls: ControlsToValues<ControlsInit> & GlobalValuesType;
|
|
10
11
|
};
|
|
11
|
-
export type BookElementExample<ControlsInit extends BookPageControlsInitBase = {}, StateInit extends PropertyInitMapBase = {}, RenderOutput = unknown> = Overwrite<BaseBookEntry, {
|
|
12
|
+
export type BookElementExample<GlobalValuesType extends GlobalValues = {}, ControlsInit extends BookPageControlsInitBase = {}, StateInit extends PropertyInitMapBase = {}, RenderOutput = unknown> = Overwrite<BaseBookEntry, {
|
|
12
13
|
parent: BookPage | undefined;
|
|
13
14
|
entryType: BookEntryTypeEnum.ElementExample;
|
|
14
15
|
} & {
|
|
@@ -22,10 +23,10 @@ export type BookElementExample<ControlsInit extends BookPageControlsInitBase = {
|
|
|
22
23
|
*/
|
|
23
24
|
styles?: CSSResult | undefined;
|
|
24
25
|
/** Render the example. */
|
|
25
|
-
renderCallback: RequireNonVoid<RenderOutput, (renderParams: BookPageExampleRenderParams<ControlsInit, StateInit>) => RenderOutput, 'renderCallback is missing a return statement'>;
|
|
26
|
+
renderCallback: RequireNonVoid<RenderOutput, (renderParams: BookPageExampleRenderParams<GlobalValuesType, ControlsInit, StateInit>) => RenderOutput, 'renderCallback is missing a return statement'>;
|
|
26
27
|
}>;
|
|
27
28
|
/**
|
|
28
29
|
* The properties that are necessary to initialize an element example. Missing properties will be
|
|
29
30
|
* filling in by the parent.
|
|
30
31
|
*/
|
|
31
|
-
export type BookElementExampleInit<Controls extends BookPageControlsInitBase, StateInit extends PropertyInitMapBase, RenderOutput> = SetOptionalAndNullable<Omit<BookElementExample<Controls, StateInit, RenderOutput>, 'entryType' | 'parent' | 'errors'>, 'descriptionParagraphs'>;
|
|
32
|
+
export type BookElementExampleInit<GlobalValuesType extends GlobalValues, Controls extends BookPageControlsInitBase, StateInit extends PropertyInitMapBase, RenderOutput> = SetOptionalAndNullable<Omit<BookElementExample<GlobalValuesType, Controls, StateInit, RenderOutput>, 'entryType' | 'parent' | 'errors'>, 'descriptionParagraphs'>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Overwrite } from '@augment-vir/common';
|
|
2
|
+
import { GlobalValues } from '../../../ui/elements/element-book-app/element-book-config';
|
|
2
3
|
import { BaseBookEntry } from '../base-book-entry';
|
|
3
4
|
import { BookElementExample } from '../book-element-example/book-element-example';
|
|
4
5
|
import { BookEntryTypeEnum } from '../book-entry-type';
|
|
5
6
|
import { BookPageControlsInitBase } from './book-page-controls';
|
|
6
|
-
export type BookPage<ParentPage extends BookPage | undefined = any, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = Overwrite<BaseBookEntry, {
|
|
7
|
+
export type BookPage<GlobalValuesType extends GlobalValues = {}, ParentPage extends BookPage | undefined = any, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = Overwrite<BaseBookEntry, {
|
|
7
8
|
parent: ParentPage;
|
|
8
9
|
entryType: BookEntryTypeEnum.Page;
|
|
9
10
|
}> & {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GlobalValues } from '../../../ui/elements/element-book-app/element-book-config';
|
|
1
2
|
import { BookTreeNode } from '../../book-tree/book-tree-node';
|
|
2
3
|
import { BookPageControlsValues } from './book-page-controls';
|
|
3
4
|
export type ControlsWrapper = {
|
|
@@ -9,4 +10,4 @@ export type CurrentControls = {
|
|
|
9
10
|
};
|
|
10
11
|
export declare function traverseCurrentControls(currentControls: CurrentControls, fullUrlBreadcrumbs: ReadonlyArray<string>): BookPageControlsValues;
|
|
11
12
|
export declare function createNewCurrentControls(currentControls: CurrentControls, fullUrlBreadcrumbs: ReadonlyArray<string>, newValues: BookPageControlsValues): CurrentControls;
|
|
12
|
-
export declare function createControlsFromTree(node: BookTreeNode): CurrentControls;
|
|
13
|
+
export declare function createControlsFromTree(node: BookTreeNode, globalControls: GlobalValues): CurrentControls;
|
|
@@ -43,7 +43,7 @@ export function createNewCurrentControls(currentControls, fullUrlBreadcrumbs, ne
|
|
|
43
43
|
internalTraverseCurrentControls(newCurrentControls, fullUrlBreadcrumbs, newValues);
|
|
44
44
|
return newCurrentControls;
|
|
45
45
|
}
|
|
46
|
-
export function createControlsFromTree(node) {
|
|
46
|
+
export function createControlsFromTree(node, globalControls) {
|
|
47
47
|
const currentControls = mapObjectValues(node.children, (childName, child) => {
|
|
48
48
|
if (!isBookTreeNode(child, BookEntryTypeEnum.Page)) {
|
|
49
49
|
return {
|
|
@@ -52,10 +52,13 @@ export function createControlsFromTree(node) {
|
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
return {
|
|
55
|
-
children: createControlsFromTree(child),
|
|
56
|
-
controls:
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
children: createControlsFromTree(child, {}),
|
|
56
|
+
controls: {
|
|
57
|
+
...globalControls,
|
|
58
|
+
...mapObjectValues(child.entry.controls, (name, setup) => {
|
|
59
|
+
return setup.initValue;
|
|
60
|
+
}),
|
|
61
|
+
},
|
|
59
62
|
};
|
|
60
63
|
});
|
|
61
64
|
return currentControls;
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { SetOptionalAndNullable } from '@augment-vir/common';
|
|
2
2
|
import { PropertyInitMapBase } from 'element-vir';
|
|
3
|
+
import { GlobalValues } from '../../../ui/elements/element-book-app/element-book-config';
|
|
3
4
|
import { InfiniteRecursionLimiter } from '../../../util/type';
|
|
4
5
|
import { BookElementExampleInit } from '../book-element-example/book-element-example';
|
|
5
6
|
import { BookPage } from './book-page';
|
|
6
7
|
import { BookPageControlsInitBase } from './book-page-controls';
|
|
7
|
-
export type DefineExampleCallback<ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = <StateInit extends PropertyInitMapBase, RenderOutput>(exampleInit: BookElementExampleInit<ControlsInit, StateInit, RenderOutput>) => void;
|
|
8
|
-
export type ElementExamplesDefiner<ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = (params: {
|
|
9
|
-
defineExample: DefineExampleCallback<ControlsInit>;
|
|
8
|
+
export type DefineExampleCallback<GlobalValuesType extends GlobalValues = {}, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = <StateInit extends PropertyInitMapBase, RenderOutput>(exampleInit: BookElementExampleInit<GlobalValuesType, ControlsInit, StateInit, RenderOutput>) => void;
|
|
9
|
+
export type ElementExamplesDefiner<GlobalValuesType extends GlobalValues = {}, ControlsInit extends BookPageControlsInitBase = BookPageControlsInitBase> = (params: {
|
|
10
|
+
defineExample: DefineExampleCallback<GlobalValuesType, ControlsInit>;
|
|
10
11
|
}) => void;
|
|
11
12
|
type CollapseControlsInit<ParentPage extends BookPage | undefined, CurrentControlsInit extends BookPageControlsInitBase,
|
|
12
13
|
/** Prevent infinite recursion TypeScript errors. */
|
|
13
|
-
RecursionDepth = InfiniteRecursionLimiter> = CurrentControlsInit & (RecursionDepth extends [any, ...infer RemainingDepth] ? ParentPage extends BookPage<infer GrandParentPage, infer ParentControls> ? CollapseControlsInit<GrandParentPage, ParentControls, RemainingDepth> : {} : {});
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
RecursionDepth = InfiniteRecursionLimiter> = CurrentControlsInit & (RecursionDepth extends [any, ...infer RemainingDepth] ? ParentPage extends BookPage<infer GlobalValuesType, infer GrandParentPage, infer ParentControls> ? CollapseControlsInit<GrandParentPage, ParentControls, RemainingDepth> : {} : {});
|
|
15
|
+
type CollapseGlobalValuesType<ParentPage extends BookPage | undefined, GlobalValuesType extends GlobalValues,
|
|
16
|
+
/** Prevent infinite recursion TypeScript errors. */
|
|
17
|
+
RecursionDepth = InfiniteRecursionLimiter> = GlobalValuesType & (RecursionDepth extends [any, ...infer RemainingDepth] ? ParentPage extends BookPage<infer GlobalValuesType, infer GrandParentPage, infer ParentControls> ? CollapseGlobalValuesType<GrandParentPage, GlobalValuesType, RemainingDepth> : {} : {});
|
|
18
|
+
export type BookPageInit<GlobalValuesType extends GlobalValues, ParentPage extends BookPage | undefined, CurrentControlsInit extends BookPageControlsInitBase> = SetOptionalAndNullable<Omit<BookPage<any, ParentPage, CurrentControlsInit>, 'entryType' | 'elementExamples' | 'errors'>, 'controls' | 'descriptionParagraphs'> & {
|
|
19
|
+
elementExamplesCallback?: ElementExamplesDefiner<CollapseGlobalValuesType<ParentPage, GlobalValuesType>, CollapseControlsInit<ParentPage, CurrentControlsInit>> | undefined;
|
|
16
20
|
};
|
|
17
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Allows insertion of the global values type to a page. This is not necessary if you aren't using
|
|
23
|
+
* global values in your element-book instance.
|
|
24
|
+
*/
|
|
25
|
+
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>;
|
|
26
|
+
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>;
|
|
18
27
|
export {};
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { isTruthy } from '@augment-vir/common';
|
|
2
2
|
import { BookEntryTypeEnum } from '../book-entry-type';
|
|
3
3
|
import { titleToUrlBreadcrumb } from '../url-breadcrumbs';
|
|
4
|
+
/**
|
|
5
|
+
* Allows insertion of the global values type to a page. This is not necessary if you aren't using
|
|
6
|
+
* global values in your element-book instance.
|
|
7
|
+
*/
|
|
8
|
+
export function defineBookPageWithGlobals() {
|
|
9
|
+
return (pageInit) => {
|
|
10
|
+
return defineBookPage(pageInit);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
4
13
|
export function defineBookPage(pageInit) {
|
|
5
14
|
const page = {
|
|
6
15
|
...pageInit,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './data/book-entry/book-element-example/book-element-example';
|
|
2
|
+
export * from './data/book-entry/book-entry';
|
|
3
|
+
export * from './data/book-entry/book-entry-type';
|
|
2
4
|
export * from './data/book-entry/book-page/book-page';
|
|
3
5
|
export * from './data/book-entry/book-page/book-page-controls';
|
|
4
6
|
export * from './data/book-entry/book-page/define-book-page';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './data/book-entry/book-element-example/book-element-example';
|
|
2
|
+
export * from './data/book-entry/book-entry';
|
|
3
|
+
export * from './data/book-entry/book-entry-type';
|
|
2
4
|
export * from './data/book-entry/book-page/book-page';
|
|
3
5
|
export * from './data/book-entry/book-page/book-page-controls';
|
|
4
6
|
export * from './data/book-entry/book-page/define-book-page';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CurrentControls } from '../../../data/book-entry/book-page/current-controls';
|
|
2
2
|
import { ColorTheme } from '../../color-theme/color-theme';
|
|
3
3
|
import { ThemeConfig } from '../../color-theme/create-color-theme';
|
|
4
|
-
import { ElementBookConfig } from './element-book-config';
|
|
4
|
+
import { ElementBookConfig, GlobalValues } from './element-book-config';
|
|
5
5
|
type ColorThemeState = {
|
|
6
6
|
config: ThemeConfig | undefined;
|
|
7
7
|
theme: ColorTheme;
|
|
@@ -11,7 +11,8 @@ export declare const ElementBookApp: import("element-vir").DeclarativeElementDef
|
|
|
11
11
|
router: Readonly<import("spa-router-vir").SpaRouter<import("../../../routing/book-routing").ValidBookPaths, Record<string, string> | undefined, undefined>> | undefined;
|
|
12
12
|
colors: ColorThemeState;
|
|
13
13
|
treeBasedCurrentControls: {
|
|
14
|
-
|
|
14
|
+
entries: ElementBookConfig['entries'];
|
|
15
|
+
globalControls: GlobalValues;
|
|
15
16
|
currentControls: CurrentControls;
|
|
16
17
|
} | undefined;
|
|
17
18
|
}, {
|
|
@@ -132,11 +132,13 @@ export const ElementBookApp = defineElement()({
|
|
|
132
132
|
debug,
|
|
133
133
|
});
|
|
134
134
|
if (!state.treeBasedCurrentControls ||
|
|
135
|
-
state.treeBasedCurrentControls.
|
|
135
|
+
state.treeBasedCurrentControls.entries !== inputs.entries ||
|
|
136
|
+
state.treeBasedCurrentControls.globalControls !== inputs.globalControls) {
|
|
136
137
|
updateState({
|
|
137
138
|
treeBasedCurrentControls: {
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
entries: inputs.entries,
|
|
140
|
+
globalControls: inputs.globalControls ?? {},
|
|
141
|
+
currentControls: createControlsFromTree(originalTree.tree, inputs.globalControls ?? {}),
|
|
140
142
|
},
|
|
141
143
|
});
|
|
142
144
|
}
|
|
@@ -5,6 +5,7 @@ export type ElementBookConfig = {
|
|
|
5
5
|
/** All element-book entries in order. */
|
|
6
6
|
entries: ReadonlyArray<BookEntry>;
|
|
7
7
|
} & PartialAndUndefined<OptionalConfig>;
|
|
8
|
+
export type GlobalValues = Readonly<Record<string, unknown>>;
|
|
8
9
|
type OptionalConfig = {
|
|
9
10
|
/** The base theme color from which all other element-book colors will be generated from. */
|
|
10
11
|
themeColor: string;
|
|
@@ -12,6 +13,7 @@ type OptionalConfig = {
|
|
|
12
13
|
everythingTitle: string;
|
|
13
14
|
everythingDescriptionParagraphs: ReadonlyArray<string>;
|
|
14
15
|
debug: boolean;
|
|
16
|
+
globalControls: GlobalValues;
|
|
15
17
|
} & RequireExactlyOne<{
|
|
16
18
|
/**
|
|
17
19
|
* Set this internal router config if element-book is intended to be the current website's
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "element-book",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"book",
|
|
6
6
|
"design system",
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@augment-vir/browser": "^15.3.0",
|
|
43
43
|
"@augment-vir/common": "^15.3.0",
|
|
44
|
-
"colorjs.io": "0.4.
|
|
44
|
+
"colorjs.io": "0.4.5",
|
|
45
45
|
"element-vir": "^14.0.3",
|
|
46
46
|
"lit-css-vars": "^2.0.3",
|
|
47
47
|
"object-shape-tester": "^0.3.0",
|
|
48
|
-
"spa-router-vir": "^2.1.
|
|
49
|
-
"typed-event-target": "^1.
|
|
50
|
-
"vira": "^0.
|
|
48
|
+
"spa-router-vir": "^2.1.1",
|
|
49
|
+
"typed-event-target": "^1.3.0",
|
|
50
|
+
"vira": "^0.6.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@augment-vir/browser-testing": "^15.3.0",
|
|
@@ -61,6 +61,6 @@
|
|
|
61
61
|
"@web/test-runner-visual-regression": "^0.8.0",
|
|
62
62
|
"istanbul-smart-text-reporter": "^1.1.2",
|
|
63
63
|
"type-fest": "^3.12.0",
|
|
64
|
-
"typescript": "^5.1.
|
|
64
|
+
"typescript": "^5.1.6"
|
|
65
65
|
}
|
|
66
66
|
}
|