From: 白雾三语 <32354856+baiwusanyu-c@users.noreply.github.com>
Date: Tue, 6 Aug 2024 15:33:57 +0000 (+0800)
Subject: feat(custom-element): support css `:host` selector by applying css vars on host eleme...
X-Git-Tag: v3.5.0-beta.1~22
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03a9ea2b88df0842a820e09f7445c4b9189e3fcb;p=thirdparty%2Fvuejs%2Fcore.git
feat(custom-element): support css `:host` selector by applying css vars on host element (#8830)
close #8826
---
diff --git a/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts b/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
index 9f860a5e3c..06b3e71413 100644
--- a/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
+++ b/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
@@ -4,6 +4,7 @@ import {
Suspense,
Teleport,
createStaticVNode,
+ defineCustomElement,
h,
nextTick,
reactive,
@@ -381,4 +382,26 @@ describe('useCssVars', () => {
expect((c as HTMLElement).style.getPropertyValue(`--color`)).toBe('red')
}
})
+
+ // #8826
+ test('with custom element', async () => {
+ const state = reactive({ color: 'red' })
+ const container = document.createElement('div')
+ const App = defineCustomElement({
+ styles: [`div { color: red; }`],
+ setup() {
+ useCssVars(() => state)
+ return () => {
+ return h('div', 'hello')
+ }
+ },
+ })
+ customElements.define('css-vars-ce', App)
+ container.innerHTML = ``
+ document.body.appendChild(container)
+ await nextTick()
+ expect(container.innerHTML).toBe(
+ ``,
+ )
+ })
})
diff --git a/packages/runtime-dom/src/helpers/useCssVars.ts b/packages/runtime-dom/src/helpers/useCssVars.ts
index 286a417607..8b47d55333 100644
--- a/packages/runtime-dom/src/helpers/useCssVars.ts
+++ b/packages/runtime-dom/src/helpers/useCssVars.ts
@@ -38,7 +38,11 @@ export function useCssVars(getter: (ctx: any) => Record) {
const setVars = () => {
const vars = getter(instance.proxy)
- setVarsOnVNode(instance.subTree, vars)
+ if (instance.ce) {
+ setVarsOnNode(instance.ce as any, vars)
+ } else {
+ setVarsOnVNode(instance.subTree, vars)
+ }
updateTeleports(vars)
}