53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
| /* eslint-disable import/prefer-default-export */
 | |
| import type { CSSObject, Keyframes } from '../../_util/cssinjs';
 | |
| 
 | |
| const initMotionCommon = (duration: string): CSSObject => ({
 | |
|   animationDuration: duration,
 | |
|   animationFillMode: 'both',
 | |
| });
 | |
| 
 | |
| // FIXME: origin less code seems same as initMotionCommon. Maybe we can safe remove
 | |
| const initMotionCommonLeave = (duration: string): CSSObject => ({
 | |
|   animationDuration: duration,
 | |
|   animationFillMode: 'both',
 | |
| });
 | |
| 
 | |
| export const initMotion = (
 | |
|   motionCls: string,
 | |
|   inKeyframes: Keyframes,
 | |
|   outKeyframes: Keyframes,
 | |
|   duration: string,
 | |
|   sameLevel = false,
 | |
| ): CSSObject => {
 | |
|   const sameLevelPrefix = sameLevel ? '&' : '';
 | |
| 
 | |
|   return {
 | |
|     [`
 | |
|       ${sameLevelPrefix}${motionCls}-enter,
 | |
|       ${sameLevelPrefix}${motionCls}-appear
 | |
|     `]: {
 | |
|       ...initMotionCommon(duration),
 | |
|       animationPlayState: 'paused',
 | |
|     },
 | |
| 
 | |
|     [`${sameLevelPrefix}${motionCls}-leave`]: {
 | |
|       ...initMotionCommonLeave(duration),
 | |
|       animationPlayState: 'paused',
 | |
|     },
 | |
| 
 | |
|     [`
 | |
|       ${sameLevelPrefix}${motionCls}-enter${motionCls}-enter-active,
 | |
|       ${sameLevelPrefix}${motionCls}-appear${motionCls}-appear-active
 | |
|     `]: {
 | |
|       animationName: inKeyframes,
 | |
|       animationPlayState: 'running',
 | |
|     },
 | |
| 
 | |
|     [`${sameLevelPrefix}${motionCls}-leave${motionCls}-leave-active`]: {
 | |
|       animationName: outKeyframes,
 | |
|       animationPlayState: 'running',
 | |
|       pointerEvents: 'none',
 | |
|     },
 | |
|   };
 | |
| };
 |