@unhead/vue 0.6.5 → 0.6.6
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/chunks/index.cjs +3 -2
- package/dist/chunks/index.mjs +3 -2
- package/dist/index.cjs +35 -18
- package/dist/index.d.ts +11 -2
- package/dist/index.mjs +34 -19
- package/package.json +3 -3
package/dist/chunks/index.cjs
CHANGED
|
@@ -61,7 +61,8 @@ async function renderDOMHead(head, options = {}) {
|
|
|
61
61
|
const tagRenderId = tag._d || tag._p;
|
|
62
62
|
const markSideEffect = (key, fn) => {
|
|
63
63
|
key = `${tagRenderId}:${key}`;
|
|
64
|
-
entry
|
|
64
|
+
if (entry)
|
|
65
|
+
entry._sde[key] = fn;
|
|
65
66
|
delete staleSideEffects[key];
|
|
66
67
|
};
|
|
67
68
|
const setAttrs = ($el, sideEffects = true) => {
|
|
@@ -140,7 +141,7 @@ async function renderDOMHead(head, options = {}) {
|
|
|
140
141
|
return $newEl;
|
|
141
142
|
};
|
|
142
143
|
for (const tag of await head.resolveTags()) {
|
|
143
|
-
const entry = head.headEntries().find((e) => e._i ===
|
|
144
|
+
const entry = head.headEntries().find((e) => e._i === tag._e);
|
|
144
145
|
const renderCtx = { $el: null, shouldRender: true, tag, entry, queuedSideEffects: staleSideEffects };
|
|
145
146
|
await head.hooks.callHook("dom:beforeRenderTag", renderCtx);
|
|
146
147
|
if (!renderCtx.shouldRender)
|
package/dist/chunks/index.mjs
CHANGED
|
@@ -59,7 +59,8 @@ async function renderDOMHead(head, options = {}) {
|
|
|
59
59
|
const tagRenderId = tag._d || tag._p;
|
|
60
60
|
const markSideEffect = (key, fn) => {
|
|
61
61
|
key = `${tagRenderId}:${key}`;
|
|
62
|
-
entry
|
|
62
|
+
if (entry)
|
|
63
|
+
entry._sde[key] = fn;
|
|
63
64
|
delete staleSideEffects[key];
|
|
64
65
|
};
|
|
65
66
|
const setAttrs = ($el, sideEffects = true) => {
|
|
@@ -138,7 +139,7 @@ async function renderDOMHead(head, options = {}) {
|
|
|
138
139
|
return $newEl;
|
|
139
140
|
};
|
|
140
141
|
for (const tag of await head.resolveTags()) {
|
|
141
|
-
const entry = head.headEntries().find((e) => e._i ===
|
|
142
|
+
const entry = head.headEntries().find((e) => e._i === tag._e);
|
|
142
143
|
const renderCtx = { $el: null, shouldRender: true, tag, entry, queuedSideEffects: staleSideEffects };
|
|
143
144
|
await head.hooks.callHook("dom:beforeRenderTag", renderCtx);
|
|
144
145
|
if (!renderCtx.shouldRender)
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const vue = require('vue');
|
|
4
3
|
const hookable = require('hookable');
|
|
4
|
+
const vue = require('vue');
|
|
5
5
|
|
|
6
6
|
const ValidHeadTags = [
|
|
7
7
|
"title",
|
|
@@ -351,10 +351,12 @@ const EventHandlersPlugin = () => {
|
|
|
351
351
|
const handler = value;
|
|
352
352
|
$el.setAttribute(eventDedupeKey, "");
|
|
353
353
|
$eventListenerTarget.addEventListener(eventName, handler);
|
|
354
|
-
ctx.entry
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
354
|
+
if (ctx.entry) {
|
|
355
|
+
ctx.entry._sde[sdeKey] = () => {
|
|
356
|
+
$eventListenerTarget.removeEventListener(eventName, handler);
|
|
357
|
+
$el.removeAttribute(eventDedupeKey);
|
|
358
|
+
};
|
|
359
|
+
}
|
|
358
360
|
});
|
|
359
361
|
if (ctx.tag._delayedSrc) {
|
|
360
362
|
$el.setAttribute("src", ctx.tag._delayedSrc);
|
|
@@ -398,7 +400,26 @@ function normaliseEntryTags(e) {
|
|
|
398
400
|
});
|
|
399
401
|
}
|
|
400
402
|
|
|
403
|
+
const CorePlugins = () => [
|
|
404
|
+
DedupesTagsPlugin(),
|
|
405
|
+
SortTagsPlugin(),
|
|
406
|
+
TitleTemplatePlugin(),
|
|
407
|
+
ProvideTagHashPlugin(),
|
|
408
|
+
EventHandlersPlugin(),
|
|
409
|
+
DeprecatedTagAttrPlugin()
|
|
410
|
+
];
|
|
411
|
+
const DOMPlugins = (options = {}) => [
|
|
412
|
+
PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })
|
|
413
|
+
];
|
|
401
414
|
function createHead$1(options = {}) {
|
|
415
|
+
const head = createHeadCore({
|
|
416
|
+
...options,
|
|
417
|
+
plugins: [...DOMPlugins(options), ...options?.plugins || []]
|
|
418
|
+
});
|
|
419
|
+
setActiveHead(head);
|
|
420
|
+
return head;
|
|
421
|
+
}
|
|
422
|
+
function createHeadCore(options = {}) {
|
|
402
423
|
let entries = [];
|
|
403
424
|
let _sde = {};
|
|
404
425
|
let _eid = 0;
|
|
@@ -406,13 +427,7 @@ function createHead$1(options = {}) {
|
|
|
406
427
|
if (options?.hooks)
|
|
407
428
|
hooks.addHooks(options.hooks);
|
|
408
429
|
options.plugins = [
|
|
409
|
-
|
|
410
|
-
DedupesTagsPlugin(),
|
|
411
|
-
SortTagsPlugin(),
|
|
412
|
-
TitleTemplatePlugin(),
|
|
413
|
-
EventHandlersPlugin(),
|
|
414
|
-
ProvideTagHashPlugin(),
|
|
415
|
-
PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn }),
|
|
430
|
+
...CorePlugins(),
|
|
416
431
|
...options?.plugins || []
|
|
417
432
|
];
|
|
418
433
|
options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));
|
|
@@ -482,7 +497,6 @@ function createHead$1(options = {}) {
|
|
|
482
497
|
}
|
|
483
498
|
};
|
|
484
499
|
head.hooks.callHook("init", head);
|
|
485
|
-
setActiveHead(head);
|
|
486
500
|
return head;
|
|
487
501
|
}
|
|
488
502
|
|
|
@@ -495,6 +509,7 @@ const composableNames = [
|
|
|
495
509
|
"useTagBase",
|
|
496
510
|
"useTagMeta",
|
|
497
511
|
"useTagMetaFlat",
|
|
512
|
+
"useSeoMeta",
|
|
498
513
|
"useTagLink",
|
|
499
514
|
"useTagScript",
|
|
500
515
|
"useTagStyle",
|
|
@@ -554,14 +569,13 @@ function injectHead() {
|
|
|
554
569
|
return vue.getCurrentInstance() && vue.inject(headSymbol) || getActiveHead();
|
|
555
570
|
}
|
|
556
571
|
function createHead(options = {}) {
|
|
557
|
-
const plugins = [
|
|
558
|
-
VueReactiveUseHeadPlugin(),
|
|
559
|
-
...options?.plugins || []
|
|
560
|
-
];
|
|
561
572
|
const head = createHead$1({
|
|
562
573
|
...options,
|
|
563
574
|
domDelayFn: (fn) => setTimeout(() => vue.nextTick(() => fn()), 10),
|
|
564
|
-
plugins
|
|
575
|
+
plugins: [
|
|
576
|
+
VueReactiveUseHeadPlugin(),
|
|
577
|
+
...options?.plugins || []
|
|
578
|
+
]
|
|
565
579
|
});
|
|
566
580
|
const vuePlugin = {
|
|
567
581
|
install(app) {
|
|
@@ -819,6 +833,7 @@ const useTagMetaFlat = (meta) => {
|
|
|
819
833
|
});
|
|
820
834
|
return useHead({ meta: input });
|
|
821
835
|
};
|
|
836
|
+
const useSeoMeta = useTagMetaFlat;
|
|
822
837
|
const useTagLink = (link) => useHead({ link: asArray(link) });
|
|
823
838
|
const useTagScript = (script) => useHead({ script: asArray(script) });
|
|
824
839
|
const useTagStyle = (style) => useHead({ style: asArray(style) });
|
|
@@ -842,6 +857,7 @@ exports.VueHeadMixin = VueHeadMixin;
|
|
|
842
857
|
exports.VueReactiveUseHeadPlugin = VueReactiveUseHeadPlugin;
|
|
843
858
|
exports.asArray = asArray;
|
|
844
859
|
exports.createHead = createHead;
|
|
860
|
+
exports.createHeadCore = createHeadCore;
|
|
845
861
|
exports.headSymbol = headSymbol;
|
|
846
862
|
exports.injectHead = injectHead;
|
|
847
863
|
exports.resolveUnrefHeadInput = resolveUnrefHeadInput;
|
|
@@ -849,6 +865,7 @@ exports.unheadVueComposablesImports = unheadVueComposablesImports;
|
|
|
849
865
|
exports.useBodyAttrs = useBodyAttrs;
|
|
850
866
|
exports.useHead = useHead;
|
|
851
867
|
exports.useHtmlAttrs = useHtmlAttrs;
|
|
868
|
+
exports.useSeoMeta = useSeoMeta;
|
|
852
869
|
exports.useServerBodyAttrs = useServerBodyAttrs;
|
|
853
870
|
exports.useServerHead = useServerHead;
|
|
854
871
|
exports.useServerHtmlAttrs = useServerHtmlAttrs;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import * as _unhead_schema from '@unhead/schema';
|
|
2
|
-
import { Title as Title$1, TitleTemplate as TitleTemplate$1, EntryAugmentation, Base as Base$1, Link as Link$1, Meta as Meta$1, Style as Style$1, Script as Script$1, Noscript as Noscript$1, DataKeys, SchemaAugmentations, DefinedValueOrEmptyObject, MergeHead, BaseHtmlAttr, MaybeArray, BaseBodyAttr,
|
|
2
|
+
import { Head, CreateHeadOptions, Unhead, Title as Title$1, TitleTemplate as TitleTemplate$1, EntryAugmentation, Base as Base$1, Link as Link$1, Meta as Meta$1, Style as Style$1, Script as Script$1, Noscript as Noscript$1, DataKeys, SchemaAugmentations, DefinedValueOrEmptyObject, MergeHead, BaseHtmlAttr, MaybeArray, BaseBodyAttr, HeadEntryOptions, MetaFlatInput, ActiveHeadEntry } from '@unhead/schema';
|
|
3
3
|
export { ActiveHeadEntry, Head, HeadEntryOptions, HeadTag, MergeHead, Unhead } from '@unhead/schema';
|
|
4
4
|
import { ComputedRef, Ref, Plugin } from 'vue';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Creates a core instance of unhead. Does not provide a global ctx for composables to work
|
|
8
|
+
* and does not register DOM plugins.
|
|
9
|
+
*
|
|
10
|
+
* @param options
|
|
11
|
+
*/
|
|
12
|
+
declare function createHeadCore<T extends {} = Head>(options?: CreateHeadOptions): Unhead<T>;
|
|
13
|
+
|
|
6
14
|
declare type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>;
|
|
7
15
|
declare type MaybeComputedRef<T> = T | MaybeReadonlyRef<T> | Ref<T>;
|
|
8
16
|
declare type MaybeComputedRefEntries<T> = MaybeComputedRef<T> | {
|
|
@@ -138,6 +146,7 @@ declare const useTagTitle: (title: ReactiveHead['title']) => void | ActiveHeadEn
|
|
|
138
146
|
declare const useTitleTemplate: (titleTemplate: ReactiveHead['titleTemplate']) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
139
147
|
declare const useTagMeta: (meta: Arrayable<Meta>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
140
148
|
declare const useTagMetaFlat: (meta: MaybeComputedRefEntries<MetaFlatInput>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
149
|
+
declare const useSeoMeta: (meta: MaybeComputedRefEntries<MetaFlatInput>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
141
150
|
declare const useTagLink: (link: Arrayable<Link>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
142
151
|
declare const useTagScript: (script: Arrayable<Script>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
143
152
|
declare const useTagStyle: (style: Arrayable<Style>) => void | ActiveHeadEntry<UseHeadInput<MergeHead>>;
|
|
@@ -151,4 +160,4 @@ declare const unheadVueComposablesImports: {
|
|
|
151
160
|
imports: string[];
|
|
152
161
|
}[];
|
|
153
162
|
|
|
154
|
-
export { Arrayable, Base, BodyAttributes, HtmlAttributes, Link, MaybeComputedRef, MaybeComputedRefEntries, MaybeReadonlyRef, Meta, Noscript, ReactiveHead, Script, Style, Title, TitleTemplate, UseHeadInput, Vue2ProvideUnheadPlugin, VueHeadClient, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
|
|
163
|
+
export { Arrayable, Base, BodyAttributes, HtmlAttributes, Link, MaybeComputedRef, MaybeComputedRefEntries, MaybeReadonlyRef, Meta, Noscript, ReactiveHead, Script, Style, Title, TitleTemplate, UseHeadInput, Vue2ProvideUnheadPlugin, VueHeadClient, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, createHeadCore, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { unref, isRef, version, getCurrentInstance, inject, nextTick, ref, watchEffect, watch, onBeforeUnmount } from 'vue';
|
|
2
1
|
import { createHooks } from 'hookable';
|
|
2
|
+
import { unref, isRef, version, getCurrentInstance, inject, nextTick, ref, watchEffect, watch, onBeforeUnmount } from 'vue';
|
|
3
3
|
|
|
4
4
|
const ValidHeadTags = [
|
|
5
5
|
"title",
|
|
@@ -349,10 +349,12 @@ const EventHandlersPlugin = () => {
|
|
|
349
349
|
const handler = value;
|
|
350
350
|
$el.setAttribute(eventDedupeKey, "");
|
|
351
351
|
$eventListenerTarget.addEventListener(eventName, handler);
|
|
352
|
-
ctx.entry
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
352
|
+
if (ctx.entry) {
|
|
353
|
+
ctx.entry._sde[sdeKey] = () => {
|
|
354
|
+
$eventListenerTarget.removeEventListener(eventName, handler);
|
|
355
|
+
$el.removeAttribute(eventDedupeKey);
|
|
356
|
+
};
|
|
357
|
+
}
|
|
356
358
|
});
|
|
357
359
|
if (ctx.tag._delayedSrc) {
|
|
358
360
|
$el.setAttribute("src", ctx.tag._delayedSrc);
|
|
@@ -396,7 +398,26 @@ function normaliseEntryTags(e) {
|
|
|
396
398
|
});
|
|
397
399
|
}
|
|
398
400
|
|
|
401
|
+
const CorePlugins = () => [
|
|
402
|
+
DedupesTagsPlugin(),
|
|
403
|
+
SortTagsPlugin(),
|
|
404
|
+
TitleTemplatePlugin(),
|
|
405
|
+
ProvideTagHashPlugin(),
|
|
406
|
+
EventHandlersPlugin(),
|
|
407
|
+
DeprecatedTagAttrPlugin()
|
|
408
|
+
];
|
|
409
|
+
const DOMPlugins = (options = {}) => [
|
|
410
|
+
PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn })
|
|
411
|
+
];
|
|
399
412
|
function createHead$1(options = {}) {
|
|
413
|
+
const head = createHeadCore({
|
|
414
|
+
...options,
|
|
415
|
+
plugins: [...DOMPlugins(options), ...options?.plugins || []]
|
|
416
|
+
});
|
|
417
|
+
setActiveHead(head);
|
|
418
|
+
return head;
|
|
419
|
+
}
|
|
420
|
+
function createHeadCore(options = {}) {
|
|
400
421
|
let entries = [];
|
|
401
422
|
let _sde = {};
|
|
402
423
|
let _eid = 0;
|
|
@@ -404,13 +425,7 @@ function createHead$1(options = {}) {
|
|
|
404
425
|
if (options?.hooks)
|
|
405
426
|
hooks.addHooks(options.hooks);
|
|
406
427
|
options.plugins = [
|
|
407
|
-
|
|
408
|
-
DedupesTagsPlugin(),
|
|
409
|
-
SortTagsPlugin(),
|
|
410
|
-
TitleTemplatePlugin(),
|
|
411
|
-
EventHandlersPlugin(),
|
|
412
|
-
ProvideTagHashPlugin(),
|
|
413
|
-
PatchDomOnEntryUpdatesPlugin({ document: options?.document, delayFn: options?.domDelayFn }),
|
|
428
|
+
...CorePlugins(),
|
|
414
429
|
...options?.plugins || []
|
|
415
430
|
];
|
|
416
431
|
options.plugins.forEach((p) => p.hooks && hooks.addHooks(p.hooks));
|
|
@@ -480,7 +495,6 @@ function createHead$1(options = {}) {
|
|
|
480
495
|
}
|
|
481
496
|
};
|
|
482
497
|
head.hooks.callHook("init", head);
|
|
483
|
-
setActiveHead(head);
|
|
484
498
|
return head;
|
|
485
499
|
}
|
|
486
500
|
|
|
@@ -493,6 +507,7 @@ const composableNames = [
|
|
|
493
507
|
"useTagBase",
|
|
494
508
|
"useTagMeta",
|
|
495
509
|
"useTagMetaFlat",
|
|
510
|
+
"useSeoMeta",
|
|
496
511
|
"useTagLink",
|
|
497
512
|
"useTagScript",
|
|
498
513
|
"useTagStyle",
|
|
@@ -552,14 +567,13 @@ function injectHead() {
|
|
|
552
567
|
return getCurrentInstance() && inject(headSymbol) || getActiveHead();
|
|
553
568
|
}
|
|
554
569
|
function createHead(options = {}) {
|
|
555
|
-
const plugins = [
|
|
556
|
-
VueReactiveUseHeadPlugin(),
|
|
557
|
-
...options?.plugins || []
|
|
558
|
-
];
|
|
559
570
|
const head = createHead$1({
|
|
560
571
|
...options,
|
|
561
572
|
domDelayFn: (fn) => setTimeout(() => nextTick(() => fn()), 10),
|
|
562
|
-
plugins
|
|
573
|
+
plugins: [
|
|
574
|
+
VueReactiveUseHeadPlugin(),
|
|
575
|
+
...options?.plugins || []
|
|
576
|
+
]
|
|
563
577
|
});
|
|
564
578
|
const vuePlugin = {
|
|
565
579
|
install(app) {
|
|
@@ -817,6 +831,7 @@ const useTagMetaFlat = (meta) => {
|
|
|
817
831
|
});
|
|
818
832
|
return useHead({ meta: input });
|
|
819
833
|
};
|
|
834
|
+
const useSeoMeta = useTagMetaFlat;
|
|
820
835
|
const useTagLink = (link) => useHead({ link: asArray(link) });
|
|
821
836
|
const useTagScript = (script) => useHead({ script: asArray(script) });
|
|
822
837
|
const useTagStyle = (style) => useHead({ style: asArray(style) });
|
|
@@ -835,4 +850,4 @@ const unheadVueComposablesImports = [
|
|
|
835
850
|
}
|
|
836
851
|
];
|
|
837
852
|
|
|
838
|
-
export { Vue2ProvideUnheadPlugin, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
|
|
853
|
+
export { Vue2ProvideUnheadPlugin, VueHeadMixin, VueReactiveUseHeadPlugin, asArray, createHead, createHeadCore, headSymbol, injectHead, resolveUnrefHeadInput, unheadVueComposablesImports, useBodyAttrs, useHead, useHtmlAttrs, useSeoMeta, useServerBodyAttrs, useServerHead, useServerHtmlAttrs, useServerTagBase, useServerTagLink, useServerTagMeta, useServerTagMetaFlat, useServerTagNoscript, useServerTagScript, useServerTagStyle, useServerTagTitle, useServerTitleTemplate, useTagBase, useTagLink, useTagMeta, useTagMetaFlat, useTagNoscript, useTagScript, useTagStyle, useTagTitle, useTitleTemplate };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unhead/vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.6",
|
|
5
5
|
"packageManager": "pnpm@7.14.0",
|
|
6
6
|
"author": "Harlan Wilton <harlan@harlanzw.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"vue": ">=2.7 || >=3"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@unhead/schema": "0.6.
|
|
36
|
+
"@unhead/schema": "0.6.6",
|
|
37
37
|
"hookable": "^5.4.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"unhead": "0.6.
|
|
40
|
+
"unhead": "0.6.6",
|
|
41
41
|
"vue": "^3.2.45"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|