조민지

feat: 킥보드 페이지 데이터 구성

...@@ -4920,6 +4920,12 @@ ...@@ -4920,6 +4920,12 @@
4920 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", 4920 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz",
4921 "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==" 4921 "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg=="
4922 }, 4922 },
4923 + "element-resize-event": {
4924 + "version": "2.0.9",
4925 + "resolved": "https://registry.npmjs.org/element-resize-event/-/element-resize-event-2.0.9.tgz",
4926 + "integrity": "sha1-L14VgaKW61J1IQwUG8VjQuIY+HY=",
4927 + "dev": true
4928 + },
4923 "elliptic": { 4929 "elliptic": {
4924 "version": "6.5.2", 4930 "version": "6.5.2",
4925 "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", 4931 "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
...@@ -9774,6 +9780,11 @@ ...@@ -9774,6 +9780,11 @@
9774 "minimist": "^1.2.5" 9780 "minimist": "^1.2.5"
9775 } 9781 }
9776 }, 9782 },
9783 + "moment": {
9784 + "version": "2.26.0",
9785 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz",
9786 + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw=="
9787 + },
9777 "move-concurrently": { 9788 "move-concurrently": {
9778 "version": "1.0.1", 9789 "version": "1.0.1",
9779 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", 9790 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
...@@ -12017,6 +12028,15 @@ ...@@ -12017,6 +12028,15 @@
12017 } 12028 }
12018 } 12029 }
12019 }, 12030 },
12031 + "react-dimensions": {
12032 + "version": "1.3.1",
12033 + "resolved": "https://registry.npmjs.org/react-dimensions/-/react-dimensions-1.3.1.tgz",
12034 + "integrity": "sha512-go5vMuGUxaB5PiTSIk+ZfAxLbHwcIgIfLhkBZ2SIMQjaCgnpttxa30z5ijEzfDjeOCTGRpxvkzcmE4Vt4Ppvyw==",
12035 + "dev": true,
12036 + "requires": {
12037 + "element-resize-event": "^2.0.4"
12038 + }
12039 + },
12020 "react-dom": { 12040 "react-dom": {
12021 "version": "16.8.6", 12041 "version": "16.8.6",
12022 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", 12042 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz",
...@@ -12061,6 +12081,11 @@ ...@@ -12061,6 +12081,11 @@
12061 "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", 12081 "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
12062 "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" 12082 "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
12063 }, 12083 },
12084 + "react-moment": {
12085 + "version": "0.9.7",
12086 + "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-0.9.7.tgz",
12087 + "integrity": "sha512-ifzUrUGF6KRsUN2pRG5k56kO0mJBr8kRkWb0wNvtFIsBIxOuPxhUpL1YlXwpbQCbHq23hUu6A0VEk64HsFxk9g=="
12088 + },
12064 "react-notification-system": { 12089 "react-notification-system": {
12065 "version": "0.2.17", 12090 "version": "0.2.17",
12066 "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.17.tgz", 12091 "resolved": "https://registry.npmjs.org/react-notification-system/-/react-notification-system-0.2.17.tgz",
......
...@@ -5,12 +5,14 @@ ...@@ -5,12 +5,14 @@
5 "dependencies": { 5 "dependencies": {
6 "bootstrap": "3.3.7", 6 "bootstrap": "3.3.7",
7 "chartist": "0.10.1", 7 "chartist": "0.10.1",
8 + "moment": "^2.26.0",
8 "node-sass": "4.12.0", 9 "node-sass": "4.12.0",
9 "react": "16.8.6", 10 "react": "16.8.6",
10 "react-bootstrap": "0.32.4", 11 "react-bootstrap": "0.32.4",
11 "react-chartist": "0.13.3", 12 "react-chartist": "0.13.3",
12 "react-dom": "16.8.6", 13 "react-dom": "16.8.6",
13 "react-google-maps": "9.4.5", 14 "react-google-maps": "9.4.5",
15 + "react-moment": "^0.9.7",
14 "react-notification-system": "0.2.17", 16 "react-notification-system": "0.2.17",
15 "react-router": "5.0.0", 17 "react-router": "5.0.0",
16 "react-router-dom": "5.0.0", 18 "react-router-dom": "5.0.0",
...@@ -21,6 +23,7 @@ ...@@ -21,6 +23,7 @@
21 "@types/googlemaps": "3.30.19", 23 "@types/googlemaps": "3.30.19",
22 "@types/markerclustererplus": "2.1.33", 24 "@types/markerclustererplus": "2.1.33",
23 "@types/react": "16.8.13", 25 "@types/react": "16.8.13",
26 + "react-dimensions": "^1.3.1",
24 "typescript": "3.4.3" 27 "typescript": "3.4.3"
25 }, 28 },
26 "scripts": { 29 "scripts": {
......
1 +import React, {useEffect} from "react";
2 +import Dimensions from "react-dimensions";
3 +
4 +let map, infoWindow;
5 +
6 +const GoogleMap = (props) => {
7 + useEffect(() => {
8 + console.log('mount');
9 + const { google } = window;
10 +
11 + infoWindow = new window.google.maps.InfoWindow({});
12 +
13 + map = new google.maps.Map(document.getElementById("map"), {
14 + zoom: 11,
15 + center: {lat: -34.397, lng: 150.644},
16 + disableDefaultUI: true,
17 + zoomControl: true
18 + });
19 + }, []);
20 +
21 + return (
22 + <div id="map" style={{height:props.containerWidth, backgroundColor:'pink'}}>
23 + </div>
24 + )
25 +};
26 +
27 +export default Dimensions()(GoogleMap) // Enhanced component
...\ No newline at end of file ...\ No newline at end of file
1 +import React from "react";
2 +import { Card } from "components/Card/Card.jsx";
3 +import Dimensions from 'react-dimensions'
4 +import moment from 'moment';
5 +import GoogleMap from './GoogleMap';
6 +
7 +const GoogleMapCard = (props) => {
8 + const getStats = `마지막 업데이트 ${moment().format("YYYY/MM/DD hh:mm")}`;
9 +
10 + return (
11 + <Card
12 + id="chartActivity"
13 + title="서비스 현황"
14 + category="All products including Taxes"
15 + stats={getStats}
16 + statsIcon="fa fa-history"
17 + content={
18 + <GoogleMap/>
19 + }
20 + />
21 + );
22 +};
23 +
24 +export default GoogleMapCard // Enhanced component
...\ No newline at end of file ...\ No newline at end of file
1 +import React from "react";
2 +import {Table} from "react-bootstrap";
3 +import { Card } from "components/Card/Card.jsx";
4 +
5 +import { tdArray } from "variables/Variables.jsx";
6 +
7 +const thArray = ['유저ID', '대여 시각', '반납 시각', '대여 시간', '이동 거리', '대여 금액'];
8 +
9 +const KickboardHistoryTable = () => {
10 +
11 + return (
12 + <Card
13 + title="Striped Table with Hover"
14 + category="Here is a subtitle for this table"
15 + ctTableFullWidth
16 + ctTableResponsive
17 + content={
18 + <Table striped hover>
19 + <thead>
20 + <tr>
21 + {thArray.map((prop, key) => {
22 + return <th key={key}>{prop}</th>;
23 + })}
24 + </tr>
25 + </thead>
26 + <tbody>
27 + {tdArray.map((prop, key) => {
28 + return (
29 + <tr key={key}>
30 + {prop.map((prop, key) => {
31 + return <td key={key}>{prop}</td>;
32 + })}
33 + </tr>
34 + );
35 + })}
36 + </tbody>
37 + </Table>
38 + }
39 + />
40 + )
41 +};
42 +
43 +export default KickboardHistoryTable;
44 +
1 +import React from "react";
2 +import { Card } from "components/Card/Card.jsx";
3 +import {Col, Row} from "react-bootstrap";
4 +import styled from "styled-components"
5 +import moment from "moment";
6 +
7 +// border: 1px solid #E3E3E3;
8 +const KickboardButton = styled.div`
9 + background-color: #e7e7e7;
10 + border-radius: 4px;
11 + color: #565656;
12 + padding: 8px 12px;
13 + height: 40px;
14 + box-shadow: none;
15 + margin: 0 auto;
16 + text-align: center;
17 + margin-bottom: 10px;
18 +
19 + &:hover {
20 + background-color: #565656;
21 + color: white;
22 + cursor: pointer;
23 + }
24 +`;
25 +
26 +const KickboardDataList = styled.ul`
27 + font-size: 16px;
28 +`;
29 +
30 +const KickboardData = styled.li`
31 + padding: 3px 0;
32 +`;
33 +
34 +const kickboardDataKey = {
35 + a: '배터리',
36 + b: '킥보드 위치',
37 + c: '킥보드 상태',
38 + d: '킥보드 자세 여부',
39 + e: '총 누적 이동 거리',
40 + f: '총 누적 대여 시간',
41 + g: '신호 양호 여부',
42 + h: '현재 네트워크 연결 여부',
43 + i: '최근 gps 업데이트 시각',
44 + j: '최근 연결 업데이트 시각',
45 + k: '모델명',
46 + l: '최근 업데이트 시각',
47 +};
48 +
49 +const KickboardStatusCard = () => {
50 + const getStats = `마지막 업데이트 ${moment().format("YYYY/MM/DD hh:mm")}`;
51 +
52 + return (
53 + <Card
54 + title={'000000번 킥보드'}
55 + stats={getStats}
56 + statsIcon="fa fa-history"
57 + content={
58 + <Row>
59 + <Col md={4} sm={4} xs={4}>
60 + <KickboardButton>경적 울리기</KickboardButton>
61 + </Col>
62 + <Col md={4} sm={4} xs={4}>
63 + <KickboardButton>반납하기</KickboardButton>
64 + </Col>
65 + <Col md={4} sm={4} xs={4}>
66 + <KickboardButton>운행 종료하기</KickboardButton>
67 + </Col>
68 + <KickboardDataList>
69 + {
70 + Object.keys(kickboardDataKey).map(key => {
71 + return <KickboardData>{kickboardDataKey[key]} : {key}</KickboardData>
72 + })
73 + }
74 + </KickboardDataList>
75 + </Row>
76 + }
77 + >
78 + </Card>
79 + );
80 +};
81 +
82 +export default KickboardStatusCard;
...\ No newline at end of file ...\ No newline at end of file
1 +import React from "react";
2 +import styled from "styled-components";
3 +
4 +const SearchButtonWrapper = styled.div`
5 + display: flex;
6 + flex-direction: row;
7 + justify-content: space-between;
8 +`;
9 +
10 +const SearchInput = styled.input`
11 + width: 80%;
12 +`;
13 +
14 +const ApplyButton = styled.div`
15 + width: 17%;
16 + background-color: #e7e7e7;
17 + border-radius: 4px;
18 + color: #565656;
19 + text-align: center;
20 +
21 + display: flex;
22 + justify-content: center;
23 + align-items: center;
24 +
25 + &:hover {
26 + background-color: #565656;
27 + color: white;
28 + cursor: pointer;
29 +`;
30 +
31 +
32 +
33 +const SearchButton = () => {
34 + return (
35 + <SearchButtonWrapper>
36 + <SearchInput type="text" className="form-control" placeholder={"킥보드 번호로 검색하기"}/>
37 + <ApplyButton><span>검색</span></ApplyButton>
38 + </SearchButtonWrapper>
39 + );
40 +};
41 +
42 +export default SearchButton;
43 +
44 +
...@@ -268,12 +268,12 @@ var style = { ...@@ -268,12 +268,12 @@ var style = {
268 // 268 //
269 const thArray = ["ID", "Name", "Salary", "Country", "City"]; 269 const thArray = ["ID", "Name", "Salary", "Country", "City"];
270 const tdArray = [ 270 const tdArray = [
271 - ["1", "Dakota Rice", "$36,738", "Niger", "Oud-Turnhout"], 271 + ["1", "Dakota Rice", "$36,738", "Niger", "Oud-Turnhout", '1'],
272 - ["2", "Minerva Hooper", "$23,789", "Curaçao", "Sinaai-Waas"], 272 + ["2", "Minerva Hooper", "$23,789", "Curaçao", "Sinaai-Waas", '1'],
273 - ["3", "Sage Rodriguez", "$56,142", "Netherlands", "Baileux"], 273 + ["3", "Sage Rodriguez", "$56,142", "Netherlands", "Baileux", '1'],
274 - ["4", "Philip Chaney", "$38,735", "Korea, South", "Overland Park"], 274 + ["4", "Philip Chaney", "$38,735", "Korea, South", "Overland Park", '1'],
275 - ["5", "Doris Greene", "$63,542", "Malawi", "Feldkirchen in Kärnten"], 275 + ["5", "Doris Greene", "$63,542", "Malawi", "Feldkirchen in Kärnten", '1'],
276 - ["6", "Mason Porter", "$78,615", "Chile", "Gloucester"] 276 + ["6", "Mason Porter", "$78,615", "Chile", "Gloucester", '1']
277 ]; 277 ];
278 278
279 // 279 //
......
1 import React from "react"; 1 import React from "react";
2 -import ChartistGraph from "react-chartist"; 2 +import {Grid, Row, Col} from "react-bootstrap";
3 -import {Grid, Row, Col, Table} from "react-bootstrap"; 3 +
4 -import { Card } from "components/Card/Card.jsx"; 4 +import GoogleMapCard from '../components/Kickboard/GoogleMapCard';
5 -import { Tasks } from "components/Tasks/Tasks.jsx"; 5 +import KickboardStatusCard from '../components/Kickboard/KickboardStatusCard';
6 -import { 6 +import KickboardHistoryTable from '../components/Kickboard/KickboardHistoryTable';
7 - dataBar, 7 +import SearchButton from '../components/Kickboard/SearchButton';
8 - optionsBar,
9 - responsiveBar,
10 -} from "variables/Variables.jsx";
11 -import { thArray, tdArray } from "variables/Variables.jsx";
12 8
13 const Kickboard = () => { 9 const Kickboard = () => {
10 + // 여기 API 요청
14 return ( 11 return (
15 <div className="content"> 12 <div className="content">
16 <Grid fluid> 13 <Grid fluid>
17 <Row> 14 <Row>
18 - <Col md={3} mdOffset={9} sm={3} smOffset={9} style={{marginBottom:15}}> 15 + <Col md={4} mdOffset={8} sm={3} smOffset={9} style={{marginBottom:15}}>
19 - <input type="text" className="form-control" placeholder={"킥보드 번호로 검색하기"}/> 16 + <SearchButton/>
20 </Col> 17 </Col>
21 </Row> 18 </Row>
22 <Row> 19 <Row>
23 <Col md={6}> 20 <Col md={6}>
24 - <Card 21 + <GoogleMapCard/>
25 - id="chartActivity"
26 - title="2014 Sales"
27 - category="All products including Taxes"
28 - stats="마지막 업데이트 2020/04/20 17:23"
29 - statsIcon="fa fa-check"
30 - content={
31 - <div className="ct-chart">
32 - <ChartistGraph
33 - data={dataBar}
34 - type="Bar"
35 - options={optionsBar}
36 - responsiveOptions={responsiveBar}
37 - />
38 - </div>
39 - }
40 - />
41 </Col> 22 </Col>
42 <Col md={6}> 23 <Col md={6}>
43 - <Card 24 + <KickboardStatusCard/>
44 - title="Tasks"
45 - category="Backend development"
46 - stats="Updated 3 minutes ago"
47 - statsIcon="fa fa-history"
48 - content={
49 - <div className="table-full-width">
50 - <table className="table">
51 - <Tasks />
52 - </table>
53 - </div>
54 - }
55 - />
56 </Col> 25 </Col>
57 </Row> 26 </Row>
58 <Row> 27 <Row>
59 <Col md={12}> 28 <Col md={12}>
60 - <Card 29 + <KickboardHistoryTable/>
61 - title="Striped Table with Hover"
62 - category="Here is a subtitle for this table"
63 - ctTableFullWidth
64 - ctTableResponsive
65 - content={
66 - <Table striped>
67 - <thead>
68 - <tr>
69 - {thArray.map((prop, key) => {
70 - return <th key={key}>{prop}</th>;
71 - })}
72 - </tr>
73 - </thead>
74 - <tbody>
75 - {tdArray.map((prop, key) => {
76 - return (
77 - <tr key={key}>
78 - {prop.map((prop, key) => {
79 - return <td key={key}>{prop}</td>;
80 - })}
81 - </tr>
82 - );
83 - })}
84 - </tbody>
85 - </Table>
86 - }
87 - />
88 </Col> 30 </Col>
89 </Row> 31 </Row>
90 </Grid> 32 </Grid>
......
...@@ -21,6 +21,11 @@ import { Grid, Row, Col, Alert } from "react-bootstrap"; ...@@ -21,6 +21,11 @@ import { Grid, Row, Col, Alert } from "react-bootstrap";
21 import Button from "components/CustomButton/CustomButton.jsx"; 21 import Button from "components/CustomButton/CustomButton.jsx";
22 22
23 class Notifications extends Component { 23 class Notifications extends Component {
24 + constructor(props) {
25 + super(props);
26 + console.log(this.props);
27 + }
28 +
24 render() { 29 render() {
25 return ( 30 return (
26 <div className="content"> 31 <div className="content">
......
1 +{
2 + "requires": true,
3 + "lockfileVersion": 1,
4 + "dependencies": {
5 + "@babel/code-frame": {
6 + "version": "7.8.3",
7 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
8 + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
9 + "requires": {
10 + "@babel/highlight": "^7.8.3"
11 + }
12 + },
13 + "@babel/generator": {
14 + "version": "7.9.6",
15 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz",
16 + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==",
17 + "requires": {
18 + "@babel/types": "^7.9.6",
19 + "jsesc": "^2.5.1",
20 + "lodash": "^4.17.13",
21 + "source-map": "^0.5.0"
22 + }
23 + },
24 + "@babel/helper-annotate-as-pure": {
25 + "version": "7.8.3",
26 + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
27 + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
28 + "requires": {
29 + "@babel/types": "^7.8.3"
30 + }
31 + },
32 + "@babel/helper-function-name": {
33 + "version": "7.9.5",
34 + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
35 + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
36 + "requires": {
37 + "@babel/helper-get-function-arity": "^7.8.3",
38 + "@babel/template": "^7.8.3",
39 + "@babel/types": "^7.9.5"
40 + }
41 + },
42 + "@babel/helper-get-function-arity": {
43 + "version": "7.8.3",
44 + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
45 + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
46 + "requires": {
47 + "@babel/types": "^7.8.3"
48 + }
49 + },
50 + "@babel/helper-module-imports": {
51 + "version": "7.8.3",
52 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
53 + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
54 + "requires": {
55 + "@babel/types": "^7.8.3"
56 + }
57 + },
58 + "@babel/helper-split-export-declaration": {
59 + "version": "7.8.3",
60 + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
61 + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
62 + "requires": {
63 + "@babel/types": "^7.8.3"
64 + }
65 + },
66 + "@babel/helper-validator-identifier": {
67 + "version": "7.9.5",
68 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
69 + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g=="
70 + },
71 + "@babel/highlight": {
72 + "version": "7.9.0",
73 + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
74 + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
75 + "requires": {
76 + "@babel/helper-validator-identifier": "^7.9.0",
77 + "chalk": "^2.0.0",
78 + "js-tokens": "^4.0.0"
79 + }
80 + },
81 + "@babel/parser": {
82 + "version": "7.9.6",
83 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz",
84 + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q=="
85 + },
86 + "@babel/template": {
87 + "version": "7.8.6",
88 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
89 + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
90 + "requires": {
91 + "@babel/code-frame": "^7.8.3",
92 + "@babel/parser": "^7.8.6",
93 + "@babel/types": "^7.8.6"
94 + }
95 + },
96 + "@babel/traverse": {
97 + "version": "7.9.6",
98 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz",
99 + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==",
100 + "requires": {
101 + "@babel/code-frame": "^7.8.3",
102 + "@babel/generator": "^7.9.6",
103 + "@babel/helper-function-name": "^7.9.5",
104 + "@babel/helper-split-export-declaration": "^7.8.3",
105 + "@babel/parser": "^7.9.6",
106 + "@babel/types": "^7.9.6",
107 + "debug": "^4.1.0",
108 + "globals": "^11.1.0",
109 + "lodash": "^4.17.13"
110 + }
111 + },
112 + "@babel/types": {
113 + "version": "7.9.6",
114 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz",
115 + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==",
116 + "requires": {
117 + "@babel/helper-validator-identifier": "^7.9.5",
118 + "lodash": "^4.17.13",
119 + "to-fast-properties": "^2.0.0"
120 + }
121 + },
122 + "@emotion/is-prop-valid": {
123 + "version": "0.8.8",
124 + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
125 + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
126 + "requires": {
127 + "@emotion/memoize": "0.7.4"
128 + }
129 + },
130 + "@emotion/memoize": {
131 + "version": "0.7.4",
132 + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
133 + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw=="
134 + },
135 + "@emotion/stylis": {
136 + "version": "0.8.5",
137 + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
138 + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ=="
139 + },
140 + "@emotion/unitless": {
141 + "version": "0.7.5",
142 + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
143 + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
144 + },
145 + "ansi-styles": {
146 + "version": "3.2.1",
147 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
148 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
149 + "requires": {
150 + "color-convert": "^1.9.0"
151 + }
152 + },
153 + "babel-plugin-styled-components": {
154 + "version": "1.10.7",
155 + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz",
156 + "integrity": "sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg==",
157 + "requires": {
158 + "@babel/helper-annotate-as-pure": "^7.0.0",
159 + "@babel/helper-module-imports": "^7.0.0",
160 + "babel-plugin-syntax-jsx": "^6.18.0",
161 + "lodash": "^4.17.11"
162 + }
163 + },
164 + "babel-plugin-syntax-jsx": {
165 + "version": "6.18.0",
166 + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
167 + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
168 + },
169 + "camelize": {
170 + "version": "1.0.0",
171 + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
172 + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
173 + },
174 + "chalk": {
175 + "version": "2.4.2",
176 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
177 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
178 + "requires": {
179 + "ansi-styles": "^3.2.1",
180 + "escape-string-regexp": "^1.0.5",
181 + "supports-color": "^5.3.0"
182 + }
183 + },
184 + "color-convert": {
185 + "version": "1.9.3",
186 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
187 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
188 + "requires": {
189 + "color-name": "1.1.3"
190 + }
191 + },
192 + "color-name": {
193 + "version": "1.1.3",
194 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
195 + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
196 + },
197 + "css-color-keywords": {
198 + "version": "1.0.0",
199 + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
200 + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
201 + },
202 + "css-to-react-native": {
203 + "version": "3.0.0",
204 + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
205 + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==",
206 + "requires": {
207 + "camelize": "^1.0.0",
208 + "css-color-keywords": "^1.0.0",
209 + "postcss-value-parser": "^4.0.2"
210 + }
211 + },
212 + "debug": {
213 + "version": "4.1.1",
214 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
215 + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
216 + "requires": {
217 + "ms": "^2.1.1"
218 + }
219 + },
220 + "escape-string-regexp": {
221 + "version": "1.0.5",
222 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
223 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
224 + },
225 + "globals": {
226 + "version": "11.12.0",
227 + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
228 + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
229 + },
230 + "has-flag": {
231 + "version": "3.0.0",
232 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
233 + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
234 + },
235 + "hoist-non-react-statics": {
236 + "version": "3.3.2",
237 + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
238 + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
239 + "requires": {
240 + "react-is": "^16.7.0"
241 + }
242 + },
243 + "js-tokens": {
244 + "version": "4.0.0",
245 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
246 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
247 + },
248 + "jsesc": {
249 + "version": "2.5.2",
250 + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
251 + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
252 + },
253 + "lodash": {
254 + "version": "4.17.15",
255 + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
256 + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
257 + },
258 + "ms": {
259 + "version": "2.1.2",
260 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
261 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
262 + },
263 + "postcss-value-parser": {
264 + "version": "4.1.0",
265 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
266 + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
267 + },
268 + "react-is": {
269 + "version": "16.13.1",
270 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
271 + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
272 + },
273 + "react-moment": {
274 + "version": "0.9.7",
275 + "resolved": "https://registry.npmjs.org/react-moment/-/react-moment-0.9.7.tgz",
276 + "integrity": "sha512-ifzUrUGF6KRsUN2pRG5k56kO0mJBr8kRkWb0wNvtFIsBIxOuPxhUpL1YlXwpbQCbHq23hUu6A0VEk64HsFxk9g==",
277 + "dev": true
278 + },
279 + "shallowequal": {
280 + "version": "1.1.0",
281 + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
282 + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
283 + },
284 + "source-map": {
285 + "version": "0.5.7",
286 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
287 + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
288 + },
289 + "styled-components": {
290 + "version": "5.1.0",
291 + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.1.0.tgz",
292 + "integrity": "sha512-0Qs2wEkFBXHFlysz6CV831VG6HedcrFUwChjnWylNivsx14MtmqQsohi21rMHZxzuTba063dEyoe/SR6VGJI7Q==",
293 + "requires": {
294 + "@babel/helper-module-imports": "^7.0.0",
295 + "@babel/traverse": "^7.4.5",
296 + "@emotion/is-prop-valid": "^0.8.8",
297 + "@emotion/stylis": "^0.8.4",
298 + "@emotion/unitless": "^0.7.4",
299 + "babel-plugin-styled-components": ">= 1",
300 + "css-to-react-native": "^3.0.0",
301 + "hoist-non-react-statics": "^3.0.0",
302 + "shallowequal": "^1.1.0",
303 + "supports-color": "^5.5.0"
304 + }
305 + },
306 + "supports-color": {
307 + "version": "5.5.0",
308 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
309 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
310 + "requires": {
311 + "has-flag": "^3.0.0"
312 + }
313 + },
314 + "to-fast-properties": {
315 + "version": "2.0.0",
316 + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
317 + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
318 + }
319 + }
320 +}