| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | import stylex from '@stylexjs/stylex'; |
| |
|
| | import {gradients} from '@/theme/tokens.stylex'; |
| |
|
| | enum GradientTypes { |
| | fullGradient = 'fullGradient', |
| | bluePinkGradient = 'bluePinkGradient', |
| | } |
| |
|
| | type Props = { |
| | gradientType?: GradientTypes; |
| | disabled?: boolean; |
| | rounded?: boolean; |
| | className?: string; |
| | } & React.DOMAttributes<HTMLDivElement>; |
| |
|
| | const styles = stylex.create({ |
| | animationHover: { |
| | ':hover': { |
| | backgroundPosition: '300% 100%', |
| | }, |
| | }, |
| |
|
| | fullGradient: { |
| | border: '2px solid transparent', |
| | background: gradients['rainbow'], |
| | backgroundSize: '100% 400%', |
| | transition: 'background 0.35s ease-in-out', |
| | }, |
| |
|
| | bluePinkGradient: { |
| | border: '2px solid transparent', |
| | background: gradients['rainbow'], |
| | }, |
| | }); |
| |
|
| | export default function GradientBorder({ |
| | gradientType = GradientTypes.fullGradient, |
| | disabled, |
| | rounded = true, |
| | className = '', |
| | children, |
| | }: Props) { |
| | const gradient = (name: GradientTypes) => { |
| | if (name === GradientTypes.fullGradient) { |
| | return styles.fullGradient; |
| | } else if (name === GradientTypes.bluePinkGradient) { |
| | return styles.bluePinkGradient; |
| | } |
| | }; |
| |
|
| | return ( |
| | <div |
| | className={`${stylex(gradient(gradientType), !disabled && styles.animationHover)} ${disabled && 'opacity-30'} ${rounded && 'rounded-full'} ${className}`}> |
| | {children} |
| | </div> |
| | ); |
| | } |
| |
|