75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { defineConfig } from 'vite-plugin-windicss'
 | |
| import { primaryColor } from './build/config/themeConfig'
 | |
| 
 | |
| export default defineConfig({
 | |
|   darkMode: 'class',
 | |
|   plugins: [createEnterPlugin()],
 | |
|   theme: {
 | |
|     extend: {
 | |
|       zIndex: {
 | |
|         '-1': '-1'
 | |
|       },
 | |
|       colors: {
 | |
|         primary: primaryColor
 | |
|       },
 | |
|       screens: {
 | |
|         sm: '576px',
 | |
|         md: '768px',
 | |
|         lg: '992px',
 | |
|         xl: '1200px',
 | |
|         '2xl': '1600px'
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| })
 | |
| 
 | |
| /**
 | |
|  * Used for animation when the element is displayed.
 | |
|  * @param maxOutput The larger the maxOutput output, the larger the generated css volume.
 | |
|  */
 | |
| function createEnterPlugin(maxOutput = 6) {
 | |
|   const createCss = (index: number, d = 'x') => {
 | |
|     const upd = d.toUpperCase()
 | |
|     return {
 | |
|       [`*> .enter-${d}:nth-child(${index})`]: {
 | |
|         transform: `translate${upd}(50px)`
 | |
|       },
 | |
|       [`*> .-enter-${d}:nth-child(${index})`]: {
 | |
|         transform: `translate${upd}(-50px)`
 | |
|       },
 | |
|       [`* > .enter-${d}:nth-child(${index}),* > .-enter-${d}:nth-child(${index})`]: {
 | |
|         'z-index': `${10 - index}`,
 | |
|         opacity: '0',
 | |
|         animation: `enter-${d}-animation 0.4s ease-in-out 0.3s`,
 | |
|         'animation-fill-mode': 'forwards',
 | |
|         'animation-delay': `${(index * 1) / 10}s`
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   const handler = ({ addBase }) => {
 | |
|     const addRawCss = {}
 | |
|     for (let index = 1; index < maxOutput; index++) {
 | |
|       Object.assign(addRawCss, {
 | |
|         ...createCss(index, 'x'),
 | |
|         ...createCss(index, 'y')
 | |
|       })
 | |
|     }
 | |
|     addBase({
 | |
|       ...addRawCss,
 | |
|       [`@keyframes enter-x-animation`]: {
 | |
|         to: {
 | |
|           opacity: '1',
 | |
|           transform: 'translateX(0)'
 | |
|         }
 | |
|       },
 | |
|       [`@keyframes enter-y-animation`]: {
 | |
|         to: {
 | |
|           opacity: '1',
 | |
|           transform: 'translateY(0)'
 | |
|         }
 | |
|       }
 | |
|     })
 | |
|   }
 | |
|   return { handler }
 | |
| }
 |