]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
Merge branch 'vapor' into edison/feat/vaporTransition
authoredison <daiwei521@126.com>
Sat, 8 Mar 2025 01:59:09 +0000 (09:59 +0800)
committerGitHub <noreply@github.com>
Sat, 8 Mar 2025 01:59:09 +0000 (09:59 +0800)
1  2 
packages/runtime-vapor/src/block.ts
packages/runtime-vapor/src/component.ts
packages/runtime-vapor/src/index.ts

index fecdfd659d84aec872e023aef5e39606997ac485,b782afd38d35b66c9fed33675d4f4705efbceb3f..6c904ab8690a5b6b0ef5fdff106e4e0cdef21021
@@@ -7,34 -7,14 +7,35 @@@ import 
  } from './component'
  import { createComment, createTextNode } from './dom/node'
  import { EffectScope, pauseTracking, resetTracking } from '@vue/reactivity'
+ import { isHydrating } from './dom/hydration'
 +import {
 +  type TransitionHooks,
 +  type TransitionProps,
 +  type TransitionState,
 +  performTransitionEnter,
 +  performTransitionLeave,
 +} from '@vue/runtime-dom'
 +import {
 +  applyTransitionEnterHooks,
 +  applyTransitionLeaveHooks,
 +} from './components/Transition'
 +
 +export interface TransitionOptions {
 +  $key?: any
 +  $transition?: VaporTransitionHooks
 +}
 +
 +export interface VaporTransitionHooks extends TransitionHooks {
 +  state: TransitionState
 +  props: TransitionProps
 +}
 +
 +export type TransitionBlock =
 +  | (Node & TransitionOptions)
 +  | (VaporFragment & TransitionOptions)
 +  | (DynamicFragment & TransitionOptions)
  
 -export type Block =
 -  | Node
 -  | VaporFragment
 -  | DynamicFragment
 -  | VaporComponentInstance
 -  | Block[]
 +export type Block = TransitionBlock | VaporComponentInstance | Block[]
  
  export type BlockFn = (...args: any[]) => Block
  
@@@ -154,29 -110,26 +155,36 @@@ export function insert
  ): void {
    anchor = anchor === 0 ? parent.firstChild : anchor
    if (block instanceof Node) {
-     // don't apply transition on text or comment nodes
-     if ((block as TransitionBlock).$transition && block instanceof Element) {
-       performTransitionEnter(
-         block,
-         (block as TransitionBlock).$transition as TransitionHooks,
-         () => parent.insertBefore(block, anchor),
-         parentSuspense,
-       )
-     } else {
-       parent.insertBefore(block, anchor)
+     if (!isHydrating) {
 -      parent.insertBefore(block, anchor)
++      // don't apply transition on text or comment nodes
++      if ((block as TransitionBlock).$transition && block instanceof Element) {
++        performTransitionEnter(
++          block,
++          (block as TransitionBlock).$transition as TransitionHooks,
++          () => parent.insertBefore(block, anchor),
++          parentSuspense,
++        )
++      } else {
++        parent.insertBefore(block, anchor)
++      }
      }
    } else if (isVaporComponent(block)) {
-     mountComponent(block, parent, anchor)
+     if (block.isMounted) {
+       insert(block.block!, parent, anchor)
+     } else {
+       mountComponent(block, parent, anchor)
+     }
    } else if (isArray(block)) {
-     for (let i = 0; i < block.length; i++) {
-       insert(block[i], parent, anchor)
+     for (const b of block) {
+       insert(b, parent, anchor)
      }
    } else {
      // fragment
      if (block.insert) {
 -      block.insert(parent, anchor)
+       // TODO handle hydration for vdom interop
 +      block.insert(parent, anchor, (block as TransitionBlock).$transition)
      } else {
 -      insert(block.nodes, parent, anchor)
 +      insert(block.nodes, parent, anchor, parentSuspense)
      }
      if (block.anchor) insert(block.anchor, parent, anchor)
    }
Simple merge