import React from "react"; import styled from "styled-components/macro"; import { darken } from "polished"; import { RowBetween } from "../Row"; import { ChevronDown, Check } from "react-feather"; import { Button as RebassButton, ButtonProps } from "rebass/styled-components"; import useTheme from "../../hooks/useTheme"; const Base = styled(RebassButton)<{ padding?: string; width?: string; borderRadius?: string; altDisabledStyle?: boolean; }>` padding: ${({ padding }) => (padding ? padding : "16px")}; width: ${({ width }) => (width ? width : "100%")}; font-weight: 500; text-align: center; border-radius: 20px; border-radius: ${({ borderRadius }) => borderRadius && borderRadius}; outline: none; border: 1px solid transparent; color: white; text-decoration: none; display: flex; justify-content: center; flex-wrap: nowrap; align-items: center; cursor: pointer; position: relative; z-index: 1; &:disabled { cursor: auto; pointer-events: none; } will-change: transform; transition: transform 450ms ease; transform: perspective(1px) translateZ(0); &:hover { transform: scale(0.99); } > * { user-select: none; } > a { text-decoration: none; } `; export const ButtonPrimary = styled(Base)` background-color: ${({ theme }) => theme.primary1}; color: white; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.primary1)}; background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:hover { background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.primary1)}; background-color: ${({ theme }) => darken(0.1, theme.primary1)}; } &:disabled { background-color: ${({ theme, altDisabledStyle, disabled }) => altDisabledStyle ? disabled ? theme.primary1 : theme.primary1 : theme.primary1}; color: white; cursor: auto; box-shadow: none; border: 1px solid transparent; outline: none; opacity: 0.4; opacity: ${({ altDisabledStyle }) => (altDisabledStyle ? "0.5" : "0.4")}; } `; export const ButtonLight = styled(Base)` background-color: ${({ theme }) => theme.primary5}; color: ${({ theme }) => theme.primaryText1}; font-size: 16px; font-weight: 500; &:focus { box-shadow: 0 0 0 1pt ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; background-color: ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; } &:hover { background-color: ${({ theme, disabled }) => !disabled && darken(0.03, theme.primary5)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme, disabled }) => !disabled && darken(0.05, theme.primary5)}; background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.primary5)}; } :disabled { opacity: 0.4; :hover { cursor: auto; background-color: ${({ theme }) => theme.primary5}; box-shadow: none; border: 1px solid transparent; outline: none; } } `; export const ButtonGray = styled(Base)` background-color: ${({ theme }) => theme.bg1}; color: ${({ theme }) => theme.text2}; font-size: 16px; font-weight: 500; &:focus { background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.bg2)}; } &:hover { background-color: ${({ theme, disabled }) => !disabled && darken(0.05, theme.bg2)}; } &:active { background-color: ${({ theme, disabled }) => !disabled && darken(0.1, theme.bg2)}; } `; export const ButtonSecondary = styled(Base)` border: 1px solid ${({ theme }) => theme.primary4}; color: ${({ theme }) => theme.primary1}; background-color: transparent; font-size: 16px; border-radius: 12px; padding: ${({ padding }) => (padding ? padding : "10px")}; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4}; border: 1px solid ${({ theme }) => theme.primary3}; } &:hover { border: 1px solid ${({ theme }) => theme.primary3}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => theme.primary4}; border: 1px solid ${({ theme }) => theme.primary3}; } &:disabled { opacity: 50%; cursor: auto; } a:hover { text-decoration: none; } `; export const ButtonPink = styled(Base)` background-color: ${({ theme }) => theme.primary1}; color: white; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.primary1)}; background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:hover { background-color: ${({ theme }) => darken(0.05, theme.primary1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.primary1)}; background-color: ${({ theme }) => darken(0.1, theme.primary1)}; } &:disabled { background-color: ${({ theme }) => theme.primary1}; opacity: 50%; cursor: auto; } `; export const ButtonUNIGradient = styled(ButtonPrimary)` color: white; padding: 4px 8px; height: 36px; font-weight: 500; background-color: ${({ theme }) => theme.bg3}; background: radial-gradient( 174.47% 188.91% at 1.84% 0%, #ff007a 0%, #2172e5 100% ), #edeef2; width: fit-content; position: relative; cursor: pointer; border: none; white-space: no-wrap; :hover { opacity: 0.8; } :active { opacity: 0.9; } `; export const ButtonOutlined = styled(Base)` border: 1px solid ${({ theme }) => theme.bg2}; background-color: transparent; color: ${({ theme }) => theme.text1}; &:focus { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:hover { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:active { box-shadow: 0 0 0 1px ${({ theme }) => theme.bg4}; } &:disabled { opacity: 50%; cursor: auto; } `; export const ButtonEmpty = styled(Base)` background-color: transparent; color: ${({ theme }) => theme.primary1}; display: flex; justify-content: center; align-items: center; &:focus { text-decoration: underline; } &:hover { text-decoration: none; } &:active { text-decoration: none; } &:disabled { opacity: 50%; cursor: auto; } `; export const ButtonText = styled(Base)` padding: 0; width: fit-content; background: none; text-decoration: none; &:focus { // eslint-disable-next-line @typescript-eslint/no-unused-vars text-decoration: underline; } &:hover { // text-decoration: underline; opacity: 0.9; } &:active { text-decoration: underline; } &:disabled { opacity: 50%; cursor: auto; } `; export const ButtonWhite = styled(Base)` border: 1px solid #edeef2; background-color: ${({ theme }) => theme.bg1}; color: black; &:focus { // eslint-disable-next-line @typescript-eslint/no-unused-vars box-shadow: 0 0 0 1pt ${darken(0.05, "#edeef2")}; } &:hover { box-shadow: 0 0 0 1pt ${darken(0.1, "#edeef2")}; } &:active { box-shadow: 0 0 0 1pt ${darken(0.1, "#edeef2")}; } &:disabled { opacity: 50%; cursor: auto; } `; const ButtonConfirmedStyle = styled(Base)` background-color: ${({ theme }) => theme.bg3}; color: ${({ theme }) => theme.text1}; /* border: 1px solid ${({ theme }) => theme.green1}; */ &:disabled { /* opacity: 50%; */ background-color: ${({ theme }) => theme.bg2}; color: ${({ theme }) => theme.text2}; cursor: auto; } `; const ButtonErrorStyle = styled(Base)` background-color: ${({ theme }) => theme.red1}; border: 1px solid ${({ theme }) => theme.red1}; &:focus { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.05, theme.red1)}; background-color: ${({ theme }) => darken(0.05, theme.red1)}; } &:hover { background-color: ${({ theme }) => darken(0.05, theme.red1)}; } &:active { box-shadow: 0 0 0 1pt ${({ theme }) => darken(0.1, theme.red1)}; background-color: ${({ theme }) => darken(0.1, theme.red1)}; } &:disabled { opacity: 50%; cursor: auto; box-shadow: none; background-color: ${({ theme }) => theme.red1}; border: 1px solid ${({ theme }) => theme.red1}; } `; export function ButtonConfirmed({ confirmed, altDisabledStyle, ...rest }: { confirmed?: boolean; altDisabledStyle?: boolean } & ButtonProps) { if (confirmed) { return ; } else { return ; } } export function ButtonError({ error, ...rest }: { error?: boolean } & ButtonProps) { if (error) { return ; } else { return ; } } export function ButtonDropdown({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
); } export function ButtonDropdownGrey({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
); } export function ButtonDropdownLight({ disabled = false, children, ...rest }: { disabled?: boolean } & ButtonProps) { return (
{children}
); } export function ButtonRadio({ active, ...rest }: { active?: boolean } & ButtonProps) { if (!active) { return ; } else { return ; } } const ActiveOutlined = styled(ButtonOutlined)` border: 1px solid; border-color: ${({ theme }) => theme.primary1}; `; const Circle = styled.div` height: 20px; width: 20px; border-radius: 50%; background-color: ${({ theme }) => theme.primary1}; display: flex; align-items: center; justify-content: center; `; const CheckboxWrapper = styled.div` width: 30px; padding: 0 10px; position: absolute; top: 10px; right: 10px; `; const ResponsiveCheck = styled(Check)` size: 13px; `; export function ButtonRadioChecked({ active = false, children, ...rest }: { active?: boolean } & ButtonProps) { const theme = useTheme(); if (!active) { return ( {{children}} ); } else { return ( { {children} } ); } }