feat(my-joy-beta): create instance step animations

This commit is contained in:
Sara Vieira 2018-01-30 17:27:01 +01:00 committed by Sérgio Ramos
parent 18701442e1
commit 89bddf5c3f
43 changed files with 366 additions and 334 deletions

View File

@ -65,7 +65,7 @@
"yargs": "^10.0.3" "yargs": "^10.0.3"
}, },
"resolutions": { "resolutions": {
"styled-components": "3.1.3", "styled-components": "3.1.4",
"axios": "0.16.2", "axios": "0.16.2",
"follow-redirects": "1.4.1", "follow-redirects": "1.4.1",
"debug": "3.1.0", "debug": "3.1.0",

View File

@ -20,7 +20,7 @@
"dependencies": { "dependencies": {
"remcalc": "^1.0.10", "remcalc": "^1.0.10",
"rnd-id": "^2.0.2", "rnd-id": "^2.0.2",
"styled-components": "^3.1.2" "styled-components": "^3.1.4"
}, },
"devDependencies": { "devDependencies": {
"babel-cli": "^6.26.0", "babel-cli": "^6.26.0",

View File

@ -55,7 +55,8 @@
"redux-actions": "^2.2.1", "redux-actions": "^2.2.1",
"redux-form": "^7.2.1", "redux-form": "^7.2.1",
"remcalc": "^1.0.10", "remcalc": "^1.0.10",
"styled-components": "^3.1.2", "scroll-to-element": "^2.0.0",
"styled-components": "^3.1.4",
"styled-components-spacing": "^2.1.3", "styled-components-spacing": "^2.1.3",
"styled-flex-component": "^2.1.0", "styled-flex-component": "^2.1.0",
"title-case": "^2.1.1" "title-case": "^2.1.1"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -100,6 +100,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -257,6 +258,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -1789,6 +1791,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -2259,6 +2262,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -4614,6 +4618,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div

View File

@ -100,6 +100,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -257,6 +258,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -413,6 +415,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -748,11 +751,6 @@ Array [
background-color: rgb(59,70,204); background-color: rgb(59,70,204);
border-radius: 0.25rem; border-radius: 0.25rem;
border: solid 0.0625rem rgb(45,56,132); border: solid 0.0625rem rgb(45,56,132);
cursor: not-allowed;
pointer-events: none;
color: rgb(216,216,216);
background-color: rgb(250,250,250);
border-color: rgb(216,216,216);
} }
.c1:focus { .c1:focus {
@ -781,23 +779,6 @@ Array [
pointer-events: none; pointer-events: none;
} }
.c1:focus {
background-color: rgb(250,250,250);
border-color: rgb(216,216,216);
}
.c1:hover {
background-color: rgb(250,250,250);
border-color: rgb(250,250,250);
}
.c1:active,
.c1:active:hover,
.c1:active:focus {
background-color: rgb(250,250,250);
border-color: rgb(250,250,250);
}
.c0 { .c0 {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@ -807,7 +788,6 @@ Array [
> >
<button <button
className="c1 c2 c3" className="c1 c2 c3"
disabled={true}
href="" href=""
onClick={undefined} onClick={undefined}
type="button" type="button"
@ -918,6 +898,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -1075,6 +1056,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -1281,23 +1263,23 @@ Array [
cursor: not-allowed; cursor: not-allowed;
} }
.c17 { .c16 {
color: rgba(73,73,73,1); color: rgba(73,73,73,1);
line-height: 1.5rem; line-height: 1.5rem;
font-size: 0.9375rem; font-size: 0.9375rem;
margin: 0; margin: 0;
} }
.c17 + p, .c16 + p,
.c17 + small, .c16 + small,
.c17 + h1, .c16 + h1,
.c17 + h2, .c16 + h2,
.c17 + label, .c16 + label,
.c17 + h3, .c16 + h3,
.c17 + h4, .c16 + h4,
.c17 + h5, .c16 + h5,
.c17 + div, .c16 + div,
.c17 + span { .c16 + span {
padding-bottom: 2.25rem; padding-bottom: 2.25rem;
} }
@ -1329,7 +1311,7 @@ Array [
padding-left: 0.625rem; padding-left: 0.625rem;
} }
.c13 { .c12 {
color: rgba(73,73,73,1); color: rgba(73,73,73,1);
font-weight: 600; font-weight: 600;
line-height: 1.5rem; line-height: 1.5rem;
@ -1337,20 +1319,20 @@ Array [
margin: 0; margin: 0;
} }
.c13 + p, .c12 + p,
.c13 + small, .c12 + small,
.c13 + h1, .c12 + h1,
.c13 + h2, .c12 + h2,
.c13 + label, .c12 + label,
.c13 + h3, .c12 + h3,
.c13 + h4, .c12 + h4,
.c13 + h5, .c12 + h5,
.c13 + div, .c12 + div,
.c13 + span { .c12 + span {
margin-top: 0.75rem; margin-top: 0.75rem;
} }
.c31 { .c30 {
color: rgba(73,73,73,1); color: rgba(73,73,73,1);
font-weight: 600; font-weight: 600;
line-height: 1.5rem; line-height: 1.5rem;
@ -1360,16 +1342,16 @@ Array [
color: rgb(255,255,255); color: rgb(255,255,255);
} }
.c31 + p, .c30 + p,
.c31 + small, .c30 + small,
.c31 + h1, .c30 + h1,
.c31 + h2, .c30 + h2,
.c31 + label, .c30 + label,
.c31 + h3, .c30 + h3,
.c31 + h4, .c30 + h4,
.c31 + h5, .c30 + h5,
.c31 + div, .c30 + div,
.c31 + span { .c30 + span {
margin-top: 0.75rem; margin-top: 0.75rem;
} }
@ -1547,7 +1529,7 @@ Array [
color: inherit; color: inherit;
} }
.c14 { .c13 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1583,15 +1565,15 @@ Array [
background-color: transparent; background-color: transparent;
} }
.c14 > [name='card']:not(:last-child) { .c13 > [name='card']:not(:last-child) {
margin-bottom: 0.8125rem; margin-bottom: 0.8125rem;
} }
.c14 > [name='card']:last-child { .c13 > [name='card']:last-child {
margin-bottom: 0.4375rem; margin-bottom: 0.4375rem;
} }
.c24 { .c23 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1619,7 +1601,7 @@ Array [
flex: 0 0 2.875rem; flex: 0 0 2.875rem;
} }
.c25 { .c24 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1657,12 +1639,12 @@ Array [
box-shadow: none; box-shadow: none;
} }
.c25 button { .c24 button {
margin-bottom: 0; margin-bottom: 0;
margin-top: 0; margin-top: 0;
} }
.c26 { .c25 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1721,7 +1703,7 @@ Array [
color: inherit; color: inherit;
} }
.c28 { .c27 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1759,12 +1741,12 @@ Array [
margin: -0.0625rem -0.0625rem 0 -0.0625rem; margin: -0.0625rem -0.0625rem 0 -0.0625rem;
} }
.c28 button { .c27 button {
margin-bottom: 0; margin-bottom: 0;
margin-top: 0; margin-top: 0;
} }
.c29 { .c28 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1820,7 +1802,7 @@ Array [
box-shadow: none; box-shadow: none;
} }
.c30 { .c29 {
box-sizing: content-box; box-sizing: content-box;
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
@ -1956,7 +1938,7 @@ Array [
-webkit-padding-after: 0; -webkit-padding-after: 0;
} }
.c20 { .c19 {
-webkit-order: 0; -webkit-order: 0;
-ms-flex-order: 0; -ms-flex-order: 0;
order: 0; order: 0;
@ -1972,7 +1954,7 @@ Array [
flex-shrink: 1; flex-shrink: 1;
} }
.c22 { .c21 {
margin-right: 0.375rem; margin-right: 0.375rem;
} }
@ -1980,33 +1962,28 @@ Array [
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
.c16 { .c15 {
margin-bottom: 1.125rem; margin-bottom: 1.125rem;
} }
.c19 { .c18 {
margin-right: 1.5rem; margin-right: 1.5rem;
} }
.c23 { .c22 {
margin-top: 1.125rem; margin-top: 1.125rem;
} }
.c12 { .c14 {
padding-right: 0rem;
padding-left: 0rem;
}
.c15 {
padding: 1.5rem; padding: 1.5rem;
} }
.c27 { .c26 {
padding-right: 1.125rem; padding-right: 1.125rem;
padding-left: 1.125rem; padding-left: 1.125rem;
} }
.c18 { .c17 {
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
display: -ms-flexbox; display: -ms-flexbox;
@ -2026,7 +2003,7 @@ Array [
align-content: stretch; align-content: stretch;
} }
.c21 { .c20 {
display: -webkit-box; display: -webkit-box;
display: -webkit-flex; display: -webkit-flex;
display: -ms-flexbox; display: -ms-flexbox;
@ -2133,50 +2110,46 @@ Array [
disabled={false} disabled={false}
name="card-header-meta" name="card-header-meta"
> >
<div <h4
className="c12" className="c12"
> >
<h4 name
className="c13" </h4>
>
name
</h4>
</div>
</div> </div>
</div> </div>
<div <div
className="c14" className="c13"
name="card-outlet" name="card-outlet"
> >
<div <div
className="c15" className="c14"
> >
<div <div
className="c16" className="c15"
> >
<p <p
className="c17" className="c16"
> >
description description
</p> </p>
</div> </div>
<div <div
className="c18" className="c17"
> >
<div <div
className="c19" className="c18"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c21" className="c20"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c22" className="c21"
> >
<svg <svg
className="" className=""
@ -2199,10 +2172,10 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c20" className="c19"
> >
<p <p
className="c17" className="c16"
> >
Private Private
</p> </p>
@ -2211,19 +2184,19 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c19" className="c18"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c21" className="c20"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c22" className="c21"
> >
<svg <svg
height="16.2" height="16.2"
@ -2239,10 +2212,10 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c20" className="c19"
> >
<p <p
className="c17" className="c16"
> >
Fabric network Fabric network
</p> </p>
@ -2250,165 +2223,31 @@ Array [
</div> </div>
</div> </div>
</div> </div>
<div
className="c19"
>
<div
className="c20"
>
<div
className="c21"
>
<div
className="c20"
>
<div
className="c22"
>
<svg
className=""
height="17"
innerRef={undefined}
style={
Object {
"transform": "rotate(0deg)",
}
}
version="1.1"
viewBox="0 0 17 17"
width="17"
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
>
<g
transform="translate(-1105 974)"
>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1105 -974)"
xlinkHref="#c"
/>
</g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1111 -974)"
xlinkHref="#c"
/>
</g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1117 -974)"
xlinkHref="#c"
/>
</g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1105 -968)"
xlinkHref="#c"
/>
</g>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1111 -968)"
xlinkHref="#d"
/>
</g>
</g>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1117 -968)"
xlinkHref="#d"
/>
</g>
</g>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1105 -962)"
xlinkHref="#d"
/>
</g>
</g>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1111 -962)"
xlinkHref="#d"
/>
</g>
</g>
<g>
<g>
<use
fill="rgba(73, 73, 73, 1)"
transform="translate(1117 -962)"
xlinkHref="#d"
/>
</g>
</g>
</g>
</g>
<defs>
<path
d="M 2.5 5C 3.88071 5 5 3.88071 5 2.5C 5 1.11929 3.88071 0 2.5 0C 1.11929 0 0 1.11929 0 2.5C 0 3.88071 1.11929 5 2.5 5Z"
id="c"
/>
<path
d="M 2.5 1C 3.3 1 4 1.7 4 2.5C 4 3.3 3.3 4 2.5 4C 1.7 4 1 3.3 1 2.5C 1 1.7 1.7 1 2.5 1ZM 2.5 0C 1.1 0 0 1.1 0 2.5C 0 3.9 1.1 5 2.5 5C 3.9 5 5 3.9 5 2.5C 5 1.1 3.9 0 2.5 0Z"
id="d"
/>
</defs>
</svg>
</div>
</div>
<div
className="c20"
>
<p
className="c17"
>
0 instances
</p>
</div>
</div>
</div>
</div>
</div> </div>
<div <div
className="c23" className="c22"
> >
<div <div
className="c24" className="c23"
disabled={false} disabled={false}
name="card" name="card"
> >
<div <div
className="c25" className="c24"
disabled={false} disabled={false}
name="card-header" name="card-header"
onClick={[Function]} onClick={[Function]}
> >
<div <div
className="c26" className="c25"
disabled={false} disabled={false}
name="card-header-meta" name="card-header-meta"
> >
<div <div
className="c27" className="c26"
> >
<p <p
className="c17" className="c16"
> >
Network information Network information
</p> </p>
@ -2462,12 +2301,12 @@ Array [
name="card" name="card"
> >
<div <div
className="c28" className="c27"
disabled={false} disabled={false}
name="card-header" name="card-header"
> >
<div <div
className="c29" className="c28"
disabled={false} disabled={false}
name="card-header-box" name="card-header-box"
> >
@ -2505,54 +2344,50 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c30" className="c29"
disabled={false} disabled={false}
name="card-header-meta" name="card-header-meta"
> >
<div <h4
className="c12" className="c30"
> >
<h4 name2
className="c31" </h4>
>
name2
</h4>
</div>
</div> </div>
</div> </div>
<div <div
className="c14" className="c13"
name="card-outlet" name="card-outlet"
> >
<div <div
className="c15" className="c14"
> >
<div <div
className="c16" className="c15"
> >
<p <p
className="c17" className="c16"
> >
description2 description2
</p> </p>
</div> </div>
<div <div
className="c18" className="c17"
> >
<div <div
className="c19" className="c18"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c21" className="c20"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c22" className="c21"
> >
<svg <svg
className="" className=""
@ -2575,10 +2410,10 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c20" className="c19"
> >
<p <p
className="c17" className="c16"
> >
Private Private
</p> </p>
@ -2587,19 +2422,19 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c19" className="c18"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c21" className="c20"
> >
<div <div
className="c20" className="c19"
> >
<div <div
className="c22" className="c21"
> >
<svg <svg
height="13" height="13"
@ -2615,10 +2450,10 @@ Array [
</div> </div>
</div> </div>
<div <div
className="c20" className="c19"
> >
<p <p
className="c17" className="c16"
> >
Data center network Data center network
</p> </p>
@ -2709,11 +2544,6 @@ Array [
background-color: rgb(59,70,204); background-color: rgb(59,70,204);
border-radius: 0.25rem; border-radius: 0.25rem;
border: solid 0.0625rem rgb(45,56,132); border: solid 0.0625rem rgb(45,56,132);
cursor: not-allowed;
pointer-events: none;
color: rgb(216,216,216);
background-color: rgb(250,250,250);
border-color: rgb(216,216,216);
} }
.c1:focus { .c1:focus {
@ -2742,23 +2572,6 @@ Array [
pointer-events: none; pointer-events: none;
} }
.c1:focus {
background-color: rgb(250,250,250);
border-color: rgb(216,216,216);
}
.c1:hover {
background-color: rgb(250,250,250);
border-color: rgb(250,250,250);
}
.c1:active,
.c1:active:hover,
.c1:active:focus {
background-color: rgb(250,250,250);
border-color: rgb(250,250,250);
}
.c0 { .c0 {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
@ -2768,7 +2581,6 @@ Array [
> >
<button <button
className="c1 c2 c3" className="c1 c2 c3"
disabled={true}
href="" href=""
onClick={undefined} onClick={undefined}
type="button" type="button"
@ -2879,6 +2691,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div

View File

@ -100,6 +100,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -250,6 +251,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -1755,6 +1757,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div
@ -2242,6 +2245,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -2392,6 +2396,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div

View File

@ -100,6 +100,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -1214,6 +1215,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -2634,6 +2636,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -3090,6 +3093,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -4302,6 +4306,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -5656,6 +5661,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={undefined} onClick={undefined}
> >
<div <div
@ -7010,6 +7016,7 @@ Array [
<div <div
className="" className=""
id={undefined}
onClick={false} onClick={false}
> >
<div <div

View File

@ -12,8 +12,9 @@ import { AffinityIcon, Button, H3, Divider } from 'joyent-ui-toolkit';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import { Rule, Header } from '@components/create-instance/affinity'; import { Rule, Header } from '@components/create-instance/affinity';
import Description from '@components/description';
import KeyValue from '@components/key-value'; import KeyValue from '@components/key-value';
import Description from '@components/description';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
const FORM_NAME_CREATE = 'CREATE-INSTANCE-AFFINITY-ADD'; const FORM_NAME_CREATE = 'CREATE-INSTANCE-AFFINITY-ADD';
const FORM_NAME_EDIT = i => `CREATE-INSTANCE-AFFINITY-EDIT-${i}`; const FORM_NAME_EDIT = i => `CREATE-INSTANCE-AFFINITY-EDIT-${i}`;
@ -43,10 +44,12 @@ export const Affinity = ({
handleChangeAddOpen, handleChangeAddOpen,
handleNext, handleNext,
handleEdit, handleEdit,
rule rule,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !proceeded && handleEdit} onClick={!expanded && !proceeded && handleEdit}
icon={<AffinityIcon />} icon={<AffinityIcon />}
> >
@ -149,6 +152,7 @@ export const Affinity = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect(({ values, form }, ownProps) => ({ connect(({ values, form }, ownProps) => ({
proceeded: get(values, 'create-instance-affinity-proceeded', false), proceeded: get(values, 'create-instance-affinity-proceeded', false),
addOpen: get(values, 'create-instance-affinity-add-open', false), addOpen: get(values, 'create-instance-affinity-add-open', false),

View File

@ -0,0 +1,60 @@
import React, { Component } from 'react';
import scrollToElement from 'scroll-to-element';
import ReactDOM from 'react-dom';
const ANIMATION_TIME = 400;
function slideDown(el, timing) {
const { style } = el;
const INITIAL = 'initial';
const HIDDEN = 'hidden';
timing = timing || `${ANIMATION_TIME}ms ease-out`;
// Get element height
style.transition = INITIAL;
style.visibility = HIDDEN;
style.maxHeight = INITIAL;
const height = el.offsetHeight + 'px';
style.removeProperty('visibility');
style.maxHeight = '0';
style.overflow = HIDDEN;
// Begin transition
style.transition = `max-height ${timing}, opacity ${timing}`;
requestAnimationFrame(() => {
style.maxHeight = height;
style.opacity = '1';
});
window.setTimeout(() => {
style.removeProperty('overflow');
style.removeProperty('max-height');
}, 300);
}
const AnimatedWrapper = WrappedComponent =>
class AnimatedWrapper extends Component {
componentDidUpdate() {
const { match, step } = this.props;
if (match.params.step === step) {
slideDown(this.wrapper);
scrollToElement(this.wrapper, {
offset: -50
});
}
}
render() {
return (
<div
ref={w => {
this.wrapper = w;
}}
>
<WrappedComponent {...this.props} />
</div>
);
}
};
export default AnimatedWrapper;

View File

@ -14,6 +14,7 @@ import Cns, { Footer, AddServiceForm } from '@components/cns';
import Tag from '@components/tags'; import Tag from '@components/tags';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Description from '@components/description'; import Description from '@components/description';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import GetAccount from '@graphql/get-account.gql'; import GetAccount from '@graphql/get-account.gql';
const CNS_FORM = 'create-instance-cns'; const CNS_FORM = 'create-instance-cns';
@ -30,10 +31,15 @@ const CNSContainer = ({
handleEdit, handleEdit,
handleToggleCnsEnabled, handleToggleCnsEnabled,
handleAddService, handleAddService,
handleRemoveService handleRemoveService,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title onClick={!expanded && !proceeded && handleEdit} icon={<CnsIcon />}> <Title
id={step}
onClick={!expanded && !proceeded && handleEdit}
icon={<CnsIcon />}
>
Container Name Service Container Name Service
</Title> </Title>
{expanded ? ( {expanded ? (

View File

@ -14,6 +14,7 @@ import { StatusLoader, FirewallIcon, H3, Button } from 'joyent-ui-toolkit';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Description from '@components/description'; import Description from '@components/description';
import FirewallForm from '@components/firewall'; import FirewallForm from '@components/firewall';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import ListFwRules from '@graphql/list-fw-rules.gql'; import ListFwRules from '@graphql/list-fw-rules.gql';
const FORM_NAME = 'CREATE-INSTANCE-FIREWALL'; const FORM_NAME = 'CREATE-INSTANCE-FIREWALL';
@ -26,10 +27,12 @@ const Firewall = ({
loading = false, loading = false,
enabled = false, enabled = false,
handleNext, handleNext,
handleEdit handleEdit,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !proceeded && handleEdit} onClick={!expanded && !proceeded && handleEdit}
icon={<FirewallIcon />} icon={<FirewallIcon />}
> >
@ -94,6 +97,7 @@ const Firewall = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect( connect(
({ form, values }, ownProps) => ({ ({ form, values }, ownProps) => ({
...ownProps, ...ownProps,

View File

@ -17,6 +17,7 @@ import { InstanceTypeIcon, StatusLoader, Button } from 'joyent-ui-toolkit';
import Description from '@components/description'; import Description from '@components/description';
import Image, { Preview, ImageType } from '@components/create-instance/image'; import Image, { Preview, ImageType } from '@components/create-instance/image';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import imageData from '@data/images-map.json'; import imageData from '@data/images-map.json';
import GetImages from '@graphql/get-images.gql'; import GetImages from '@graphql/get-images.gql';
@ -29,10 +30,12 @@ const ImageContainer = ({
handleSelectLatest, handleSelectLatest,
loading, loading,
images, images,
vms vms,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !image.id && handleEdit} onClick={!expanded && !image.id && handleEdit}
icon={<InstanceTypeIcon />} icon={<InstanceTypeIcon />}
> >
@ -103,6 +106,7 @@ const ImageContainer = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect( connect(
({ form, values }, ownProps) => { ({ form, values }, ownProps) => {
return { return {

View File

@ -36,21 +36,42 @@ const CreateInstance = ({ step, disabled, handleSubmit, history, match }) => (
<H2>Create Instances</H2> <H2>Create Instances</H2>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Name history={history} match={match} expanded={step === 'name'} /> <Name
history={history}
match={match}
step="name"
expanded={step === 'name'}
/>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Image history={history} match={match} expanded={step === 'image'} /> <Image
history={history}
match={match}
step="image"
expanded={step === 'image'}
/>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Package history={history} match={match} expanded={step === 'package'} /> <Package
history={history}
match={match}
step="package"
expanded={step === 'package'}
/>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Tags history={history} match={match} expanded={step === 'tags'} /> <Tags
history={history}
match={match}
step="tags"
expanded={step === 'tags'}
/>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Metadata <Metadata
history={history} history={history}
match={match} match={match}
step="metadata"
expanded={step === 'metadata'} expanded={step === 'metadata'}
/> />
</Margin> </Margin>
@ -58,6 +79,7 @@ const CreateInstance = ({ step, disabled, handleSubmit, history, match }) => (
<UserScript <UserScript
history={history} history={history}
match={match} match={match}
step="user-script"
expanded={step === 'user-script'} expanded={step === 'user-script'}
/> />
</Margin> </Margin>
@ -65,6 +87,7 @@ const CreateInstance = ({ step, disabled, handleSubmit, history, match }) => (
<Networks <Networks
history={history} history={history}
match={match} match={match}
step="networks"
expanded={step === 'networks'} expanded={step === 'networks'}
/> />
</Margin> </Margin>
@ -72,16 +95,23 @@ const CreateInstance = ({ step, disabled, handleSubmit, history, match }) => (
<Firewall <Firewall
history={history} history={history}
match={match} match={match}
step="firewall"
expanded={step === 'firewall'} expanded={step === 'firewall'}
/> />
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<CNS history={history} match={match} expanded={step === 'cns'} /> <CNS
history={history}
match={match}
step="cns"
expanded={step === 'cns'}
/>
</Margin> </Margin>
<Margin bottom={4}> <Margin bottom={4}>
<Affinity <Affinity
history={history} history={history}
match={match} match={match}
step="affinity"
expanded={step === 'affinity'} expanded={step === 'affinity'}
/> />
</Margin> </Margin>

View File

@ -12,6 +12,7 @@ import { MetadataIcon, Button, H3 } from 'joyent-ui-toolkit';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Description from '@components/description'; import Description from '@components/description';
import KeyValue from '@components/key-value'; import KeyValue from '@components/key-value';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
const FORM_NAME_CREATE = 'CREATE-INSTANCE-METADATA-ADD'; const FORM_NAME_CREATE = 'CREATE-INSTANCE-METADATA-ADD';
const FORM_NAME_EDIT = i => `CREATE-INSTANCE-METADATA-EDIT-${i}`; const FORM_NAME_EDIT = i => `CREATE-INSTANCE-METADATA-EDIT-${i}`;
@ -28,10 +29,13 @@ export const Metadata = ({
handleCancelEdit, handleCancelEdit,
handleChangeAddOpen, handleChangeAddOpen,
handleNext, handleNext,
handleEdit handleEdit,
id,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !proceeded && handleEdit} onClick={!expanded && !proceeded && handleEdit}
icon={<MetadataIcon />} icon={<MetadataIcon />}
> >
@ -129,6 +133,7 @@ export const Metadata = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect(({ values }, ownProps) => ({ connect(({ values }, ownProps) => ({
proceeded: get(values, 'create-instance-metadata-proceeded', false), proceeded: get(values, 'create-instance-metadata-proceeded', false),
addOpen: get(values, 'create-instance-metadata-add-open', false), addOpen: get(values, 'create-instance-metadata-add-open', false),

View File

@ -14,6 +14,7 @@ import { NameIcon, H3, Button } from 'joyent-ui-toolkit';
import Name from '@components/create-instance/name'; import Name from '@components/create-instance/name';
import Description from '@components/description'; import Description from '@components/description';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import GetInstance from '@graphql/get-instance-small.gql'; import GetInstance from '@graphql/get-instance-small.gql';
import GetRandomName from '@graphql/get-random-name.gql'; import GetRandomName from '@graphql/get-random-name.gql';
import { client } from '@state/store'; import { client } from '@state/store';
@ -30,10 +31,15 @@ const NameContainer = ({
shouldAsyncValidate, shouldAsyncValidate,
handleNext, handleNext,
handleRandomize, handleRandomize,
handleEdit handleEdit,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title onClick={!expanded && !name && handleEdit} icon={<NameIcon />}> <Title
id={step}
onClick={!expanded && !name && handleEdit}
icon={<NameIcon />}
>
Instance name Instance name
</Title> </Title>
{expanded ? ( {expanded ? (
@ -73,6 +79,7 @@ const NameContainer = ({
); );
export default compose( export default compose(
AnimatedWrapper,
graphql(GetRandomName, { graphql(GetRandomName, {
fetchPolicy: 'network-only', fetchPolicy: 'network-only',
props: ({ data }) => ({ props: ({ data }) => ({

View File

@ -10,9 +10,10 @@ import get from 'lodash.get';
import { NetworkIcon, Button, H3, StatusLoader } from 'joyent-ui-toolkit'; import { NetworkIcon, Button, H3, StatusLoader } from 'joyent-ui-toolkit';
import Network from '@components/network';
import Description from '@components/description'; import Description from '@components/description';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Network from '@components/create-instance/network';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import ListNetworks from '@graphql/list-networks.gql'; import ListNetworks from '@graphql/list-networks.gql';
const FORM_NAME = 'CREATE-INSTANCE-NETWORKS'; const FORM_NAME = 'CREATE-INSTANCE-NETWORKS';
@ -26,10 +27,12 @@ export const Networks = ({
setInfoExpanded, setInfoExpanded,
setMachinesExpanded, setMachinesExpanded,
handleNext, handleNext,
handleEdit handleEdit,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !proceeded && handleEdit} onClick={!expanded && !proceeded && handleEdit}
icon={<NetworkIcon />} icon={<NetworkIcon />}
> >
@ -88,7 +91,7 @@ export const Networks = ({
) : null} ) : null}
<Margin bottom={4}> <Margin bottom={4}>
{expanded ? ( {expanded ? (
<Button type="button" disabled={!selected.length} onClick={handleNext}> <Button type="button" onClick={handleNext}>
Next Next
</Button> </Button>
) : proceeded ? ( ) : proceeded ? (
@ -101,6 +104,7 @@ export const Networks = ({
); );
export default compose( export default compose(
AnimatedWrapper,
graphql(ListNetworks, { graphql(ListNetworks, {
props: ({ data }) => { props: ({ data }) => {
const { networks = [], loading = false, error = null, refetch } = data; const { networks = [], loading = false, error = null, refetch } = data;
@ -142,8 +146,22 @@ export default compose(
return { return {
proceeded: get(values, 'create-instance-networks-proceeded', false), proceeded: get(values, 'create-instance-networks-proceeded', false),
selected: _networks.filter(({ selected }) => selected), networks: networks
networks: _networks .map(({ id, name, ...network }) => ({
...network,
name,
selected:
empty(id) && name === 'Joyent-SDC-Public'
? true
: Boolean(selected[id]),
infoExpanded: get(
values,
`create-instance-networks-${id}-expanded`,
false
),
id
}))
.sort((a, b) => a.name < b.name)
}; };
}, },
(dispatch, { history }) => ({ (dispatch, { history }) => ({

View File

@ -13,7 +13,6 @@ import constantCase from 'constant-case';
import { reset } from 'redux-form'; import { reset } from 'redux-form';
import { PackageIcon, StatusLoader } from 'joyent-ui-toolkit'; import { PackageIcon, StatusLoader } from 'joyent-ui-toolkit';
import { import {
Filters, Filters,
Packages, Packages,
@ -21,6 +20,7 @@ import {
Overview Overview
} from '@components/create-instance/package'; } from '@components/create-instance/package';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Description from '@components/description'; import Description from '@components/description';
import getPackages from '@graphql/get-packages.gql'; import getPackages from '@graphql/get-packages.gql';
@ -40,10 +40,12 @@ const PackageContainer = ({
sortOrder, sortOrder,
handleSortBy, handleSortBy,
sortBy, sortBy,
resetFilters resetFilters,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title <Title
id={step}
onClick={!expanded && !selected.id && handleEdit} onClick={!expanded && !selected.id && handleEdit}
icon={<PackageIcon />} icon={<PackageIcon />}
> >
@ -117,6 +119,7 @@ const PackageContainer = ({
); );
export default compose( export default compose(
AnimatedWrapper,
graphql(getPackages, { graphql(getPackages, {
props: ({ data: { loading, packages = [] } }) => ({ props: ({ data: { loading, packages = [] } }) => ({
loading, loading,

View File

@ -10,9 +10,10 @@ import get from 'lodash.get';
import { TagsIcon, Button, H3, TagList } from 'joyent-ui-toolkit'; import { TagsIcon, Button, H3, TagList } from 'joyent-ui-toolkit';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import Tag from '@components/tags';
import KeyValue from '@components/key-value'; import KeyValue from '@components/key-value';
import Description from '@components/description'; import Description from '@components/description';
import Tag from '@components/tags'; import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
const FORM_NAME_CREATE = 'CREATE-INSTANCE-TAGS-ADD'; const FORM_NAME_CREATE = 'CREATE-INSTANCE-TAGS-ADD';
const FORM_NAME_EDIT = i => `CREATE-INSTANCE-TAGS-EDIT-${i}`; const FORM_NAME_EDIT = i => `CREATE-INSTANCE-TAGS-EDIT-${i}`;
@ -29,10 +30,15 @@ export const Tags = ({
handleCancelEdit, handleCancelEdit,
handleChangeAddOpen, handleChangeAddOpen,
handleNext, handleNext,
step,
handleEdit handleEdit
}) => ( }) => (
<Fragment> <Fragment>
<Title onClick={!expanded && !proceeded && handleEdit} icon={<TagsIcon />}> <Title
id={step}
onClick={!expanded && !proceeded && handleEdit}
icon={<TagsIcon />}
>
Tags Tags
</Title> </Title>
{expanded ? ( {expanded ? (
@ -114,6 +120,7 @@ export const Tags = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect(({ values }, ownProps) => ({ connect(({ values }, ownProps) => ({
proceeded: get(values, 'create-instance-tags-proceeded', false), proceeded: get(values, 'create-instance-tags-proceeded', false),
addOpen: get(values, 'create-instance-tags-add-open', false), addOpen: get(values, 'create-instance-tags-add-open', false),

View File

@ -12,6 +12,7 @@ import { ScriptIcon, Button } from 'joyent-ui-toolkit';
import KeyValue from '@components/key-value'; import KeyValue from '@components/key-value';
import Description from '@components/description'; import Description from '@components/description';
import Title from '@components/create-instance/title'; import Title from '@components/create-instance/title';
import AnimatedWrapper from '@containers/create-instance/animatedWrapper';
const FORM_NAME = 'create-instance-user-script'; const FORM_NAME = 'create-instance-user-script';
@ -26,10 +27,11 @@ export const UserScript = ({
handleSubmit, handleSubmit,
handleRemove, handleRemove,
handleNext, handleNext,
handleEdit handleEdit,
step
}) => ( }) => (
<Fragment> <Fragment>
<Title onClick={!proceeded && handleEdit} icon={<ScriptIcon />}> <Title id={step} onClick={!proceeded && handleEdit} icon={<ScriptIcon />}>
User Script User Script
</Title> </Title>
{expanded ? ( {expanded ? (
@ -90,6 +92,7 @@ export const UserScript = ({
); );
export default compose( export default compose(
AnimatedWrapper,
connect( connect(
({ values }, ownProps) => { ({ values }, ownProps) => {
const script = get(values, 'create-instance-user-script', { const script = get(values, 'create-instance-user-script', {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -3,5 +3,6 @@ module.exports = {
'^redux-form$': '<rootDir>/src/mocks/redux-form', '^redux-form$': '<rootDir>/src/mocks/redux-form',
'^react-responsive$': '<rootDir>/src/mocks/react-responsive', '^react-responsive$': '<rootDir>/src/mocks/react-responsive',
'^react-router-dom$': '<rootDir>/src/mocks/react-router-dom', '^react-router-dom$': '<rootDir>/src/mocks/react-router-dom',
'^declarative-redux-form$': '<rootDir>/src/mocks/declarative-redux-form' '^declarative-redux-form$': '<rootDir>/src/mocks/declarative-redux-form',
'^scroll-to-element': '<rootDir>/src/mocks/scroll-to-element'
}; };

View File

@ -0,0 +1 @@
export default () => null;

View File

@ -38,7 +38,7 @@
"react-styled-flexboxgrid": "^2.1.1", "react-styled-flexboxgrid": "^2.1.1",
"remcalc": "^1.0.10", "remcalc": "^1.0.10",
"rnd-id": "^2.0.2", "rnd-id": "^2.0.2",
"styled-components": "^3.1.2", "styled-components": "^3.1.4",
"styled-is": "^1.1.2", "styled-is": "^1.1.2",
"unitcalc": "^1.1.2" "unitcalc": "^1.1.2"
}, },

View File

@ -28,7 +28,7 @@
"react-scripts": "1.0.17", "react-scripts": "1.0.17",
"redux": "^3.7.2", "redux": "^3.7.2",
"redux-form": "^7.1.2", "redux-form": "^7.1.2",
"styled-components": "^2.3.0" "styled-components": "^3.1.4"
}, },
"devDependencies": { "devDependencies": {
"babel-preset-joyent-portal": "^6.0.1", "babel-preset-joyent-portal": "^6.0.1",

View File

@ -2565,10 +2565,41 @@ compare-func@^1.3.1:
array-ify "^1.0.0" array-ify "^1.0.0"
dot-prop "^3.0.0" dot-prop "^3.0.0"
component-clone@0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/component-clone/-/component-clone-0.2.2.tgz#c7f5979822880fad8cfb0962ba29186d061ee04f"
dependencies:
component-type "*"
component-emitter@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
component-emitter@^1.2.1: component-emitter@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
component-raf@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-raf/-/component-raf-1.2.0.tgz#b2bc72d43f1b014fde7a4b3c447c764bc73ccbaa"
component-tween@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-tween/-/component-tween-1.2.0.tgz#cc39ce5dbab05b52825f41d1947638a0b01b2b8a"
dependencies:
component-clone "0.2.2"
component-emitter "1.2.0"
component-type "1.1.0"
ease-component "1.0.0"
component-type@*:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9"
component-type@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.1.0.tgz#95b666aad53e5c8d1f2be135c45b5d499197c0c5"
compressible@~2.0.11: compressible@~2.0.11:
version "2.0.12" version "2.0.12"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
@ -3518,6 +3549,10 @@ duplicate-package-checker-webpack-plugin@^2.1.0:
lodash "^4.17.4" lodash "^4.17.4"
semver "^5.4.1" semver "^5.4.1"
ease-component@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ease-component/-/ease-component-1.0.0.tgz#b375726db0b5b04595b77440396fec7daa5d77c9"
ecc-jsbn@~0.1.1: ecc-jsbn@~0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@ -9694,6 +9729,19 @@ schema-utils@^0.4.2:
ajv "^5.0.0" ajv "^5.0.0"
ajv-keywords "^2.1.0" ajv-keywords "^2.1.0"
scroll-to-element@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/scroll-to-element/-/scroll-to-element-2.0.0.tgz#3467330e3384743b7295ac64b30279990c5ac164"
dependencies:
scroll-to "0.0.2"
scroll-to@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/scroll-to/-/scroll-to-0.0.2.tgz#936d398a9133660a2492145c2c0081dfcb0728f3"
dependencies:
component-raf "1.2.0"
component-tween "1.2.0"
select-hose@^2.0.0: select-hose@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@ -10306,9 +10354,9 @@ styled-components-spacing@^2.1.3:
react-create-component-from-tag-prop "^1.2.1" react-create-component-from-tag-prop "^1.2.1"
styled-components-breakpoint "^1.0.0-preview.3" styled-components-breakpoint "^1.0.0-preview.3"
styled-components@2.2.4, styled-components@3.1.3, styled-components@^3.1.2: styled-components@2.2.4, styled-components@3.1.4, styled-components@^3.1.4:
version "3.1.3" version "3.1.4"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.3.tgz#dae16953fdfc694b7341c43934145c360da0accb" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.4.tgz#1bdc1409c9bacafee3510c573d23b73039b0d875"
dependencies: dependencies:
buffer "^5.0.3" buffer "^5.0.3"
css-to-react-native "^2.0.3" css-to-react-native "^2.0.3"