From 0897e9ef05fbee4f021f317bb7c2d0b7007f1b75 Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Tue, 18 Mar 2025 01:09:02 +1100 Subject: [PATCH] fix(vue): missing unhead context (#3589) Co-authored-by: Benjamin Canac --- src/runtime/plugins/colors.ts | 12 +++++------- src/runtime/vue/plugins/head.ts | 5 +++++ src/runtime/vue/stubs.ts | 3 +-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/runtime/plugins/colors.ts b/src/runtime/plugins/colors.ts index 3a37daaa..a7021205 100644 --- a/src/runtime/plugins/colors.ts +++ b/src/runtime/plugins/colors.ts @@ -2,6 +2,7 @@ import { computed } from 'vue' import { defineNuxtPlugin, useAppConfig, useNuxtApp, useHead } from '#imports' // FIXME: https://github.com/nuxt/module-builder/issues/141#issuecomment-2078248248 import type {} from '#app' +import type { UseHeadInput } from '@unhead/vue/types' export default defineNuxtPlugin(() => { const appConfig = useAppConfig() @@ -33,12 +34,11 @@ export default defineNuxtPlugin(() => { }) // Head - const headData: any = { + const headData: UseHeadInput = { style: [{ innerHTML: () => root.value, - tagPriority: -2, - id: 'nuxt-ui-colors', - type: 'text/css' + tagPriority: 'critical', + id: 'nuxt-ui-colors' }] } @@ -55,7 +55,5 @@ export default defineNuxtPlugin(() => { }] } - if (!nuxtApp.isVue) { - useHead(headData) - } + useHead(headData) }) diff --git a/src/runtime/vue/plugins/head.ts b/src/runtime/vue/plugins/head.ts index 562faa69..b2363704 100644 --- a/src/runtime/vue/plugins/head.ts +++ b/src/runtime/vue/plugins/head.ts @@ -3,6 +3,11 @@ import type { Plugin } from 'vue' export default { install(app) { + // check for existing head instance to avoid replacement + // bit hacky but we can't use injectHead() here + if (app._context.provides.usehead) { + return + } const head = createHead() app.use(head) } diff --git a/src/runtime/vue/stubs.ts b/src/runtime/vue/stubs.ts index 4bc64120..5369b554 100644 --- a/src/runtime/vue/stubs.ts +++ b/src/runtime/vue/stubs.ts @@ -61,7 +61,6 @@ export const useState = (key: string, init: () => T): Ref => { export function useNuxtApp() { return { isHydrating: true, - isVue: true, payload: { serverRendered: false } } } @@ -69,7 +68,7 @@ export function useNuxtApp() { export function defineNuxtPlugin(plugin: (nuxtApp: NuxtApp) => void) { return { install(app) { - plugin({ vueApp: app } as NuxtApp) + app.runWithContext(() => plugin({ vueApp: app } as NuxtApp)) } } satisfies VuePlugin }