From 6e9a3e256d9c19c4f80cc4a9af8c4a57b0279158 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Mon, 24 Dec 2018 17:48:48 +0300 Subject: [PATCH] problems panel: update tooltip --- package.json | 4 +- .../components/ProblemDetails.tsx | 2 +- src/panel-triggers/components/Tooltip.tsx | 91 ----------- .../components/Tooltip/Popper.tsx | 72 +++++++++ .../components/Tooltip/Portal.tsx | 35 ++++ .../components/Tooltip/Tooltip.tsx | 17 ++ .../components/Tooltip/withPopper.tsx | 88 ++++++++++ yarn.lock | 153 ++++++++++++++++-- 8 files changed, 359 insertions(+), 103 deletions(-) delete mode 100644 src/panel-triggers/components/Tooltip.tsx create mode 100644 src/panel-triggers/components/Tooltip/Popper.tsx create mode 100644 src/panel-triggers/components/Tooltip/Portal.tsx create mode 100644 src/panel-triggers/components/Tooltip/Tooltip.tsx create mode 100644 src/panel-triggers/components/Tooltip/withPopper.tsx diff --git a/package.json b/package.json index 002aa13..097484b 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@types/moment": "^2.13.0", "@types/react": "^16.4.6", "@types/react-dom": "^16.0.11", + "@types/react-transition-group": "^2.0.15", "babel-core": "^6.26.3", "babel-jest": "^23.6.0", "babel-loader": "^7.1.2", @@ -60,8 +61,9 @@ "ng-annotate-webpack-plugin": "^0.3.0", "node-sass": "^4.9.4", "prop-types": "^15.6.2", - "react-popper": "^0.7.5", + "react-popper": "^1.3.2", "react-table": "^6.8.6", + "react-transition-group": "^2.5.2", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "tether-drop": "^1.4.2", diff --git a/src/panel-triggers/components/ProblemDetails.tsx b/src/panel-triggers/components/ProblemDetails.tsx index 59bbde5..768348a 100644 --- a/src/panel-triggers/components/ProblemDetails.tsx +++ b/src/panel-triggers/components/ProblemDetails.tsx @@ -3,7 +3,7 @@ import * as utils from '../../datasource-zabbix/utils'; import { Trigger, ZBXItem, ZBXAcknowledge, ZBXHost, ZBXGroup, ZBXEvent, GFTimeRange, RTRow } from '../types'; import { Modal, AckProblemData } from './Modal'; import EventTag from './EventTag'; -import Tooltip from './Tooltip'; +import Tooltip from './Tooltip/Tooltip'; import ProblemTimeline from './ProblemTimeline'; import FAIcon from './FAIcon'; diff --git a/src/panel-triggers/components/Tooltip.tsx b/src/panel-triggers/components/Tooltip.tsx deleted file mode 100644 index bc76e50..0000000 --- a/src/panel-triggers/components/Tooltip.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { PureComponent } from 'react'; -import { Manager, Popper, Arrow, Target } from 'react-popper'; - -interface IwithTooltipProps { - placement?: string; - content: string | ((props: any) => JSX.Element); - className?: string; -} - -export function withTooltip(WrappedComponent) { - return class extends React.Component { - constructor(props) { - super(props); - - this.setState = this.setState.bind(this); - this.state = { - placement: this.props.placement || 'auto', - show: false, - }; - } - - componentWillReceiveProps(nextProps) { - if (nextProps.placement && nextProps.placement !== this.state.placement) { - this.setState(prevState => { - return { - ...prevState, - placement: nextProps.placement, - }; - }); - } - } - - renderContent(content) { - if (typeof content === 'function') { - // If it's a function we assume it's a React component - const ReactComponent = content; - return ; - } - return content; - } - - render() { - const { content, className } = this.props; - - return ( - - - {this.state.show ? ( - - {this.renderContent(content)} - - - ) : null} - - ); - } - }; -} - -interface Props { - tooltipSetState: (prevState: object) => void; -} - -class Tooltip extends PureComponent { - showTooltip = () => { - const { tooltipSetState } = this.props; - - tooltipSetState(prevState => ({ - ...prevState, - show: true, - })); - }; - - hideTooltip = () => { - const { tooltipSetState } = this.props; - tooltipSetState(prevState => ({ - ...prevState, - show: false, - })); - }; - - render() { - return ( - - {this.props.children} - - ); - } -} - -export default withTooltip(Tooltip); diff --git a/src/panel-triggers/components/Tooltip/Popper.tsx b/src/panel-triggers/components/Tooltip/Popper.tsx new file mode 100644 index 0000000..0f27efe --- /dev/null +++ b/src/panel-triggers/components/Tooltip/Popper.tsx @@ -0,0 +1,72 @@ +import React, { PureComponent } from 'react'; +import BodyPortal from './Portal'; +import { Manager, Popper as ReactPopper, Reference } from 'react-popper'; +import Transition from 'react-transition-group/Transition'; + +const defaultTransitionStyles = { + transition: 'opacity 200ms linear', + opacity: 0, +}; + +const transitionStyles = { + exited: { opacity: 0 }, + entering: { opacity: 0 }, + entered: { opacity: 1 }, + exiting: { opacity: 0 }, +}; + +interface Props { + renderContent: (content: any) => any; + show: boolean; + placement?: any; + content: string | ((props: any) => JSX.Element); + refClassName?: string; +} + +class Popper extends PureComponent { + render() { + const { children, renderContent, show, placement, refClassName } = this.props; + const { content } = this.props; + + return ( + + + {({ ref }) => ( +
+ {children} +
+ )} +
+ + {transitionState => ( + + + {({ ref, style, placement, arrowProps }) => { + return ( +
+
+ {renderContent(content)} +
+
+
+ ); + }} + + + )} + + + ); + } +} + +export default Popper; diff --git a/src/panel-triggers/components/Tooltip/Portal.tsx b/src/panel-triggers/components/Tooltip/Portal.tsx new file mode 100644 index 0000000..dd2bb3b --- /dev/null +++ b/src/panel-triggers/components/Tooltip/Portal.tsx @@ -0,0 +1,35 @@ +import { PureComponent } from 'react'; +import ReactDOM from 'react-dom'; + +interface Props { + className?: string; + root?: HTMLElement; +} + +export default class BodyPortal extends PureComponent { + node: HTMLElement = document.createElement('div'); + portalRoot: HTMLElement; + + constructor(props) { + super(props); + const { + className, + root = document.body + } = this.props; + + if (className) { + this.node.classList.add(className); + } + + this.portalRoot = root; + this.portalRoot.appendChild(this.node); + } + + componentWillUnmount() { + this.portalRoot.removeChild(this.node); + } + + render() { + return ReactDOM.createPortal(this.props.children, this.node); + } +} diff --git a/src/panel-triggers/components/Tooltip/Tooltip.tsx b/src/panel-triggers/components/Tooltip/Tooltip.tsx new file mode 100644 index 0000000..1f5fc05 --- /dev/null +++ b/src/panel-triggers/components/Tooltip/Tooltip.tsx @@ -0,0 +1,17 @@ +import React, { PureComponent } from 'react'; +import Popper from './Popper'; +import withPopper, { UsingPopperProps } from './withPopper'; + +class Tooltip extends PureComponent { + render() { + const { children, hidePopper, showPopper, className, ...restProps } = this.props; + + return ( +
+ {children} +
+ ); + } +} + +export default withPopper(Tooltip); diff --git a/src/panel-triggers/components/Tooltip/withPopper.tsx b/src/panel-triggers/components/Tooltip/withPopper.tsx new file mode 100644 index 0000000..4ba0593 --- /dev/null +++ b/src/panel-triggers/components/Tooltip/withPopper.tsx @@ -0,0 +1,88 @@ +import React from 'react'; + +export interface UsingPopperProps { + showPopper: (prevState: object) => void; + hidePopper: (prevState: object) => void; + renderContent: (content: any) => any; + show: boolean; + placement?: string; + content: string | ((props: any) => JSX.Element); + className?: string; + refClassName?: string; +} + +interface Props { + placement?: string; + className?: string; + refClassName?: string; + content: string | ((props: any) => JSX.Element); +} + +interface State { + placement: string; + show: boolean; +} + +export default function withPopper(WrappedComponent) { + return class extends React.Component { + constructor(props) { + super(props); + this.setState = this.setState.bind(this); + this.state = { + placement: this.props.placement || 'auto', + show: false, + }; + } + + componentWillReceiveProps(nextProps) { + if (nextProps.placement && nextProps.placement !== this.state.placement) { + this.setState(prevState => { + return { + ...prevState, + placement: nextProps.placement, + }; + }); + } + } + + showPopper = () => { + this.setState(prevState => ({ + ...prevState, + show: true, + })); + }; + + hidePopper = () => { + this.setState(prevState => ({ + ...prevState, + show: false, + })); + }; + + renderContent(content) { + if (typeof content === 'function') { + // If it's a function we assume it's a React component + const ReactComponent = content; + return ; + } + return content; + } + + render() { + const { show, placement } = this.state; + const className = this.props.className || ''; + + return ( + + ); + } + }; +} diff --git a/yarn.lock b/yarn.lock index 12a0bc1..453a593 100644 --- a/yarn.lock +++ b/yarn.lock @@ -73,6 +73,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.51.tgz#27cec2df409df60af58270ed8f6aa55409ea86f6" integrity sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY= +"@babel/runtime@^7.1.2": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" + integrity sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg== + dependencies: + regenerator-runtime "^0.12.0" + "@babel/template@7.0.0-beta.51": version "7.0.0-beta.51" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.51.tgz#9602a40aebcf357ae9677e2532ef5fc810f5fbff" @@ -153,6 +160,13 @@ dependencies: "@types/react" "*" +"@types/react-transition-group@^2.0.15": + version "2.0.15" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.15.tgz#e5ee3fe558832e141cc6041bdd54caea7b787af8" + integrity sha512-S0QnNzbHoWXDbKBl/xk5dxA4FT+BNlBcI3hku991cl8Cz3ytOkUMcCRtzdX11eb86E131bSsQqy5WrPCdJYblw== + dependencies: + "@types/react" "*" + "@types/react@*": version "16.7.13" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.13.tgz#d2369ae78377356d42fb54275d30218e84f2247a" @@ -596,6 +610,11 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -2063,6 +2082,11 @@ copy-webpack-plugin@^4.5.4: p-limit "^1.0.0" serialize-javascript "^1.4.0" +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + core-js@^2.4.0, core-js@^2.5.0: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" @@ -2121,6 +2145,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-context@<=0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.2.tgz#9836542f9aaa22868cd7d4a6f82667df38019dca" + integrity sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A== + dependencies: + fbjs "^0.8.0" + gud "^1.0.0" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -2421,6 +2453,13 @@ dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dom-helpers@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -2512,6 +2551,13 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2864,6 +2910,19 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fbjs@^0.8.0: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" @@ -3397,6 +3456,11 @@ grunt@^1.0.3: path-is-absolute "~1.0.0" rimraf "~2.6.2" +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + handlebars@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" @@ -4034,6 +4098,14 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@0.1.x, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -5052,7 +5124,7 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= -loose-envify@^1.0.0, loose-envify@^1.3.1: +loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5483,6 +5555,14 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -6141,7 +6221,7 @@ pn@^1.0.0, pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -popper.js@^1.12.5: +popper.js@^1.14.4: version "1.14.6" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.6.tgz#ab20dd4edf9288b8b3b6531c47c361107b60b4b0" integrity sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA== @@ -6247,6 +6327,13 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + prompt@~0.2.14: version "0.2.14" resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" @@ -6266,7 +6353,7 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" -prop-types@^15.5.10, prop-types@^15.6.2: +prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== @@ -6382,13 +6469,22 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-popper@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.7.5.tgz#71c25946f291db381231281f6b95729e8b801596" - integrity sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg== +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-popper@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.2.tgz#e723a0a7fe1c42099a13e5d494e9d7d74b352af4" + integrity sha512-UbFWj55Yt9uqvy0oZ+vULDL2Bw1oxeZF9/JzGyxQ5ypgauRH/XlarA5+HLZWro/Zss6Ht2kqpegtb6sYL8GUGw== dependencies: - popper.js "^1.12.5" - prop-types "^15.5.10" + "@babel/runtime" "^7.1.2" + create-react-context "<=0.2.2" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" react-table@^6.8.6: version "6.8.6" @@ -6397,6 +6493,16 @@ react-table@^6.8.6: dependencies: classnames "^2.2.5" +react-transition-group@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.2.tgz#9457166a9ba6ce697a3e1b076b3c049b9fb2c408" + integrity sha512-vwHP++S+f6KL7rg8V1mfs62+MBKtbMeZDR8KiNmD7v98Gs3UPGsDZDahPJH2PVprFW5YHJfh6cbNim3zPndaSQ== + dependencies: + dom-helpers "^3.3.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -6495,6 +6601,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -6851,7 +6962,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -7563,6 +7674,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -7573,6 +7689,11 @@ typescript@^2.9.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== +ua-parser-js@^0.7.18: + version "0.7.19" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" + integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ== + uglify-es@^3.3.4: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -7839,6 +7960,13 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607" + integrity sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug== + dependencies: + loose-envify "^1.0.0" + watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" @@ -7930,6 +8058,11 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.23" +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-mimetype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4"