import { useScript as useScript$1 } from 'unhead'; export { CapoPlugin, HashHydrationPlugin, createHeadCore } from 'unhead'; import { i as injectHead, h as headSymbol, V as Vue3 } from './shared/vue.ziyDaVMR.mjs'; export { c as createHead, a as createServerHead, r as resolveUnrefHeadInput, s as setHeadInjectionHandler } from './shared/vue.ziyDaVMR.mjs'; import { composableNames, whitelistSafeInput, unpackMeta } from '@unhead/shared'; import { u as useHead } from './shared/vue.-sixQ7xP.mjs'; import { getCurrentInstance, onMounted, isRef, watch, onScopeDispose, ref } from 'vue'; const coreComposableNames = [ "injectHead" ]; const unheadVueComposablesImports = { "@unhead/vue": [...coreComposableNames, ...composableNames] }; function useHeadSafe(input, options = {}) { return useHead(input, { ...options, transform: whitelistSafeInput }); } function registerVueScopeHandlers(script, scope) { if (!scope) { return; } const _registerCb = (key, cb) => { if (!script._cbs[key]) { cb(script.instance); return () => { }; } let i = script._cbs[key].push(cb); const destroy = () => { if (i) { script._cbs[key]?.splice(i - 1, 1); i = null; } }; onScopeDispose(destroy); return destroy; }; script.onLoaded = (cb) => _registerCb("loaded", cb); script.onError = (cb) => _registerCb("error", cb); onScopeDispose(() => { script._triggerAbortController?.abort(); }); } function useScript(_input, _options) { const input = typeof _input === "string" ? { src: _input } : _input; const options = _options || {}; const head = options?.head || injectHead(); options.head = head; const scope = getCurrentInstance(); options.eventContext = scope; if (scope && typeof options.trigger === "undefined") { options.trigger = onMounted; } else if (isRef(options.trigger)) { const refTrigger = options.trigger; let off; options.trigger = new Promise((resolve) => { off = watch(refTrigger, (val) => { if (val) { resolve(true); } }, { immediate: true }); onScopeDispose(() => resolve(false), true); }).then((val) => { off?.(); return val; }); } head._scriptStatusWatcher = head._scriptStatusWatcher || head.hooks.hook("script:updated", ({ script: s }) => { s._statusRef.value = s.status; }); const script = useScript$1(input, options); script._statusRef = script._statusRef || ref(script.status); registerVueScopeHandlers(script, scope); return new Proxy(script, { get(_, key, a) { return Reflect.get(_, key === "status" ? "_statusRef" : key, a); } }); } function useSeoMeta(input, options) { const { title, titleTemplate, ...meta } = input; return useHead({ title, titleTemplate, // @ts-expect-error runtime type _flatMeta: meta }, { ...options, transform(t) { const meta2 = unpackMeta({ ...t._flatMeta }); delete t._flatMeta; return { // @ts-expect-error runtime type ...t, meta: meta2 }; } }); } function useServerHead(input, options = {}) { const head = options.head || injectHead(); delete options.head; if (head) return head.push(input, { ...options, mode: "server" }); } function useServerHeadSafe(input, options = {}) { return useHeadSafe(input, { ...options, mode: "server" }); } function useServerSeoMeta(input, options) { return useSeoMeta(input, { ...options, mode: "server" }); } const Vue2ProvideUnheadPlugin = (_Vue, head) => { _Vue.mixin({ beforeCreate() { const options = this.$options; const origProvide = options.provide; options.provide = function() { let origProvideResult; if (typeof origProvide === "function") origProvideResult = origProvide.call(this); else origProvideResult = origProvide || {}; return { ...origProvideResult, [headSymbol]: head }; }; } }); }; const VueHeadMixin = { created() { let source = false; if (Vue3) { const instance = getCurrentInstance(); if (!instance) return; const options = instance.type; if (!options || !("head" in options)) return; source = typeof options.head === "function" ? () => options.head.call(instance.proxy) : options.head; } else { const head = this.$options.head; if (head) { source = typeof head === "function" ? () => head.call(this) : head; } } source && useHead(source); } }; export { Vue2ProvideUnheadPlugin, VueHeadMixin, injectHead, unheadVueComposablesImports, useHead, useHeadSafe, useScript, useSeoMeta, useServerHead, useServerHeadSafe, useServerSeoMeta };