167 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import type { CSSInterpolation } from '../../_util/cssinjs';
 | |
| import { Keyframes } from '../../_util/cssinjs';
 | |
| import type { AliasToken } from '../../theme/internal';
 | |
| import type { TokenWithCommonCls } from '../../theme/util/genComponentStyleHook';
 | |
| import { initMotion } from './motion';
 | |
| 
 | |
| export const slideUpIn = new Keyframes('antSlideUpIn', {
 | |
|   '0%': {
 | |
|     transform: 'scaleY(0.8)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleY(1)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideUpOut = new Keyframes('antSlideUpOut', {
 | |
|   '0%': {
 | |
|     transform: 'scaleY(1)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleY(0.8)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideDownIn = new Keyframes('antSlideDownIn', {
 | |
|   '0%': {
 | |
|     transform: 'scaleY(0.8)',
 | |
|     transformOrigin: '100% 100%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleY(1)',
 | |
|     transformOrigin: '100% 100%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideDownOut = new Keyframes('antSlideDownOut', {
 | |
|   '0%': {
 | |
|     transform: 'scaleY(1)',
 | |
|     transformOrigin: '100% 100%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleY(0.8)',
 | |
|     transformOrigin: '100% 100%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideLeftIn = new Keyframes('antSlideLeftIn', {
 | |
|   '0%': {
 | |
|     transform: 'scaleX(0.8)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleX(1)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideLeftOut = new Keyframes('antSlideLeftOut', {
 | |
|   '0%': {
 | |
|     transform: 'scaleX(1)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleX(0.8)',
 | |
|     transformOrigin: '0% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideRightIn = new Keyframes('antSlideRightIn', {
 | |
|   '0%': {
 | |
|     transform: 'scaleX(0.8)',
 | |
|     transformOrigin: '100% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleX(1)',
 | |
|     transformOrigin: '100% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| });
 | |
| 
 | |
| export const slideRightOut = new Keyframes('antSlideRightOut', {
 | |
|   '0%': {
 | |
|     transform: 'scaleX(1)',
 | |
|     transformOrigin: '100% 0%',
 | |
|     opacity: 1,
 | |
|   },
 | |
| 
 | |
|   '100%': {
 | |
|     transform: 'scaleX(0.8)',
 | |
|     transformOrigin: '100% 0%',
 | |
|     opacity: 0,
 | |
|   },
 | |
| });
 | |
| 
 | |
| type SlideMotionTypes = 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right';
 | |
| const slideMotion: Record<SlideMotionTypes, { inKeyframes: Keyframes; outKeyframes: Keyframes }> = {
 | |
|   'slide-up': {
 | |
|     inKeyframes: slideUpIn,
 | |
|     outKeyframes: slideUpOut,
 | |
|   },
 | |
|   'slide-down': {
 | |
|     inKeyframes: slideDownIn,
 | |
|     outKeyframes: slideDownOut,
 | |
|   },
 | |
|   'slide-left': {
 | |
|     inKeyframes: slideLeftIn,
 | |
|     outKeyframes: slideLeftOut,
 | |
|   },
 | |
|   'slide-right': {
 | |
|     inKeyframes: slideRightIn,
 | |
|     outKeyframes: slideRightOut,
 | |
|   },
 | |
| };
 | |
| 
 | |
| export const initSlideMotion = (
 | |
|   token: TokenWithCommonCls<AliasToken>,
 | |
|   motionName: SlideMotionTypes,
 | |
| ): CSSInterpolation => {
 | |
|   const { antCls } = token;
 | |
|   const motionCls = `${antCls}-${motionName}`;
 | |
|   const { inKeyframes, outKeyframes } = slideMotion[motionName];
 | |
| 
 | |
|   return [
 | |
|     initMotion(motionCls, inKeyframes, outKeyframes, token.motionDurationMid),
 | |
| 
 | |
|     {
 | |
|       [`
 | |
|       ${motionCls}-enter,
 | |
|       ${motionCls}-appear
 | |
|     `]: {
 | |
|         transform: 'scale(0)',
 | |
|         transformOrigin: '0% 0%',
 | |
|         opacity: 0,
 | |
|         animationTimingFunction: token.motionEaseOutQuint,
 | |
|       },
 | |
| 
 | |
|       [`${motionCls}-leave`]: {
 | |
|         animationTimingFunction: token.motionEaseInQuint,
 | |
|       },
 | |
|     },
 | |
|   ];
 | |
| };
 |