Styled-components
This commit is contained in:
Generated
+643
-177
File diff suppressed because it is too large
Load Diff
+12
-10
@@ -17,28 +17,30 @@
|
|||||||
"flow": "^0.2.3",
|
"flow": "^0.2.3",
|
||||||
"flow-bin": "^0.75.0",
|
"flow-bin": "^0.75.0",
|
||||||
"flow-typed": "^2.4.0",
|
"flow-typed": "^2.4.0",
|
||||||
|
"node-sass-chokidar": "^1.3.0",
|
||||||
|
"npm-run-all": "^4.1.3",
|
||||||
"react-app-rewire-eslint": "^0.2.3",
|
"react-app-rewire-eslint": "^0.2.3",
|
||||||
"react-app-rewire-scss": "^1.0.2",
|
"react-app-rewire-scss": "^1.0.2",
|
||||||
"react-app-rewired": "^1.5.2"
|
"react-app-rewired": "^1.5.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"node-sass-chokidar": "^1.3.0",
|
"color": "^3.0.0",
|
||||||
"npm-run-all": "^4.1.3",
|
|
||||||
"react": "^16.4.1",
|
"react": "^16.4.1",
|
||||||
"react-dom": "^16.4.1"
|
"react-dom": "^16.4.1",
|
||||||
|
"styled-components": "^3.3.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build-css": "node-sass-chokidar src/ -o src/",
|
"build-scss": "node-sass-chokidar src/ -o src/",
|
||||||
"watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
|
"watch-scss": "npm run build-scss && node-sass-chokidar src/ -o src/ --watch --recursive",
|
||||||
"start-js": "react-app-rewired start",
|
"start-js": "react-app-rewired start",
|
||||||
"build-js": "react-app-rewired build",
|
"build-js": "react-app-rewired build",
|
||||||
"start": "npm-run-all -p watch-css start-js",
|
"storybook-js": "start-storybook -p 9001 -c .storybook",
|
||||||
"build": "npm-run-all build-css build-js",
|
"start": "npm-run-all -p watch-scss start-js",
|
||||||
|
"build": "npm-run-all build-scss build-js",
|
||||||
|
"storybook": "npm-run-all -p watch-scss storybook-js",
|
||||||
|
"build-storybook": "build-storybook -c .storybook -o out_sb",
|
||||||
"test": "react-app-rewired test --env=jsdom",
|
"test": "react-app-rewired test --env=jsdom",
|
||||||
"eject": "react-app-rewired eject",
|
"eject": "react-app-rewired eject",
|
||||||
"storybook-js": "start-storybook -p 9001 -c .storybook",
|
|
||||||
"storybook": "npm-run-all -p watch-css storybook-js",
|
|
||||||
"build-storybook": "build-storybook -c .storybook -o out_sb",
|
|
||||||
"flow": "flow",
|
"flow": "flow",
|
||||||
"addTypes": "flow-typed install"
|
"addTypes": "flow-typed install"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,17 +15,13 @@ export class SassButton extends React.PureComponent<{
|
|||||||
onSelect: PropTypes.func.isRequired
|
onSelect: PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
onSelect() {
|
|
||||||
this.props.onSelect();
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={
|
className={
|
||||||
this.props.normal ? "normalButton" : "alertButton"
|
this.props.normal ? "normalButton" : "alertButton"
|
||||||
}
|
}
|
||||||
onClick={this.onSelect.bind(this)}
|
onClick={this.props.onSelect}
|
||||||
>
|
>
|
||||||
<span>{this.props.buttonText}</span>
|
<span>{this.props.buttonText}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
border-radius: 3px; }
|
border-radius: 3px; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
A simple button for normal situations
|
||||||
|
*/
|
||||||
.normalButton {
|
.normalButton {
|
||||||
background-color: green; }
|
background-color: green; }
|
||||||
.normalButton:hover {
|
.normalButton:hover {
|
||||||
@@ -13,6 +16,9 @@
|
|||||||
color: yellow;
|
color: yellow;
|
||||||
font-weight: bold; }
|
font-weight: bold; }
|
||||||
|
|
||||||
|
/*
|
||||||
|
An alert button for warnings or errors
|
||||||
|
*/
|
||||||
.alertButton {
|
.alertButton {
|
||||||
background-color: red; }
|
background-color: red; }
|
||||||
.alertButton:hover {
|
.alertButton:hover {
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
@import "_constants.scss";
|
@import "_constants.scss";
|
||||||
// @import "_darken.scss";
|
|
||||||
// @import "_coloredText.scss";
|
|
||||||
@import "_mixins.scss";
|
@import "_mixins.scss";
|
||||||
|
|
||||||
%baseButton {
|
%baseButton {
|
||||||
@@ -10,6 +8,9 @@
|
|||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
A simple button for normal situations
|
||||||
|
*/
|
||||||
.normalButton {
|
.normalButton {
|
||||||
@extend %baseButton;
|
@extend %baseButton;
|
||||||
@include darkenBackground($normalColor);
|
@include darkenBackground($normalColor);
|
||||||
@@ -19,6 +20,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
An alert button for warnings or errors
|
||||||
|
*/
|
||||||
.alertButton {
|
.alertButton {
|
||||||
@extend %baseButton;
|
@extend %baseButton;
|
||||||
@include darkenBackground($alertColor);
|
@include darkenBackground($alertColor);
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export const NORMAL_COLOR = "green";
|
||||||
|
export const NORMAL_TEXT = "yellow";
|
||||||
|
|
||||||
|
export const ALERT_COLOR = "red";
|
||||||
|
export const ALERT_TEXT = "white";
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
/* @flow */
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
import styled from "styled-components";
|
||||||
|
import Color from "color";
|
||||||
|
|
||||||
|
import {
|
||||||
|
NORMAL_TEXT,
|
||||||
|
NORMAL_COLOR,
|
||||||
|
ALERT_TEXT,
|
||||||
|
ALERT_COLOR
|
||||||
|
} from "./constants";
|
||||||
|
|
||||||
|
const makeSpan = props => `
|
||||||
|
span {
|
||||||
|
color: ${props.normal ? NORMAL_TEXT : ALERT_TEXT};
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const BasicStyledDiv = styled.div`
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 5px 10px;
|
||||||
|
border-radius: 3px;
|
||||||
|
`;
|
||||||
|
|
||||||
|
const StyledDiv = BasicStyledDiv.extend`
|
||||||
|
background-color: ${props =>
|
||||||
|
props.normal ? NORMAL_COLOR : ALERT_COLOR};
|
||||||
|
&:hover {
|
||||||
|
background-color: ${props =>
|
||||||
|
Color(props.normal ? NORMAL_COLOR : ALERT_COLOR)
|
||||||
|
.darken(0.25)
|
||||||
|
.string()};
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
}
|
||||||
|
${props => makeSpan(props)};
|
||||||
|
`;
|
||||||
|
|
||||||
|
export class StyledButton extends React.PureComponent<{
|
||||||
|
normal: boolean,
|
||||||
|
buttonText: string,
|
||||||
|
onSelect: void => void
|
||||||
|
}> {
|
||||||
|
static propTypes = {
|
||||||
|
normal: PropTypes.bool.isRequired,
|
||||||
|
buttonText: PropTypes.string.isRequired,
|
||||||
|
onSelect: PropTypes.func.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<StyledDiv
|
||||||
|
normal={this.props.normal}
|
||||||
|
onClick={this.props.onSelect}
|
||||||
|
>
|
||||||
|
<span>{this.props.buttonText}</span>
|
||||||
|
</StyledDiv>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { storiesOf } from "@storybook/react";
|
||||||
|
import { action } from "@storybook/addon-actions";
|
||||||
|
|
||||||
|
import { StyledButton } from "./";
|
||||||
|
|
||||||
|
storiesOf("Styled-Components buttons", module)
|
||||||
|
.add("normal style", () => (
|
||||||
|
<StyledButton
|
||||||
|
normal
|
||||||
|
buttonText={"A normal Styled-Components button!"}
|
||||||
|
onSelect={action("click:normal")}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
.add("alert style", () => (
|
||||||
|
<StyledButton
|
||||||
|
normal={false}
|
||||||
|
buttonText={"An alert Styled-Components button!"}
|
||||||
|
onSelect={action("click:alert")}
|
||||||
|
/>
|
||||||
|
));
|
||||||
Reference in New Issue
Block a user