| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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>
|
| );
|
| }
|
|
|