|
|
@@ -24,6 +24,9 @@ export const isTeleport = (type: any): boolean => type.__isTeleport
|
|
|
export const isTeleportDisabled = (props: VNode['props']): boolean =>
|
|
|
props && (props.disabled || props.disabled === '')
|
|
|
|
|
|
+const isTargetSVG = (target: RendererElement): boolean =>
|
|
|
+ typeof SVGElement !== 'undefined' && target instanceof SVGElement
|
|
|
+
|
|
|
const resolveTarget = <T = RendererElement>(
|
|
|
props: TeleportProps | null,
|
|
|
select: RendererOptions['querySelector']
|
|
|
@@ -80,6 +83,7 @@ export const TeleportImpl = {
|
|
|
|
|
|
const disabled = isTeleportDisabled(n2.props)
|
|
|
const { shapeFlag, children } = n2
|
|
|
+
|
|
|
if (n1 == null) {
|
|
|
// insert anchors in the main view
|
|
|
const placeholder = (n2.el = __DEV__
|
|
|
@@ -90,11 +94,12 @@ export const TeleportImpl = {
|
|
|
: createText(''))
|
|
|
insert(placeholder, container, anchor)
|
|
|
insert(mainAnchor, container, anchor)
|
|
|
-
|
|
|
const target = (n2.target = resolveTarget(n2.props, querySelector))
|
|
|
const targetAnchor = (n2.targetAnchor = createText(''))
|
|
|
if (target) {
|
|
|
insert(targetAnchor, target)
|
|
|
+ // #2652 we could be teleporting from a non-SVG tree into an SVG tree
|
|
|
+ isSVG = isSVG || isTargetSVG(target)
|
|
|
} else if (__DEV__ && !disabled) {
|
|
|
warn('Invalid Teleport target on mount:', target, `(${typeof target})`)
|
|
|
}
|
|
|
@@ -129,6 +134,7 @@ export const TeleportImpl = {
|
|
|
const wasDisabled = isTeleportDisabled(n1.props)
|
|
|
const currentContainer = wasDisabled ? container : target
|
|
|
const currentAnchor = wasDisabled ? mainAnchor : targetAnchor
|
|
|
+ isSVG = isSVG || isTargetSVG(target)
|
|
|
|
|
|
if (n2.dynamicChildren) {
|
|
|
// fast path when the teleport happens to be a block root
|