assertNumber,
compatUtils,
h,
- isVNode,
} from '@vue/runtime-core'
import { extend, isArray, isObject, toNumber } from '@vue/shared'
applyTransition: (
props: TransitionProps,
slots: { default: () => any },
- ) => void
+ ) => any
}
let vaporTransitionImpl: VaporTransitionInterface | null = null
*/
export const Transition: FunctionalComponent<TransitionProps> =
/*@__PURE__*/ decorate((props, { slots }) => {
- const children = slots.default && slots.default()
- const isVNodeChildren = isArray(children) && children.some(c => isVNode(c))
const resolvedProps = resolveTransitionProps(props)
- if (isVNodeChildren) {
- return h(BaseTransition, resolvedProps, {
- default: () => children,
- })
+ if (slots._vapor) {
+ // vapor transition
+ return vaporTransitionImpl!.applyTransition(resolvedProps, slots as any)
}
- // vapor transition
- return vaporTransitionImpl!.applyTransition(resolvedProps, {
- default: () => children,
- })
+ return h(BaseTransition, resolvedProps, slots)
})
/**
type VaporSlot,
dynamicSlotsProxyHandlers,
getSlot,
+ vaporSlotsProxyHandler,
} from './componentSlots'
import { hmrReload, hmrRerender } from './hmr'
this.slots = rawSlots
? rawSlots.$
? new Proxy(rawSlots, dynamicSlotsProxyHandlers)
- : rawSlots
+ : new Proxy(rawSlots, vaporSlotsProxyHandler)
: EMPTY_OBJ
}
export type DynamicSlotFn = () => DynamicSlot | DynamicSlot[]
export type DynamicSlotSource = StaticSlots | DynamicSlotFn
+export const vaporSlotsProxyHandler: ProxyHandler<any> = {
+ get(target, key) {
+ if (key === '_vapor') {
+ return target
+ } else {
+ return target[key]
+ }
+ },
+}
+
export const dynamicSlotsProxyHandlers: ProxyHandler<RawSlots> = {
- get: getSlot,
+ get: (target, key: string) => {
+ if (key === '_vapor') {
+ return target
+ } else {
+ return getSlot(target, key)
+ }
+ },
has: (target, key: string) => !!getSlot(target, key),
getOwnPropertyDescriptor(target, key: string) {
const slot = getSlot(target, key)
applyTransition: (
props: TransitionProps,
slots: { default: () => Block },
- ) => {
+ ): Block | undefined => {
const children = slots.default && slots.default()
if (!children) return
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, VaporSlot } from './componentSlots'
+import {
+ type RawSlots,
+ type VaporSlot,
+ vaporSlotsProxyHandler,
+} 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 === '_vapor') {
- return target
- } else {
- return target[key]
- }
- },
-}
-
/**
* Mount vdom component in vapor
*/