/** * TouchRipple Component - Lynx 版 MUI TouchRipple * 使用 CSS @keyframes 动画实现涟漪效果 * * 由于 Lynx 完整支持 CSS animations,我们可以实现真正的涟漪效果! */ import './TouchRipple.css' export interface RippleProps { /** X 坐标 */ x?: number /** Y 坐标 */ y?: number /** 涟漪大小 */ size?: number /** 是否居中 */ center?: boolean } export interface TouchRippleProps { /** 是否居中涟漪 */ center?: boolean /** 涟漪颜色 */ color?: string /** 子元素 */ children?: any /** 自定义类名 */ className?: string /** 内联样式 */ style?: Record } // ============================================= // TouchRipple 类名 // ============================================= export const touchRippleClasses = { root: 'MuiTouchRipple-root', ripple: 'MuiTouchRipple-ripple', rippleVisible: 'MuiTouchRipple-rippleVisible', ripplePulsate: 'MuiTouchRipple-ripplePulsate', child: 'MuiTouchRipple-child', childLeaving: 'MuiTouchRipple-childLeaving', childPulsate: 'MuiTouchRipple-childPulsate', } // ============================================= // TouchRipple 组件 - 简化版 (无状态) // 完整版需要 useState 来管理多个涟漪 // ============================================= export function TouchRipple(props: TouchRippleProps) { const { center = false, color, className, style, ...other } = props const classes = [ touchRippleClasses.root, className, ].filter(Boolean).join(' ') const computedStyle: Record = { ...style, ...(color && { '--ripple-color': color }), } return ( {/* 涟漪元素由 CSS 动画驱动 */} ) } export default TouchRipple