import {
- TeleportEndKey,
type TeleportProps,
currentInstance,
isTeleportDeferred,
isTeleportDisabled,
queuePostFlushCb,
- resolveTarget,
+ resolveTeleportTarget,
warn,
} from '@vue/runtime-dom'
import { type Block, type BlockFn, insert, remove } from '../block'
}
const mountToTarget = () => {
- const target = (this.target = resolveTarget(props, querySelector))
+ const target = (this.target = resolveTeleportTarget(props, querySelector))
if (target) {
if (
// initial mount into target
// target changed
this.targetAnchor.parentNode !== target
) {
- ;[this.targetAnchor, this.targetStart] = prepareAnchor(target)
+ insert((this.targetStart = createTextNode('')), target)
+ insert((this.targetAnchor = createTextNode('')), target)
}
mount(target, this.targetAnchor!)
}
}
-function prepareAnchor(target: ParentNode | null) {
- const targetStart = createTextNode('') as Text & { [TeleportEndKey]: Node }
- const targetAnchor = createTextNode('')
-
- // attach a special property, so we can skip teleported content in
- // renderer's nextSibling search
- targetStart[TeleportEndKey] = targetAnchor
-
- if (target) {
- insert(targetStart, target)
- insert(targetAnchor, target)
- }
-
- return [targetAnchor, targetStart]
-}
-
export const VaporTeleport = VaporTeleportImpl as unknown as {
__vapor: true
__isTeleport: true