element-book 22.2.2 → 23.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 (77) hide show
  1. package/README.md +65 -5
  2. package/dist/data/book-entry/base-book-entry.d.ts +7 -2
  3. package/dist/data/book-entry/book-entry-type.d.ts +12 -2
  4. package/dist/data/book-entry/book-entry-type.js +11 -6
  5. package/dist/data/book-entry/book-entry.d.ts +14 -4
  6. package/dist/data/book-entry/book-entry.js +7 -2
  7. package/dist/data/book-entry/book-page/book-page-controls.d.ts +62 -10
  8. package/dist/data/book-entry/book-page/book-page-controls.js +38 -16
  9. package/dist/data/book-entry/book-page/book-page.d.ts +29 -8
  10. package/dist/data/book-entry/book-page/book-page.js +1 -0
  11. package/dist/data/book-entry/book-page/controls-wrapper.d.ts +24 -4
  12. package/dist/data/book-entry/book-page/controls-wrapper.js +18 -3
  13. package/dist/data/book-entry/book-page/define-book-page.d.ts +44 -12
  14. package/dist/data/book-entry/book-page/define-book-page.js +19 -12
  15. package/dist/data/book-entry/book-root.d.ts +8 -3
  16. package/dist/data/book-entry/url-breadcrumbs.d.ts +17 -1
  17. package/dist/data/book-entry/url-breadcrumbs.js +16 -0
  18. package/dist/data/book-entry/verify-book-entry.d.ts +3 -6
  19. package/dist/data/book-entry/verify-book-entry.js +7 -7
  20. package/dist/data/book-tree/book-tree-node.d.ts +26 -7
  21. package/dist/data/book-tree/book-tree-node.js +5 -0
  22. package/dist/data/book-tree/book-tree.d.ts +7 -7
  23. package/dist/data/book-tree/book-tree.js +16 -15
  24. package/dist/data/book-tree/search-nodes.d.ts +1 -1
  25. package/dist/data/book-tree/search-nodes.js +4 -4
  26. package/dist/data/book-tree/tree-cache.d.ts +2 -2
  27. package/dist/index.d.ts +18 -10
  28. package/dist/index.js +18 -10
  29. package/dist/routing/book-router.d.ts +1 -1
  30. package/dist/routing/book-router.js +3 -3
  31. package/dist/routing/book-routing.d.ts +25 -0
  32. package/dist/routing/book-routing.js +15 -0
  33. package/dist/ui/color-theme/color-theme.d.ts +33 -13
  34. package/dist/ui/color-theme/color-theme.js +14 -5
  35. package/dist/ui/color-theme/create-color-theme.d.ts +23 -3
  36. package/dist/ui/color-theme/create-color-theme.js +15 -0
  37. package/dist/ui/elements/book-breadcrumbs.element.d.ts +3 -3
  38. package/dist/ui/elements/book-breadcrumbs.element.js +4 -4
  39. package/dist/ui/elements/book-nav/book-nav-filter.d.ts +1 -1
  40. package/dist/ui/elements/book-nav/book-nav-filter.js +6 -10
  41. package/dist/ui/elements/book-nav/book-nav.element.d.ts +3 -3
  42. package/dist/ui/elements/book-nav/book-nav.element.js +13 -13
  43. package/dist/ui/elements/common/book-error.element.d.ts +1 -1
  44. package/dist/ui/elements/common/book-error.element.js +4 -6
  45. package/dist/ui/elements/common/book-route-link.element.d.ts +3 -3
  46. package/dist/ui/elements/common/book-route-link.element.js +3 -3
  47. package/dist/ui/elements/define-book-element.d.ts +1 -1
  48. package/dist/ui/elements/element-book-app/element-book-app-slots.d.ts +13 -0
  49. package/dist/ui/elements/element-book-app/element-book-app-slots.js +13 -0
  50. package/dist/ui/elements/element-book-app/element-book-app.element.d.ts +22 -11
  51. package/dist/ui/elements/element-book-app/element-book-app.element.js +42 -36
  52. package/dist/ui/elements/element-book-app/element-book-config.d.ts +26 -16
  53. package/dist/ui/elements/element-book-app/get-current-nodes.d.ts +2 -2
  54. package/dist/ui/elements/element-book-app/get-current-nodes.js +3 -8
  55. package/dist/ui/elements/element-book-app/global-values.d.ts +5 -0
  56. package/dist/ui/elements/entry-display/book-breadcrumbs-bar.element.d.ts +3 -3
  57. package/dist/ui/elements/entry-display/book-breadcrumbs-bar.element.js +8 -8
  58. package/dist/ui/elements/entry-display/book-entry-description.element.d.ts +1 -1
  59. package/dist/ui/elements/entry-display/book-entry-description.element.js +3 -3
  60. package/dist/ui/elements/entry-display/book-page/book-page-controls.element.d.ts +6 -6
  61. package/dist/ui/elements/entry-display/book-page/book-page-controls.element.js +14 -14
  62. package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.d.ts +6 -6
  63. package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.js +13 -11
  64. package/dist/ui/elements/entry-display/element-example/book-element-example-controls.element.d.ts +5 -5
  65. package/dist/ui/elements/entry-display/element-example/book-element-example-controls.element.js +5 -5
  66. package/dist/ui/elements/entry-display/element-example/book-element-example-viewer.element.d.ts +5 -5
  67. package/dist/ui/elements/entry-display/element-example/book-element-example-viewer.element.js +13 -9
  68. package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.d.ts +6 -6
  69. package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.js +5 -5
  70. package/dist/ui/elements/entry-display/entry-display/book-entry-display.element.d.ts +9 -9
  71. package/dist/ui/elements/entry-display/entry-display/book-entry-display.element.js +6 -6
  72. package/dist/ui/elements/entry-display/entry-display/create-node-templates.d.ts +5 -5
  73. package/dist/ui/elements/entry-display/entry-display/create-node-templates.js +16 -16
  74. package/dist/ui/events/change-route.event.d.ts +1 -1
  75. package/dist/util/fuzzy-search.js +3 -2
  76. package/dist/util/type.d.ts +7 -0
  77. package/package.json +31 -29
@@ -1,10 +1,10 @@
1
- import { extractEventTarget } from '@augment-vir/browser';
1
+ import { check } from '@augment-vir/assert';
2
+ import { extractEventTarget } from '@augment-vir/web';
2
3
  import { css, defineElementEvent, html, listen, renderIf } from 'element-vir';
3
- import { isRunTimeType } from 'run-time-assertions';
4
4
  import { Options24Icon, ViraIcon, ViraInput } from 'vira';
5
- import { BookPageControlTypeEnum, isControlInitType, } from '../../../../data/book-entry/book-page/book-page-controls';
6
- import { colorThemeCssVars } from '../../../color-theme/color-theme';
7
- import { defineBookElement } from '../../define-book-element';
5
+ import { BookPageControlType, isControlInitType, } from '../../../../data/book-entry/book-page/book-page-controls.js';
6
+ import { colorThemeCssVars } from '../../../color-theme/color-theme.js';
7
+ import { defineBookElement } from '../../define-book-element.js';
8
8
  export const BookPageControls = defineBookElement()({
9
9
  tagName: 'book-page-controls',
10
10
  events: {
@@ -53,16 +53,16 @@ export const BookPageControls = defineBookElement()({
53
53
  margin-left: -32px;
54
54
  }
55
55
  `,
56
- renderCallback({ inputs, dispatch, events }) {
56
+ render({ inputs, dispatch, events }) {
57
57
  if (!Object.entries(inputs.config).length) {
58
58
  return '';
59
59
  }
60
60
  return Object.entries(inputs.config).map(([controlName, controlInit,], index) => {
61
- if (controlInit.controlType === BookPageControlTypeEnum.Hidden) {
61
+ if (controlInit.controlType === BookPageControlType.Hidden) {
62
62
  return '';
63
63
  }
64
64
  const controlInputTemplate = createControlInput(inputs.currentValues[controlName], controlInit, (newValue) => {
65
- const fullUrlBreadcrumbs = isRunTimeType(inputs.fullUrlBreadcrumbs, 'array')
65
+ const fullUrlBreadcrumbs = check.isArray(inputs.fullUrlBreadcrumbs)
66
66
  ? inputs.fullUrlBreadcrumbs
67
67
  : inputs.fullUrlBreadcrumbs[controlName];
68
68
  if (!fullUrlBreadcrumbs) {
@@ -93,10 +93,10 @@ export const BookPageControls = defineBookElement()({
93
93
  },
94
94
  });
95
95
  function createControlInput(value, controlInit, valueChange) {
96
- if (isControlInitType(controlInit, BookPageControlTypeEnum.Hidden)) {
96
+ if (isControlInitType(controlInit, BookPageControlType.Hidden)) {
97
97
  return '';
98
98
  }
99
- else if (isControlInitType(controlInit, BookPageControlTypeEnum.Checkbox)) {
99
+ else if (isControlInitType(controlInit, BookPageControlType.Checkbox)) {
100
100
  return html `
101
101
  <input
102
102
  type="checkbox"
@@ -108,7 +108,7 @@ function createControlInput(value, controlInit, valueChange) {
108
108
  />
109
109
  `;
110
110
  }
111
- else if (isControlInitType(controlInit, BookPageControlTypeEnum.Color)) {
111
+ else if (isControlInitType(controlInit, BookPageControlType.Color)) {
112
112
  return html `
113
113
  <input
114
114
  type="color"
@@ -120,7 +120,7 @@ function createControlInput(value, controlInit, valueChange) {
120
120
  />
121
121
  `;
122
122
  }
123
- else if (isControlInitType(controlInit, BookPageControlTypeEnum.Text)) {
123
+ else if (isControlInitType(controlInit, BookPageControlType.Text)) {
124
124
  return html `
125
125
  <${ViraInput.assign({
126
126
  value: String(value),
@@ -133,7 +133,7 @@ function createControlInput(value, controlInit, valueChange) {
133
133
  ></${ViraInput}>
134
134
  `;
135
135
  }
136
- else if (isControlInitType(controlInit, BookPageControlTypeEnum.Number)) {
136
+ else if (isControlInitType(controlInit, BookPageControlType.Number)) {
137
137
  return html `
138
138
  <input
139
139
  type="number"
@@ -145,7 +145,7 @@ function createControlInput(value, controlInit, valueChange) {
145
145
  />
146
146
  `;
147
147
  }
148
- else if (isControlInitType(controlInit, BookPageControlTypeEnum.Dropdown)) {
148
+ else if (isControlInitType(controlInit, BookPageControlType.Dropdown)) {
149
149
  return html `
150
150
  <select
151
151
  .value=${value}
@@ -1,10 +1,10 @@
1
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
2
- import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper';
3
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
4
- import { BookRouter } from '../../../../routing/book-router';
1
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
2
+ import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper.js';
3
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
4
+ import { BookRouter } from '../../../../routing/book-router.js';
5
5
  export declare const BookPageWrapper: import("element-vir").DeclarativeElementDefinition<"book-page-wrapper", {
6
6
  isTopLevel: boolean;
7
- pageNode: BookTreeNode<BookEntryTypeEnum.Page>;
7
+ pageNode: BookTreeNode<BookEntryType.Page>;
8
8
  router: BookRouter | undefined;
9
9
  controls: ControlsWrapper;
10
- }, {}, {}, `book-page-wrapper-${string}`, `book-page-wrapper-${string}`, readonly string[]>;
10
+ }, {}, {}, "book-page-wrapper-", "book-page-wrapper-", readonly []>;
@@ -1,12 +1,12 @@
1
1
  import { combineErrors } from '@augment-vir/common';
2
2
  import { css, html } from 'element-vir';
3
- import { traverseControls, } from '../../../../data/book-entry/book-page/controls-wrapper';
4
- import { BookMainRoute } from '../../../../routing/book-routing';
5
- import { BookError } from '../../common/book-error.element';
6
- import { BookRouteLink } from '../../common/book-route-link.element';
7
- import { defineBookElement } from '../../define-book-element';
8
- import { BookEntryDescription } from '../book-entry-description.element';
9
- import { BookPageControls } from './book-page-controls.element';
3
+ import { traverseControls, } from '../../../../data/book-entry/book-page/controls-wrapper.js';
4
+ import { BookMainRoute } from '../../../../routing/book-routing.js';
5
+ import { BookError } from '../../common/book-error.element.js';
6
+ import { BookRouteLink } from '../../common/book-route-link.element.js';
7
+ import { defineBookElement } from '../../define-book-element.js';
8
+ import { BookEntryDescription } from '../book-entry-description.element.js';
9
+ import { BookPageControls } from './book-page-controls.element.js';
10
10
  export const BookPageWrapper = defineBookElement()({
11
11
  tagName: 'book-page-wrapper',
12
12
  styles: css `
@@ -34,7 +34,7 @@ export const BookPageWrapper = defineBookElement()({
34
34
  display: inline-block;
35
35
  }
36
36
  `,
37
- renderCallback({ inputs }) {
37
+ render({ inputs }) {
38
38
  const titleTemplate = inputs.isTopLevel
39
39
  ? html `
40
40
  <h2 class="header-with-icon">${inputs.pageNode.entry.title}</h2>
@@ -46,7 +46,9 @@ export const BookPageWrapper = defineBookElement()({
46
46
  BookMainRoute.Book,
47
47
  ...inputs.pageNode.fullUrlBreadcrumbs,
48
48
  ];
49
- const error = combineErrors(inputs.pageNode.entry.errors);
49
+ const error = inputs.pageNode.entry.errors.length
50
+ ? combineErrors(inputs.pageNode.entry.errors)
51
+ : undefined;
50
52
  if (error) {
51
53
  console.error(error);
52
54
  }
@@ -63,13 +65,13 @@ export const BookPageWrapper = defineBookElement()({
63
65
  })}>
64
66
  ${titleTemplate}
65
67
  </${BookRouteLink}>
66
- ${!!error
68
+ ${error
67
69
  ? html `
68
70
  <${BookError.assign({ message: error.message })}></${BookError}>
69
71
  `
70
72
  : html `
71
73
  <${BookEntryDescription.assign({
72
- descriptionParagraphs: inputs.pageNode.entry.descriptionParagraphs ?? [],
74
+ descriptionParagraphs: inputs.pageNode.entry.descriptionParagraphs,
73
75
  })}></${BookEntryDescription}>
74
76
  <${BookPageControls.assign({
75
77
  config: inputs.pageNode.entry.controls,
@@ -1,7 +1,7 @@
1
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
2
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
3
- import { BookRouter } from '../../../../routing/book-router';
1
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
2
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
3
+ import { BookRouter } from '../../../../routing/book-router.js';
4
4
  export declare const BookElementExampleControls: import("element-vir").DeclarativeElementDefinition<"book-element-example-controls", {
5
- elementExampleNode: BookTreeNode<BookEntryTypeEnum.ElementExample>;
5
+ elementExampleNode: BookTreeNode<BookEntryType.ElementExample>;
6
6
  router: BookRouter | undefined;
7
- }, {}, {}, `book-element-example-controls-${string}`, `book-element-example-controls-${string}`, readonly string[]>;
7
+ }, {}, {}, "book-element-example-controls-", "book-element-example-controls-", readonly []>;
@@ -1,8 +1,8 @@
1
1
  import { css, html } from 'element-vir';
2
- import { BookMainRoute } from '../../../../routing/book-routing';
3
- import { colorThemeCssVars } from '../../../color-theme/color-theme';
4
- import { BookRouteLink } from '../../common/book-route-link.element';
5
- import { defineBookElement } from '../../define-book-element';
2
+ import { BookMainRoute } from '../../../../routing/book-routing.js';
3
+ import { colorThemeCssVars } from '../../../color-theme/color-theme.js';
4
+ import { BookRouteLink } from '../../common/book-route-link.element.js';
5
+ import { defineBookElement } from '../../define-book-element.js';
6
6
  export const BookElementExampleControls = defineBookElement()({
7
7
  tagName: 'book-element-example-controls',
8
8
  styles: css `
@@ -13,7 +13,7 @@ export const BookElementExampleControls = defineBookElement()({
13
13
  padding: 0 8px 4px;
14
14
  }
15
15
  `,
16
- renderCallback({ inputs }) {
16
+ render({ inputs }) {
17
17
  const linkPaths = [
18
18
  BookMainRoute.Book,
19
19
  ...inputs.elementExampleNode.fullUrlBreadcrumbs,
@@ -1,7 +1,7 @@
1
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
2
- import { BookPageControlsValues } from '../../../../data/book-entry/book-page/book-page-controls';
3
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
1
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
2
+ import { BookPageControlsValues } from '../../../../data/book-entry/book-page/book-page-controls.js';
3
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
4
4
  export declare const BookElementExampleViewer: import("element-vir").DeclarativeElementDefinition<"book-element-example-viewer", {
5
- elementExampleNode: BookTreeNode<BookEntryTypeEnum.ElementExample>;
5
+ elementExampleNode: BookTreeNode<BookEntryType.ElementExample>;
6
6
  currentPageControls: BookPageControlsValues;
7
- }, any, {}, `book-element-example-viewer-${string}`, `book-element-example-viewer-${string}`, readonly string[]>;
7
+ }, any, {}, "book-element-example-viewer-", "book-element-example-viewer-", readonly []>;
@@ -1,21 +1,24 @@
1
1
  import { combineErrors, extractErrorMessage } from '@augment-vir/common';
2
2
  import { html, renderIf } from 'element-vir';
3
- import { unsetInternalState } from '../../../../data/unset';
4
- import { BookError } from '../../common/book-error.element';
5
- import { defineBookElement } from '../../define-book-element';
3
+ import { unsetInternalState } from '../../../../data/unset.js';
4
+ import { BookError } from '../../common/book-error.element.js';
5
+ import { defineBookElement } from '../../define-book-element.js';
6
6
  export const BookElementExampleViewer = defineBookElement()({
7
7
  tagName: 'book-element-example-viewer',
8
8
  stateInitStatic: {
9
9
  isUnset: unsetInternalState,
10
10
  },
11
- renderCallback({ state, inputs, updateState }) {
11
+ render({ state, inputs, updateState }) {
12
12
  try {
13
13
  if (inputs.elementExampleNode.entry.errors.length) {
14
14
  throw combineErrors(inputs.elementExampleNode.entry.errors);
15
15
  }
16
- if (!inputs.elementExampleNode.entry.renderCallback ||
17
- typeof inputs.elementExampleNode.entry.renderCallback === 'string') {
18
- throw new Error(`Failed to render example '${inputs.elementExampleNode.entry.title}': renderCallback is not a function`);
16
+ if (
17
+ /** This is a check to make sure the input entry _does_ match the expected type. */
18
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
19
+ !inputs.elementExampleNode.entry.render ||
20
+ typeof inputs.elementExampleNode.entry.render === 'string') {
21
+ throw new Error(`Failed to render example '${inputs.elementExampleNode.entry.title}': render is not a function`);
19
22
  }
20
23
  if (state.isUnset === unsetInternalState) {
21
24
  updateState({
@@ -23,13 +26,13 @@ export const BookElementExampleViewer = defineBookElement()({
23
26
  ...inputs.elementExampleNode.entry.stateInitStatic,
24
27
  });
25
28
  }
26
- const output = inputs.elementExampleNode.entry.renderCallback({
29
+ const output = inputs.elementExampleNode.entry.render({
27
30
  state,
28
31
  updateState,
29
32
  controls: inputs.currentPageControls,
30
33
  });
31
34
  if (output instanceof Promise) {
32
- throw new Error('renderCallback output cannot be a promise');
35
+ throw new TypeError('render output cannot be a promise');
33
36
  }
34
37
  return html `
35
38
  ${renderIf(!!inputs.elementExampleNode.entry.styles, html `
@@ -41,6 +44,7 @@ export const BookElementExampleViewer = defineBookElement()({
41
44
  `;
42
45
  }
43
46
  catch (error) {
47
+ console.error('ERROR HERE', extractErrorMessage(error));
44
48
  console.error(error);
45
49
  return html `
46
50
  <${BookError.assign({
@@ -1,9 +1,9 @@
1
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
2
- import { BookPageControlsValues } from '../../../../data/book-entry/book-page/book-page-controls';
3
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
4
- import { BookRouter } from '../../../../routing/book-router';
1
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
2
+ import { BookPageControlsValues } from '../../../../data/book-entry/book-page/book-page-controls.js';
3
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
4
+ import { BookRouter } from '../../../../routing/book-router.js';
5
5
  export declare const BookElementExampleWrapper: import("element-vir").DeclarativeElementDefinition<"book-element-example-wrapper", {
6
- elementExampleNode: BookTreeNode<BookEntryTypeEnum.ElementExample>;
6
+ elementExampleNode: BookTreeNode<BookEntryType.ElementExample>;
7
7
  currentPageControls: BookPageControlsValues;
8
8
  router: BookRouter | undefined;
9
- }, {}, {}, `book-element-example-wrapper-${string}`, `book-element-example-wrapper-${string}`, readonly string[]>;
9
+ }, {}, {}, "book-element-example-wrapper-", "book-element-example-wrapper-", readonly []>;
@@ -1,9 +1,9 @@
1
1
  import { omitObjectKeys } from '@augment-vir/common';
2
2
  import { css, html } from 'element-vir';
3
- import { colorThemeCssVars } from '../../../color-theme/color-theme';
4
- import { defineBookElement } from '../../define-book-element';
5
- import { BookElementExampleControls } from './book-element-example-controls.element';
6
- import { BookElementExampleViewer } from './book-element-example-viewer.element';
3
+ import { colorThemeCssVars } from '../../../color-theme/color-theme.js';
4
+ import { defineBookElement } from '../../define-book-element.js';
5
+ import { BookElementExampleControls } from './book-element-example-controls.element.js';
6
+ import { BookElementExampleViewer } from './book-element-example-viewer.element.js';
7
7
  export const BookElementExampleWrapper = defineBookElement()({
8
8
  tagName: 'book-element-example-wrapper',
9
9
  styles: css `
@@ -40,7 +40,7 @@ export const BookElementExampleWrapper = defineBookElement()({
40
40
  color: ${colorThemeCssVars['element-book-accent-icon-color'].value};
41
41
  }
42
42
  `,
43
- renderCallback({ inputs }) {
43
+ render({ inputs }) {
44
44
  return html `
45
45
  <div class="individual-example-wrapper">
46
46
  <${BookElementExampleControls.assign(omitObjectKeys(inputs, ['currentPageControls']))}></${BookElementExampleControls}>
@@ -1,18 +1,18 @@
1
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
2
- import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper';
3
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
4
- import { BookRouter } from '../../../../routing/book-router';
5
- import { BookFullRoute } from '../../../../routing/book-routing';
1
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
2
+ import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper.js';
3
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
4
+ import { BookRouter } from '../../../../routing/book-router.js';
5
+ import { BookFullRoute } from '../../../../routing/book-routing.js';
6
6
  export declare const BookEntryDisplay: import("element-vir").DeclarativeElementDefinition<"book-entry-display", {
7
7
  controls: ControlsWrapper;
8
8
  currentNodes: ReadonlyArray<BookTreeNode>;
9
9
  currentRoute: Readonly<BookFullRoute>;
10
10
  debug: boolean;
11
- originalTree: Readonly<BookTreeNode<BookEntryTypeEnum.Root>>;
11
+ originalTree: Readonly<BookTreeNode<BookEntryType.Root>>;
12
12
  router: BookRouter | undefined;
13
13
  showLoading: boolean;
14
14
  }, {
15
- lastElement: Element | undefined;
15
+ lastElement: undefined | Element;
16
16
  }, {
17
- loadingRender: import("element-vir").DefinedTypedEventNameDefinition<boolean>;
18
- }, `book-entry-display-${string}`, `book-entry-display-${string}`, readonly string[]>;
17
+ loadingRender: import("element-vir").DefineEvent<boolean>;
18
+ }, "book-entry-display-", "book-entry-display-", readonly []>;
@@ -1,10 +1,10 @@
1
1
  import { css, defineElementEvent, html, onDomCreated, renderIf } from 'element-vir';
2
2
  import { LoaderAnimated24Icon, ViraIcon, viraAnimationDurations } from 'vira';
3
- import { extractSearchQuery } from '../../../../routing/book-routing';
4
- import { defineBookElement } from '../../define-book-element';
5
- import { ElementBookSlotName } from '../../element-book-app/element-book-app-slots';
6
- import { BookBreadcrumbsBar } from '../book-breadcrumbs-bar.element';
7
- import { createNodeTemplates } from './create-node-templates';
3
+ import { extractSearchQuery } from '../../../../routing/book-routing.js';
4
+ import { defineBookElement } from '../../define-book-element.js';
5
+ import { ElementBookSlotName } from '../../element-book-app/element-book-app-slots.js';
6
+ import { BookBreadcrumbsBar } from '../book-breadcrumbs-bar.element.js';
7
+ import { createNodeTemplates } from './create-node-templates.js';
8
8
  export const BookEntryDisplay = defineBookElement()({
9
9
  tagName: 'book-entry-display',
10
10
  styles: css `
@@ -70,7 +70,7 @@ export const BookEntryDisplay = defineBookElement()({
70
70
  stateInitStatic: {
71
71
  lastElement: undefined,
72
72
  },
73
- renderCallback: ({ inputs, dispatch, events, state, updateState }) => {
73
+ render: ({ inputs, dispatch, events, state, updateState }) => {
74
74
  const currentSearch = extractSearchQuery(inputs.currentRoute.paths);
75
75
  const entryTemplates = createNodeTemplates({
76
76
  currentNodes: inputs.currentNodes,
@@ -1,13 +1,13 @@
1
1
  import { HtmlInterpolation } from 'element-vir';
2
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
3
- import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper';
4
- import { BookTreeNode } from '../../../../data/book-tree/book-tree-node';
5
- import { BookRouter } from '../../../../routing/book-router';
2
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
3
+ import { ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper.js';
4
+ import { BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
5
+ import { BookRouter } from '../../../../routing/book-router.js';
6
6
  export declare function createNodeTemplates({ currentNodes, isTopLevel, router, isSearching, controls, originalTree, }: {
7
7
  currentNodes: ReadonlyArray<BookTreeNode>;
8
8
  isTopLevel: boolean;
9
9
  router: BookRouter | undefined;
10
10
  isSearching: boolean;
11
11
  controls: ControlsWrapper;
12
- originalTree: Readonly<BookTreeNode<BookEntryTypeEnum.Root>>;
12
+ originalTree: Readonly<BookTreeNode<BookEntryType.Root>>;
13
13
  }): HtmlInterpolation[];
@@ -1,12 +1,13 @@
1
- import { isLengthAtLeast, mapObjectValues } from '@augment-vir/common';
1
+ import { check } from '@augment-vir/assert';
2
+ import { mapObjectValues } from '@augment-vir/common';
2
3
  import { html, nothing, repeat } from 'element-vir';
3
- import { BookEntryTypeEnum } from '../../../../data/book-entry/book-entry-type';
4
- import { traverseControls, } from '../../../../data/book-entry/book-page/controls-wrapper';
5
- import { isBookTreeNode, traverseToImmediateParent } from '../../../../data/book-tree/book-tree';
6
- import { BookError } from '../../common/book-error.element';
7
- import { BookPageControls } from '../book-page/book-page-controls.element';
8
- import { BookPageWrapper } from '../book-page/book-page-wrapper.element';
9
- import { BookElementExampleWrapper } from '../element-example/book-element-example-wrapper.element';
4
+ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
5
+ import { traverseControls, } from '../../../../data/book-entry/book-page/controls-wrapper.js';
6
+ import { isBookTreeNode, traverseToImmediateParent } from '../../../../data/book-tree/book-tree.js';
7
+ import { BookError } from '../../common/book-error.element.js';
8
+ import { BookPageControls } from '../book-page/book-page-controls.element.js';
9
+ import { BookPageWrapper } from '../book-page/book-page-wrapper.element.js';
10
+ import { BookElementExampleWrapper } from '../element-example/book-element-example-wrapper.element.js';
10
11
  function getFlattenedControlsFromHiddenParents(currentNodes, currentControls, currentNode, originalTree) {
11
12
  const parent = traverseToImmediateParent(currentNode, originalTree);
12
13
  const allControls = [];
@@ -16,8 +17,7 @@ function getFlattenedControlsFromHiddenParents(currentNodes, currentControls, cu
16
17
  allControls.push(parentControls);
17
18
  }
18
19
  }
19
- if (isBookTreeNode(currentNode, BookEntryTypeEnum.Page) &&
20
- !currentNodes.includes(currentNode)) {
20
+ if (isBookTreeNode(currentNode, BookEntryType.Page) && !currentNodes.includes(currentNode)) {
21
21
  const currentEntryControls = traverseControls(currentControls, currentNode.fullUrlBreadcrumbs);
22
22
  allControls.push({
23
23
  config: currentNode.entry.controls,
@@ -52,12 +52,12 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
52
52
  `,
53
53
  ];
54
54
  }
55
- const hiddenAncestorControls = isLengthAtLeast(currentNodes, 1)
55
+ const hiddenAncestorControls = check.isLengthAtLeast(currentNodes, 1)
56
56
  ? getFlattenedControlsFromHiddenParents(currentNodes, controls, currentNodes[0], originalTree)
57
57
  : undefined;
58
58
  const hiddenAncestorControlsTemplate = hiddenAncestorControls &&
59
59
  Object.values(hiddenAncestorControls.config).length &&
60
- isLengthAtLeast(currentNodes, 1)
60
+ check.isLengthAtLeast(currentNodes, 1)
61
61
  ? html `
62
62
  <${BookPageControls.assign({
63
63
  config: hiddenAncestorControls.config,
@@ -66,8 +66,8 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
66
66
  })}></${BookPageControls}>
67
67
  `
68
68
  : nothing;
69
- const templates = repeat(currentNodes, (node) => node.fullUrlBreadcrumbs.join('>'), (currentNode, index) => {
70
- if (isBookTreeNode(currentNode, BookEntryTypeEnum.Page)) {
69
+ const templates = repeat(currentNodes, (node) => node.fullUrlBreadcrumbs.join('>'), (currentNode) => {
70
+ if (isBookTreeNode(currentNode, BookEntryType.Page)) {
71
71
  return html `
72
72
  <${BookPageWrapper.assign({
73
73
  isTopLevel,
@@ -79,7 +79,7 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
79
79
  ></${BookPageWrapper}>
80
80
  `;
81
81
  }
82
- else if (isBookTreeNode(currentNode, BookEntryTypeEnum.ElementExample)) {
82
+ else if (isBookTreeNode(currentNode, BookEntryType.ElementExample)) {
83
83
  const controlsForElementExample = traverseControls(controls, currentNode.fullUrlBreadcrumbs.slice(0, -1));
84
84
  return html `
85
85
  <${BookElementExampleWrapper.assign({
@@ -91,7 +91,7 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
91
91
  ></${BookElementExampleWrapper}>
92
92
  `;
93
93
  }
94
- else if (isBookTreeNode(currentNode, BookEntryTypeEnum.Root)) {
94
+ else if (isBookTreeNode(currentNode, BookEntryType.Root)) {
95
95
  return nothing;
96
96
  }
97
97
  else {
@@ -1 +1 @@
1
- export declare const ChangeRouteEvent: import("element-vir").DefinedTypedEvent<"element-book-change-route", Partial<Required<Readonly<import("spa-router-vir").FullRoute<import("../../routing/book-routing").ValidBookPaths, undefined, undefined>>>>>;
1
+ export declare const ChangeRouteEvent: import("element-vir").DefinedTypedEvent<"element-book-change-route", Partial<Required<Readonly<import("spa-router-vir").FullRoute<import("../../routing/book-routing.js").ValidBookPaths, undefined, undefined>>>>>;
@@ -41,10 +41,11 @@ searchIn, }) {
41
41
  }
42
42
  const lowercaseSearchIn = searchIn.toLowerCase();
43
43
  const lowercaseSearchQuery = searchQuery.toLowerCase();
44
+ // eslint-disable-next-line sonarjs/no-labels
44
45
  outer: for (let i = 0, j = 0; i < searchQueryLength; i++) {
45
- const charCode = lowercaseSearchQuery.charCodeAt(i);
46
+ const charCode = lowercaseSearchQuery.codePointAt(i);
46
47
  while (j < searchInLength) {
47
- if (lowercaseSearchIn.charCodeAt(j++) === charCode) {
48
+ if (lowercaseSearchIn.codePointAt(j++) === charCode) {
48
49
  continue outer;
49
50
  }
50
51
  }
@@ -1,9 +1,16 @@
1
+ /**
2
+ * Defines a nested type.
3
+ *
4
+ * @category Internal
5
+ */
1
6
  export type NestedType<SubType> = {
2
7
  [prop: PropertyKey]: SubType | NestedType<SubType>;
3
8
  };
4
9
  /**
5
10
  * The TypeScript compiler is hard-coded to prevent recursion deeper than 50, so this helps us make
6
11
  * sure we stay below that limit.
12
+ *
13
+ * @category Internal
7
14
  */
8
15
  export type InfiniteRecursionLimiter = [
9
16
  30,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "element-book",
3
- "version": "22.2.2",
3
+ "version": "23.0.0",
4
4
  "keywords": [
5
5
  "book",
6
6
  "design system",
@@ -20,54 +20,56 @@
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "https://github.com/electrovir/element-vir"
23
+ "url": "git+https://github.com/electrovir/element-vir.git"
24
24
  },
25
25
  "license": "(MIT or CC0 1.0)",
26
26
  "author": {
27
27
  "name": "electrovir",
28
28
  "url": "https://github.com/electrovir"
29
29
  },
30
+ "type": "module",
30
31
  "main": "dist/index.js",
31
32
  "module": "dist/index.js",
32
33
  "types": "dist/index.d.ts",
33
34
  "scripts": {
34
- "build:pages": "npm run docs",
35
- "compile": "rm -rf dist && tsc -b -f --pretty",
35
+ "compile": "virmator compile",
36
36
  "docs": "virmator docs",
37
- "start": "cd ../element-book-example && npm start",
38
- "test": "virmator test-web",
39
- "test:docs": "virmator docs check",
40
- "test:types": "npm run compile",
41
- "test:watch": "web-test-runner --color --watch --config configs/web-test-runner.config.mjs"
37
+ "start": "virmator frontend",
38
+ "test": "virmator test web",
39
+ "test:coverage": "npm run test coverage",
40
+ "test:docs": "virmator docs check"
42
41
  },
43
42
  "dependencies": {
44
- "@augment-vir/browser": "^28.0.0",
45
- "@augment-vir/common": "^28.0.0",
46
- "colorjs.io": "0.5.0",
47
- "lit-css-vars": "^3.0.9",
48
- "spa-router-vir": "^4.0.3",
49
- "typed-event-target": "^3.4.0",
50
- "vira": "22.2.2"
43
+ "@augment-vir/assert": "^30.3.0",
44
+ "@augment-vir/common": "^30.3.0",
45
+ "@augment-vir/web": "^30.3.0",
46
+ "colorjs.io": "0.5.2",
47
+ "lit-css-vars": "^3.0.10",
48
+ "spa-router-vir": "^4.0.4",
49
+ "typed-event-target": "^4.0.0",
50
+ "vira": "^23.0.0"
51
51
  },
52
52
  "devDependencies": {
53
- "@augment-vir/browser-testing": "^28.0.0",
54
- "@open-wc/testing": "^4.0.0",
55
- "@types/chai": "^4.3.16",
56
- "@types/mocha": "^10.0.6",
53
+ "@augment-vir/test": "^30.3.0",
57
54
  "@web/dev-server-esbuild": "^1.0.2",
58
- "@web/test-runner": "^0.18.1",
55
+ "@web/test-runner": "^0.19.0",
59
56
  "@web/test-runner-commands": "^0.9.0",
60
57
  "@web/test-runner-playwright": "^0.11.0",
61
- "@web/test-runner-visual-regression": "^0.9.0",
62
- "element-vir": "*",
63
- "istanbul-smart-text-reporter": "^1.1.4",
64
- "markdown-code-example-inserter": "^1.0.0",
65
- "run-time-assertions": "^1.5.0",
66
- "type-fest": "^4.18.2",
67
- "typedoc": "^0.25.13",
68
- "typescript": "5.4.5"
58
+ "@web/test-runner-visual-regression": "^0.10.0",
59
+ "element-vir": "^23.0.0",
60
+ "istanbul-smart-text-reporter": "^1.1.5",
61
+ "markdown-code-example-inserter": "^3.0.0",
62
+ "type-fest": "^4.26.1",
63
+ "typedoc": "^0.26.10",
64
+ "typescript": "5.6.3"
69
65
  },
70
66
  "peerDependencies": {
71
67
  "element-vir": ">=17"
68
+ },
69
+ "engines": {
70
+ "node": ">=22"
71
+ },
72
+ "publishConfig": {
73
+ "access": "public"
72
74
  }
73
75
  }