From 36de79324bca92f2db193ba1b5d1a31d2a052481 Mon Sep 17 00:00:00 2001 From: Sara Vieira Date: Wed, 22 Nov 2017 12:13:33 +0000 Subject: [PATCH] feat(create-instance): affinity prototype --- packages/ui-toolkit/src/card/header.js | 11 +- packages/ui-toolkit/src/form/base/input.js | 17 ++ .../ui-toolkit/src/form/input-dropdown.js | 4 + packages/ui-toolkit/src/form/select.js | 26 +- packages/ui-toolkit/src/icons/affinity.js | 6 + packages/ui-toolkit/src/icons/index.js | 2 + packages/ui-toolkit/src/icons/package.js | 6 + .../ui-toolkit/src/icons/svg/affinity.svg | 3 + packages/ui-toolkit/src/icons/svg/package.svg | 3 + packages/ui-toolkit/src/index.js | 6 +- packages/ui-toolkit/src/table/index.js | 4 + packages/ui-toolkit/src/text/headings.js | 48 ++++ prototypes/create-instance-icons/package.json | 2 + prototypes/create-instance-icons/src/app.js | 22 +- .../src/components/affinity/List.js | 191 ++++++++++++-- .../src/components/affinity/index.js | 238 +++++++++--------- .../src/components/affinity/rule.js | 140 +++++++++++ .../src/components/filters/filters.js | 24 +- .../src/components/home/home.js | 6 +- .../src/components/icons/index.js | 2 +- .../src/components/packages/list.js | 112 +++++---- yarn.lock | 21 +- 22 files changed, 677 insertions(+), 217 deletions(-) create mode 100644 packages/ui-toolkit/src/icons/affinity.js create mode 100644 packages/ui-toolkit/src/icons/package.js create mode 100644 packages/ui-toolkit/src/icons/svg/affinity.svg create mode 100644 packages/ui-toolkit/src/icons/svg/package.svg create mode 100644 prototypes/create-instance-icons/src/components/affinity/rule.js diff --git a/packages/ui-toolkit/src/card/header.js b/packages/ui-toolkit/src/card/header.js index 575231ea..a882c387 100644 --- a/packages/ui-toolkit/src/card/header.js +++ b/packages/ui-toolkit/src/card/header.js @@ -11,6 +11,8 @@ import Card, { BaseCard } from './card'; const BaseHeader = BaseCard.extend` flex-direction: row; z-index: 1; + line-height: ${remcalc(24)}; + height: auto; margin: ${remcalc(-1)} ${remcalc(-1)} 0 ${remcalc(-1)}; @@ -47,15 +49,14 @@ const BaseHeader = BaseCard.extend` const BaseBox = BaseCard.extend` width: ${remcalc(49)}; min-width: ${remcalc(49)}; - height: ${remcalc(46)}; + min-height: ${remcalc(46)}; display: inline-flex; - flex: 0 0 ${remcalc(49)}; + flex: 0 0 auto; flex-direction: column; justify-content: center; align-items: center; - transition: background-color 0ms ease; background-color: transparent; border-width: 0; border-radius: 0; @@ -85,9 +86,9 @@ const BaseBox = BaseCard.extend` const BaseMeta = BaseCard.extend` box-sizing: border-box; - height: ${remcalc(47)}; + min-height: ${remcalc(47)}; width: auto; - min-width: auto; + height: auto; padding: ${remcalc(12)}; display: inline-flex; diff --git a/packages/ui-toolkit/src/form/base/input.js b/packages/ui-toolkit/src/form/base/input.js index 44b679db..12111240 100644 --- a/packages/ui-toolkit/src/form/base/input.js +++ b/packages/ui-toolkit/src/form/base/input.js @@ -50,6 +50,10 @@ const style = css` color: rgba(73, 73, 73, 0.5); } + &:invalid { + box-shadow: none; + } + ${is('disabled')` background-color: ${props => props.theme.disabled}; color: ${props => props.theme.textDisabled}; @@ -99,6 +103,19 @@ const style = css` border-color: ${props => props.theme.redDark} `}; + ${is('embedded')` + border: none; + border-bottom: ${remcalc(1)} solid ${props => props.theme.text}; + border-radius: 0; + background: transparent; + padding: 0; + padding-right: ${remcalc(12)}; + display: inline; + height: ${remcalc(24)}; + appearance: none; + min-height: 0; + `}; + ${is('warning')` border-color: ${props => props.theme.orangeDark} `}; diff --git a/packages/ui-toolkit/src/form/input-dropdown.js b/packages/ui-toolkit/src/form/input-dropdown.js index 5fc5a4d3..e08591e1 100644 --- a/packages/ui-toolkit/src/form/input-dropdown.js +++ b/packages/ui-toolkit/src/form/input-dropdown.js @@ -8,6 +8,10 @@ const InputDropdown = styled.div` border-radius: ${remcalc(4)}; margin-bottom: ${remcalc(8)}; margin-top: ${remcalc(8)}; + + &:hover { + border: ${remcalc(1)} solid ${props => props.theme.primary}; + } `; export default InputDropdown; diff --git a/packages/ui-toolkit/src/form/select.js b/packages/ui-toolkit/src/form/select.js index 07116ed6..642fa31c 100644 --- a/packages/ui-toolkit/src/form/select.js +++ b/packages/ui-toolkit/src/form/select.js @@ -33,6 +33,17 @@ const SelectWrapper = styled.div` right: ${remcalc(12)}; } + ${is('embedded')` + margin: 0 ${remcalc(6)}; + &:after { + right: ${remcalc(0)}; + } + `}; + + ${is('embedded', 'left')` + margin-left: 0; + `}; + ${is('disabled')` &:after { background: url(${chevronDisabled}) center center no-repeat; @@ -51,6 +62,19 @@ const StyledSelect = select.extend` color: ${props => props.theme.grey}; `}; + ${is('embedded')` + border: none; + border-bottom: ${remcalc(1)} solid ${props => props.theme.text}; + border-radius: 0; + background: transparent; + padding: 0; + padding-right: ${remcalc(12)}; + display: inline; + height: ${remcalc(24)}; + appearance: none; + min-height: 0; + `}; + ${is('wrapped')` margin: 0; border: none; @@ -68,7 +92,7 @@ const StyledSelect = select.extend` * @example ./usage-select.md */ const Select = ({ children, fluid, ...rest }) => ( - + {children} diff --git a/packages/ui-toolkit/src/icons/affinity.js b/packages/ui-toolkit/src/icons/affinity.js new file mode 100644 index 00000000..d4795a59 --- /dev/null +++ b/packages/ui-toolkit/src/icons/affinity.js @@ -0,0 +1,6 @@ +// eslint-disable-next-line no-unused-vars +import React from 'react'; + +import AffinityIcon from './svg/affinity.svg'; + +export default AffinityIcon; \ No newline at end of file diff --git a/packages/ui-toolkit/src/icons/index.js b/packages/ui-toolkit/src/icons/index.js index cc898540..84586ed4 100644 --- a/packages/ui-toolkit/src/icons/index.js +++ b/packages/ui-toolkit/src/icons/index.js @@ -24,3 +24,5 @@ export { default as PartCompletedIcon } from './part-complete'; export { default as IncompleteIcon } from './incomplete'; export { default as LoadingIcon } from './loading'; export { default as ImportIcon } from './import'; +export { default as AffinityIcon } from './affinity'; +export { default as PackageIcon } from './package'; diff --git a/packages/ui-toolkit/src/icons/package.js b/packages/ui-toolkit/src/icons/package.js new file mode 100644 index 00000000..d6ecc3cb --- /dev/null +++ b/packages/ui-toolkit/src/icons/package.js @@ -0,0 +1,6 @@ +// eslint-disable-next-line no-unused-vars +import React from 'react'; + +import PackageIcon from './svg/package.svg'; + +export default PackageIcon; diff --git a/packages/ui-toolkit/src/icons/svg/affinity.svg b/packages/ui-toolkit/src/icons/svg/affinity.svg new file mode 100644 index 00000000..18475c64 --- /dev/null +++ b/packages/ui-toolkit/src/icons/svg/affinity.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ui-toolkit/src/icons/svg/package.svg b/packages/ui-toolkit/src/icons/svg/package.svg new file mode 100644 index 00000000..613418e0 --- /dev/null +++ b/packages/ui-toolkit/src/icons/svg/package.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ui-toolkit/src/index.js b/packages/ui-toolkit/src/index.js index 48d3339b..2c4e3ec0 100644 --- a/packages/ui-toolkit/src/index.js +++ b/packages/ui-toolkit/src/index.js @@ -4,7 +4,7 @@ export { default as Baseline } from './baseline'; export { default as Button } from './button'; export { default as Label } from './label'; export { PageContainer, RootContainer, ViewContainer } from './layout'; -export { H1, H2, H3, H4, H5 } from './text/headings'; +export { H1, H2, H3, H4, H5, H6 } from './text/headings'; export { default as P } from './text/p'; export { default as Small } from './text/small'; export { default as Title } from './text/title'; @@ -113,7 +113,9 @@ export { PartCompletedIcon, IncompleteIcon, LoadingIcon, - ImportIcon + ImportIcon, + AffinityIcon, + PackageIcon } from './icons'; export { diff --git a/packages/ui-toolkit/src/table/index.js b/packages/ui-toolkit/src/table/index.js index 6d729319..865e27c9 100644 --- a/packages/ui-toolkit/src/table/index.js +++ b/packages/ui-toolkit/src/table/index.js @@ -247,6 +247,10 @@ const BaseTr = styled.tr` box-shadow: 0 ${remcalc(2)} 0 rgba(0, 0, 0, 0.05); box-sizing: border-box; + &:last-child { + box-shadow: none; + } + ${is('selected')` box-shadow: none; td { diff --git a/packages/ui-toolkit/src/text/headings.js b/packages/ui-toolkit/src/text/headings.js index 177edec5..d1e51030 100644 --- a/packages/ui-toolkit/src/text/headings.js +++ b/packages/ui-toolkit/src/text/headings.js @@ -2,6 +2,7 @@ import styled from 'styled-components'; import { H1 as NH1 } from 'normalized-styled-components'; import remcalc from 'remcalc'; import typography from '../typography'; +import is from 'styled-is'; export const H1 = NH1.extend` margin: 0; @@ -14,6 +15,10 @@ export const H1 = NH1.extend` font-style: normal; font-stretch: normal; + ${is('inline')` + display: inline-block; + `}; + & + p, & + small, & + h1, @@ -36,6 +41,10 @@ export const H2 = styled.h2` line-height: ${remcalc(30)}; font-size: ${remcalc(24)}; + ${is('inline')` + display: inline-block; + `}; + & + p, & + small, & + h1, @@ -58,6 +67,10 @@ export const H3 = styled.h3` line-height: ${remcalc(26)}; font-size: ${remcalc(21)}; + ${is('inline')` + display: inline-block; + `}; + & + p, & + small, & + h1, @@ -80,6 +93,10 @@ export const H4 = styled.h4` line-height: ${remcalc(24)}; font-size: ${remcalc(15)}; + ${is('inline')` + display: inline-block; + `}; + & + p, & + small, & + h1, @@ -102,6 +119,37 @@ export const H5 = styled.h4` line-height: ${remcalc(24)}; font-size: ${remcalc(15)}; + ${is('inline')` + display: inline-block; + `}; + + & + p, + & + small, + & + h1, + & + h2, + & + label, + & + h3, + & + h4, + & + h5, + & + div, + & + span { + margin-top: ${remcalc(12)}; + } +`; + + +export const H6 = styled.h6` + margin: 0; + ${typography.color}; + ${typography.fontFamily}; + ${typography.normal}; + line-height: ${remcalc(18)}; + font-size: ${remcalc(13)}; + + ${is('inline')` + display: inline-block; + `}; + & + p, & + small, & + h1, diff --git a/prototypes/create-instance-icons/package.json b/prototypes/create-instance-icons/package.json index 92f8a5c8..a546f4f5 100644 --- a/prototypes/create-instance-icons/package.json +++ b/prototypes/create-instance-icons/package.json @@ -17,6 +17,7 @@ "prepublish": "echo 0" }, "dependencies": { + "animate-css-styled-components": "^0.0.20", "apollo": "^0.2.2", "graphql-tag": "^2.5.0", "joyent-ui-toolkit": "^2.0.1", @@ -32,6 +33,7 @@ "react-router": "^4.2.0", "react-router-dom": "^4.2.2", "react-styled-flexboxgrid": "^2.1.1", + "recompose": "^0.26.0", "redux": "^3.7.2", "redux-form": "^7.1.2", "remcalc": "^1.0.9", diff --git a/prototypes/create-instance-icons/src/app.js b/prototypes/create-instance-icons/src/app.js index 4ab6990c..d3d9d333 100644 --- a/prototypes/create-instance-icons/src/app.js +++ b/prototypes/create-instance-icons/src/app.js @@ -5,6 +5,7 @@ import { ApolloProvider } from 'react-apollo'; import { client, store } from '@state/store'; import Router from '@root/router'; +import remcalc from 'remcalc'; const fullTheme = { ...theme, @@ -26,15 +27,18 @@ const fullTheme = { } }, spacing: { - 0.5: '4px', - 0: '0px', - 1: '6px', - 2: '12px', - 3: '18px', - 4: '24px', - 5: '30px', - 6: '36px', - 10: '60px' + 0.5: remcalc(4), + 0: remcalc(0), + 1: remcalc(6), + 2: remcalc(12), + 3: remcalc(18), + 4: remcalc(24), + 5: remcalc(30), + 6: remcalc(36), + 7: remcalc(42), + 8: remcalc(48), + 9: remcalc(54), + 10: remcalc(60) } }; diff --git a/prototypes/create-instance-icons/src/components/affinity/List.js b/prototypes/create-instance-icons/src/components/affinity/List.js index d32bf347..7fab63e2 100644 --- a/prototypes/create-instance-icons/src/components/affinity/List.js +++ b/prototypes/create-instance-icons/src/components/affinity/List.js @@ -2,42 +2,191 @@ import React from 'react'; import styled from 'styled-components'; import remcalc from 'remcalc'; import { Row, Col } from 'react-styled-flexboxgrid'; +import { compose, withState } from 'recompose'; +import { Margin } from 'styled-components-spacing'; +import { FadeIn, SlideInDown } from 'animate-css-styled-components'; import { CardOutlet, CardHeader, CardHeaderMeta, Card, - ArrowIcon + ArrowIcon, + Input, + Button, + Select, + H5 } from 'joyent-ui-toolkit'; +const MarginInline = styled(Margin)` + display: inline; +`; + const capitalizeFirstLetter = string => string.charAt(0).toUpperCase() + string.slice(1); const FullWidthCard = styled(Card)` flex-basis: 100%; margin-bottom: ${remcalc(18)}; + overflow: hidden; + height: auto; `; +const enhance = compose(withState('open', 'toggleCard', true)); -const ListRules = ({ rule }) => ( - - - - - - {capitalizeFirstLetter(rule.instance)} - {`: be on ${rule.be} node as the instance(s) identified by the ${ - rule.type - } ${rule.match} "${rule.value}"`} - - - - - - - - Stuff - +const ListRules = ({ rule, open, toggleCard, updateRule, deleteRule }) => ( + + + toggleCard(n => !n)} + actionable + secondary={false} + transparent={false} + > + + + + {capitalizeFirstLetter(rule.instance)} + {`: be on ${rule.be} node as the instance(s) identified by the `} + {!rule.tagKey + ? `${rule.type} ${rule.match} "${rule.value}"` + : `tag key ${rule.tagKeyType} "${rule.tagKey}" and tag value ${rule.tagValueType} "${rule.tagValue}"`} + + + + + + + + + +
+
The instance
+ +
be on
+ +
node as the instance(s) identified by the
+
+ + {rule.type === 'instance name' + ? [ + + + , + + updateRule({ ...rule, value: e.target.value })} + placeholder="Example instance name: nginx" + /> + ] + : [ + + + , + + updateRule({ ...rule, tagKey: e.target.value })} + placeholder="key" + />, +
and value
, + + + , + + updateRule({ ...rule, tagValue: e.target.value })} + value={rule.tagValue} + placeholder="value" + /> + ]} +
+
+ + + +
+
+
+
+
+
); -export default ListRules; +export default enhance(ListRules); diff --git a/prototypes/create-instance-icons/src/components/affinity/index.js b/prototypes/create-instance-icons/src/components/affinity/index.js index 4a53db4e..f81e57cb 100644 --- a/prototypes/create-instance-icons/src/components/affinity/index.js +++ b/prototypes/create-instance-icons/src/components/affinity/index.js @@ -6,35 +6,35 @@ import remcalc from 'remcalc'; import { Margin } from 'styled-components-spacing'; import ListRules from './List'; +import CreateRule from './rule'; -import { - ViewContainer, - H2, - Input, - Button, - H4, - CardOutlet, - Select, - CardHeader, - CardHeaderMeta, - Card, - P -} from 'joyent-ui-toolkit'; - -const MarginInline = styled(Margin)` - display: inline; -`; +import { AffinityIcon, H6, Divider, Button, P } from 'joyent-ui-toolkit'; +import { FadeIn } from 'animate-css-styled-components'; const RowMargin = styled(Row)` margin-top: ${remcalc(-24)}; `; +const Flex = styled.div` + display: flex; + align-items: center; + margin-bottom: ${remcalc(8)}; + + svg { + margin-right: ${remcalc(6)}; + } +`; + const defaultValues = { instance: 'must', be: 'the same', type: 'instance name', match: 'equalling', - value: null + value: null, + tagValue: null, + tagKey: null, + tagKeyType: 'equaling', + tagValueType: 'equaling' }; class Affinity extends Component { @@ -78,6 +78,30 @@ class Affinity extends Component { rule: { ...this.state.rule, value: e.target.value, id: rndId() } }); + tagKeyChange = e => + this.setState({ + ...this.state, + rule: { ...this.state.rule, tagKey: e.target.value } + }); + + tagValueChange = e => + this.setState({ + ...this.state, + rule: { ...this.state.rule, tagValue: e.target.value } + }); + + tagKeyTypeChange = e => + this.setState({ + ...this.state, + rule: { ...this.state.rule, tagKeyType: e.target.value } + }); + + tagValueTypeChange = e => + this.setState({ + ...this.state, + rule: { ...this.state.rule, tagValueType: e.target.value } + }); + submit = () => this.setState({ ...this.state, @@ -91,18 +115,29 @@ class Affinity extends Component { open = id => this.setState({ open: this.state.open.push(id) }); - render = () => [ - - - -

Affinity

-
- -
, + deleteRule = id => + this.setState({ + ...this.state, + rules: this.state.rules.filter(rule => rule.id !== id) + }); + + updateRule = rule => + this.setState({ + ...this.state, + rules: this.state.rules.map(r => { + if (r.id === rule.id) { + r = rule; + } + + return r; + }) + }); + + _renderInfo = () => (

- Affinity rules control the location of instances, to help reduce + Affinity rules control the location of instances to help reduce traffic across networks and keep the workload balanced. With strict rules, instances are only provisioned when the criteria is met. {' '} @@ -110,97 +145,68 @@ class Affinity extends Component {

-
, - + + ); + + render = () => { + const { rule, rules, showRuleCreation } = this.state; + return [ - {this.state.rules.length > 0 && - this.state.rules.map(rule => [ -

Affinity rules

, - - ])} -
-
, - - - {this.state.showRuleCreation ? ( - - - - - - -

Create an affinity rule

- -
-
-
- -
-

The instance

-
-
- -
-
-

be on

-
-
- -
-
-

node as the instance(s) identified by the

-
-
- - - - - - - + + + +
Affinity
+
+ +
+ + , + this._renderInfo(), + + + {rules.length > 0 && + rules.map(rule => [ + + -
-
- - -
-
-
-
- ) : ( - - - - )} - -
- ]; + + ])} + + , + + + {showRuleCreation ? ( + + + + ) : ( + + + + )} + + + ]; + }; } export default Affinity; diff --git a/prototypes/create-instance-icons/src/components/affinity/rule.js b/prototypes/create-instance-icons/src/components/affinity/rule.js new file mode 100644 index 00000000..f5c8c446 --- /dev/null +++ b/prototypes/create-instance-icons/src/components/affinity/rule.js @@ -0,0 +1,140 @@ +import React from 'react'; +import { Margin } from 'styled-components-spacing'; +import { Row, Col } from 'react-styled-flexboxgrid'; +import styled from 'styled-components'; + +import { + Input, + Button, + H4, + H5, + CardOutlet, + Select, + CardHeader, + CardHeaderMeta, + Card +} from 'joyent-ui-toolkit'; + +const MarginInline = styled(Margin)` + display: inline; +`; + +export default ({ + instanceChange, + beChange, + typeChange, + valueChange, + tagKeyChange, + tagValueChange, + toggleForm, + submit, + rule, + tagKeyTypeChange, + tagValueTypeChange, + matchChange +}) => [ + + + + + + +

Create an affinity rule

+ +
+
+
+ +
+
The instance
+ +
be on
+ +
node as the instance(s) identified by the
+
+ + {rule.type === 'instance name' + ? [ + + + , + + ] + : [ + + + , + , +
and value
, + + + , + + ]} +
+
+ + +
+
+
+
+
+]; diff --git a/prototypes/create-instance-icons/src/components/filters/filters.js b/prototypes/create-instance-icons/src/components/filters/filters.js index 0e30ea2a..8480fb35 100644 --- a/prototypes/create-instance-icons/src/components/filters/filters.js +++ b/prototypes/create-instance-icons/src/components/filters/filters.js @@ -15,11 +15,23 @@ import { FormGroup, Checkbox, Label, - H2, + H6, + Divider, H4, - P + P, + PackageIcon } from 'joyent-ui-toolkit'; +const Flex = styled.div` + display: flex; + align-items: center; + margin-bottom: ${remcalc(8)}; + + svg { + margin-right: ${remcalc(6)}; + } +`; + const FullWidth = styled(Margin)` width: 100%; ,`; @@ -72,9 +84,13 @@ class Filters extends Component { return [ - + -

Package

+ + +
Package
+
+
, diff --git a/prototypes/create-instance-icons/src/components/home/home.js b/prototypes/create-instance-icons/src/components/home/home.js index ac9d3e6d..0cb33d89 100644 --- a/prototypes/create-instance-icons/src/components/home/home.js +++ b/prototypes/create-instance-icons/src/components/home/home.js @@ -9,7 +9,6 @@ import { BreadcrumbItem, Anchor, Button, - Divider, MessageTitle, MessageDescription } from 'joyent-ui-toolkit'; @@ -84,11 +83,8 @@ class Home extends Component { {breadcrumbLinks} , - {_msg} + {_msg} , - - - , { - + {icon} diff --git a/prototypes/create-instance-icons/src/components/packages/list.js b/prototypes/create-instance-icons/src/components/packages/list.js index 7d6915ed..d2992774 100644 --- a/prototypes/create-instance-icons/src/components/packages/list.js +++ b/prototypes/create-instance-icons/src/components/packages/list.js @@ -19,7 +19,7 @@ import { } from 'joyent-ui-toolkit'; const ArrowIconStyled = styled(ArrowIcon)` - margin-left: ${remcalc(6)}; + margin-left: ${remcalc(4)}; cursor: pointer; position: relative; top: ${remcalc(-3)}; @@ -85,64 +85,74 @@ class Packages extends Component { - this.order('name')}> - Name{' '} - - {ordered === 'name' && ( - this.order('name')} - /> - )} +
+ this.order('name')}> + Name{' '} + + {ordered === 'name' && ( + this.order('name')} + /> + )} +
- this.order('memory')}> - RAM{' '} - - {ordered === 'memory' && ( - this.order('memory')} - /> - )} +
+ this.order('memory')}> + RAM{' '} + + {ordered === 'memory' && ( + this.order('memory')} + /> + )} +
- this.order('disk')}> - Disk{' '} - - {ordered === 'disk' && ( - this.order('disk')} - /> - )} +
+ this.order('disk')}> + Disk{' '} + + {ordered === 'disk' && ( + this.order('disk')} + /> + )} +
- this.order('vcpus')}> - vCPU{' '} - - {ordered === 'vcpus' && ( - this.order('vcpus')} - /> - )} +
+ this.order('vcpus')}> + vCPU{' '} + + {ordered === 'vcpus' && ( + this.order('vcpus')} + /> + )} +
- this.order('price')}> - $/hour{' '} - - {ordered === 'price' && ( - this.order('price')} - /> - )} +
+ this.order('price')}> + $/hour{' '} + + {ordered === 'price' && ( + this.order('price')} + /> + )} +
diff --git a/yarn.lock b/yarn.lock index 6ff17e04..b8e5bc43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,6 +279,10 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +animate-css-styled-components@^0.0.20: + version "0.0.20" + resolved "https://registry.yarnpkg.com/animate-css-styled-components/-/animate-css-styled-components-0.0.20.tgz#bf1a5fa641dd7f98a7c48610bda66844a8b062c4" + anser@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.1.tgz#c3641863a962cebef941ea2c8706f2cb4f0716bd" @@ -2152,6 +2156,10 @@ chalk@~0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + character-entities-html4@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" @@ -4139,7 +4147,7 @@ fbemitter@^2.0.0: dependencies: fbjs "^0.8.4" -fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.9: +fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.9: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -8891,6 +8899,15 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recompose@^0.26.0: + version "0.26.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30" + dependencies: + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^2.3.1" + symbol-observable "^1.0.4" + recursive-readdir@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" @@ -10280,7 +10297,7 @@ syllable@^3.0.0: pluralize "^7.0.0" trim "0.0.1" -symbol-observable@^1.0.2, symbol-observable@^1.0.3: +symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"