element-book 26.14.1 → 26.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/elements/book-nav/book-nav.element.d.ts +0 -1
- package/dist/ui/elements/book-nav/book-nav.element.js +0 -12
- package/dist/ui/elements/element-book-app/element-book-app.element.js +20 -33
- package/dist/ui/elements/element-book-app/element-book-config.d.ts +1 -0
- package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.d.ts +1 -0
- package/dist/ui/elements/entry-display/book-page/book-page-wrapper.element.js +15 -10
- package/dist/ui/elements/entry-display/element-example/{book-element-example-controls.element.d.ts → book-element-example-title.element.d.ts} +3 -2
- package/dist/ui/elements/entry-display/element-example/{book-element-example-controls.element.js → book-element-example-title.element.js} +5 -2
- package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.d.ts +1 -0
- package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.js +8 -5
- package/dist/ui/elements/entry-display/entry-display/book-entry-display.element.d.ts +1 -0
- package/dist/ui/elements/entry-display/entry-display/book-entry-display.element.js +2 -0
- package/dist/ui/elements/entry-display/entry-display/create-node-templates.d.ts +2 -1
- package/dist/ui/elements/entry-display/entry-display/create-node-templates.js +3 -1
- package/package.json +11 -11
|
@@ -5,4 +5,3 @@ export declare const BookNav: import("element-vir").DeclarativeElementDefinition
|
|
|
5
5
|
selectedPath: ReadonlyArray<string> | undefined;
|
|
6
6
|
router: BookRouter | undefined;
|
|
7
7
|
}, {}, {}, "book-nav-", "book-nav-internal-indent", readonly [], readonly []>;
|
|
8
|
-
export declare function scrollSelectedNavElementIntoView(bookNavInstance: typeof BookNav.InstanceType): Promise<void>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { check } from '@augment-vir/assert';
|
|
2
|
-
import { checkIfEntirelyInScrollView, waitForAnimationFrame } from '@augment-vir/web';
|
|
3
2
|
import { classMap, css, html, renderIf } from 'element-vir';
|
|
4
3
|
import { Element16Icon, ViraIcon } from 'vira';
|
|
5
4
|
import { BookEntryType } from '../../../data/book-entry/book-entry-type.js';
|
|
@@ -119,14 +118,3 @@ export const BookNav = defineBookElement()({
|
|
|
119
118
|
`;
|
|
120
119
|
},
|
|
121
120
|
});
|
|
122
|
-
export async function scrollSelectedNavElementIntoView(bookNavInstance) {
|
|
123
|
-
await waitForAnimationFrame(2);
|
|
124
|
-
const selected = bookNavInstance.shadowRoot.querySelector('.selected');
|
|
125
|
-
if (!selected) {
|
|
126
|
-
throw new Error('Failed to find selected nav tree element.');
|
|
127
|
-
}
|
|
128
|
-
if (await checkIfEntirelyInScrollView(selected)) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
selected.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
132
|
-
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { check } from '@augment-vir/assert';
|
|
2
2
|
import { extractErrorMessage, makeWritable } from '@augment-vir/common';
|
|
3
3
|
import { waitForAnimationFrame } from '@augment-vir/web';
|
|
4
|
-
import { css, defineElement, defineElementEvent, html, listen } from 'element-vir';
|
|
4
|
+
import { css, defineElement, defineElementEvent, html, listen, nothing } from 'element-vir';
|
|
5
5
|
import { createNewControls, updateTreeControls, } from '../../../data/book-entry/book-page/controls-wrapper.js';
|
|
6
6
|
import { createBookTreeFromEntries } from '../../../data/book-tree/book-tree.js';
|
|
7
7
|
import { searchFlattenedNodes } from '../../../data/book-tree/search-nodes.js';
|
|
@@ -10,7 +10,7 @@ import { defaultBookFullRoute, extractSearchQuery, } from '../../../routing/book
|
|
|
10
10
|
import { colorThemeCssVars, setThemeCssVars, } from '../../color-theme/color-theme.js';
|
|
11
11
|
import { createTheme } from '../../color-theme/create-color-theme.js';
|
|
12
12
|
import { ChangeRouteEvent } from '../../events/change-route.event.js';
|
|
13
|
-
import { BookNav
|
|
13
|
+
import { BookNav } from '../book-nav/book-nav.element.js';
|
|
14
14
|
import { BookError } from '../common/book-error.element.js';
|
|
15
15
|
import { BookPageControls } from '../entry-display/book-page/book-page-controls.element.js';
|
|
16
16
|
import { BookEntryDisplay } from '../entry-display/entry-display/book-entry-display.element.js';
|
|
@@ -76,11 +76,6 @@ export const ElementBookApp = defineElement()({
|
|
|
76
76
|
max-width: min(400px, 40%);
|
|
77
77
|
}
|
|
78
78
|
`,
|
|
79
|
-
init({ host, state }) {
|
|
80
|
-
setTimeout(async () => {
|
|
81
|
-
await scrollNav(host, extractSearchQuery(state.currentRoute.paths), state.currentRoute);
|
|
82
|
-
}, 500);
|
|
83
|
-
},
|
|
84
79
|
cleanup({ state, updateState }) {
|
|
85
80
|
if (state.router) {
|
|
86
81
|
state.router.destroy();
|
|
@@ -211,7 +206,7 @@ export const ElementBookApp = defineElement()({
|
|
|
211
206
|
return html `
|
|
212
207
|
<div
|
|
213
208
|
class="root"
|
|
214
|
-
${listen(ChangeRouteEvent,
|
|
209
|
+
${listen(ChangeRouteEvent, (event) => {
|
|
215
210
|
const newRoute = event.detail;
|
|
216
211
|
if (!areRoutesNew(newRoute)) {
|
|
217
212
|
return;
|
|
@@ -222,7 +217,6 @@ export const ElementBookApp = defineElement()({
|
|
|
222
217
|
if (!(navElement instanceof BookNav)) {
|
|
223
218
|
throw new TypeError(`Failed to find child '${BookNav.tagName}'`);
|
|
224
219
|
}
|
|
225
|
-
await scrollNav(host, searchQuery, state.currentRoute);
|
|
226
220
|
})}
|
|
227
221
|
${listen(BookPageControls.events.controlValueChange, (event) => {
|
|
228
222
|
if (!state.treeBasedControls) {
|
|
@@ -237,17 +231,24 @@ export const ElementBookApp = defineElement()({
|
|
|
237
231
|
});
|
|
238
232
|
})}
|
|
239
233
|
>
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
234
|
+
${inputs.blockNavigation
|
|
235
|
+
? nothing
|
|
236
|
+
: html `
|
|
237
|
+
<${BookNav.assign({
|
|
238
|
+
flattenedNodes: originalTree.flattenedNodes,
|
|
239
|
+
router: state.router,
|
|
240
|
+
selectedPath: searchQuery
|
|
241
|
+
? undefined
|
|
242
|
+
: state.currentRoute.paths.slice(1),
|
|
243
|
+
})}>
|
|
244
|
+
<slot
|
|
245
|
+
name=${ElementBookSlotName.NavHeader}
|
|
246
|
+
slot=${ElementBookSlotName.NavHeader}
|
|
247
|
+
></slot>
|
|
248
|
+
</${BookNav}>
|
|
249
|
+
`}
|
|
250
250
|
<${BookEntryDisplay.assign({
|
|
251
|
+
blockNavigation: !!inputs.blockNavigation,
|
|
251
252
|
controls: currentControls,
|
|
252
253
|
currentNodes,
|
|
253
254
|
currentRoute: state.currentRoute,
|
|
@@ -285,17 +286,3 @@ export const ElementBookApp = defineElement()({
|
|
|
285
286
|
}
|
|
286
287
|
},
|
|
287
288
|
});
|
|
288
|
-
async function scrollNav(host, searchQuery, currentRoutes) {
|
|
289
|
-
/** If there is a search query, then there will be no selected nav to scroll to. */
|
|
290
|
-
if (searchQuery) {
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
if (currentRoutes.paths.length <= 1) {
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
const navElement = host.shadowRoot.querySelector(BookNav.tagName);
|
|
297
|
-
if (!(navElement instanceof BookNav)) {
|
|
298
|
-
throw new TypeError(`Failed to find child '${BookNav.tagName}'`);
|
|
299
|
-
}
|
|
300
|
-
await scrollSelectedNavElementIntoView(navElement);
|
|
301
|
-
}
|
|
@@ -23,6 +23,7 @@ export type OptionalConfig = {
|
|
|
23
23
|
_debug: boolean;
|
|
24
24
|
globalValues: GlobalValues;
|
|
25
25
|
preventWindowTitleChange: boolean;
|
|
26
|
+
blockNavigation: boolean;
|
|
26
27
|
} & RequireExactlyOne<Readonly<{
|
|
27
28
|
/**
|
|
28
29
|
* Set this internal router config if element-book is intended to be the current website's
|
|
@@ -3,6 +3,7 @@ import { type ControlsWrapper } from '../../../../data/book-entry/book-page/cont
|
|
|
3
3
|
import { type BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
|
|
4
4
|
import { type BookRouter } from '../../../../routing/book-router.js';
|
|
5
5
|
export declare const BookPageWrapper: import("element-vir").DeclarativeElementDefinition<"book-page-wrapper", {
|
|
6
|
+
blockNavigation: boolean;
|
|
6
7
|
isTopLevel: boolean;
|
|
7
8
|
pageNode: BookTreeNode<BookEntryType.Page>;
|
|
8
9
|
router: BookRouter | undefined;
|
|
@@ -52,19 +52,24 @@ export const BookPageWrapper = defineBookElement()({
|
|
|
52
52
|
if (error) {
|
|
53
53
|
console.error(error);
|
|
54
54
|
}
|
|
55
|
+
const headerTemplate = inputs.blockNavigation
|
|
56
|
+
? titleTemplate
|
|
57
|
+
: html `
|
|
58
|
+
<${BookRouteLink.assign({
|
|
59
|
+
route: {
|
|
60
|
+
paths: linkPaths,
|
|
61
|
+
hash: undefined,
|
|
62
|
+
search: undefined,
|
|
63
|
+
},
|
|
64
|
+
router: inputs.router,
|
|
65
|
+
})}>
|
|
66
|
+
${titleTemplate}
|
|
67
|
+
</${BookRouteLink}>
|
|
68
|
+
`;
|
|
55
69
|
return html `
|
|
56
70
|
<div class="page-header block-entry">
|
|
57
71
|
<div class="title-group">
|
|
58
|
-
|
|
59
|
-
route: {
|
|
60
|
-
paths: linkPaths,
|
|
61
|
-
hash: undefined,
|
|
62
|
-
search: undefined,
|
|
63
|
-
},
|
|
64
|
-
router: inputs.router,
|
|
65
|
-
})}>
|
|
66
|
-
${titleTemplate}
|
|
67
|
-
</${BookRouteLink}>
|
|
72
|
+
${headerTemplate}
|
|
68
73
|
${error
|
|
69
74
|
? html `
|
|
70
75
|
<${BookError.assign({ message: error.message })}></${BookError}>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
|
|
2
2
|
import { type BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
|
|
3
3
|
import { type BookRouter } from '../../../../routing/book-router.js';
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const BookElementExampleTitle: import("element-vir").DeclarativeElementDefinition<"book-element-example-title", {
|
|
5
|
+
blockNavigation: boolean;
|
|
5
6
|
elementExampleNode: BookTreeNode<BookEntryType.ElementExample>;
|
|
6
7
|
router: BookRouter | undefined;
|
|
7
|
-
}, {}, {}, "book-element-example-
|
|
8
|
+
}, {}, {}, "book-element-example-title-", "book-element-example-title-", readonly [], readonly []>;
|
|
@@ -3,8 +3,8 @@ import { BookMainRoute } from '../../../../routing/book-routing.js';
|
|
|
3
3
|
import { colorThemeCssVars } from '../../../color-theme/color-theme.js';
|
|
4
4
|
import { BookRouteLink } from '../../common/book-route-link.element.js';
|
|
5
5
|
import { defineBookElement } from '../../define-book-element.js';
|
|
6
|
-
export const
|
|
7
|
-
tagName: 'book-element-example-
|
|
6
|
+
export const BookElementExampleTitle = defineBookElement()({
|
|
7
|
+
tagName: 'book-element-example-title',
|
|
8
8
|
styles: css `
|
|
9
9
|
:host {
|
|
10
10
|
display: flex;
|
|
@@ -14,6 +14,9 @@ export const BookElementExampleControls = defineBookElement()({
|
|
|
14
14
|
}
|
|
15
15
|
`,
|
|
16
16
|
render({ inputs }) {
|
|
17
|
+
if (inputs.blockNavigation) {
|
|
18
|
+
return inputs.elementExampleNode.entry.title;
|
|
19
|
+
}
|
|
17
20
|
const linkPaths = [
|
|
18
21
|
BookMainRoute.Book,
|
|
19
22
|
...inputs.elementExampleNode.fullUrlBreadcrumbs,
|
package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { type BookPageControlsValues } from '../../../../data/book-entry/book-pa
|
|
|
3
3
|
import { type BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
|
|
4
4
|
import { type BookRouter } from '../../../../routing/book-router.js';
|
|
5
5
|
export declare const BookElementExampleWrapper: import("element-vir").DeclarativeElementDefinition<"book-element-example-wrapper", {
|
|
6
|
+
blockNavigation: boolean;
|
|
6
7
|
elementExampleNode: BookTreeNode<BookEntryType.ElementExample>;
|
|
7
8
|
currentPageControls: BookPageControlsValues;
|
|
8
9
|
router: BookRouter | undefined;
|
package/dist/ui/elements/entry-display/element-example/book-element-example-wrapper.element.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { omitObjectKeys } from '@augment-vir/common';
|
|
2
1
|
import { css, html } from 'element-vir';
|
|
3
2
|
import { colorThemeCssVars } from '../../../color-theme/color-theme.js';
|
|
4
3
|
import { defineBookElement } from '../../define-book-element.js';
|
|
5
|
-
import {
|
|
4
|
+
import { BookElementExampleTitle } from './book-element-example-title.element.js';
|
|
6
5
|
import { BookElementExampleViewer } from './book-element-example-viewer.element.js';
|
|
7
6
|
export const BookElementExampleWrapper = defineBookElement()({
|
|
8
7
|
tagName: 'book-element-example-wrapper',
|
|
@@ -31,18 +30,22 @@ export const BookElementExampleWrapper = defineBookElement()({
|
|
|
31
30
|
align-items: flex-start;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
${
|
|
33
|
+
${BookElementExampleTitle} {
|
|
35
34
|
color: ${colorThemeCssVars['element-book-page-foreground-faint-level-1-color'].value};
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
:host(:hover) ${
|
|
37
|
+
:host(:hover) ${BookElementExampleTitle} {
|
|
39
38
|
color: ${colorThemeCssVars['element-book-accent-icon-color'].value};
|
|
40
39
|
}
|
|
41
40
|
`,
|
|
42
41
|
render({ inputs }) {
|
|
43
42
|
return html `
|
|
44
43
|
<div class="individual-example-wrapper">
|
|
45
|
-
<${
|
|
44
|
+
<${BookElementExampleTitle.assign({
|
|
45
|
+
blockNavigation: inputs.blockNavigation,
|
|
46
|
+
elementExampleNode: inputs.elementExampleNode,
|
|
47
|
+
router: inputs.router,
|
|
48
|
+
})}></${BookElementExampleTitle}>
|
|
46
49
|
<${BookElementExampleViewer.assign(inputs)}></${BookElementExampleViewer}>
|
|
47
50
|
</div>
|
|
48
51
|
`;
|
|
@@ -4,6 +4,7 @@ import { type BookTreeNode } from '../../../../data/book-tree/book-tree-node.js'
|
|
|
4
4
|
import { type BookRouter } from '../../../../routing/book-router.js';
|
|
5
5
|
import { type BookFullRoute } from '../../../../routing/book-routing.js';
|
|
6
6
|
export declare const BookEntryDisplay: import("element-vir").DeclarativeElementDefinition<"book-entry-display", {
|
|
7
|
+
blockNavigation: boolean;
|
|
7
8
|
controls: ControlsWrapper;
|
|
8
9
|
currentNodes: ReadonlyArray<BookTreeNode>;
|
|
9
10
|
currentRoute: Readonly<BookFullRoute>;
|
|
@@ -33,6 +33,7 @@ export const BookEntryDisplay = defineBookElement()({
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
.inline-entry {
|
|
36
|
+
display: inline-block;
|
|
36
37
|
margin: 8px;
|
|
37
38
|
|
|
38
39
|
&.block-entry {
|
|
@@ -78,6 +79,7 @@ export const BookEntryDisplay = defineBookElement()({
|
|
|
78
79
|
render: ({ inputs, dispatch, events, state, updateState }) => {
|
|
79
80
|
const currentSearch = extractSearchQuery(inputs.currentRoute.paths);
|
|
80
81
|
const entryTemplates = createNodeTemplates({
|
|
82
|
+
blockNavigation: inputs.blockNavigation,
|
|
81
83
|
currentNodes: inputs.currentNodes,
|
|
82
84
|
isTopLevel: true,
|
|
83
85
|
router: inputs.router,
|
|
@@ -3,7 +3,8 @@ import { BookEntryType } from '../../../../data/book-entry/book-entry-type.js';
|
|
|
3
3
|
import { type ControlsWrapper } from '../../../../data/book-entry/book-page/controls-wrapper.js';
|
|
4
4
|
import { type BookTreeNode } from '../../../../data/book-tree/book-tree-node.js';
|
|
5
5
|
import { type BookRouter } from '../../../../routing/book-router.js';
|
|
6
|
-
export declare function createNodeTemplates({ currentNodes, isTopLevel, router, isSearching, controls, originalTree, }: {
|
|
6
|
+
export declare function createNodeTemplates({ blockNavigation, currentNodes, isTopLevel, router, isSearching, controls, originalTree, }: {
|
|
7
|
+
blockNavigation: boolean;
|
|
7
8
|
currentNodes: ReadonlyArray<BookTreeNode>;
|
|
8
9
|
isTopLevel: boolean;
|
|
9
10
|
router: BookRouter | undefined;
|
|
@@ -45,7 +45,7 @@ function getFlattenedControlsFromHiddenParents(currentNodes, currentControls, cu
|
|
|
45
45
|
};
|
|
46
46
|
}, { config: {}, current: {}, breadcrumbs: {} });
|
|
47
47
|
}
|
|
48
|
-
export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearching, controls, originalTree, }) {
|
|
48
|
+
export function createNodeTemplates({ blockNavigation, currentNodes, isTopLevel, router, isSearching, controls, originalTree, }) {
|
|
49
49
|
if (!currentNodes.length && isSearching) {
|
|
50
50
|
return [
|
|
51
51
|
html `
|
|
@@ -71,6 +71,7 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
|
|
|
71
71
|
if (isBookTreeNode(currentNode, BookEntryType.Page)) {
|
|
72
72
|
return html `
|
|
73
73
|
<${BookPageWrapper.assign({
|
|
74
|
+
blockNavigation,
|
|
74
75
|
isTopLevel,
|
|
75
76
|
pageNode: currentNode,
|
|
76
77
|
controls,
|
|
@@ -84,6 +85,7 @@ export function createNodeTemplates({ currentNodes, isTopLevel, router, isSearch
|
|
|
84
85
|
const controlsForElementExample = traverseControls(controls, currentNode.fullUrlBreadcrumbs.slice(0, -1));
|
|
85
86
|
const content = html `
|
|
86
87
|
<${BookElementExampleWrapper.assign({
|
|
88
|
+
blockNavigation,
|
|
87
89
|
elementExampleNode: currentNode,
|
|
88
90
|
currentPageControls: controlsForElementExample,
|
|
89
91
|
router,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "element-book",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.15.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"book",
|
|
6
6
|
"design system",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"storybook",
|
|
15
15
|
"system"
|
|
16
16
|
],
|
|
17
|
-
"homepage": "https://electrovir.github.io/element-book
|
|
17
|
+
"homepage": "https://electrovir.github.io/element-book",
|
|
18
18
|
"bugs": {
|
|
19
19
|
"url": "https://github.com/electrovir/element-book/issues"
|
|
20
20
|
},
|
|
@@ -41,29 +41,29 @@
|
|
|
41
41
|
"test:docs": "virmator docs check"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@augment-vir/assert": "^31.
|
|
45
|
-
"@augment-vir/common": "^31.
|
|
46
|
-
"@augment-vir/web": "^31.
|
|
47
|
-
"colorjs.io": "0.
|
|
44
|
+
"@augment-vir/assert": "^31.58.0",
|
|
45
|
+
"@augment-vir/common": "^31.58.0",
|
|
46
|
+
"@augment-vir/web": "^31.58.0",
|
|
47
|
+
"colorjs.io": "^0.6.0",
|
|
48
48
|
"date-vir": "^8.1.0",
|
|
49
49
|
"lit-css-vars": "^3.0.11",
|
|
50
50
|
"spa-router-vir": "^6.4.1",
|
|
51
51
|
"typed-event-target": "^4.1.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@augment-vir/test": "^31.
|
|
54
|
+
"@augment-vir/test": "^31.58.0",
|
|
55
55
|
"@web/dev-server-esbuild": "^1.0.4",
|
|
56
56
|
"@web/test-runner": "^0.20.2",
|
|
57
57
|
"@web/test-runner-commands": "^0.9.0",
|
|
58
58
|
"@web/test-runner-playwright": "^0.11.1",
|
|
59
59
|
"@web/test-runner-visual-regression": "^0.10.0",
|
|
60
|
-
"element-vir": "^26.14.
|
|
60
|
+
"element-vir": "^26.14.1",
|
|
61
61
|
"istanbul-smart-text-reporter": "^1.1.5",
|
|
62
62
|
"markdown-code-example-inserter": "^3.0.3",
|
|
63
|
-
"type-fest": "^5.
|
|
64
|
-
"typedoc": "^0.28.
|
|
63
|
+
"type-fest": "^5.4.1",
|
|
64
|
+
"typedoc": "^0.28.16",
|
|
65
65
|
"typescript": "5.9.3",
|
|
66
|
-
"vira": "^28.
|
|
66
|
+
"vira": "^28.19.5"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"element-vir": ">=17",
|