element-book 6.0.2 → 7.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.
Files changed (121) hide show
  1. package/README.md +5 -5
  2. package/dist/data/book-entry/base-book-entry.d.ts +20 -0
  3. package/dist/data/book-entry/book-element-example/book-element-example.d.ts +32 -0
  4. package/dist/data/book-entry/book-entry-type.d.ts +9 -0
  5. package/dist/data/book-entry/book-entry-type.js +9 -0
  6. package/dist/data/book-entry/book-entry.d.ts +8 -0
  7. package/dist/data/book-entry/book-entry.js +4 -0
  8. package/dist/data/book-entry/book-page/book-page-controls.d.ts +41 -0
  9. package/dist/data/book-entry/book-page/book-page-controls.js +49 -0
  10. package/dist/data/book-entry/book-page/book-page.d.ts +12 -0
  11. package/dist/data/book-entry/book-page/book-page.js +1 -0
  12. package/dist/data/book-entry/book-page/current-controls.d.ts +12 -0
  13. package/dist/data/book-entry/book-page/current-controls.js +62 -0
  14. package/dist/data/book-entry/book-page/define-book-page.d.ts +17 -0
  15. package/dist/data/book-entry/book-page/define-book-page.js +34 -0
  16. package/dist/data/book-entry/book-root.d.ts +7 -0
  17. package/dist/data/book-entry/book-root.js +1 -0
  18. package/dist/data/book-entry/url-breadcrumbs.d.ts +7 -0
  19. package/dist/data/book-entry/url-breadcrumbs.js +24 -0
  20. package/dist/data/book-entry/verify-book-entry.d.ts +6 -0
  21. package/dist/data/book-entry/verify-book-entry.js +18 -0
  22. package/dist/data/book-tree/book-tree-node.d.ts +27 -0
  23. package/dist/data/book-tree/book-tree-node.js +1 -0
  24. package/dist/data/book-tree/book-tree.d.ts +16 -0
  25. package/dist/data/book-tree/book-tree.js +148 -0
  26. package/dist/data/book-tree/search-nodes.d.ts +5 -0
  27. package/dist/data/book-tree/search-nodes.js +56 -0
  28. package/dist/data/book-tree/tree-cache.d.ts +4 -0
  29. package/dist/data/book-tree/tree-cache.js +8 -0
  30. package/dist/index.d.ts +5 -6
  31. package/dist/index.js +5 -6
  32. package/dist/routing/book-routing.d.ts +10 -0
  33. package/dist/routing/book-routing.js +18 -0
  34. package/dist/routing/create-book-router.d.ts +2 -0
  35. package/dist/routing/{create-element-book-router.js → create-book-router.js} +8 -8
  36. package/dist/ui/elements/book-breadcrumbs.element.d.ts +5 -0
  37. package/dist/ui/elements/{element-book-breadcrumbs.element.js → book-breadcrumbs.element.js} +9 -9
  38. package/dist/ui/elements/book-nav.element.d.ts +7 -0
  39. package/dist/ui/elements/book-nav.element.js +114 -0
  40. package/dist/ui/elements/common/book-error.element.d.ts +3 -0
  41. package/dist/ui/elements/common/book-error.element.js +27 -0
  42. package/dist/ui/elements/common/book-route-link.element.d.ts +5 -0
  43. package/dist/ui/elements/common/{element-book-route-link.element.js → book-route-link.element.js} +5 -5
  44. package/dist/ui/elements/define-book-element.d.ts +2 -2
  45. package/dist/ui/elements/define-book-element.js +1 -1
  46. package/dist/ui/elements/element-book-app/element-book-app-slots.d.ts +2 -2
  47. package/dist/ui/elements/element-book-app/element-book-app-slots.js +2 -2
  48. package/dist/ui/elements/element-book-app/element-book-app.element.d.ts +7 -2
  49. package/dist/ui/elements/element-book-app/element-book-app.element.js +76 -29
  50. package/dist/ui/elements/element-book-app/element-book-config.d.ts +4 -2
  51. package/dist/ui/elements/element-book-app/get-current-nodes.d.ts +3 -0
  52. package/dist/ui/elements/element-book-app/get-current-nodes.js +23 -0
  53. package/dist/ui/elements/entry-display/book-breadcrumbs-bar.element.d.ts +6 -0
  54. package/dist/ui/elements/entry-display/book-breadcrumbs-bar.element.js +65 -0
  55. package/dist/ui/elements/entry-display/book-entry-description.element.d.ts +3 -0
  56. package/dist/ui/elements/entry-display/book-entry-description.element.js +34 -0
  57. package/dist/ui/elements/entry-display/book-entry-display.element.d.ts +12 -0
  58. package/dist/ui/elements/entry-display/book-entry-display.element.js +173 -0
  59. package/dist/ui/elements/entry-display/book-page/book-page-controls.element.d.ts +17 -0
  60. package/dist/ui/elements/entry-display/book-page/book-page-controls.element.js +147 -0
  61. package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.d.ts +10 -0
  62. package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.js +92 -0
  63. package/dist/ui/elements/entry-display/element-example/book-element-example-controls.element.d.ts +7 -0
  64. package/dist/ui/elements/entry-display/element-example/book-element-example-controls.element.js +36 -0
  65. package/dist/ui/elements/entry-display/element-example/book-element-example-viewer.element.d.ts +9 -0
  66. package/dist/ui/elements/entry-display/element-example/book-element-example-viewer.element.js +57 -0
  67. package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.d.ts +9 -0
  68. package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.js +49 -0
  69. package/dist/ui/events/change-route.event.d.ts +1 -1
  70. package/dist/util/type.d.ts +40 -0
  71. package/dist/util/type.js +1 -0
  72. package/package.json +15 -11
  73. package/dist/data/element-book-entry/element-book-chapter/element-book-chapter.d.ts +0 -22
  74. package/dist/data/element-book-entry/element-book-chapter/element-book-chapter.js +0 -16
  75. package/dist/data/element-book-entry/element-book-entry-type.d.ts +0 -8
  76. package/dist/data/element-book-entry/element-book-entry-type.js +0 -9
  77. package/dist/data/element-book-entry/element-book-entry.d.ts +0 -14
  78. package/dist/data/element-book-entry/element-book-entry.js +0 -22
  79. package/dist/data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control-type.d.ts +0 -13
  80. package/dist/data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control-type.js +0 -7
  81. package/dist/data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control.d.ts +0 -13
  82. package/dist/data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control.js +0 -4
  83. package/dist/data/element-book-entry/element-book-page/element-book-page-example.d.ts +0 -22
  84. package/dist/data/element-book-entry/element-book-page/element-book-page.d.ts +0 -23
  85. package/dist/data/element-book-entry/element-book-page/element-book-page.js +0 -41
  86. package/dist/data/element-book-entry/entry-tree/entry-tree-search.d.ts +0 -8
  87. package/dist/data/element-book-entry/entry-tree/entry-tree-search.js +0 -66
  88. package/dist/data/element-book-entry/entry-tree/entry-tree.d.ts +0 -18
  89. package/dist/data/element-book-entry/entry-tree/entry-tree.js +0 -87
  90. package/dist/data/element-book-entry/entry-tree/tree-cache.d.ts +0 -5
  91. package/dist/data/element-book-entry/entry-tree/tree-cache.js +0 -8
  92. package/dist/data/element-book-entry/entry-tree/walk-entry-tree.d.ts +0 -8
  93. package/dist/data/element-book-entry/entry-tree/walk-entry-tree.js +0 -85
  94. package/dist/routing/create-element-book-router.d.ts +0 -2
  95. package/dist/routing/element-book-routing.d.ts +0 -10
  96. package/dist/routing/element-book-routing.js +0 -18
  97. package/dist/ui/elements/common/element-book-route-link.element.d.ts +0 -5
  98. package/dist/ui/elements/element-book-app/get-current-entry.d.ts +0 -4
  99. package/dist/ui/elements/element-book-app/get-current-entry.js +0 -17
  100. package/dist/ui/elements/element-book-breadcrumbs.element.d.ts +0 -5
  101. package/dist/ui/elements/element-book-nav.element.d.ts +0 -7
  102. package/dist/ui/elements/element-book-nav.element.js +0 -129
  103. package/dist/ui/elements/entry-display/element-book-entry-display.element.d.ts +0 -8
  104. package/dist/ui/elements/entry-display/element-book-entry-display.element.js +0 -279
  105. package/dist/ui/elements/entry-display/element-book-example-controls.element.d.ts +0 -4
  106. package/dist/ui/elements/entry-display/element-book-example-controls.element.js +0 -26
  107. package/dist/ui/elements/entry-display/element-book-example-viewer.element.d.ts +0 -6
  108. package/dist/ui/elements/entry-display/element-book-example-viewer.element.js +0 -43
  109. package/dist/ui/elements/entry-display/element-book-page-controls.element.d.ts +0 -11
  110. package/dist/ui/elements/entry-display/element-book-page-controls.element.js +0 -65
  111. package/dist/ui/elements/entry-display/element-book-page-examples.element.d.ts +0 -7
  112. package/dist/ui/elements/entry-display/element-book-page-examples.element.js +0 -102
  113. package/dist/ui/icons/element-16.icon.d.ts +0 -1
  114. package/dist/ui/icons/element-16.icon.js +0 -18
  115. package/dist/ui/icons/element-24.icon.d.ts +0 -1
  116. package/dist/ui/icons/element-24.icon.js +0 -18
  117. package/dist/utilities/type.d.ts +0 -3
  118. /package/dist/data/{element-book-entry/element-book-page/element-book-page-example.js → book-entry/base-book-entry.js} +0 -0
  119. /package/dist/{utilities/type.js → data/book-entry/book-element-example/book-element-example.js} +0 -0
  120. /package/dist/{utilities/search.d.ts → util/fuzzy-search.d.ts} +0 -0
  121. /package/dist/{utilities/search.js → util/fuzzy-search.js} +0 -0
@@ -0,0 +1,56 @@
1
+ import { randomString } from '@augment-vir/browser';
2
+ import { isRuntimeTypeOf } from '@augment-vir/common';
3
+ import { fuzzySearch } from '../../util/fuzzy-search';
4
+ const searchJoin = randomString(32);
5
+ function createBreadcrumbsSearchKey(breadcrumbs) {
6
+ return breadcrumbs.join(searchJoin);
7
+ }
8
+ function getFullTreeKeysToInclude(breadcrumbs) {
9
+ if (!breadcrumbs.length) {
10
+ return [];
11
+ }
12
+ const currentKey = createBreadcrumbsSearchKey(breadcrumbs);
13
+ const ancestorKeys = getFullTreeKeysToInclude(breadcrumbs.slice(0, -1));
14
+ return [
15
+ currentKey,
16
+ ...ancestorKeys,
17
+ ];
18
+ }
19
+ const errorQueries = [
20
+ 'error',
21
+ 'errors',
22
+ ];
23
+ function isSearchingForErrors(searchQuery) {
24
+ return errorQueries.includes(searchQuery);
25
+ }
26
+ export function searchFlattenedNodes({ flattenedNodes, searchQuery, }) {
27
+ const includeInSearchResults = {};
28
+ flattenedNodes.forEach((treeNode) => {
29
+ const matchesErrors = treeNode.entry.errors.length && isSearchingForErrors(searchQuery);
30
+ const shouldInclude = fuzzySearch({
31
+ searchIn: [
32
+ treeNode.entry.title,
33
+ ...treeNode.entry.descriptionParagraphs,
34
+ ]
35
+ .join(' ')
36
+ .toLowerCase(),
37
+ searchQuery: searchQuery.toLowerCase(),
38
+ }) || matchesErrors;
39
+ if (shouldInclude) {
40
+ const keysToInclude = getFullTreeKeysToInclude(treeNode.fullUrlBreadcrumbs);
41
+ keysToInclude.forEach((keyToInclude) => (includeInSearchResults[keyToInclude] = true));
42
+ }
43
+ else {
44
+ const currentNodeKey = createBreadcrumbsSearchKey(treeNode.fullUrlBreadcrumbs);
45
+ includeInSearchResults[currentNodeKey] = false;
46
+ }
47
+ });
48
+ return flattenedNodes.filter((treeNode) => {
49
+ const inSearchResultsKey = createBreadcrumbsSearchKey(treeNode.fullUrlBreadcrumbs);
50
+ const shouldInclude = includeInSearchResults[inSearchResultsKey];
51
+ if (!isRuntimeTypeOf(shouldInclude, 'boolean')) {
52
+ throw new Error(`Failed to find '${treeNode.fullUrlBreadcrumbs.join(' > ')}' in includeInSearchResults.`);
53
+ }
54
+ return shouldInclude;
55
+ });
56
+ }
@@ -0,0 +1,4 @@
1
+ import { BookEntry } from '../book-entry/book-entry';
2
+ import { BookTree } from './book-tree-node';
3
+ export declare function getTreeFromCache(entries: ReadonlyArray<BookEntry>): BookTree | undefined;
4
+ export declare function addTreeToCache(entries: ReadonlyArray<BookEntry>, tree: BookTree): void;
@@ -0,0 +1,8 @@
1
+ import { getOrSetFromMap } from '@augment-vir/common';
2
+ const treeCache = new Map();
3
+ export function getTreeFromCache(entries) {
4
+ return treeCache.get(entries);
5
+ }
6
+ export function addTreeToCache(entries, tree) {
7
+ getOrSetFromMap(treeCache, entries, () => tree);
8
+ }
package/dist/index.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- export * from './data/element-book-entry/element-book-chapter/element-book-chapter';
2
- export * from './data/element-book-entry/element-book-entry';
3
- export * from './data/element-book-entry/element-book-page/element-book-page';
4
- export * from './data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control';
5
- export * from './data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control-type';
6
- export * from './data/element-book-entry/element-book-page/element-book-page-example';
1
+ export * from './data/book-entry/book-element-example/book-element-example';
2
+ export * from './data/book-entry/book-page/book-page';
3
+ export * from './data/book-entry/book-page/book-page-controls';
4
+ export * from './data/book-entry/book-page/define-book-page';
5
+ export * from './data/book-entry/url-breadcrumbs';
7
6
  export * from './ui/elements/element-book-app/element-book-app-slots';
8
7
  export * from './ui/elements/element-book-app/element-book-app.element';
9
8
  export * from './ui/elements/element-book-app/element-book-config';
package/dist/index.js CHANGED
@@ -1,9 +1,8 @@
1
- export * from './data/element-book-entry/element-book-chapter/element-book-chapter';
2
- export * from './data/element-book-entry/element-book-entry';
3
- export * from './data/element-book-entry/element-book-page/element-book-page';
4
- export * from './data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control';
5
- export * from './data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control-type';
6
- export * from './data/element-book-entry/element-book-page/element-book-page-example';
1
+ export * from './data/book-entry/book-element-example/book-element-example';
2
+ export * from './data/book-entry/book-page/book-page';
3
+ export * from './data/book-entry/book-page/book-page-controls';
4
+ export * from './data/book-entry/book-page/define-book-page';
5
+ export * from './data/book-entry/url-breadcrumbs';
7
6
  export * from './ui/elements/element-book-app/element-book-app-slots';
8
7
  export * from './ui/elements/element-book-app/element-book-app.element';
9
8
  export * from './ui/elements/element-book-app/element-book-config';
@@ -0,0 +1,10 @@
1
+ import { FullRoute, SpaRouter } from 'spa-router-vir';
2
+ export declare enum BookMainRoute {
3
+ Search = "search",
4
+ Book = "book"
5
+ }
6
+ export type ValidBookPaths = [BookMainRoute.Search, string] | [BookMainRoute.Book, ...string[]];
7
+ export type BookFullRoute = Required<Readonly<FullRoute<ValidBookPaths, undefined | Record<string, string>, undefined>>>;
8
+ export declare function extractSearchQuery(paths: Readonly<ValidBookPaths>): string;
9
+ export declare const defaultBookFullRoute: Readonly<BookFullRoute>;
10
+ export type BookRouter = BookFullRoute extends FullRoute<infer Paths, infer Search, infer Hash> ? Readonly<SpaRouter<Paths, Search, Hash>> : never;
@@ -0,0 +1,18 @@
1
+ export var BookMainRoute;
2
+ (function (BookMainRoute) {
3
+ BookMainRoute["Search"] = "search";
4
+ BookMainRoute["Book"] = "book";
5
+ })(BookMainRoute || (BookMainRoute = {}));
6
+ export function extractSearchQuery(paths) {
7
+ if (paths[0] === BookMainRoute.Book) {
8
+ return '';
9
+ }
10
+ else {
11
+ return paths[1] ? decodeURIComponent(paths[1]) : '';
12
+ }
13
+ }
14
+ export const defaultBookFullRoute = {
15
+ hash: undefined,
16
+ paths: [BookMainRoute.Book],
17
+ search: undefined,
18
+ };
@@ -0,0 +1,2 @@
1
+ import { BookRouter } from './book-routing';
2
+ export declare function createBookRouter(baseRoute: string | undefined): BookRouter;
@@ -1,7 +1,7 @@
1
1
  import { isEnumValue } from '@augment-vir/common';
2
2
  import { createSpaRouter } from 'spa-router-vir';
3
- import { defaultElementBookFullRoute, ElementBookMainRoute, } from './element-book-routing';
4
- export function createElementBookRouter(baseRoute) {
3
+ import { BookMainRoute, defaultBookFullRoute } from './book-routing';
4
+ export function createBookRouter(baseRoute) {
5
5
  return createSpaRouter({
6
6
  routeBase: baseRoute,
7
7
  routeSanitizer(rawRoute) {
@@ -16,19 +16,19 @@ export function createElementBookRouter(baseRoute) {
16
16
  }
17
17
  function sanitizePaths(paths) {
18
18
  const firstPath = paths[0];
19
- if (!isEnumValue(firstPath, ElementBookMainRoute)) {
20
- return defaultElementBookFullRoute.paths;
19
+ if (!isEnumValue(firstPath, BookMainRoute)) {
20
+ return defaultBookFullRoute.paths;
21
21
  }
22
- else if (firstPath === ElementBookMainRoute.Book) {
22
+ else if (firstPath === BookMainRoute.Book) {
23
23
  return [
24
- ElementBookMainRoute.Book,
24
+ BookMainRoute.Book,
25
25
  ...paths.slice(1),
26
26
  ];
27
27
  }
28
- else if (firstPath === ElementBookMainRoute.Search) {
28
+ else if (firstPath === BookMainRoute.Search) {
29
29
  if (!paths[1]) {
30
30
  return [
31
- ElementBookMainRoute.Book,
31
+ BookMainRoute.Book,
32
32
  ...paths.slice(1),
33
33
  ];
34
34
  }
@@ -0,0 +1,5 @@
1
+ import { BookFullRoute, BookRouter } from '../../routing/book-routing';
2
+ export declare const BookBreadcrumbs: import("element-vir").DeclarativeElementDefinition<"book-breadcrumbs", {
3
+ currentRoute: Readonly<BookFullRoute>;
4
+ router: BookRouter;
5
+ }, {}, {}, `book-breadcrumbs-${string}`, `book-breadcrumbs-${string}`, import("lit-html").HTMLTemplateResult | import("lit-html").HTMLTemplateResult[]>;
@@ -1,9 +1,9 @@
1
1
  import { assign, css, html } from 'element-vir';
2
- import { ElementBookMainRoute, } from '../../routing/element-book-routing';
3
- import { ElementBookRouteLink } from './common/element-book-route-link.element';
4
- import { defineElementBookElement } from './define-book-element';
5
- export const ElementBookBreadcrumbs = defineElementBookElement()({
6
- tagName: 'element-book-breadcrumbs',
2
+ import { BookMainRoute } from '../../routing/book-routing';
3
+ import { BookRouteLink } from './common/book-route-link.element';
4
+ import { defineBookElement } from './define-book-element';
5
+ export const BookBreadcrumbs = defineBookElement()({
6
+ tagName: 'book-breadcrumbs',
7
7
  styles: css `
8
8
  :host {
9
9
  display: flex;
@@ -30,13 +30,13 @@ export const ElementBookBreadcrumbs = defineElementBookElement()({
30
30
  <span class="spacer">&gt;</span>
31
31
  `;
32
32
  return html `
33
- <${ElementBookRouteLink}
34
- ${assign(ElementBookRouteLink, {
33
+ <${BookRouteLink}
34
+ ${assign(BookRouteLink, {
35
35
  route: {
36
36
  hash: undefined,
37
37
  search: undefined,
38
38
  paths: [
39
- ElementBookMainRoute.Book,
39
+ BookMainRoute.Book,
40
40
  ...fullPathSoFar,
41
41
  ],
42
42
  },
@@ -44,7 +44,7 @@ export const ElementBookBreadcrumbs = defineElementBookElement()({
44
44
  })}
45
45
  >
46
46
  ${currentPath}
47
- </${ElementBookRouteLink}>
47
+ </${BookRouteLink}>
48
48
  ${spacer}
49
49
  `;
50
50
  });
@@ -0,0 +1,7 @@
1
+ import { BookTreeNode } from '../../data/book-tree/book-tree-node';
2
+ import { BookRouter } from '../../routing/book-routing';
3
+ export declare const BookNav: import("element-vir").DeclarativeElementDefinition<"book-nav", {
4
+ flattenedNodes: ReadonlyArray<Readonly<BookTreeNode>>;
5
+ selectedPath: ReadonlyArray<string> | undefined;
6
+ router: BookRouter | undefined;
7
+ }, {}, {}, `book-nav-${string}`, "book-nav-internal-indent", import("lit-html").HTMLTemplateResult>;
@@ -0,0 +1,114 @@
1
+ import { areJsonEqual } from '@augment-vir/common';
2
+ import { assign, classMap, css, html, renderIf } from 'element-vir';
3
+ import { Element16Icon, ViraIcon } from 'vira';
4
+ import { BookEntryTypeEnum } from '../../data/book-entry/book-entry-type';
5
+ import { isBookTreeNode } from '../../data/book-tree/book-tree';
6
+ import { BookMainRoute } from '../../routing/book-routing';
7
+ import { colorThemeCssVars } from '../color-theme/color-theme';
8
+ import { BookRouteLink } from './common/book-route-link.element';
9
+ import { defineBookElement } from './define-book-element';
10
+ import { ElementBookSlotName } from './element-book-app/element-book-app-slots';
11
+ export const BookNav = defineBookElement()({
12
+ tagName: 'book-nav',
13
+ cssVars: {
14
+ 'book-nav-internal-indent': '0',
15
+ },
16
+ styles: ({ cssVars }) => css `
17
+ :host {
18
+ display: flex;
19
+ flex-direction: column;
20
+ padding: 16px 0;
21
+ background-color: ${colorThemeCssVars['element-book-page-background-faint-level-2-color'].value};
22
+ }
23
+
24
+ .title-row:hover {
25
+ background-color: ${colorThemeCssVars['element-book-nav-hover-background-color'].value};
26
+ color: ${colorThemeCssVars['element-book-nav-hover-foreground-color'].value};
27
+ }
28
+
29
+ .title-row:active {
30
+ background-color: ${colorThemeCssVars['element-book-nav-active-background-color']
31
+ .value};
32
+ color: ${colorThemeCssVars['element-book-nav-active-foreground-color'].value};
33
+ }
34
+
35
+ .title-row {
36
+ display: block;
37
+ ${BookRouteLink.cssVars['book-route-link-anchor-padding']
38
+ .name}: 1px 24px 1px calc(calc(16px * ${cssVars['book-nav-internal-indent']
39
+ .value}) + 8px);
40
+ }
41
+
42
+ ul {
43
+ list-style: none;
44
+ padding: 0;
45
+ margin: 0;
46
+ }
47
+
48
+ .selected,
49
+ .selected:hover {
50
+ background-color: ${colorThemeCssVars['element-book-nav-selected-background-color']
51
+ .value};
52
+ color: ${colorThemeCssVars['element-book-nav-selected-foreground-color'].value};
53
+ pointer-events: none;
54
+ }
55
+
56
+ .title-text {
57
+ white-space: nowrap;
58
+ padding: 1px 0;
59
+ text-overflow: ellipsis;
60
+ display: flex;
61
+ gap: 8px;
62
+ align-items: center;
63
+ font-size: 16px;
64
+ }
65
+
66
+ ${ViraIcon} {
67
+ display: inline-flex;
68
+ color: ${colorThemeCssVars['element-book-accent-icon-color'].value};
69
+ }
70
+ `,
71
+ renderCallback({ inputs }) {
72
+ const navTreeTemplates = inputs.flattenedNodes.map((treeNode) => {
73
+ const liStyle = css `
74
+ --book-nav-internal-indent: ${treeNode.fullUrlBreadcrumbs.length};
75
+ `;
76
+ return html `
77
+ <li style=${liStyle}>
78
+ <${BookRouteLink}
79
+ ${assign(BookRouteLink, {
80
+ router: inputs.router,
81
+ route: {
82
+ paths: [
83
+ BookMainRoute.Book,
84
+ ...treeNode.fullUrlBreadcrumbs,
85
+ ],
86
+ },
87
+ })}
88
+ class=${classMap({
89
+ 'title-row': true,
90
+ selected: inputs.selectedPath
91
+ ? areJsonEqual(inputs.selectedPath, treeNode.fullUrlBreadcrumbs)
92
+ : false,
93
+ })}
94
+ >
95
+ <div class="title-text">
96
+ ${renderIf(isBookTreeNode(treeNode, BookEntryTypeEnum.ElementExample), html `
97
+ <${ViraIcon}
98
+ ${assign(ViraIcon, { icon: Element16Icon })}
99
+ ></${ViraIcon}>
100
+ `)}
101
+ ${treeNode.entry.title}
102
+ </div>
103
+ </${BookRouteLink}>
104
+ </li>
105
+ `;
106
+ });
107
+ return html `
108
+ <slot name=${ElementBookSlotName.NavHeader}></slot>
109
+ <ul>
110
+ ${navTreeTemplates}
111
+ </ul>
112
+ `;
113
+ },
114
+ });
@@ -0,0 +1,3 @@
1
+ export declare const BookError: import("element-vir").DeclarativeElementDefinition<"book-error", {
2
+ message: string | ReadonlyArray<string>;
3
+ }, {}, {}, `book-error-${string}`, `book-error-${string}`, import("lit-html").HTMLTemplateResult[]>;
@@ -0,0 +1,27 @@
1
+ import { isRuntimeTypeOf } from '@augment-vir/common';
2
+ import { css, html } from 'element-vir';
3
+ import { defineBookElement } from '../define-book-element';
4
+ export const BookError = defineBookElement()({
5
+ tagName: 'book-error',
6
+ styles: css `
7
+ :host {
8
+ display: flex;
9
+ flex-direction: column;
10
+ color: red;
11
+ font-weight: bold;
12
+ }
13
+
14
+ p {
15
+ margin: 0;
16
+ padding: 0;
17
+ }
18
+ `,
19
+ renderCallback({ inputs }) {
20
+ const paragraphs = isRuntimeTypeOf(inputs.message, 'array')
21
+ ? inputs.message
22
+ : [inputs.message];
23
+ return paragraphs.map((paragraph) => html `
24
+ <p>${paragraph}</p>
25
+ `);
26
+ },
27
+ });
@@ -0,0 +1,5 @@
1
+ import { BookFullRoute, BookRouter } from '../../../routing/book-routing';
2
+ export declare const BookRouteLink: import("element-vir").DeclarativeElementDefinition<"book-route-link", {
3
+ route: Partial<BookFullRoute>;
4
+ router: BookRouter | undefined;
5
+ }, {}, {}, `book-route-link-${string}`, "book-route-link-anchor-padding", import("lit-html").HTMLTemplateResult>;
@@ -1,17 +1,17 @@
1
1
  import { css, html, listen } from 'element-vir';
2
2
  import { shouldMouseEventTriggerRoutes } from 'spa-router-vir';
3
3
  import { ChangeRouteEvent } from '../../events/change-route.event';
4
- import { defineElementBookElement } from '../define-book-element';
5
- export const ElementBookRouteLink = defineElementBookElement()({
6
- tagName: 'element-book-route-link',
4
+ import { defineBookElement } from '../define-book-element';
5
+ export const BookRouteLink = defineBookElement()({
6
+ tagName: 'book-route-link',
7
7
  cssVars: {
8
- 'element-book-route-link-anchor-padding': '',
8
+ 'book-route-link-anchor-padding': '',
9
9
  },
10
10
  styles: ({ cssVars }) => css `
11
11
  a {
12
12
  box-sizing: border-box;
13
13
  display: block;
14
- padding: ${cssVars['element-book-route-link-anchor-padding'].value};
14
+ padding: ${cssVars['book-route-link-anchor-padding'].value};
15
15
  text-decoration: inherit;
16
16
  color: inherit;
17
17
  height: 100%;
@@ -1,2 +1,2 @@
1
- export type BookTagName = `element-book-${string}`;
2
- export declare const defineElementBookElement: <InputsGeneric extends {}>() => <TagName extends `element-book-${string}`, StateInit extends {}, EventsInit extends {}, HostClassKeys extends `${TagName}-${string}`, CssVarKeys extends `${TagName}-${string}`, RenderOutput extends any>(inputs: import("element-vir").DeclarativeElementInit<TagName, InputsGeneric, StateInit, EventsInit, HostClassKeys, CssVarKeys, RenderOutput>) => import("element-vir").DeclarativeElementDefinition<TagName, InputsGeneric, StateInit, EventsInit, HostClassKeys, CssVarKeys, RenderOutput>, defineElementBookElementNoInputs: <TagName_1 extends `element-book-${string}`, Inputs extends {}, StateInit_1 extends {}, EventsInit_1 extends {}, HostClassKeys_1 extends `${TagName_1}-${string}`, CssVarKeys_1 extends `${TagName_1}-${string}`, RenderOutput_1 extends any>(inputs: import("element-vir").DeclarativeElementInit<TagName_1, Inputs, StateInit_1, EventsInit_1, HostClassKeys_1, CssVarKeys_1, RenderOutput_1>) => import("element-vir").DeclarativeElementDefinition<TagName_1, Inputs, StateInit_1, EventsInit_1, HostClassKeys_1, CssVarKeys_1, RenderOutput_1>;
1
+ export type BookTagName = `book-${string}`;
2
+ export declare const defineBookElement: <InputsGeneric extends {}>() => <TagName extends `book-${string}`, StateInit extends {}, EventsInit extends {}, HostClassKeys extends `${TagName}-${string}`, CssVarKeys extends `${TagName}-${string}`, RenderOutput extends any>(inputs: import("element-vir").DeclarativeElementInit<TagName, InputsGeneric, StateInit, EventsInit, HostClassKeys, CssVarKeys, RenderOutput>) => import("element-vir").DeclarativeElementDefinition<TagName, InputsGeneric, StateInit, EventsInit, HostClassKeys, CssVarKeys, RenderOutput>, defineBookElementNoInputs: <TagName_1 extends `book-${string}`, Inputs extends {}, StateInit_1 extends {}, EventsInit_1 extends {}, HostClassKeys_1 extends `${TagName_1}-${string}`, CssVarKeys_1 extends `${TagName_1}-${string}`, RenderOutput_1 extends any>(inputs: import("element-vir").DeclarativeElementInit<TagName_1, Inputs, StateInit_1, EventsInit_1, HostClassKeys_1, CssVarKeys_1, RenderOutput_1>) => import("element-vir").DeclarativeElementDefinition<TagName_1, Inputs, StateInit_1, EventsInit_1, HostClassKeys_1, CssVarKeys_1, RenderOutput_1>;
@@ -1,2 +1,2 @@
1
1
  import { wrapDefineElement } from 'element-vir';
2
- export const { defineElement: defineElementBookElement, defineElementNoInputs: defineElementBookElementNoInputs, } = wrapDefineElement();
2
+ export const { defineElement: defineBookElement, defineElementNoInputs: defineBookElementNoInputs } = wrapDefineElement();
@@ -1,4 +1,4 @@
1
1
  export declare enum ElementBookSlotName {
2
- Footer = "element-book-footer",
3
- NavHeader = "element-book-nav-header"
2
+ Footer = "book-footer",
3
+ NavHeader = "book-nav-header"
4
4
  }
@@ -1,5 +1,5 @@
1
1
  export var ElementBookSlotName;
2
2
  (function (ElementBookSlotName) {
3
- ElementBookSlotName["Footer"] = "element-book-footer";
4
- ElementBookSlotName["NavHeader"] = "element-book-nav-header";
3
+ ElementBookSlotName["Footer"] = "book-footer";
4
+ ElementBookSlotName["NavHeader"] = "book-nav-header";
5
5
  })(ElementBookSlotName || (ElementBookSlotName = {}));
@@ -1,3 +1,4 @@
1
+ import { CurrentControls } from '../../../data/book-entry/book-page/current-controls';
1
2
  import { ColorTheme } from '../../color-theme/color-theme';
2
3
  import { ThemeConfig } from '../../color-theme/create-color-theme';
3
4
  import { ElementBookConfig } from './element-book-config';
@@ -6,9 +7,13 @@ type ColorThemeState = {
6
7
  theme: ColorTheme;
7
8
  };
8
9
  export declare const ElementBookApp: import("element-vir").DeclarativeElementDefinition<"element-book-app", ElementBookConfig, {
9
- currentRoute: Readonly<Required<Readonly<import("spa-router-vir").FullRoute<import("../../../routing/element-book-routing").ValidElementBookPaths, Record<string, string> | undefined, undefined>>>>;
10
- router: Readonly<import("spa-router-vir").SpaRouter<import("../../../routing/element-book-routing").ValidElementBookPaths, Record<string, string> | undefined, undefined>> | undefined;
10
+ currentRoute: Readonly<Required<Readonly<import("spa-router-vir").FullRoute<import("../../../routing/book-routing").ValidBookPaths, Record<string, string> | undefined, undefined>>>>;
11
+ router: Readonly<import("spa-router-vir").SpaRouter<import("../../../routing/book-routing").ValidBookPaths, Record<string, string> | undefined, undefined>> | undefined;
11
12
  colors: ColorThemeState;
13
+ treeBasedCurrentControls: {
14
+ trigger: ElementBookConfig['entries'];
15
+ currentControls: CurrentControls;
16
+ } | undefined;
12
17
  }, {
13
18
  pathUpdate: import("element-vir").DefinedTypedEventNameDefinition<readonly string[]>;
14
19
  }, "element-book-app-", "element-book-app-", import("lit-html").HTMLTemplateResult>;