/** * CardGlow - 卡片级装饰光效组件 * * 为卡片提供 FUI 风格的装饰元素: * - 顶部光条(Ash Thorp 风格) * - 角落发光效果(James Turrell 风格) * - 可选背景网格 * * 与 AmbientGlow 的区别: * - AmbientGlow: 页面级环境光,position: fixed * - CardGlow: 卡片级装饰光,相对于父容器定位 * * @example * ```tsx * * * {children} * * ``` */ import React, { memo } from 'react'; import { Box } from '@chakra-ui/react'; export interface CardGlowProps { /** 预设主题 */ variant?: 'gold' | 'cyan' | 'purple' | 'default'; /** 是否显示背景网格 */ showGrid?: boolean; /** 自定义主色(覆盖 variant) */ primaryColor?: string; /** 自定义次色(覆盖 variant) */ secondaryColor?: string; } // 预设颜色配置 const COLOR_PRESETS = { gold: { primary: 'rgba(212, 175, 55, 1)', secondary: 'rgba(0, 212, 255, 0.1)', grid: 'rgba(212, 175, 55, 0.03)', }, cyan: { primary: 'rgba(0, 212, 255, 1)', secondary: 'rgba(212, 175, 55, 0.1)', grid: 'rgba(0, 212, 255, 0.03)', }, purple: { primary: 'rgba(168, 85, 247, 1)', secondary: 'rgba(0, 212, 255, 0.1)', grid: 'rgba(168, 85, 247, 0.03)', }, default: { primary: 'rgba(255, 255, 255, 0.6)', secondary: 'rgba(255, 255, 255, 0.1)', grid: 'rgba(255, 255, 255, 0.02)', }, }; /** * 卡片装饰光效组件 * * 纯展示组件,需要父容器设置 position: relative 和 overflow: hidden */ const CardGlow = memo(({ variant = 'gold', showGrid = true, primaryColor, secondaryColor, }) => { const preset = COLOR_PRESETS[variant]; const primary = primaryColor || preset.primary; const secondary = secondaryColor || preset.secondary; const gridColor = preset.grid; return ( <> {/* 顶部光条 - Ash Thorp 风格数据终端效果 */} {/* 左上角光晕 - James Turrell 风格光影效果 */} {/* 右下角光晕 - 补充色,增加层次感 */} {/* 背景网格 - 微妙的科技感纹理 */} {showGrid && ( )} ); }); CardGlow.displayName = 'CardGlow'; export default CardGlow;