// @flow import * as React from 'react'; import { Text, Component } from 'reactxp'; import { Button } from './Button'; import styles from './AppButtonStyles'; import blurStyles from './BlurAppButtonStyles'; export class Label extends Text {} class BaseButton extends Component { props: { children?: React.Node, disabled: boolean, }; state = { hovered: false }; textStyle = () => this.state.hovered ? styles.white80 : styles.white; iconStyle = () => this.state.hovered ? styles.white80 : styles.white; backgroundStyle = () => this.state.hovered ? styles.white80 : styles.white; onHoverStart = () => !this.props.disabled ? this.setState({ hovered: true }) : null; onHoverEnd = () => !this.props.disabled ? this.setState({ hovered: false }) : null; render() { const { children, ...otherProps } = this.props; return ( ); } } export class RedButton extends BaseButton { backgroundStyle = () => this.state.hovered ? styles.redHover : styles.red; } export class GreenButton extends BaseButton { backgroundStyle = () => this.state.hovered ? styles.greenHover : styles.green; } export class BlueButton extends BaseButton { backgroundStyle = () => this.state.hovered ? styles.blueHover : styles.blue; } export class TransparentButton extends BaseButton { backgroundStyle = () => this.state.hovered ? blurStyles.transparentHover : blurStyles.transparent; } export class RedTransparentButton extends BaseButton { backgroundStyle = () => this.state.hovered ? blurStyles.redTransparentHover : blurStyles.redTransparent; }