diff --git a/packages/runtime-vapor/src/component.ts b/packages/runtime-vapor/src/component.ts index 79f05c9cd..bb2e21db0 100644 --- a/packages/runtime-vapor/src/component.ts +++ b/packages/runtime-vapor/src/component.ts @@ -35,7 +35,7 @@ import { setClass, setDynamicProp } from './dom/prop' import { type RawSlots, type StaticSlots, - slotsProxyHandlers, + dynamicSlotsProxyHandlers, } from './componentSlots' export { currentInstance } from '@vue/runtime-dom' @@ -257,7 +257,11 @@ export class VaporComponentInstance implements GenericComponentInstance { } // init slots - this.slots = rawSlots ? new Proxy(rawSlots, slotsProxyHandlers) : EMPTY_OBJ + this.slots = rawSlots + ? rawSlots.$ + ? new Proxy(rawSlots, dynamicSlotsProxyHandlers) + : rawSlots + : EMPTY_OBJ if (__DEV__) { // validate props diff --git a/packages/runtime-vapor/src/componentSlots.ts b/packages/runtime-vapor/src/componentSlots.ts index a77ade4f3..3a37abee2 100644 --- a/packages/runtime-vapor/src/componentSlots.ts +++ b/packages/runtime-vapor/src/componentSlots.ts @@ -11,7 +11,7 @@ export type Slot = (...args: any[]) => Block export type DynamicSlot = { name: string; fn: Slot } export type DynamicSlotFn = () => DynamicSlot | DynamicSlot[] -export const slotsProxyHandlers: ProxyHandler = { +export const dynamicSlotsProxyHandlers: ProxyHandler = { get: getSlot, has: (target, key: string) => !!getSlot(target, key), getOwnPropertyDescriptor(target, key: string) {