From 2d42298467925bdd805e0e1bbf8ea2ff67fb72db Mon Sep 17 00:00:00 2001 From: cha0s Date: Thu, 25 Mar 2021 02:46:45 -0500 Subject: [PATCH] refactor: components --- packages/http/src/components/app/index.jsx | 22 ++-- .../http/src/components/renderer/dumb.jsx | 16 --- .../http/src/components/renderer/index.jsx | 48 -------- .../src/components/renderer/room-view.jsx | 106 ------------------ .../http/src/components/renderer/stupid.jsx | 16 --- packages/http/src/components/stage.scss | 44 ++++---- packages/universe/package.json | 7 ++ packages/universe/src/components/index.jsx | 37 ++++++ .../components/{ => overview}/cave-mouth.jpg | Bin .../{universe.jsx => overview/index.jsx} | 2 +- .../{universe.scss => overview/index.scss} | 0 .../src/components/play/renderable/index.jsx | 83 ++++++++++++++ .../src/components/play/renderable/index.scss | 24 ++++ .../src/components/play/ui}/hotbar/index.jsx | 2 - .../src/components/play/ui}/hotbar/index.scss | 0 .../src/components/play/ui}/index.jsx | 6 +- .../src/components/play/ui}/index.scss | 0 .../components/play/ui}/item-slot/index.jsx | 2 - .../components/play/ui}/item-slot/index.scss | 0 packages/universe/src/index.js | 2 +- packages/universe/yarn.lock | 43 ++++++- 21 files changed, 227 insertions(+), 233 deletions(-) delete mode 100644 packages/http/src/components/renderer/dumb.jsx delete mode 100644 packages/http/src/components/renderer/index.jsx delete mode 100644 packages/http/src/components/renderer/room-view.jsx delete mode 100644 packages/http/src/components/renderer/stupid.jsx create mode 100644 packages/universe/src/components/index.jsx rename packages/universe/src/components/{ => overview}/cave-mouth.jpg (100%) rename packages/universe/src/components/{universe.jsx => overview/index.jsx} (99%) rename packages/universe/src/components/{universe.scss => overview/index.scss} (100%) create mode 100644 packages/universe/src/components/play/renderable/index.jsx create mode 100644 packages/universe/src/components/play/renderable/index.scss rename packages/{http/src/components/play => universe/src/components/play/ui}/hotbar/index.jsx (98%) rename packages/{http/src/components/play => universe/src/components/play/ui}/hotbar/index.scss (100%) rename packages/{http/src/components/play => universe/src/components/play/ui}/index.jsx (97%) rename packages/{http/src/components/play => universe/src/components/play/ui}/index.scss (100%) rename packages/{http/src/components/play => universe/src/components/play/ui}/item-slot/index.jsx (98%) rename packages/{http/src/components/play => universe/src/components/play/ui}/item-slot/index.scss (100%) diff --git a/packages/http/src/components/app/index.jsx b/packages/http/src/components/app/index.jsx index fe307d9..6504d6c 100644 --- a/packages/http/src/components/app/index.jsx +++ b/packages/http/src/components/app/index.jsx @@ -3,7 +3,7 @@ import './index.scss'; import {hot} from 'react-hot-loader'; -import {useIsNative, ValentUi} from '@humus/core'; +import {useIsNative} from '@humus/core'; import {Universe} from '@humus/universe'; import {React} from '@latus/react'; import {ConnectedRouter} from 'connected-react-router'; @@ -14,8 +14,6 @@ import { } from 'react-router-dom'; import Login from '../login'; -import Play from '../play'; -import Renderer from '../renderer'; import Title from '../title'; import history from './history'; @@ -30,17 +28,13 @@ const Humus = () => { return (
- - - - - {isLoggedIn ? : Login} - - - - {isNative ? </Route> : <Redirect to="/universe" />} - </Switch> - </ValentUi> + <Switch> + <Route path="/login"> + {isLoggedIn ? <Redirect to="/title" /> : Login} + </Route> + <Universe width={WIDTH} height={HEIGHT} /> + {isNative ? <Route path="/title"><Title /></Route> : <Redirect to="/universe" />} + </Switch> <Route exact path="/"> <Redirect to="/title" /> </Route> diff --git a/packages/http/src/components/renderer/dumb.jsx b/packages/http/src/components/renderer/dumb.jsx deleted file mode 100644 index 2480b64..0000000 --- a/packages/http/src/components/renderer/dumb.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import {Color, Container, Primitives} from '@avocado/graphics'; -import {PixiComponent} from '@inlet/react-pixi'; - -const primitives = new Primitives(); -primitives.drawCircle( - [250, 250], - 50, - { - color: new Color(255, 255, 0), - thickness: 1, - }, -); - -export default PixiComponent('Dumb', { - create: () => (new Container()).internal, -}); diff --git a/packages/http/src/components/renderer/index.jsx b/packages/http/src/components/renderer/index.jsx deleted file mode 100644 index 97bbe5d..0000000 --- a/packages/http/src/components/renderer/index.jsx +++ /dev/null @@ -1,48 +0,0 @@ -// TODO should be betta -import 'pixi.js-legacy'; - -import {LatusContext, React, useLatus} from '@latus/react'; -import {Provider, useStore} from '@latus/redux'; -import { - __RouterContext as RouterContext, -} from 'react-router'; -import { - Route, - Switch, - useLocation, -} from 'react-router-dom'; - -import Stage from '../stage'; - -import Dumb from './dumb'; -import RoomView from './room-view'; - -const Renderer = () => { - const location = useLocation(); - const latus = useLatus(); - const store = useStore(); - return ( - <Stage width={320} height={180}> - <LatusContext.Provider value={latus}> - <RouterContext.Provider value={{location}}> - <Provider store={store}> - <Switch> - <Route path="/login"> - <Dumb /> - </Route> - <Route path="/universe"> - <RoomView /> - </Route> - </Switch> - </Provider> - </RouterContext.Provider> - </LatusContext.Provider> - </Stage> - ); -}; - -export default Renderer; - -if (module.hot) { - module.hot.decline(); -} diff --git a/packages/http/src/components/renderer/room-view.jsx b/packages/http/src/components/renderer/room-view.jsx deleted file mode 100644 index 5b87dde..0000000 --- a/packages/http/src/components/renderer/room-view.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import { - React, - useEffect, - useMemo, - useState, -} from '@latus/react'; - -import {Container, Renderer} from '@avocado/graphics'; -import {Vector} from '@avocado/math'; -import {createLoop, destroyLoop} from '@avocado/timing'; -import {RoomView} from '@avocado/topdown'; -import {useRoom, useSelfEntity} from '@humus/core'; -import {PixiComponent, useApp} from '@inlet/react-pixi'; - -const container = new Container(); -const VIEWPORT = [320, 180]; - -const Component = PixiComponent('RoomView', { - create: () => container.internal, - applyProps: (instance, oldProps, newProps) => { - if (oldProps.room !== newProps.room) { - if (oldProps.room) { - container.removeAllChildren(); - } - if (newProps.room) { - container.addChild(new RoomView(newProps.room, newProps.renderer)); - } - } - const [roomView] = container.children; - if (roomView) { - const halfViewport = Vector.scale(VIEWPORT, 0.5); - roomView.pivot = Vector.sub(halfViewport, Vector.scale(newProps.offset, -1)); - [roomView.x, roomView.y] = halfViewport; - [roomView.scaleX, roomView.scaleY] = newProps.scale; - roomView.rotation = newProps.rotation; - } - }, -}); - -const RoomViewComponent = () => { - const app = useApp(); - const renderer = useMemo(() => { - if (app.renderer) { - const renderer = new Renderer(); - renderer.renderer = app.renderer; - return renderer; - } - return undefined; - }, [app]); - const selfEntity = useSelfEntity(); - const [offset, setOffset] = useState([0, 0]); - const [scale, setScale] = useState([1, 1]); - const [rotation, setRotation] = useState(0); - const room = useRoom(); - useEffect(() => { - if (!room || !selfEntity) { - return undefined; - } - selfEntity.camera.realPosition = selfEntity.camera.position; - const onCameraRealOffsetChanged = () => { - setOffset(selfEntity.camera.realOffset); - }; - const onCameraRotationChanged = () => { - setRotation(selfEntity.camera.rotation); - }; - const onCameraScaleChanged = () => { - setScale(selfEntity.camera.scale); - }; - onCameraRealOffsetChanged(); - onCameraRotationChanged(); - onCameraScaleChanged(); - selfEntity.camera.on('realOffsetChanged', onCameraRealOffsetChanged); - selfEntity.camera.on('rotationChanged', onCameraRotationChanged); - selfEntity.camera.on('scaleChanged', onCameraScaleChanged); - return () => { - const {camera} = selfEntity || {}; - if (camera) { - camera.off('realOffsetChanged', onCameraRealOffsetChanged); - camera.off('scaleChanged', onCameraScaleChanged); - } - }; - }, [room, selfEntity]); - useEffect(() => { - if (!room) { - return undefined; - } - const handle = createLoop((elapsed) => { - room.tick(elapsed); - container.renderTick(elapsed); - }); - return () => { - destroyLoop(handle); - }; - }, [room]); - return ( - <Component - offset={offset} - renderer={renderer} - room={room} - rotation={rotation} - scale={scale} - /> - ); -}; - -export default RoomViewComponent; diff --git a/packages/http/src/components/renderer/stupid.jsx b/packages/http/src/components/renderer/stupid.jsx deleted file mode 100644 index 01bb2d6..0000000 --- a/packages/http/src/components/renderer/stupid.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import {Color, Primitives} from '@avocado/graphics'; -import {PixiComponent} from '@inlet/react-pixi'; - -const primitives = new Primitives(); -primitives.drawCircle( - [250, 250], - 50, - { - color: new Color(255, 0, 255), - thickness: 1, - }, -); - -export default PixiComponent('Stupid', { - create: () => primitives.internal, -}); diff --git a/packages/http/src/components/stage.scss b/packages/http/src/components/stage.scss index 19d6f8a..5448b00 100644 --- a/packages/http/src/components/stage.scss +++ b/packages/http/src/components/stage.scss @@ -1,24 +1,24 @@ -.stage { - display: inline-block; - left: 50%; - line-height: 0; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); - > canvas { - image-rendering: pixelated; - } -} +// .stage { +// display: inline-block; +// left: 50%; +// line-height: 0; +// position: absolute; +// top: 50%; +// transform: translate(-50%, -50%); +// > canvas { +// image-rendering: pixelated; +// } +// } -/* Exact aspect ratio, put it at the bottom to avoid override*/ -@media (max-aspect-ratio: 16/9) { - .stage, .stage > canvas { - width: 100%; - } -} +// /* Exact aspect ratio, put it at the bottom to avoid override*/ +// @media (max-aspect-ratio: 16/9) { +// .stage, .stage > canvas { +// width: 100%; +// } +// } -@media (min-aspect-ratio: 16/9) { - .stage, .stage > canvas { - height: 100%; - } -} +// @media (min-aspect-ratio: 16/9) { +// .stage, .stage > canvas { +// height: 100%; +// } +// } diff --git a/packages/universe/package.json b/packages/universe/package.json index 3b9b5f2..eabd837 100644 --- a/packages/universe/package.json +++ b/packages/universe/package.json @@ -22,20 +22,27 @@ "test.js.map" ], "dependencies": { + "@avocado/graphics": "^2.0.0", + "@avocado/input": "^2.0.0", "@avocado/math": "^2.0.0", + "@avocado/react": "^1.0.0", "@avocado/resource": "^2.0.0", "@avocado/s13n": "^2.0.0", "@avocado/timing": "^2.0.0", + "@avocado/topdown": "^2.0.0", "@avocado/traits": "^2.0.0", "@humus/core": "^1.0.0", + "@humus/inventory": "^1.0.0", "@latus/core": "^2.0.0", "@latus/react": "^2.0.0", "@latus/redux": "^2.0.0", "@latus/socket": "^2.0.0", "autoprefixer": "^9.8.6", + "classnames": "^2.2.6", "debug": "4.3.1", "express": "^4.17.1", "glob": "^7.1.6", + "react-router": "^5.2.0", "react-router-dom": "^5.2.0" }, "devDependencies": { diff --git a/packages/universe/src/components/index.jsx b/packages/universe/src/components/index.jsx new file mode 100644 index 0000000..50dc164 --- /dev/null +++ b/packages/universe/src/components/index.jsx @@ -0,0 +1,37 @@ +import {ValentUi} from '@humus/core'; +import {PropTypes, React} from '@latus/react'; +import { + Route, + Switch, +} from 'react-router-dom'; + +import Overview from './overview'; +import PlayRenderable from './play/renderable'; +import PlayUi from './play/ui'; + +const Universe = ({ + height, + width, +// eslint-disable-next-line arrow-body-style +}) => { + return ( + <Route path="/universe"> + <Switch> + <Route path="/universe/:uuid/play" component={PlayRenderable} /> + </Switch> + <ValentUi width={width} height={height}> + <Switch> + <Route path="/universe/:uuid/play" component={PlayUi} /> + <Route path={['/universe/:uuid', '/universe']} component={Overview} /> + </Switch> + </ValentUi> + </Route> + ); +}; + +Universe.propTypes = { + height: PropTypes.number.isRequired, + width: PropTypes.number.isRequired, +}; + +export default Universe; diff --git a/packages/universe/src/components/cave-mouth.jpg b/packages/universe/src/components/overview/cave-mouth.jpg similarity index 100% rename from packages/universe/src/components/cave-mouth.jpg rename to packages/universe/src/components/overview/cave-mouth.jpg diff --git a/packages/universe/src/components/universe.jsx b/packages/universe/src/components/overview/index.jsx similarity index 99% rename from packages/universe/src/components/universe.jsx rename to packages/universe/src/components/overview/index.jsx index c30ae92..64ca87e 100644 --- a/packages/universe/src/components/universe.jsx +++ b/packages/universe/src/components/overview/index.jsx @@ -8,7 +8,7 @@ import { useLocation, } from 'react-router-dom'; -import {universesByLocalitySelector, universesSelector} from '../state'; +import {universesByLocalitySelector, universesSelector} from '../../state'; const Universe = ({match: {params: {uuid}}}) => { const history = useHistory(); diff --git a/packages/universe/src/components/universe.scss b/packages/universe/src/components/overview/index.scss similarity index 100% rename from packages/universe/src/components/universe.scss rename to packages/universe/src/components/overview/index.scss diff --git a/packages/universe/src/components/play/renderable/index.jsx b/packages/universe/src/components/play/renderable/index.jsx new file mode 100644 index 0000000..56504e7 --- /dev/null +++ b/packages/universe/src/components/play/renderable/index.jsx @@ -0,0 +1,83 @@ +import { + React, + useEffect, + useState, +} from '@latus/react'; + +import {Container, Renderer} from '@avocado/graphics'; +import {Vector} from '@avocado/math'; +import {Stage} from '@avocado/react'; +import {createLoop, destroyLoop} from '@avocado/timing'; +import {RoomView} from '@avocado/topdown'; +import {useRoom, useSelfEntity} from '@humus/core'; + +const ticker = () => {}; + +const RoomStage = () => { + const selfEntity = useSelfEntity(); + const [container] = useState(new Container()); + const [VIEWPORT] = useState([320, 180]); + const halfViewport = Vector.scale(VIEWPORT, 0.5); + const [renderer] = useState(new Renderer(VIEWPORT)); + const room = useRoom(); + useEffect(() => { + container.removeAllChildren(); + if (renderer && room) { + const roomView = new RoomView(room, renderer); + container.addChild(roomView); + [container.x, container.y] = halfViewport; + } + }, [container, halfViewport, renderer, room]); + useEffect(() => { + if (!room || !selfEntity) { + return undefined; + } + selfEntity.camera.realPosition = selfEntity.camera.position; + const onCameraRealOffsetChanged = () => { + container.pivot = Vector.sub(halfViewport, Vector.scale(selfEntity.camera.realOffset, -1)); + }; + const onCameraRotationChanged = () => { + container.rotation = selfEntity.camera.rotation; + }; + const onCameraScaleChanged = () => { + [container.scaleX, container.scaleY] = selfEntity.camera.scale; + }; + onCameraRealOffsetChanged(); + onCameraRotationChanged(); + onCameraScaleChanged(); + selfEntity.camera.on('realOffsetChanged', onCameraRealOffsetChanged); + selfEntity.camera.on('rotationChanged', onCameraRotationChanged); + selfEntity.camera.on('scaleChanged', onCameraScaleChanged); + return () => { + const {camera} = selfEntity || {}; + if (camera) { + camera.off('realOffsetChanged', onCameraRealOffsetChanged); + camera.off('scaleChanged', onCameraScaleChanged); + } + }; + }, [container, halfViewport, room, selfEntity]); + useEffect(() => { + if (!room) { + return undefined; + } + const handle = createLoop((elapsed) => { + room.tick(elapsed); + container.renderTick(elapsed); + }); + return () => { + destroyLoop(handle); + }; + }, [container, room]); + return ( + <Stage + centered={false} + scalable={false} + renderer={renderer} + renderable={container} + size={VIEWPORT} + ticker={ticker} + /> + ); +}; + +export default RoomStage; diff --git a/packages/universe/src/components/play/renderable/index.scss b/packages/universe/src/components/play/renderable/index.scss new file mode 100644 index 0000000..5f7406a --- /dev/null +++ b/packages/universe/src/components/play/renderable/index.scss @@ -0,0 +1,24 @@ +.stage { + display: inline-block; + left: 50%; + line-height: 0; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + canvas { + image-rendering: pixelated; + } +} + +/* Exact aspect ratio, put it at the bottom to avoid override*/ +@media (max-aspect-ratio: 16/9) { + .stage, .stage > .canvas-host, .stage > .canvas-host > canvas { + width: 100%; + } +} + +@media (min-aspect-ratio: 16/9) { + .stage, .stage > .canvas-host, .stage > .canvas-host > canvas { + height: 100%; + } +} diff --git a/packages/http/src/components/play/hotbar/index.jsx b/packages/universe/src/components/play/ui/hotbar/index.jsx similarity index 98% rename from packages/http/src/components/play/hotbar/index.jsx rename to packages/universe/src/components/play/ui/hotbar/index.jsx index 5683ae2..5a7a05b 100644 --- a/packages/http/src/components/play/hotbar/index.jsx +++ b/packages/universe/src/components/play/ui/hotbar/index.jsx @@ -1,5 +1,3 @@ -import './index.scss'; - import classnames from 'classnames'; import {usePropertyChange} from '@avocado/react'; import {useInventorySlice} from '@humus/inventory'; diff --git a/packages/http/src/components/play/hotbar/index.scss b/packages/universe/src/components/play/ui/hotbar/index.scss similarity index 100% rename from packages/http/src/components/play/hotbar/index.scss rename to packages/universe/src/components/play/ui/hotbar/index.scss diff --git a/packages/http/src/components/play/index.jsx b/packages/universe/src/components/play/ui/index.jsx similarity index 97% rename from packages/http/src/components/play/index.jsx rename to packages/universe/src/components/play/ui/index.jsx index 72754ed..82c7a91 100644 --- a/packages/http/src/components/play/index.jsx +++ b/packages/universe/src/components/play/ui/index.jsx @@ -1,5 +1,3 @@ -import './index.scss'; - import {InputNormalizer} from '@avocado/input/client'; import {Vector} from '@avocado/math'; import {Room} from '@avocado/topdown'; @@ -22,7 +20,7 @@ import Hotbar from './hotbar'; const FACTOR = 5; -const Play = () => { +const PlayUi = () => { const dispatch = useDispatch(); const {uuid} = useParams(); const ref = useRef(); @@ -94,4 +92,4 @@ const Play = () => { ); }; -export default Play; +export default PlayUi; diff --git a/packages/http/src/components/play/index.scss b/packages/universe/src/components/play/ui/index.scss similarity index 100% rename from packages/http/src/components/play/index.scss rename to packages/universe/src/components/play/ui/index.scss diff --git a/packages/http/src/components/play/item-slot/index.jsx b/packages/universe/src/components/play/ui/item-slot/index.jsx similarity index 98% rename from packages/http/src/components/play/item-slot/index.jsx rename to packages/universe/src/components/play/ui/item-slot/index.jsx index 27bedba..3f7104e 100644 --- a/packages/http/src/components/play/item-slot/index.jsx +++ b/packages/universe/src/components/play/ui/item-slot/index.jsx @@ -1,5 +1,3 @@ -import './index.scss'; - import {join} from 'path'; import classnames from 'classnames'; diff --git a/packages/http/src/components/play/item-slot/index.scss b/packages/universe/src/components/play/ui/item-slot/index.scss similarity index 100% rename from packages/http/src/components/play/item-slot/index.scss rename to packages/universe/src/components/play/ui/item-slot/index.scss diff --git a/packages/universe/src/index.js b/packages/universe/src/index.js index af24e0d..20f52c5 100644 --- a/packages/universe/src/index.js +++ b/packages/universe/src/index.js @@ -2,7 +2,7 @@ import {gatherWithLatus} from '@latus/core'; import {universes} from './state'; -export {default as Universe} from './components/universe'; +export {default as Universe} from './components'; export * from './state'; diff --git a/packages/universe/yarn.lock b/packages/universe/yarn.lock index 8aa5d65..dfc8421 100644 --- a/packages/universe/yarn.lock +++ b/packages/universe/yarn.lock @@ -89,6 +89,14 @@ d3-quadtree "^2.0.0" debug "4.3.1" +"@avocado/react@^1.0.0": + version "1.0.0" + resolved "http://npm.cha0sdev/@avocado%2freact/-/react-1.0.0.tgz#ed3b3252f4302f72f80ee3188c3d407b4f3c3bea" + integrity sha512-K3xxoK/0dZOH7lR7aCkxpbXItUH1omT0NEbb+eKj6qpYZyLeWe2CNtJZ4tegnABpsewlrMuzT3NqRP/zaGJI9Q== + dependencies: + "@latus/core" "^2.0.0" + "@latus/react" "^2.0.0" + "@avocado/resource@2.0.0", "@avocado/resource@^2.0.0": version "2.0.0" resolved "http://npm.cha0sdev/@avocado%2fresource/-/resource-2.0.0.tgz#3ec04329d6e1357f67a956fca48062dcbb7107e1" @@ -129,6 +137,22 @@ debug "4.3.1" lodash.mapvalues "^4.6.0" +"@avocado/topdown@^2.0.0": + version "2.0.0" + resolved "http://npm.cha0sdev/@avocado%2ftopdown/-/topdown-2.0.0.tgz#615bbce088d5e6238fba483401c7e13ecb6a8b47" + integrity sha512-LUZKCNx2i/XWMBaMKmA4QzGjEfFXKJKiHPC/E5qL99CRUgsFXPiDfPQheOwbfibVYPgWFd0wPPuE/tLFg53PMg== + dependencies: + "@avocado/core" "2.0.0" + "@avocado/entity" "^2.0.0" + "@avocado/graphics" "2.0.0" + "@avocado/math" "2.0.0" + "@avocado/resource" "2.0.0" + "@avocado/s13n" "2.0.0" + "@avocado/traits" "^2.0.0" + "@latus/core" "2.0.0" + "@latus/socket" "^2.0.0" + debug "4.3.1" + "@avocado/traits@^2.0.0": version "2.0.0" resolved "http://npm.cha0sdev/@avocado%2ftraits/-/traits-2.0.0.tgz#4f0d2520296580af2055618d3180fc3fc0f7dc20" @@ -1075,6 +1099,18 @@ debug "4.3.1" msgpack-lite "^0.1.26" +"@humus/inventory@^1.0.0": + version "1.0.0" + resolved "http://npm.cha0sdev/@humus%2finventory/-/inventory-1.0.0.tgz#5c47369ddb58e548989e8875e390a86e8219ac3b" + integrity sha512-uXw05JBY4P45vafuLREt0hPZw70RUHeMJqJoCZlxY8APRm9GLOeBRvlBbg5yWUppRyg7pFXbb4eKj8phLXTPjQ== + dependencies: + "@avocado/behavior" "^2.0.0" + "@avocado/traits" "^2.0.0" + "@latus/core" "^2.0.0" + "@latus/socket" "^2.0.0" + autoprefixer "^9.8.6" + debug "4.3.1" + "@latus/build@1.x": version "1.0.0" resolved "http://npm.cha0sdev/@latus%2fbuild/-/build-1.0.0.tgz#f46931805023e753e6ac5038acc832e53801e46c" @@ -2629,6 +2665,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.6: + version "2.2.6" + resolved "http://npm.cha0sdev/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + clean-css@4.2.x, clean-css@^4.2.3: version "4.2.3" resolved "http://npm.cha0sdev/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" @@ -7049,7 +7090,7 @@ react-router-dom@^5.2.0: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.2.0: +react-router@5.2.0, react-router@^5.2.0: version "5.2.0" resolved "http://npm.cha0sdev/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==