element-book 6.0.3 → 7.0.1

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 +18 -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 -7
  104. package/dist/ui/elements/entry-display/element-book-entry-display.element.js +0 -280
  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
@@ -1,280 +0,0 @@
1
- import { wait } from '@augment-vir/common';
2
- import { VirIcon } from '@electrovir/icon-element';
3
- import { assign, css, html, listen, renderIf, repeat } from 'element-vir';
4
- import { isElementBookEntry, listBreadcrumbs, } from '../../../data/element-book-entry/element-book-entry';
5
- import { ElementBookEntryTypeEnum } from '../../../data/element-book-entry/element-book-entry-type';
6
- import { isEntryNode } from '../../../data/element-book-entry/entry-tree/entry-tree';
7
- import { ElementBookMainRoute, defaultElementBookFullRoute, extractSearchQuery, } from '../../../routing/element-book-routing';
8
- import { colorThemeCssVars } from '../../color-theme/color-theme';
9
- import { ChangeRouteEvent } from '../../events/change-route.event';
10
- import { Element24Icon } from '../../icons/element-24.icon';
11
- import { ElementBookRouteLink } from '../common/element-book-route-link.element';
12
- import { defineElementBookElement } from '../define-book-element';
13
- import { ElementBookSlotName } from '../element-book-app/element-book-app-slots';
14
- import { ElementBookBreadcrumbs } from '../element-book-breadcrumbs.element';
15
- import { ElementBookPageExamples } from './element-book-page-examples.element';
16
- export const ElementBookEntryDisplay = defineElementBookElement()({
17
- tagName: 'element-book-entry-display',
18
- styles: css `
19
- :host {
20
- display: flex;
21
- flex-direction: column;
22
- }
23
-
24
- .title-bar {
25
- position: sticky;
26
- top: 0;
27
- border-bottom: 1px solid
28
- ${colorThemeCssVars['element-book-page-foreground-faint-level-2-color'].value};
29
- padding: 4px 8px;
30
- background-color: ${colorThemeCssVars['element-book-page-background-color'].value};
31
- z-index: 9999999999;
32
- display: flex;
33
- gap: 16px;
34
- justify-content: space-between;
35
- }
36
-
37
- .all-examples-wrapper {
38
- flex-grow: 1;
39
- box-sizing: border-box;
40
- padding: 32px;
41
- display: flex;
42
- flex-direction: column;
43
- gap: 32px;
44
- }
45
-
46
- h1,
47
- h2,
48
- h3 {
49
- margin: 0;
50
- padding: 0;
51
- }
52
-
53
- h2,
54
- h3 {
55
- font-size: 1.5em;
56
- }
57
-
58
- ${ElementBookRouteLink} {
59
- display: inline-block;
60
- }
61
-
62
- .header-with-icon {
63
- display: flex;
64
- align-items: center;
65
- gap: 8px;
66
- }
67
-
68
- ${VirIcon} {
69
- color: ${colorThemeCssVars['element-book-accent-icon-color'].value};
70
- }
71
-
72
- .page-examples .title-group {
73
- align-items: flex-start;
74
- display: flex;
75
- flex-direction: column;
76
- margin-bottom: 24px;
77
- }
78
-
79
- .description {
80
- color: ${colorThemeCssVars['element-book-page-foreground-faint-level-1-color'].value};
81
- display: inline-flex;
82
- flex-direction: column;
83
- gap: 8px;
84
- }
85
-
86
- .description:hover {
87
- color: ${colorThemeCssVars['element-book-page-foreground-color'].value};
88
- }
89
-
90
- .description p {
91
- margin: 0;
92
- padding: 0;
93
- }
94
-
95
- .description p:first-child {
96
- margin-top: 8px;
97
- }
98
- `,
99
- renderCallback: ({ inputs, dispatch }) => {
100
- const nestedPages = extractNestedPages(inputs.currentNode);
101
- const currentSearch = extractSearchQuery(inputs.currentRoute.paths);
102
- const entryBreadcrumbs = listBreadcrumbs(inputs.currentNode.entry, false).reverse();
103
- const exampleTemplates = createNestedPagesTemplates({
104
- nestedPages,
105
- parentBreadcrumbs: entryBreadcrumbs,
106
- isTopLevel: true,
107
- router: inputs.router,
108
- isSearching: !!currentSearch,
109
- });
110
- return html `
111
- <div class="title-bar">
112
- ${renderIf(!!currentSearch, html `
113
- &nbsp;
114
- `, html `
115
- <${ElementBookBreadcrumbs}
116
- ${assign(ElementBookBreadcrumbs, {
117
- currentRoute: inputs.currentRoute,
118
- router: inputs.router,
119
- })}
120
- ></${ElementBookBreadcrumbs}>
121
- `)}
122
- <input
123
- placeholder="search"
124
- .value=${currentSearch}
125
- ${listen('input', async (event) => {
126
- const inputElement = event.currentTarget;
127
- if (!(inputElement instanceof HTMLInputElement)) {
128
- throw new Error('Failed to find input element for search.');
129
- }
130
- const preThrottleValue = inputElement.value;
131
- // throttle it a bit
132
- await wait(500);
133
- if (inputElement.value !== preThrottleValue) {
134
- return;
135
- }
136
- if (inputElement.value) {
137
- dispatch(new ChangeRouteEvent({
138
- paths: [
139
- ElementBookMainRoute.Search,
140
- encodeURIComponent(inputElement.value),
141
- ],
142
- }));
143
- }
144
- else {
145
- dispatch(new ChangeRouteEvent(defaultElementBookFullRoute));
146
- }
147
- })}
148
- />
149
- </div>
150
- <div class="all-examples-wrapper">${exampleTemplates}</div>
151
- <slot name=${ElementBookSlotName.Footer}></slot>
152
- `;
153
- },
154
- });
155
- function createNestedPagesTemplates({ nestedPages, parentBreadcrumbs, isTopLevel, router, isSearching, }) {
156
- if (!nestedPages.length && isSearching) {
157
- return [
158
- html `
159
- No results
160
- `,
161
- ];
162
- }
163
- return repeat(nestedPages, (page) => page.breadcrumb, (nestingNode) => {
164
- if (isEntryNode(nestingNode, ElementBookEntryTypeEnum.Page)) {
165
- const bookEntry = nestingNode.entry;
166
- if (!isElementBookEntry(bookEntry, ElementBookEntryTypeEnum.Page)) {
167
- throw new Error('nested entry should be a page');
168
- }
169
- const headerContentsTemplate = html `
170
- <${VirIcon} ${assign(VirIcon, { icon: Element24Icon })}></${VirIcon}>
171
- ${bookEntry.title}
172
- `;
173
- const titleTemplate = isTopLevel
174
- ? html `
175
- <h2 class="header-with-icon">${headerContentsTemplate}</h2>
176
- `
177
- : html `
178
- <h3 class="header-with-icon">${headerContentsTemplate}</h3>
179
- `;
180
- const linkPaths = [
181
- ElementBookMainRoute.Book,
182
- ...parentBreadcrumbs.concat(nestingNode.breadcrumb),
183
- ];
184
- return html `
185
- <div class="page-examples">
186
- <div class="title-group">
187
- <${ElementBookRouteLink}
188
- ${assign(ElementBookRouteLink, {
189
- route: {
190
- paths: linkPaths,
191
- hash: undefined,
192
- search: undefined,
193
- },
194
- router,
195
- })}
196
- >
197
- ${titleTemplate}
198
- </${ElementBookRouteLink}>
199
- ${createDescriptionTemplate(bookEntry)}
200
- </div>
201
- <${ElementBookPageExamples}
202
- ${assign(ElementBookPageExamples, {
203
- page: bookEntry,
204
- parentBreadcrumbs: parentBreadcrumbs,
205
- })}
206
- ></${ElementBookPageExamples}>
207
- </div>
208
- `;
209
- }
210
- else {
211
- const templates = Object.entries(nestingNode).map(([title, currentNested,]) => {
212
- const titleTemplate = isTopLevel
213
- ? html `
214
- <h1>${title}</h1>
215
- `
216
- : html `
217
- <h2>${title}</h2>
218
- `;
219
- const linkPaths = [
220
- ElementBookMainRoute.Book,
221
- ...parentBreadcrumbs.concat(currentNested.node.breadcrumb),
222
- ];
223
- return html `
224
- <div class="title-group">
225
- <${ElementBookRouteLink}
226
- ${assign(ElementBookRouteLink, {
227
- route: {
228
- paths: linkPaths,
229
- hash: undefined,
230
- search: undefined,
231
- },
232
- router,
233
- })}
234
- >
235
- ${titleTemplate}
236
- </${ElementBookRouteLink}>
237
- ${createDescriptionTemplate(currentNested.node.entry)}
238
- </div>
239
- ${createNestedPagesTemplates({
240
- nestedPages: currentNested.nested,
241
- /** An empty breadcrumb represents the top level node. */
242
- parentBreadcrumbs: currentNested.node.breadcrumb
243
- ? parentBreadcrumbs.concat(currentNested.node.breadcrumb)
244
- : parentBreadcrumbs,
245
- isTopLevel: false,
246
- router,
247
- isSearching,
248
- })}
249
- `;
250
- });
251
- return html `
252
- ${templates}
253
- `;
254
- }
255
- });
256
- }
257
- function createDescriptionTemplate(entry) {
258
- const paragraphs = (entry.descriptionParagraphs ?? []).map((paragraph) => {
259
- return html `
260
- <p>${paragraph}</p>
261
- `;
262
- });
263
- return html `
264
- <div class="description">${paragraphs}</div>
265
- `;
266
- }
267
- function extractNestedPages(node) {
268
- if (node.entry.entryType === ElementBookEntryTypeEnum.Page) {
269
- return [node];
270
- }
271
- const nestedPages = [
272
- {
273
- [node.entry.title]: {
274
- node: node,
275
- nested: Object.values(node.children).map(extractNestedPages).flat(),
276
- },
277
- },
278
- ];
279
- return nestedPages;
280
- }
@@ -1,4 +0,0 @@
1
- import { ElementBookPageExampleInit } from '../../../data/element-book-entry/element-book-page/element-book-page-example';
2
- export declare const ElementBookExampleControls: import("element-vir").DeclarativeElementDefinition<"element-book-example-controls", {
3
- example: ElementBookPageExampleInit<any, any, any>;
4
- }, {}, {}, `element-book-example-controls-${string}`, `element-book-example-controls-${string}`, import("lit-html").HTMLTemplateResult>;
@@ -1,26 +0,0 @@
1
- import { css, html } from 'element-vir';
2
- import { colorThemeCssVars } from '../../color-theme/color-theme';
3
- import { defineElementBookElement } from '../define-book-element';
4
- /** At least take up vertical space, if not any horizontal space. */
5
- const defaultTitle = html `
6
- &nbsp;
7
- `;
8
- export const ElementBookExampleControls = defineElementBookElement()({
9
- tagName: 'element-book-example-controls',
10
- styles: css `
11
- :host {
12
- display: flex;
13
- color: ${colorThemeCssVars['element-book-page-foreground-faint-level-1-color'].value};
14
- border-bottom: 1px solid currentColor;
15
- padding: 0 8px 4px;
16
- }
17
- `,
18
- renderCallback({ inputs }) {
19
- return html `
20
- <span>
21
- ${inputs.example.title}
22
- <span></span>
23
- </span>
24
- `;
25
- },
26
- });
@@ -1,6 +0,0 @@
1
- import { ElementBookPageExampleInit } from '../../../data/element-book-entry/element-book-page/element-book-page-example';
2
- export declare const ElementBookExampleViewer: import("element-vir").DeclarativeElementDefinition<"element-book-example-viewer", {
3
- example: ElementBookPageExampleInit<any, any, any>;
4
- breadcrumbs: ReadonlyArray<string>;
5
- currentPageControls: Record<string, any>;
6
- }, any, {}, `element-book-example-viewer-${string}`, `element-book-example-viewer-${string}`, string | import("lit-html").HTMLTemplateResult>;
@@ -1,43 +0,0 @@
1
- import { extractErrorMessage } from '@augment-vir/common';
2
- import { html, renderIf } from 'element-vir';
3
- import { unsetInternalState } from '../../../data/unset';
4
- import { defineElementBookElement } from '../define-book-element';
5
- export const ElementBookExampleViewer = defineElementBookElement()({
6
- tagName: 'element-book-example-viewer',
7
- stateInitStatic: {
8
- isUnset: unsetInternalState,
9
- },
10
- renderCallback({ state, inputs, updateState }) {
11
- if (!inputs.example.renderCallback || typeof inputs.example.renderCallback === 'string') {
12
- throw new Error(`Failed to render example '${inputs.example.title}': renderCallback is not a function`);
13
- }
14
- if (state.isUnset === unsetInternalState) {
15
- updateState({
16
- isUnset: undefined,
17
- ...inputs.example.stateInitStatic,
18
- });
19
- }
20
- try {
21
- const output = inputs.example.renderCallback({
22
- state,
23
- updateState,
24
- controls: inputs.currentPageControls,
25
- });
26
- return html `
27
- ${renderIf(!!inputs.example.styles, html `
28
- <style>
29
- ${inputs.example.styles}
30
- </style>
31
- `)}
32
- ${output}
33
- `;
34
- }
35
- catch (error) {
36
- console.error(error);
37
- return `${inputs.breadcrumbs.join(' > ')} failed: ${extractErrorMessage(error)}`;
38
- }
39
- },
40
- options: {
41
- allowPolymorphicState: true,
42
- },
43
- });
@@ -1,11 +0,0 @@
1
- import { ElementBookPage } from '../../../data/element-book-entry/element-book-page/element-book-page';
2
- import { ElementBookPageControlMap } from '../../../data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control';
3
- export declare const ElementBookPageControls: import("element-vir").DeclarativeElementDefinition<"element-book-page-controls", {
4
- config: ElementBookPage['controls'];
5
- currentValues: Record<string, ElementBookPageControlMap['initValue']>;
6
- }, {}, {
7
- controlValueChange: import("element-vir").DefinedTypedEventNameDefinition<{
8
- name: string;
9
- value: unknown;
10
- }>;
11
- }, `element-book-page-controls-${string}`, `element-book-page-controls-${string}`, import("lit-html").HTMLTemplateResult[]>;
@@ -1,65 +0,0 @@
1
- import { css, defineElementEvent, html, listen } from 'element-vir';
2
- import { ElementBookPageControlTypeEnum } from '../../../data/element-book-entry/element-book-page/element-book-page-controls/element-book-page-control-type';
3
- import { defineElementBookElement } from '../define-book-element';
4
- export const ElementBookPageControls = defineElementBookElement()({
5
- tagName: 'element-book-page-controls',
6
- events: {
7
- controlValueChange: defineElementEvent(),
8
- },
9
- styles: css `
10
- :host {
11
- display: flex;
12
- flex-wrap: wrap;
13
- gap: 16px;
14
- }
15
-
16
- .control-wrapper {
17
- display: flex;
18
- gap: 4px;
19
- flex-direction: column;
20
- }
21
-
22
- .error {
23
- font-weight: bold;
24
- color: red;
25
- }
26
- `,
27
- renderCallback({ inputs, dispatch, events }) {
28
- return Object.entries(inputs.config).map(([controlName, controlInit,]) => {
29
- const controlInputTemplate = createControlInput(inputs.currentValues[controlName], controlInit.controlType, (newValue) => {
30
- dispatch(new events.controlValueChange({
31
- name: controlName,
32
- value: newValue,
33
- }));
34
- });
35
- return html `
36
- <label class="control-wrapper">
37
- <span>${controlName}</span>
38
- ${controlInputTemplate}
39
- </label>
40
- `;
41
- });
42
- },
43
- });
44
- function createControlInput(value, controlType, valueChange) {
45
- if (controlType === ElementBookPageControlTypeEnum.Text) {
46
- return html `
47
- <input
48
- type="text"
49
- .value=${value || ''}
50
- ${listen('input', (event) => {
51
- const inputElement = event.currentTarget;
52
- if (!(inputElement instanceof HTMLInputElement)) {
53
- throw new Error("Din't get an input element from the event target.");
54
- }
55
- valueChange(inputElement.value);
56
- })}
57
- />
58
- `;
59
- }
60
- else {
61
- return html `
62
- <p class="error">${controlType} controls are not implemented yet.</p>
63
- `;
64
- }
65
- }
@@ -1,7 +0,0 @@
1
- import { ElementBookPage } from '../../../data/element-book-entry/element-book-page/element-book-page';
2
- export declare const ElementBookPageExamples: import("element-vir").DeclarativeElementDefinition<"element-book-page-examples", {
3
- page: ElementBookPage;
4
- parentBreadcrumbs: ReadonlyArray<string>;
5
- }, {
6
- unset: symbol;
7
- }, {}, `element-book-page-examples-${string}`, `element-book-page-examples-${string}`, import("lit-html").HTMLTemplateResult>;
@@ -1,102 +0,0 @@
1
- import { mapObjectValues } from '@augment-vir/common';
2
- import { assign, css, html, listen, renderIf, repeat } from 'element-vir';
3
- import { unsetInternalState } from '../../../data/unset';
4
- import { colorThemeCssVars } from '../../color-theme/color-theme';
5
- import { defineElementBookElement } from '../define-book-element';
6
- import { ElementBookExampleControls } from './element-book-example-controls.element';
7
- import { ElementBookExampleViewer } from './element-book-example-viewer.element';
8
- import { ElementBookPageControls } from './element-book-page-controls.element';
9
- export const ElementBookPageExamples = defineElementBookElement()({
10
- tagName: 'element-book-page-examples',
11
- styles: css `
12
- :host {
13
- display: flex;
14
- flex-direction: column;
15
- gap: 24px;
16
- }
17
-
18
- .examples-wrapper {
19
- display: flex;
20
- gap: 32px;
21
- flex-wrap: wrap;
22
- }
23
-
24
- .error {
25
- color: red;
26
- font-weight: bold;
27
- }
28
-
29
- .individual-example-wrapper {
30
- display: flex;
31
- flex-direction: column;
32
- gap: 24px;
33
- max-width: 100%;
34
- }
35
-
36
- .individual-example-wrapper:hover ${ElementBookExampleControls} {
37
- color: ${colorThemeCssVars['element-book-accent-icon-color'].value};
38
- }
39
- `,
40
- stateInitStatic: {
41
- unset: unsetInternalState,
42
- },
43
- renderCallback({ inputs, state, updateState }) {
44
- if (state.unset === unsetInternalState) {
45
- const newState = mapObjectValues(inputs.page.controls, (key, value) => {
46
- return value.initValue;
47
- });
48
- updateState({
49
- unset: undefined,
50
- ...newState,
51
- });
52
- }
53
- const examples = inputs.page.examples;
54
- /**
55
- * Use the repeat directive here, instead of just a map, so that lit doesn't accidentally
56
- * keep state cached between element book pages.
57
- */
58
- const examplesTemplate = repeat(Object.values(examples), (example) => inputs.parentBreadcrumbs
59
- .concat(example instanceof Error ? example.message : example.title)
60
- .join('>'), (example) => {
61
- if (example instanceof Error) {
62
- return html `
63
- <p class="error">${example.message}</p>
64
- `;
65
- }
66
- const exampleBreadcrumbs = inputs.parentBreadcrumbs.concat(example.title);
67
- return html `
68
- <div class="individual-example-wrapper">
69
- <${ElementBookExampleControls}
70
- ${assign(ElementBookExampleControls, {
71
- example,
72
- })}
73
- ></${ElementBookExampleControls}>
74
- <${ElementBookExampleViewer}
75
- ${assign(ElementBookExampleViewer, {
76
- example,
77
- breadcrumbs: exampleBreadcrumbs,
78
- currentPageControls: state,
79
- })}
80
- ></${ElementBookExampleViewer}>
81
- </div>
82
- `;
83
- });
84
- return html `
85
- ${renderIf(!!Object.keys(inputs.page.controls).length, html `
86
- <${ElementBookPageControls}
87
- ${assign(ElementBookPageControls, {
88
- config: inputs.page.controls,
89
- currentValues: state,
90
- })}
91
- ${listen(ElementBookPageControls.events.controlValueChange, (event) => {
92
- updateState({ [event.detail.name]: event.detail.value });
93
- })}
94
- ></${ElementBookPageControls}>
95
- `)}
96
- <section class="examples-wrapper">${examplesTemplate}</section>
97
- `;
98
- },
99
- options: {
100
- allowPolymorphicState: true,
101
- },
102
- });
@@ -1 +0,0 @@
1
- export declare const Element16Icon: import("@electrovir/icon-element").IconSvg;
@@ -1,18 +0,0 @@
1
- import { defineIconSvg } from '@electrovir/icon-element';
2
- import { html } from 'element-vir';
3
- export const Element16Icon = defineIconSvg({
4
- name: 'Element16Icon',
5
- svgTemplate: html `
6
- <svg
7
- xmlns="http://www.w3.org/2000/svg"
8
- xml:space="preserve"
9
- fill="none"
10
- width="16"
11
- height="16"
12
- viewBox="0 0 16 16"
13
- stroke-width="1px"
14
- >
15
- <path d="M4 5 1 8l3 3m8-6 3 3-3 3m-5 0 2-6" />
16
- </svg>
17
- `,
18
- });
@@ -1 +0,0 @@
1
- export declare const Element24Icon: import("@electrovir/icon-element").IconSvg;
@@ -1,18 +0,0 @@
1
- import { defineIconSvg } from '@electrovir/icon-element';
2
- import { html } from 'element-vir';
3
- export const Element24Icon = defineIconSvg({
4
- name: 'Element24Icon',
5
- svgTemplate: html `
6
- <svg
7
- xmlns="http://www.w3.org/2000/svg"
8
- xml:space="preserve"
9
- viewBox="0 0 24 24"
10
- fill="none"
11
- width="24"
12
- height="24"
13
- stroke-width="1px"
14
- >
15
- <path d="m7 7-5 5 5 5M17 7l5 5-5 5m-6 0 2-10" />
16
- </svg>
17
- `,
18
- });
@@ -1,3 +0,0 @@
1
- export type NestedType<SubType> = {
2
- [prop: PropertyKey]: SubType | NestedType<SubType>;
3
- };