Skip to content

Commit 03a9ea2

Browse files
authored
feat(custom-element): support css :host selector by applying css vars on host element (#8830)
close #8826
1 parent 917c063 commit 03a9ea2

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts

+23
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
Suspense,
55
Teleport,
66
createStaticVNode,
7+
defineCustomElement,
78
h,
89
nextTick,
910
reactive,
@@ -381,4 +382,26 @@ describe('useCssVars', () => {
381382
expect((c as HTMLElement).style.getPropertyValue(`--color`)).toBe('red')
382383
}
383384
})
385+
386+
// #8826
387+
test('with custom element', async () => {
388+
const state = reactive({ color: 'red' })
389+
const container = document.createElement('div')
390+
const App = defineCustomElement({
391+
styles: [`div { color: red; }`],
392+
setup() {
393+
useCssVars(() => state)
394+
return () => {
395+
return h('div', 'hello')
396+
}
397+
},
398+
})
399+
customElements.define('css-vars-ce', App)
400+
container.innerHTML = `<css-vars-ce></css-vars-ce>`
401+
document.body.appendChild(container)
402+
await nextTick()
403+
expect(container.innerHTML).toBe(
404+
`<css-vars-ce style="--color: red;"></css-vars-ce>`,
405+
)
406+
})
384407
})

packages/runtime-dom/src/helpers/useCssVars.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ export function useCssVars(getter: (ctx: any) => Record<string, string>) {
3838

3939
const setVars = () => {
4040
const vars = getter(instance.proxy)
41-
setVarsOnVNode(instance.subTree, vars)
41+
if (instance.ce) {
42+
setVarsOnNode(instance.ce as any, vars)
43+
} else {
44+
setVarsOnVNode(instance.subTree, vars)
45+
}
4246
updateTeleports(vars)
4347
}
4448

0 commit comments

Comments
 (0)