diff --git a/package.json b/package.json index a0a9063..2a6ab62 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "spacemap", + "name": "mqtt-control-map", "version": "1.0.0", - "author": "uwap ", + "author": "uwap ", "description": "control devices via mqtt on a beautiful map of your space", "scripts": { "build": "webpack --bail --config webpack.dev.js", @@ -19,7 +19,6 @@ "material-ui-old": "npm:material-ui@latest", "mdi": "^2.0.46", "mqtt": "^2.14.0", - "ramda": "^0.24.1", "react": "^16.0.0", "react-dom": "^16.0.0", "react-leaflet": "^1.5.0", diff --git a/src/UiItems.js b/src/UiItems.js deleted file mode 100644 index fb54a15..0000000 --- a/src/UiItems.js +++ /dev/null @@ -1,149 +0,0 @@ -// @flow -import React from "react"; -import Switch from "material-ui/Switch"; -import Select from "material-ui/Select"; -import { MenuItem } from "material-ui/Menu"; -import Slider from "material-ui-old/Slider"; -import MuiThemeProvider from "material-ui-old/styles/MuiThemeProvider"; -import Config from "./config"; -import Input, { InputLabel } from "material-ui/Input"; -import { FormControl } from "material-ui/Form"; -import R from "ramda"; -import { - ListItem, - ListItemIcon, - ListItemSecondaryAction, - ListItemText, - ListSubheader -} from "material-ui/List"; -import Button from "material-ui/Button"; - -const enabled = (props: ControlUI, state: State) => { - if (props.enableCondition == null) { - return true; - } else { - const val = state.values[props.topic]; - return props.enableCondition( - val.internal == null ? val.actual : val.internal, val.actual, - R.map((x) => (x.internal == null ? x.actual - : x.internal), state.values == null ? {} : state.values)); - } -}; - -const getValue = (topic: string, val: string) => - Config.topics[topic].values[val]; - -const renderIcon = (icon: string) => { - if (icon != null) { - return ( - - - - ); - } - return null; -}; - -export const onSwitch = (topic: string, props: ControlUI, state: State) => - (x, toggled: boolean) => { - if (state.mqtt != null) { - state.mqtt.publish(Config.topics[topic].command, - toggled ? getValue(topic, R.propOr("on", "on", props)) - : getValue(topic, R.propOr("off", "off", props))); - } - }; - -export const isToggled = (state: State, props: ControlUI) => { - const val = state.values[props.topic]; - if (props.toggled != null) { - return props.toggled(val.internal == null ? val.actual : val.internal, - val.actual); - } else { - return val.internal === R.propOr("on", "on", props); - } -}; - -export const toggle = (state: State, props: ControlUI) => { - return ( - - {renderIcon(props.icon)} - - - - - - ); -}; - -const onDropDownChange = (topic: string, props: ControlUI, state: State) => - (event) => { - if (state.mqtt != null) { - state.mqtt.publish(Config.topics[topic].command, event.target.value); - } - }; - -const dropDownItem = (topic: string) => (text: string, key: string) => ( - {text} -); - -export const dropDown = (state: State, props: ControlUI) => { - const id = `${props.topic}.${Object.keys(props.options) - .reduce((v, r) => v + "." + r)}`; - return ( - - {renderIcon(props.icon)} - - {props.text} - - - - ); -}; - -const onSliderChange = (state: State, props: ControlUI) => - (event, value) => { - if (state.mqtt != null) { - state.mqtt.publish(Config.topics[props.topic].command, value.toString()); - } - }; - -export const slider = (state: State, props: ControlUI) => ( - - {renderIcon(props.icon)} - - - - - - -); - -export const section = (state: State, props: ControlUI) => ( - {props.text} -); - -export const link = (state: State, props: ControlUI) => ( - - - -); diff --git a/src/appbar.js b/src/appbar.js deleted file mode 100644 index d889d3b..0000000 --- a/src/appbar.js +++ /dev/null @@ -1,43 +0,0 @@ -// @flow -import React from "react"; -import AppBar from "material-ui/AppBar"; -import Toolbar from "material-ui/Toolbar"; -import { CircularProgress } from "material-ui/Progress"; -import IconButton from "material-ui/IconButton"; -import Typography from "material-ui/Typography"; - -const TopBarLayerSelector = (_props: Object) => ( - - - -); - -const TopBarIndicatorMenu = (props: Object) => ( - - {props.mqtt.connected ? - () : - ()} - -); - - -const TopBarIndicator = (props: Object) => { - if (props.mqtt == null || props.mqtt.reconnecting) { - return (); - } else { - return (); - } -}; - -const TopBar = (props: Object) => ( - - - - {props.title} - {false && } - - -); - -export default TopBar; diff --git a/src/map.js b/src/map.js deleted file mode 100644 index ebed3e5..0000000 --- a/src/map.js +++ /dev/null @@ -1,83 +0,0 @@ -// @flow -import React from "react"; -import { Map, ImageOverlay, Marker, LayersControl } from "react-leaflet"; -import Leaflet from "leaflet"; -import R from "ramda"; -import Config from "./config"; -import { Actions } from "./state"; -import { store } from "./state"; - -// convert width/height coordinates to -height/width coordinates -const c = (p) => [-p[1], p[0]]; - -const color = (iconColor, state: State) => { - // TODO: give iconColor not only internal but also actual values - return iconColor == null ? "#000000" : - iconColor( - R.map((x) => (x.internal == null ? - x.actual : x.internal), state.values == null ? {} : state.values) - ); -}; -const iconHtml = (el, state: State) => - "" - + ""; - -const Markers = (props) => R.values(R.mapObjIndexed((el, key) => ( - store.dispatch({ - type: Actions.CHANGE_UI, - payload: key, - toggle: e.originalEvent.ctrlKey})}> - -), R.propOr({}, "controls", Config))); - -type SpaceMapProps = { - state: State, - width: number, - height: number, - zoom: number, - image: string -}; - -class SpaceMap extends React.Component { - - constructor(props: SpaceMapProps) { - super(props); - } - - render() { - const props = this.props; - return ( - - {Markers(props)} - - {Config.layers.map((x) => - this.renderLayer(x, [c([0, 0]), c([props.width, props.height])]))} - - - ); - } - - renderLayer(layer, bounds) { - const LayersControlType = - layer.baseLayer ? LayersControl.BaseLayer : LayersControl.Overlay; - return ( - - - - ); - } -} - -export default SpaceMap; diff --git a/src/state.js b/src/state.js deleted file mode 100644 index e64b31d..0000000 --- a/src/state.js +++ /dev/null @@ -1,81 +0,0 @@ -// @flow -import R from "ramda"; -import { createStore } from "redux"; -import Config from "./config"; -import { keyOf } from "./util"; -import { onSwitch, isToggled } from "./UiItems"; - -export const Actions = Object.freeze({ - MQTT_CONNECT: "CONNECT", - MQTT_MESSAGE: "MESSAGE", - CHANGE_UI: "UI_POPUP" -}); - -const initState : State = { - mqtt: null, - uiOpened: null, - values: R.map( - (topic) => { - return { - internal: keyOf(topic.values, topic.defaultValue), - actual: topic.defaultValue - }; - }, Config.topics), - visibleLayers: [] -}; - -const onMessage = (state: State, action: StateAction) => { - if (action.payload == null) { - return state; - } - - /* - * action.payload.topic is the mqtt topic - * topics is the list of all internal topic references - * that have their state topic set to action.payload.topic - */ - const payload = action.payload == null ? { topic: "", message: {} } - : action.payload; // thx flow val.state === payload.topic, Config.topics)); - const message = payload.message; - const parsedMessage = (topic: string) => { - let parseFunction = Config.topics[topic].parseState; - if (parseFunction == null) { - return message.toString(); - } else { - return parseFunction(message); - } - }; - const newValue = (topic: string) => { - return { - actual: parsedMessage(topic), - internal: keyOf(Config.topics[topic].values, parsedMessage(topic)) - }; - }; - return R.mergeDeepRight(state, R.objOf("values", R.mergeAll( - R.map((topic) => R.objOf(topic, newValue(topic)), topics) - ))); -}; - -const match = (value: any, array: Map) => array[value]; -const handleEvent = (state: State = initState, action: StateAction) => { - return match(action.type, { - [Actions.MQTT_CONNECT]: R.merge(state, { mqtt: action.payload }), - [Actions.MQTT_MESSAGE]: onMessage(state, action), - [Actions.CHANGE_UI]: (() => { - const control = Config.controls[action.payload]; - if (action.toggle && control.ui.length > 0 - && control.ui[0].type === "toggle") { - const props = control.ui[0]; - onSwitch(props.topic, props, state)(null, !isToggled(state, props)); - return state; - } else { - return R.merge(state, { uiOpened: action.payload }); - } - })(), - [null]: state - }); -}; - -export const store = createStore(handleEvent, initState); diff --git a/src/util.js b/src/util.js deleted file mode 100644 index 75cb598..0000000 --- a/src/util.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow -import R from "ramda"; - -export const keyOf = (map: Map, value: a): ?b => - ((keys) => keys[R.findIndex((k) => map[k] === value, keys)])(R.keys(map)); diff --git a/yarn.lock b/yarn.lock index 2880571..b2b973e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,54 +2,53 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.31", "@babel/code-frame@^7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" +"@babel/code-frame@7.0.0-beta.32", "@babel/code-frame@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz#04f231b8ec70370df830d9926ce0f5add074ec4c" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/helper-function-name@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" +"@babel/helper-function-name@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz#6161af4419f1b4e3ed2d28c0c79c160e218be1f3" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.31" - "@babel/template" "7.0.0-beta.31" - "@babel/traverse" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" + "@babel/helper-get-function-arity" "7.0.0-beta.32" + "@babel/template" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" -"@babel/helper-get-function-arity@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" +"@babel/helper-get-function-arity@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz#93721a99db3757de575a83bab7c453299abca568" dependencies: - "@babel/types" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.32" -"@babel/template@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" +"@babel/template@7.0.0-beta.32": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.32.tgz#e1d9fdbd2a7bcf128f2f920744a67dab18072495" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" + "@babel/code-frame" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" + babylon "7.0.0-beta.32" lodash "^4.2.0" -"@babel/traverse@7.0.0-beta.31", "@babel/traverse@^7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" +"@babel/traverse@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.32.tgz#b78b754c6e1af3360626183738e4c7a05951bc99" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/helper-function-name" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" + "@babel/code-frame" "7.0.0-beta.32" + "@babel/helper-function-name" "7.0.0-beta.32" + "@babel/types" "7.0.0-beta.32" + babylon "7.0.0-beta.32" debug "^3.0.1" globals "^10.0.0" invariant "^2.2.0" lodash "^4.2.0" -"@babel/types@7.0.0-beta.31", "@babel/types@^7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" +"@babel/types@7.0.0-beta.32", "@babel/types@^7.0.0-beta.31": + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff" dependencies: esutils "^2.0.2" lodash "^4.2.0" @@ -86,7 +85,7 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.1.1: +acorn@^5.0.0, acorn@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" @@ -101,7 +100,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" dependencies: @@ -862,9 +861,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.31, babylon@^7.0.0-beta.31: - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" +babylon@7.0.0-beta.32, babylon@^7.0.0-beta.31: + version "7.0.0-beta.32" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.32.tgz#e9033cb077f64d6895f4125968b37dc0a8c3bc6e" babylon@^6.18.0: version "6.18.0" @@ -994,10 +993,6 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -brcast@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.2.tgz#2db16de44140e418dc37fab10beec0369e78dcef" - brcast@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" @@ -1066,10 +1061,10 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: electron-to-chromium "^1.2.7" browserslist@^2.1.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493" + version "2.9.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.0.tgz#706aca15c53be15610f466e348cbfa0c00a6a379" dependencies: - caniuse-lite "^1.0.30000758" + caniuse-lite "^1.0.30000760" electron-to-chromium "^1.3.27" buffer-indexof@^1.0.0: @@ -1164,7 +1159,7 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000760" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d" -caniuse-lite@^1.0.30000758: +caniuse-lite@^1.0.30000760: version "1.0.30000760" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff" @@ -1475,14 +1470,6 @@ 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-class@^15.6.0: - version "15.6.2" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" - cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2036,10 +2023,10 @@ eslint-scope@^3.7.1: estraverse "^4.1.1" eslint@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" + version "4.11.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34" dependencies: - ajv "^5.2.0" + ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" @@ -2047,7 +2034,7 @@ eslint@^4.10.0: debug "^3.0.1" doctrine "^2.0.0" eslint-scope "^3.7.1" - espree "^3.5.1" + espree "^3.5.2" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" @@ -2060,7 +2047,7 @@ eslint@^4.10.0: inquirer "^3.0.6" is-resolvable "^1.0.0" js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" minimatch "^3.0.2" @@ -2077,11 +2064,11 @@ eslint@^4.10.0: table "^4.0.1" text-table "~0.2.0" -espree@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" +espree@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" dependencies: - acorn "^5.1.1" + acorn "^5.2.1" acorn-jsx "^3.0.0" esprima@^2.6.0: @@ -2269,7 +2256,7 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" -fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6, fbjs@^0.8.9: +fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -2449,11 +2436,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.36" + node-pre-gyp "^0.6.39" fstream-ignore@^1.0.5: version "1.0.5" @@ -3327,6 +3314,10 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -3919,7 +3910,7 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-pre-gyp@^0.6.36: +node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: @@ -4288,8 +4279,8 @@ pluralize@^7.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" popper.js@^1.12.5: - version "1.12.6" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.6.tgz#91e12a97b07815258b76915d64044e8ac053d426" + version "1.12.7" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.7.tgz#b8d225618e5d95e27ac2b591debf581857a9c16d" portfinder@^1.0.9: version "1.0.13" @@ -4696,10 +4687,6 @@ rafl@~1.2.1: dependencies: global "~4.3.0" -ramda@^0.24.1: - version "0.24.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" - randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -4775,8 +4762,8 @@ react-jss@^7.2.0: theming "^1.1.0" react-leaflet@^1.5.0: - version "1.7.3" - resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-1.7.3.tgz#4575bce582c0e3745019076d5b804ffcd0efd6bb" + version "1.7.4" + resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-1.7.4.tgz#073202401b5804cb00e97adf0768d1b2e3b7c9e9" dependencies: lodash "^4.0.0" lodash-es "^4.0.0" @@ -4824,16 +4811,6 @@ react-transition-group@^2.2.1: prop-types "^15.5.8" warning "^3.0.0" -react@^15.5.4: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" - dependencies: - create-react-class "^15.6.0" - fbjs "^0.8.9" - loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" - react@^16.0.0: version "16.1.0" resolved "https://registry.yarnpkg.com/react/-/react-16.1.0.tgz#1c2bdac3c17fe7ee9282fa35aca6cc36387903e1" @@ -5590,14 +5567,13 @@ text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" theming@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/theming/-/theming-1.1.0.tgz#0562760b55a1b919c2d5eeb94130351f8958e13a" + version "1.2.1" + resolved "https://registry.yarnpkg.com/theming/-/theming-1.2.1.tgz#3de0be696339c6c203013a6c68d1c1057973dc44" dependencies: - brcast "^2.0.0" + brcast "^3.0.1" is-function "^1.0.1" is-plain-object "^2.0.1" prop-types "^15.5.8" - react "^15.5.4" through2-filter@^2.0.0: version "2.0.0" @@ -5723,8 +5699,8 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@3.1.x: - version "3.1.8" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.8.tgz#780d08b4f6782fe36ea5484d952362eddaf1d7b8" + version "3.1.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.9.tgz#dffca799308cf327ec3ac77eeacb8e196ce3b452" dependencies: commander "~2.11.0" source-map "~0.6.1" @@ -6020,8 +5996,8 @@ websocket-driver@>=0.5.1: websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d" + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" websocket-stream@^5.0.1: version "5.1.1"