let slot = slots[name]
// vapor slots rendered in vdom
- if (slot && slots._vapor) {
+ if (slot && slots.__interop) {
const ret = (openBlock(), createBlock(VaporSlot, props))
ret.vs = { slot, fallback }
return ret
BaseTransitionPropsValidators,
DeprecationTypes,
type FunctionalComponent,
+ type Slots,
assertNumber,
compatUtils,
h,
+ renderSlot,
} from '@vue/runtime-core'
import { extend, isArray, isObject, toNumber } from '@vue/shared'
export const Transition: FunctionalComponent<TransitionProps> =
/*@__PURE__*/ decorate((props, { slots }) => {
const resolvedProps = resolveTransitionProps(props)
- if (slots._vapor) {
- // vapor transition
+ if (slots.__vapor) {
+ // with vapor interop plugin
+ if (slots.__interop) {
+ const children = vaporTransitionImpl!.applyTransition(
+ resolvedProps,
+ slots as any,
+ )
+ const vaporSlots = {
+ default: () => children,
+ __interop: true,
+ } as any as Slots
+ return renderSlot(vaporSlots, 'default')
+ }
+
return vaporTransitionImpl!.applyTransition(resolvedProps, slots as any)
}
type VaporSlot,
dynamicSlotsProxyHandlers,
getSlot,
- vaporSlotsProxyHandler,
+ staticSlotsProxyHandler,
} from './componentSlots'
import { hmrReload, hmrRerender } from './hmr'
this.slots = rawSlots
? rawSlots.$
? new Proxy(rawSlots, dynamicSlotsProxyHandlers)
- : new Proxy(rawSlots, vaporSlotsProxyHandler)
+ : new Proxy(rawSlots, staticSlotsProxyHandler)
: EMPTY_OBJ
}
export type DynamicSlotFn = () => DynamicSlot | DynamicSlot[]
export type DynamicSlotSource = StaticSlots | DynamicSlotFn
-export const vaporSlotsProxyHandler: ProxyHandler<any> = {
+export const staticSlotsProxyHandler: ProxyHandler<any> = {
get(target, key) {
- if (key === '_vapor') {
- return target
+ if (key === '__vapor') {
+ return true
} else {
return target[key]
}
export const dynamicSlotsProxyHandlers: ProxyHandler<RawSlots> = {
get: (target, key: string) => {
- if (key === '_vapor') {
- return target
+ if (key === '__vapor') {
+ return true
} else {
return getSlot(target, key)
}
import { type Block, VaporFragment, insert, remove } from './block'
import { EMPTY_OBJ, extend, isFunction } from '@vue/shared'
import { type RawProps, rawPropsProxyHandlers } from './componentProps'
-import {
- type RawSlots,
- type VaporSlot,
- vaporSlotsProxyHandler,
-} from './componentSlots'
+import type { RawSlots, VaporSlot } from './componentSlots'
import { renderEffect } from './renderEffect'
import { createTextNode } from './dom/node'
import { optimizePropertyLookup } from './dom/prop'
},
}
+const vaporSlotsProxyHandler: ProxyHandler<any> = {
+ get(target, key) {
+ if (key === '__interop') {
+ return target
+ } else {
+ return target[key]
+ }
+ },
+}
+
/**
* Mount vdom component in vapor
*/
}
frag.insert = (parentNode, anchor) => {
+ const prev = currentInstance
+ simpleSetCurrentInstance(parentInstance)
if (!isMounted) {
internals.mt(
vnode,
parentInstance as any,
)
}
+ simpleSetCurrentInstance(prev)
}
frag.remove = unmount