|
@@ -4,6 +4,7 @@ import {
|
|
|
warn,
|
|
warn,
|
|
|
VNode,
|
|
VNode,
|
|
|
Fragment,
|
|
Fragment,
|
|
|
|
|
+ Static,
|
|
|
onUpdated,
|
|
onUpdated,
|
|
|
watchEffect
|
|
watchEffect
|
|
|
} from '@vue/runtime-core'
|
|
} from '@vue/runtime-core'
|
|
@@ -47,11 +48,24 @@ function setVarsOnVNode(vnode: VNode, vars: Record<string, string>) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (vnode.shapeFlag & ShapeFlags.ELEMENT && vnode.el) {
|
|
if (vnode.shapeFlag & ShapeFlags.ELEMENT && vnode.el) {
|
|
|
- const style = vnode.el.style
|
|
|
|
|
|
|
+ setVarsOnNode(vnode.el as Node, vars)
|
|
|
|
|
+ } else if (vnode.type === Fragment) {
|
|
|
|
|
+ ;(vnode.children as VNode[]).forEach(c => setVarsOnVNode(c, vars))
|
|
|
|
|
+ } else if (vnode.type === Static) {
|
|
|
|
|
+ let { el, anchor } = vnode
|
|
|
|
|
+ while (el) {
|
|
|
|
|
+ setVarsOnNode(el as Node, vars)
|
|
|
|
|
+ if (el === anchor) break
|
|
|
|
|
+ el = el.nextSibling
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function setVarsOnNode(el: Node, vars: Record<string, string>) {
|
|
|
|
|
+ if (el.nodeType === 1) {
|
|
|
|
|
+ const style = (el as HTMLElement).style
|
|
|
for (const key in vars) {
|
|
for (const key in vars) {
|
|
|
style.setProperty(`--${key}`, vars[key])
|
|
style.setProperty(`--${key}`, vars[key])
|
|
|
}
|
|
}
|
|
|
- } else if (vnode.type === Fragment) {
|
|
|
|
|
- ;(vnode.children as VNode[]).forEach(c => setVarsOnVNode(c, vars))
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|