|
|
@ -1,7 +1,7 @@ |
|
|
|
import { Keyframes, useStyleRegister } from '@ant-design/cssinjs'; |
|
|
|
import type { UseTokenType } from '../wave'; |
|
|
|
|
|
|
|
const antCheckboxEffect = new Keyframes('antCheckboxEffect', { |
|
|
|
const antWaveTargetEffect = new Keyframes('antWaveTargetEffect', { |
|
|
|
'0%': { |
|
|
|
transform: 'scale(1)', |
|
|
|
}, |
|
|
@ -22,19 +22,46 @@ const antCheckboxEffect = new Keyframes('antCheckboxEffect', { |
|
|
|
}, |
|
|
|
}); |
|
|
|
|
|
|
|
const antWaveDotEffect = new Keyframes('antWaveDotEffect', { |
|
|
|
'0%': { |
|
|
|
opacity: 0, |
|
|
|
left: `var(--start-x)`, |
|
|
|
top: `var(--start-y)`, |
|
|
|
width: `var(--start-size)`, |
|
|
|
height: `var(--start-size)`, |
|
|
|
background: `var(--background)`, |
|
|
|
border: `var(--border)`, |
|
|
|
}, |
|
|
|
'25%': { |
|
|
|
opacity: 1, |
|
|
|
}, |
|
|
|
'50%': { |
|
|
|
opacity: 0.8, |
|
|
|
}, |
|
|
|
'100%': { |
|
|
|
opacity: 0, |
|
|
|
left: `var(--end-x)`, |
|
|
|
top: `var(--end-y)`, |
|
|
|
width: `var(--end-size)`, |
|
|
|
height: `var(--end-size)`, |
|
|
|
background: `var(--background)`, |
|
|
|
border: `var(--border)`, |
|
|
|
}, |
|
|
|
}); |
|
|
|
|
|
|
|
export default function useStyle(tokenConfig: UseTokenType) { |
|
|
|
const [theme, token, hashId] = tokenConfig; |
|
|
|
|
|
|
|
useStyleRegister({ theme, token, hashId, path: ['Customize', 'Wave', 'Effect'] }, () => { |
|
|
|
const { motionDurationSlow } = token; |
|
|
|
|
|
|
|
const prefixCls = '.happy-wave'; |
|
|
|
const { colorPrimary, colorPrimaryBgHover, motionDurationFast, motionDurationSlow } = token; |
|
|
|
const activeCls = '&.happy-in-out-appear-active'; |
|
|
|
|
|
|
|
return [ |
|
|
|
{ |
|
|
|
// ======================== Target ========================
|
|
|
|
[`${prefixCls}-target`]: { |
|
|
|
animationName: antCheckboxEffect, |
|
|
|
animationName: antWaveTargetEffect, |
|
|
|
animationDuration: `0.45s`, |
|
|
|
animationTimingFunction: 'ease-in-out', |
|
|
|
animationFillMode: 'backwards', |
|
|
@ -44,214 +71,25 @@ export default function useStyle(tokenConfig: UseTokenType) { |
|
|
|
[prefixCls]: { |
|
|
|
position: 'fixed', |
|
|
|
pointerEvents: 'none', |
|
|
|
zIndex: 999, |
|
|
|
|
|
|
|
[`${prefixCls}-dot`]: { |
|
|
|
boxSizing: 'border-box', |
|
|
|
position: 'absolute', |
|
|
|
// width: 8,
|
|
|
|
// height: 8,
|
|
|
|
borderRadius: '100%', |
|
|
|
opacity: 0, |
|
|
|
transform: 'translate(-50%, -50%)', |
|
|
|
// display: 'none',
|
|
|
|
|
|
|
|
// Start Position
|
|
|
|
// left: '50%',
|
|
|
|
// top: '50%',
|
|
|
|
left: `var(--start-x)`, |
|
|
|
top: `var(--start-y)`, |
|
|
|
width: `var(--size)`, |
|
|
|
height: `var(--size)`, |
|
|
|
background: `var(--background)`, |
|
|
|
border: `var(--border)`, |
|
|
|
zIndex: 999, |
|
|
|
|
|
|
|
// =================== Basic Motion ===================
|
|
|
|
'&.happy-in-out': { |
|
|
|
transition: [ |
|
|
|
`opacity ${motionDurationSlow} linear`, |
|
|
|
`width ${motionDurationSlow} linear`, |
|
|
|
`height ${motionDurationSlow} linear`, |
|
|
|
`left ${motionDurationSlow} ease-out`, |
|
|
|
`top ${motionDurationSlow} ease-out`, |
|
|
|
].join(','), |
|
|
|
display: 'block', |
|
|
|
|
|
|
|
'&-appear': { |
|
|
|
// opacity: 1,
|
|
|
|
opacity: 0, |
|
|
|
|
|
|
|
'&-active': { |
|
|
|
left: `var(--end-x)`, |
|
|
|
top: `var(--end-y)`, |
|
|
|
// opacity: 0,
|
|
|
|
opacity: 1, |
|
|
|
width: 0, |
|
|
|
height: 0, |
|
|
|
}, |
|
|
|
}, |
|
|
|
animationName: antWaveDotEffect, |
|
|
|
animationDuration: motionDurationSlow, |
|
|
|
animationTimingFunction: 'linear', |
|
|
|
animationFillMode: 'backwards', |
|
|
|
}, |
|
|
|
|
|
|
|
// Dot 1
|
|
|
|
// '&-1': {
|
|
|
|
// left: 0,
|
|
|
|
// top: 0,
|
|
|
|
// border: `1px solid ${colorPrimary}`,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: -30,
|
|
|
|
// top: -10,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // Dot 2
|
|
|
|
// '&-2': {
|
|
|
|
// left: '10%',
|
|
|
|
// top: 0,
|
|
|
|
// width: 4,
|
|
|
|
// height: 4,
|
|
|
|
// background: colorPrimaryBgHover,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(10% - 10px)',
|
|
|
|
// top: -20,
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // Dot 3
|
|
|
|
// '&-3': {
|
|
|
|
// left: '35%',
|
|
|
|
// top: -5,
|
|
|
|
// width: 4,
|
|
|
|
// height: 4,
|
|
|
|
// background: colorPrimary,
|
|
|
|
// opacity: 0.8,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(35% - 3px)',
|
|
|
|
// top: -15,
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // -----------------------
|
|
|
|
// // Dot 4
|
|
|
|
// '&-4': {
|
|
|
|
// left: '80%',
|
|
|
|
// top: 0,
|
|
|
|
// width: 6,
|
|
|
|
// height: 6,
|
|
|
|
// background: colorPrimaryBgHover,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(80% + 10px)',
|
|
|
|
// top: -20,
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // -----------------------
|
|
|
|
// // Dot 5
|
|
|
|
// '&-5': {
|
|
|
|
// left: '100%',
|
|
|
|
// top: '45%',
|
|
|
|
// width: 10,
|
|
|
|
// height: 10,
|
|
|
|
// background: colorPrimary,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(100% + 20px)',
|
|
|
|
// top: 'calc(45% - 3px)',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // Dot 6
|
|
|
|
// '&-6': {
|
|
|
|
// left: '100%',
|
|
|
|
// top: '90%',
|
|
|
|
// width: 4,
|
|
|
|
// height: 4,
|
|
|
|
// background: colorPrimary,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(100% + 30px)',
|
|
|
|
// top: 'calc(90% + 15px)',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // -----------------------
|
|
|
|
// // Dot 7
|
|
|
|
// '&-7': {
|
|
|
|
// left: '80%',
|
|
|
|
// top: '100%',
|
|
|
|
// width: 10,
|
|
|
|
// height: 10,
|
|
|
|
// background: colorPrimary,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(80% + 10px)',
|
|
|
|
// top: 'calc(100% + 10px)',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // Dot 8
|
|
|
|
// '&-8': {
|
|
|
|
// left: '55%',
|
|
|
|
// top: '100%',
|
|
|
|
// width: 4,
|
|
|
|
// height: 4,
|
|
|
|
// background: colorPrimaryBgHover,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: 'calc(55% + 2px)',
|
|
|
|
// top: 'calc(100% + 20px)',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // Dot 9
|
|
|
|
// '&-9': {
|
|
|
|
// left: 0,
|
|
|
|
// top: '100%',
|
|
|
|
// width: 10,
|
|
|
|
// height: 10,
|
|
|
|
// background: colorPrimaryBgHover,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: -15,
|
|
|
|
// top: 'calc(100% + 15px)',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
|
|
|
|
// // -----------------------
|
|
|
|
// // Dot 10
|
|
|
|
// '&-10': {
|
|
|
|
// left: 0,
|
|
|
|
// top: '50%',
|
|
|
|
// width: 10,
|
|
|
|
// height: 10,
|
|
|
|
// background: colorPrimary,
|
|
|
|
|
|
|
|
// [activeCls]: {
|
|
|
|
// left: -50,
|
|
|
|
// top: '50%',
|
|
|
|
// width: 1,
|
|
|
|
// height: 1,
|
|
|
|
// },
|
|
|
|
// },
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|