wip: transition group root compat
This commit is contained in:
		
							parent
							
								
									1c2c77eb9f
								
							
						
					
					
						commit
						cf6bcdf895
					
				@ -32,7 +32,10 @@ export const enum DeprecationTypes {
 | 
				
			|||||||
  V_ON_KEYCODE_MODIFIER = 'V_ON_KEYCODE_MODIFIER',
 | 
					  V_ON_KEYCODE_MODIFIER = 'V_ON_KEYCODE_MODIFIER',
 | 
				
			||||||
  PROPS_DEFAULT_THIS = 'PROPS_DEFAULT_THIS',
 | 
					  PROPS_DEFAULT_THIS = 'PROPS_DEFAULT_THIS',
 | 
				
			||||||
  CUSTOM_DIR = 'CUSTOM_DIR',
 | 
					  CUSTOM_DIR = 'CUSTOM_DIR',
 | 
				
			||||||
  WATCH_ARRAY = 'WATCH_ARRAY'
 | 
					  WATCH_ARRAY = 'WATCH_ARRAY',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TRANSITION_CLASSES = 'TRANSITION_CLASSES',
 | 
				
			||||||
 | 
					  TRANSITION_GROUP_ROOT = 'TRANSITION_GROUP_ROOT'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type DeprecationData = {
 | 
					type DeprecationData = {
 | 
				
			||||||
@ -213,11 +216,28 @@ const deprecationData: Record<DeprecationTypes, DeprecationData> = {
 | 
				
			|||||||
    message:
 | 
					    message:
 | 
				
			||||||
      `"watch" option or vm.$watch on an array value will no longer ` +
 | 
					      `"watch" option or vm.$watch on an array value will no longer ` +
 | 
				
			||||||
      `trigger on array mutation unless the "deep" option is specified. ` +
 | 
					      `trigger on array mutation unless the "deep" option is specified. ` +
 | 
				
			||||||
      `If current usage is intended, you can suppress this warning with:` +
 | 
					      `If current usage is intended, you can disable the compat behavior and ` +
 | 
				
			||||||
 | 
					      `suppress this warning with:` +
 | 
				
			||||||
      `\n\n  configureCompat({ ${
 | 
					      `\n\n  configureCompat({ ${
 | 
				
			||||||
        DeprecationTypes.WATCH_ARRAY
 | 
					        DeprecationTypes.WATCH_ARRAY
 | 
				
			||||||
      }: { mode: 3 }})\n`,
 | 
					      }: { enabled: false }})\n`,
 | 
				
			||||||
    link: `https://v3.vuejs.org/guide/migration/watch.html`
 | 
					    link: `https://v3.vuejs.org/guide/migration/watch.html`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [DeprecationTypes.TRANSITION_CLASSES]: {
 | 
				
			||||||
 | 
					    message: `` // this feature cannot be runtime-detected
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [DeprecationTypes.TRANSITION_GROUP_ROOT]: {
 | 
				
			||||||
 | 
					    message:
 | 
				
			||||||
 | 
					      `<TransitionGroup> no longer renders a root <span> element by ` +
 | 
				
			||||||
 | 
					      `default if no "tag" prop is specified. If you do not rely on the span ` +
 | 
				
			||||||
 | 
					      `for styling, you can disable the compat behavior and suppress this ` +
 | 
				
			||||||
 | 
					      `warning with:` +
 | 
				
			||||||
 | 
					      `\n\n  configureCompat({ ${
 | 
				
			||||||
 | 
					        DeprecationTypes.TRANSITION_GROUP_ROOT
 | 
				
			||||||
 | 
					      }: { enabled: false }})\n`,
 | 
				
			||||||
 | 
					    link: `https://v3.vuejs.org/guide/migration/transition-group.html`
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -250,7 +270,7 @@ export function warnDeprecation(key: DeprecationTypes, ...args: any[]) {
 | 
				
			|||||||
  hasWarned[dupKey] = true
 | 
					  hasWarned[dupKey] = true
 | 
				
			||||||
  const { message, link } = deprecationData[key]
 | 
					  const { message, link } = deprecationData[key]
 | 
				
			||||||
  warn(
 | 
					  warn(
 | 
				
			||||||
    `(DEPRECATION ${key}) ${
 | 
					    `(deprecation ${key}) ${
 | 
				
			||||||
      typeof message === 'function' ? message(...args) : message
 | 
					      typeof message === 'function' ? message(...args) : message
 | 
				
			||||||
    }${link ? `\n  Details: ${link}` : ``}`
 | 
					    }${link ? `\n  Details: ${link}` : ``}`
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
 | 
				
			|||||||
@ -288,12 +288,13 @@ export { LegacyConfig } from './compat/globalConfig'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { warnDeprecation } from './compat/deprecations'
 | 
					import { warnDeprecation } from './compat/deprecations'
 | 
				
			||||||
import { createCompatVue } from './compat/global'
 | 
					import { createCompatVue } from './compat/global'
 | 
				
			||||||
import { isCompatEnabled } from './compat/compatConfig'
 | 
					import { isCompatEnabled, softAssertCompatEnabled } from './compat/compatConfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const _compatUtils = {
 | 
					const _compatUtils = {
 | 
				
			||||||
  warnDeprecation,
 | 
					  warnDeprecation,
 | 
				
			||||||
  createCompatVue,
 | 
					  createCompatVue,
 | 
				
			||||||
  isCompatEnabled
 | 
					  isCompatEnabled,
 | 
				
			||||||
 | 
					  softAssertCompatEnabled
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const compatUtils = (__COMPAT__
 | 
					export const compatUtils = (__COMPAT__
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,9 @@ import {
 | 
				
			|||||||
  BaseTransitionProps,
 | 
					  BaseTransitionProps,
 | 
				
			||||||
  h,
 | 
					  h,
 | 
				
			||||||
  warn,
 | 
					  warn,
 | 
				
			||||||
  FunctionalComponent
 | 
					  FunctionalComponent,
 | 
				
			||||||
 | 
					  compatUtils,
 | 
				
			||||||
 | 
					  DeprecationTypes
 | 
				
			||||||
} from '@vue/runtime-core'
 | 
					} from '@vue/runtime-core'
 | 
				
			||||||
import { isObject, toNumber, extend } from '@vue/shared'
 | 
					import { isObject, toNumber, extend } from '@vue/shared'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -99,10 +101,13 @@ export function resolveTransitionProps(
 | 
				
			|||||||
  } = rawProps
 | 
					  } = rawProps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // legacy transition class compat
 | 
					  // legacy transition class compat
 | 
				
			||||||
 | 
					  const legacyClassEnabled =
 | 
				
			||||||
 | 
					    __COMPAT__ &&
 | 
				
			||||||
 | 
					    compatUtils.isCompatEnabled(DeprecationTypes.TRANSITION_CLASSES)
 | 
				
			||||||
  let legacyEnterFromClass: string
 | 
					  let legacyEnterFromClass: string
 | 
				
			||||||
  let legacyAppearFromClass: string
 | 
					  let legacyAppearFromClass: string
 | 
				
			||||||
  let legacyLeaveFromClass: string
 | 
					  let legacyLeaveFromClass: string
 | 
				
			||||||
  if (__COMPAT__) {
 | 
					  if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
    const toLegacyClass = (cls: string) => cls.replace(/-from$/, '')
 | 
					    const toLegacyClass = (cls: string) => cls.replace(/-from$/, '')
 | 
				
			||||||
    if (!rawProps.enterFromClass) {
 | 
					    if (!rawProps.enterFromClass) {
 | 
				
			||||||
      legacyEnterFromClass = toLegacyClass(enterFromClass)
 | 
					      legacyEnterFromClass = toLegacyClass(enterFromClass)
 | 
				
			||||||
@ -148,7 +153,7 @@ export function resolveTransitionProps(
 | 
				
			|||||||
      hook && hook(el, resolve)
 | 
					      hook && hook(el, resolve)
 | 
				
			||||||
      nextFrame(() => {
 | 
					      nextFrame(() => {
 | 
				
			||||||
        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass)
 | 
					        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass)
 | 
				
			||||||
        if (__COMPAT__) {
 | 
					        if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
          removeTransitionClass(
 | 
					          removeTransitionClass(
 | 
				
			||||||
            el,
 | 
					            el,
 | 
				
			||||||
            isAppear ? legacyAppearFromClass : legacyEnterFromClass
 | 
					            isAppear ? legacyAppearFromClass : legacyEnterFromClass
 | 
				
			||||||
@ -166,7 +171,7 @@ export function resolveTransitionProps(
 | 
				
			|||||||
    onBeforeEnter(el) {
 | 
					    onBeforeEnter(el) {
 | 
				
			||||||
      onBeforeEnter && onBeforeEnter(el)
 | 
					      onBeforeEnter && onBeforeEnter(el)
 | 
				
			||||||
      addTransitionClass(el, enterFromClass)
 | 
					      addTransitionClass(el, enterFromClass)
 | 
				
			||||||
      if (__COMPAT__) {
 | 
					      if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
        addTransitionClass(el, legacyEnterFromClass)
 | 
					        addTransitionClass(el, legacyEnterFromClass)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      addTransitionClass(el, enterActiveClass)
 | 
					      addTransitionClass(el, enterActiveClass)
 | 
				
			||||||
@ -174,7 +179,7 @@ export function resolveTransitionProps(
 | 
				
			|||||||
    onBeforeAppear(el) {
 | 
					    onBeforeAppear(el) {
 | 
				
			||||||
      onBeforeAppear && onBeforeAppear(el)
 | 
					      onBeforeAppear && onBeforeAppear(el)
 | 
				
			||||||
      addTransitionClass(el, appearFromClass)
 | 
					      addTransitionClass(el, appearFromClass)
 | 
				
			||||||
      if (__COMPAT__) {
 | 
					      if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
        addTransitionClass(el, legacyAppearFromClass)
 | 
					        addTransitionClass(el, legacyAppearFromClass)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      addTransitionClass(el, appearActiveClass)
 | 
					      addTransitionClass(el, appearActiveClass)
 | 
				
			||||||
@ -184,7 +189,7 @@ export function resolveTransitionProps(
 | 
				
			|||||||
    onLeave(el, done) {
 | 
					    onLeave(el, done) {
 | 
				
			||||||
      const resolve = () => finishLeave(el, done)
 | 
					      const resolve = () => finishLeave(el, done)
 | 
				
			||||||
      addTransitionClass(el, leaveFromClass)
 | 
					      addTransitionClass(el, leaveFromClass)
 | 
				
			||||||
      if (__COMPAT__) {
 | 
					      if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
        addTransitionClass(el, legacyLeaveFromClass)
 | 
					        addTransitionClass(el, legacyLeaveFromClass)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      // force reflow so *-leave-from classes immediately take effect (#2593)
 | 
					      // force reflow so *-leave-from classes immediately take effect (#2593)
 | 
				
			||||||
@ -192,7 +197,7 @@ export function resolveTransitionProps(
 | 
				
			|||||||
      addTransitionClass(el, leaveActiveClass)
 | 
					      addTransitionClass(el, leaveActiveClass)
 | 
				
			||||||
      nextFrame(() => {
 | 
					      nextFrame(() => {
 | 
				
			||||||
        removeTransitionClass(el, leaveFromClass)
 | 
					        removeTransitionClass(el, leaveFromClass)
 | 
				
			||||||
        if (__COMPAT__) {
 | 
					        if (__COMPAT__ && legacyClassEnabled) {
 | 
				
			||||||
          removeTransitionClass(el, legacyLeaveFromClass)
 | 
					          removeTransitionClass(el, legacyLeaveFromClass)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        addTransitionClass(el, leaveToClass)
 | 
					        addTransitionClass(el, leaveToClass)
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,9 @@ import {
 | 
				
			|||||||
  createVNode,
 | 
					  createVNode,
 | 
				
			||||||
  onUpdated,
 | 
					  onUpdated,
 | 
				
			||||||
  SetupContext,
 | 
					  SetupContext,
 | 
				
			||||||
  toRaw
 | 
					  toRaw,
 | 
				
			||||||
 | 
					  compatUtils,
 | 
				
			||||||
 | 
					  DeprecationTypes
 | 
				
			||||||
} from '@vue/runtime-core'
 | 
					} from '@vue/runtime-core'
 | 
				
			||||||
import { extend } from '@vue/shared'
 | 
					import { extend } from '@vue/shared'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -99,7 +101,18 @@ const TransitionGroupImpl = {
 | 
				
			|||||||
    return () => {
 | 
					    return () => {
 | 
				
			||||||
      const rawProps = toRaw(props)
 | 
					      const rawProps = toRaw(props)
 | 
				
			||||||
      const cssTransitionProps = resolveTransitionProps(rawProps)
 | 
					      const cssTransitionProps = resolveTransitionProps(rawProps)
 | 
				
			||||||
      const tag = rawProps.tag || Fragment
 | 
					      let tag = rawProps.tag || Fragment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (
 | 
				
			||||||
 | 
					        __COMPAT__ &&
 | 
				
			||||||
 | 
					        !rawProps.tag &&
 | 
				
			||||||
 | 
					        compatUtils.softAssertCompatEnabled(
 | 
				
			||||||
 | 
					          DeprecationTypes.TRANSITION_GROUP_ROOT
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      ) {
 | 
				
			||||||
 | 
					        tag = 'span'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      prevChildren = children
 | 
					      prevChildren = children
 | 
				
			||||||
      children = slots.default ? getTransitionRawChildren(slots.default()) : []
 | 
					      children = slots.default ? getTransitionRawChildren(slots.default()) : []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user