diff --git a/packages/ui/src/atoms/Button.js b/packages/ui/src/atoms/Button.js index 3f8163badc80d4292438e582d3bebb7bd00f1ace..cf010417d2aa948d0adb3536d20ea5315a5213b1 100644 --- a/packages/ui/src/atoms/Button.js +++ b/packages/ui/src/atoms/Button.js @@ -1,26 +1,100 @@ import React from 'react' -import classnames from 'classnames' -import classes from './Button.local.scss' - -const Button = ({ - className, - children, - type = 'button', - disabled, - primary, - onClick, -}) => ( - <button - className={classnames(className, classes.root, { - [classes.disabled]: disabled, - [classes.primary]: primary, - })} - disabled={disabled} - onClick={onClick} - type={type} - > - {children} - </button> -) +import styled from 'styled-components' + +const BaseButton = styled.button.attrs({ + type: 'button', +})` + background: #ddd; + border: none; + cursor: pointer; + font-family: var(--font-interface); + font-size: inherit; + letter-spacing: 0.05em; + padding: 10px 20px; + position: relative; + text-transform: uppercase; + + &:hover, + &:focus { + background: #777; + color: white; + outline: 1px solid transparent; + } + + &:active { + transform: scale(0.8); + } + + & ::after { + animation: 1s warning; + opacity: 1; + } +` + +const PrimaryButton = BaseButton.extend` + background-color: var(--color-primary); + border: 2px solid transparent; + border-bottom: 4px solid var(--color-primary); + color: white; + + &:hover { + background: white; + border: 2px solid var(--color-primary); + border-bottom: 4px solid var(--color-primary); + color: var(--color-primary); + outline: 1px solid transparent; + } + + &:focus { + background: white; + border: 2px solid var(--color-primary); + border-bottom: 4px solid var(--color-primary); + box-shadow: 0 2px 0 0 var(--color-primary); + color: var(--color-primary); + outline: 1px solid transparent; + } +` + +const DisabledButton = BaseButton.extend.attrs({ + disabled: true, +})` + background: white; + border: 2px solid transparent; + border-bottom: 2px solid #bbb; + color: #bbb; + + &:hover { + background: transparent; + border: 2px solid transparent; + border-bottom: 2px solid #bbb; + color: #aaa; + cursor: not-allowed; + } + + &:hover::after { + color: var(--color-danger); + content: 'sorry, this action is not possible'; + display: inline; + font-size: 0.9em; + font-style: italic; + left: 115%; + letter-spacing: 0; + opacity: 1; + position: absolute; + text-align: left; + text-transform: lowercase; + top: 30%; + } +` + +const Button = ({ children, disabled, primary, ...props }) => { + if (disabled) { + return <DisabledButton {...props}>{children}</DisabledButton> + } + if (primary) { + return <PrimaryButton {...props}>{children}</PrimaryButton> + } + return <BaseButton {...props}>{children}</BaseButton> +} export default Button diff --git a/packages/ui/src/atoms/Button.local.scss b/packages/ui/src/atoms/Button.local.scss deleted file mode 100644 index 4fb29932509fda62c3a675b121fe545d466795b9..0000000000000000000000000000000000000000 --- a/packages/ui/src/atoms/Button.local.scss +++ /dev/null @@ -1,102 +0,0 @@ -.root { - background: #ddd; - border: none; - cursor: pointer; - font-family: var(--font-interface); - font-size: inherit; - letter-spacing: 0.05em; - padding: 10px 20px; - position: relative; - text-transform: uppercase; -} - -.root:hover, -.root:focus { - background: #777; - color: white; - outline: 1px solid transparent; -} - -// this will be added to the button that need a feedback to the user. -// &::after { -// content: "Saved!"; -// top: 20%; -// left: 115%; -// position: absolute; -// background: var(--color-primary); -// color: white; -// padding: 0.1em 0.3em; -// opacity: 0; -// } -.root:active { - transform: scale(0.8); -} - -.root ::after { - animation: 1s warning; - opacity: 1; -} - -.primary { - background-color: var(--color-primary); - border: 2px solid transparent; - border-bottom: 4px solid var(--color-primary); - color: white; -} - -.primary:hover { - background: white; - border: 2px solid var(--color-primary); - border-bottom: 4px solid var(--color-primary); - color: var(--color-primary); - outline: 1px solid transparent; -} - -.primary:focus { - background: white; - border: 2px solid var(--color-primary); - border-bottom: 4px solid var(--color-primary); - box-shadow: 0 2px 0 0 var(--color-primary); - color: var(--color-primary); - outline: 1px solid transparent; -} - -.disabled { - background: white; - border: 2px solid transparent; - border-bottom: 2px solid #bbb; - color: #bbb; -} - -.disabled:hover { - background: transparent; - border: 2px solid transparent; - border-bottom: 2px solid #bbb; - color: #aaa; - cursor: not-allowed; -} - -.disabled:hover::after { - color: var(--color-danger); - content: 'sorry, this action is not possible'; - display: inline; - font-size: 0.9em; - font-style: italic; - left: 115%; - letter-spacing: 0; - opacity: 1; - position: absolute; - text-align: left; - text-transform: lowercase; - top: 30%; - // width: 30ch; -} - -.addFile { - background: none; - border: none; - font-style: normal; - letter-spacing: 0; - padding: 0; - text-transform: none; -}