diff --git a/build/app.js b/build/app.js
index c1b8819..84f2cc2 100644
--- a/build/app.js
+++ b/build/app.js
@@ -1,11799 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./src/app.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./node_modules/lodash/_Hash.js":
-/*!**************************************!*\
- !*** ./node_modules/lodash/_Hash.js ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"),
- hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"),
- hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"),
- hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"),
- hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js");
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
-
-module.exports = Hash;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_ListCache.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_ListCache.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"),
- listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"),
- listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"),
- listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"),
- listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js");
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-
-module.exports = ListCache;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_Map.js":
-/*!*************************************!*\
- !*** ./node_modules/lodash/_Map.js ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),
- root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/* Built-in method references that are verified to be native. */
-var Map = getNative(root, 'Map');
-
-module.exports = Map;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_MapCache.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_MapCache.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"),
- mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"),
- mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"),
- mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"),
- mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js");
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
-
-module.exports = MapCache;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_Symbol.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/_Symbol.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/** Built-in value references. */
-var Symbol = root.Symbol;
-
-module.exports = Symbol;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_arrayMap.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_arrayMap.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
- var index = -1,
- length = array == null ? 0 : array.length,
- result = Array(length);
-
- while (++index < length) {
- result[index] = iteratee(array[index], index, array);
- }
- return result;
-}
-
-module.exports = arrayMap;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_assignValue.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_assignValue.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"),
- eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns `value` to `key` of `object` if the existing value is not equivalent
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignValue(object, key, value) {
- var objValue = object[key];
- if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
- (value === undefined && !(key in object))) {
- baseAssignValue(object, key, value);
- }
-}
-
-module.exports = assignValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_assocIndexOf.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_assocIndexOf.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js");
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
-}
-
-module.exports = assocIndexOf;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseAssignValue.js":
-/*!*************************************************!*\
- !*** ./node_modules/lodash/_baseAssignValue.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js");
-
-/**
- * The base implementation of `assignValue` and `assignMergeValue` without
- * value checks.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function baseAssignValue(object, key, value) {
- if (key == '__proto__' && defineProperty) {
- defineProperty(object, key, {
- 'configurable': true,
- 'enumerable': true,
- 'value': value,
- 'writable': true
- });
- } else {
- object[key] = value;
- }
-}
-
-module.exports = baseAssignValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseGet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_baseGet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),
- toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");
-
-/**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path) {
- path = castPath(path, object);
-
- var index = 0,
- length = path.length;
-
- while (object != null && index < length) {
- object = object[toKey(path[index++])];
- }
- return (index && index == length) ? object : undefined;
-}
-
-module.exports = baseGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseGetTag.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_baseGetTag.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
- getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"),
- objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js");
-
-/** `Object#toString` result references. */
-var nullTag = '[object Null]',
- undefinedTag = '[object Undefined]';
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
- if (value == null) {
- return value === undefined ? undefinedTag : nullTag;
- }
- return (symToStringTag && symToStringTag in Object(value))
- ? getRawTag(value)
- : objectToString(value);
-}
-
-module.exports = baseGetTag;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseIsNative.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_baseIsNative.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"),
- isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
- toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js");
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
- objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
- funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
-function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
-}
-
-module.exports = baseIsNative;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseSet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_baseSet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"),
- castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),
- isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
- toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");
-
-/**
- * The base implementation of `_.set`.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @param {Function} [customizer] The function to customize path creation.
- * @returns {Object} Returns `object`.
- */
-function baseSet(object, path, value, customizer) {
- if (!isObject(object)) {
- return object;
- }
- path = castPath(path, object);
-
- var index = -1,
- length = path.length,
- lastIndex = length - 1,
- nested = object;
-
- while (nested != null && ++index < length) {
- var key = toKey(path[index]),
- newValue = value;
-
- if (index != lastIndex) {
- var objValue = nested[key];
- newValue = customizer ? customizer(objValue, key, nested) : undefined;
- if (newValue === undefined) {
- newValue = isObject(objValue)
- ? objValue
- : (isIndex(path[index + 1]) ? [] : {});
- }
- }
- assignValue(nested, key, newValue);
- nested = nested[key];
- }
- return object;
-}
-
-module.exports = baseSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseToString.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_baseToString.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
- arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"),
- isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
- }
- if (isArray(value)) {
- // Recursively convert values (susceptible to call stack limits).
- return arrayMap(value, baseToString) + '';
- }
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = baseToString;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_castPath.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_castPath.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"),
- stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"),
- toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js");
-
-/**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @param {Object} [object] The object to query keys on.
- * @returns {Array} Returns the cast property path array.
- */
-function castPath(value, object) {
- if (isArray(value)) {
- return value;
- }
- return isKey(value, object) ? [value] : stringToPath(toString(value));
-}
-
-module.exports = castPath;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_coreJsData.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_coreJsData.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
-
-module.exports = coreJsData;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_defineProperty.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_defineProperty.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js");
-
-var defineProperty = (function() {
- try {
- var func = getNative(Object, 'defineProperty');
- func({}, '', {});
- return func;
- } catch (e) {}
-}());
-
-module.exports = defineProperty;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_freeGlobal.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_freeGlobal.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-module.exports = freeGlobal;
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getMapData.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_getMapData.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js");
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key)
- ? data[typeof key == 'string' ? 'string' : 'hash']
- : data.map;
-}
-
-module.exports = getMapData;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getNative.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_getNative.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"),
- getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js");
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
-}
-
-module.exports = getNative;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getRawTag.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_getRawTag.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
-function getRawTag(value) {
- var isOwn = hasOwnProperty.call(value, symToStringTag),
- tag = value[symToStringTag];
-
- try {
- value[symToStringTag] = undefined;
- var unmasked = true;
- } catch (e) {}
-
- var result = nativeObjectToString.call(value);
- if (unmasked) {
- if (isOwn) {
- value[symToStringTag] = tag;
- } else {
- delete value[symToStringTag];
- }
- }
- return result;
-}
-
-module.exports = getRawTag;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getValue.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_getValue.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
- return object == null ? undefined : object[key];
-}
-
-module.exports = getValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashClear.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_hashClear.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
- this.size = 0;
-}
-
-module.exports = hashClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashDelete.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_hashDelete.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
- var result = this.has(key) && delete this.__data__[key];
- this.size -= result ? 1 : 0;
- return result;
-}
-
-module.exports = hashDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashGet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashGet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-module.exports = hashGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashHas.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashHas.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
-}
-
-module.exports = hashHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashSet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashSet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
- var data = this.__data__;
- this.size += this.has(key) ? 0 : 1;
- data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
- return this;
-}
-
-module.exports = hashSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isIndex.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_isIndex.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
- var type = typeof value;
- length = length == null ? MAX_SAFE_INTEGER : length;
-
- return !!length &&
- (type == 'number' ||
- (type != 'symbol' && reIsUint.test(value))) &&
- (value > -1 && value % 1 == 0 && value < length);
-}
-
-module.exports = isIndex;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isKey.js":
-/*!***************************************!*\
- !*** ./node_modules/lodash/_isKey.js ***!
- \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
- reIsPlainProp = /^\w*$/;
-
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
- if (isArray(value)) {
- return false;
- }
- var type = typeof value;
- if (type == 'number' || type == 'symbol' || type == 'boolean' ||
- value == null || isSymbol(value)) {
- return true;
- }
- return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
- (object != null && value in Object(object));
-}
-
-module.exports = isKey;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isKeyable.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_isKeyable.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
- var type = typeof value;
- return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
- ? (value !== '__proto__')
- : (value === null);
-}
-
-module.exports = isKeyable;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isMasked.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_isMasked.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js");
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
- return !!maskSrcKey && (maskSrcKey in func);
-}
-
-module.exports = isMasked;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheClear.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_listCacheClear.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
- this.__data__ = [];
- this.size = 0;
-}
-
-module.exports = listCacheClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheDelete.js":
-/*!*************************************************!*\
- !*** ./node_modules/lodash/_listCacheDelete.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype;
-
-/** Built-in value references. */
-var splice = arrayProto.splice;
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- --this.size;
- return true;
-}
-
-module.exports = listCacheDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheGet.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheGet.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- return index < 0 ? undefined : data[index][1];
-}
-
-module.exports = listCacheGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheHas.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheHas.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
-}
-
-module.exports = listCacheHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheSet.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheSet.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- ++this.size;
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
-}
-
-module.exports = listCacheSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheClear.js":
-/*!***********************************************!*\
- !*** ./node_modules/lodash/_mapCacheClear.js ***!
- \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"),
- ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"),
- Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js");
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
- this.size = 0;
- this.__data__ = {
- 'hash': new Hash,
- 'map': new (Map || ListCache),
- 'string': new Hash
- };
-}
-
-module.exports = mapCacheClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheDelete.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_mapCacheDelete.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
- var result = getMapData(this, key)['delete'](key);
- this.size -= result ? 1 : 0;
- return result;
-}
-
-module.exports = mapCacheDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheGet.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheGet.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
- return getMapData(this, key).get(key);
-}
-
-module.exports = mapCacheGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheHas.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheHas.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
- return getMapData(this, key).has(key);
-}
-
-module.exports = mapCacheHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheSet.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheSet.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
- var data = getMapData(this, key),
- size = data.size;
-
- data.set(key, value);
- this.size += data.size == size ? 0 : 1;
- return this;
-}
-
-module.exports = mapCacheSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_memoizeCapped.js":
-/*!***********************************************!*\
- !*** ./node_modules/lodash/_memoizeCapped.js ***!
- \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js");
-
-/** Used as the maximum memoize cache size. */
-var MAX_MEMOIZE_SIZE = 500;
-
-/**
- * A specialized version of `_.memoize` which clears the memoized function's
- * cache when it exceeds `MAX_MEMOIZE_SIZE`.
- *
- * @private
- * @param {Function} func The function to have its output memoized.
- * @returns {Function} Returns the new memoized function.
- */
-function memoizeCapped(func) {
- var result = memoize(func, function(key) {
- if (cache.size === MAX_MEMOIZE_SIZE) {
- cache.clear();
- }
- return key;
- });
-
- var cache = result.cache;
- return result;
-}
-
-module.exports = memoizeCapped;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_nativeCreate.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_nativeCreate.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js");
-
-/* Built-in method references that are verified to be native. */
-var nativeCreate = getNative(Object, 'create');
-
-module.exports = nativeCreate;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_objectToString.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_objectToString.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
-function objectToString(value) {
- return nativeObjectToString.call(value);
-}
-
-module.exports = objectToString;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_root.js":
-/*!**************************************!*\
- !*** ./node_modules/lodash/_root.js ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js");
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-module.exports = root;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_stringToPath.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_stringToPath.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js");
-
-/** Used to match property names within property paths. */
-var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = memoizeCapped(function(string) {
- var result = [];
- if (string.charCodeAt(0) === 46 /* . */) {
- result.push('');
- }
- string.replace(rePropName, function(match, number, quote, subString) {
- result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
- });
- return result;
-});
-
-module.exports = stringToPath;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_toKey.js":
-/*!***************************************!*\
- !*** ./node_modules/lodash/_toKey.js ***!
- \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
- if (typeof value == 'string' || isSymbol(value)) {
- return value;
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = toKey;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_toSource.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_toSource.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return (func + '');
- } catch (e) {}
- }
- return '';
-}
-
-module.exports = toSource;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/eq.js":
-/*!***********************************!*\
- !*** ./node_modules/lodash/eq.js ***!
- \***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
- return value === other || (value !== value && other !== other);
-}
-
-module.exports = eq;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/get.js":
-/*!************************************!*\
- !*** ./node_modules/lodash/get.js ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js");
-
-/**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.get(object, 'a[0].b.c');
- * // => 3
- *
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
- *
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
- */
-function get(object, path, defaultValue) {
- var result = object == null ? undefined : baseGet(object, path);
- return result === undefined ? defaultValue : result;
-}
-
-module.exports = get;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isArray.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/isArray.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-module.exports = isArray;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isFunction.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/isFunction.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js");
-
-/** `Object#toString` result references. */
-var asyncTag = '[object AsyncFunction]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- proxyTag = '[object Proxy]';
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
- if (!isObject(value)) {
- return false;
- }
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 9 which returns 'object' for typed arrays and other constructors.
- var tag = baseGetTag(value);
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
-}
-
-module.exports = isFunction;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isObject.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/isObject.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
- var type = typeof value;
- return value != null && (type == 'object' || type == 'function');
-}
-
-module.exports = isObject;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isObjectLike.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/isObjectLike.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
- return value != null && typeof value == 'object';
-}
-
-module.exports = isObjectLike;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isSymbol.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/isSymbol.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
- isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");
-
-/** `Object#toString` result references. */
-var symbolTag = '[object Symbol]';
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
- return typeof value == 'symbol' ||
- (isObjectLike(value) && baseGetTag(value) == symbolTag);
-}
-
-module.exports = isSymbol;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/memoize.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/memoize.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js");
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
- *
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `clear`, `delete`, `get`, `has`, and `set`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
- *
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
- *
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
- *
- * values(other);
- * // => [3, 4]
- *
- * object.a = 2;
- * values(object);
- * // => [1, 2]
- *
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
- *
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
- */
-function memoize(func, resolver) {
- if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
- throw new TypeError(FUNC_ERROR_TEXT);
- }
- var memoized = function() {
- var args = arguments,
- key = resolver ? resolver.apply(this, args) : args[0],
- cache = memoized.cache;
-
- if (cache.has(key)) {
- return cache.get(key);
- }
- var result = func.apply(this, args);
- memoized.cache = cache.set(key, result) || cache;
- return result;
- };
- memoized.cache = new (memoize.Cache || MapCache);
- return memoized;
-}
-
-// Expose `MapCache`.
-memoize.Cache = MapCache;
-
-module.exports = memoize;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/set.js":
-/*!************************************!*\
- !*** ./node_modules/lodash/set.js ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js");
-
-/**
- * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
- * it's created. Arrays are created for missing index properties while objects
- * are created for all other missing properties. Use `_.setWith` to customize
- * `path` creation.
- *
- * **Note:** This method mutates `object`.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.set(object, 'a[0].b.c', 4);
- * console.log(object.a[0].b.c);
- * // => 4
- *
- * _.set(object, ['x', '0', 'y', 'z'], 5);
- * console.log(object.x[0].y.z);
- * // => 5
- */
-function set(object, path, value) {
- return object == null ? object : baseSet(object, path, value);
-}
-
-module.exports = set;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/toString.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/toString.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseToString = __webpack_require__(/*! ./_baseToString */ "./node_modules/lodash/_baseToString.js");
-
-/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
-function toString(value) {
- return value == null ? '' : baseToString(value);
-}
-
-module.exports = toString;
-
-
-/***/ }),
-
-/***/ "./node_modules/mini-toastr/mini-toastr.js":
-/*!*************************************************!*\
- !*** ./node_modules/mini-toastr/mini-toastr.js ***!
- \*************************************************/
-/*! exports provided: fadeOut, LIB_NAME, ERROR, WARN, SUCCESS, INFO, CONTAINER_CLASS, NOTIFICATION_CLASS, TITLE_CLASS, ICON_CLASS, MESSAGE_CLASS, ERROR_CLASS, WARN_CLASS, SUCCESS_CLASS, INFO_CLASS, DEFAULT_TIMEOUT, flatten, makeCss, appendStyles, config, makeNode, createIcon, addElem, getTypeClass, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fadeOut", function() { return fadeOut; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LIB_NAME", function() { return LIB_NAME; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ERROR", function() { return ERROR; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WARN", function() { return WARN; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUCCESS", function() { return SUCCESS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INFO", function() { return INFO; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CONTAINER_CLASS", function() { return CONTAINER_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NOTIFICATION_CLASS", function() { return NOTIFICATION_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TITLE_CLASS", function() { return TITLE_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ICON_CLASS", function() { return ICON_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MESSAGE_CLASS", function() { return MESSAGE_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ERROR_CLASS", function() { return ERROR_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WARN_CLASS", function() { return WARN_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SUCCESS_CLASS", function() { return SUCCESS_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "INFO_CLASS", function() { return INFO_CLASS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DEFAULT_TIMEOUT", function() { return DEFAULT_TIMEOUT; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "flatten", function() { return flatten; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeCss", function() { return makeCss; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendStyles", function() { return appendStyles; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "makeNode", function() { return makeNode; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createIcon", function() { return createIcon; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElem", function() { return addElem; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTypeClass", function() { return getTypeClass; });
-function fadeOut (element, cb) {
- if (element.style.opacity && element.style.opacity > 0.05) {
- element.style.opacity = element.style.opacity - 0.05
- } else if (element.style.opacity && element.style.opacity <= 0.1) {
- if (element.parentNode) {
- element.parentNode.removeChild(element)
- if (cb) cb()
- }
- } else {
- element.style.opacity = 0.9
- }
- setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30
- )
-}
-
-const LIB_NAME = 'mini-toastr'
-
-const ERROR = 'error'
-const WARN = 'warn'
-const SUCCESS = 'success'
-const INFO = 'info'
-const CONTAINER_CLASS = LIB_NAME
-const NOTIFICATION_CLASS = `${LIB_NAME}__notification`
-const TITLE_CLASS = `${LIB_NAME}-notification__title`
-const ICON_CLASS = `${LIB_NAME}-notification__icon`
-const MESSAGE_CLASS = `${LIB_NAME}-notification__message`
-const ERROR_CLASS = `-${ERROR}`
-const WARN_CLASS = `-${WARN}`
-const SUCCESS_CLASS = `-${SUCCESS}`
-const INFO_CLASS = `-${INFO}`
-const DEFAULT_TIMEOUT = 3000
-
-const EMPTY_STRING = ''
-
-function flatten (obj, into, prefix) {
- into = into || {}
- prefix = prefix || EMPTY_STRING
-
- for (const k in obj) {
- if (obj.hasOwnProperty(k)) {
- const prop = obj[k]
- if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {
- flatten(prop, into, prefix + k + ' ')
- } else {
- if (into[prefix] && typeof into[prefix] === 'object') {
- into[prefix][k] = prop
- } else {
- into[prefix] = {}
- into[prefix][k] = prop
- }
- }
- }
- }
-
- return into
-}
-
-function makeCss (obj) {
- const flat = flatten(obj)
- let str = JSON.stringify(flat, null, 2)
- str = str.replace(/"([^"]*)": {/g, '$1 {')
- .replace(/"([^"]*)"/g, '$1')
- .replace(/(\w*-?\w*): ([\w\d .#]*),?/g, '$1: $2;')
- .replace(/},/g, '}\n')
- .replace(/ &([.:])/g, '$1')
-
- str = str.substr(1, str.lastIndexOf('}') - 1)
-
- return str
-}
-
-function appendStyles (css) {
- let head = document.head || document.getElementsByTagName('head')[0]
- let styleElem = makeNode('style')
- styleElem.id = `${LIB_NAME}-styles`
- styleElem.type = 'text/css'
-
- if (styleElem.styleSheet) {
- styleElem.styleSheet.cssText = css
- } else {
- styleElem.appendChild(document.createTextNode(css))
- }
-
- head.appendChild(styleElem)
-}
-
-const config = {
- types: {ERROR, WARN, SUCCESS, INFO},
- animation: fadeOut,
- timeout: DEFAULT_TIMEOUT,
- icons: {},
- appendTarget: document.body,
- node: makeNode(),
- allowHtml: false,
- style: {
- [`.${CONTAINER_CLASS}`]: {
- position: 'fixed',
- 'z-index': 99999,
- right: '12px',
- top: '12px'
- },
- [`.${NOTIFICATION_CLASS}`]: {
- cursor: 'pointer',
- padding: '12px 18px',
- margin: '0 0 6px 0',
- 'background-color': '#000',
- opacity: 0.8,
- color: '#fff',
- 'border-radius': '3px',
- 'box-shadow': '#3c3b3b 0 0 12px',
- width: '300px',
- [`&.${ERROR_CLASS}`]: {
- 'background-color': '#D5122B'
- },
- [`&.${WARN_CLASS}`]: {
- 'background-color': '#F5AA1E'
- },
- [`&.${SUCCESS_CLASS}`]: {
- 'background-color': '#7AC13E'
- },
- [`&.${INFO_CLASS}`]: {
- 'background-color': '#4196E1'
- },
- '&:hover': {
- opacity: 1,
- 'box-shadow': '#000 0 0 12px'
- }
- },
- [`.${TITLE_CLASS}`]: {
- 'font-weight': '500'
- },
- [`.${MESSAGE_CLASS}`]: {
- display: 'inline-block',
- 'vertical-align': 'middle',
- width: '240px',
- padding: '0 12px'
- }
- }
-}
-
-function makeNode (type = 'div') {
- return document.createElement(type)
-}
-
-function createIcon (node, type, config) {
- const iconNode = makeNode(config.icons[type].nodeType)
- const attrs = config.icons[type].attrs
-
- for (const k in attrs) {
- if (attrs.hasOwnProperty(k)) {
- iconNode.setAttribute(k, attrs[k])
- }
- }
-
- node.appendChild(iconNode)
-}
-
-function addElem (node, text, className, config) {
- const elem = makeNode()
- elem.className = className
- if (config.allowHtml) {
- elem.innerHTML = text
- } else {
- elem.appendChild(document.createTextNode(text))
- }
- node.appendChild(elem)
-}
-
-function getTypeClass (type) {
- if (type === SUCCESS) return SUCCESS_CLASS
- if (type === WARN) return WARN_CLASS
- if (type === ERROR) return ERROR_CLASS
- if (type === INFO) return INFO_CLASS
-
- return EMPTY_STRING
-}
-
-const miniToastr = {
- config,
- isInitialised: false,
- showMessage (message, title, type, timeout, cb, overrideConf) {
- const config = {}
- Object.assign(config, this.config)
- Object.assign(config, overrideConf)
-
- const notificationElem = makeNode()
- notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`
-
- notificationElem.onclick = function () {
- config.animation(notificationElem, null)
- }
-
- if (title) addElem(notificationElem, title, TITLE_CLASS, config)
- if (config.icons[type]) createIcon(notificationElem, type, config)
- if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)
-
- config.node.insertBefore(notificationElem, config.node.firstChild)
- setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout
- )
-
- if (cb) cb()
- return this
- },
- init (aConfig) {
- const newConfig = {}
- Object.assign(newConfig, config)
- Object.assign(newConfig, aConfig)
- this.config = newConfig
-
- const cssStr = makeCss(newConfig.style)
- appendStyles(cssStr)
-
- newConfig.node.id = CONTAINER_CLASS
- newConfig.node.className = CONTAINER_CLASS
- newConfig.appendTarget.appendChild(newConfig.node)
-
- Object.keys(newConfig.types).forEach(v => {
- this[newConfig.types[v]] = function (message, title, timeout, cb, config) {
- this.showMessage(message, title, newConfig.types[v], timeout, cb, config)
- return this
- }.bind(this)
- }
- )
-
- this.isInitialised = true
-
- return this
- },
- setIcon (type, nodeType = 'i', attrs = []) {
- attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS
-
- this.config.icons[type] = {nodeType, attrs}
- }
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (miniToastr);
-
-/***/ }),
-
-/***/ "./node_modules/preact/dist/preact.mjs":
-/*!*********************************************!*\
- !*** ./node_modules/preact/dist/preact.mjs ***!
- \*********************************************/
-/*! exports provided: default, h, createElement, cloneElement, createRef, Component, render, rerender, options */
-/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; });
-var VNode = function VNode() {};
-
-var options = {};
-
-var stack = [];
-
-var EMPTY_CHILDREN = [];
-
-function h(nodeName, attributes) {
- var children = EMPTY_CHILDREN,
- lastSimple,
- child,
- simple,
- i;
- for (i = arguments.length; i-- > 2;) {
- stack.push(arguments[i]);
- }
- if (attributes && attributes.children != null) {
- if (!stack.length) stack.push(attributes.children);
- delete attributes.children;
- }
- while (stack.length) {
- if ((child = stack.pop()) && child.pop !== undefined) {
- for (i = child.length; i--;) {
- stack.push(child[i]);
- }
- } else {
- if (typeof child === 'boolean') child = null;
-
- if (simple = typeof nodeName !== 'function') {
- if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;
- }
-
- if (simple && lastSimple) {
- children[children.length - 1] += child;
- } else if (children === EMPTY_CHILDREN) {
- children = [child];
- } else {
- children.push(child);
- }
-
- lastSimple = simple;
- }
- }
-
- var p = new VNode();
- p.nodeName = nodeName;
- p.children = children;
- p.attributes = attributes == null ? undefined : attributes;
- p.key = attributes == null ? undefined : attributes.key;
-
- if (options.vnode !== undefined) options.vnode(p);
-
- return p;
-}
-
-function extend(obj, props) {
- for (var i in props) {
- obj[i] = props[i];
- }return obj;
-}
-
-function applyRef(ref, value) {
- if (ref != null) {
- if (typeof ref == 'function') ref(value);else ref.current = value;
- }
-}
-
-var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
-
-function cloneElement(vnode, props) {
- return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
-}
-
-var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
-
-var items = [];
-
-function enqueueRender(component) {
- if (!component._dirty && (component._dirty = true) && items.push(component) == 1) {
- (options.debounceRendering || defer)(rerender);
- }
-}
-
-function rerender() {
- var p;
- while (p = items.pop()) {
- if (p._dirty) renderComponent(p);
- }
-}
-
-function isSameNodeType(node, vnode, hydrating) {
- if (typeof vnode === 'string' || typeof vnode === 'number') {
- return node.splitText !== undefined;
- }
- if (typeof vnode.nodeName === 'string') {
- return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
- }
- return hydrating || node._componentConstructor === vnode.nodeName;
-}
-
-function isNamedNode(node, nodeName) {
- return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
-}
-
-function getNodeProps(vnode) {
- var props = extend({}, vnode.attributes);
- props.children = vnode.children;
-
- var defaultProps = vnode.nodeName.defaultProps;
- if (defaultProps !== undefined) {
- for (var i in defaultProps) {
- if (props[i] === undefined) {
- props[i] = defaultProps[i];
- }
- }
- }
-
- return props;
-}
-
-function createNode(nodeName, isSvg) {
- var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
- node.normalizedNodeName = nodeName;
- return node;
-}
-
-function removeNode(node) {
- var parentNode = node.parentNode;
- if (parentNode) parentNode.removeChild(node);
-}
-
-function setAccessor(node, name, old, value, isSvg) {
- if (name === 'className') name = 'class';
-
- if (name === 'key') {} else if (name === 'ref') {
- applyRef(old, null);
- applyRef(value, node);
- } else if (name === 'class' && !isSvg) {
- node.className = value || '';
- } else if (name === 'style') {
- if (!value || typeof value === 'string' || typeof old === 'string') {
- node.style.cssText = value || '';
- }
- if (value && typeof value === 'object') {
- if (typeof old !== 'string') {
- for (var i in old) {
- if (!(i in value)) node.style[i] = '';
- }
- }
- for (var i in value) {
- node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];
- }
- }
- } else if (name === 'dangerouslySetInnerHTML') {
- if (value) node.innerHTML = value.__html || '';
- } else if (name[0] == 'o' && name[1] == 'n') {
- var useCapture = name !== (name = name.replace(/Capture$/, ''));
- name = name.toLowerCase().substring(2);
- if (value) {
- if (!old) node.addEventListener(name, eventProxy, useCapture);
- } else {
- node.removeEventListener(name, eventProxy, useCapture);
- }
- (node._listeners || (node._listeners = {}))[name] = value;
- } else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {
- try {
- node[name] = value == null ? '' : value;
- } catch (e) {}
- if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);
- } else {
- var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
-
- if (value == null || value === false) {
- if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);
- } else if (typeof value !== 'function') {
- if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);
- }
- }
-}
-
-function eventProxy(e) {
- return this._listeners[e.type](options.event && options.event(e) || e);
-}
-
-var mounts = [];
-
-var diffLevel = 0;
-
-var isSvgMode = false;
-
-var hydrating = false;
-
-function flushMounts() {
- var c;
- while (c = mounts.shift()) {
- if (options.afterMount) options.afterMount(c);
- if (c.componentDidMount) c.componentDidMount();
- }
-}
-
-function diff(dom, vnode, context, mountAll, parent, componentRoot) {
- if (!diffLevel++) {
- isSvgMode = parent != null && parent.ownerSVGElement !== undefined;
-
- hydrating = dom != null && !('__preactattr_' in dom);
- }
-
- var ret = idiff(dom, vnode, context, mountAll, componentRoot);
-
- if (parent && ret.parentNode !== parent) parent.appendChild(ret);
-
- if (! --diffLevel) {
- hydrating = false;
-
- if (!componentRoot) flushMounts();
- }
-
- return ret;
-}
-
-function idiff(dom, vnode, context, mountAll, componentRoot) {
- var out = dom,
- prevSvgMode = isSvgMode;
-
- if (vnode == null || typeof vnode === 'boolean') vnode = '';
-
- if (typeof vnode === 'string' || typeof vnode === 'number') {
- if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {
- if (dom.nodeValue != vnode) {
- dom.nodeValue = vnode;
- }
- } else {
- out = document.createTextNode(vnode);
- if (dom) {
- if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
- recollectNodeTree(dom, true);
- }
- }
-
- out['__preactattr_'] = true;
-
- return out;
- }
-
- var vnodeName = vnode.nodeName;
- if (typeof vnodeName === 'function') {
- return buildComponentFromVNode(dom, vnode, context, mountAll);
- }
-
- isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;
-
- vnodeName = String(vnodeName);
- if (!dom || !isNamedNode(dom, vnodeName)) {
- out = createNode(vnodeName, isSvgMode);
-
- if (dom) {
- while (dom.firstChild) {
- out.appendChild(dom.firstChild);
- }
- if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
-
- recollectNodeTree(dom, true);
- }
- }
-
- var fc = out.firstChild,
- props = out['__preactattr_'],
- vchildren = vnode.children;
-
- if (props == null) {
- props = out['__preactattr_'] = {};
- for (var a = out.attributes, i = a.length; i--;) {
- props[a[i].name] = a[i].value;
- }
- }
-
- if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {
- if (fc.nodeValue != vchildren[0]) {
- fc.nodeValue = vchildren[0];
- }
- } else if (vchildren && vchildren.length || fc != null) {
- innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);
- }
-
- diffAttributes(out, vnode.attributes, props);
-
- isSvgMode = prevSvgMode;
-
- return out;
-}
-
-function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
- var originalChildren = dom.childNodes,
- children = [],
- keyed = {},
- keyedLen = 0,
- min = 0,
- len = originalChildren.length,
- childrenLen = 0,
- vlen = vchildren ? vchildren.length : 0,
- j,
- c,
- f,
- vchild,
- child;
-
- if (len !== 0) {
- for (var i = 0; i < len; i++) {
- var _child = originalChildren[i],
- props = _child['__preactattr_'],
- key = vlen && props ? _child._component ? _child._component.__key : props.key : null;
- if (key != null) {
- keyedLen++;
- keyed[key] = _child;
- } else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {
- children[childrenLen++] = _child;
- }
- }
- }
-
- if (vlen !== 0) {
- for (var i = 0; i < vlen; i++) {
- vchild = vchildren[i];
- child = null;
-
- var key = vchild.key;
- if (key != null) {
- if (keyedLen && keyed[key] !== undefined) {
- child = keyed[key];
- keyed[key] = undefined;
- keyedLen--;
- }
- } else if (min < childrenLen) {
- for (j = min; j < childrenLen; j++) {
- if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
- child = c;
- children[j] = undefined;
- if (j === childrenLen - 1) childrenLen--;
- if (j === min) min++;
- break;
- }
- }
- }
-
- child = idiff(child, vchild, context, mountAll);
-
- f = originalChildren[i];
- if (child && child !== dom && child !== f) {
- if (f == null) {
- dom.appendChild(child);
- } else if (child === f.nextSibling) {
- removeNode(f);
- } else {
- dom.insertBefore(child, f);
- }
- }
- }
- }
-
- if (keyedLen) {
- for (var i in keyed) {
- if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);
- }
- }
-
- while (min <= childrenLen) {
- if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);
- }
-}
-
-function recollectNodeTree(node, unmountOnly) {
- var component = node._component;
- if (component) {
- unmountComponent(component);
- } else {
- if (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);
-
- if (unmountOnly === false || node['__preactattr_'] == null) {
- removeNode(node);
- }
-
- removeChildren(node);
- }
-}
-
-function removeChildren(node) {
- node = node.lastChild;
- while (node) {
- var next = node.previousSibling;
- recollectNodeTree(node, true);
- node = next;
- }
-}
-
-function diffAttributes(dom, attrs, old) {
- var name;
-
- for (name in old) {
- if (!(attrs && attrs[name] != null) && old[name] != null) {
- setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
- }
- }
-
- for (name in attrs) {
- if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {
- setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
- }
- }
-}
-
-var recyclerComponents = [];
-
-function createComponent(Ctor, props, context) {
- var inst,
- i = recyclerComponents.length;
-
- if (Ctor.prototype && Ctor.prototype.render) {
- inst = new Ctor(props, context);
- Component.call(inst, props, context);
- } else {
- inst = new Component(props, context);
- inst.constructor = Ctor;
- inst.render = doRender;
- }
-
- while (i--) {
- if (recyclerComponents[i].constructor === Ctor) {
- inst.nextBase = recyclerComponents[i].nextBase;
- recyclerComponents.splice(i, 1);
- return inst;
- }
- }
-
- return inst;
-}
-
-function doRender(props, state, context) {
- return this.constructor(props, context);
-}
-
-function setComponentProps(component, props, renderMode, context, mountAll) {
- if (component._disable) return;
- component._disable = true;
-
- component.__ref = props.ref;
- component.__key = props.key;
- delete props.ref;
- delete props.key;
-
- if (typeof component.constructor.getDerivedStateFromProps === 'undefined') {
- if (!component.base || mountAll) {
- if (component.componentWillMount) component.componentWillMount();
- } else if (component.componentWillReceiveProps) {
- component.componentWillReceiveProps(props, context);
- }
- }
-
- if (context && context !== component.context) {
- if (!component.prevContext) component.prevContext = component.context;
- component.context = context;
- }
-
- if (!component.prevProps) component.prevProps = component.props;
- component.props = props;
-
- component._disable = false;
-
- if (renderMode !== 0) {
- if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {
- renderComponent(component, 1, mountAll);
- } else {
- enqueueRender(component);
- }
- }
-
- applyRef(component.__ref, component);
-}
-
-function renderComponent(component, renderMode, mountAll, isChild) {
- if (component._disable) return;
-
- var props = component.props,
- state = component.state,
- context = component.context,
- previousProps = component.prevProps || props,
- previousState = component.prevState || state,
- previousContext = component.prevContext || context,
- isUpdate = component.base,
- nextBase = component.nextBase,
- initialBase = isUpdate || nextBase,
- initialChildComponent = component._component,
- skip = false,
- snapshot = previousContext,
- rendered,
- inst,
- cbase;
-
- if (component.constructor.getDerivedStateFromProps) {
- state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
- component.state = state;
- }
-
- if (isUpdate) {
- component.props = previousProps;
- component.state = previousState;
- component.context = previousContext;
- if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {
- skip = true;
- } else if (component.componentWillUpdate) {
- component.componentWillUpdate(props, state, context);
- }
- component.props = props;
- component.state = state;
- component.context = context;
- }
-
- component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
- component._dirty = false;
-
- if (!skip) {
- rendered = component.render(props, state, context);
-
- if (component.getChildContext) {
- context = extend(extend({}, context), component.getChildContext());
- }
-
- if (isUpdate && component.getSnapshotBeforeUpdate) {
- snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
- }
-
- var childComponent = rendered && rendered.nodeName,
- toUnmount,
- base;
-
- if (typeof childComponent === 'function') {
-
- var childProps = getNodeProps(rendered);
- inst = initialChildComponent;
-
- if (inst && inst.constructor === childComponent && childProps.key == inst.__key) {
- setComponentProps(inst, childProps, 1, context, false);
- } else {
- toUnmount = inst;
-
- component._component = inst = createComponent(childComponent, childProps, context);
- inst.nextBase = inst.nextBase || nextBase;
- inst._parentComponent = component;
- setComponentProps(inst, childProps, 0, context, false);
- renderComponent(inst, 1, mountAll, true);
- }
-
- base = inst.base;
- } else {
- cbase = initialBase;
-
- toUnmount = initialChildComponent;
- if (toUnmount) {
- cbase = component._component = null;
- }
-
- if (initialBase || renderMode === 1) {
- if (cbase) cbase._component = null;
- base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
- }
- }
-
- if (initialBase && base !== initialBase && inst !== initialChildComponent) {
- var baseParent = initialBase.parentNode;
- if (baseParent && base !== baseParent) {
- baseParent.replaceChild(base, initialBase);
-
- if (!toUnmount) {
- initialBase._component = null;
- recollectNodeTree(initialBase, false);
- }
- }
- }
-
- if (toUnmount) {
- unmountComponent(toUnmount);
- }
-
- component.base = base;
- if (base && !isChild) {
- var componentRef = component,
- t = component;
- while (t = t._parentComponent) {
- (componentRef = t).base = base;
- }
- base._component = componentRef;
- base._componentConstructor = componentRef.constructor;
- }
- }
-
- if (!isUpdate || mountAll) {
- mounts.push(component);
- } else if (!skip) {
-
- if (component.componentDidUpdate) {
- component.componentDidUpdate(previousProps, previousState, snapshot);
- }
- if (options.afterUpdate) options.afterUpdate(component);
- }
-
- while (component._renderCallbacks.length) {
- component._renderCallbacks.pop().call(component);
- }if (!diffLevel && !isChild) flushMounts();
-}
-
-function buildComponentFromVNode(dom, vnode, context, mountAll) {
- var c = dom && dom._component,
- originalComponent = c,
- oldDom = dom,
- isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
- isOwner = isDirectOwner,
- props = getNodeProps(vnode);
- while (c && !isOwner && (c = c._parentComponent)) {
- isOwner = c.constructor === vnode.nodeName;
- }
-
- if (c && isOwner && (!mountAll || c._component)) {
- setComponentProps(c, props, 3, context, mountAll);
- dom = c.base;
- } else {
- if (originalComponent && !isDirectOwner) {
- unmountComponent(originalComponent);
- dom = oldDom = null;
- }
-
- c = createComponent(vnode.nodeName, props, context);
- if (dom && !c.nextBase) {
- c.nextBase = dom;
-
- oldDom = null;
- }
- setComponentProps(c, props, 1, context, mountAll);
- dom = c.base;
-
- if (oldDom && dom !== oldDom) {
- oldDom._component = null;
- recollectNodeTree(oldDom, false);
- }
- }
-
- return dom;
-}
-
-function unmountComponent(component) {
- if (options.beforeUnmount) options.beforeUnmount(component);
-
- var base = component.base;
-
- component._disable = true;
-
- if (component.componentWillUnmount) component.componentWillUnmount();
-
- component.base = null;
-
- var inner = component._component;
- if (inner) {
- unmountComponent(inner);
- } else if (base) {
- if (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);
-
- component.nextBase = base;
-
- removeNode(base);
- recyclerComponents.push(component);
-
- removeChildren(base);
- }
-
- applyRef(component.__ref, null);
-}
-
-function Component(props, context) {
- this._dirty = true;
-
- this.context = context;
-
- this.props = props;
-
- this.state = this.state || {};
-
- this._renderCallbacks = [];
-}
-
-extend(Component.prototype, {
- setState: function setState(state, callback) {
- if (!this.prevState) this.prevState = this.state;
- this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);
- if (callback) this._renderCallbacks.push(callback);
- enqueueRender(this);
- },
- forceUpdate: function forceUpdate(callback) {
- if (callback) this._renderCallbacks.push(callback);
- renderComponent(this, 2);
- },
- render: function render() {}
-});
-
-function render(vnode, parent, merge) {
- return diff(merge, vnode, {}, false, parent, false);
-}
-
-function createRef() {
- return {};
-}
-
-var preact = {
- h: h,
- createElement: h,
- cloneElement: cloneElement,
- createRef: createRef,
- Component: Component,
- render: render,
- rerender: rerender,
- options: options
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (preact);
-
-//# sourceMappingURL=preact.mjs.map
-
-
-/***/ }),
-
-/***/ "./node_modules/webpack/buildin/global.js":
-/*!***********************************!*\
- !*** (webpack)/buildin/global.js ***!
- \***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-var g;
-
-// This works in non-strict mode
-g = (function() {
- return this;
-})();
-
-try {
- // This works if eval is allowed (see CSP)
- g = g || new Function("return this")();
-} catch (e) {
- // This works if the window reference is available
- if (typeof window === "object") g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
-
-
-/***/ }),
-
-/***/ "./src/app.js":
-/*!********************!*\
- !*** ./src/app.js ***!
- \********************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js");
-/* harmony import */ var _components_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/menu */ "./src/components/menu/index.js");
-/* harmony import */ var _components_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/page */ "./src/components/page/index.js");
-/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conf/config.dat */ "./src/conf/config.dat.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/loader */ "./src/lib/loader.js");
-/* harmony import */ var _lib_plugins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/plugins */ "./src/lib/plugins.js");
-/* harmony import */ var _lib_menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/menu */ "./src/lib/menu.js");
-
-
-
-
-
-
-
-
-
-mini_toastr__WEBPACK_IMPORTED_MODULE_1__["default"].init({});
-
-const clearSlashes = path => {
- return path.toString().replace(/\/$/, '').replace(/^\//, '');
-};
-
-const getFragment = () => {
- const match = window.location.href.match(/#(.*)$/);
- const fragment = match ? match[1] : '';
- return clearSlashes(fragment);
-};
-
-class App extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor() {
- super();
- this.state = {
- menuActive: false,
- menu: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0],
- page: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus[0],
- changed: false
- };
-
- this.menuToggle = () => {
- this.setState({
- menuActive: !this.state.menuActive
- });
- };
- }
-
- render(props, state) {
- const params = getFragment().split('/').slice(2);
- const active = this.state.menuActive ? 'active' : '';
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- id: "layout",
- class: active
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- id: "menuLink",
- class: "menu-link",
- onClick: this.menuToggle
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", null)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_menu__WEBPACK_IMPORTED_MODULE_2__["Menu"], {
- menus: _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus,
- selected: state.menu
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_page__WEBPACK_IMPORTED_MODULE_3__["Page"], {
- page: state.page,
- params: params,
- changed: this.state.changed
- }));
- }
-
- componentDidMount() {
- _lib_loader__WEBPACK_IMPORTED_MODULE_6__["loader"].hide();
- let current = '';
-
- const fn = () => {
- const newFragment = getFragment();
- const diff = _lib_settings__WEBPACK_IMPORTED_MODULE_5__["settings"].diff();
-
- if (this.state.changed !== !!diff.length) {
- this.setState({
- changed: !this.state.changed
- });
- }
-
- if (current !== newFragment) {
- current = newFragment;
- const parts = current.split('/');
- const m = _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].menus.find(menu => menu.href === parts[0]);
- const page = parts.length > 1 ? _lib_menu__WEBPACK_IMPORTED_MODULE_8__["menu"].routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m;
-
- if (page) {
- this.setState({
- page,
- menu: m,
- menuActive: false
- });
- }
- }
- };
-
- this.interval = setInterval(fn, 100);
- }
-
- componentWillUnmount() {}
-
-}
-
-const load = async () => {
- await Object(_conf_config_dat__WEBPACK_IMPORTED_MODULE_4__["loadConfig"])();
- await Object(_lib_plugins__WEBPACK_IMPORTED_MODULE_7__["loadPlugins"])();
- Object(preact__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(App, null), document.body);
-};
-
-load();
-
-/***/ }),
-
-/***/ "./src/components/espeasy_p2p/index.js":
-/*!*********************************************!*\
- !*** ./src/components/espeasy_p2p/index.js ***!
- \*********************************************/
-/*! exports provided: EspEaspP2PComponent */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EspEaspP2PComponent", function() { return EspEaspP2PComponent; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-class EspEaspP2PComponent extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- nodes: []
- };
-
- this.refresh = () => {
- fetch('/node_list_json').then(res => res.json()).then(nodes => {
- this.setState({
- nodes
- });
- });
- };
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", null, this.state.nodes.map(node => {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", null, "Unit ", node.first, ": ", node.name, " [", node.ip, "]");
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.refresh
- }, "REFRESH"));
- }
-
- componentDidMount() {
- this.refresh();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/components/form/index.js":
-/*!**************************************!*\
- !*** ./src/components/form/index.js ***!
- \**************************************/
-/*! exports provided: Form */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Form", function() { return Form; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/helpers */ "./src/lib/helpers.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/settings */ "./src/lib/settings.js");
-
-
-
-class Form extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
-
- this.onChange = (id, prop, config = {}) => {
- return e => {
- let val = this.form.elements[id].value;
-
- if (config.type === 'checkbox') {
- val = this.form.elements[id].checked ? 1 : 0;
- } else if (config.type === 'number' || config.type === 'ip') {
- val = parseFloat(val);
- } else if (config.type === 'select') {
- val = isNaN(val) ? val : parseInt(val);
- }
-
- if (prop.startsWith('ROOT')) {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(prop.replace('ROOT.', ''), val);
- } else {
- Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["set"])(this.props.selected, prop, val);
- }
-
- if (config.onChange) {
- config.onChange(e);
- }
- };
- };
- }
-
- renderConfig(id, config, value, varName) {
- switch (config.type) {
- case 'string':
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: id,
- type: "text",
- value: value,
- onChange: this.onChange(id, varName, config)
- });
-
- case 'number':
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: id,
- type: "number",
- value: value,
- min: config.min,
- max: config.max,
- onChange: this.onChange(id, varName, config)
- });
-
- case 'ip':
- return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: `${id}.0`,
- type: "number",
- min: "0",
- max: "255",
- onChange: this.onChange(`${id}.0`, `${varName}.0`, config),
- style: "width: 80px",
- value: value ? value[0] : null
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: `${id}.1`,
- type: "number",
- min: "0",
- max: "255",
- onChange: this.onChange(`${id}.1`, `${varName}.1`, config),
- style: "width: 80px",
- value: value ? value[1] : null
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: `${id}.2`,
- type: "number",
- min: "0",
- max: "255",
- onChange: this.onChange(`${id}.2`, `${varName}.2`, config),
- style: "width: 80px",
- value: value ? value[2] : null
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: `${id}.3`,
- type: "number",
- min: "0",
- max: "255",
- onChange: this.onChange(`${id}.3`, `${varName}.3`, config),
- style: "width: 80px",
- value: value ? value[3] : null
- })];
-
- case 'password':
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: id,
- type: "password",
- onChange: this.onChange(id, varName, config)
- });
-
- case 'checkbox':
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: id,
- type: "checkbox",
- defaultChecked: value,
- onChange: this.onChange(id, varName, config)
- });
-
- case 'select':
- const options = typeof config.options === 'function' ? config.options() : config.options;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", {
- id: id,
- type: "password",
- onChange: this.onChange(id, varName, config)
- }, options.map(option => {
- const name = option instanceof Object ? option.name : option;
- const val = option instanceof Object ? option.value : option;
-
- if (val === value) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: val,
- selected: true
- }, name);
- } else {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: val
- }, name);
- }
- }));
-
- case 'file':
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: id,
- type: "file"
- });
-
- case 'button':
- const clickEvent = () => {
- if (!config.click) return;
- config.click(this.props.selected);
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: clickEvent
- }, "GET IT");
- }
- }
-
- renderConfigGroup(id, configs, values) {
- const configArray = Array.isArray(configs) ? configs : [configs];
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-control-group"
- }, configArray.map((conf, i) => {
- const varId = configArray.length > 1 ? `${id}.${i}` : id;
- const varName = conf.var ? conf.var : varId;
- const val = varName.startsWith('ROOT') ? _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(varName.replace('ROOT.', '')) : Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["get"])(values, varName, null);
-
- if (conf.if) {
- if (!Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["get"])(_lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].settings, conf.if, false)) return null;
- }
-
- if (conf.type === 'custom') {
- const CustomComponent = conf.component;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(CustomComponent, {
- conf: conf,
- values: values
- });
- }
-
- return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", {
- for: varId
- }, conf.name), this.renderConfig(varId, conf, val, varName)];
- }));
- }
-
- renderGroup(id, group, values) {
- if (!group.configs || !Object.keys(group.configs).length) return null;
- const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(group.configs);
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("fieldset", {
- name: id
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", null, group.name), keys.map(key => {
- const conf = group.configs[key];
- return this.renderConfigGroup(`${id}.${key}`, conf, values);
- }));
- }
-
- render(props) {
- const keys = Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_1__["getKeys"])(props.config.groups);
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- class: "pure-form pure-form-aligned",
- ref: ref => this.form = ref
- }, keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected)));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/components/menu/index.js":
-/*!**************************************!*\
- !*** ./src/components/menu/index.js ***!
- \**************************************/
-/*! exports provided: Menu */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Menu", function() { return Menu; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-class Menu extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- renderMenuItem(menu) {
- if (menu.action) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: "pure-menu-item"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: `#${menu.href}`,
- onClick: menu.action,
- class: "pure-menu-link"
- }, menu.title));
- }
-
- if (menu.href === this.props.selected.href) {
- return [Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: "pure-menu-item pure-menu-item-selected"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: `#${menu.href}`,
- class: "pure-menu-link"
- }, menu.title)), ...menu.children.map(child => {
- if (child.action) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: "pure-menu-item submenu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: `#${child.href}`,
- onClick: child.action,
- class: "pure-menu-link"
- }, child.title));
- }
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: "pure-menu-item submenu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: `#${child.href}`,
- class: "pure-menu-link"
- }, child.title));
- })];
- }
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: "pure-menu-item"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: `#${menu.href}`,
- class: "pure-menu-link"
- }, menu.title));
- }
-
- render(props) {
- if (props.open === false) return;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- id: "menu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-menu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- class: "pure-menu-heading",
- href: "/"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "ESP"), "Easy"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", {
- class: "pure-menu-list"
- }, props.menus.map(menu => this.renderMenuItem(menu)))));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/components/page/index.js":
-/*!**************************************!*\
- !*** ./src/components/page/index.js ***!
- \**************************************/
-/*! exports provided: Page */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Page", function() { return Page; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-class Page extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- const PageComponent = props.page.component;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- id: "main"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "header"
- }, "> ", props.page.pagetitle == null ? props.page.title : props.page.pagetitle, props.changed ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- style: "float: right",
- href: "#tools/diff"
- }, "CHANGED! Click here to SAVE") : null), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: `content ${props.page.class}`
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(PageComponent, {
- params: props.params
- })));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/conf/config.dat.js":
-/*!********************************!*\
- !*** ./src/conf/config.dat.js ***!
- \********************************/
-/*! exports provided: configDatParseConfig, TaskSettings, ControllerSettings, NotificationSettings, SecuritySettings, loadConfig, saveConfig */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "configDatParseConfig", function() { return configDatParseConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TaskSettings", function() { return TaskSettings; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerSettings", function() { return ControllerSettings; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationSettings", function() { return NotificationSettings; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SecuritySettings", function() { return SecuritySettings; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadConfig", function() { return loadConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveConfig", function() { return saveConfig; });
-/* harmony import */ var _lib_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/parser */ "./src/lib/parser.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-
-
-const TASKS_MAX = 12;
-const NOTIFICATION_MAX = 3;
-const CONTROLLER_MAX = 3;
-const PLUGIN_CONFIGVAR_MAX = 8;
-const PLUGIN_CONFIGFLOATVAR_MAX = 4;
-const PLUGIN_CONFIGLONGVAR_MAX = 4;
-const PLUGIN_EXTRACONFIGVAR_MAX = 16;
-const NAME_FORMULA_LENGTH_MAX = 40;
-const VARS_PER_TASK = 4;
-const configDatParseConfig = [{
- prop: 'status.PID',
- type: 'int32'
-}, {
- prop: 'status.version',
- type: 'int32'
-}, {
- prop: 'status.build',
- type: 'int16'
-}, {
- prop: 'config.IP.ip',
- type: 'bytes',
- length: 4
-}, {
- prop: 'config.IP.gw',
- type: 'bytes',
- length: 4
-}, {
- prop: 'config.IP.subnet',
- type: 'bytes',
- length: 4
-}, {
- prop: 'config.IP.dns',
- type: 'bytes',
- length: 4
-}, {
- prop: 'config.experimental.ip_octet',
- type: 'byte'
-}, {
- prop: 'config.general.unitnr',
- type: 'byte'
-}, {
- prop: 'config.general.unitname',
- type: 'string',
- length: 26
-}, {
- prop: 'config.ntp.host',
- type: 'string',
- length: 64
-}, {
- prop: 'config.sleep.sleeptime',
- type: 'int32'
-}, {
- prop: 'hardware.i2c.sda',
- type: 'byte'
-}, {
- prop: 'hardware.i2c.scl',
- type: 'byte'
-}, {
- prop: 'hardware.led.gpio',
- type: 'byte'
-}, {
- prop: 'Pin_sd_cs',
- type: 'byte'
-}, // TODO
-{
- prop: 'hardware.gpio',
- type: 'bytes',
- length: 17
-}, {
- prop: 'config.log.syslog_ip',
- type: 'bytes',
- length: 4
-}, {
- prop: 'config.espnetwork.port',
- type: 'int32'
-}, {
- prop: 'config.log.syslog_level',
- type: 'byte'
-}, {
- prop: 'config.log.serial_level',
- type: 'byte'
-}, {
- prop: 'config.log.web_level',
- type: 'byte'
-}, {
- prop: 'config.log.sd_level',
- type: 'byte'
-}, {
- prop: 'config.serial.baudrate',
- type: 'int32'
-}, {
- prop: 'config.mqtt.interval',
- type: 'int32'
-}, {
- prop: 'config.sleep.awaketime',
- type: 'byte'
-}, {
- prop: 'CustomCSS',
- type: 'byte'
-}, // TODO
-{
- prop: 'config.dst.enabled',
- type: 'byte'
-}, {
- prop: 'config.experimental.WDI2CAddress',
- type: 'byte'
-}, {
- prop: 'config.rules.enabled',
- type: 'byte'
-}, {
- prop: 'config.serial.enabled',
- type: 'byte'
-}, {
- prop: 'config.ssdp.enabled',
- type: 'byte'
-}, {
- prop: 'config.ntp.enabled',
- type: 'byte'
-}, {
- prop: 'config.experimental.WireClockStretchLimit',
- type: 'int32'
-}, {
- prop: 'GlobalSync',
- type: 'byte'
-}, // TODO
-{
- prop: 'config.experimental.ConnectionFailuresThreshold',
- type: 'int32'
-}, {
- prop: 'TimeZone',
- type: 'int16',
- signed: true
-}, // TODO
-{
- prop: 'config.mqtt.retain_flag',
- type: 'byte'
-}, {
- prop: 'hardware.spi.enabled',
- type: 'byte'
-}, [...Array(CONTROLLER_MAX)].map((x, i) => ({
- prop: `controllers[${i}].protocol`,
- type: 'byte'
-})), [...Array(NOTIFICATION_MAX)].map((x, i) => ({
- prop: `notifications[${i}].type`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].device`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].OLD_TaskDeviceID`,
- type: 'int32'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].gpio1`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].gpio2`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].gpio3`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].gpio4`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].pin1pullup`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].configs`,
- type: 'ints',
- length: PLUGIN_CONFIGVAR_MAX
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].pin1inversed`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].configs_float`,
- type: 'floats',
- length: PLUGIN_CONFIGFLOATVAR_MAX
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].configs_long`,
- type: 'longs',
- length: PLUGIN_CONFIGLONGVAR_MAX
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].OLD_senddata`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].global_sync`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].data_feed`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].interval`,
- type: 'int32'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].enabled`,
- type: 'byte'
-})), [...Array(CONTROLLER_MAX)].map((x, i) => ({
- prop: `controllers[${i}].enabled`,
- type: 'byte'
-})), [...Array(NOTIFICATION_MAX)].map((x, i) => ({
- prop: `notifications[${i}].enabled`,
- type: 'byte'
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].TaskDeviceID`,
- type: 'longs',
- length: CONTROLLER_MAX
-})), [...Array(TASKS_MAX)].map((x, i) => ({
- prop: `tasks[${i}].TaskDeviceSendData`,
- type: 'bytes',
- length: CONTROLLER_MAX
-})), {
- prop: 'hardware.led.inverse',
- type: 'byte'
-}, {
- prop: 'config.sleep.sleeponfailiure',
- type: 'byte'
-}, {
- prop: 'UseValueLogger',
- type: 'byte'
-}, // TODO
-{
- prop: 'ArduinoOTAEnable',
- type: 'byte'
-}, // TODO
-{
- prop: 'config.dst.DST_Start',
- type: 'int16'
-}, {
- prop: 'config.dst.DST_End',
- type: 'int16'
-}, {
- prop: 'UseRTOSMultitasking',
- type: 'byte'
-}, // TODO
-{
- prop: 'hardware.reset.pin',
- type: 'byte'
-}, {
- prop: 'config.log.syslog_facility',
- type: 'byte'
-}, {
- prop: 'StructSize',
- type: 'int32'
-}, // TODO
-{
- prop: 'config.mqtt.useunitname',
- type: 'byte'
-}, {
- prop: 'config.location.lat',
- type: 'float'
-}, {
- prop: 'config.location.long',
- type: 'float'
-}, {
- prop: 'config._emptyBit',
- type: 'bit'
-}, {
- prop: 'config.general.appendunit',
- type: 'bit'
-}, {
- prop: 'config.mqtt.changeclientid',
- type: 'bit'
-}, {
- prop: 'config.rules.oldengine',
- type: 'bit'
-}, {
- prop: 'config._bit4',
- type: 'bit'
-}, {
- prop: 'config._bit5',
- type: 'bit'
-}, {
- prop: 'config._bit6',
- type: 'bit'
-}, {
- prop: 'config._bit7',
- type: 'bit'
-}, {
- prop: 'config._bits1',
- type: 'byte'
-}, {
- prop: 'config._bits2',
- type: 'byte'
-}, {
- prop: 'config._bits3',
- type: 'byte'
-}, {
- prop: 'ResetFactoryDefaultPreference',
- type: 'int32'
-}].flat();
-const TaskSettings = [{
- prop: 'index',
- type: 'byte'
-}, {
- prop: 'name',
- type: 'string',
- length: NAME_FORMULA_LENGTH_MAX + 1
-}, [...Array(VARS_PER_TASK)].map((x, i) => ({
- prop: `values[${i}].formula`,
- type: 'string',
- length: NAME_FORMULA_LENGTH_MAX + 1
-})), [...Array(VARS_PER_TASK)].map((x, i) => ({
- prop: `values[${i}].name`,
- type: 'string',
- length: NAME_FORMULA_LENGTH_MAX + 1
-})), {
- prop: 'value_names',
- type: 'string',
- length: NAME_FORMULA_LENGTH_MAX + 1
-}, {
- prop: 'plugin_config_long',
- type: 'longs',
- length: PLUGIN_EXTRACONFIGVAR_MAX
-}, {
- prop: 'decimals',
- type: 'bytes',
- length: VARS_PER_TASK
-}, {
- prop: 'plugin_config',
- type: 'ints',
- length: PLUGIN_EXTRACONFIGVAR_MAX
-}].flat();
-const ControllerSettings = [{
- prop: 'dns',
- type: 'byte'
-}, {
- prop: 'IP',
- type: 'bytes',
- length: 4
-}, {
- prop: 'port',
- type: 'int32'
-}, {
- prop: 'hostname',
- type: 'string',
- length: 65
-}, {
- prop: 'publish',
- type: 'string',
- length: 129
-}, {
- prop: 'subscribe',
- type: 'string',
- length: 129
-}, {
- prop: 'MQTT_lwt_topic',
- type: 'string',
- length: 129
-}, {
- prop: 'lwt_message_connect',
- type: 'string',
- length: 129
-}, {
- prop: 'lwt_message_disconnect',
- type: 'string',
- length: 129
-}, {
- prop: 'minimal_time_between',
- type: 'int32'
-}, {
- prop: 'max_queue_depth',
- type: 'int32'
-}, {
- prop: 'max_retry',
- type: 'int32'
-}, {
- prop: 'delete_oldest',
- type: 'byte'
-}, {
- prop: 'client_timeout',
- type: 'int32'
-}, {
- prop: 'must_check_reply',
- type: 'byte'
-}];
-const NotificationSettings = [{
- prop: 'server',
- type: 'string',
- length: 65
-}, {
- prop: 'port',
- type: 'int16'
-}, {
- prop: 'domain',
- type: 'string',
- length: 65
-}, {
- prop: 'sender',
- type: 'string',
- length: 65
-}, {
- prop: 'receiver',
- type: 'string',
- length: 65
-}, {
- prop: 'subject',
- type: 'string',
- length: 129
-}, {
- prop: 'body',
- type: 'string',
- length: 513
-}, {
- prop: 'pin1',
- type: 'byte'
-}, {
- prop: 'pin2',
- type: 'byte'
-}, {
- prop: 'user',
- type: 'string',
- length: 49
-}, {
- prop: 'pass',
- type: 'string',
- length: 33
-}];
-const SecuritySettings = [{
- prop: 'WifiSSID',
- type: 'string',
- length: 32
-}, {
- prop: 'WifiKey',
- type: 'string',
- length: 64
-}, {
- prop: 'WifiSSID2',
- type: 'string',
- length: 32
-}, {
- prop: 'WifiKey2',
- type: 'string',
- length: 64
-}, {
- prop: 'WifiAPKey',
- type: 'string',
- length: 64
-}, [...Array(CONTROLLER_MAX)].map((x, i) => ({
- prop: `controllers[${i}].user`,
- type: 'string',
- length: 26
-})), [...Array(CONTROLLER_MAX)].map((x, i) => ({
- prop: `controllers[${i}].password`,
- type: 'string',
- length: 64
-})), {
- prop: 'password',
- type: 'string',
- length: 26
-}, {
- prop: 'AllowedIPrangeLow',
- type: 'bytes',
- length: 4
-}, {
- prop: 'AllowedIPrangeHigh',
- type: 'bytes',
- length: 4
-}, {
- prop: 'IPblockLevel',
- type: 'byte'
-}, {
- prop: 'ProgmemMd5',
- type: 'bytes',
- length: 16
-}, {
- prop: 'md5',
- type: 'bytes',
- length: 16
-}].flat();
-const loadConfig = () => {
- return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => {
- const settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, configDatParseConfig);
- [...Array(12)].map((x, i) => {
- settings.tasks[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, TaskSettings, 1024 * 4 + 1024 * 2 * i);
- settings.tasks[i].extra = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, TaskSettings, 1024 * 5 + 1024 * 2 * i);
- });
- [...Array(3)].map((x, i) => {
- settings.controllers[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, ControllerSettings, 1024 * 27 + 1024 * 2 * i);
- settings.controllers[i].extra = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(response, ControllerSettings, 1024 * 28 + 1024 * 2 * i);
- });
- const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());
- [...Array(3)].map((x, i) => {
- settings.notifications[i].settings = Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(notificationResponse, NotificationSettings, 1024 * i);
- });
- const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());
- settings.config.security = [...Array(3)].map((x, i) => {
- return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["parseConfig"])(securityResponse, SecuritySettings, 1024 * i);
- });
- return {
- response,
- settings
- };
- }).then(conf => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].init(conf.settings);
- _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].binary = new Uint8Array(conf.response);
- console.log(conf.settings);
- });
-};
-let ii = 0;
-const saveConfig = (save = true) => {
- if (ii === 0) {
- const buffer = new ArrayBuffer(65536);
- Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings, configDatParseConfig);
- [...Array(12)].map((x, i) => {
- return {
- settings: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.tasks[i].settings, TaskSettings, 1024 * 4 + 1024 * 2 * i),
- extra: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.tasks[i].extra, TaskSettings, 1024 * 5 + 1024 * 2 * i)
- };
- });
- [...Array(3)].map((x, i) => {
- return {
- settings: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.controllers[i].settings, ControllerSettings, 1024 * 27 + 1024 * 2 * i),
- extra: Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(buffer, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.controllers[i].extra, ControllerSettings, 1024 * 28 + 1024 * 2 * i)
- };
- });
- if (save) saveData(buffer, 'config.dat');else return buffer;
- } else if (ii === 1) {
- const bufferNotifications = new ArrayBuffer(4096);
- [...Array(3)].map((x, i) => {
- return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(bufferNotifications, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.notifications[i], NotificationSettings, 1024 * i);
- });
- saveData(bufferNotifications, 'notification.dat');
- } else if (ii === 2) {
- const bufferSecurity = new ArrayBuffer(4096);
- [...Array(3)].map((x, i) => {
- return Object(_lib_parser__WEBPACK_IMPORTED_MODULE_0__["writeConfig"])(bufferSecurity, _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].settings.security[i], SecuritySettings, 1024 * i);
- });
- saveData(bufferSecurity, 'security.dat');
- }
-
- ii = (ii + 1) % 3;
-};
-
-const saveData = function () {
- const a = document.createElement("a");
- document.body.appendChild(a);
- a.style = "display: none";
- return function (data, fileName) {
- const blob = new Blob([new Uint8Array(data)]);
- const url = window.URL.createObjectURL(blob);
- a.href = url;
- a.download = fileName;
- a.click();
- window.URL.revokeObjectURL(url);
- };
-}();
-
-/***/ }),
-
-/***/ "./src/devices/10_light_lux.js":
-/*!*************************************!*\
- !*** ./src/devices/10_light_lux.js ***!
- \*************************************/
-/*! exports provided: bh1750 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bh1750", function() { return bh1750; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 35,
- name: '0x23 (35) - default'
-}, {
- value: 92,
- name: '0x5c (92)'
-}];
-const measurmentMode = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const bh1750 = {
- defaults: () => ({
- 'configs[0]': 35,
- 'settings.values[0].name': 'Lux'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- mode: {
- name: 'Measurement mode',
- type: 'select',
- options: measurmentMode,
- var: 'configs[1]'
- },
- send_to_sleep: {
- name: 'Send sensor to sleep',
- type: 'checkbox',
- var: 'configs[2]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/11_pme.js":
-/*!*******************************!*\
- !*** ./src/devices/11_pme.js ***!
- \*******************************/
-/*! exports provided: pme */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pme", function() { return pme; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const mode = [{
- value: 0,
- name: 'Digital'
-}, {
- value: 1,
- name: 'Analog'
-}];
-const pme = {
- defaults: () => ({
- 'settings.values[0].name': 'Value'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- port: {
- name: 'Port',
- type: 'number',
- var: 'gpio4'
- },
- mode: {
- name: 'Port Type',
- type: 'select',
- options: mode,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/12_lcd.js":
-/*!*******************************!*\
- !*** ./src/devices/12_lcd.js ***!
- \*******************************/
-/*! exports provided: lcd2004 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lcd2004", function() { return lcd2004; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 35,
- name: '0x23 (35) - default'
-}, {
- value: 92,
- name: '0x5c (92)'
-}];
-const displaySize = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const lcdCommand = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const lcd2004 = {
- defaults: () => ({
- 'configs[0]': 32
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- size: {
- name: 'Display Size',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- line1: {
- name: 'Line 1',
- type: 'string'
- /*var: 'configs[2]' */
-
- },
- line2: {
- name: 'Line 2',
- type: 'string'
- /*var: 'configs[2]' */
-
- },
- line3: {
- name: 'Line 3',
- type: 'string'
- /*var: 'configs[2]' */
-
- },
- line4: {
- name: 'Line 4',
- type: 'string'
- /*var: 'configs[2]' */
-
- },
- button: {
- name: 'Display Button',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio3'
- },
- timeout: {
- name: 'Display Timeout',
- type: 'number',
- var: 'configs[2]'
- },
- command: {
- name: 'LCD Command Mode',
- type: 'select',
- options: lcdCommand,
- var: 'configs[3]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/13_hcsr04.js":
-/*!**********************************!*\
- !*** ./src/devices/13_hcsr04.js ***!
- \**********************************/
-/*! exports provided: hcsr04 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hcsr04", function() { return hcsr04; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const mode = [{
- value: 0,
- name: 'Value'
-}, {
- value: 1,
- name: 'State'
-}];
-const units = [{
- value: 0,
- name: 'Metric'
-}, {
- value: 1,
- name: 'Imperial'
-}];
-const filters = [{
- value: 0,
- name: 'None'
-}, {
- value: 1,
- name: 'Median'
-}];
-const hcsr04 = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'Distance'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio1: {
- name: 'GPIO Trigger',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO Echo, 5V',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- },
- mode: {
- name: 'Mode',
- type: 'select',
- options: mode,
- var: 'configs[0]'
- },
- treshold: {
- name: 'Treshold',
- type: 'number',
- var: 'configs[1]'
- },
- max_distance: {
- name: 'Max Distance',
- type: 'number',
- var: 'configs[2]'
- },
- unit: {
- name: 'Unit',
- type: 'select',
- options: units,
- var: 'configs[3]'
- },
- filter: {
- name: 'Filter',
- type: 'select',
- options: filters,
- var: 'configs[4]'
- },
- filter_size: {
- name: 'Filter Size',
- type: 'number',
- var: 'configs[5]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/14_si7021.js":
-/*!**********************************!*\
- !*** ./src/devices/14_si7021.js ***!
- \**********************************/
-/*! exports provided: si7021 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "si7021", function() { return si7021; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const resolution = [{
- value: 0,
- name: 'Temp 14 bits, RH 12 bits'
-}, {
- value: 128,
- name: 'Temp 13 bits, RH 10 bits'
-}, {
- value: 1,
- name: 'Temp 12 bits, RH 8 bits'
-}, {
- value: 129,
- name: 'Temp 11 bits, RH 11 bits'
-}];
-const si7021 = {
- defaults: () => ({
- interval: 60,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Humidity'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- resolution: {
- name: 'Resolution',
- type: 'select',
- options: resolution,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/15_tls2561.js":
-/*!***********************************!*\
- !*** ./src/devices/15_tls2561.js ***!
- \***********************************/
-/*! exports provided: tls2561 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tls2561", function() { return tls2561; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 57,
- name: '0x39 (57) - default'
-}, {
- value: 73,
- name: '0x49 (73)'
-}, {
- value: 41,
- name: '0x29 (41)'
-}];
-const measurmentMode = [{
- value: 0,
- name: '13 ms'
-}, {
- value: 1,
- name: '101 ms'
-}, {
- value: 2,
- name: '402 ms'
-}];
-const tls2561 = {
- defaults: () => ({
- 'configs[0]': 57,
- 'settings.values[0].name': 'Lux',
- 'settings.values[1].name': 'Infrared',
- 'settings.values[2].name': 'Broadband'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- mode: {
- name: 'Integration time',
- type: 'select',
- options: measurmentMode,
- var: 'configs[1]'
- },
- send_to_sleep: {
- name: 'Send sensor to sleep',
- type: 'checkbox',
- var: 'configs[2]'
- },
- gain: {
- name: 'Enable 16x gain',
- type: 'checkbox',
- var: 'configs[3]'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/17_pn532.js":
-/*!*********************************!*\
- !*** ./src/devices/17_pn532.js ***!
- \*********************************/
-/*! exports provided: pn532 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pn532", function() { return pn532; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const pn532 = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Tag'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio1: {
- name: 'Reset Pin',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/18_dust.js":
-/*!********************************!*\
- !*** ./src/devices/18_dust.js ***!
- \********************************/
-/*! exports provided: dust */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dust", function() { return dust; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 35,
- name: '0x23 (35) - default'
-}, {
- value: 92,
- name: '0x5c (92)'
-}];
-const measurmentMode = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const dust = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Dust'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio1: {
- name: 'GPIO - LED',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/19_pcf8574.js":
-/*!***********************************!*\
- !*** ./src/devices/19_pcf8574.js ***!
- \***********************************/
-/*! exports provided: pcf8574 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8574", function() { return pcf8574; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const eventTypes = [{
- value: 0,
- name: 'Disabled'
-}, {
- value: 1,
- name: 'Active on LOW'
-}, {
- value: 2,
- name: 'Active on HIGH'
-}, {
- value: 3,
- name: 'Active on LOW and HIGH'
-}];
-const pcf8574 = {
- defaults: () => ({
- gpio4: 0,
- 'settings.values[0].name': 'Switch'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- port: {
- name: 'PORT',
- type: 'number',
- var: 'gpio4'
- },
- inversed: {
- name: 'Inversed logic',
- type: 'checkbox',
- var: 'pin1inversed'
- },
- send_boot_state: {
- name: 'Send Boot State',
- type: 'checkbox',
- var: 'configs[3]'
- }
- }
- },
- advanced: {
- name: 'Advanced event management',
- configs: {
- debounce: {
- name: 'De-bounce (ms)',
- type: 'number',
- var: 'configs_float[0]'
- },
- dblclick: {
- name: 'Doublclick Event',
- type: 'select',
- options: eventTypes,
- var: 'configs[4]'
- },
- dblclick_interval: {
- name: 'Doubleclick Max interval (ms)',
- type: 'number',
- var: 'configs_float[1]'
- },
- longpress: {
- name: 'Longpress event',
- type: 'select',
- options: eventTypes,
- var: 'configs[5]'
- },
- longpress_interval: {
- name: 'Longpress min interval (ms)',
- type: 'number',
- var: 'configs_float[2]'
- },
- safe_button: {
- name: 'Use safe button',
- type: 'checkbox',
- var: 'configs_float[3]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/1_input_switch.js":
-/*!***************************************!*\
- !*** ./src/devices/1_input_switch.js ***!
- \***************************************/
-/*! exports provided: inputSwitch */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputSwitch", function() { return inputSwitch; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const eventTypes = [{
- value: 0,
- name: 'Disabled'
-}, {
- value: 1,
- name: 'Active on LOW'
-}, {
- value: 2,
- name: 'Active on HIGH'
-}, {
- value: 3,
- name: 'Active on LOW and HIGH'
-}];
-const inputSwitch = {
- defaults: () => ({
- gpio1: 255,
- interval: 60,
- 'configs_float[1]': 1000,
- 'configs_float[2]': 1000,
- 'settings.values[0].name': 'Switch'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- pullup: {
- name: 'Internal PullUp',
- type: 'checkbox',
- var: 'pin1pullup'
- },
- inversed: {
- name: 'Inversed logic',
- type: 'checkbox',
- var: 'pin1inversed'
- },
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- switch_type: {
- name: 'Switch Type',
- type: 'select',
- options: [{
- name: 'switch',
- value: 0
- }, {
- name: 'dimmer',
- value: 3
- }],
- var: 'configs[0]'
- },
- switch_button_type: {
- name: 'Switch Button Type',
- type: 'select',
- options: [{
- name: 'normal',
- value: 0
- }, {
- name: 'active low',
- value: 1
- }, {
- name: 'active high',
- value: 2
- }],
- var: 'configs[2]'
- },
- send_boot_state: {
- name: 'Send Boot State',
- type: 'checkbox',
- var: 'configs[3]'
- }
- }
- },
- advanced: {
- name: 'Advanced event management',
- configs: {
- debounce: {
- name: 'De-bounce (ms)',
- type: 'number',
- var: 'configs_float[0]'
- },
- dblclick: {
- name: 'Doublclick Event',
- type: 'select',
- options: eventTypes,
- var: 'configs[4]'
- },
- dblclick_interval: {
- name: 'Doubleclick Max interval (ms)',
- min: 1000,
- max: 3000,
- type: 'number',
- var: 'configs_float[1]'
- },
- longpress: {
- name: 'Longpress event',
- type: 'select',
- options: eventTypes,
- var: 'configs[5]'
- },
- longpress_interval: {
- name: 'Longpress min interval (ms)',
- min: 1000,
- max: 5000,
- type: 'number',
- var: 'configs_float[2]'
- },
- safe_button: {
- name: 'Use safe button',
- type: 'checkbox',
- var: 'configs_float[3]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/20_ser2net.js":
-/*!***********************************!*\
- !*** ./src/devices/20_ser2net.js ***!
- \***********************************/
-/*! exports provided: ser2net */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ser2net", function() { return ser2net; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const serialConfig = [{
- value: 0,
- name: 'No Parity'
-}, {
- value: 1,
- name: 'Even'
-}, {
- value: 2,
- name: 'Odd'
-}];
-const eventProcessing = [{
- value: 0,
- name: 'None'
-}, {
- value: 1,
- name: 'Generic'
-}, {
- value: 2,
- name: 'RFLink'
-}];
-const ser2net = {
- defaults: () => ({
- gpio1: 255
- }),
- sensor: {
- name: 'Settings',
- configs: {
- port: {
- name: 'TCP Port',
- type: 'number',
- var: 'extra.plugin_config_long[0]'
- },
- baudrate: {
- name: 'Baudrate',
- type: 'number',
- var: 'extra.plugin_config_long[1]'
- },
- serial_config: {
- name: 'Data Bits',
- type: 'select',
- options: serialConfig,
- var: 'configs[2]'
- },
- reset_after_boot: {
- name: 'Reset target after boot',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- timeout: {
- name: 'RX Receive Timeout',
- type: 'number',
- var: 'configs[0]'
- },
- event_processing: {
- name: 'Event Processing',
- type: 'select',
- options: eventProcessing,
- var: 'configs[1]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/21_level_control.js":
-/*!*****************************************!*\
- !*** ./src/devices/21_level_control.js ***!
- \*****************************************/
-/*! exports provided: levelControl */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "levelControl", function() { return levelControl; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const sensorModel = [{
- value: 11,
- name: 'DHT11'
-}, {
- value: 22,
- name: 'DHT22'
-}, {
- value: 12,
- name: 'DHT12'
-}, {
- value: 23,
- name: 'Sonoff am2301'
-}, {
- value: 70,
- name: 'Sonoff si7021'
-}];
-const levelControl = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Output'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO Level Low',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- check_task: {
- name: 'Check Task',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTasks"],
- var: 'configs[0]'
- },
- check_value: {
- name: 'Check Value',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["getTaskValues"],
- var: 'configs[1]'
- },
- level: {
- name: 'Set Level',
- type: 'number',
- var: 'configs_float[0]'
- },
- hysteresis: {
- name: 'Hysteresis',
- type: 'number',
- var: 'configs_float[1]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/22_pca9685.js":
-/*!***********************************!*\
- !*** ./src/devices/22_pca9685.js ***!
- \***********************************/
-/*! exports provided: pca9685 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pca9685", function() { return pca9685; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const mode = [...Array(32)].map((v, i) => ({
- value: i,
- name: `0x${i.toString(16)} (${i})`
-}));
-const i2c_address = [...Array(32)].map((v, i) => ({
- value: i + 64,
- name: `0x${(i + 64).toString(16)} (${i + 64})`
-}));
-const pca9685 = {
- defaults: () => ({
- gpio1: 255,
- 'configs_float[0]': 1500,
- 'configs_float[1]': 4095,
- 'settings.values[0].name': 'Output'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- mode: {
- name: 'Mode 2',
- type: 'select',
- options: mode,
- var: 'configs[1]'
- },
- frequency: {
- name: 'Frequency (23 - 1500)',
- type: 'number',
- min: 23,
- max: 1500,
- var: 'configs_float[0]'
- },
- range: {
- name: 'Range (1-10000)',
- type: 'number',
- min: 1,
- max: 10000,
- var: 'configs_float[1]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/23_oled1306.js":
-/*!************************************!*\
- !*** ./src/devices/23_oled1306.js ***!
- \************************************/
-/*! exports provided: oled1306 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "oled1306", function() { return oled1306; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 35,
- name: '0x23 (35) - default'
-}, {
- value: 92,
- name: '0x5c (92)'
-}];
-const displaySize = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const oled1306 = {
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- rotation: {
- name: 'Rotation',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- size: {
- name: 'Display Size',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- font: {
- name: 'Font Width',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- line1: {
- name: 'Line 1',
- type: 'text',
- var: 'configs[2]'
- },
- line2: {
- name: 'Line 2',
- type: 'text',
- var: 'configs[2]'
- },
- line3: {
- name: 'Line 3',
- type: 'text',
- var: 'configs[2]'
- },
- line4: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line5: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line6: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line7: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line8: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- button: {
- name: 'Display Button',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- timeout: {
- name: 'Display Timeout',
- type: 'number',
- var: 'configs[2]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/24_mlx90614.js":
-/*!************************************!*\
- !*** ./src/devices/24_mlx90614.js ***!
- \************************************/
-/*! exports provided: mlx90614 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mlx90614", function() { return mlx90614; });
-const options = [{
- value: 0,
- name: 'IR Object Temperature'
-}, {
- value: 1,
- name: 'Ambient Temperature'
-}];
-const mlx90614 = {
- defaults: () => ({
- gpio4: 0,
- 'settings.values[0].name': 'Temperature'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- port: {
- name: 'Port',
- type: 'number',
- var: 'gpio4'
- },
- option: {
- name: 'Option',
- type: 'select',
- options: options,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vars: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/25_ads1115.js":
-/*!***********************************!*\
- !*** ./src/devices/25_ads1115.js ***!
- \***********************************/
-/*! exports provided: ads1115 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ads1115", function() { return ads1115; });
-const i2c_address = [{
- value: 72,
- name: '0x48 (72)'
-}, {
- value: 73,
- name: '0x49 (73)'
-}, {
- value: 74,
- name: '0x4A (74)'
-}, {
- value: 75,
- name: '0x4B (75)'
-}];
-const gainOptions = [{
- value: 0,
- name: '2/3x gain (FS=6.144V)'
-}, {
- value: 1,
- name: '1x gain (FS=4.096V)'
-}, {
- value: 2,
- name: '2x gain (FS=2.048V)'
-}, {
- value: 3,
- name: '4x gain (FS=1.024V)'
-}, {
- value: 4,
- name: '8x gain (FS=0.512V)'
-}, {
- value: 5,
- name: '16x gain (FS=0.256V)'
-}];
-const multiplexerOptions = [{
- value: 0,
- name: 'AIN0 - AIN1 (Differential)'
-}, {
- value: 1,
- name: 'AIN0 - AIN3 (Differential)'
-}, {
- value: 2,
- name: 'AIN1 - AIN3 (Differential)'
-}, {
- value: 3,
- name: 'AIN2 - AIN3 (Differential)'
-}, {
- value: 4,
- name: 'AIN0 - GND (Single-Ended)'
-}, {
- value: 5,
- name: 'AIN1 - GND (Single-Ended)'
-}, {
- value: 6,
- name: 'AIN2 - GND (Single-Ended)'
-}, {
- value: 7,
- name: 'AIN3 - GND (Single-Ended)'
-}];
-const ads1115 = {
- defaults: () => ({
- 'configs[0]': 72,
- 'settings.values[0].name': 'Analog'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- gain: {
- name: 'Gain',
- type: 'select',
- options: gainOptions,
- var: 'configs[1]'
- },
- multiplexer: {
- name: 'Input Multiplexer',
- type: 'select',
- options: multiplexerOptions,
- var: 'configs[2]'
- }
- }
- },
- advanced: {
- name: 'Two point calibration',
- configs: {
- enabled: {
- name: 'Calibration Enabled',
- type: 'number',
- var: 'configs[3]'
- },
- point1: [{
- name: 'Point 1',
- type: 'number',
- var: 'configs_long[0]'
- }, {
- name: '=',
- type: 'number',
- var: 'configs_float[1]'
- }],
- point2: [{
- name: 'Point 2',
- type: 'number',
- var: 'configs_long[1]'
- }, {
- name: '=',
- type: 'number',
- var: 'configs_float[1]'
- }]
- }
- },
- data: true,
- vars: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/26_system_info.js":
-/*!***************************************!*\
- !*** ./src/devices/26_system_info.js ***!
- \***************************************/
-/*! exports provided: systemInfo */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "systemInfo", function() { return systemInfo; });
-const indicator = [{
- value: 0,
- name: 'Uptime'
-}, {
- value: 1,
- name: 'Free Ram'
-}, {
- value: 2,
- name: 'WiFi RSSI'
-}, {
- value: 3,
- name: 'Input VCC'
-}, {
- value: 4,
- name: 'System load'
-}, {
- value: 5,
- name: 'IP 1.Octet'
-}, {
- value: 6,
- name: 'IP 2.Octet'
-}, {
- value: 7,
- name: 'IP 3.Octet'
-}, {
- value: 8,
- name: 'IP 4.Octet'
-}, {
- value: 9,
- name: 'Web activity'
-}, {
- value: 10,
- name: 'Free Stack'
-}, {
- value: 11,
- name: 'None'
-}];
-const systemInfo = {
- defaults: () => ({
- gpio4: 0,
- 'settings.values[0].name': 'Uptime',
- 'settings.values[1].name': 'Uptime',
- 'settings.values[2].name': 'Uptime',
- 'settings.values[3].name': 'Uptime'
- }),
- sensor: {
- name: 'Settings',
- configs: {
- indicator1: {
- name: 'Indicator 1',
- type: 'select',
- options: indicator,
- var: 'configs_long[0]'
- },
- indicator1: {
- name: 'Indicator 2',
- type: 'select',
- options: indicator,
- var: 'configs_long[1]'
- },
- indicator1: {
- name: 'Indicator 3',
- type: 'select',
- options: indicator,
- var: 'configs_long[2]'
- },
- indicator1: {
- name: 'Indicator 4',
- type: 'select',
- options: indicator,
- var: 'configs_long[3]'
- }
- }
- },
- data: true,
- vars: 4
-};
-
-/***/ }),
-
-/***/ "./src/devices/27_ina219.js":
-/*!**********************************!*\
- !*** ./src/devices/27_ina219.js ***!
- \**********************************/
-/*! exports provided: ina219 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ina219", function() { return ina219; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const measurmentRange = [{
- value: 0,
- name: '32V, 2A'
-}, {
- value: 1,
- name: '32V, 1A'
-}, {
- value: 2,
- name: '16V, 0.4A'
-}];
-const measurmentType = [{
- value: 0,
- name: 'Voltage'
-}, {
- value: 1,
- name: 'Current'
-}, {
- value: 2,
- name: 'Power'
-}, {
- value: 3,
- name: 'Voltage/Current/Power'
-}];
-const i2c_address = [{
- value: 64,
- name: '0x40 (64) - (default)'
-}, {
- value: 65,
- name: '0x41 (65)'
-}, {
- value: 68,
- name: '0x44 (68)'
-}, {
- value: 69,
- name: '0x45 (69)'
-}];
-const ina219 = {
- defaults: () => ({
- 'configs[0]': 64,
- 'settings.values[0].name': 'Voltage',
- 'settings.values[1].name': 'Current',
- 'settings.values[2].name': 'Power'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- check_task: {
- name: 'Measurment Range',
- type: 'select',
- options: measurmentRange,
- var: 'configs[1]'
- },
- check_value: {
- name: 'Measurment Type',
- type: 'select',
- options: measurmentType,
- var: 'configs[2]'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/28_bmx280.js":
-/*!**********************************!*\
- !*** ./src/devices/28_bmx280.js ***!
- \**********************************/
-/*! exports provided: bmx280 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmx280", function() { return bmx280; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 118,
- name: '0x76 (118) - (default)'
-}, {
- value: 119,
- name: '0x77 (119) - (default)'
-}];
-const bmx280 = {
- defaults: () => ({
- 'configs[0]': 118,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Humidity',
- 'settings.values[2].name': 'Pressure'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- altitude: {
- name: 'Altitude',
- type: 'number',
- var: 'configs[1]'
- },
- offset: {
- name: 'Temperature Offset',
- type: 'number',
- var: 'configs[2]'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/29_mqtt_domoticz.js":
-/*!*****************************************!*\
- !*** ./src/devices/29_mqtt_domoticz.js ***!
- \*****************************************/
-/*! exports provided: mqttDomoticz */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttDomoticz", function() { return mqttDomoticz; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const mqttDomoticz = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Output'
- }),
- sensor: {
- name: 'Actuator',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- idx: {
- name: 'IDX',
- type: 'number',
- var: 'configs[0]'
- }
- }
- },
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/2_analog_input.js":
-/*!***************************************!*\
- !*** ./src/devices/2_analog_input.js ***!
- \***************************************/
-/*! exports provided: analogInput */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "analogInput", function() { return analogInput; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const analogInput = {
- defaults: () => ({
- 'settings.values[0].name': 'Analog'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- oversampling: {
- name: 'Oversampling',
- type: 'checkbox',
- var: 'configs[0]'
- }
- }
- },
- advanced: {
- name: 'Two point calibration',
- configs: {
- enabled: {
- name: 'Calibration Enabled',
- type: 'checkbox',
- var: 'configs[3]'
- },
- point1: [{
- name: 'Point 1',
- type: 'number',
- var: 'configs_long[0]'
- }, {
- name: '=',
- type: 'number',
- var: 'configs_float[0]'
- }],
- point2: [{
- name: 'Point 2',
- type: 'number',
- var: 'configs_long[1]'
- }, {
- name: '=',
- type: 'number',
- var: 'configs_float[1]'
- }]
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/30_bmp280.js":
-/*!**********************************!*\
- !*** ./src/devices/30_bmp280.js ***!
- \**********************************/
-/*! exports provided: bmp280 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp280", function() { return bmp280; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 118,
- name: '0x76 (118) - (default)'
-}, {
- value: 119,
- name: '0x77 (119) - (default)'
-}];
-const bmp280 = {
- defaults: () => ({
- 'configs[0]': 118,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Pressure'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- altitude: {
- name: 'Altitude',
- type: 'number',
- var: 'configs[1]'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/31_sht1x.js":
-/*!*********************************!*\
- !*** ./src/devices/31_sht1x.js ***!
- \*********************************/
-/*! exports provided: sht1x */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sht1x", function() { return sht1x; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const sht1x = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Humidity'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- pullup: {
- name: 'Internal PullUp',
- type: 'checkbox',
- var: 'pin1pullup'
- },
- gpio1: {
- name: 'GPIO Data',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO SCK',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/32_ms5611.js":
-/*!**********************************!*\
- !*** ./src/devices/32_ms5611.js ***!
- \**********************************/
-/*! exports provided: ms5611 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ms5611", function() { return ms5611; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 118,
- name: '0x76 (118)'
-}, {
- value: 119,
- name: '0x77 (119) - (default)'
-}];
-const ms5611 = {
- defaults: () => ({
- 'configs[0]': 119,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Pressure'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- altitude: {
- name: 'Altitude',
- type: 'number',
- var: 'configs[1]'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/33_dummy_device.js":
-/*!****************************************!*\
- !*** ./src/devices/33_dummy_device.js ***!
- \****************************************/
-/*! exports provided: dummyDevice */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dummyDevice", function() { return dummyDevice; });
-const sensorModel = [{
- value: 1,
- name: 'SENSOR_TYPE_SINGLE'
-}, {
- value: 2,
- name: 'SENSOR_TYPE_TEMP_HUM'
-}, {
- value: 3,
- name: 'SENSOR_TYPE_TEMP_BARO'
-}, {
- value: 4,
- name: 'SENSOR_TYPE_TEMP_HUM_BARO'
-}, {
- value: 5,
- name: 'SENSOR_TYPE_DUAL'
-}, {
- value: 5,
- name: 'SENSOR_TYPE_TRIPLE'
-}, {
- value: 7,
- name: 'SENSOR_TYPE_QUAD'
-}, {
- value: 10,
- name: 'SENSOR_TYPE_SWITCH'
-}, {
- value: 11,
- name: 'SENSOR_TYPE_DIMMER'
-}, {
- value: 20,
- name: 'SENSOR_TYPE_LONG'
-}, {
- value: 21,
- name: 'SENSOR_TYPE_WIND'
-}];
-const dummyDevice = {
- defaults: () => ({
- interval: 0,
- 'settings.values[0].name': 'Dummy1',
- 'settings.values[1].name': 'Dummy1',
- 'settings.values[2].name': 'Dummy3',
- 'settings.values[3].name': 'Dummy4'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- switch_type: {
- name: 'Simulate Sensor Type',
- type: 'select',
- options: sensorModel,
- var: 'configs[0]'
- },
- interval: {
- name: 'Interval',
- type: 'number'
- }
- }
- },
- data: true,
- vals: 4
-};
-
-/***/ }),
-
-/***/ "./src/devices/34_dht12.js":
-/*!*********************************!*\
- !*** ./src/devices/34_dht12.js ***!
- \*********************************/
-/*! exports provided: dht12 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht12", function() { return dht12; });
-const sensorModel = [{
- value: 1,
- name: 'SENSOR_TYPE_SINGLE'
-}, {
- value: 2,
- name: 'SENSOR_TYPE_TEMP_HUM'
-}, {
- value: 3,
- name: 'SENSOR_TYPE_TEMP_BARO'
-}, {
- value: 4,
- name: 'SENSOR_TYPE_TEMP_HUM_BARO'
-}, {
- value: 5,
- name: 'SENSOR_TYPE_DUAL'
-}, {
- value: 5,
- name: 'SENSOR_TYPE_TRIPLE'
-}, {
- value: 7,
- name: 'SENSOR_TYPE_QUAD'
-}, {
- value: 10,
- name: 'SENSOR_TYPE_SWITCH'
-}, {
- value: 11,
- name: 'SENSOR_TYPE_DIMMER'
-}, {
- value: 20,
- name: 'SENSOR_TYPE_LONG'
-}, {
- value: 21,
- name: 'SENSOR_TYPE_WIND'
-}];
-const dht12 = {
- defaults: () => ({
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Humidity'
- }),
- data: {
- name: 'Data Acquisition',
- configs: {
- interval: {
- name: 'Interval',
- type: 'number'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/36_sh1106.js":
-/*!**********************************!*\
- !*** ./src/devices/36_sh1106.js ***!
- \**********************************/
-/*! exports provided: sh1106 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sh1106", function() { return sh1106; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const i2c_address = [{
- value: 35,
- name: '0x23 (35) - default'
-}, {
- value: 92,
- name: '0x5c (92)'
-}];
-const displaySize = [{
- value: 1,
- name: 'RESOLUTION_LOW'
-}, {
- value: 2,
- name: 'RESOLUTION_NORMAL'
-}, {
- value: 3,
- name: 'RESOLUTION_HIGH'
-}, {
- value: 99,
- name: 'RESOLUTION_AUTO_HIGH'
-}];
-const sh1106 = {
- defaults: () => ({
- 'configs[0]': 35
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- i2c_address: {
- name: 'I2C Address',
- type: 'select',
- options: i2c_address,
- var: 'configs[0]'
- },
- rotation: {
- name: 'Rotation',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- size: {
- name: 'Display Size',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- font: {
- name: 'Font Width',
- type: 'select',
- options: displaySize,
- var: 'configs[1]'
- },
- line1: {
- name: 'Line 1',
- type: 'text',
- var: 'configs[2]'
- },
- line2: {
- name: 'Line 2',
- type: 'text',
- var: 'configs[2]'
- },
- line3: {
- name: 'Line 3',
- type: 'text',
- var: 'configs[2]'
- },
- line4: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line5: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line6: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line7: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- line8: {
- name: 'Line 4',
- type: 'text',
- var: 'configs[2]'
- },
- button: {
- name: 'Display Button',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- timeout: {
- name: 'Display Timeout',
- type: 'number',
- var: 'configs[2]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/37_mqtt_import.js":
-/*!***************************************!*\
- !*** ./src/devices/37_mqtt_import.js ***!
- \***************************************/
-/*! exports provided: mqttImport */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mqttImport", function() { return mqttImport; });
-const mqttImport = {
- defaults: () => ({
- 'settings.values[0].name': 'Value1',
- 'settings.values[1].name': 'Value2',
- 'settings.values[2].name': 'Value3',
- 'settings.values[3].name': 'Value4'
- }),
- settings: {
- name: 'Data Settings',
- configs: {
- switch_type: {
- name: 'MQTT Topic 1',
- type: 'text',
- var: 'configs[0]'
- },
- switch_type: {
- name: 'MQTT Topic 2',
- type: 'text',
- var: 'configs[0]'
- },
- switch_type: {
- name: 'MQTT Topic 3',
- type: 'text',
- var: 'configs[0]'
- },
- switch_type: {
- name: 'MQTT Topic 4',
- type: 'text',
- var: 'configs[0]'
- }
- }
- },
- vars: 4
-};
-
-/***/ }),
-
-/***/ "./src/devices/38_neopixel_basic.js":
-/*!******************************************!*\
- !*** ./src/devices/38_neopixel_basic.js ***!
- \******************************************/
-/*! exports provided: neopixelBasic */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelBasic", function() { return neopixelBasic; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const type = [{
- value: 1,
- name: 'GRB'
-}, {
- value: 2,
- name: 'GRBW'
-}];
-const neopixelBasic = {
- defaults: () => ({
- gpio1: 255
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- leds: {
- name: 'LEd Count',
- type: 'number',
- var: 'configs[0]'
- },
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- type: {
- name: 'Strip Type',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/39_thermocouple.js":
-/*!****************************************!*\
- !*** ./src/devices/39_thermocouple.js ***!
- \****************************************/
-/*! exports provided: thermocouple */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thermocouple", function() { return thermocouple; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const type = [{
- value: 1,
- name: 'MAX 6675'
-}, {
- value: 2,
- name: 'MAX 31855'
-}];
-const thermocouple = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Temperature'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- type: {
- name: 'Adapter IC',
- type: 'select',
- options: type,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/3_generic_pulse.js":
-/*!****************************************!*\
- !*** ./src/devices/3_generic_pulse.js ***!
- \****************************************/
-/*! exports provided: genericPulse */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genericPulse", function() { return genericPulse; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const modeTypes = [{
- value: 0,
- name: 'LOW'
-}, {
- value: 1,
- name: 'CHANGE'
-}, {
- value: 2,
- name: 'RISING'
-}, {
- value: 3,
- name: 'FALLING'
-}];
-const counterTypes = [{
- value: 0,
- name: 'Delta'
-}, {
- value: 1,
- name: 'Delta/Total/Time'
-}, {
- value: 2,
- name: 'Total'
-}, {
- value: 3,
- name: 'Delta/Total'
-}];
-const genericPulse = {
- sensor: {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Count',
- 'settings.values[1].name': 'Total',
- 'settings.values[2].name': 'Time'
- }),
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- debounce: {
- name: 'De-bounce (ms)',
- type: 'number',
- var: 'configs[0]'
- },
- counter_type: {
- name: 'Counter Type',
- type: 'select',
- options: counterTypes,
- var: 'configs[1]'
- },
- mode_type: {
- name: 'Switch Button Type',
- type: 'select',
- options: modeTypes,
- var: 'configs[2]'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/41_neopixel_clock.js":
-/*!******************************************!*\
- !*** ./src/devices/41_neopixel_clock.js ***!
- \******************************************/
-/*! exports provided: neopixelClock */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelClock", function() { return neopixelClock; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const neopixelClock = {
- defaults: () => ({
- gpio1: 255
- }),
- sensor: {
- name: 'Actuator',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- R: {
- name: 'Red',
- type: 'number',
- min: 0,
- max: 255,
- var: 'configs[0]'
- },
- G: {
- name: 'Green',
- type: 'number',
- min: 0,
- max: 255,
- var: 'configs[1]'
- },
- B: {
- name: 'Blue',
- type: 'number',
- min: 0,
- max: 255,
- var: 'configs[2]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/42_neopixel_candle.js":
-/*!*******************************************!*\
- !*** ./src/devices/42_neopixel_candle.js ***!
- \*******************************************/
-/*! exports provided: neopixelCandle */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "neopixelCandle", function() { return neopixelCandle; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const neopixelCandle = {
- defaults: () => ({
- gpio1: 255,
- 'configs[0]': 11,
- 'settings.values[0].name': 'Color',
- 'settings.values[1].name': 'Brightness',
- 'settings.values[2].name': 'Type'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/43_output_clock.js":
-/*!****************************************!*\
- !*** ./src/devices/43_output_clock.js ***!
- \****************************************/
-/*! exports provided: clock */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clock", function() { return clock; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const type = [{
- value: 0,
- name: ''
-}, {
- value: 1,
- name: 'Off'
-}, {
- value: 2,
- name: 'On'
-}];
-const clock = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Output'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO - Clock Event',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- event1: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event2: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event3: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event4: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event5: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event6: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event7: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }],
- event8: [{
- name: 'Day, Time 1',
- type: 'string',
- var: 'configs[0]'
- }, {
- name: '',
- type: 'select',
- options: type,
- var: 'configs[1]'
- }]
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/44_wifi_gateway.js":
-/*!****************************************!*\
- !*** ./src/devices/44_wifi_gateway.js ***!
- \****************************************/
-/*! exports provided: wifiGateway */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wifiGateway", function() { return wifiGateway; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const parity = [{
- value: 0,
- name: 'No Parity'
-}, {
- value: 1,
- name: 'Even'
-}, {
- value: 2,
- name: 'Odd'
-}];
-const wifiGateway = {
- sensor: {
- name: 'Settings',
- configs: {
- port: {
- name: 'TCP Port',
- type: 'number',
- var: 'configs_float[0]'
- },
- baudrate: {
- name: 'Baudrate',
- type: 'number',
- var: 'configs_float[0]'
- },
- data_bits: {
- name: 'Data Bits',
- type: 'number',
- var: 'configs_float[0]'
- },
- parity: {
- name: 'Parity',
- type: 'select',
- options: parity,
- var: 'configs[0]'
- },
- stop_bits: {
- name: 'Stop Bits',
- type: 'number',
- var: 'configs_float[0]'
- },
- reset_after_boot: {
- name: 'Reset target after boot',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'configs[1]'
- },
- timeout: {
- name: 'RX Receive Timeout',
- type: 'number',
- var: 'configs_float[0]'
- }
- }
- }
-};
-
-/***/ }),
-
-/***/ "./src/devices/49_mhz19.js":
-/*!*********************************!*\
- !*** ./src/devices/49_mhz19.js ***!
- \*********************************/
-/*! exports provided: mhz19 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mhz19", function() { return mhz19; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const mhz19 = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'PPM',
- 'settings.values[1].name': 'Temperature',
- 'settings.values[2].name': 'U'
- }),
- sensor: {
- name: 'Data Acquisition',
- configs: {
- gpio1: {
- name: 'GPIO - TX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO - RX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- }
- }
- },
- data: true,
- vals: 3
-};
-
-/***/ }),
-
-/***/ "./src/devices/4_ds18b20.js":
-/*!**********************************!*\
- !*** ./src/devices/4_ds18b20.js ***!
- \**********************************/
-/*! exports provided: ds18b20 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ds18b20", function() { return ds18b20; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const ds18b20 = {
- defaults: () => ({
- gpio1: 255,
- 'settings.values[0].name': 'Temperature'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/52_senseair.js":
-/*!************************************!*\
- !*** ./src/devices/52_senseair.js ***!
- \************************************/
-/*! exports provided: senseAir */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "senseAir", function() { return senseAir; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const senseAir = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'CO2'
- }),
- sensor: {
- name: 'Data Acquisition',
- configs: {
- gpio1: {
- name: 'GPIO - TX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO - RX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/56_sds011.js":
-/*!**********************************!*\
- !*** ./src/devices/56_sds011.js ***!
- \**********************************/
-/*! exports provided: sds011 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sds011", function() { return sds011; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const sds011 = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'PM2.5',
- 'settings.values[1].name': 'PM10'
- }),
- sensor: {
- name: 'Data Acquisition',
- configs: {
- gpio1: {
- name: 'GPIO - TX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO - RX',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/59_rotary_encoder.js":
-/*!******************************************!*\
- !*** ./src/devices/59_rotary_encoder.js ***!
- \******************************************/
-/*! exports provided: rotaryEncoder */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotaryEncoder", function() { return rotaryEncoder; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const rotaryEncoder = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- gpio3: 255,
- 'configs_long[1]': 100,
- 'settings.values[0].name': 'Counter'
- }),
- sensor: {
- name: 'Data Acquisition',
- configs: {
- gpio1: {
- name: 'GPIO A - CLK',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO B - DT',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- },
- gpio3: {
- name: 'GPIO I - Z',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio3'
- },
- limit_min: {
- name: 'Limit - Min',
- type: 'number',
- var: 'configs_long[0]'
- },
- limit_max: {
- name: 'Limit - Max',
- type: 'number',
- var: 'configs_long[1]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/5_dht.js":
-/*!******************************!*\
- !*** ./src/devices/5_dht.js ***!
- \******************************/
-/*! exports provided: dht */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dht", function() { return dht; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const sensorModel = [{
- value: 11,
- name: 'DHT11'
-}, {
- value: 22,
- name: 'DHT22'
-}, {
- value: 12,
- name: 'DHT12'
-}, {
- value: 23,
- name: 'Sonoff am2301'
-}, {
- value: 70,
- name: 'Sonoff si7021'
-}];
-const dht = {
- defaults: () => ({
- gpio1: 255,
- interval: 60,
- 'configs[0]': 11,
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Humidity'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio: {
- name: 'GPIO Data',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- switch_type: {
- name: 'Sensor model',
- type: 'select',
- options: sensorModel,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/63_ttp229.js":
-/*!**********************************!*\
- !*** ./src/devices/63_ttp229.js ***!
- \**********************************/
-/*! exports provided: ttp229 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ttp229", function() { return ttp229; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const ttp229 = {
- defaults: () => ({
- 'gpio1': 1
- }),
- sensor: {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'ScanCode'
- }),
- name: 'Sensor',
- configs: {
- gpio1: {
- name: 'GPIO A - CLK',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO B - DT',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- },
- scancode: {
- name: 'ScanCode',
- type: 'checkbox',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'configs[1]'
- }
- }
- },
- data: true,
- vals: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/6_bmp085.js":
-/*!*********************************!*\
- !*** ./src/devices/6_bmp085.js ***!
- \*********************************/
-/*! exports provided: bmp085 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bmp085", function() { return bmp085; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const eventTypes = [{
- value: 0,
- name: 'Disabled'
-}, {
- value: 1,
- name: 'Active on LOW'
-}, {
- value: 2,
- name: 'Active on HIGH'
-}, {
- value: 3,
- name: 'Active on LOW and HIGH'
-}];
-const bmp085 = {
- defaults: () => ({
- 'settings.values[0].name': 'Temperature',
- 'settings.values[1].name': 'Pressure'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- altitude: {
- name: 'Altitude',
- type: 'number',
- var: 'configs[1]'
- }
- }
- },
- data: true,
- vals: 2
-};
-
-/***/ }),
-
-/***/ "./src/devices/7_pcf8591.js":
-/*!**********************************!*\
- !*** ./src/devices/7_pcf8591.js ***!
- \**********************************/
-/*! exports provided: pcf8591 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pcf8591", function() { return pcf8591; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const pcf8591 = {
- defaults: () => ({
- 'settings.values[0].name': 'Analog'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- port: {
- name: 'PORT',
- type: 'number',
- var: 'gpio4'
- }
- }
- },
- data: true,
- vars: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/8_rfid.js":
-/*!*******************************!*\
- !*** ./src/devices/8_rfid.js ***!
- \*******************************/
-/*! exports provided: rfidWeigand */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rfidWeigand", function() { return rfidWeigand; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const weigandType = [{
- value: 26,
- name: '26 Bits'
-}, {
- value: 34,
- name: '34 Bits'
-}];
-const rfidWeigand = {
- defaults: () => ({
- gpio1: 255,
- gpio2: 255,
- 'settings.values[0].name': 'Tag'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- gpio1: {
- name: 'GPIO D0 (green, 5V)',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio1'
- },
- gpio2: {
- name: 'GPIO D1 (white, 5V)',
- type: 'select',
- options: _defs__WEBPACK_IMPORTED_MODULE_0__["pins"],
- var: 'gpio2'
- },
- type: {
- name: 'Weigand Type',
- type: 'select',
- options: weigandType,
- var: 'configs[0]'
- }
- }
- },
- data: true,
- vars: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/9_io_mcp.js":
-/*!*********************************!*\
- !*** ./src/devices/9_io_mcp.js ***!
- \*********************************/
-/*! exports provided: inputMcp */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inputMcp", function() { return inputMcp; });
-/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_defs */ "./src/devices/_defs.js");
-
-const eventTypes = [{
- value: 0,
- name: 'Disabled'
-}, {
- value: 1,
- name: 'Active on LOW'
-}, {
- value: 2,
- name: 'Active on HIGH'
-}, {
- value: 3,
- name: 'Active on LOW and HIGH'
-}];
-const inputMcp = {
- defaults: () => ({
- gpio4: 0,
- 'settings.values[0].name': 'Switch'
- }),
- sensor: {
- name: 'Sensor',
- configs: {
- port: {
- name: 'PORT',
- type: 'number',
- var: 'gpio4'
- },
- inversed: {
- name: 'Inversed logic',
- type: 'checkbox',
- var: 'pin1inversed'
- },
- send_boot_state: {
- name: 'Send Boot State',
- type: 'checkbox',
- var: 'configs[3]'
- }
- }
- },
- advanced: {
- name: 'Advanced event management',
- configs: {
- debounce: {
- name: 'De-bounce (ms)',
- type: 'number',
- var: 'configs_float[0]'
- },
- dblclick: {
- name: 'Doublclick Event',
- type: 'select',
- options: eventTypes,
- var: 'configs[4]'
- },
- dblclick_interval: {
- name: 'Doubleclick Max interval (ms)',
- type: 'number',
- var: 'configs_float[1]'
- },
- longpress: {
- name: 'Longpress event',
- type: 'select',
- options: eventTypes,
- var: 'configs[5]'
- },
- longpress_interval: {
- name: 'Longpress min interval (ms)',
- type: 'number',
- var: 'configs_float[2]'
- },
- safe_button: {
- name: 'Use safe button',
- type: 'checkbox',
- var: 'configs_float[3]'
- }
- }
- },
- data: true,
- vars: 1
-};
-
-/***/ }),
-
-/***/ "./src/devices/_defs.js":
-/*!******************************!*\
- !*** ./src/devices/_defs.js ***!
- \******************************/
-/*! exports provided: pins, getTasks, getTaskValues */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTasks", function() { return getTasks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTaskValues", function() { return getTaskValues; });
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pages/config.hardware */ "./src/pages/config.hardware.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _pages_config_hardware__WEBPACK_IMPORTED_MODULE_1__["pins"]; });
-
-
-
-const getTasks = () => {
- return _lib_settings__WEBPACK_IMPORTED_MODULE_0__["settings"].get('tasks').filter(task => task.enabled).map(task => ({
- value: task.settings.index,
- name: task.settings.name
- }));
-};
-const getTaskValues = () => {
- return [1, 2, 3, 4];
-};
-
-/***/ }),
-
-/***/ "./src/devices/index.js":
-/*!******************************!*\
- !*** ./src/devices/index.js ***!
- \******************************/
-/*! exports provided: devices */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "devices", function() { return devices; });
-/* harmony import */ var _1_input_switch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./1_input_switch */ "./src/devices/1_input_switch.js");
-/* harmony import */ var _2_analog_input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./2_analog_input */ "./src/devices/2_analog_input.js");
-/* harmony import */ var _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./3_generic_pulse */ "./src/devices/3_generic_pulse.js");
-/* harmony import */ var _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./4_ds18b20 */ "./src/devices/4_ds18b20.js");
-/* harmony import */ var _5_dht__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./5_dht */ "./src/devices/5_dht.js");
-/* harmony import */ var _6_bmp085__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./6_bmp085 */ "./src/devices/6_bmp085.js");
-/* harmony import */ var _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./7_pcf8591 */ "./src/devices/7_pcf8591.js");
-/* harmony import */ var _8_rfid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./8_rfid */ "./src/devices/8_rfid.js");
-/* harmony import */ var _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./9_io_mcp */ "./src/devices/9_io_mcp.js");
-/* harmony import */ var _10_light_lux__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./10_light_lux */ "./src/devices/10_light_lux.js");
-/* harmony import */ var _11_pme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./11_pme */ "./src/devices/11_pme.js");
-/* harmony import */ var _12_lcd__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./12_lcd */ "./src/devices/12_lcd.js");
-/* harmony import */ var _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./13_hcsr04 */ "./src/devices/13_hcsr04.js");
-/* harmony import */ var _14_si7021__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./14_si7021 */ "./src/devices/14_si7021.js");
-/* harmony import */ var _15_tls2561__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./15_tls2561 */ "./src/devices/15_tls2561.js");
-/* harmony import */ var _17_pn532__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./17_pn532 */ "./src/devices/17_pn532.js");
-/* harmony import */ var _18_dust__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./18_dust */ "./src/devices/18_dust.js");
-/* harmony import */ var _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./19_pcf8574 */ "./src/devices/19_pcf8574.js");
-/* harmony import */ var _20_ser2net__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./20_ser2net */ "./src/devices/20_ser2net.js");
-/* harmony import */ var _21_level_control__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./21_level_control */ "./src/devices/21_level_control.js");
-/* harmony import */ var _22_pca9685__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./22_pca9685 */ "./src/devices/22_pca9685.js");
-/* harmony import */ var _23_oled1306__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./23_oled1306 */ "./src/devices/23_oled1306.js");
-/* harmony import */ var _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./24_mlx90614 */ "./src/devices/24_mlx90614.js");
-/* harmony import */ var _25_ads1115__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./25_ads1115 */ "./src/devices/25_ads1115.js");
-/* harmony import */ var _26_system_info__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./26_system_info */ "./src/devices/26_system_info.js");
-/* harmony import */ var _27_ina219__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./27_ina219 */ "./src/devices/27_ina219.js");
-/* harmony import */ var _28_bmx280__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./28_bmx280 */ "./src/devices/28_bmx280.js");
-/* harmony import */ var _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./29_mqtt_domoticz */ "./src/devices/29_mqtt_domoticz.js");
-/* harmony import */ var _30_bmp280__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./30_bmp280 */ "./src/devices/30_bmp280.js");
-/* harmony import */ var _31_sht1x__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./31_sht1x */ "./src/devices/31_sht1x.js");
-/* harmony import */ var _32_ms5611__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./32_ms5611 */ "./src/devices/32_ms5611.js");
-/* harmony import */ var _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./33_dummy_device */ "./src/devices/33_dummy_device.js");
-/* harmony import */ var _34_dht12__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./34_dht12 */ "./src/devices/34_dht12.js");
-/* harmony import */ var _36_sh1106__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./36_sh1106 */ "./src/devices/36_sh1106.js");
-/* harmony import */ var _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./37_mqtt_import */ "./src/devices/37_mqtt_import.js");
-/* harmony import */ var _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./38_neopixel_basic */ "./src/devices/38_neopixel_basic.js");
-/* harmony import */ var _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./39_thermocouple */ "./src/devices/39_thermocouple.js");
-/* harmony import */ var _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./41_neopixel_clock */ "./src/devices/41_neopixel_clock.js");
-/* harmony import */ var _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./42_neopixel_candle */ "./src/devices/42_neopixel_candle.js");
-/* harmony import */ var _43_output_clock__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./43_output_clock */ "./src/devices/43_output_clock.js");
-/* harmony import */ var _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./44_wifi_gateway */ "./src/devices/44_wifi_gateway.js");
-/* harmony import */ var _49_mhz19__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./49_mhz19 */ "./src/devices/49_mhz19.js");
-/* harmony import */ var _52_senseair__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./52_senseair */ "./src/devices/52_senseair.js");
-/* harmony import */ var _56_sds011__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./56_sds011 */ "./src/devices/56_sds011.js");
-/* harmony import */ var _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./59_rotary_encoder */ "./src/devices/59_rotary_encoder.js");
-/* harmony import */ var _63_ttp229__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./63_ttp229 */ "./src/devices/63_ttp229.js");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-const devices = [{
- name: '- None -',
- value: 0,
- fields: []
-}, {
- name: 'Switch input - Switch',
- value: 1,
- fields: _1_input_switch__WEBPACK_IMPORTED_MODULE_0__["inputSwitch"]
-}, {
- name: 'Analog input - internal',
- value: 2,
- fields: _2_analog_input__WEBPACK_IMPORTED_MODULE_1__["analogInput"]
-}, {
- name: 'Generic - Pulse counter',
- value: 3,
- fields: _3_generic_pulse__WEBPACK_IMPORTED_MODULE_2__["genericPulse"]
-}, {
- name: 'Environment - DS18b20',
- value: 4,
- fields: _4_ds18b20__WEBPACK_IMPORTED_MODULE_3__["ds18b20"]
-}, {
- name: 'Environment - DHT11/12/22 SONOFF2301/7021',
- value: 5,
- fields: _5_dht__WEBPACK_IMPORTED_MODULE_4__["dht"]
-}, {
- name: 'Environment - BMP085/180',
- value: 6,
- fields: _6_bmp085__WEBPACK_IMPORTED_MODULE_5__["bmp085"]
-}, {
- name: 'Analog input - PCF8591',
- value: 7,
- fields: _7_pcf8591__WEBPACK_IMPORTED_MODULE_6__["pcf8591"]
-}, {
- name: 'RFID - Wiegand',
- value: 8,
- fields: _8_rfid__WEBPACK_IMPORTED_MODULE_7__["rfidWeigand"]
-}, {
- name: 'Switch input - MCP23017',
- value: 9,
- fields: _9_io_mcp__WEBPACK_IMPORTED_MODULE_8__["inputMcp"]
-}, {
- name: 'Light/Lux - BH1750',
- value: 10,
- fields: _10_light_lux__WEBPACK_IMPORTED_MODULE_9__["bh1750"]
-}, {
- name: 'Extra IO - ProMini Extender',
- value: 11,
- fields: _11_pme__WEBPACK_IMPORTED_MODULE_10__["pme"]
-}, {
- name: 'Display - LCD2004',
- value: 12,
- fields: _12_lcd__WEBPACK_IMPORTED_MODULE_11__["lcd2004"]
-}, {
- name: 'Position - HC-SR04, RCW-0001, etc.',
- value: 13,
- fields: _13_hcsr04__WEBPACK_IMPORTED_MODULE_12__["hcsr04"]
-}, {
- name: 'Environment - SI7021/HTU21D',
- value: 14,
- fields: _14_si7021__WEBPACK_IMPORTED_MODULE_13__["si7021"]
-}, {
- name: 'Light/Lux - TSL2561',
- value: 15,
- fields: _15_tls2561__WEBPACK_IMPORTED_MODULE_14__["tls2561"]
-}, //{ name: 'Communication - IR', value: 16, fields: bh1750 },
-{
- name: 'RFID - PN532',
- value: 17,
- fields: _17_pn532__WEBPACK_IMPORTED_MODULE_15__["pn532"]
-}, {
- name: 'Dust - Sharp GP2Y10',
- value: 18,
- fields: _18_dust__WEBPACK_IMPORTED_MODULE_16__["dust"]
-}, {
- name: 'Switch input - PCF8574',
- value: 19,
- fields: _19_pcf8574__WEBPACK_IMPORTED_MODULE_17__["pcf8574"]
-}, {
- name: 'Communication - Serial Server',
- value: 20,
- fields: _20_ser2net__WEBPACK_IMPORTED_MODULE_18__["ser2net"]
-}, {
- name: 'Regulator - Level Control',
- value: 21,
- fields: _21_level_control__WEBPACK_IMPORTED_MODULE_19__["levelControl"]
-}, {
- name: 'Extra IO - PCA9685',
- value: 22,
- fields: _22_pca9685__WEBPACK_IMPORTED_MODULE_20__["pca9685"]
-}, {
- name: 'Display - OLED SSD1306',
- value: 23,
- fields: _23_oled1306__WEBPACK_IMPORTED_MODULE_21__["oled1306"]
-}, {
- name: 'Environment - MLX90614',
- value: 24,
- fields: _24_mlx90614__WEBPACK_IMPORTED_MODULE_22__["mlx90614"]
-}, {
- name: 'Analog input - ADS1115',
- value: 25,
- fields: _25_ads1115__WEBPACK_IMPORTED_MODULE_23__["ads1115"]
-}, {
- name: 'Generic - System Info',
- value: 26,
- fields: _26_system_info__WEBPACK_IMPORTED_MODULE_24__["systemInfo"]
-}, {
- name: 'Energy (DC) - INA219',
- value: 27,
- fields: _27_ina219__WEBPACK_IMPORTED_MODULE_25__["ina219"]
-}, {
- name: 'Environment - BMx280',
- value: 28,
- fields: _28_bmx280__WEBPACK_IMPORTED_MODULE_26__["bmx280"]
-}, {
- name: 'Output - Domoticz MQTT Helper',
- value: 29,
- fields: _29_mqtt_domoticz__WEBPACK_IMPORTED_MODULE_27__["mqttDomoticz"]
-}, {
- name: 'Environment - BMP280',
- value: 30,
- fields: _30_bmp280__WEBPACK_IMPORTED_MODULE_28__["bmp280"]
-}, {
- name: 'Environment - SHT1X',
- value: 31,
- fields: _31_sht1x__WEBPACK_IMPORTED_MODULE_29__["sht1x"]
-}, {
- name: 'Environment - MS5611 (GY-63)',
- value: 32,
- fields: _32_ms5611__WEBPACK_IMPORTED_MODULE_30__["ms5611"]
-}, {
- name: 'Generic - Dummy Device',
- value: 33,
- fields: _33_dummy_device__WEBPACK_IMPORTED_MODULE_31__["dummyDevice"]
-}, {
- name: 'Environment - DHT12 (I2C)',
- value: 34,
- fields: _34_dht12__WEBPACK_IMPORTED_MODULE_32__["dht12"]
-}, {
- name: 'Display - OLED SSD1306/SH1106 Framed',
- value: 36,
- fields: _36_sh1106__WEBPACK_IMPORTED_MODULE_33__["sh1106"]
-}, {
- name: 'Generic - MQTT Import',
- value: 37,
- fields: _37_mqtt_import__WEBPACK_IMPORTED_MODULE_34__["mqttImport"]
-}, {
- name: 'Output - NeoPixel (Basic)',
- value: 38,
- fields: _38_neopixel_basic__WEBPACK_IMPORTED_MODULE_35__["neopixelBasic"]
-}, {
- name: 'Environment - Thermocouple',
- value: 39,
- fields: _39_thermocouple__WEBPACK_IMPORTED_MODULE_36__["thermocouple"]
-}, {
- name: 'Output - NeoPixel (Word Clock)',
- value: 41,
- fields: _41_neopixel_clock__WEBPACK_IMPORTED_MODULE_37__["neopixelClock"]
-}, {
- name: 'Output - NeoPixel (Candle)',
- value: 42,
- fields: _42_neopixel_candle__WEBPACK_IMPORTED_MODULE_38__["neopixelCandle"]
-}, {
- name: 'Output - Clock',
- value: 43,
- fields: _43_output_clock__WEBPACK_IMPORTED_MODULE_39__["clock"]
-}, {
- name: 'Communication - P1 Wifi Gateway',
- value: 44,
- fields: _44_wifi_gateway__WEBPACK_IMPORTED_MODULE_40__["wifiGateway"]
-}, {
- name: 'Gases - CO2 MH-Z19',
- value: 49,
- fields: _49_mhz19__WEBPACK_IMPORTED_MODULE_41__["mhz19"]
-}, {
- name: 'Gases - CO2 Senseair',
- value: 52,
- fields: _52_senseair__WEBPACK_IMPORTED_MODULE_42__["senseAir"]
-}, {
- name: 'Dust - SDS011/018/198',
- value: 56,
- fields: _56_sds011__WEBPACK_IMPORTED_MODULE_43__["sds011"]
-}, {
- name: 'Switch Input - Rotary Encoder',
- value: 59,
- fields: _59_rotary_encoder__WEBPACK_IMPORTED_MODULE_44__["rotaryEncoder"]
-}, {
- name: 'Keypad - TTP229 Touc',
- value: 63,
- fields: _63_ttp229__WEBPACK_IMPORTED_MODULE_45__["ttp229"]
-}].sort((a, b) => a.name.localeCompare(b.name));
-
-/***/ }),
-
-/***/ "./src/lib/espeasy.js":
-/*!****************************!*\
- !*** ./src/lib/espeasy.js ***!
- \****************************/
-/*! exports provided: getJsonStat, loadDevices, getConfigNodes, getVariables, getDashboardConfigNodes, fetchProgress, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getJsonStat", function() { return getJsonStat; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDevices", function() { return loadDevices; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfigNodes", function() { return getConfigNodes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDashboardConfigNodes", function() { return getDashboardConfigNodes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchProgress", function() { return fetchProgress; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeFile", function() { return storeFile; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteFile", function() { return deleteFile; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRuleConfig", function() { return storeRuleConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadRuleConfig", function() { return loadRuleConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeRule", function() { return storeRule; });
-/* harmony import */ var mini_toastr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mini-toastr */ "./node_modules/mini-toastr/mini-toastr.js");
-/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js");
-
-
-const getJsonStat = async (url = '') => {
- return await fetch(`${url}/json`).then(response => response.json());
-};
-const loadDevices = async url => {
- return getJsonStat(url).then(response => response.Sensors);
-};
-const getConfigNodes = async () => {
- const devices = await loadDevices();
- const vars = [];
- const nodes = devices.map(device => {
- const taskValues = device.TaskValues || [];
- taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));
- const result = [{
- group: 'TRIGGERS',
- type: device.TaskName || `${device.TaskNumber}-${device.Type}`,
- inputs: [],
- outputs: [1],
- config: [{
- name: 'variable',
- type: 'select',
- values: taskValues.map(value => value.Name),
- value: taskValues.length ? taskValues[0].Name : ''
- }, {
- name: 'euqality',
- type: 'select',
- values: ['', '=', '<', '>', '<=', '>=', '!='],
- value: ''
- }, {
- name: 'value',
- type: 'number'
- }],
- indent: true,
- toString: function () {
- const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;
- return `when ${this.type}.${this.config[0].value} ${comparison}`;
- },
- toDsl: function () {
- const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;
- return [`on ${this.type}#${this.config[0].value}${comparison} do\n%%output%%\nEndon\n`];
- }
- }];
- let fnNames, fnName, name;
-
- switch (device.Type) {
- // todo: need access to GPIO number
- // case 'Switch input - Switch':
- // result.push({
- // group: 'ACTIONS',
- // type: `${device.TaskName} - switch`,
- // inputs: [1],
- // outputs: [1],
- // config: [{
- // name: 'value',
- // type: 'number',
- // }],
- // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },
- // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }
- // });
- // break;
- case 'Regulator - Level Control':
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - setlevel`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'value',
- type: 'number'
- }],
- toString: function () {
- return `${device.TaskName}.level = ${this.config[0].value}`;
- },
- toDsl: function () {
- return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`];
- }
- });
- break;
-
- case 'Extra IO - PCA9685':
- case 'Switch input - PCF8574':
- case 'Switch input - MCP23017':
- fnNames = {
- 'Extra IO - PCA9685': 'PCF',
- 'Switch input - PCF8574': 'PCF',
- 'Switch input - MCP23017': 'MCP'
- };
- fnName = fnNames[device.Type];
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - GPIO`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'pin',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
- }, {
- name: 'value',
- type: 'select',
- values: [0, 1]
- }],
- toString: function () {
- return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`];
- }
- });
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - Pulse`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'pin',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
- }, {
- name: 'value',
- type: 'select',
- values: [0, 1]
- }, {
- name: 'unit',
- type: 'select',
- values: ['ms', 's']
- }, {
- name: 'duration',
- type: 'number'
- }],
- toString: function () {
- return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;
- },
- toDsl: function () {
- if (this.config[2].value === 's') {
- return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`];
- } else {
- return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`];
- }
- }
- });
- break;
-
- case 'Extra IO - ProMini Extender':
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - GPIO`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'pin',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
- }, {
- name: 'value',
- type: 'select',
- values: [0, 1]
- }],
- toString: function () {
- return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`];
- }
- });
- break;
-
- case 'Display - OLED SSD1306':
- case 'Display - LCD2004':
- fnNames = {
- 'Display - OLED SSD1306': 'OLED',
- 'Display - LCD2004': 'LCD'
- };
- fnName = fnNames[device.Type];
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - Write`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'row',
- type: 'select',
- values: [1, 2, 3, 4]
- }, {
- name: 'column',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
- }, {
- name: 'text',
- type: 'text'
- }],
- toString: function () {
- return `${device.TaskName}.text = ${this.config[2].value}`;
- },
- toDsl: function () {
- return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`];
- }
- });
- break;
-
- case 'Generic - Dummy Device':
- result.push({
- group: 'ACTIONS',
- type: `${device.TaskName} - Write`,
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'variable',
- type: 'select',
- values: taskValues.map(value => value.Name)
- }, {
- name: 'value',
- type: 'text'
- }],
- toString: function () {
- return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`];
- }
- });
- break;
- }
-
- return result;
- }).flat();
- return {
- nodes,
- vars
- };
-};
-const getVariables = async () => {
- const urls = ['']; //, 'http://192.168.1.130'
-
- const vars = {};
- await Promise.all(urls.map(async url => {
- const stat = await getJsonStat(url);
- stat.Sensors.map(device => {
- device.TaskValues.map(value => {
- vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;
- });
- });
- }));
- return vars;
-};
-const getDashboardConfigNodes = async url => {
- const devices = await loadDevices(url);
- const vars = [];
- const nodes = devices.map(device => {
- device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));
- return [];
- }).flat();
- return {
- nodes,
- vars
- };
-};
-const fetchProgress = (url, opts = {}) => {
- return new Promise((res, rej) => {
- var xhr = new XMLHttpRequest();
- xhr.open(opts.method || 'get', url);
-
- for (var k in opts.headers || {}) xhr.setRequestHeader(k, opts.headers[k]);
-
- xhr.onload = e => res(e.target.responseText);
-
- xhr.onerror = rej;
- if (xhr.upload && opts.onProgress) xhr.upload.onprogress = opts.onProgress; // event.loaded / event.total * 100 ; //event.lengthComputable
-
- xhr.send(opts.body);
- });
-};
-const storeFile = async (filename, data, onProgress) => {
- _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].show();
- const file = data ? new File([new Blob([data])], filename) : filename;
- const formData = new FormData();
- formData.append('edit', 1);
- formData.append('file', file);
- return await fetchProgress('/upload_json', {
- method: 'post',
- body: formData
- }, onProgress).then(() => {
- _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide();
- mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000);
- }, e => {
- _loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide();
- mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000);
- });
-};
-const deleteFile = async filename => {
- return await fetch('/filelist?delete=' + filename).then(() => {
- mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].success('Successfully saved to flash!', '', 5000);
- }, e => {
- mini_toastr__WEBPACK_IMPORTED_MODULE_0__["default"].error(e.message, '', 5000);
- });
-};
-const storeDashboardConfig = async config => {
- storeFile('d1.txt', config);
-};
-const loadDashboardConfig = async nodes => {
- return await fetch('/d1.txt').then(response => response.json());
-};
-const storeRuleConfig = async config => {
- storeFile('r1.txt', config);
-};
-const loadRuleConfig = async () => {
- return await fetch('/r1.txt').then(response => response.json());
-};
-const storeRule = async rule => {
- const formData = new FormData();
- formData.append('set', 1);
- formData.append('rules', rule);
- return await fetch('/rules', {
- method: 'post',
- body: formData
- });
-};
-/* harmony default export */ __webpack_exports__["default"] = ({
- getJsonStat,
- loadDevices,
- getConfigNodes,
- getDashboardConfigNodes,
- getVariables,
- storeFile,
- deleteFile,
- storeDashboardConfig,
- loadDashboardConfig,
- storeRuleConfig,
- loadRuleConfig,
- storeRule
-});
-
-/***/ }),
-
-/***/ "./src/lib/floweditor.js":
-/*!*******************************!*\
- !*** ./src/lib/floweditor.js ***!
- \*******************************/
-/*! exports provided: FlowEditor */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlowEditor", function() { return FlowEditor; });
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js");
- // todo:
-// improve relability of moving elements around
-// global config
-
-const color = '#000000';
-
-const saveChart = renderedNodes => {
- // find initial nodes (triggers);
- const triggers = renderedNodes.filter(node => node.inputs.length === 0); // for each initial node walk the tree and produce one 'rule'
-
- const result = triggers.map(trigger => {
- const walkRule = rule => {
- return {
- t: rule.type,
- v: rule.config.map(config => config.value),
- o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),
- c: [rule.position.x, rule.position.y]
- };
- };
-
- return walkRule(trigger);
- });
- return result;
-};
-
-const loadChart = (config, chart, from) => {
- config.map(config => {
- let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);
-
- if (!node) {
- const configNode = chart.nodes.find(n => config.t == n.type);
- node = new NodeUI(chart.canvas, configNode, {
- x: config.c[0],
- y: config.c[1]
- });
- node.config.map((cfg, i) => {
- cfg.value = config.v[i];
- });
- node.render();
- chart.renderedNodes.push(node);
- }
-
- if (from) {
- const fromDimension = from.getBoundingClientRect();
- const toDimension = node.inputs[0].getBoundingClientRect();
- const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);
- chart.canvas.appendChild(lineSvg.element);
- const x1 = fromDimension.x + fromDimension.width;
- const y1 = fromDimension.y + fromDimension.height / 2;
- const x2 = toDimension.x;
- const y2 = toDimension.y + toDimension.height / 2;
- lineSvg.setPath(x1, y1, x2, y2);
- const connection = {
- output: from,
- input: node.inputs[0],
- svg: lineSvg,
- start: {
- x: x1,
- y: y1
- },
- end: {
- x: x2,
- y: y2
- }
- };
- node.inputs[0].lines.push(connection);
- from.lines.push(connection);
- }
-
- config.o.map((output, outputI) => {
- loadChart(output, chart, node.outputs[outputI]);
- });
- });
-};
-
-const exportChart = renderedNodes => {
- // find initial nodes (triggers);
- const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');
- let result = ''; // for each initial node walk the tree and produce one 'rule'
-
- triggers.map(trigger => {
- const walkRule = (r, i) => {
- const rules = r.toDsl ? r.toDsl() : [];
- let ruleset = '';
- let padding = r.indent ? ' ' : '';
- r.outputs.map((out, outI) => {
- let rule = rules[outI] || r.type;
- let subrule = '';
-
- if (out.lines) {
- out.lines.map(line => {
- subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);
- });
- subrule = subrule.split('\n').map(line => padding + line).filter(line => line.trim() !== '').join('\n') + '\n';
- }
-
- if (rule.includes('%%output%%')) {
- rule = rule.replace('%%output%%', subrule);
- } else {
- rule += subrule;
- }
-
- ruleset += rule;
- });
- return ruleset;
- };
-
- const rule = walkRule(trigger, 0);
- result += rule + "\n\n";
- });
- return result;
-}; // drag and drop helpers
-
-
-const dNd = {
- enableNativeDrag: (nodeElement, data) => {
- nodeElement.draggable = true;
-
- nodeElement.ondragstart = ev => {
- Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(data).map(key => {
- ev.dataTransfer.setData(key, data[key]);
- });
- };
- },
- enableNativeDrop: (nodeElement, fn) => {
- nodeElement.ondragover = ev => {
- ev.preventDefault();
- };
-
- nodeElement.ondrop = fn;
- } // svg helpers
-
-};
-
-class svgArrow {
- constructor(width, height, fill, color) {
- this.element = document.createElementNS("http://www.w3.org/2000/svg", "svg");
- this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');
- this.element.setAttribute('width', width);
- this.element.setAttribute('height', height);
- this.element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
- this.line = document.createElementNS("http://www.w3.org/2000/svg", "path");
- this.line.setAttributeNS(null, "fill", fill);
- this.line.setAttributeNS(null, "stroke", color);
- this.element.appendChild(this.line);
- }
-
- setPath(x1, y1, x2, y2, tension = 0.5) {
- const delta = (x2 - x1) * tension;
- const hx1 = x1 + delta;
- const hy1 = y1;
- const hx2 = x2 - delta;
- const hy2 = y2;
- const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;
- this.line.setAttributeNS(null, "d", path);
- }
-
-} // node configuration (each node in the left menu is represented by an instance of this object)
-
-
-class Node {
- constructor(conf) {
- this.type = conf.type;
- this.group = conf.group;
- this.config = conf.config.map(config => Object.assign({}, config));
- this.inputs = conf.inputs.map(input => {});
- this.outputs = conf.outputs.map(output => {});
- this.toDsl = conf.toDsl;
- this.toString = conf.toString;
- this.toHtml = conf.toHtml;
- this.indent = conf.indent;
- }
-
-} // node UI (each node in your flow diagram is represented by an instance of this object)
-
-
-class NodeUI extends Node {
- constructor(canvas, conf, position) {
- super(conf);
- this.canvas = canvas;
- this.position = position;
- this.lines = [];
- this.linesEnd = [];
- this.toDsl = conf.toDsl;
- this.toString = conf.toString;
- this.toHtml = conf.toHtml;
- this.indent = conf.indent;
- }
-
- updateInputsOutputs(inputs, outputs) {
- inputs.map(input => {
- const rect = input.getBoundingClientRect();
- input.lines.map(line => {
- line.end.x = rect.x;
- line.end.y = rect.y + rect.height / 2;
- line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);
- });
- });
- outputs.map(output => {
- const rect = output.getBoundingClientRect();
- output.lines.map(line => {
- line.start.x = rect.x + rect.width;
- line.start.y = rect.y + rect.height / 2;
- line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);
- });
- });
- }
-
- handleMoveEvent(ev) {
- if (!this.canvas.canEdit) return;
- const shiftX = ev.clientX - this.element.getBoundingClientRect().left;
- const shiftY = ev.clientY - this.element.getBoundingClientRect().top;
-
- const onMouseMove = ev => {
- const newy = ev.y - shiftY;
- const newx = ev.x - shiftX;
- this.position.y = newy - newy % this.canvas.gridSize;
- this.position.x = newx - newx % this.canvas.gridSize;
- this.element.style.top = `${this.position.y}px`;
- this.element.style.left = `${this.position.x}px`;
- this.updateInputsOutputs(this.inputs, this.outputs);
- };
-
- const onMouseUp = ev => {
- document.removeEventListener('mousemove', onMouseMove);
- document.removeEventListener('mouseup', onMouseUp);
- };
-
- document.addEventListener('mousemove', onMouseMove);
- document.addEventListener('mouseup', onMouseUp);
- }
-
- handleDblClickEvent(ev) {
- if (!this.canvas.canEdit) return;
- if (this.config.length) showConfigBox(this.type, this.config, () => {
- if (this.toHtml) {
- this.text.innerHTML = this.toHtml();
- } else {
- this.text.textContent = this.toString();
- }
- });
- }
-
- handleRightClickEvent(ev) {
- if (!this.canvas.canEdit) return;
- this.inputs.map(input => {
- input.lines.map(line => {
- line.output.lines = [];
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- input.lines = [];
- });
- this.outputs.map(output => {
- output.lines.map(line => {
- const index = line.input.lines.indexOf(line);
- line.input.lines.splice(index, 1);
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- output.lines = [];
- });
- this.element.parentNode.removeChild(this.element);
- if (this.destroy) this.destroy();
- ev.preventDefault();
- ev.stopPropagation();
- return false;
- }
-
- render() {
- this.element = document.createElement('div');
- this.element.nodeObject = this;
- this.element.className = `node node-chart group-${this.group}`;
- this.text = document.createElement('span');
-
- if (this.toHtml) {
- this.text.innerHTML = this.toHtml();
- } else {
- this.text.textContent = this.toString();
- }
-
- this.element.appendChild(this.text);
- this.element.style.top = `${this.position.y}px`;
- this.element.style.left = `${this.position.x}px`;
- const inputs = document.createElement('div');
- inputs.className = 'node-inputs';
- this.element.appendChild(inputs);
- this.inputs.map((val, index) => {
- const input = this.inputs[index] = document.createElement('div');
- input.className = 'node-input';
- input.nodeObject = this;
- input.lines = [];
-
- input.onmousedown = ev => {
- ev.preventDefault();
- ev.stopPropagation();
- };
-
- inputs.appendChild(input);
- });
- const outputs = document.createElement('div');
- outputs.className = 'node-outputs';
- this.element.appendChild(outputs);
- this.outputs.map((val, index) => {
- const output = this.outputs[index] = document.createElement('div');
- output.className = 'node-output';
- output.nodeObject = this;
- output.lines = [];
-
- output.oncontextmenu = ev => {
- output.lines.map(line => {
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- output.lines = [];
- ev.stopPropagation();
- ev.preventDefault();
- return false;
- };
-
- output.onmousedown = ev => {
- ev.stopPropagation();
- if (output.lines.length) return;
- const rects = output.getBoundingClientRect();
- const x1 = rects.x + rects.width;
- const y1 = rects.y + rects.height / 2;
- const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);
- this.canvas.appendChild(lineSvg.element);
-
- const onMouseMove = ev => {
- lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);
- };
-
- const onMouseUp = ev => {
- const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);
- const input = elemBelow ? elemBelow.closest('.node-input') : null;
-
- if (!input) {
- lineSvg.element.remove();
- } else {
- const inputRect = input.getBoundingClientRect();
- const x2 = inputRect.x;
- const y2 = inputRect.y + inputRect.height / 2;
- lineSvg.setPath(x1, y1, x2, y2);
- const connection = {
- output,
- input,
- svg: lineSvg,
- start: {
- x: x1,
- y: y1
- },
- end: {
- x: x2,
- y: y2
- }
- };
- output.lines.push(connection);
- input.lines.push(connection);
- }
-
- document.removeEventListener('mousemove', onMouseMove);
- document.removeEventListener('mouseup', onMouseUp);
- };
-
- document.addEventListener('mousemove', onMouseMove);
- document.addEventListener('mouseup', onMouseUp);
- };
-
- outputs.appendChild(output);
- });
- this.element.ondblclick = this.handleDblClickEvent.bind(this);
- this.element.onmousedown = this.handleMoveEvent.bind(this);
- this.element.oncontextmenu = this.handleRightClickEvent.bind(this);
- this.canvas.appendChild(this.element);
- }
-
-}
-
-const getCfgUI = cfg => {
- const template = document.createElement('template');
-
- const getSelectOptions = val => {
- const selected = val == cfg.value ? 'selected' : '';
- return `${val} `;
- };
-
- switch (cfg.type) {
- case 'text':
- template.innerHTML = `
${cfg.name}
`;
- break;
-
- case 'number':
- template.innerHTML = `${cfg.name}
`;
- break;
-
- case 'select':
- template.innerHTML = `${cfg.name} ${cfg.values.map(val => getSelectOptions(val))}
`;
- break;
-
- case 'textselect':
- template.innerHTML = ``;
- }
-
- return template.content.cloneNode(true);
-};
-
-const showConfigBox = (type, config, onclose) => {
- const template = document.createElement('template');
- template.innerHTML = `
-
- `;
- document.body.appendChild(template.content.cloneNode(true));
- const configBox = document.body.querySelectorAll('.configbox')[0];
- const body = document.body.querySelectorAll('.configbox-body')[0];
- const okButton = document.getElementById('ob');
- const cancelButton = document.getElementById('cb');
-
- cancelButton.onclick = () => {
- configBox.remove();
- };
-
- okButton.onclick = () => {
- // set configuration to node
- config.map(cfg => {
- cfg.value = document.forms['configform'].elements[cfg.name].value;
- });
- configBox.remove();
- onclose();
- };
-
- config.map(cfg => {
- const cfgUI = getCfgUI(cfg);
- body.appendChild(cfgUI);
- });
-};
-
-class FlowEditor {
- constructor(element, nodes, config) {
- this.nodes = [];
- this.renderedNodes = [];
- this.onSave = config.onSave;
- this.canEdit = !config.readOnly;
- this.debug = config.debug != null ? config.debug : true;
- this.gridSize = config.gridSize || 1;
- this.element = element;
- nodes.map(nodeConfig => {
- const node = new Node(nodeConfig);
- this.nodes.push(node);
- });
- this.render();
- if (this.canEdit) dNd.enableNativeDrop(this.canvas, ev => {
- const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));
- let node = new NodeUI(this.canvas, configNode, {
- x: ev.x,
- y: ev.y
- });
- node.render();
-
- node.destroy = () => {
- this.renderedNodes.splice(this.renderedNodes.indexOf(node), 1);
- node = null;
- };
-
- this.renderedNodes.push(node);
- });
- }
-
- loadConfig(config) {
- loadChart(config, this);
- }
-
- saveConfig() {
- return saveChart(this.renderedNodes);
- }
-
- renderContainers() {
- if (this.canEdit) {
- this.sidebar = document.createElement('div');
- this.sidebar.className = 'sidebar';
- this.element.appendChild(this.sidebar);
- }
-
- this.canvas = document.createElement('div');
- this.canvas.className = 'canvas';
- this.canvas.canEdit = this.canEdit;
- this.canvas.gridSize = this.gridSize;
- this.element.appendChild(this.canvas);
-
- if (this.canEdit && this.debug) {
- this.debug = document.createElement('div');
- this.debug.className = 'debug';
- const text = document.createElement('div');
- this.debug.appendChild(text);
- const saveBtn = document.createElement('button');
- saveBtn.textContent = 'SAVE';
-
- saveBtn.onclick = () => {
- const config = JSON.stringify(saveChart(this.renderedNodes));
- const rules = exportChart(this.renderedNodes);
- this.onSave(config, rules);
- };
-
- const loadBtn = document.createElement('button');
- loadBtn.textContent = 'LOAD';
-
- loadBtn.onclick = () => {
- const input = prompt('enter config');
- loadChart(JSON.parse(input), this);
- };
-
- const exportBtn = document.createElement('button');
- exportBtn.textContent = 'EXPORT';
-
- exportBtn.onclick = () => {
- const exported = exportChart(this.renderedNodes);
- text.textContent = exported;
- };
-
- this.debug.appendChild(exportBtn);
- this.debug.appendChild(saveBtn);
- this.debug.appendChild(loadBtn);
- this.debug.appendChild(text);
- this.element.appendChild(this.debug);
- }
- }
-
- renderConfigNodes() {
- const groups = {};
- this.nodes.map(node => {
- if (!groups[node.group]) {
- const group = document.createElement('div');
- group.className = 'group';
- group.textContent = node.group;
- this.sidebar.appendChild(group);
- groups[node.group] = group;
- }
-
- const nodeElement = document.createElement('div');
- nodeElement.className = `node group-${node.group}`;
- nodeElement.textContent = node.type;
- groups[node.group].appendChild(nodeElement);
- dNd.enableNativeDrag(nodeElement, {
- type: node.type
- });
- });
- }
-
- render() {
- this.renderContainers();
- if (this.canEdit) this.renderConfigNodes();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/lib/helpers.js":
-/*!****************************!*\
- !*** ./src/lib/helpers.js ***!
- \****************************/
-/*! exports provided: get, set, getKeys */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; });
-/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
-/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; });
-/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js");
-/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; });
-
- // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".")
-// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)
-// const set = (obj, path, value) => {
-// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => {
-// if (!a[c]) a[c] = {};
-// if (i === src.length - 1) a[c] = value;
-// }, obj)
-// }
-
-const getKeys = object => {
- const keys = [];
-
- for (let key in object) {
- if (object.hasOwnProperty(key)) {
- keys.push(key);
- }
- }
-
- return keys;
-};
-
-
-
-/***/ }),
-
-/***/ "./src/lib/loader.js":
-/*!***************************!*\
- !*** ./src/lib/loader.js ***!
- \***************************/
-/*! exports provided: loader */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loader", function() { return loader; });
-class Loader {
- constructor() {
- this.loader = document.querySelector('.loading');
- }
-
- show() {
- this.loader.classList.add('show');
- }
-
- hide() {
- this.loader.classList.add('hide');
- setTimeout(() => {
- this.loader.classList.remove('hide');
- this.loader.classList.remove('show');
- }, 1000);
- }
-
-}
-
-const loader = new Loader();
-
-/***/ }),
-
-/***/ "./src/lib/menu.js":
-/*!*************************!*\
- !*** ./src/lib/menu.js ***!
- \*************************/
-/*! exports provided: menu */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "menu", function() { return menu; });
-/* harmony import */ var _pages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pages */ "./src/pages/index.js");
-/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js");
-
-
-
-class Menus {
- constructor() {
- this.menus = [];
- this.routes = [];
-
- this.addMenu = menu => {
- this.menus.push(menu);
- this.addRoute(menu);
- };
-
- this.addRoute = route => {
- this.routes.push(route);
-
- if (route.children) {
- route.children.forEach(child => this.routes.push(child));
- }
- };
- }
-
-}
-
-const menus = [{
- title: 'Devices',
- href: 'devices',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesPage"],
- children: []
-}, {
- title: 'Controllers',
- href: 'controllers',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"],
- children: []
-}, {
- title: 'Automation',
- href: 'rules',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesEditorPage"],
- class: 'full',
- children: []
-}, {
- title: 'Config',
- href: 'config',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigPage"],
- children: [{
- title: 'Hardware',
- href: 'config/hardware',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigHardwarePage"]
- }, {
- title: 'Advanced',
- href: 'config/advanced',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ConfigAdvancedPage"]
- }, {
- title: 'Rules',
- href: 'config/rules',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["RulesPage"]
- }, {
- title: 'Save',
- href: 'config/save',
- action: _conf_config_dat__WEBPACK_IMPORTED_MODULE_1__["saveConfig"]
- }, {
- title: 'Load',
- href: 'config/load',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["LoadPage"]
- }, {
- title: 'Reboot',
- href: 'config/reboot',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["RebootPage"]
- }, {
- title: 'Factory Reset',
- href: 'config/factory',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["FactoryResetPage"]
- }]
-}, {
- title: 'Tools',
- href: 'tools',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ToolsPage"],
- children: [{
- title: 'Discover',
- href: 'tools/discover',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiscoverPage"]
- }, {
- title: 'Info',
- href: 'tools/sysinfo',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["SysVarsPage"]
- }, {
- title: 'Update',
- href: 'tools/update',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["UpdatePage"]
- }, {
- title: 'Filesystem',
- href: 'tools/fs',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["FSPage"]
- }]
-}];
-const routes = [{
- title: 'Edit Controller',
- href: 'controllers/edit',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllerEditPage"]
-}, {
- title: 'Edit Notification',
- href: 'controllers/notification',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["ControllerNotificationsPage"]
-}, {
- title: 'Edit Device',
- href: 'devices/edit',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["DevicesEditPage"]
-}, {
- title: 'Save to Flash',
- href: 'tools/diff',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["DiffPage"]
-}, {
- title: 'Setup',
- href: 'config/setup',
- component: _pages__WEBPACK_IMPORTED_MODULE_0__["SetupPage"]
-}];
-const menu = new Menus();
-routes.forEach(menu.addRoute);
-menus.forEach(menu.addMenu);
-
-
-/***/ }),
-
-/***/ "./src/lib/node_definitions.js":
-/*!*************************************!*\
- !*** ./src/lib/node_definitions.js ***!
- \*************************************/
-/*! exports provided: nodes */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodes", function() { return nodes; });
-const nodes = [// TRIGGERS
-{
- group: 'TRIGGERS',
- type: 'timer',
- inputs: [],
- outputs: [1],
- config: [{
- name: 'timer',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8]
- }],
- indent: true,
- toString: function () {
- return `timer ${this.config[0].value}`;
- },
- toDsl: function () {
- return [`on Rules#Timer=${this.config[0].value} do\n%%output%%\nEndon\n`];
- }
-}, {
- group: 'TRIGGERS',
- type: 'event',
- inputs: [],
- outputs: [1],
- config: [{
- name: 'name',
- type: 'text'
- }],
- indent: true,
- toString: function () {
- return `event ${this.config[0].value}`;
- },
- toDsl: function () {
- return [`on ${this.config[0].value} do\n%%output%%\nEndon\n`];
- }
-}, {
- group: 'TRIGGERS',
- type: 'clock',
- inputs: [],
- outputs: [1],
- config: [],
- indent: true,
- toString: () => {
- return 'clock';
- },
- toDsl: () => {
- return ['on Clock#Time do\n%%output%%\nEndon\n'];
- }
-}, {
- group: 'TRIGGERS',
- type: 'system boot',
- inputs: [],
- outputs: [1],
- config: [],
- indent: true,
- toString: function () {
- return `on boot`;
- },
- toDsl: function () {
- return [`On System#Boot do\n%%output%%\nEndon\n`];
- }
-}, {
- group: 'TRIGGERS',
- type: 'Device',
- inputs: [],
- outputs: [1],
- config: [],
- indent: true,
- toString: function () {
- return `on boot`;
- },
- toDsl: function () {
- return [`On Device#Value do\n%%output%%\nEndon\n`];
- }
-}, // LOGIC
-{
- group: 'LOGIC',
- type: 'if/else',
- inputs: [1],
- outputs: [1, 2],
- config: [{
- name: 'variable',
- type: 'textselect',
- values: ['Clock#Time']
- }, {
- name: 'equality',
- type: 'select',
- values: ['=', '<', '>', '<=', '>=', '!=']
- }, {
- name: 'value',
- type: 'text'
- }],
- indent: true,
- toString: function () {
- return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`;
- },
- toDsl: function () {
- return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\n%%output%%`, `Else\n%%output%%\nEndif`];
- }
-}, {
- group: 'LOGIC',
- type: 'delay',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'delay',
- type: 'number'
- }],
- toString: function () {
- return `delay: ${this.config[0].value}`;
- },
- toDsl: function () {
- return [`Delay ${this.config[0].value}\n`];
- }
-}, // ACTIONS
-{
- group: 'ACTIONS',
- type: 'GPIO',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'gpio',
- type: 'select',
- values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
- }, {
- name: 'value',
- type: 'select',
- values: [0, 1]
- }],
- toString: function () {
- return `GPIO ${this.config[0].value}, ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`GPIO,${this.config[0].value},${this.config[1].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'Pulse',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'gpio',
- type: 'select',
- values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
- value: 0
- }, {
- name: 'value',
- type: 'select',
- values: [0, 1],
- value: 1
- }, {
- name: 'unit',
- type: 'select',
- values: ['s', 'ms'],
- value: 'ms'
- }, {
- name: 'duration',
- type: 'number',
- value: 1000
- }],
- toString: function () {
- return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;
- },
- toDsl: function () {
- const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse';
- return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'PWM',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'gpio',
- type: 'select',
- values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
- value: 0
- }, {
- name: 'value',
- type: 'number',
- value: 1023
- }],
- toString: function () {
- return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`PWM,${this.config[0].value},${this.config[1].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'SERVO',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'gpio',
- type: 'select',
- values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
- value: 0
- }, {
- name: 'servo',
- type: 'select',
- values: [1, 2],
- value: 0
- }, {
- name: 'position',
- type: 'number',
- value: 90
- }],
- toString: function () {
- return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`;
- },
- toDsl: function () {
- return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'fire event',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'name',
- type: 'text'
- }],
- toString: function () {
- return `event ${this.config[0].value}`;
- },
- toDsl: function () {
- return [`event,${this.config[0].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'settimer',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'timer',
- type: 'select',
- values: [1, 2, 3, 4, 5, 6, 7, 8]
- }, {
- name: 'value',
- type: 'number'
- }],
- toString: function () {
- return `timer${this.config[0].value} = ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`timerSet,${this.config[0].value},${this.config[1].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'MQTT',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'topic',
- type: 'text'
- }, {
- name: 'command',
- type: 'text'
- }],
- toString: function () {
- return `mqtt ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`Publish ${this.config[0].value},${this.config[1].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'UDP',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'ip',
- type: 'text'
- }, {
- name: 'port',
- type: 'number'
- }, {
- name: 'command',
- type: 'text'
- }],
- toString: function () {
- return `UDP ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'HTTP',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'host',
- type: 'text'
- }, {
- name: 'port',
- type: 'number',
- value: 80
- }, {
- name: 'url',
- type: 'text'
- }],
- toString: function () {
- return `HTTP ${this.config[2].value}`;
- },
- toDsl: function () {
- return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`];
- }
-}, {
- group: 'ACTIONS',
- type: 'ESPEASY',
- inputs: [1],
- outputs: [1],
- config: [{
- name: 'device',
- type: 'number'
- }, {
- name: 'command',
- type: 'text'
- }],
- toString: function () {
- return `mqtt ${this.config[1].value}`;
- },
- toDsl: function () {
- return [`SendTo ${this.config[0].value},${this.config[1].value}\n`];
- }
-}];
-
-/***/ }),
-
-/***/ "./src/lib/parser.js":
-/*!***************************!*\
- !*** ./src/lib/parser.js ***!
- \***************************/
-/*! exports provided: parseConfig, writeConfig */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseConfig", function() { return parseConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "writeConfig", function() { return writeConfig; });
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js");
-
-
-class DataParser {
- constructor(data) {
- this.view = new DataView(data);
- this.offset = 0;
- this.bitbyte = 0;
- this.bitbytepos = 7;
- }
-
- pad(nr) {
- while (this.offset % nr) {
- this.offset++;
- }
- }
-
- bit(signed = false, write = false, val) {
- if (this.bitbytepos === 7) {
- if (!write) {
- this.bitbyte = this.byte();
- this.bitbytepos = 0;
- } else {
- this.byte(signed, write, this.bitbyte);
- }
- }
-
- if (!write) {
- return this.bitbyte >> this.bitbytepos++ & 1;
- } else {
- this.bitbyte = val ? this.bitbyte | 1 << this.bitbytepos++ : this.bitbyte & ~(1 << this.bitbytepos++);
- }
- }
-
- byte(signed = false, write = false, val) {
- this.pad(1);
- const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;
- const res = this.view[fn](this.offset, val);
- this.offset += 1;
- return res;
- }
-
- int16(signed = false, write = false, val) {
- this.pad(2);
- let fn = signed ? 'Int16' : 'Uint16';
- const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);
- this.offset += 2;
- return res;
- }
-
- int32(signed = false, write = false, val) {
- this.pad(4);
- let fn = signed ? 'Int32' : 'Uint32';
- const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);
- this.offset += 4;
- return res;
- }
-
- float(signed = false, write = false, val) {
- this.pad(4);
- const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);
- this.offset += 4;
- return res;
- }
-
- bytes(nr, signed = false, write = false, vals) {
- const res = [];
-
- for (var x = 0; x < nr; x++) {
- res.push(this.byte(signed, write, vals ? vals[x] : null));
- }
-
- return res;
- }
-
- ints(nr, signed = false, write = false, vals) {
- const res = [];
-
- for (var x = 0; x < nr; x++) {
- res.push(this.int16(signed, write, vals ? vals[x] : null));
- }
-
- return res;
- }
-
- longs(nr, signed = false, write = false, vals) {
- const res = [];
-
- for (var x = 0; x < nr; x++) {
- res.push(this.int32(signed, write, vals ? vals[x] : null));
- }
-
- return res;
- }
-
- floats(nr, signed = false, write = false, vals) {
- const res = [];
-
- for (var x = 0; x < nr; x++) {
- res.push(this.float(write, vals ? vals[x] : null));
- }
-
- return res;
- }
-
- string(nr, signed = false, write = false, val) {
- if (write) {
- for (var i = 0; i < nr; ++i) {
- var code = val.charCodeAt(i) || '\0';
- this.byte(false, true, code);
- }
- } else {
- const res = this.bytes(nr);
- return String.fromCharCode.apply(null, res).replace(/\x00/g, '');
- }
- }
-
-}
-
-const parseConfig = (data, config, start) => {
- const p = new DataParser(data);
- if (start) p.offset = start;
- const result = {};
- config.map(value => {
- const prop = value.length ? value.length : value.signed;
- Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(result, value.prop, p[value.type](prop, value.signed));
- });
- return result;
-};
-const writeConfig = (buffer, data, config, start) => {
- const p = new DataParser(buffer);
- if (start) p.offset = start;
- config.map(value => {
- const val = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(data, value.prop);
-
- if (value.length) {
- p[value.type](value.length, value.signed, true, val);
- } else {
- p[value.type](value.signed, true, val);
- }
- });
-};
-
-/***/ }),
-
-/***/ "./src/lib/plugins.js":
-/*!****************************!*\
- !*** ./src/lib/plugins.js ***!
- \****************************/
-/*! exports provided: loadPlugins */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPlugins", function() { return loadPlugins; });
-/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ "./src/lib/settings.js");
-/* harmony import */ var _espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./espeasy */ "./src/lib/espeasy.js");
-/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loader */ "./src/lib/loader.js");
-/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu */ "./src/lib/menu.js");
-
-
-
-
-const PLUGINS = ['http://localhost:8080/build/dash.js'];
-
-const dynamicallyLoadScript = url => {
- return new Promise(resolve => {
- var script = document.createElement("script"); // create a script DOM node
-
- script.src = url; // set its src to the provided URL
-
- script.onreadystatechange = resolve;
- script.onload = resolve;
- script.onerror = resolve;
- document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)
- });
-};
-
-const getPluginAPI = () => {
- return {
- settings: _settings__WEBPACK_IMPORTED_MODULE_0__["settings"],
- loader: _loader__WEBPACK_IMPORTED_MODULE_2__["loader"],
- menu: _menu__WEBPACK_IMPORTED_MODULE_3__["menu"],
- espeasy: _espeasy__WEBPACK_IMPORTED_MODULE_1__["default"]
- };
-};
-
-window.getPluginAPI = getPluginAPI;
-const loadPlugins = async () => {
- return Promise.all(PLUGINS.map(async plugin => {
- return dynamicallyLoadScript(plugin);
- }));
-};
-
-/***/ }),
-
-/***/ "./src/lib/settings.js":
-/*!*****************************!*\
- !*** ./src/lib/settings.js ***!
- \*****************************/
-/*! exports provided: settings */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "settings", function() { return settings; });
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js");
-
-
-const diff = (obj1, obj2, path = '') => {
- return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(obj1).map(key => {
- const val1 = obj1[key];
- const val2 = obj2[key];
- if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);else if (val1 !== val2) {
- return [{
- path: `${path}.${key}`,
- val1,
- val2
- }];
- } else return [];
- }).flat();
-};
-
-class Settings {
- init(settings) {
- this.settings = settings;
- this.apply();
- }
-
- get(prop) {
- return Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop);
- }
- /**
- * sets changes to the current version and sets changed flag
- * @param {*} prop
- * @param {*} value
- */
-
-
- set(prop, value) {
- const obj = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["get"])(this.settings, prop);
-
- if (typeof obj === 'object') {
- console.warn('settings an object!');
- Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value);
- } else {
- Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["set"])(this.settings, prop, value);
- }
-
- if (this.diff().length) this.changed = true;
- }
- /**
- * returns diff between applied and current version
- */
-
-
- diff() {
- return diff(this.stored, this.settings);
- }
- /***
- * applys changes and creates new version in localStorage
- */
-
-
- apply() {
- this.stored = JSON.parse(JSON.stringify(this.settings));
- this.changed = false;
- }
-
-}
-
-const settings = window.settings1 = new Settings();
-
-/***/ }),
-
-/***/ "./src/pages/config.advanced.js":
-/*!**************************************!*\
- !*** ./src/pages/config.advanced.js ***!
- \**************************************/
-/*! exports provided: ConfigAdvancedPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return ConfigAdvancedPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-
-
-
-const logLevelOptions = [{
- name: 'None',
- value: 0
-}, {
- name: 'Error',
- value: 1
-}, {
- name: 'Info',
- value: 2
-}, {
- name: 'Debug',
- value: 3
-}, {
- name: 'Debug More',
- value: 4
-}, {
- name: 'Debug Dev',
- value: 9
-}];
-const formConfig = {
- onSave: vals => {
- console.log(vals);
- },
- groups: {
- rules: {
- name: 'Rules Settings',
- configs: {
- enabled: {
- name: 'Enabled',
- type: 'checkbox'
- },
- oldengine: {
- name: 'Old Engine',
- type: 'checkbox'
- }
- }
- },
- mqtt: {
- name: 'Controller Settings',
- configs: {
- retain_flag: {
- name: 'MQTT Retain Msg',
- type: 'checkbox'
- },
- interval: {
- name: 'Message Interval',
- type: 'number'
- },
- useunitname: {
- name: 'MQTT use unit name as ClientId',
- type: 'checkbox'
- },
- changeclientid: {
- name: 'MQTT change ClientId at reconnect',
- type: 'checkbox'
- }
- }
- },
- ntp: {
- name: 'NTP Settings',
- configs: {
- enabled: {
- name: 'Use NTP',
- type: 'checkbox'
- },
- host: {
- name: 'NTP Hostname',
- type: 'string'
- }
- }
- },
- dst: {
- name: 'DST Settings',
- configs: {
- enabled: {
- name: 'Use DST',
- type: 'checkbox'
- }
- }
- },
- location: {
- name: 'Location Settings',
- configs: {
- long: {
- name: 'Longitude',
- type: 'number'
- },
- lat: {
- name: 'Latitude',
- type: 'number'
- }
- }
- },
- log: {
- name: 'Log Settings',
- configs: {
- syslog_ip: {
- name: 'Syslog IP',
- type: 'ip'
- },
- syslog_level: {
- name: 'Syslog Level',
- type: 'select',
- options: logLevelOptions
- },
- syslog_facility: {
- name: 'Syslog Level',
- type: 'select',
- options: [{
- name: 'Kernel',
- value: 0
- }, {
- name: 'User',
- value: 1
- }, {
- name: 'Daemon',
- value: 3
- }, {
- name: 'Message',
- value: 5
- }, {
- name: 'Local0',
- value: 16
- }, {
- name: 'Local1',
- value: 17
- }, {
- name: 'Local2',
- value: 18
- }, {
- name: 'Local3',
- value: 19
- }, {
- name: 'Local4',
- value: 20
- }, {
- name: 'Local5',
- value: 21
- }, {
- name: 'Local6',
- value: 22
- }, {
- name: 'Local7',
- value: 23
- }]
- },
- serial_level: {
- name: 'Serial Level',
- type: 'select',
- options: logLevelOptions
- },
- web_level: {
- name: 'Web Level',
- type: 'select',
- options: logLevelOptions
- }
- }
- },
- serial: {
- name: 'Serial Settings',
- configs: {
- enabled: {
- name: 'Enable Serial',
- type: 'checkbox'
- },
- baudrate: {
- name: 'Baud Rate',
- type: 'number'
- }
- }
- },
- experimental: {
- name: 'Experimental Settings',
- configs: {
- ip_octet: {
- name: 'Fixed IP Octet',
- type: 'number'
- },
- WDI2CAddress: {
- name: 'WD I2C Address',
- type: 'number'
- },
- ssdp: {
- name: 'Use SSDP',
- type: 'checkbox',
- var: 'ssdp.enabled'
- },
- ConnectionFailuresThreshold: {
- name: 'Connection Failiure Treshold',
- type: 'number'
- },
- WireClockStretchLimit: {
- name: 'I2C ClockStretchLimit',
- type: 'number'
- }
- }
- }
- }
-};
-class ConfigAdvancedPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- formConfig.onSave = values => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('config', values);
- window.location.href = '#devices';
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config')
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/config.hardware.js":
-/*!**************************************!*\
- !*** ./src/pages/config.hardware.js ***!
- \**************************************/
-/*! exports provided: pins, ConfigHardwarePage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return pins; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return ConfigHardwarePage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-
-
-
-const pins = [{
- name: 'None',
- value: 255
-}, {
- name: 'GPIO-0',
- value: 0
-}, {
- name: 'GPIO-1',
- value: 1
-}, {
- name: 'GPIO-2',
- value: 2
-}, {
- name: 'GPIO-3',
- value: 3
-}, {
- name: 'GPIO-4',
- value: 4
-}, {
- name: 'GPIO-5',
- value: 5
-}, {
- name: 'GPIO-9',
- value: 9
-}, {
- name: 'GPIO-10',
- value: 10
-}, {
- name: 'GPIO-12',
- value: 12
-}, {
- name: 'GPIO-13',
- value: 13
-}, {
- name: 'GPIO-14',
- value: 14
-}, {
- name: 'GPIO-15',
- value: 15
-}, {
- name: 'GPIO-16',
- value: 16
-}];
-const pinState = [{
- name: 'Default',
- value: 0
-}, {
- name: 'Low',
- value: 1
-}, {
- name: 'High',
- value: 2
-}, {
- name: 'Input',
- value: 3
-}];
-const formConfig = {
- groups: {
- led: {
- name: 'WiFi Status LED',
- configs: {
- gpio: {
- name: 'GPIO --> LED',
- type: 'select',
- options: pins
- },
- inverse: {
- name: 'Inversed LED',
- type: 'checkbox'
- }
- }
- },
- reset: {
- name: 'Reset Pin',
- configs: {
- pin: {
- name: 'GPIO <-- Switch',
- type: 'select',
- options: pins
- }
- }
- },
- i2c: {
- name: 'I2C Settings',
- configs: {
- sda: {
- name: 'GPIO - SDA',
- type: 'select',
- options: pins
- },
- scl: {
- name: 'GPIO - SCL',
- type: 'select',
- options: pins
- }
- }
- },
- spi: {
- name: 'SPI Settings',
- configs: {
- enabled: {
- name: 'Init SPI',
- type: 'checkbox'
- }
- }
- },
- gpio: {
- name: 'GPIO boot states',
- configs: {
- 0: {
- name: 'Pin Mode GPIO-0',
- type: 'select',
- options: pinState
- },
- 1: {
- name: 'Pin Mode GPIO-1',
- type: 'select',
- options: pinState
- },
- 2: {
- name: 'Pin Mode GPIO-2',
- type: 'select',
- options: pinState
- },
- 3: {
- name: 'Pin Mode GPIO-3',
- type: 'select',
- options: pinState
- },
- 4: {
- name: 'Pin Mode GPIO-4',
- type: 'select',
- options: pinState
- },
- 5: {
- name: 'Pin Mode GPIO-5',
- type: 'select',
- options: pinState
- },
- 9: {
- name: 'Pin Mode GPIO-9',
- type: 'select',
- options: pinState
- },
- 10: {
- name: 'Pin Mode GPIO-10',
- type: 'select',
- options: pinState
- },
- 12: {
- name: 'Pin Mode GPIO-12',
- type: 'select',
- options: pinState
- },
- 13: {
- name: 'Pin Mode GPIO-13',
- type: 'select',
- options: pinState
- },
- 14: {
- name: 'Pin Mode GPIO-14',
- type: 'select',
- options: pinState
- },
- 15: {
- name: 'Pin Mode GPIO-15',
- type: 'select',
- options: pinState
- }
- }
- }
- }
-};
-class ConfigHardwarePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('hardware');
-
- formConfig.onSave = values => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set('hardware', values);
- window.location.href = '#devices';
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/config.js":
-/*!*****************************!*\
- !*** ./src/pages/config.js ***!
- \*****************************/
-/*! exports provided: ConfigPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return ConfigPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-
-
-
-const ipBlockLevel = [{
- name: 'Allow All',
- value: 0
-}, {
- name: 'Allow Local Subnet',
- value: 1
-}, {
- name: 'Allow IP Range',
- value: 2
-}];
-const formConfig = {
- groups: {
- general: {
- name: 'General',
- configs: {
- unitname: {
- name: 'Unit Name',
- type: 'string'
- },
- unitnr: {
- name: 'Unit Number',
- type: 'number'
- },
- appendunit: {
- name: 'Append Unit Name to Hostname',
- type: 'checkbox'
- },
- password: {
- name: 'Admin Password',
- type: 'password',
- var: 'security[0].password'
- }
- }
- },
- wifi: {
- name: 'WiFi',
- configs: {
- ssid: {
- name: 'SSID',
- type: 'string',
- var: 'security[0].WifiSSID'
- },
- passwd: {
- name: 'Password',
- type: 'password',
- var: 'security[0].WifiKey'
- },
- fallbackssid: {
- name: 'Fallback SSID',
- type: 'string',
- var: 'security[0].WifiSSID2'
- },
- fallbackpasswd: {
- name: 'Fallback Password',
- type: 'password',
- var: 'security[0].WifiKey2'
- },
- wpaapmode: {
- name: 'WPA AP Mode Key:',
- type: 'string',
- var: 'security[0].WifiAPKey'
- }
- }
- },
- clientIP: {
- name: 'Client IP Filtering',
- configs: {
- blocklevel: {
- name: 'IP Block Level',
- type: 'select',
- options: ipBlockLevel,
- var: 'security[0].IPblockLevel'
- },
- lowerrange: {
- name: 'Access IP lower range',
- type: 'ip',
- var: 'security[0].AllowedIPrangeLow'
- },
- upperrange: {
- name: 'Access IP upper range',
- type: 'ip',
- var: 'security[0].AllowedIPrangeHigh'
- }
- }
- },
- IP: {
- name: 'IP Settings',
- configs: {
- ip: {
- name: 'IP',
- type: 'ip'
- },
- gw: {
- name: 'Gateway',
- type: 'ip'
- },
- subnet: {
- name: 'Subnet',
- type: 'ip'
- },
- dns: {
- name: 'DNS',
- type: 'ip'
- }
- }
- },
- sleep: {
- name: 'Sleep Mode',
- configs: {
- awaketime: {
- name: 'Sleep awake time',
- type: 'number'
- },
- sleeptime: {
- name: 'Sleep time',
- type: 'number'
- },
- sleeponfailiure: {
- name: 'Sleep on connection failure',
- type: 'checkbox'
- }
- }
- }
- }
-};
-class ConfigPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- formConfig.onSave = values => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`config`, values);
- window.location.href = '#devices';
- };
-
- const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config');
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/controllers.edit.js":
-/*!***************************************!*\
- !*** ./src/pages/controllers.edit.js ***!
- \***************************************/
-/*! exports provided: protocols, ControllerEditPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return protocols; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return ControllerEditPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/helpers */ "./src/lib/helpers.js");
-/* harmony import */ var _components_espeasy_p2p__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/espeasy_p2p */ "./src/components/espeasy_p2p/index.js");
-
-
-
-
-
-const protocols = [{
- name: '- Standalone -',
- value: 0
-}, {
- name: 'Domoticz HTTP',
- value: 1
-}, {
- name: 'Domoticz MQTT',
- value: 2
-}, {
- name: 'Nodo Telnet',
- value: 3
-}, {
- name: 'ThingSpeak',
- value: 4
-}, {
- name: 'OpenHAB MQTT',
- value: 5
-}, {
- name: 'PiDome MQTT',
- value: 6
-}, {
- name: 'Emoncms',
- value: 7
-}, {
- name: 'Generic HTTP',
- value: 8
-}, {
- name: 'FHEM HTTP',
- value: 9
-}, {
- name: 'Generic UDP',
- value: 10
-}, {
- name: 'ESPEasy P2P Networking',
- value: 13
-}, {
- name: 'Email',
- value: 25
-}];
-const baseFields = {
- dns: {
- name: 'Locate Controller',
- type: 'select',
- options: [{
- value: 0,
- name: 'Use IP Address'
- }, {
- value: 1,
- name: 'Use Hostname'
- }]
- },
- IP: {
- name: 'IP',
- type: 'ip'
- },
- hostname: {
- name: 'Hostname',
- type: 'string'
- },
- port: {
- name: 'Port',
- type: 'number'
- },
- minimal_time_between: {
- name: 'Minimum Send Interval',
- type: 'number'
- },
- max_queue_depth: {
- name: 'Max Queue Depth',
- type: 'number'
- },
- max_retry: {
- name: 'Max Retries',
- type: 'number'
- },
- delete_oldest: {
- name: 'Full Queue Action',
- type: 'select',
- options: [{
- value: 0,
- name: 'Ignore New'
- }, {
- value: 1,
- name: 'Delete Oldest'
- }]
- },
- must_check_reply: {
- name: 'Check Reply',
- type: 'select',
- options: [{
- value: 0,
- name: 'Ignore Acknowledgement'
- }, {
- value: 1,
- name: 'Check Acknowledgement'
- }]
- },
- client_timeout: {
- name: 'Client Timeout',
- type: 'number'
- }
-};
-const user = {
- name: 'Controller User',
- type: 'string'
-};
-const password = {
- name: 'Controller Password',
- type: 'password'
-};
-const subscribe = {
- name: 'Controller Subscribe',
- type: 'string'
-};
-const publish = {
- name: 'Controller Publish',
- type: 'string'
-};
-const lwtTopicField = {
- MQTT_lwt_topic: {
- name: 'Controller LWT topic:',
- type: 'string'
- },
- lwt_message_connect: {
- name: 'LWT Connect Message',
- type: 'string'
- },
- lwt_message_disconnect: {
- name: 'LWT Disconnect Message',
- type: 'string'
- }
-};
-const baseDefaults = {
- port: 1883,
- minimal_time_between: 100,
- max_queue_depth: 10,
- max_retry: 10,
- client_timeout: 1000
-};
-const getDefaults = {
- 1: () => ({
- // Domoticz HTTP
- port: 8080
- }),
- 2: () => ({
- // Domoticz MQTT
- subscribe: 'domoticz/out',
- public: 'domoticz/in'
- }),
- 3: () => ({
- // Nodo Telnet
- port: 23
- }),
- 4: () => ({
- // ThingSpeak
- port: 80
- }),
- 5: () => ({
- // OpenHAB MQTT
- subscribe: '/%sysname%/#',
- publish: '/%sysname%/%tskname%/%valname%'
- }),
- 6: () => ({
- // PiDome MQTT
- subscribe: '/Home/#',
- publish: '/hooks/devices/%id%/SensorData/%valname%'
- }),
- 7: () => ({
- // Emoncms
- port: 80
- }),
- 8: () => ({
- // Generic HTTP
- port: 80,
- publish: 'demo.php?name=%sysname%&task=%tskname%&valuename=%valname%&value=%value%'
- }),
- 9: () => ({
- // FHEM HTTP
- port: 8383
- }),
- 10: () => ({
- // Generic UDP
- port: 514,
- publish: '%sysname%_%tskname%_%valname%=%value%'
- }),
- 13: () => ({
- // EspEasy P2P
- port: 65501,
- Custom: 1
- })
-};
-
-const setDefaultConfig = (type, config) => {
- const defaults = { ...baseDefaults,
- ...getDefaults[type]()
- };
- Object.keys(defaults).forEach(key => {
- const val = defaults[key];
- Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_3__["set"])(config.settings, key, val);
- });
-};
-
-const getFormConfig = type => {
- let additionalFields = {};
- let additionalGroups = {};
-
- switch (Number(type)) {
- case 2: // Domoticz MQTT
-
- case 5:
- // OpenHAB MQTT
- additionalFields = { ...baseFields,
- user,
- password,
- subscribe,
- publish,
- ...lwtTopicField
- };
- break;
-
- case 6:
- // 'PiDome MQTT'
- additionalFields = { ...baseFields,
- subscribe,
- publish,
- ...lwtTopicField
- };
- break;
-
- case 3: //'Nodo Telnet'
-
- case 7:
- //'Emoncms':
- additionalFields = { ...baseFields,
- password
- };
- break;
-
- case 8:
- // 'Generic HTTP'
- additionalFields = { ...baseFields,
- user,
- password,
- subscribe,
- publish
- };
- break;
-
- case 1: // Domoticz HTTP
-
- case 9:
- // 'FHEM HTTP'
- additionalFields = { ...baseFields,
- user,
- password
- };
- break;
-
- case 10:
- //'Generic UDP':
- additionalFields = { ...baseFields,
- subscribe,
- publish
- };
- break;
-
- case 13:
- //'ESPEasy P2P Networking':
- additionalGroups = {
- global: {
- name: 'Global Settings',
- configs: {
- port: {
- name: 'UDP Port',
- type: 'number',
- var: 'ROOT.config.espnetwork.port'
- }
- }
- },
- nodes: {
- name: 'Connected Nodes',
- configs: {
- nodes: {
- type: 'custom',
- component: _components_espeasy_p2p__WEBPACK_IMPORTED_MODULE_4__["EspEaspP2PComponent"]
- }
- }
- }
- };
- break;
-
- case 0:
- default:
- additionalFields = { ...baseFields
- };
- }
-
- return {
- groups: {
- settings: {
- name: 'Controller Settings',
- configs: {
- protocol: {
- name: 'Protocol',
- type: 'select',
- var: 'protocol',
- options: protocols
- },
- enabled: {
- name: 'Enabled',
- type: 'checkbox',
- var: 'enabled'
- },
- ...additionalFields
- }
- },
- ...additionalGroups
- }
- };
-}; // todo: changing protocol needs to update:
-// -- back to default (correct default)
-// -- field list
-
-
-class ControllerEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`controllers[${props.params[0]}]`);
- this.state = {
- protocol: this.config.protocol
- };
- }
-
- render(props) {
- const formConfig = getFormConfig(this.state.protocol);
-
- formConfig.groups.settings.configs.protocol.onChange = e => {
- this.setState({
- protocol: e.currentTarget.value
- });
- setDefaultConfig(e.currentTarget.value, this.config);
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: this.config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/controllers.js":
-/*!**********************************!*\
- !*** ./src/pages/controllers.js ***!
- \**********************************/
-/*! exports provided: ControllersPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return ControllersPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js");
-/* harmony import */ var _controllers_notifications__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./controllers.notifications */ "./src/pages/controllers.notifications.js");
-
-
-
-
-class ControllersPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- const controllers = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('controllers');
- const notifications = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('notifications');
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Controllers"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, controllers.map((c, i) => {
- const editUrl = `#controllers/edit/${i}`;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "device"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", {
- class: "info"
- }, i + 1, ": ", c.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", _controllers_edit__WEBPACK_IMPORTED_MODULE_2__["protocols"].find(p => p.value === c.protocol).name, "] PORT:", c.settings.port, " HOST:", c.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: editUrl
- }, "edit")));
- })), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("h3", null, "Notifications"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, notifications.map((n, i) => {
- const editUrl = `#controllers/notification/${i}`;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "device"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", {
- class: "info"
- }, i + 1, ": ", n.enabled ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2713") : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, "\u2717"), "\xA0\xA0[", _controllers_notifications__WEBPACK_IMPORTED_MODULE_3__["types"].find(p => p.value === n.type).name, "] PORT:", n.settings.port, " HOST:", n.settings.host, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: editUrl
- }, "edit")));
- })));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/controllers.notifications.js":
-/*!************************************************!*\
- !*** ./src/pages/controllers.notifications.js ***!
- \************************************************/
-/*! exports provided: types, ControllerNotificationsPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "types", function() { return types; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ControllerNotificationsPage", function() { return ControllerNotificationsPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/helpers */ "./src/lib/helpers.js");
-/* harmony import */ var _devices_defs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../devices/_defs */ "./src/devices/_defs.js");
-
-
-
-
-
-const types = [{
- name: '- None -',
- value: 0
-}, {
- name: 'Email',
- value: 1
-}, {
- name: 'Buzzer',
- value: 2
-}];
-const baseDefaults = {};
-const getDefaults = {
- 0: () => ({}),
- 1: () => ({// Email
- }),
- 2: () => ({// Buzzer
- })
-};
-
-const setDefaultConfig = (type, config) => {
- const defaults = { ...baseDefaults,
- ...getDefaults[type]()
- };
- Object.keys(defaults).forEach(key => {
- const val = defaults[key];
- Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_3__["set"])(config.settings, key, val);
- });
-};
-
-const getFormConfig = type => {
- let additionalFields = {};
-
- switch (Number(type)) {
- case 1:
- // Email
- additionalFields = {
- domain: {
- name: 'Domain',
- type: 'string'
- },
- hostname: {
- name: 'Hostname',
- type: 'string'
- },
- port: {
- name: 'Port',
- type: 'number'
- },
- sender: {
- name: 'Sender',
- type: 'string'
- },
- receiver: {
- name: 'Receiver',
- type: 'string'
- },
- subject: {
- name: 'Subject',
- type: 'string'
- },
- user: {
- name: 'Username',
- type: 'string'
- },
- pass: {
- name: 'Password',
- type: 'string'
- },
- body: {
- name: 'Body',
- type: 'textarea'
- }
- };
- break;
-
- case 2:
- // Buzzer
- additionalFields = {
- pin1: {
- name: '1st GPIO',
- type: 'select',
- options: _devices_defs__WEBPACK_IMPORTED_MODULE_4__["pins"]
- }
- };
- break;
- }
-
- return {
- groups: {
- settings: {
- name: 'Notification Settings',
- configs: {
- type: {
- name: 'Type',
- type: 'select',
- var: 'type',
- options: types
- },
- enabled: {
- name: 'Enabled',
- type: 'checkbox',
- var: 'enabled'
- },
- ...additionalFields
- }
- }
- }
- };
-}; // todo: changing protocol needs to update:
-// -- back to default (correct default)
-// -- field list
-
-
-class ControllerNotificationsPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`notifications[${props.params[0]}]`);
- this.state = {
- type: this.config.type
- };
- }
-
- render(props) {
- const formConfig = getFormConfig(this.state.type);
-
- formConfig.groups.settings.configs.type.onChange = e => {
- this.setState({
- type: e.currentTarget.value
- });
- setDefaultConfig(e.currentTarget.value, this.config);
- };
-
- formConfig.onSave = values => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`notifications[${props.params[0]}]`, values);
- window.location.href = '#controllers';
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: this.config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/devices.edit.js":
-/*!***********************************!*\
- !*** ./src/pages/devices.edit.js ***!
- \***********************************/
-/*! exports provided: DevicesEditPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return DevicesEditPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js");
-/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/helpers */ "./src/lib/helpers.js");
-
-
-
-
-
-const baseFields = {
- enabled: {
- name: 'Enabled',
- type: 'checkbox',
- var: 'enabled'
- },
- name: {
- name: 'Name',
- type: 'string'
- }
-};
-
-const getFormConfig = type => {
- const device = _devices__WEBPACK_IMPORTED_MODULE_3__["devices"].find(d => d.value === parseInt(type));
- if (!device) return null;
- const dataAcquisitionForm = device.fields.data ? {
- name: 'Data Acquisition',
- configs: {
- send1: {
- name: 'Send to Controller 1',
- type: 'checkbox',
- var: 'TaskDeviceSendData[0]',
- if: 'controllers[0].enabled'
- },
- send2: {
- name: 'Send to Controller 2',
- type: 'checkbox',
- var: 'TaskDeviceSendData[1]',
- if: 'controllers[1].enabled'
- },
- send3: {
- name: 'Send to Controller 3',
- type: 'checkbox',
- var: 'TaskDeviceSendData[2]',
- if: 'controllers[2].enabled'
- },
- idx1: {
- name: 'IDX1',
- type: 'number',
- var: 'TaskDeviceID[0]',
- if: 'controllers[0].enabled'
- },
- idx2: {
- name: 'IDX2',
- type: 'number',
- var: 'TaskDeviceID[1]',
- if: 'controllers[1].enabled'
- },
- idx3: {
- name: 'IDX3',
- type: 'number',
- var: 'TaskDeviceID[2]',
- if: 'controllers[2].enabled'
- },
- interval: {
- name: 'Interval',
- type: 'number',
- var: 'interval'
- }
- }
- } : {};
- return {
- groups: {
- settings: {
- name: 'Device Settings',
- configs: {
- device: {
- name: 'Device',
- type: 'select',
- var: 'device',
- options: _devices__WEBPACK_IMPORTED_MODULE_3__["devices"]
- },
- ...baseFields
- }
- },
- ...device.fields,
- data: dataAcquisitionForm,
- values: {
- name: 'Values',
- configs: { ...[...new Array(device.fields.vals || 0)].reduce((acc, x, i) => {
- acc[`value${i}`] = [{
- name: `Name ${i + 1}`,
- var: `settings.values[${i}].name`,
- type: 'string'
- }, {
- name: `Formula ${i + 1}`,
- var: `settings.values[${i}].formula`,
- type: 'string'
- }, {
- name: `Decimals ${i + 1}`,
- var: `extra.decimals[${i}]`,
- type: 'number'
- }];
- return acc;
- }, {})
- }
- }
- }
- };
-};
-
-const setDefaultConfig = (type, config) => {
- const device = _devices__WEBPACK_IMPORTED_MODULE_3__["devices"].find(d => d.value === parseInt(type));
- Object.keys(device.fields).forEach(groupKey => {
- const group = device.fields[groupKey];
- if (!group.configs) return;
- Object.keys(group.configs).forEach(configKey => {
- const cfg = group.configs[configKey];
- const key = cfg.var || `${groupKey}.${configKey}`;
- let val = 0;
- if (cfg.type === 'string') val = '';else if (cfg.type === 'ip') val = [0, 0, 0, 0];
- Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_4__["set"])(config, key, val);
- });
- });
-
- if (device.fields.defaults) {
- const defaultConfig = device.fields.defaults();
- Object.keys(defaultConfig).forEach(key => {
- const val = defaultConfig[key];
- Object(_lib_helpers__WEBPACK_IMPORTED_MODULE_4__["set"])(config, key, val);
- });
- }
-}; // todo: changing protocol needs to update:
-// -- back to default (correct default)
-// -- field list
-
-
-class DevicesEditPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get(`tasks[${props.params[0]}]`);
- this.state = {
- device: this.config.device
- };
- }
-
- render(props) {
- const formConfig = getFormConfig(this.state.device);
-
- if (!formConfig) {
- alert('something went wrong, cant edit device');
- window.location.href = '#devices';
- }
-
- formConfig.groups.settings.configs.device.onChange = e => {
- this.setState({
- device: e.currentTarget.value
- });
- setDefaultConfig(e.currentTarget.value, this.config);
- };
-
- formConfig.onSave = values => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].set(`tasks[${props.params[0]}]`, values);
- window.location.href = '#devices';
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: this.config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/devices.js":
-/*!******************************!*\
- !*** ./src/pages/devices.js ***!
- \******************************/
-/*! exports provided: DevicesPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return DevicesPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../devices */ "./src/devices/index.js");
-
-
-
-class DevicesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
-
- this.handleEnableToggle = e => {
- _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0);
- };
- }
-
- render(props) {
- const tasks = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].get('tasks');
- if (!tasks) return;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, tasks.map((task, i) => {
- const editUrl = `#devices/edit/${i}`;
- const device = _devices__WEBPACK_IMPORTED_MODULE_2__["devices"].find(d => d.value === task.device);
- const deviceType = device ? device.name : '--unknown--';
- const enabledProp = `tasks[${i}].enabled`;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "device"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", {
- class: "info"
- }, i + 1, ": ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- type: "checkbox",
- defaultChecked: task.enabled,
- "data-prop": enabledProp,
- onChange: this.handleEnableToggle
- }), "\xA0\xA0", task.settings.name, " [", deviceType, "] ", task.gpio1 !== 255 ? `GPIO:${task.gpio1}` : '', Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: editUrl
- }, "edit")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", {
- class: "vars"
- }));
- }));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/diff.js":
-/*!***************************!*\
- !*** ./src/pages/diff.js ***!
- \***************************/
-/*! exports provided: DiffPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return DiffPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _conf_config_dat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conf/config.dat */ "./src/conf/config.dat.js");
-/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js");
-/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/loader */ "./src/lib/loader.js");
-
-
-
-
-
-class DiffPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff();
- this.stage = 0;
-
- this.calculateByteDiff = () => {
- this.data = Object(_conf_config_dat__WEBPACK_IMPORTED_MODULE_2__["saveConfig"])(false);
- this.bytediffcount = 0;
- this.bytediff = Array.from(new Uint8Array(this.data));
- this.bytediff = this.bytediff.map((byte, i) => {
- const binary = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].binary[i];
-
- if (byte !== binary) {
- this.bytediffcount++;
- return `${binary.toString(16)}:${byte.toString(16)} `;
- } else return `${byte.toString(16)}`;
- });
- this.bytediff = this.bytediff.join(' ');
- };
-
- this.calculateByteDiff();
-
- this.applyChanges = () => {
- if (this.stage === 0) {
- this.diff.map(d => {
- const input = this.form.elements[d.path];
-
- if (!input.checked) {
- _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].set(input.name, d.val1);
- }
- });
- _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].apply();
- this.diff = _lib_settings__WEBPACK_IMPORTED_MODULE_1__["settings"].diff();
- this.calculateByteDiff();
- this.stage = 1;
- return;
- }
-
- _lib_loader__WEBPACK_IMPORTED_MODULE_4__["loader"].show();
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeFile"])('config.dat', this.data).then(() => {
- this.stage = 0;
- window.location.href = '#config/reboot';
- });
- };
- }
-
- render(props) {
- if (this.bytediff && this.stage === 1
- /*|| this.bytediffcount*/
- ) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- dangerouslySetInnerHTML: {
- __html: this.bytediff
- }
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.applyChanges
- }, "APPLY (bytes: ", this.bytediffcount, ")"));
- }
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "byte diff: ", this.bytediffcount), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- ref: ref => this.form = ref
- }, this.diff.map(change => {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, change.path), ": before: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val1)), " now:", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("b", null, JSON.stringify(change.val2)), " ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- name: change.path,
- type: "checkbox",
- defaultChecked: true
- }));
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.applyChanges
- }, "APPLY")));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/discover.js":
-/*!*******************************!*\
- !*** ./src/pages/discover.js ***!
- \*******************************/
-/*! exports provided: DiscoverPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return DiscoverPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-const devices = [{
- nr: 1,
- name: 'Senzor',
- type: 'DH11',
- vars: [{
- name: 'Temperature',
- formula: '',
- value: 21
- }, {
- name: 'Humidity',
- formula: '',
- value: 65
- }]
-}, {
- nr: 1,
- name: 'Humidity',
- type: 'Linear Regulator',
- vars: [{
- name: 'Output',
- formula: '',
- value: 1
- }]
-}];
-class DiscoverPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- devices: []
- };
-
- this.scani2c = () => {
- fetch('/i2cscanner').then(r => r.json()).then(r => {
- this.setState({
- devices: r
- });
- });
- };
-
- this.scanwifi = () => {
- fetch('/wifiscanner').then(r => r.json()).then(r => {
- this.setState({
- devices: r
- });
- });
- };
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.scani2c
- }, "Scan I2C"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.scanwifi
- }, "Scan WiFi")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", null, this.state.devices.map(device => {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", {
- class: "device"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", {
- class: "info"
- }, JSON.stringify(device)));
- })));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/factory_reset.js":
-/*!************************************!*\
- !*** ./src/pages/factory_reset.js ***!
- \************************************/
-/*! exports provided: FactoryResetPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return FactoryResetPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-
-
-const formConfig = {
- onSave: vals => {
- console.log(vals);
- },
- groups: {
- keep: {
- name: 'Settings to keep',
- configs: {
- unit: {
- name: 'Keep Unit/Name',
- type: 'checkbox'
- },
- wifi: {
- name: 'Keep WiFi config',
- type: 'checkbox'
- },
- network: {
- name: 'Keep network config',
- type: 'checkbox'
- },
- ntp: {
- name: 'Keep NTP/DST config',
- type: 'checkbox'
- },
- log: {
- name: 'Keep log config',
- type: 'checkbox'
- }
- }
- },
- load: {
- name: 'Pre-defined configurations',
- configs: {
- config: {
- name: 'Pre-Defined config',
- type: 'select',
- options: [{
- name: 'default',
- value: 0
- }, {
- name: 'Sonoff Basic',
- value: 1
- }, {
- name: 'Sonoff TH1x',
- value: 2
- }, {
- name: 'Sonoff S2x',
- value: 3
- }, {
- name: 'Sonoff TouchT1',
- value: 4
- }, {
- name: 'Sonoff TouchT2',
- value: 5
- }, {
- name: 'Sonoff TouchT3',
- value: 6
- }, {
- name: 'Sonoff 4ch',
- value: 7
- }, {
- name: 'Sonoff POW',
- value: 8
- }, {
- name: 'Sonoff POW-r2',
- value: 9
- }, {
- name: 'Shelly1',
- value: 10
- }]
- }
- }
- }
- }
-};
-const config = {};
-class FactoryResetPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- formConfig.onSave = config => {
- const data = new FormData();
- if (config.keep.unit) data.append('kun', 'on');
- if (config.keep.wifi) data.append('kw', 'on');
- if (config.keep.network) data.append('knet', 'on');
- if (config.keep.ntp) data.append('kntp', 'on');
- if (config.keep.log) data.append('klog', 'on');
- data.append('fdm', config.load.config);
- data.append('savepref', 'Save Preferences');
- fetch('/factoryreset', {
- method: 'POST',
- body: data
- }).then(() => {
- data.delete('savepref');
- data.append('performfactoryreset', 'Factory Reset');
- fetch('/factoryreset', {
- method: 'POST',
- body: data
- }).then(() => {
- setTimeout(() => {
- window.location.href = "#devices";
- }, 5000);
- }, e => {});
- }, e => {});
- };
-
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: config
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/fs.js":
-/*!*************************!*\
- !*** ./src/pages/fs.js ***!
- \*************************/
-/*! exports provided: FSPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return FSPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js");
-
-
-class FSPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- files: []
- };
-
- this.saveForm = () => {
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]);
- };
-
- this.deleteFile = e => {
- const fileName = e.currentTarget.dataset.name;
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["deleteFile"])(fileName).then(() => this.fetch());
- };
- }
-
- fetch() {
- fetch('/filelist_json').then(response => response.json()).then(fileList => {
- this.setState({
- files: fileList
- });
- });
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- class: "pure-form pure-form-aligned"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-control-group"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", {
- for: "file",
- class: "pure-checkbox"
- }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: "file",
- type: "file",
- ref: ref => this.file = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.saveForm
- }, "upload"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("table", {
- class: "pure-table"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("thead", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "File"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null, "Size"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("th", null))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tbody", null, this.state.files.map(file => {
- const url = `/${file.fileName}`;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("tr", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- href: url
- }, file.fileName)), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, file.size), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("td", null, file.fileName.endsWith('.dat') ? null : Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.deleteFile,
- "data-name": file.fileName
- }, "X")));
- }))));
- }
-
- componentDidMount() {
- this.fetch();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/index.js":
-/*!****************************!*\
- !*** ./src/pages/index.js ***!
- \****************************/
-/*! exports provided: ControllersPage, DevicesPage, ConfigPage, ConfigAdvancedPage, pins, ConfigHardwarePage, RebootPage, LoadPage, UpdatePage, RulesPage, ToolsPage, FSPage, FactoryResetPage, DiscoverPage, protocols, ControllerEditPage, types, ControllerNotificationsPage, DevicesEditPage, DiffPage, RulesEditorPage, SetupPage, SysVarsPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _controllers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./controllers */ "./src/pages/controllers.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllersPage", function() { return _controllers__WEBPACK_IMPORTED_MODULE_0__["ControllersPage"]; });
-
-/* harmony import */ var _devices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./devices */ "./src/pages/devices.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesPage", function() { return _devices__WEBPACK_IMPORTED_MODULE_1__["DevicesPage"]; });
-
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ "./src/pages/config.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigPage", function() { return _config__WEBPACK_IMPORTED_MODULE_2__["ConfigPage"]; });
-
-/* harmony import */ var _config_advanced__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config.advanced */ "./src/pages/config.advanced.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigAdvancedPage", function() { return _config_advanced__WEBPACK_IMPORTED_MODULE_3__["ConfigAdvancedPage"]; });
-
-/* harmony import */ var _config_hardware__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config.hardware */ "./src/pages/config.hardware.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pins", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["pins"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConfigHardwarePage", function() { return _config_hardware__WEBPACK_IMPORTED_MODULE_4__["ConfigHardwarePage"]; });
-
-/* harmony import */ var _reboot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./reboot */ "./src/pages/reboot.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return _reboot__WEBPACK_IMPORTED_MODULE_5__["RebootPage"]; });
-
-/* harmony import */ var _load__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./load */ "./src/pages/load.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return _load__WEBPACK_IMPORTED_MODULE_6__["LoadPage"]; });
-
-/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./update */ "./src/pages/update.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return _update__WEBPACK_IMPORTED_MODULE_7__["UpdatePage"]; });
-
-/* harmony import */ var _rules__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rules */ "./src/pages/rules.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return _rules__WEBPACK_IMPORTED_MODULE_8__["RulesPage"]; });
-
-/* harmony import */ var _tools__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tools */ "./src/pages/tools.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return _tools__WEBPACK_IMPORTED_MODULE_9__["ToolsPage"]; });
-
-/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fs */ "./src/pages/fs.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FSPage", function() { return _fs__WEBPACK_IMPORTED_MODULE_10__["FSPage"]; });
-
-/* harmony import */ var _factory_reset__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./factory_reset */ "./src/pages/factory_reset.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FactoryResetPage", function() { return _factory_reset__WEBPACK_IMPORTED_MODULE_11__["FactoryResetPage"]; });
-
-/* harmony import */ var _discover__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./discover */ "./src/pages/discover.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiscoverPage", function() { return _discover__WEBPACK_IMPORTED_MODULE_12__["DiscoverPage"]; });
-
-/* harmony import */ var _controllers_edit__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./controllers.edit */ "./src/pages/controllers.edit.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "protocols", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["protocols"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllerEditPage", function() { return _controllers_edit__WEBPACK_IMPORTED_MODULE_13__["ControllerEditPage"]; });
-
-/* harmony import */ var _controllers_notifications__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./controllers.notifications */ "./src/pages/controllers.notifications.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "types", function() { return _controllers_notifications__WEBPACK_IMPORTED_MODULE_14__["types"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ControllerNotificationsPage", function() { return _controllers_notifications__WEBPACK_IMPORTED_MODULE_14__["ControllerNotificationsPage"]; });
-
-/* harmony import */ var _devices_edit__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./devices.edit */ "./src/pages/devices.edit.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicesEditPage", function() { return _devices_edit__WEBPACK_IMPORTED_MODULE_15__["DevicesEditPage"]; });
-
-/* harmony import */ var _diff__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diff */ "./src/pages/diff.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DiffPage", function() { return _diff__WEBPACK_IMPORTED_MODULE_16__["DiffPage"]; });
-
-/* harmony import */ var _rules_editor__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./rules.editor */ "./src/pages/rules.editor.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return _rules_editor__WEBPACK_IMPORTED_MODULE_17__["RulesEditorPage"]; });
-
-/* harmony import */ var _setup__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./setup */ "./src/pages/setup.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SetupPage", function() { return _setup__WEBPACK_IMPORTED_MODULE_18__["SetupPage"]; });
-
-/* harmony import */ var _tools_sysvars__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./tools.sysvars */ "./src/pages/tools.sysvars.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SysVarsPage", function() { return _tools_sysvars__WEBPACK_IMPORTED_MODULE_19__["SysVarsPage"]; });
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ "./src/pages/load.js":
-/*!***************************!*\
- !*** ./src/pages/load.js ***!
- \***************************/
-/*! exports provided: LoadPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadPage", function() { return LoadPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js");
-
-
-class LoadPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
-
- this.saveForm = () => {
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["storeFile"])(this.file.files[0]);
- };
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- class: "pure-form pure-form-aligned"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-control-group"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", {
- for: "file",
- class: "pure-checkbox"
- }, "File:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: "file",
- type: "file",
- ref: ref => this.file = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.saveForm
- }, "upload")));
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/reboot.js":
-/*!*****************************!*\
- !*** ./src/pages/reboot.js ***!
- \*****************************/
-/*! exports provided: RebootPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RebootPage", function() { return RebootPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/loader */ "./src/lib/loader.js");
-
-
-class RebootPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "ESPEasy is rebooting ... please wait a while, this page will auto refresh.");
- }
-
- componentDidMount() {
- _lib_loader__WEBPACK_IMPORTED_MODULE_1__["loader"].show();
- fetch('/?cmd=reboot').then(() => {
- setTimeout(() => {
- _lib_loader__WEBPACK_IMPORTED_MODULE_1__["loader"].hide();
- window.location.hash = '#devices';
- window.location.reload();
- }, 5000);
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/rules.editor.js":
-/*!***********************************!*\
- !*** ./src/pages/rules.editor.js ***!
- \***********************************/
-/*! exports provided: RulesEditorPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesEditorPage", function() { return RulesEditorPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/floweditor */ "./src/lib/floweditor.js");
-/* harmony import */ var _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/node_definitions */ "./src/lib/node_definitions.js");
-/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js");
-
-
-
-
-class RulesEditorPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.nodes = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"];
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "editor",
- ref: ref => this.element = ref
- });
- }
-
- componentDidMount() {
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["getConfigNodes"])().then(out => {
- out.nodes.forEach(device => _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].unshift(device));
- const ifElseNode = _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'if/else');
-
- if (!ifElseNode.config[0].loaded) {
- out.vars.forEach(v => ifElseNode.config[0].values.push(v));
- ifElseNode.config[0].loaded = true;
- }
-
- this.chart = new _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__["FlowEditor"](this.element, _lib_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"], {
- onSave: (config, rules) => {
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRuleConfig"])(config);
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["storeRule"])(rules);
- }
- });
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_3__["loadRuleConfig"])().then(config => {
- this.chart.loadConfig(config);
- });
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/rules.js":
-/*!****************************!*\
- !*** ./src/pages/rules.js ***!
- \****************************/
-/*! exports provided: RulesPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RulesPage", function() { return RulesPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-const rules = [{
- name: 'Rule 1',
- file: 'rules1.txt',
- index: 1
-}, {
- name: 'Rule 2',
- file: 'rules2.txt',
- index: 2
-}, {
- name: 'Rule 3',
- file: 'rules3.txt',
- index: 3
-}, {
- name: 'Rule 4',
- file: 'rules4.txt',
- index: 4
-}];
-class RulesPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- selected: rules[0]
- };
-
- this.selectionChanged = e => {
- this.setState({
- selected: rules[e.currentTarget.value]
- });
- };
-
- this.saveRule = () => {
- const data = new FormData();
- data.append('set', this.state.selected.index);
- data.append('rules', this.text.value);
- fetch('/rules', {
- method: 'POST',
- body: data
- }).then(res => {
- console.log('succesfully saved');
- console.log(res.text());
- });
- };
-
- this.fetch();
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("select", {
- onChange: this.selectionChanged
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: "0"
- }, "Rule 1"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: "1"
- }, "Rule 2"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: "2"
- }, "Rule 3"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("option", {
- value: "3"
- }, "Rule 4"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", {
- style: "width: 100%; height: 400px",
- ref: ref => this.text = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.saveRule
- }, "Save"))));
- }
-
- async fetch() {
- const text = await fetch(this.state.selected.file).then(response => response.text());
- this.text.value = text;
- }
-
- async componentDidUpdate() {
- this.fetch();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/setup.js":
-/*!****************************!*\
- !*** ./src/pages/setup.js ***!
- \****************************/
-/*! exports provided: SetupPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SetupPage", function() { return SetupPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _components_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/form */ "./src/components/form/index.js");
-/* harmony import */ var _lib_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/settings */ "./src/lib/settings.js");
-/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/loader */ "./src/lib/loader.js");
-
-
-
-
-const formConfig = {
- groups: {
- wifi: {
- name: 'WiFi',
- configs: {
- ssid: {
- name: 'SSID',
- type: 'select',
- options: [],
- var: 'security[0].WifiSSID'
- },
- passwd: {
- name: 'Password',
- type: 'password',
- var: 'security[0].WifiKey'
- }
- }
- }
- }
-};
-class SetupPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- devices: []
- };
- _lib_loader__WEBPACK_IMPORTED_MODULE_3__["loader"].show();
-
- this.save = () => {
- _lib_loader__WEBPACK_IMPORTED_MODULE_3__["loader"].show();
- const data = new FormData();
- data.append('ssid', this.config.security[0].WifiSSID);
- data.append('pass', this.config.security[0].WifiKey);
- fetch('/setup', {
- method: 'POST',
- data
- }).then(() => {
- setTimeout(() => {
- _lib_loader__WEBPACK_IMPORTED_MODULE_3__["loader"].hide();
- window.location.href = '/';
- }, 5000);
- });
- };
- }
-
- render(props) {
- formConfig.groups.wifi.configs.ssid.options = this.state.devices.map(device => ({
- name: device.ssid,
- value: device.ssd
- }));
- const config = _lib_settings__WEBPACK_IMPORTED_MODULE_2__["settings"].get('config');
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])(_components_form__WEBPACK_IMPORTED_MODULE_1__["Form"], {
- config: formConfig,
- selected: config
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.save
- }, "CONTINUE"));
- }
-
- componentDidMount() {
- fetch('/wifiscanner').then(r => r.json()).then(r => {
- this.setState({
- devices: r
- });
- _lib_loader__WEBPACK_IMPORTED_MODULE_3__["loader"].hide();
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/tools.js":
-/*!****************************!*\
- !*** ./src/pages/tools.js ***!
- \****************************/
-/*! exports provided: ToolsPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToolsPage", function() { return ToolsPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-class ToolsPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.history = '';
-
- this.sendCommand = e => {
- fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => {
- this.cmdOutput.value = response;
- });
- };
- }
-
- fetch() {
- fetch('/logjson').then(response => response.json()).then(response => {
- response.Log.Entries.map(log => {
- this.history += `${new Date(log.timestamp).toLocaleTimeString()} ${log.text}
`;
- this.log.innerHTML = this.history;
-
- if (true) {
- this.log.scrollTop = this.log.scrollHeight;
- }
- });
- });
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- style: "width: 100%; height: 200px; overflow-y: scroll;",
- ref: ref => this.log = ref
- }, "loading logs ..."), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, "Command: ", Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- type: "text",
- ref: ref => this.cmd = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.sendCommand
- }, "send")), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("textarea", {
- style: "width: 100%; height: 200px",
- ref: ref => this.cmdOutput = ref
- }));
- }
-
- componentDidMount() {
- this.interval = setInterval(() => {
- this.fetch();
- }, 1000);
- }
-
- componentWillUnmount() {
- if (this.interval) clearInterval(this.interval);
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/tools.sysvars.js":
-/*!************************************!*\
- !*** ./src/pages/tools.sysvars.js ***!
- \************************************/
-/*! exports provided: SysVarsPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SysVarsPage", function() { return SysVarsPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-
-class SysVarsPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- device: props.params[0],
- vars: {}
- };
- }
-
- fetch() {
- fetch(`/sysinfo_json`).then(response => response.json()).then(vars => {
- this.setState({
- vars
- });
- });
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- class: "pure-form pure-form-aligned"
- }, Object.keys(this.state.vars).map(v => {
- const value = this.state.vars[v];
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("fieldset", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", null, v), Object.keys(value).map((v1, i) => {
- const value1 = value[v1];
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-control-group"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", {
- class: "pure-checkbox"
- }, v1), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- readOnly: true,
- type: "text",
- value: value1
- }));
- }));
- }));
- }
-
- componentDidMount() {
- this.fetch();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/pages/update.js":
-/*!*****************************!*\
- !*** ./src/pages/update.js ***!
- \*****************************/
-/*! exports provided: UpdatePage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UpdatePage", function() { return UpdatePage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_espeasy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/espeasy */ "./src/lib/espeasy.js");
-/* harmony import */ var _lib_loader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/loader */ "./src/lib/loader.js");
-
-
-
-class UpdatePage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.state = {
- progress: 0
- };
-
- this.saveForm = () => {
- _lib_loader__WEBPACK_IMPORTED_MODULE_2__["loader"].show();
- const data = new FormData();
- data.append('file', this.file.files[0]);
- data.append('user', 'hubot');
- Object(_lib_espeasy__WEBPACK_IMPORTED_MODULE_1__["fetchProgress"])('/update', {
- method: 'POST',
- body: data,
- onProgress: e => {
- const perc = 100 * e.loaded / e.total;
- this.setState({
- progress: perc
- });
- }
- }).then(() => {
- window.location.href = '#config/reboot';
- });
- };
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("form", {
- class: "pure-form pure-form-aligned"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "pure-control-group"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("label", {
- for: "file",
- class: "pure-checkbox"
- }, "Firmware:"), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("input", {
- id: "file",
- type: "file",
- ref: ref => this.file = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("button", {
- type: "button",
- onClick: this.saveForm
- }, "upload"), this.state.progress ? Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("span", null, " ", Math.round(this.state.progress), "%") : null));
- }
-
-}
-
-/***/ })
-
-/******/ });
+!function(e){var t={};function n(s){if(t[s])return t[s].exports;var a=t[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,n),a.l=!0,a.exports}n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(s,a,function(t){return e[t]}.bind(null,a));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=62)}([function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"a",function(){return A}),n.d(t,"c",function(){return L});var s=function(){},a={},o=[],i=[];function r(e,t){var n,r,l,c,p=i;for(c=arguments.length;c-- >2;)o.push(arguments[c]);for(t&&null!=t.children&&(o.length||o.push(t.children),delete t.children);o.length;)if((r=o.pop())&&void 0!==r.pop)for(c=r.length;c--;)o.push(r[c]);else"boolean"==typeof r&&(r=null),(l="function"!=typeof e)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(l=!1)),l&&n?p[p.length-1]+=r:p===i?p=[r]:p.push(r),n=l;var u=new s;return u.nodeName=e,u.children=p,u.attributes=null==t?void 0:t,u.key=null==t?void 0:t.key,void 0!==a.vnode&&a.vnode(u),u}function l(e,t){for(var n in t)e[n]=t[n];return e}function c(e,t){null!=e&&("function"==typeof e?e(t):e.current=t)}var p="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout;var u=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,m=[];function d(e){!e._dirty&&(e._dirty=!0)&&1==m.push(e)&&(a.debounceRendering||p)(f)}function f(){for(var e;e=m.pop();)e._dirty&&N(e)}function g(e,t){return e.normalizedNodeName===t||e.nodeName.toLowerCase()===t.toLowerCase()}function v(e){var t=l({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var s in n)void 0===t[s]&&(t[s]=n[s]);return t}function h(e){var t=e.parentNode;t&&t.removeChild(e)}function y(e,t,n,s,a){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)c(n,null),c(s,e);else if("class"!==t||a)if("style"===t){if(s&&"string"!=typeof s&&"string"!=typeof n||(e.style.cssText=s||""),s&&"object"==typeof s){if("string"!=typeof n)for(var o in n)o in s||(e.style[o]="");for(var o in s)e.style[o]="number"==typeof s[o]&&!1===u.test(o)?s[o]+"px":s[o]}}else if("dangerouslySetInnerHTML"===t)s&&(e.innerHTML=s.__html||"");else if("o"==t[0]&&"n"==t[1]){var i=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),s?n||e.addEventListener(t,b,i):e.removeEventListener(t,b,i),(e._listeners||(e._listeners={}))[t]=s}else if("list"!==t&&"type"!==t&&!a&&t in e){try{e[t]=null==s?"":s}catch(e){}null!=s&&!1!==s||"spellcheck"==t||e.removeAttribute(t)}else{var r=a&&t!==(t=t.replace(/^xlink:?/,""));null==s||!1===s?r?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof s&&(r?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),s):e.setAttribute(t,s))}else e.className=s||""}function b(e){return this._listeners[e.type](a.event&&a.event(e)||e)}var O=[],x=0,S=!1,_=!1;function T(){for(var e;e=O.shift();)a.afterMount&&a.afterMount(e),e.componentDidMount&&e.componentDidMount()}function w(e,t,n,s,a,o){x++||(S=null!=a&&void 0!==a.ownerSVGElement,_=null!=e&&!("__preactattr_"in e));var i=C(e,t,n,s,o);return a&&i.parentNode!==a&&a.appendChild(i),--x||(_=!1,o||T()),i}function C(e,t,n,s,a){var o=e,i=S;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||a)?e.nodeValue!=t&&(e.nodeValue=t):(o=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0))),o.__preactattr_=!0,o;var r,l,c=t.nodeName;if("function"==typeof c)return function(e,t,n,s){var a=e&&e._component,o=a,i=e,r=a&&e._componentConstructor===t.nodeName,l=r,c=v(t);for(;a&&!l&&(a=a._parentComponent);)l=a.constructor===t.nodeName;a&&l&&(!s||a._component)?(j(a,c,3,n,s),e=a.base):(o&&!r&&(E(o),e=i=null),a=$(t.nodeName,c,n),e&&!a.nextBase&&(a.nextBase=e,i=null),j(a,c,1,n,s),e=a.base,i&&e!==i&&(i._component=null,P(i,!1)));return e}(e,t,n,s);if(S="svg"===c||"foreignObject"!==c&&S,c=String(c),(!e||!g(e,c))&&(r=c,(l=S?document.createElementNS("http://www.w3.org/2000/svg",r):document.createElement(r)).normalizedNodeName=r,o=l,e)){for(;e.firstChild;)o.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0)}var p=o.firstChild,u=o.__preactattr_,m=t.children;if(null==u){u=o.__preactattr_={};for(var d=o.attributes,f=d.length;f--;)u[d[f].name]=d[f].value}return!_&&m&&1===m.length&&"string"==typeof m[0]&&null!=p&&void 0!==p.splitText&&null==p.nextSibling?p.nodeValue!=m[0]&&(p.nodeValue=m[0]):(m&&m.length||null!=p)&&function(e,t,n,s,a){var o,i,r,l,c,p=e.childNodes,u=[],m={},d=0,f=0,v=p.length,y=0,b=t?t.length:0;if(0!==v)for(var O=0;O{const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push(n);return t}},function(e,t,n){var s=n(9)(Object,"create");e.exports=s},function(e,t,n){var s=n(14);e.exports=function(e,t){for(var n=e.length;n--;)if(s(e[n][0],t))return n;return-1}},function(e,t,n){var s=n(50);e.exports=function(e,t){var n=e.__data__;return s(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var s=n(13),a=n(24),o="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||a(e)&&s(e)==o}},function(e,t,n){var s=n(8).Symbol;e.exports=s},function(e,t,n){var s=n(20),a="object"==typeof self&&self&&self.Object===Object&&self,o=s||a||Function("return this")();e.exports=o},function(e,t,n){var s=n(32),a=n(37);e.exports=function(e,t){var n=a(e,t);return s(n)?n:void 0}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var s=n(18);e.exports=function(e,t,n){var a=null==e?void 0:s(e,t);return void 0===a?n:a}},function(e,t,n){var s=n(5),a=n(19),o=n(25),i=n(54);e.exports=function(e,t){return s(e)?e:a(e,t)?[e]:o(i(e))}},function(e,t,n){var s=n(7),a=n(22),o=n(23),i="[object Null]",r="[object Undefined]",l=s?s.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?r:i:l&&l in Object(e)?a(e):o(e)}},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var s=n(6),a=1/0;e.exports=function(e){if("string"==typeof e||s(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}},function(e,t,n){var s=n(57);e.exports=function(e,t,n){return null==e?e:s(e,t,n)}},function(e,t,n){"use strict";n.d(t,"a",function(){return d});var s=n(1);const a="#000000",o=e=>{return e.filter(e=>0===e.inputs.length).map(e=>{const t=e=>({t:e.type,v:e.config.map(e=>e.value),o:e.outputs.map(e=>e.lines.map(e=>t(e.input.nodeObject))),c:[e.position.x,e.position.y]});return t(e)})},i=(e,t,n)=>{e.map(e=>{let s=t.renderedNodes.find(t=>t.position.x===e.c[0]&&t.position.y===e.c[1]);if(!s){const n=t.nodes.find(t=>e.t==t.type);(s=new u(t.canvas,n,{x:e.c[0],y:e.c[1]})).config.map((t,n)=>{t.value=e.v[n]}),s.render(),t.renderedNodes.push(s)}if(n){const e=n.getBoundingClientRect(),o=s.inputs[0].getBoundingClientRect(),i=new c(document.body.clientWidth,document.body.clientHeight,"none",a);t.canvas.appendChild(i.element);const r=e.x+e.width,l=e.y+e.height/2,p=o.x,u=o.y+o.height/2;i.setPath(r,l,p,u);const m={output:n,input:s.inputs[0],svg:i,start:{x:r,y:l},end:{x:p,y:u}};s.inputs[0].lines.push(m),n.lines.push(m)}e.o.map((e,n)=>{i(e,t,s.outputs[n])})})},r=e=>{const t=e.filter(e=>"TRIGGERS"===e.group);let n="";return t.map(e=>{const t=(e,n)=>{const s=e.toDsl?e.toDsl():[];let a="",o=e.indent?" ":"";return e.outputs.map((i,r)=>{let l=s[r]||e.type,c="";i.lines&&(i.lines.map(s=>{c+=t(s.input.nodeObject,e.indent?n+1:n)}),c=c.split("\n").map(e=>o+e).filter(e=>""!==e.trim()).join("\n")+"\n"),l.includes("%%output%%")?l=l.replace("%%output%%",c):l+=c,a+=l}),a},s=t(e,0);n+=s+"\n\n"}),n},l={enableNativeDrag:(e,t)=>{e.draggable=!0,e.ondragstart=(e=>{Object(s.b)(t).map(n=>{e.dataTransfer.setData(n,t[n])})})},enableNativeDrop:(e,t)=>{e.ondragover=(e=>{e.preventDefault()}),e.ondrop=t}};class c{constructor(e,t,n,s){this.element=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.element.setAttribute("style","z-index: -1;position:absolute;top:0px;left:0px"),this.element.setAttribute("width",e),this.element.setAttribute("height",t),this.element.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),this.line=document.createElementNS("http://www.w3.org/2000/svg","path"),this.line.setAttributeNS(null,"fill",n),this.line.setAttributeNS(null,"stroke",s),this.element.appendChild(this.line)}setPath(e,t,n,s,a=.5){const o=(n-e)*a,i=`M ${e} ${t} C ${e+o} ${t} ${n-o} ${s} ${n} ${s}`;this.line.setAttributeNS(null,"d",i)}}class p{constructor(e){this.type=e.type,this.group=e.group,this.config=e.config.map(e=>Object.assign({},e)),this.inputs=e.inputs.map(e=>{}),this.outputs=e.outputs.map(e=>{}),this.toDsl=e.toDsl,this.toString=e.toString,this.toHtml=e.toHtml,this.indent=e.indent}}class u extends p{constructor(e,t,n){super(t),this.canvas=e,this.position=n,this.lines=[],this.linesEnd=[],this.toDsl=t.toDsl,this.toString=t.toString,this.toHtml=t.toHtml,this.indent=t.indent}updateInputsOutputs(e,t){e.map(e=>{const t=e.getBoundingClientRect();e.lines.map(e=>{e.end.x=t.x,e.end.y=t.y+t.height/2,e.svg.setPath(e.start.x,e.start.y,e.end.x,e.end.y)})}),t.map(e=>{const t=e.getBoundingClientRect();e.lines.map(e=>{e.start.x=t.x+t.width,e.start.y=t.y+t.height/2,e.svg.setPath(e.start.x,e.start.y,e.end.x,e.end.y)})})}handleMoveEvent(e){if(!this.canvas.canEdit)return;const t=e.clientX-this.element.getBoundingClientRect().left,n=e.clientY-this.element.getBoundingClientRect().top,s=e=>{const s=e.y-n,a=e.x-t;this.position.y=s-s%this.canvas.gridSize,this.position.x=a-a%this.canvas.gridSize,this.element.style.top=`${this.position.y}px`,this.element.style.left=`${this.position.x}px`,this.updateInputsOutputs(this.inputs,this.outputs)},a=e=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",a)};document.addEventListener("mousemove",s),document.addEventListener("mouseup",a)}handleDblClickEvent(e){this.canvas.canEdit&&this.config.length&&m(this.type,this.config,()=>{this.toHtml?this.text.innerHTML=this.toHtml():this.text.textContent=this.toString()})}handleRightClickEvent(e){if(this.canvas.canEdit)return this.inputs.map(e=>{e.lines.map(e=>{e.output.lines=[],e.svg.element.parentNode.removeChild(e.svg.element)}),e.lines=[]}),this.outputs.map(e=>{e.lines.map(e=>{const t=e.input.lines.indexOf(e);e.input.lines.splice(t,1),e.svg.element.parentNode.removeChild(e.svg.element)}),e.lines=[]}),this.element.parentNode.removeChild(this.element),this.destroy&&this.destroy(),e.preventDefault(),e.stopPropagation(),!1}render(){this.element=document.createElement("div"),this.element.nodeObject=this,this.element.className=`node node-chart group-${this.group}`,this.text=document.createElement("span"),this.toHtml?this.text.innerHTML=this.toHtml():this.text.textContent=this.toString(),this.element.appendChild(this.text),this.element.style.top=`${this.position.y}px`,this.element.style.left=`${this.position.x}px`;const e=document.createElement("div");e.className="node-inputs",this.element.appendChild(e),this.inputs.map((t,n)=>{const s=this.inputs[n]=document.createElement("div");s.className="node-input",s.nodeObject=this,s.lines=[],s.onmousedown=(e=>{e.preventDefault(),e.stopPropagation()}),e.appendChild(s)});const t=document.createElement("div");t.className="node-outputs",this.element.appendChild(t),this.outputs.map((e,n)=>{const s=this.outputs[n]=document.createElement("div");s.className="node-output",s.nodeObject=this,s.lines=[],s.oncontextmenu=(e=>(s.lines.map(e=>{e.svg.element.parentNode.removeChild(e.svg.element)}),s.lines=[],e.stopPropagation(),e.preventDefault(),!1)),s.onmousedown=(e=>{if(e.stopPropagation(),s.lines.length)return;const t=s.getBoundingClientRect(),n=t.x+t.width,o=t.y+t.height/2,i=new c(document.body.clientWidth,document.body.clientHeight,"none",a);this.canvas.appendChild(i.element);const r=e=>{i.setPath(n,o,e.pageX,e.pageY)},l=e=>{const t=document.elementFromPoint(e.clientX,e.clientY),a=t?t.closest(".node-input"):null;if(a){const e=a.getBoundingClientRect(),t=e.x,r=e.y+e.height/2;i.setPath(n,o,t,r);const l={output:s,input:a,svg:i,start:{x:n,y:o},end:{x:t,y:r}};s.lines.push(l),a.lines.push(l)}else i.element.remove();document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",r),document.addEventListener("mouseup",l)}),t.appendChild(s)}),this.element.ondblclick=this.handleDblClickEvent.bind(this),this.element.onmousedown=this.handleMoveEvent.bind(this),this.element.oncontextmenu=this.handleRightClickEvent.bind(this),this.canvas.appendChild(this.element)}}const m=(e,t,n)=>{const s=document.createElement("template");s.innerHTML=`\n \n `,document.body.appendChild(s.content.cloneNode(!0));const a=document.body.querySelectorAll(".configbox")[0],o=document.body.querySelectorAll(".configbox-body")[0],i=document.getElementById("ob");document.getElementById("cb").onclick=(()=>{a.remove()}),i.onclick=(()=>{t.map(e=>{e.value=document.forms.configform.elements[e.name].value}),a.remove(),n()}),t.map(e=>{const t=(e=>{const t=document.createElement("template"),n=t=>`${t} `;switch(e.type){case"text":t.innerHTML=`${e.name}
`;break;case"number":t.innerHTML=`${e.name}
`;break;case"select":t.innerHTML=`${e.name} ${e.values.map(e=>n(e))}
`;break;case"textselect":t.innerHTML=``}return t.content.cloneNode(!0)})(e);o.appendChild(t)})};class d{constructor(e,t,n){this.nodes=[],this.renderedNodes=[],this.onSave=n.onSave,this.canEdit=!n.readOnly,this.debug=null==n.debug||n.debug,this.gridSize=n.gridSize||1,this.element=e,t.map(e=>{const t=new p(e);this.nodes.push(t)}),this.render(),this.canEdit&&l.enableNativeDrop(this.canvas,e=>{const t=this.nodes.find(t=>t.type==e.dataTransfer.getData("type"));let n=new u(this.canvas,t,{x:e.x,y:e.y});n.render(),n.destroy=(()=>{this.renderedNodes.splice(this.renderedNodes.indexOf(n),1),n=null}),this.renderedNodes.push(n)})}loadConfig(e){i(e,this)}saveConfig(){return o(this.renderedNodes)}renderContainers(){if(this.canEdit&&(this.sidebar=document.createElement("div"),this.sidebar.className="sidebar",this.element.appendChild(this.sidebar)),this.canvas=document.createElement("div"),this.canvas.className="canvas",this.canvas.canEdit=this.canEdit,this.canvas.gridSize=this.gridSize,this.element.appendChild(this.canvas),this.canEdit&&this.debug){this.debug=document.createElement("div"),this.debug.className="debug";const e=document.createElement("div");this.debug.appendChild(e);const t=document.createElement("button");t.textContent="SAVE",t.onclick=(()=>{const e=JSON.stringify(o(this.renderedNodes)),t=r(this.renderedNodes);this.onSave(e,t)});const n=document.createElement("button");n.textContent="LOAD",n.onclick=(()=>{const e=prompt("enter config");i(JSON.parse(e),this)});const s=document.createElement("button");s.textContent="EXPORT",s.onclick=(()=>{const t=r(this.renderedNodes);e.textContent=t}),this.debug.appendChild(s),this.debug.appendChild(t),this.debug.appendChild(n),this.debug.appendChild(e),this.element.appendChild(this.debug)}}renderConfigNodes(){const e={};this.nodes.map(t=>{if(!e[t.group]){const n=document.createElement("div");n.className="group",n.textContent=t.group,this.sidebar.appendChild(n),e[t.group]=n}const n=document.createElement("div");n.className=`node group-${t.group}`,n.textContent=t.type,e[t.group].appendChild(n),l.enableNativeDrag(n,{type:t.type})})}render(){this.renderContainers(),this.canEdit&&this.renderConfigNodes()}}},function(e,t,n){var s=n(12),a=n(15);e.exports=function(e,t){for(var n=0,o=(t=s(t,e)).length;null!=e&&n-1}},function(e,t,n){var s=n(3);e.exports=function(e,t){var n=this.__data__,a=s(n,e);return a<0?(++this.size,n.push([e,t])):n[a][1]=t,this}},function(e,t,n){var s=n(9)(n(8),"Map");e.exports=s},function(e,t,n){var s=n(4);e.exports=function(e){var t=s(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var s=n(4);e.exports=function(e){return s(this,e).get(e)}},function(e,t,n){var s=n(4);e.exports=function(e){return s(this,e).has(e)}},function(e,t,n){var s=n(4);e.exports=function(e,t){var n=s(this,e),a=n.size;return n.set(e,t),this.size+=n.size==a?0:1,this}},function(e,t,n){var s=n(55);e.exports=function(e){return null==e?"":s(e)}},function(e,t,n){var s=n(7),a=n(56),o=n(5),i=n(6),r=1/0,l=s?s.prototype:void 0,c=l?l.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return a(t,e)+"";if(i(t))return c?c.call(t):"";var n=t+"";return"0"==n&&1/t==-r?"-0":n}},function(e,t){e.exports=function(e,t){for(var n=-1,s=null==e?0:e.length,a=Array(s);++n-1&&e%1==0&&e.05?t.style.opacity=t.style.opacity-.05:t.style.opacity&&t.style.opacity<=.1?t.parentNode&&(t.parentNode.removeChild(t),n&&n()):t.style.opacity=.9,setTimeout(()=>e.apply(this,[t,n]),1e3/30)},timeout:3e3,icons:{},appendTarget:document.body,node:x(),allowHtml:!1,style:{[`.${c}`]:{position:"fixed","z-index":99999,right:"12px",top:"12px"},[`.${p}`]:{cursor:"pointer",padding:"12px 18px",margin:"0 0 6px 0","background-color":"#000",opacity:.8,color:"#fff","border-radius":"3px","box-shadow":"#3c3b3b 0 0 12px",width:"300px",[`&.${f}`]:{"background-color":"#D5122B"},[`&.${g}`]:{"background-color":"#F5AA1E"},[`&.${v}`]:{"background-color":"#7AC13E"},[`&.${h}`]:{"background-color":"#4196E1"},"&:hover":{opacity:1,"box-shadow":"#000 0 0 12px"}},[`.${u}`]:{"font-weight":"500"},[`.${d}`]:{display:"inline-block","vertical-align":"middle",width:"240px",padding:"0 12px"}}};function x(e="div"){return document.createElement(e)}function S(e,t,n,s){const a=x();a.className=n,s.allowHtml?a.innerHTML=t:a.appendChild(document.createTextNode(t)),e.appendChild(a)}var _={config:O,isInitialised:!1,showMessage(e,t,n,s,a,c){const m={};Object.assign(m,this.config),Object.assign(m,c);const b=x();return b.className=`${p} ${function(e){return e===r?v:e===i?g:e===o?f:e===l?h:y}(n)}`,b.onclick=function(){m.animation(b,null)},t&&S(b,t,u,m),m.icons[n]&&function(e,t,n){const s=x(n.icons[t].nodeType),a=n.icons[t].attrs;for(const e in a)a.hasOwnProperty(e)&&s.setAttribute(e,a[e]);e.appendChild(s)}(b,n,m),e&&S(b,e,d,m),m.node.insertBefore(b,m.node.firstChild),setTimeout(()=>m.animation(b,a),s||m.timeout),a&&a(),this},init(e){const t={};return Object.assign(t,O),Object.assign(t,e),this.config=t,function(e){let t=document.head||document.getElementsByTagName("head")[0],n=x("style");n.id=`${a}-styles`,n.type="text/css",n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e)),t.appendChild(n)}(b(t.style)),t.node.id=c,t.node.className=c,t.appendTarget.appendChild(t.node),Object.keys(t.types).forEach(e=>{this[t.types[e]]=function(n,s,a,o,i){return this.showMessage(n,s,t.types[e],a,o,i),this}.bind(this)}),this.isInitialised=!0,this},setIcon(e,t="i",n=[]){n.class=n.class?n.class+" "+m:m,this.config.icons[e]={nodeType:t,attrs:n}}};class T extends s.a{renderMenuItem(e){return e.action?Object(s.b)("li",{class:"pure-menu-item"},Object(s.b)("a",{href:`#${e.href}`,onClick:e.action,class:"pure-menu-link"},e.title)):e.href===this.props.selected.href?[Object(s.b)("li",{class:"pure-menu-item pure-menu-item-selected"},Object(s.b)("a",{href:`#${e.href}`,class:"pure-menu-link"},e.title)),...e.children.map(e=>e.action?Object(s.b)("li",{class:"pure-menu-item submenu"},Object(s.b)("a",{href:`#${e.href}`,onClick:e.action,class:"pure-menu-link"},e.title)):Object(s.b)("li",{class:"pure-menu-item submenu"},Object(s.b)("a",{href:`#${e.href}`,class:"pure-menu-link"},e.title)))]:Object(s.b)("li",{class:"pure-menu-item"},Object(s.b)("a",{href:`#${e.href}`,class:"pure-menu-link"},e.title))}render(e){if(!1!==e.open)return Object(s.b)("div",{id:"menu"},Object(s.b)("div",{class:"pure-menu"},Object(s.b)("a",{class:"pure-menu-heading",href:"/"},Object(s.b)("b",null,"ESP"),"Easy"),Object(s.b)("ul",{class:"pure-menu-list"},e.menus.map(e=>this.renderMenuItem(e)))))}}class w extends s.a{render(e){const t=e.page.component;return Object(s.b)("div",{id:"main"},Object(s.b)("div",{class:"header"},"> ",null==e.page.pagetitle?e.page.title:e.page.pagetitle,e.changed?Object(s.b)("a",{style:"float: right",href:"#tools/diff"},"CHANGED! Click here to SAVE"):null),Object(s.b)("div",{class:`content ${e.page.class}`},Object(s.b)(t,{params:e.params})))}}var C=n(1);class P{constructor(e){this.view=new DataView(e),this.offset=0,this.bitbyte=0,this.bitbytepos=7}pad(e){for(;this.offset%e;)this.offset++}bit(e=!1,t=!1,n){if(7===this.bitbytepos&&(t?this.byte(e,t,this.bitbyte):(this.bitbyte=this.byte(),this.bitbytepos=0)),!t)return this.bitbyte>>this.bitbytepos++&1;this.bitbyte=n?this.bitbyte|1<{const s=new P(e);n&&(s.offset=n);const a={};return t.map(e=>{const t=e.length?e.length:e.signed;Object(C.c)(a,e.prop,s[e.type](t,e.signed))}),a},k=(e,t,n,s)=>{const a=new P(e);s&&(a.offset=s),n.map(e=>{const n=Object(C.a)(t,e.prop);e.length?a[e.type](e.length,e.signed,!0,n):a[e.type](e.signed,!0,n)})},$=(e,t,n="")=>Object(C.b)(e).map(s=>{const a=e[s],o=t[s];return a instanceof Object?$(a,o,n?`${n}.${s}`:s):a!==o?[{path:`${n}.${s}`,val1:a,val2:o}]:[]}).flat();const D=window.settings1=new class{init(e){this.settings=e,this.apply()}get(e){return Object(C.a)(this.settings,e)}set(e,t){"object"==typeof Object(C.a)(this.settings,e)?(console.warn("settings an object!"),Object(C.c)(this.settings,e,t)):Object(C.c)(this.settings,e,t),this.diff().length&&(this.changed=!0)}diff(){return $(this.stored,this.settings)}apply(){this.stored=JSON.parse(JSON.stringify(this.settings)),this.changed=!1}},j=16,N=4,E=[{prop:"status.PID",type:"int32"},{prop:"status.version",type:"int32"},{prop:"status.build",type:"int16"},{prop:"config.IP.ip",type:"bytes",length:4},{prop:"config.IP.gw",type:"bytes",length:4},{prop:"config.IP.subnet",type:"bytes",length:4},{prop:"config.IP.dns",type:"bytes",length:4},{prop:"config.experimental.ip_octet",type:"byte"},{prop:"config.general.unitnr",type:"byte"},{prop:"config.general.unitname",type:"string",length:26},{prop:"config.ntp.host",type:"string",length:64},{prop:"config.sleep.sleeptime",type:"int32"},{prop:"hardware.i2c.sda",type:"byte"},{prop:"hardware.i2c.scl",type:"byte"},{prop:"hardware.led.gpio",type:"byte"},{prop:"Pin_sd_cs",type:"byte"},{prop:"hardware.gpio",type:"bytes",length:17},{prop:"config.log.syslog_ip",type:"bytes",length:4},{prop:"config.espnetwork.port",type:"int32"},{prop:"config.log.syslog_level",type:"byte"},{prop:"config.log.serial_level",type:"byte"},{prop:"config.log.web_level",type:"byte"},{prop:"config.log.sd_level",type:"byte"},{prop:"config.serial.baudrate",type:"int32"},{prop:"config.mqtt.interval",type:"int32"},{prop:"config.sleep.awaketime",type:"byte"},{prop:"CustomCSS",type:"byte"},{prop:"config.dst.enabled",type:"byte"},{prop:"config.experimental.WDI2CAddress",type:"byte"},{prop:"config.rules.enabled",type:"byte"},{prop:"config.serial.enabled",type:"byte"},{prop:"config.ssdp.enabled",type:"byte"},{prop:"config.ntp.enabled",type:"byte"},{prop:"config.experimental.WireClockStretchLimit",type:"int32"},{prop:"GlobalSync",type:"byte"},{prop:"config.experimental.ConnectionFailuresThreshold",type:"int32"},{prop:"TimeZone",type:"int16",signed:!0},{prop:"config.mqtt.retain_flag",type:"byte"},{prop:"hardware.spi.enabled",type:"byte"},[...Array(3)].map((e,t)=>({prop:`controllers[${t}].protocol`,type:"byte"})),[...Array(3)].map((e,t)=>({prop:`notifications[${t}].type`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].device`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].OLD_TaskDeviceID`,type:"int32"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].gpio1`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].gpio2`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].gpio3`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].gpio4`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].pin1pullup`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].configs`,type:"ints",length:8})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].pin1inversed`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].configs_float`,type:"floats",length:4})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].configs_long`,type:"longs",length:4})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].OLD_senddata`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].global_sync`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].data_feed`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].interval`,type:"int32"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].enabled`,type:"byte"})),[...Array(3)].map((e,t)=>({prop:`controllers[${t}].enabled`,type:"byte"})),[...Array(3)].map((e,t)=>({prop:`notifications[${t}].enabled`,type:"byte"})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].TaskDeviceID`,type:"longs",length:3})),[...Array(12)].map((e,t)=>({prop:`tasks[${t}].TaskDeviceSendData`,type:"bytes",length:3})),{prop:"hardware.led.inverse",type:"byte"},{prop:"config.sleep.sleeponfailiure",type:"byte"},{prop:"UseValueLogger",type:"byte"},{prop:"ArduinoOTAEnable",type:"byte"},{prop:"config.dst.DST_Start",type:"int16"},{prop:"config.dst.DST_End",type:"int16"},{prop:"UseRTOSMultitasking",type:"byte"},{prop:"hardware.reset.pin",type:"byte"},{prop:"config.log.syslog_facility",type:"byte"},{prop:"StructSize",type:"int32"},{prop:"config.mqtt.useunitname",type:"byte"},{prop:"config.location.lat",type:"float"},{prop:"config.location.long",type:"float"},{prop:"config._emptyBit",type:"bit"},{prop:"config.general.appendunit",type:"bit"},{prop:"config.mqtt.changeclientid",type:"bit"},{prop:"config.rules.oldengine",type:"bit"},{prop:"config._bit4",type:"bit"},{prop:"config._bit5",type:"bit"},{prop:"config._bit6",type:"bit"},{prop:"config._bit7",type:"bit"},{prop:"config._bits1",type:"byte"},{prop:"config._bits2",type:"byte"},{prop:"config._bits3",type:"byte"},{prop:"ResetFactoryDefaultPreference",type:"int32"}].flat(),A=[{prop:"index",type:"byte"},{prop:"name",type:"string",length:41},[...Array(N)].map((e,t)=>({prop:`values[${t}].formula`,type:"string",length:41})),[...Array(N)].map((e,t)=>({prop:`values[${t}].name`,type:"string",length:41})),{prop:"value_names",type:"string",length:41},{prop:"plugin_config_long",type:"longs",length:j},{prop:"decimals",type:"bytes",length:N},{prop:"plugin_config",type:"ints",length:j}].flat(),L=[{prop:"dns",type:"byte"},{prop:"IP",type:"bytes",length:4},{prop:"port",type:"int32"},{prop:"hostname",type:"string",length:65},{prop:"publish",type:"string",length:129},{prop:"subscribe",type:"string",length:129},{prop:"MQTT_lwt_topic",type:"string",length:129},{prop:"lwt_message_connect",type:"string",length:129},{prop:"lwt_message_disconnect",type:"string",length:129},{prop:"minimal_time_between",type:"int32"},{prop:"max_queue_depth",type:"int32"},{prop:"max_retry",type:"int32"},{prop:"delete_oldest",type:"byte"},{prop:"client_timeout",type:"int32"},{prop:"must_check_reply",type:"byte"}],R=[{prop:"server",type:"string",length:65},{prop:"port",type:"int16"},{prop:"domain",type:"string",length:65},{prop:"sender",type:"string",length:65},{prop:"receiver",type:"string",length:65},{prop:"subject",type:"string",length:129},{prop:"body",type:"string",length:513},{prop:"pin1",type:"byte"},{prop:"pin2",type:"byte"},{prop:"user",type:"string",length:49},{prop:"pass",type:"string",length:33}],G=[{prop:"WifiSSID",type:"string",length:32},{prop:"WifiKey",type:"string",length:64},{prop:"WifiSSID2",type:"string",length:32},{prop:"WifiKey2",type:"string",length:64},{prop:"WifiAPKey",type:"string",length:64},[...Array(3)].map((e,t)=>({prop:`controllers[${t}].user`,type:"string",length:26})),[...Array(3)].map((e,t)=>({prop:`controllers[${t}].password`,type:"string",length:64})),{prop:"password",type:"string",length:26},{prop:"AllowedIPrangeLow",type:"bytes",length:4},{prop:"AllowedIPrangeHigh",type:"bytes",length:4},{prop:"IPblockLevel",type:"byte"},{prop:"ProgmemMd5",type:"bytes",length:16},{prop:"md5",type:"bytes",length:16}].flat();let M=0;const H=(e=!0)=>{if(0===M){const t=new ArrayBuffer(65536);if(k(t,D.settings,E),[...Array(12)].map((e,n)=>({settings:k(t,D.settings.tasks[n].settings,A,4096+2048*n),extra:k(t,D.settings.tasks[n].extra,A,5120+2048*n)})),[...Array(3)].map((e,n)=>({settings:k(t,D.settings.controllers[n].settings,L,27648+2048*n),extra:k(t,D.settings.controllers[n].extra,L,28672+2048*n)})),!e)return t;U(t,"config.dat")}else if(1===M){const e=new ArrayBuffer(4096);[...Array(3)].map((t,n)=>k(e,D.settings.notifications[n],R,1024*n)),U(e,"notification.dat")}else if(2===M){const e=new ArrayBuffer(4096);[...Array(3)].map((t,n)=>k(e,D.settings.security[n],G,1024*n)),U(e,"security.dat")}M=(M+1)%3},U=function(){const e=document.createElement("a");return document.body.appendChild(e),e.style="display: none",function(t,n){const s=new Blob([new Uint8Array(t)]),a=window.URL.createObjectURL(s);e.href=a,e.download=n,e.click(),window.URL.revokeObjectURL(a)}}();const F=new class{constructor(){this.loader=document.querySelector(".loading")}show(){this.loader.classList.add("show")}hide(){this.loader.classList.add("hide"),setTimeout(()=>{this.loader.classList.remove("hide"),this.loader.classList.remove("show")},1e3)}},B=async(e="")=>await fetch(`${e}/json`).then(e=>e.json()),W=async e=>B(e).then(e=>e.Sensors),V=async()=>{const e=await W(),t=[];return{nodes:e.map(e=>{const n=e.TaskValues||[];n.map(n=>t.push(`${e.TaskName}#${n.Name}`));const s=[{group:"TRIGGERS",type:e.TaskName||`${e.TaskNumber}-${e.Type}`,inputs:[],outputs:[1],config:[{name:"variable",type:"select",values:n.map(e=>e.Name),value:n.length?n[0].Name:""},{name:"euqality",type:"select",values:["","=","<",">","<=",">=","!="],value:""},{name:"value",type:"number"}],indent:!0,toString:function(){const e=""===this.config[1].value?"changes":`${this.config[1].value} ${this.config[2].value}`;return`when ${this.type}.${this.config[0].value} ${e}`},toDsl:function(){const e=""===this.config[1].value?"":`${this.config[1].value}${this.config[2].value}`;return[`on ${this.type}#${this.config[0].value}${e} do\n%%output%%\nEndon\n`]}}];let a,o;switch(e.Type){case"Regulator - Level Control":s.push({group:"ACTIONS",type:`${e.TaskName} - setlevel`,inputs:[1],outputs:[1],config:[{name:"value",type:"number"}],toString:function(){return`${e.TaskName}.level = ${this.config[0].value}`},toDsl:function(){return[`config,task,${e.TaskName},setlevel,${this.config[0].value}`]}});break;case"Extra IO - PCA9685":case"Switch input - PCF8574":case"Switch input - MCP23017":o=(a={"Extra IO - PCA9685":"PCF","Switch input - PCF8574":"PCF","Switch input - MCP23017":"MCP"})[e.Type],s.push({group:"ACTIONS",type:`${e.TaskName} - GPIO`,inputs:[1],outputs:[1],config:[{name:"pin",type:"select",values:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]},{name:"value",type:"select",values:[0,1]}],toString:function(){return`${e.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`},toDsl:function(){return[`${o}GPIO,${this.config[0].value},${this.config[1].value}`]}}),s.push({group:"ACTIONS",type:`${e.TaskName} - Pulse`,inputs:[1],outputs:[1],config:[{name:"pin",type:"select",values:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]},{name:"value",type:"select",values:[0,1]},{name:"unit",type:"select",values:["ms","s"]},{name:"duration",type:"number"}],toString:function(){return`${e.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`},toDsl:function(){return"s"===this.config[2].value?[`${o}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]:[`${o}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]}});break;case"Extra IO - ProMini Extender":s.push({group:"ACTIONS",type:`${e.TaskName} - GPIO`,inputs:[1],outputs:[1],config:[{name:"pin",type:"select",values:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]},{name:"value",type:"select",values:[0,1]}],toString:function(){return`${e.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`},toDsl:function(){return[`EXTGPIO,${this.config[0].value},${this.config[1].value}`]}});break;case"Display - OLED SSD1306":case"Display - LCD2004":o=(a={"Display - OLED SSD1306":"OLED","Display - LCD2004":"LCD"})[e.Type],s.push({group:"ACTIONS",type:`${e.TaskName} - Write`,inputs:[1],outputs:[1],config:[{name:"row",type:"select",values:[1,2,3,4]},{name:"column",type:"select",values:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]},{name:"text",type:"text"}],toString:function(){return`${e.TaskName}.text = ${this.config[2].value}`},toDsl:function(){return[`${o},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]}});break;case"Generic - Dummy Device":s.push({group:"ACTIONS",type:`${e.TaskName} - Write`,inputs:[1],outputs:[1],config:[{name:"variable",type:"select",values:n.map(e=>e.Name)},{name:"value",type:"text"}],toString:function(){return`${e.TaskName}.${this.config[0].value} = ${this.config[1].value}`},toDsl:function(){return[`TaskValueSet,${e.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]}})}return s}).flat(),vars:t}},z=(e,t={})=>new Promise((n,s)=>{var a=new XMLHttpRequest;for(var o in a.open(t.method||"get",e),t.headers||{})a.setRequestHeader(o,t.headers[o]);a.onload=(e=>n(e.target.responseText)),a.onerror=s,a.upload&&t.onProgress&&(a.upload.onprogress=t.onProgress),a.send(t.body)}),q=async(e,t,n)=>{F.show();const s=t?new File([new Blob([t])],e):e,a=new FormData;return a.append("edit",1),a.append("file",s),await z("/upload_json",{method:"post",body:a},n).then(()=>{F.hide(),_.success("Successfully saved to flash!","",5e3)},e=>{F.hide(),_.error(e.message,"",5e3)})},X=async e=>await fetch("/filelist?delete="+e).then(()=>{_.success("Successfully saved to flash!","",5e3)},e=>{_.error(e.message,"",5e3)}),K=async e=>{q("r1.txt",e)},Y=async()=>await fetch("/r1.txt").then(e=>e.json()),Q=async e=>{const t=new FormData;return t.append("set",1),t.append("rules",e),await fetch("/rules",{method:"post",body:t})};var J={getJsonStat:B,loadDevices:W,getConfigNodes:V,getDashboardConfigNodes:async e=>{const t=await W(e),n=[];return{nodes:t.map(e=>(e.TaskValues.map(t=>n.push(`${e.TaskName}#${t.Name}`)),[])).flat(),vars:n}},getVariables:async()=>{const e={};return await Promise.all([""].map(async t=>{const n=await B(t);n.Sensors.map(t=>{t.TaskValues.map(s=>{e[`${n.System.Name}@${t.TaskName}#${s.Name}`]=s.Value})})})),e},storeFile:q,deleteFile:X,storeDashboardConfig:async e=>{q("d1.txt",e)},loadDashboardConfig:async e=>await fetch("/d1.txt").then(e=>e.json()),storeRuleConfig:K,loadRuleConfig:Y,storeRule:Q};class Z extends s.a{constructor(e){super(e),this.onChange=((e,t,n={})=>s=>{let a=this.form.elements[e].value;"checkbox"===n.type?a=this.form.elements[e].checked?1:0:"number"===n.type||"ip"===n.type?a=parseFloat(a):"select"===n.type&&(a=isNaN(a)?a:parseInt(a)),t.startsWith("ROOT")?D.set(t.replace("ROOT.",""),a):Object(C.c)(this.props.selected,t,a),n.onChange&&n.onChange(s)})}renderConfig(e,t,n,a){switch(t.type){case"string":return Object(s.b)("input",{id:e,type:"text",value:n,onChange:this.onChange(e,a,t)});case"number":return Object(s.b)("input",{id:e,type:"number",value:n,min:t.min,max:t.max,onChange:this.onChange(e,a,t)});case"ip":return[Object(s.b)("input",{id:`${e}.0`,type:"number",min:"0",max:"255",onChange:this.onChange(`${e}.0`,`${a}.0`,t),style:"width: 80px",value:n?n[0]:null}),Object(s.b)("input",{id:`${e}.1`,type:"number",min:"0",max:"255",onChange:this.onChange(`${e}.1`,`${a}.1`,t),style:"width: 80px",value:n?n[1]:null}),Object(s.b)("input",{id:`${e}.2`,type:"number",min:"0",max:"255",onChange:this.onChange(`${e}.2`,`${a}.2`,t),style:"width: 80px",value:n?n[2]:null}),Object(s.b)("input",{id:`${e}.3`,type:"number",min:"0",max:"255",onChange:this.onChange(`${e}.3`,`${a}.3`,t),style:"width: 80px",value:n?n[3]:null})];case"password":return Object(s.b)("input",{id:e,type:"password",onChange:this.onChange(e,a,t)});case"checkbox":return Object(s.b)("input",{id:e,type:"checkbox",defaultChecked:n,onChange:this.onChange(e,a,t)});case"select":const o="function"==typeof t.options?t.options():t.options;return Object(s.b)("select",{id:e,type:"password",onChange:this.onChange(e,a,t)},o.map(e=>{const t=e instanceof Object?e.name:e,a=e instanceof Object?e.value:e;return a===n?Object(s.b)("option",{value:a,selected:!0},t):Object(s.b)("option",{value:a},t)}));case"file":return Object(s.b)("input",{id:e,type:"file"});case"button":const i=()=>{t.click&&t.click(this.props.selected)};return Object(s.b)("button",{type:"button",onClick:i},"GET IT")}}renderConfigGroup(e,t,n){const a=Array.isArray(t)?t:[t];return Object(s.b)("div",{class:"pure-control-group"},a.map((t,o)=>{const i=a.length>1?`${e}.${o}`:e,r=t.var?t.var:i,l=r.startsWith("ROOT")?D.get(r.replace("ROOT.","")):Object(C.a)(n,r,null);if(t.if&&!Object(C.a)(D.settings,t.if,!1))return null;if("custom"===t.type){const e=t.component;return Object(s.b)(e,{conf:t,values:n})}return[Object(s.b)("label",{for:i},t.name),this.renderConfig(i,t,l,r)]}))}renderGroup(e,t,n){if(!t.configs||!Object.keys(t.configs).length)return null;const a=Object(C.b)(t.configs);return Object(s.b)("fieldset",{name:e},Object(s.b)("label",null,t.name),a.map(s=>{const a=t.configs[s];return this.renderConfigGroup(`${e}.${s}`,a,n)}))}render(e){const t=Object(C.b)(e.config.groups);return Object(s.b)("form",{class:"pure-form pure-form-aligned",ref:e=>this.form=e},t.map(t=>this.renderGroup(t,e.config.groups[t],e.selected)))}}class ee extends s.a{constructor(e){super(e),this.state={nodes:[]},this.refresh=(()=>{fetch("/node_list_json").then(e=>e.json()).then(e=>{this.setState({nodes:e})})})}render(e){return Object(s.b)("ul",null,this.state.nodes.map(e=>Object(s.b)("li",null,"Unit ",e.first,": ",e.name," [",e.ip,"]")),Object(s.b)("button",{type:"button",onClick:this.refresh},"REFRESH"))}componentDidMount(){this.refresh()}}const te=[{name:"- Standalone -",value:0},{name:"Domoticz HTTP",value:1},{name:"Domoticz MQTT",value:2},{name:"Nodo Telnet",value:3},{name:"ThingSpeak",value:4},{name:"OpenHAB MQTT",value:5},{name:"PiDome MQTT",value:6},{name:"Emoncms",value:7},{name:"Generic HTTP",value:8},{name:"FHEM HTTP",value:9},{name:"Generic UDP",value:10},{name:"ESPEasy P2P Networking",value:13},{name:"Email",value:25}],ne={dns:{name:"Locate Controller",type:"select",options:[{value:0,name:"Use IP Address"},{value:1,name:"Use Hostname"}]},IP:{name:"IP",type:"ip"},hostname:{name:"Hostname",type:"string"},port:{name:"Port",type:"number"},minimal_time_between:{name:"Minimum Send Interval",type:"number"},max_queue_depth:{name:"Max Queue Depth",type:"number"},max_retry:{name:"Max Retries",type:"number"},delete_oldest:{name:"Full Queue Action",type:"select",options:[{value:0,name:"Ignore New"},{value:1,name:"Delete Oldest"}]},must_check_reply:{name:"Check Reply",type:"select",options:[{value:0,name:"Ignore Acknowledgement"},{value:1,name:"Check Acknowledgement"}]},client_timeout:{name:"Client Timeout",type:"number"}},se={name:"Controller User",type:"string"},ae={name:"Controller Password",type:"password"},oe={name:"Controller Subscribe",type:"string"},ie={name:"Controller Publish",type:"string"},re={MQTT_lwt_topic:{name:"Controller LWT topic:",type:"string"},lwt_message_connect:{name:"LWT Connect Message",type:"string"},lwt_message_disconnect:{name:"LWT Disconnect Message",type:"string"}},le={port:1883,minimal_time_between:100,max_queue_depth:10,max_retry:10,client_timeout:1e3},ce={1:()=>({port:8080}),2:()=>({subscribe:"domoticz/out",public:"domoticz/in"}),3:()=>({port:23}),4:()=>({port:80}),5:()=>({subscribe:"/%sysname%/#",publish:"/%sysname%/%tskname%/%valname%"}),6:()=>({subscribe:"/Home/#",publish:"/hooks/devices/%id%/SensorData/%valname%"}),7:()=>({port:80}),8:()=>({port:80,publish:"demo.php?name=%sysname%&task=%tskname%&valuename=%valname%&value=%value%"}),9:()=>({port:8383}),10:()=>({port:514,publish:"%sysname%_%tskname%_%valname%=%value%"}),13:()=>({port:65501,Custom:1})},pe=(e,t)=>{const n={...le,...ce[e]()};Object.keys(n).forEach(e=>{const s=n[e];Object(C.c)(t.settings,e,s)})},ue=e=>{let t={},n={};switch(Number(e)){case 2:case 5:t={...ne,user:se,password:ae,subscribe:oe,publish:ie,...re};break;case 6:t={...ne,subscribe:oe,publish:ie,...re};break;case 3:case 7:t={...ne,password:ae};break;case 8:t={...ne,user:se,password:ae,subscribe:oe,publish:ie};break;case 1:case 9:t={...ne,user:se,password:ae};break;case 10:t={...ne,subscribe:oe,publish:ie};break;case 13:n={global:{name:"Global Settings",configs:{port:{name:"UDP Port",type:"number",var:"ROOT.config.espnetwork.port"}}},nodes:{name:"Connected Nodes",configs:{nodes:{type:"custom",component:ee}}}};break;case 0:default:t={...ne}}return{groups:{settings:{name:"Controller Settings",configs:{protocol:{name:"Protocol",type:"select",var:"protocol",options:te},enabled:{name:"Enabled",type:"checkbox",var:"enabled"},...t}},...n}}};const me=[{name:"None",value:255},{name:"GPIO-0",value:0},{name:"GPIO-1",value:1},{name:"GPIO-2",value:2},{name:"GPIO-3",value:3},{name:"GPIO-4",value:4},{name:"GPIO-5",value:5},{name:"GPIO-9",value:9},{name:"GPIO-10",value:10},{name:"GPIO-12",value:12},{name:"GPIO-13",value:13},{name:"GPIO-14",value:14},{name:"GPIO-15",value:15},{name:"GPIO-16",value:16}],de=[{name:"Default",value:0},{name:"Low",value:1},{name:"High",value:2},{name:"Input",value:3}],fe={groups:{led:{name:"WiFi Status LED",configs:{gpio:{name:"GPIO --\x3e LED",type:"select",options:me},inverse:{name:"Inversed LED",type:"checkbox"}}},reset:{name:"Reset Pin",configs:{pin:{name:"GPIO <-- Switch",type:"select",options:me}}},i2c:{name:"I2C Settings",configs:{sda:{name:"GPIO - SDA",type:"select",options:me},scl:{name:"GPIO - SCL",type:"select",options:me}}},spi:{name:"SPI Settings",configs:{enabled:{name:"Init SPI",type:"checkbox"}}},gpio:{name:"GPIO boot states",configs:{0:{name:"Pin Mode GPIO-0",type:"select",options:de},1:{name:"Pin Mode GPIO-1",type:"select",options:de},2:{name:"Pin Mode GPIO-2",type:"select",options:de},3:{name:"Pin Mode GPIO-3",type:"select",options:de},4:{name:"Pin Mode GPIO-4",type:"select",options:de},5:{name:"Pin Mode GPIO-5",type:"select",options:de},9:{name:"Pin Mode GPIO-9",type:"select",options:de},10:{name:"Pin Mode GPIO-10",type:"select",options:de},12:{name:"Pin Mode GPIO-12",type:"select",options:de},13:{name:"Pin Mode GPIO-13",type:"select",options:de},14:{name:"Pin Mode GPIO-14",type:"select",options:de},15:{name:"Pin Mode GPIO-15",type:"select",options:de}}}}};const ge=[{name:"- None -",value:0},{name:"Email",value:1},{name:"Buzzer",value:2}],ve={},he={0:()=>({}),1:()=>({}),2:()=>({})},ye=(e,t)=>{const n={...ve,...he[e]()};Object.keys(n).forEach(e=>{const s=n[e];Object(C.c)(t.settings,e,s)})},be=e=>{let t={};switch(Number(e)){case 1:t={domain:{name:"Domain",type:"string"},hostname:{name:"Hostname",type:"string"},port:{name:"Port",type:"number"},sender:{name:"Sender",type:"string"},receiver:{name:"Receiver",type:"string"},subject:{name:"Subject",type:"string"},user:{name:"Username",type:"string"},pass:{name:"Password",type:"string"},body:{name:"Body",type:"textarea"}};break;case 2:t={pin1:{name:"1st GPIO",type:"select",options:me}}}return{groups:{settings:{name:"Notification Settings",configs:{type:{name:"Type",type:"select",var:"type",options:ge},enabled:{name:"Enabled",type:"checkbox",var:"enabled"},...t}}}}};const Oe=[{value:0,name:"Disabled"},{value:1,name:"Active on LOW"},{value:2,name:"Active on HIGH"},{value:3,name:"Active on LOW and HIGH"}],xe={defaults:()=>({gpio1:255,interval:60,"configs_float[1]":1e3,"configs_float[2]":1e3,"settings.values[0].name":"Switch"}),sensor:{name:"Sensor",configs:{pullup:{name:"Internal PullUp",type:"checkbox",var:"pin1pullup"},inversed:{name:"Inversed logic",type:"checkbox",var:"pin1inversed"},gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},switch_type:{name:"Switch Type",type:"select",options:[{name:"switch",value:0},{name:"dimmer",value:3}],var:"configs[0]"},switch_button_type:{name:"Switch Button Type",type:"select",options:[{name:"normal",value:0},{name:"active low",value:1},{name:"active high",value:2}],var:"configs[2]"},send_boot_state:{name:"Send Boot State",type:"checkbox",var:"configs[3]"}}},advanced:{name:"Advanced event management",configs:{debounce:{name:"De-bounce (ms)",type:"number",var:"configs_float[0]"},dblclick:{name:"Doublclick Event",type:"select",options:Oe,var:"configs[4]"},dblclick_interval:{name:"Doubleclick Max interval (ms)",min:1e3,max:3e3,type:"number",var:"configs_float[1]"},longpress:{name:"Longpress event",type:"select",options:Oe,var:"configs[5]"},longpress_interval:{name:"Longpress min interval (ms)",min:1e3,max:5e3,type:"number",var:"configs_float[2]"},safe_button:{name:"Use safe button",type:"checkbox",var:"configs_float[3]"}}},data:!0,vals:1},Se={sensor:{defaults:()=>({gpio1:255,"settings.values[0].name":"Count","settings.values[1].name":"Total","settings.values[2].name":"Time"}),name:"Sensor",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},debounce:{name:"De-bounce (ms)",type:"number",var:"configs[0]"},counter_type:{name:"Counter Type",type:"select",options:[{value:0,name:"Delta"},{value:1,name:"Delta/Total/Time"},{value:2,name:"Total"},{value:3,name:"Delta/Total"}],var:"configs[1]"},mode_type:{name:"Switch Button Type",type:"select",options:[{value:0,name:"LOW"},{value:1,name:"CHANGE"},{value:2,name:"RISING"},{value:3,name:"FALLING"}],var:"configs[2]"}}},data:!0,vals:3},_e={defaults:()=>({gpio1:255,"settings.values[0].name":"Temperature"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"}}},data:!0,vals:1},Te={defaults:()=>({gpio1:255,interval:60,"configs[0]":11,"settings.values[0].name":"Temperature","settings.values[1].name":"Humidity"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO Data",type:"select",options:me,var:"gpio1"},switch_type:{name:"Sensor model",type:"select",options:[{value:11,name:"DHT11"},{value:22,name:"DHT22"},{value:12,name:"DHT12"},{value:23,name:"Sonoff am2301"},{value:70,name:"Sonoff si7021"}],var:"configs[0]"}}},data:!0,vals:2},we={defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"Tag"}),sensor:{name:"Sensor",configs:{gpio1:{name:"GPIO D0 (green, 5V)",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO D1 (white, 5V)",type:"select",options:me,var:"gpio2"},type:{name:"Weigand Type",type:"select",options:[{value:26,name:"26 Bits"},{value:34,name:"34 Bits"}],var:"configs[0]"}}},data:!0,vars:1},Ce=[{value:0,name:"Disabled"},{value:1,name:"Active on LOW"},{value:2,name:"Active on HIGH"},{value:3,name:"Active on LOW and HIGH"}],Pe={defaults:()=>({gpio4:0,"settings.values[0].name":"Switch"}),sensor:{name:"Sensor",configs:{port:{name:"PORT",type:"number",var:"gpio4"},inversed:{name:"Inversed logic",type:"checkbox",var:"pin1inversed"},send_boot_state:{name:"Send Boot State",type:"checkbox",var:"configs[3]"}}},advanced:{name:"Advanced event management",configs:{debounce:{name:"De-bounce (ms)",type:"number",var:"configs_float[0]"},dblclick:{name:"Doublclick Event",type:"select",options:Ce,var:"configs[4]"},dblclick_interval:{name:"Doubleclick Max interval (ms)",type:"number",var:"configs_float[1]"},longpress:{name:"Longpress event",type:"select",options:Ce,var:"configs[5]"},longpress_interval:{name:"Longpress min interval (ms)",type:"number",var:"configs_float[2]"},safe_button:{name:"Use safe button",type:"checkbox",var:"configs_float[3]"}}},data:!0,vars:1},Ie={defaults:()=>({"configs[0]":35,"settings.values[0].name":"Lux"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:35,name:"0x23 (35) - default"},{value:92,name:"0x5c (92)"}],var:"configs[0]"},mode:{name:"Measurement mode",type:"select",options:[{value:1,name:"RESOLUTION_LOW"},{value:2,name:"RESOLUTION_NORMAL"},{value:3,name:"RESOLUTION_HIGH"},{value:99,name:"RESOLUTION_AUTO_HIGH"}],var:"configs[1]"},send_to_sleep:{name:"Send sensor to sleep",type:"checkbox",var:"configs[2]"}}},data:!0,vals:1},ke={defaults:()=>({"settings.values[0].name":"Value"}),sensor:{name:"Sensor",configs:{port:{name:"Port",type:"number",var:"gpio4"},mode:{name:"Port Type",type:"select",options:[{value:0,name:"Digital"},{value:1,name:"Analog"}],var:"configs[0]"}}},data:!0,vals:1},$e={defaults:()=>({"configs[0]":32}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:35,name:"0x23 (35) - default"},{value:92,name:"0x5c (92)"}],var:"configs[0]"},size:{name:"Display Size",type:"select",options:[{value:1,name:"RESOLUTION_LOW"},{value:2,name:"RESOLUTION_NORMAL"},{value:3,name:"RESOLUTION_HIGH"},{value:99,name:"RESOLUTION_AUTO_HIGH"}],var:"configs[1]"},line1:{name:"Line 1",type:"string"},line2:{name:"Line 2",type:"string"},line3:{name:"Line 3",type:"string"},line4:{name:"Line 4",type:"string"},button:{name:"Display Button",type:"select",options:me,var:"gpio3"},timeout:{name:"Display Timeout",type:"number",var:"configs[2]"},command:{name:"LCD Command Mode",type:"select",options:[{value:1,name:"RESOLUTION_LOW"},{value:2,name:"RESOLUTION_NORMAL"},{value:3,name:"RESOLUTION_HIGH"},{value:99,name:"RESOLUTION_AUTO_HIGH"}],var:"configs[3]"}}}},De={defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"Distance"}),sensor:{name:"Sensor",configs:{gpio1:{name:"GPIO Trigger",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO Echo, 5V",type:"select",options:me,var:"gpio2"},mode:{name:"Mode",type:"select",options:[{value:0,name:"Value"},{value:1,name:"State"}],var:"configs[0]"},treshold:{name:"Treshold",type:"number",var:"configs[1]"},max_distance:{name:"Max Distance",type:"number",var:"configs[2]"},unit:{name:"Unit",type:"select",options:[{value:0,name:"Metric"},{value:1,name:"Imperial"}],var:"configs[3]"},filter:{name:"Filter",type:"select",options:[{value:0,name:"None"},{value:1,name:"Median"}],var:"configs[4]"},filter_size:{name:"Filter Size",type:"number",var:"configs[5]"}}},data:!0,vals:1},je={defaults:()=>({interval:60,"settings.values[0].name":"Temperature","settings.values[1].name":"Humidity"}),sensor:{name:"Sensor",configs:{resolution:{name:"Resolution",type:"select",options:[{value:0,name:"Temp 14 bits, RH 12 bits"},{value:128,name:"Temp 13 bits, RH 10 bits"},{value:1,name:"Temp 12 bits, RH 8 bits"},{value:129,name:"Temp 11 bits, RH 11 bits"}],var:"configs[0]"}}},data:!0,vals:2},Ne={defaults:()=>({"configs[0]":57,"settings.values[0].name":"Lux","settings.values[1].name":"Infrared","settings.values[2].name":"Broadband"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:57,name:"0x39 (57) - default"},{value:73,name:"0x49 (73)"},{value:41,name:"0x29 (41)"}],var:"configs[0]"},mode:{name:"Integration time",type:"select",options:[{value:0,name:"13 ms"},{value:1,name:"101 ms"},{value:2,name:"402 ms"}],var:"configs[1]"},send_to_sleep:{name:"Send sensor to sleep",type:"checkbox",var:"configs[2]"},gain:{name:"Enable 16x gain",type:"checkbox",var:"configs[3]"}}},data:!0,vals:3},Ee={defaults:()=>({gpio1:255,"settings.values[0].name":"Tag"}),sensor:{name:"Sensor",configs:{gpio1:{name:"Reset Pin",type:"select",options:me,var:"gpio1"}}},data:!0,vals:1},Ae={defaults:()=>({gpio1:255,"settings.values[0].name":"Dust"}),sensor:{name:"Sensor",configs:{gpio1:{name:"GPIO - LED",type:"select",options:me,var:"gpio1"}}},data:!0,vals:1},Le=[{value:0,name:"Disabled"},{value:1,name:"Active on LOW"},{value:2,name:"Active on HIGH"},{value:3,name:"Active on LOW and HIGH"}],Re={defaults:()=>({gpio4:0,"settings.values[0].name":"Switch"}),sensor:{name:"Sensor",configs:{port:{name:"PORT",type:"number",var:"gpio4"},inversed:{name:"Inversed logic",type:"checkbox",var:"pin1inversed"},send_boot_state:{name:"Send Boot State",type:"checkbox",var:"configs[3]"}}},advanced:{name:"Advanced event management",configs:{debounce:{name:"De-bounce (ms)",type:"number",var:"configs_float[0]"},dblclick:{name:"Doublclick Event",type:"select",options:Le,var:"configs[4]"},dblclick_interval:{name:"Doubleclick Max interval (ms)",type:"number",var:"configs_float[1]"},longpress:{name:"Longpress event",type:"select",options:Le,var:"configs[5]"},longpress_interval:{name:"Longpress min interval (ms)",type:"number",var:"configs_float[2]"},safe_button:{name:"Use safe button",type:"checkbox",var:"configs_float[3]"}}},data:!0,vals:1},Ge={defaults:()=>({gpio1:255}),sensor:{name:"Settings",configs:{port:{name:"TCP Port",type:"number",var:"extra.plugin_config_long[0]"},baudrate:{name:"Baudrate",type:"number",var:"extra.plugin_config_long[1]"},serial_config:{name:"Data Bits",type:"select",options:[{value:0,name:"No Parity"},{value:1,name:"Even"},{value:2,name:"Odd"}],var:"configs[2]"},reset_after_boot:{name:"Reset target after boot",type:"select",options:me,var:"gpio1"},timeout:{name:"RX Receive Timeout",type:"number",var:"configs[0]"},event_processing:{name:"Event Processing",type:"select",options:[{value:0,name:"None"},{value:1,name:"Generic"},{value:2,name:"RFLink"}],var:"configs[1]"}}}},Me={defaults:()=>({gpio1:255,"settings.values[0].name":"Output"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO Level Low",type:"select",options:me,var:"gpio1"},check_task:{name:"Check Task",type:"select",options:()=>D.get("tasks").filter(e=>e.enabled).map(e=>({value:e.settings.index,name:e.settings.name})),var:"configs[0]"},check_value:{name:"Check Value",type:"select",options:()=>[1,2,3,4],var:"configs[1]"},level:{name:"Set Level",type:"number",var:"configs_float[0]"},hysteresis:{name:"Hysteresis",type:"number",var:"configs_float[1]"}}},data:!0,vals:1},He=[...Array(32)].map((e,t)=>({value:t,name:`0x${t.toString(16)} (${t})`})),Ue=[{value:1,name:"RESOLUTION_LOW"},{value:2,name:"RESOLUTION_NORMAL"},{value:3,name:"RESOLUTION_HIGH"},{value:99,name:"RESOLUTION_AUTO_HIGH"}],Fe=[{value:0,name:"Uptime"},{value:1,name:"Free Ram"},{value:2,name:"WiFi RSSI"},{value:3,name:"Input VCC"},{value:4,name:"System load"},{value:5,name:"IP 1.Octet"},{value:6,name:"IP 2.Octet"},{value:7,name:"IP 3.Octet"},{value:8,name:"IP 4.Octet"},{value:9,name:"Web activity"},{value:10,name:"Free Stack"},{value:11,name:"None"}],Be=[{value:1,name:"RESOLUTION_LOW"},{value:2,name:"RESOLUTION_NORMAL"},{value:3,name:"RESOLUTION_HIGH"},{value:99,name:"RESOLUTION_AUTO_HIGH"}],We=[{value:0,name:""},{value:1,name:"Off"},{value:2,name:"On"}],Ve=[{name:"- None -",value:0,fields:[]},{name:"Switch input - Switch",value:1,fields:xe},{name:"Analog input - internal",value:2,fields:{defaults:()=>({"settings.values[0].name":"Analog"}),sensor:{name:"Sensor",configs:{oversampling:{name:"Oversampling",type:"checkbox",var:"configs[0]"}}},advanced:{name:"Two point calibration",configs:{enabled:{name:"Calibration Enabled",type:"checkbox",var:"configs[3]"},point1:[{name:"Point 1",type:"number",var:"configs_long[0]"},{name:"=",type:"number",var:"configs_float[0]"}],point2:[{name:"Point 2",type:"number",var:"configs_long[1]"},{name:"=",type:"number",var:"configs_float[1]"}]}},data:!0,vals:1}},{name:"Generic - Pulse counter",value:3,fields:Se},{name:"Environment - DS18b20",value:4,fields:_e},{name:"Environment - DHT11/12/22 SONOFF2301/7021",value:5,fields:Te},{name:"Environment - BMP085/180",value:6,fields:{defaults:()=>({"settings.values[0].name":"Temperature","settings.values[1].name":"Pressure"}),sensor:{name:"Sensor",configs:{altitude:{name:"Altitude",type:"number",var:"configs[1]"}}},data:!0,vals:2}},{name:"Analog input - PCF8591",value:7,fields:{defaults:()=>({"settings.values[0].name":"Analog"}),sensor:{name:"Sensor",configs:{port:{name:"PORT",type:"number",var:"gpio4"}}},data:!0,vars:1}},{name:"RFID - Wiegand",value:8,fields:we},{name:"Switch input - MCP23017",value:9,fields:Pe},{name:"Light/Lux - BH1750",value:10,fields:Ie},{name:"Extra IO - ProMini Extender",value:11,fields:ke},{name:"Display - LCD2004",value:12,fields:$e},{name:"Position - HC-SR04, RCW-0001, etc.",value:13,fields:De},{name:"Environment - SI7021/HTU21D",value:14,fields:je},{name:"Light/Lux - TSL2561",value:15,fields:Ne},{name:"RFID - PN532",value:17,fields:Ee},{name:"Dust - Sharp GP2Y10",value:18,fields:Ae},{name:"Switch input - PCF8574",value:19,fields:Re},{name:"Communication - Serial Server",value:20,fields:Ge},{name:"Regulator - Level Control",value:21,fields:Me},{name:"Extra IO - PCA9685",value:22,fields:{defaults:()=>({gpio1:255,"configs_float[0]":1500,"configs_float[1]":4095,"settings.values[0].name":"Output"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[...Array(32)].map((e,t)=>({value:t+64,name:`0x${(t+64).toString(16)} (${t+64})`})),var:"configs[0]"},mode:{name:"Mode 2",type:"select",options:He,var:"configs[1]"},frequency:{name:"Frequency (23 - 1500)",type:"number",min:23,max:1500,var:"configs_float[0]"},range:{name:"Range (1-10000)",type:"number",min:1,max:1e4,var:"configs_float[1]"}}}}},{name:"Display - OLED SSD1306",value:23,fields:{sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:35,name:"0x23 (35) - default"},{value:92,name:"0x5c (92)"}],var:"configs[0]"},rotation:{name:"Rotation",type:"select",options:Ue,var:"configs[1]"},size:{name:"Display Size",type:"select",options:Ue,var:"configs[1]"},font:{name:"Font Width",type:"select",options:Ue,var:"configs[1]"},line1:{name:"Line 1",type:"text",var:"configs[2]"},line2:{name:"Line 2",type:"text",var:"configs[2]"},line3:{name:"Line 3",type:"text",var:"configs[2]"},line4:{name:"Line 4",type:"text",var:"configs[2]"},line5:{name:"Line 4",type:"text",var:"configs[2]"},line6:{name:"Line 4",type:"text",var:"configs[2]"},line7:{name:"Line 4",type:"text",var:"configs[2]"},line8:{name:"Line 4",type:"text",var:"configs[2]"},button:{name:"Display Button",type:"select",options:me,var:"gpio1"},timeout:{name:"Display Timeout",type:"number",var:"configs[2]"}}}}},{name:"Environment - MLX90614",value:24,fields:{defaults:()=>({gpio4:0,"settings.values[0].name":"Temperature"}),sensor:{name:"Sensor",configs:{port:{name:"Port",type:"number",var:"gpio4"},option:{name:"Option",type:"select",options:[{value:0,name:"IR Object Temperature"},{value:1,name:"Ambient Temperature"}],var:"configs[0]"}}},data:!0,vars:1}},{name:"Analog input - ADS1115",value:25,fields:{defaults:()=>({"configs[0]":72,"settings.values[0].name":"Analog"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:72,name:"0x48 (72)"},{value:73,name:"0x49 (73)"},{value:74,name:"0x4A (74)"},{value:75,name:"0x4B (75)"}],var:"configs[0]"},gain:{name:"Gain",type:"select",options:[{value:0,name:"2/3x gain (FS=6.144V)"},{value:1,name:"1x gain (FS=4.096V)"},{value:2,name:"2x gain (FS=2.048V)"},{value:3,name:"4x gain (FS=1.024V)"},{value:4,name:"8x gain (FS=0.512V)"},{value:5,name:"16x gain (FS=0.256V)"}],var:"configs[1]"},multiplexer:{name:"Input Multiplexer",type:"select",options:[{value:0,name:"AIN0 - AIN1 (Differential)"},{value:1,name:"AIN0 - AIN3 (Differential)"},{value:2,name:"AIN1 - AIN3 (Differential)"},{value:3,name:"AIN2 - AIN3 (Differential)"},{value:4,name:"AIN0 - GND (Single-Ended)"},{value:5,name:"AIN1 - GND (Single-Ended)"},{value:6,name:"AIN2 - GND (Single-Ended)"},{value:7,name:"AIN3 - GND (Single-Ended)"}],var:"configs[2]"}}},advanced:{name:"Two point calibration",configs:{enabled:{name:"Calibration Enabled",type:"number",var:"configs[3]"},point1:[{name:"Point 1",type:"number",var:"configs_long[0]"},{name:"=",type:"number",var:"configs_float[1]"}],point2:[{name:"Point 2",type:"number",var:"configs_long[1]"},{name:"=",type:"number",var:"configs_float[1]"}]}},data:!0,vars:1}},{name:"Generic - System Info",value:26,fields:{defaults:()=>({gpio4:0,"settings.values[0].name":"Uptime","settings.values[1].name":"Uptime","settings.values[2].name":"Uptime","settings.values[3].name":"Uptime"}),sensor:{name:"Settings",configs:{indicator1:{name:"Indicator 1",type:"select",options:Fe,var:"configs_long[0]"},indicator1:{name:"Indicator 2",type:"select",options:Fe,var:"configs_long[1]"},indicator1:{name:"Indicator 3",type:"select",options:Fe,var:"configs_long[2]"},indicator1:{name:"Indicator 4",type:"select",options:Fe,var:"configs_long[3]"}}},data:!0,vars:4}},{name:"Energy (DC) - INA219",value:27,fields:{defaults:()=>({"configs[0]":64,"settings.values[0].name":"Voltage","settings.values[1].name":"Current","settings.values[2].name":"Power"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:64,name:"0x40 (64) - (default)"},{value:65,name:"0x41 (65)"},{value:68,name:"0x44 (68)"},{value:69,name:"0x45 (69)"}],var:"configs[0]"},check_task:{name:"Measurment Range",type:"select",options:[{value:0,name:"32V, 2A"},{value:1,name:"32V, 1A"},{value:2,name:"16V, 0.4A"}],var:"configs[1]"},check_value:{name:"Measurment Type",type:"select",options:[{value:0,name:"Voltage"},{value:1,name:"Current"},{value:2,name:"Power"},{value:3,name:"Voltage/Current/Power"}],var:"configs[2]"}}},data:!0,vals:3}},{name:"Environment - BMx280",value:28,fields:{defaults:()=>({"configs[0]":118,"settings.values[0].name":"Temperature","settings.values[1].name":"Humidity","settings.values[2].name":"Pressure"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:118,name:"0x76 (118) - (default)"},{value:119,name:"0x77 (119) - (default)"}],var:"configs[0]"},altitude:{name:"Altitude",type:"number",var:"configs[1]"},offset:{name:"Temperature Offset",type:"number",var:"configs[2]"}}},data:!0,vals:3}},{name:"Output - Domoticz MQTT Helper",value:29,fields:{defaults:()=>({gpio1:255,"settings.values[0].name":"Output"}),sensor:{name:"Actuator",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},idx:{name:"IDX",type:"number",var:"configs[0]"}}},vals:1}},{name:"Environment - BMP280",value:30,fields:{defaults:()=>({"configs[0]":118,"settings.values[0].name":"Temperature","settings.values[1].name":"Pressure"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:118,name:"0x76 (118) - (default)"},{value:119,name:"0x77 (119) - (default)"}],var:"configs[0]"},altitude:{name:"Altitude",type:"number",var:"configs[1]"}}},data:!0,vals:2}},{name:"Environment - SHT1X",value:31,fields:{defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"Temperature","settings.values[1].name":"Humidity"}),sensor:{name:"Sensor",configs:{pullup:{name:"Internal PullUp",type:"checkbox",var:"pin1pullup"},gpio1:{name:"GPIO Data",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO SCK",type:"select",options:me,var:"gpio2"}}},data:!0,vals:2}},{name:"Environment - MS5611 (GY-63)",value:32,fields:{defaults:()=>({"configs[0]":119,"settings.values[0].name":"Temperature","settings.values[1].name":"Pressure"}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:118,name:"0x76 (118)"},{value:119,name:"0x77 (119) - (default)"}],var:"configs[0]"},altitude:{name:"Altitude",type:"number",var:"configs[1]"}}},data:!0,vals:2}},{name:"Generic - Dummy Device",value:33,fields:{defaults:()=>({interval:0,"settings.values[0].name":"Dummy1","settings.values[1].name":"Dummy1","settings.values[2].name":"Dummy3","settings.values[3].name":"Dummy4"}),sensor:{name:"Sensor",configs:{switch_type:{name:"Simulate Sensor Type",type:"select",options:[{value:1,name:"SENSOR_TYPE_SINGLE"},{value:2,name:"SENSOR_TYPE_TEMP_HUM"},{value:3,name:"SENSOR_TYPE_TEMP_BARO"},{value:4,name:"SENSOR_TYPE_TEMP_HUM_BARO"},{value:5,name:"SENSOR_TYPE_DUAL"},{value:5,name:"SENSOR_TYPE_TRIPLE"},{value:7,name:"SENSOR_TYPE_QUAD"},{value:10,name:"SENSOR_TYPE_SWITCH"},{value:11,name:"SENSOR_TYPE_DIMMER"},{value:20,name:"SENSOR_TYPE_LONG"},{value:21,name:"SENSOR_TYPE_WIND"}],var:"configs[0]"},interval:{name:"Interval",type:"number"}}},data:!0,vals:4}},{name:"Environment - DHT12 (I2C)",value:34,fields:{defaults:()=>({"settings.values[0].name":"Temperature","settings.values[1].name":"Humidity"}),data:{name:"Data Acquisition",configs:{interval:{name:"Interval",type:"number"}}},data:!0,vals:2}},{name:"Display - OLED SSD1306/SH1106 Framed",value:36,fields:{defaults:()=>({"configs[0]":35}),sensor:{name:"Sensor",configs:{i2c_address:{name:"I2C Address",type:"select",options:[{value:35,name:"0x23 (35) - default"},{value:92,name:"0x5c (92)"}],var:"configs[0]"},rotation:{name:"Rotation",type:"select",options:Be,var:"configs[1]"},size:{name:"Display Size",type:"select",options:Be,var:"configs[1]"},font:{name:"Font Width",type:"select",options:Be,var:"configs[1]"},line1:{name:"Line 1",type:"text",var:"configs[2]"},line2:{name:"Line 2",type:"text",var:"configs[2]"},line3:{name:"Line 3",type:"text",var:"configs[2]"},line4:{name:"Line 4",type:"text",var:"configs[2]"},line5:{name:"Line 4",type:"text",var:"configs[2]"},line6:{name:"Line 4",type:"text",var:"configs[2]"},line7:{name:"Line 4",type:"text",var:"configs[2]"},line8:{name:"Line 4",type:"text",var:"configs[2]"},button:{name:"Display Button",type:"select",options:me,var:"gpio1"},timeout:{name:"Display Timeout",type:"number",var:"configs[2]"}}}}},{name:"Generic - MQTT Import",value:37,fields:{defaults:()=>({"settings.values[0].name":"Value1","settings.values[1].name":"Value2","settings.values[2].name":"Value3","settings.values[3].name":"Value4"}),settings:{name:"Data Settings",configs:{switch_type:{name:"MQTT Topic 1",type:"text",var:"configs[0]"},switch_type:{name:"MQTT Topic 2",type:"text",var:"configs[0]"},switch_type:{name:"MQTT Topic 3",type:"text",var:"configs[0]"},switch_type:{name:"MQTT Topic 4",type:"text",var:"configs[0]"}}},vars:4}},{name:"Output - NeoPixel (Basic)",value:38,fields:{defaults:()=>({gpio1:255}),sensor:{name:"Sensor",configs:{leds:{name:"LEd Count",type:"number",var:"configs[0]"},gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},type:{name:"Strip Type",type:"select",options:[{value:1,name:"GRB"},{value:2,name:"GRBW"}],var:"configs[1]"}}}}},{name:"Environment - Thermocouple",value:39,fields:{defaults:()=>({gpio1:255,"settings.values[0].name":"Temperature"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},type:{name:"Adapter IC",type:"select",options:[{value:1,name:"MAX 6675"},{value:2,name:"MAX 31855"}],var:"configs[0]"}}},data:!0,vals:1}},{name:"Output - NeoPixel (Word Clock)",value:41,fields:{defaults:()=>({gpio1:255}),sensor:{name:"Actuator",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"},R:{name:"Red",type:"number",min:0,max:255,var:"configs[0]"},G:{name:"Green",type:"number",min:0,max:255,var:"configs[1]"},B:{name:"Blue",type:"number",min:0,max:255,var:"configs[2]"}}}}},{name:"Output - NeoPixel (Candle)",value:42,fields:{defaults:()=>({gpio1:255,"configs[0]":11,"settings.values[0].name":"Color","settings.values[1].name":"Brightness","settings.values[2].name":"Type"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO",type:"select",options:me,var:"gpio1"}}},data:!0,vals:3}},{name:"Output - Clock",value:43,fields:{defaults:()=>({gpio1:255,"settings.values[0].name":"Output"}),sensor:{name:"Sensor",configs:{gpio:{name:"GPIO - Clock Event",type:"select",options:me,var:"gpio1"},event1:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event2:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event3:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event4:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event5:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event6:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event7:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}],event8:[{name:"Day, Time 1",type:"string",var:"configs[0]"},{name:"",type:"select",options:We,var:"configs[1]"}]}},data:!0,vals:1}},{name:"Communication - P1 Wifi Gateway",value:44,fields:{sensor:{name:"Settings",configs:{port:{name:"TCP Port",type:"number",var:"configs_float[0]"},baudrate:{name:"Baudrate",type:"number",var:"configs_float[0]"},data_bits:{name:"Data Bits",type:"number",var:"configs_float[0]"},parity:{name:"Parity",type:"select",options:[{value:0,name:"No Parity"},{value:1,name:"Even"},{value:2,name:"Odd"}],var:"configs[0]"},stop_bits:{name:"Stop Bits",type:"number",var:"configs_float[0]"},reset_after_boot:{name:"Reset target after boot",type:"select",options:me,var:"configs[1]"},timeout:{name:"RX Receive Timeout",type:"number",var:"configs_float[0]"}}}}},{name:"Gases - CO2 MH-Z19",value:49,fields:{defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"PPM","settings.values[1].name":"Temperature","settings.values[2].name":"U"}),sensor:{name:"Data Acquisition",configs:{gpio1:{name:"GPIO - TX",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO - RX",type:"select",options:me,var:"gpio2"}}},data:!0,vals:3}},{name:"Gases - CO2 Senseair",value:52,fields:{defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"CO2"}),sensor:{name:"Data Acquisition",configs:{gpio1:{name:"GPIO - TX",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO - RX",type:"select",options:me,var:"gpio2"}}},data:!0,vals:1}},{name:"Dust - SDS011/018/198",value:56,fields:{defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"PM2.5","settings.values[1].name":"PM10"}),sensor:{name:"Data Acquisition",configs:{gpio1:{name:"GPIO - TX",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO - RX",type:"select",options:me,var:"gpio2"}}},data:!0,vals:2}},{name:"Switch Input - Rotary Encoder",value:59,fields:{defaults:()=>({gpio1:255,gpio2:255,gpio3:255,"configs_long[1]":100,"settings.values[0].name":"Counter"}),sensor:{name:"Data Acquisition",configs:{gpio1:{name:"GPIO A - CLK",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO B - DT",type:"select",options:me,var:"gpio2"},gpio3:{name:"GPIO I - Z",type:"select",options:me,var:"gpio3"},limit_min:{name:"Limit - Min",type:"number",var:"configs_long[0]"},limit_max:{name:"Limit - Max",type:"number",var:"configs_long[1]"}}},data:!0,vals:1}},{name:"Keypad - TTP229 Touc",value:63,fields:{defaults:()=>({gpio1:1}),sensor:{defaults:()=>({gpio1:255,gpio2:255,"settings.values[0].name":"ScanCode"}),name:"Sensor",configs:{gpio1:{name:"GPIO A - CLK",type:"select",options:me,var:"gpio1"},gpio2:{name:"GPIO B - DT",type:"select",options:me,var:"gpio2"},scancode:{name:"ScanCode",type:"checkbox",options:me,var:"configs[1]"}}},data:!0,vals:1}}].sort((e,t)=>e.name.localeCompare(t.name));const ze={groups:{general:{name:"General",configs:{unitname:{name:"Unit Name",type:"string"},unitnr:{name:"Unit Number",type:"number"},appendunit:{name:"Append Unit Name to Hostname",type:"checkbox"},password:{name:"Admin Password",type:"password",var:"security[0].password"}}},wifi:{name:"WiFi",configs:{ssid:{name:"SSID",type:"string",var:"security[0].WifiSSID"},passwd:{name:"Password",type:"password",var:"security[0].WifiKey"},fallbackssid:{name:"Fallback SSID",type:"string",var:"security[0].WifiSSID2"},fallbackpasswd:{name:"Fallback Password",type:"password",var:"security[0].WifiKey2"},wpaapmode:{name:"WPA AP Mode Key:",type:"string",var:"security[0].WifiAPKey"}}},clientIP:{name:"Client IP Filtering",configs:{blocklevel:{name:"IP Block Level",type:"select",options:[{name:"Allow All",value:0},{name:"Allow Local Subnet",value:1},{name:"Allow IP Range",value:2}],var:"security[0].IPblockLevel"},lowerrange:{name:"Access IP lower range",type:"ip",var:"security[0].AllowedIPrangeLow"},upperrange:{name:"Access IP upper range",type:"ip",var:"security[0].AllowedIPrangeHigh"}}},IP:{name:"IP Settings",configs:{ip:{name:"IP",type:"ip"},gw:{name:"Gateway",type:"ip"},subnet:{name:"Subnet",type:"ip"},dns:{name:"DNS",type:"ip"}}},sleep:{name:"Sleep Mode",configs:{awaketime:{name:"Sleep awake time",type:"number"},sleeptime:{name:"Sleep time",type:"number"},sleeponfailiure:{name:"Sleep on connection failure",type:"checkbox"}}}}};const qe=[{name:"None",value:0},{name:"Error",value:1},{name:"Info",value:2},{name:"Debug",value:3},{name:"Debug More",value:4},{name:"Debug Dev",value:9}],Xe={onSave:e=>{console.log(e)},groups:{rules:{name:"Rules Settings",configs:{enabled:{name:"Enabled",type:"checkbox"},oldengine:{name:"Old Engine",type:"checkbox"}}},mqtt:{name:"Controller Settings",configs:{retain_flag:{name:"MQTT Retain Msg",type:"checkbox"},interval:{name:"Message Interval",type:"number"},useunitname:{name:"MQTT use unit name as ClientId",type:"checkbox"},changeclientid:{name:"MQTT change ClientId at reconnect",type:"checkbox"}}},ntp:{name:"NTP Settings",configs:{enabled:{name:"Use NTP",type:"checkbox"},host:{name:"NTP Hostname",type:"string"}}},dst:{name:"DST Settings",configs:{enabled:{name:"Use DST",type:"checkbox"}}},location:{name:"Location Settings",configs:{long:{name:"Longitude",type:"number"},lat:{name:"Latitude",type:"number"}}},log:{name:"Log Settings",configs:{syslog_ip:{name:"Syslog IP",type:"ip"},syslog_level:{name:"Syslog Level",type:"select",options:qe},syslog_facility:{name:"Syslog Level",type:"select",options:[{name:"Kernel",value:0},{name:"User",value:1},{name:"Daemon",value:3},{name:"Message",value:5},{name:"Local0",value:16},{name:"Local1",value:17},{name:"Local2",value:18},{name:"Local3",value:19},{name:"Local4",value:20},{name:"Local5",value:21},{name:"Local6",value:22},{name:"Local7",value:23}]},serial_level:{name:"Serial Level",type:"select",options:qe},web_level:{name:"Web Level",type:"select",options:qe}}},serial:{name:"Serial Settings",configs:{enabled:{name:"Enable Serial",type:"checkbox"},baudrate:{name:"Baud Rate",type:"number"}}},experimental:{name:"Experimental Settings",configs:{ip_octet:{name:"Fixed IP Octet",type:"number"},WDI2CAddress:{name:"WD I2C Address",type:"number"},ssdp:{name:"Use SSDP",type:"checkbox",var:"ssdp.enabled"},ConnectionFailuresThreshold:{name:"Connection Failiure Treshold",type:"number"},WireClockStretchLimit:{name:"I2C ClockStretchLimit",type:"number"}}}}};const Ke=[{name:"Rule 1",file:"rules1.txt",index:1},{name:"Rule 2",file:"rules2.txt",index:2},{name:"Rule 3",file:"rules3.txt",index:3},{name:"Rule 4",file:"rules4.txt",index:4}];const Ye={onSave:e=>{console.log(e)},groups:{keep:{name:"Settings to keep",configs:{unit:{name:"Keep Unit/Name",type:"checkbox"},wifi:{name:"Keep WiFi config",type:"checkbox"},network:{name:"Keep network config",type:"checkbox"},ntp:{name:"Keep NTP/DST config",type:"checkbox"},log:{name:"Keep log config",type:"checkbox"}}},load:{name:"Pre-defined configurations",configs:{config:{name:"Pre-Defined config",type:"select",options:[{name:"default",value:0},{name:"Sonoff Basic",value:1},{name:"Sonoff TH1x",value:2},{name:"Sonoff S2x",value:3},{name:"Sonoff TouchT1",value:4},{name:"Sonoff TouchT2",value:5},{name:"Sonoff TouchT3",value:6},{name:"Sonoff 4ch",value:7},{name:"Sonoff POW",value:8},{name:"Sonoff POW-r2",value:9},{name:"Shelly1",value:10}]}}}}},Qe={};const Je={enabled:{name:"Enabled",type:"checkbox",var:"enabled"},name:{name:"Name",type:"string"}},Ze=e=>{const t=Ve.find(t=>t.value===parseInt(e));if(!t)return null;const n=t.fields.data?{name:"Data Acquisition",configs:{send1:{name:"Send to Controller 1",type:"checkbox",var:"TaskDeviceSendData[0]",if:"controllers[0].enabled"},send2:{name:"Send to Controller 2",type:"checkbox",var:"TaskDeviceSendData[1]",if:"controllers[1].enabled"},send3:{name:"Send to Controller 3",type:"checkbox",var:"TaskDeviceSendData[2]",if:"controllers[2].enabled"},idx1:{name:"IDX1",type:"number",var:"TaskDeviceID[0]",if:"controllers[0].enabled"},idx2:{name:"IDX2",type:"number",var:"TaskDeviceID[1]",if:"controllers[1].enabled"},idx3:{name:"IDX3",type:"number",var:"TaskDeviceID[2]",if:"controllers[2].enabled"},interval:{name:"Interval",type:"number",var:"interval"}}}:{};return{groups:{settings:{name:"Device Settings",configs:{device:{name:"Device",type:"select",var:"device",options:Ve},...Je}},...t.fields,data:n,values:{name:"Values",configs:{...[...new Array(t.fields.vals||0)].reduce((e,t,n)=>(e[`value${n}`]=[{name:`Name ${n+1}`,var:`settings.values[${n}].name`,type:"string"},{name:`Formula ${n+1}`,var:`settings.values[${n}].formula`,type:"string"},{name:`Decimals ${n+1}`,var:`extra.decimals[${n}]`,type:"number"}],e),{})}}}}},et=(e,t)=>{const n=Ve.find(t=>t.value===parseInt(e));if(Object.keys(n.fields).forEach(e=>{const s=n.fields[e];s.configs&&Object.keys(s.configs).forEach(n=>{const a=s.configs[n],o=a.var||`${e}.${n}`;let i=0;"string"===a.type?i="":"ip"===a.type&&(i=[0,0,0,0]),Object(C.c)(t,o,i)})}),n.fields.defaults){const e=n.fields.defaults();Object.keys(e).forEach(n=>{const s=e[n];Object(C.c)(t,n,s)})}};var tt=n(17);const nt=[{group:"TRIGGERS",type:"timer",inputs:[],outputs:[1],config:[{name:"timer",type:"select",values:[1,2,3,4,5,6,7,8]}],indent:!0,toString:function(){return`timer ${this.config[0].value}`},toDsl:function(){return[`on Rules#Timer=${this.config[0].value} do\n%%output%%\nEndon\n`]}},{group:"TRIGGERS",type:"event",inputs:[],outputs:[1],config:[{name:"name",type:"text"}],indent:!0,toString:function(){return`event ${this.config[0].value}`},toDsl:function(){return[`on ${this.config[0].value} do\n%%output%%\nEndon\n`]}},{group:"TRIGGERS",type:"clock",inputs:[],outputs:[1],config:[],indent:!0,toString:()=>"clock",toDsl:()=>["on Clock#Time do\n%%output%%\nEndon\n"]},{group:"TRIGGERS",type:"system boot",inputs:[],outputs:[1],config:[],indent:!0,toString:function(){return"on boot"},toDsl:function(){return["On System#Boot do\n%%output%%\nEndon\n"]}},{group:"TRIGGERS",type:"Device",inputs:[],outputs:[1],config:[],indent:!0,toString:function(){return"on boot"},toDsl:function(){return["On Device#Value do\n%%output%%\nEndon\n"]}},{group:"LOGIC",type:"if/else",inputs:[1],outputs:[1,2],config:[{name:"variable",type:"textselect",values:["Clock#Time"]},{name:"equality",type:"select",values:["=","<",">","<=",">=","!="]},{name:"value",type:"text"}],indent:!0,toString:function(){return`IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`},toDsl:function(){return[`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\n%%output%%`,"Else\n%%output%%\nEndif"]}},{group:"LOGIC",type:"delay",inputs:[1],outputs:[1],config:[{name:"delay",type:"number"}],toString:function(){return`delay: ${this.config[0].value}`},toDsl:function(){return[`Delay ${this.config[0].value}\n`]}},{group:"ACTIONS",type:"GPIO",inputs:[1],outputs:[1],config:[{name:"gpio",type:"select",values:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]},{name:"value",type:"select",values:[0,1]}],toString:function(){return`GPIO ${this.config[0].value}, ${this.config[1].value}`},toDsl:function(){return[`GPIO,${this.config[0].value},${this.config[1].value}\n`]}},{group:"ACTIONS",type:"Pulse",inputs:[1],outputs:[1],config:[{name:"gpio",type:"select",values:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],value:0},{name:"value",type:"select",values:[0,1],value:1},{name:"unit",type:"select",values:["s","ms"],value:"ms"},{name:"duration",type:"number",value:1e3}],toString:function(){return`Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`},toDsl:function(){return[`${"s"===this.config[2].value?"LongPulse":"Pulse"},${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]}},{group:"ACTIONS",type:"PWM",inputs:[1],outputs:[1],config:[{name:"gpio",type:"select",values:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],value:0},{name:"value",type:"number",value:1023}],toString:function(){return`PWM.GPIO${this.config[0].value} = ${this.config[1].value}`},toDsl:function(){return[`PWM,${this.config[0].value},${this.config[1].value}\n`]}},{group:"ACTIONS",type:"SERVO",inputs:[1],outputs:[1],config:[{name:"gpio",type:"select",values:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],value:0},{name:"servo",type:"select",values:[1,2],value:0},{name:"position",type:"number",value:90}],toString:function(){return`SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`},toDsl:function(){return[`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\n`]}},{group:"ACTIONS",type:"fire event",inputs:[1],outputs:[1],config:[{name:"name",type:"text"}],toString:function(){return`event ${this.config[0].value}`},toDsl:function(){return[`event,${this.config[0].value}\n`]}},{group:"ACTIONS",type:"settimer",inputs:[1],outputs:[1],config:[{name:"timer",type:"select",values:[1,2,3,4,5,6,7,8]},{name:"value",type:"number"}],toString:function(){return`timer${this.config[0].value} = ${this.config[1].value}`},toDsl:function(){return[`timerSet,${this.config[0].value},${this.config[1].value}\n`]}},{group:"ACTIONS",type:"MQTT",inputs:[1],outputs:[1],config:[{name:"topic",type:"text"},{name:"command",type:"text"}],toString:function(){return`mqtt ${this.config[1].value}`},toDsl:function(){return[`Publish ${this.config[0].value},${this.config[1].value}\n`]}},{group:"ACTIONS",type:"UDP",inputs:[1],outputs:[1],config:[{name:"ip",type:"text"},{name:"port",type:"number"},{name:"command",type:"text"}],toString:function(){return`UDP ${this.config[1].value}`},toDsl:function(){return[`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]}},{group:"ACTIONS",type:"HTTP",inputs:[1],outputs:[1],config:[{name:"host",type:"text"},{name:"port",type:"number",value:80},{name:"url",type:"text"}],toString:function(){return`HTTP ${this.config[2].value}`},toDsl:function(){return[`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\n`]}},{group:"ACTIONS",type:"ESPEASY",inputs:[1],outputs:[1],config:[{name:"device",type:"number"},{name:"command",type:"text"}],toString:function(){return`mqtt ${this.config[1].value}`},toDsl:function(){return[`SendTo ${this.config[0].value},${this.config[1].value}\n`]}}];const st={groups:{wifi:{name:"WiFi",configs:{ssid:{name:"SSID",type:"select",options:[],var:"security[0].WifiSSID"},passwd:{name:"Password",type:"password",var:"security[0].WifiKey"}}}}};const at=[{title:"Devices",href:"devices",component:class extends s.a{constructor(e){super(e),this.handleEnableToggle=(e=>{D.set(e.currentTarget.dataset.prop,e.currentTarget.checked?1:0)})}render(e){const t=D.get("tasks");if(t)return Object(s.b)("div",null,t.map((e,t)=>{const n=`#devices/edit/${t}`,a=Ve.find(t=>t.value===e.device),o=a?a.name:"--unknown--",i=`tasks[${t}].enabled`;return Object(s.b)("div",{class:"device"},Object(s.b)("span",{class:"info"},t+1,": ",Object(s.b)("input",{type:"checkbox",defaultChecked:e.enabled,"data-prop":i,onChange:this.handleEnableToggle}),"  ",e.settings.name," [",o,"] ",255!==e.gpio1?`GPIO:${e.gpio1}`:"",Object(s.b)("a",{href:n},"edit")),Object(s.b)("span",{class:"vars"}))}))}},children:[]},{title:"Controllers",href:"controllers",component:class extends s.a{render(e){const t=D.get("controllers"),n=D.get("notifications");return Object(s.b)("div",null," ",Object(s.b)("h3",null,"Controllers"),Object(s.b)("div",null,t.map((e,t)=>{const n=`#controllers/edit/${t}`;return Object(s.b)("div",{class:"device"},Object(s.b)("span",{class:"info"},t+1,": ",e.enabled?Object(s.b)("b",null,"✓"):Object(s.b)("b",null,"✗"),"  [",te.find(t=>t.value===e.protocol).name,"] PORT:",e.settings.port," HOST:",e.settings.host,Object(s.b)("a",{href:n},"edit")))})),Object(s.b)("h3",null,"Notifications"),Object(s.b)("div",null,n.map((e,t)=>{const n=`#controllers/notification/${t}`;return Object(s.b)("div",{class:"device"},Object(s.b)("span",{class:"info"},t+1,": ",e.enabled?Object(s.b)("b",null,"✓"):Object(s.b)("b",null,"✗"),"  [",ge.find(t=>t.value===e.type).name,"] PORT:",e.settings.port," HOST:",e.settings.host,Object(s.b)("a",{href:n},"edit")))})))}},children:[]},{title:"Automation",href:"rules",component:class extends s.a{constructor(e){super(e),this.nodes=nt}render(e){return Object(s.b)("div",{class:"editor",ref:e=>this.element=e})}componentDidMount(){V().then(e=>{e.nodes.forEach(e=>nt.unshift(e));const t=nt.find(e=>"if/else"===e.type);t.config[0].loaded||(e.vars.forEach(e=>t.config[0].values.push(e)),t.config[0].loaded=!0),this.chart=new tt.a(this.element,nt,{onSave:(e,t)=>{K(e),Q(t)}}),Y().then(e=>{this.chart.loadConfig(e)})})}},class:"full",children:[]},{title:"Config",href:"config",component:class extends s.a{render(e){ze.onSave=(e=>{D.set("config",e),window.location.href="#devices"});const t=D.get("config");return Object(s.b)(Z,{config:ze,selected:t})}},children:[{title:"Hardware",href:"config/hardware",component:class extends s.a{render(e){const t=D.get("hardware");return fe.onSave=(e=>{D.set("hardware",e),window.location.href="#devices"}),Object(s.b)(Z,{config:fe,selected:t})}}},{title:"Advanced",href:"config/advanced",component:class extends s.a{render(e){return Xe.onSave=(e=>{D.set("config",e),window.location.href="#devices"}),Object(s.b)(Z,{config:Xe,selected:D.get("config")})}}},{title:"Rules",href:"config/rules",component:class extends s.a{constructor(e){super(e),this.state={selected:Ke[0]},this.selectionChanged=(e=>{this.setState({selected:Ke[e.currentTarget.value]})}),this.saveRule=(()=>{const e=new FormData;e.append("set",this.state.selected.index),e.append("rules",this.text.value),fetch("/rules",{method:"POST",body:e}).then(e=>{console.log("succesfully saved"),console.log(e.text())})}),this.fetch()}render(e){return Object(s.b)("div",null,Object(s.b)("div",null,Object(s.b)("select",{onChange:this.selectionChanged},Object(s.b)("option",{value:"0"},"Rule 1"),Object(s.b)("option",{value:"1"},"Rule 2"),Object(s.b)("option",{value:"2"},"Rule 3"),Object(s.b)("option",{value:"3"},"Rule 4"))),Object(s.b)("form",null,Object(s.b)("textarea",{style:"width: 100%; height: 400px",ref:e=>this.text=e}),Object(s.b)("div",null,Object(s.b)("button",{type:"button",onClick:this.saveRule},"Save"))))}async fetch(){const e=await fetch(this.state.selected.file).then(e=>e.text());this.text.value=e}async componentDidUpdate(){this.fetch()}}},{title:"Save",href:"config/save",action:H},{title:"Load",href:"config/load",component:class extends s.a{constructor(e){super(e),this.saveForm=(()=>{q(this.file.files[0])})}render(e){return Object(s.b)("form",{class:"pure-form pure-form-aligned"},Object(s.b)("div",{class:"pure-control-group"},Object(s.b)("label",{for:"file",class:"pure-checkbox"},"File:"),Object(s.b)("input",{id:"file",type:"file",ref:e=>this.file=e}),Object(s.b)("button",{type:"button",onClick:this.saveForm},"upload")))}}},{title:"Reboot",href:"config/reboot",component:class extends s.a{render(e){return Object(s.b)("div",null,"ESPEasy is rebooting ... please wait a while, this page will auto refresh.")}componentDidMount(){F.show(),fetch("/?cmd=reboot").then(()=>{setTimeout(()=>{F.hide(),window.location.hash="#devices",window.location.reload()},5e3)})}}},{title:"Factory Reset",href:"config/factory",component:class extends s.a{render(e){return Ye.onSave=(e=>{const t=new FormData;e.keep.unit&&t.append("kun","on"),e.keep.wifi&&t.append("kw","on"),e.keep.network&&t.append("knet","on"),e.keep.ntp&&t.append("kntp","on"),e.keep.log&&t.append("klog","on"),t.append("fdm",e.load.config),t.append("savepref","Save Preferences"),fetch("/factoryreset",{method:"POST",body:t}).then(()=>{t.delete("savepref"),t.append("performfactoryreset","Factory Reset"),fetch("/factoryreset",{method:"POST",body:t}).then(()=>{setTimeout(()=>{window.location.href="#devices"},5e3)},e=>{})},e=>{})}),Object(s.b)(Z,{config:Ye,selected:Qe})}}}]},{title:"Tools",href:"tools",component:class extends s.a{constructor(e){super(e),this.history="",this.sendCommand=(e=>{fetch(`/control?cmd=${this.cmd.value}`).then(e=>e.text()).then(e=>{this.cmdOutput.value=e})})}fetch(){fetch("/logjson").then(e=>e.json()).then(e=>{e.Log.Entries.map(e=>{this.history+=`${new Date(e.timestamp).toLocaleTimeString()} ${e.text}
`,this.log.innerHTML=this.history,this.log.scrollTop=this.log.scrollHeight})})}render(e){return Object(s.b)("div",null,Object(s.b)("div",{style:"width: 100%; height: 200px; overflow-y: scroll;",ref:e=>this.log=e},"loading logs ..."),Object(s.b)("div",null,"Command: ",Object(s.b)("input",{type:"text",ref:e=>this.cmd=e}),Object(s.b)("button",{type:"button",onClick:this.sendCommand},"send")),Object(s.b)("textarea",{style:"width: 100%; height: 200px",ref:e=>this.cmdOutput=e}))}componentDidMount(){this.interval=setInterval(()=>{this.fetch()},1e3)}componentWillUnmount(){this.interval&&clearInterval(this.interval)}},children:[{title:"Discover",href:"tools/discover",component:class extends s.a{constructor(e){super(e),this.state={devices:[]},this.scani2c=(()=>{fetch("/i2cscanner").then(e=>e.json()).then(e=>{this.setState({devices:e})})}),this.scanwifi=(()=>{fetch("/wifiscanner").then(e=>e.json()).then(e=>{this.setState({devices:e})})})}render(e){return Object(s.b)("div",null,Object(s.b)("div",null,Object(s.b)("button",{type:"button",onClick:this.scani2c},"Scan I2C"),Object(s.b)("button",{type:"button",onClick:this.scanwifi},"Scan WiFi")),Object(s.b)("table",null,this.state.devices.map(e=>Object(s.b)("tr",{class:"device"},Object(s.b)("td",{class:"info"},JSON.stringify(e))))))}}},{title:"Info",href:"tools/sysinfo",component:class extends s.a{constructor(e){super(e),this.state={device:e.params[0],vars:{}}}fetch(){fetch("/sysinfo_json").then(e=>e.json()).then(e=>{this.setState({vars:e})})}render(e){return Object(s.b)("form",{class:"pure-form pure-form-aligned"},Object.keys(this.state.vars).map(e=>{const t=this.state.vars[e];return Object(s.b)("fieldset",null,Object(s.b)("label",null,e),Object.keys(t).map((e,n)=>{const a=t[e];return Object(s.b)("div",{class:"pure-control-group"},Object(s.b)("label",{class:"pure-checkbox"},e),Object(s.b)("input",{readOnly:!0,type:"text",value:a}))}))}))}componentDidMount(){this.fetch()}}},{title:"Update",href:"tools/update",component:class extends s.a{constructor(e){super(e),this.state={progress:0},this.saveForm=(()=>{F.show();const e=new FormData;e.append("file",this.file.files[0]),e.append("user","hubot"),z("/update",{method:"POST",body:e,onProgress:e=>{const t=100*e.loaded/e.total;this.setState({progress:t})}}).then(()=>{window.location.href="#config/reboot"})})}render(e){return Object(s.b)("form",{class:"pure-form pure-form-aligned"},Object(s.b)("div",{class:"pure-control-group"},Object(s.b)("label",{for:"file",class:"pure-checkbox"},"Firmware:"),Object(s.b)("input",{id:"file",type:"file",ref:e=>this.file=e}),Object(s.b)("button",{type:"button",onClick:this.saveForm},"upload"),this.state.progress?Object(s.b)("span",null," ",Math.round(this.state.progress),"%"):null))}}},{title:"Filesystem",href:"tools/fs",component:class extends s.a{constructor(e){super(e),this.state={files:[]},this.saveForm=(async()=>{F.show(),await q(this.file.files[0]),await fetch()}),this.deleteFile=(e=>{const t=e.currentTarget.dataset.name;X(t).then(()=>this.fetch())})}fetch(){fetch("/filelist_json").then(e=>e.json()).then(e=>{this.setState({files:e})})}render(e){return F.hide(),Object(s.b)("div",null,Object(s.b)("form",{class:"pure-form pure-form-aligned"},Object(s.b)("div",{class:"pure-control-group"},Object(s.b)("label",{for:"file",class:"pure-checkbox"},"File:"),Object(s.b)("input",{id:"file",type:"file",ref:e=>this.file=e}),Object(s.b)("button",{type:"button",onClick:this.saveForm},"upload"))),Object(s.b)("table",{class:"pure-table"},Object(s.b)("thead",null,Object(s.b)("tr",null,Object(s.b)("th",null,"File"),Object(s.b)("th",null,"Size"),Object(s.b)("th",null))),Object(s.b)("tbody",null,this.state.files.map(e=>{const t=`/${e.fileName}`;return Object(s.b)("tr",null,Object(s.b)("td",null,Object(s.b)("a",{href:t},e.fileName)),Object(s.b)("td",null,e.size),Object(s.b)("td",null,e.fileName.endsWith(".dat")?null:Object(s.b)("button",{type:"button",onClick:this.deleteFile,"data-name":e.fileName},"X")))}))))}componentDidMount(){this.fetch()}}}]}],ot=[{title:"Edit Controller",href:"controllers/edit",component:class extends s.a{constructor(e){super(e),this.config=D.get(`controllers[${e.params[0]}]`),this.state={protocol:this.config.protocol}}render(e){const t=ue(this.state.protocol);return t.groups.settings.configs.protocol.onChange=(e=>{this.setState({protocol:e.currentTarget.value}),pe(e.currentTarget.value,this.config)}),Object(s.b)(Z,{config:t,selected:this.config})}}},{title:"Edit Notification",href:"controllers/notification",component:class extends s.a{constructor(e){super(e),this.config=D.get(`notifications[${e.params[0]}]`),this.state={type:this.config.type}}render(e){const t=be(this.state.type);return t.groups.settings.configs.type.onChange=(e=>{this.setState({type:e.currentTarget.value}),ye(e.currentTarget.value,this.config)}),t.onSave=(t=>{D.set(`notifications[${e.params[0]}]`,t),window.location.href="#controllers"}),Object(s.b)(Z,{config:t,selected:this.config})}}},{title:"Edit Device",href:"devices/edit",component:class extends s.a{constructor(e){super(e),this.config=D.get(`tasks[${e.params[0]}]`),this.state={device:this.config.device}}render(e){const t=Ze(this.state.device);return t||(alert("something went wrong, cant edit device"),window.location.href="#devices"),t.groups.settings.configs.device.onChange=(e=>{this.setState({device:e.currentTarget.value}),et(e.currentTarget.value,this.config)}),t.onSave=(t=>{D.set(`tasks[${e.params[0]}]`,t),window.location.href="#devices"}),Object(s.b)(Z,{config:t,selected:this.config})}}},{title:"Save to Flash",href:"tools/diff",component:class extends s.a{constructor(e){super(e),this.diff=D.diff(),this.stage=0,this.calculateByteDiff=(()=>{this.data=H(!1),this.bytediffcount=0,this.bytediff=Array.from(new Uint8Array(this.data)),this.bytediff=this.bytediff.map((e,t)=>{const n=D.binary[t];return e!==n?(this.bytediffcount++,`${n.toString(16)}:${e.toString(16)} `):`${e.toString(16)}`}),this.bytediff=this.bytediff.join(" ")}),this.calculateByteDiff(),this.applyChanges=(()=>{if(0===this.stage)return this.diff.map(e=>{const t=this.form.elements[e.path];t.checked||D.set(t.name,e.val1)}),D.apply(),this.diff=D.diff(),this.calculateByteDiff(),void(this.stage=1);F.show(),q("config.dat",this.data).then(()=>{this.stage=0,window.location.href="#config/reboot"})})}render(e){return this.bytediff&&1===this.stage?Object(s.b)("div",null,Object(s.b)("div",{dangerouslySetInnerHTML:{__html:this.bytediff}}),Object(s.b)("button",{type:"button",onClick:this.applyChanges},"APPLY (bytes: ",this.bytediffcount,")")):Object(s.b)("div",null,Object(s.b)("div",null,"byte diff: ",this.bytediffcount),Object(s.b)("form",{ref:e=>this.form=e},this.diff.map(e=>Object(s.b)("div",null,Object(s.b)("b",null,e.path),": before: ",Object(s.b)("b",null,JSON.stringify(e.val1))," now:",Object(s.b)("b",null,JSON.stringify(e.val2))," ",Object(s.b)("input",{name:e.path,type:"checkbox",defaultChecked:!0}))),Object(s.b)("button",{type:"button",onClick:this.applyChanges},"APPLY")))}}},{title:"Setup",href:"config/setup",component:class extends s.a{constructor(e){super(e),this.state={devices:[]},F.show(),this.save=(()=>{F.show();const e=new FormData;e.append("ssid",this.config.security[0].WifiSSID),e.append("pass",this.config.security[0].WifiKey),fetch("/setup",{method:"POST",data:e}).then(()=>{setTimeout(()=>{F.hide(),window.location.href="/"},5e3)})})}render(e){st.groups.wifi.configs.ssid.options=this.state.devices.map(e=>({name:e.ssid,value:e.ssd}));const t=D.get("config");return Object(s.b)("div",null,Object(s.b)(Z,{config:st,selected:t}),Object(s.b)("button",{type:"button",onClick:this.save},"CONTINUE"))}componentDidMount(){fetch("/wifiscanner").then(e=>e.json()).then(e=>{this.setState({devices:e}),F.hide()})}}}],it=new class{constructor(){this.menus=[],this.routes=[],this.addMenu=(e=>{this.menus.push(e),this.addRoute(e)}),this.addRoute=(e=>{this.routes.push(e),e.children&&e.children.forEach(e=>this.routes.push(e))})}};ot.forEach(it.addRoute),at.forEach(it.addMenu);const rt=["/dash.js.gz"];window.getPluginAPI=(()=>({settings:D,loader:F,menu:it,espeasy:J}));const lt=async()=>Promise.all(rt.map(async e=>(e=>new Promise(t=>{var n=document.createElement("script");n.src=e,n.onreadystatechange=t,n.onload=t,n.onerror=t,document.head.appendChild(n)}))(e)));_.init({});const ct=()=>{const e=window.location.href.match(/#(.*)$/);return(e=>e.toString().replace(/\/$/,"").replace(/^\//,""))(e?e[1]:"")};class pt extends s.a{constructor(){super(),this.state={menuActive:!1,menu:it.menus[0],page:it.menus[0],changed:!1},this.menuToggle=(()=>{this.setState({menuActive:!this.state.menuActive})})}render(e,t){const n=ct().split("/").slice(2),a=this.state.menuActive?"active":"";return Object(s.b)("div",{id:"layout",class:a},Object(s.b)("a",{id:"menuLink",class:"menu-link",onClick:this.menuToggle},Object(s.b)("span",null)),Object(s.b)(T,{menus:it.menus,selected:t.menu}),Object(s.b)(w,{page:t.page,params:n,changed:this.state.changed}))}componentDidMount(){F.hide();let e="";this.interval=setInterval(()=>{const t=ct(),n=D.diff();if(this.state.changed!==!!n.length&&this.setState({changed:!this.state.changed}),e!==t){const n=(e=t).split("/"),s=it.menus.find(e=>e.href===n[0]),a=n.length>1?it.routes.find(e=>e.href===`${n[0]}/${n[1]}`):s;a&&this.setState({page:a,menu:s,menuActive:!1})}},100)}componentWillUnmount(){}}(async()=>{await(()=>fetch("config.dat").then(e=>e.arrayBuffer()).then(async e=>{const t=I(e,E);[...Array(12)].map((n,s)=>{t.tasks[s].settings=I(e,A,4096+2048*s),t.tasks[s].extra=I(e,A,5120+2048*s)}),[...Array(3)].map((n,s)=>{t.controllers[s].settings=I(e,L,27648+2048*s),t.controllers[s].extra=I(e,L,28672+2048*s)});const n=await fetch("notification.dat").then(e=>e.arrayBuffer());[...Array(3)].map((e,s)=>{t.notifications[s].settings=I(n,R,1024*s)});const s=await fetch("security.dat").then(e=>e.arrayBuffer());return t.config.security=[...Array(3)].map((e,t)=>I(s,G,1024*t)),{response:e,settings:t}}).then(e=>{D.init(e.settings),D.binary=new Uint8Array(e.response),console.log(e.settings)}))(),await lt(),Object(s.c)(Object(s.b)(pt,null),document.body)})()}]);
//# sourceMappingURL=app.js.map
\ No newline at end of file
diff --git a/build/app.js.map b/build/app.js.map
index 41cc84e..f37de40 100644
--- a/build/app.js.map
+++ b/build/app.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/mini-toastr/mini-toastr.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/app.js","webpack:///./src/components/espeasy_p2p/index.js","webpack:///./src/components/form/index.js","webpack:///./src/components/menu/index.js","webpack:///./src/components/page/index.js","webpack:///./src/conf/config.dat.js","webpack:///./src/devices/10_light_lux.js","webpack:///./src/devices/11_pme.js","webpack:///./src/devices/12_lcd.js","webpack:///./src/devices/13_hcsr04.js","webpack:///./src/devices/14_si7021.js","webpack:///./src/devices/15_tls2561.js","webpack:///./src/devices/17_pn532.js","webpack:///./src/devices/18_dust.js","webpack:///./src/devices/19_pcf8574.js","webpack:///./src/devices/1_input_switch.js","webpack:///./src/devices/20_ser2net.js","webpack:///./src/devices/21_level_control.js","webpack:///./src/devices/22_pca9685.js","webpack:///./src/devices/23_oled1306.js","webpack:///./src/devices/24_mlx90614.js","webpack:///./src/devices/25_ads1115.js","webpack:///./src/devices/26_system_info.js","webpack:///./src/devices/27_ina219.js","webpack:///./src/devices/28_bmx280.js","webpack:///./src/devices/29_mqtt_domoticz.js","webpack:///./src/devices/2_analog_input.js","webpack:///./src/devices/30_bmp280.js","webpack:///./src/devices/31_sht1x.js","webpack:///./src/devices/32_ms5611.js","webpack:///./src/devices/33_dummy_device.js","webpack:///./src/devices/34_dht12.js","webpack:///./src/devices/36_sh1106.js","webpack:///./src/devices/37_mqtt_import.js","webpack:///./src/devices/38_neopixel_basic.js","webpack:///./src/devices/39_thermocouple.js","webpack:///./src/devices/3_generic_pulse.js","webpack:///./src/devices/41_neopixel_clock.js","webpack:///./src/devices/42_neopixel_candle.js","webpack:///./src/devices/43_output_clock.js","webpack:///./src/devices/44_wifi_gateway.js","webpack:///./src/devices/49_mhz19.js","webpack:///./src/devices/4_ds18b20.js","webpack:///./src/devices/52_senseair.js","webpack:///./src/devices/56_sds011.js","webpack:///./src/devices/59_rotary_encoder.js","webpack:///./src/devices/5_dht.js","webpack:///./src/devices/63_ttp229.js","webpack:///./src/devices/6_bmp085.js","webpack:///./src/devices/7_pcf8591.js","webpack:///./src/devices/8_rfid.js","webpack:///./src/devices/9_io_mcp.js","webpack:///./src/devices/_defs.js","webpack:///./src/devices/index.js","webpack:///./src/lib/espeasy.js","webpack:///./src/lib/floweditor.js","webpack:///./src/lib/helpers.js","webpack:///./src/lib/loader.js","webpack:///./src/lib/menu.js","webpack:///./src/lib/node_definitions.js","webpack:///./src/lib/parser.js","webpack:///./src/lib/plugins.js","webpack:///./src/lib/settings.js","webpack:///./src/pages/config.advanced.js","webpack:///./src/pages/config.hardware.js","webpack:///./src/pages/config.js","webpack:///./src/pages/controllers.edit.js","webpack:///./src/pages/controllers.js","webpack:///./src/pages/controllers.notifications.js","webpack:///./src/pages/devices.edit.js","webpack:///./src/pages/devices.js","webpack:///./src/pages/diff.js","webpack:///./src/pages/discover.js","webpack:///./src/pages/factory_reset.js","webpack:///./src/pages/fs.js","webpack:///./src/pages/index.js","webpack:///./src/pages/load.js","webpack:///./src/pages/reboot.js","webpack:///./src/pages/rules.editor.js","webpack:///./src/pages/rules.js","webpack:///./src/pages/setup.js","webpack:///./src/pages/tools.js","webpack:///./src/pages/tools.sysvars.js","webpack:///./src/pages/update.js"],"names":["miniToastr","init","clearSlashes","path","toString","replace","getFragment","match","window","location","href","fragment","App","Component","constructor","state","menuActive","menu","menus","page","changed","menuToggle","setState","render","props","params","split","slice","active","componentDidMount","loader","hide","current","fn","newFragment","diff","settings","length","parts","m","find","routes","route","interval","setInterval","componentWillUnmount","load","loadConfig","loadPlugins","document","body","EspEaspP2PComponent","nodes","refresh","fetch","then","res","json","map","node","first","name","ip","Form","onChange","id","prop","config","e","val","form","elements","value","type","checked","parseFloat","isNaN","parseInt","startsWith","set","selected","renderConfig","varName","min","max","options","option","Object","clickEvent","click","renderConfigGroup","configs","values","configArray","Array","isArray","conf","i","varId","var","get","if","CustomComponent","component","renderGroup","group","keys","getKeys","key","groups","ref","Menu","renderMenuItem","action","title","children","child","open","Page","PageComponent","pagetitle","class","TASKS_MAX","NOTIFICATION_MAX","CONTROLLER_MAX","PLUGIN_CONFIGVAR_MAX","PLUGIN_CONFIGFLOATVAR_MAX","PLUGIN_CONFIGLONGVAR_MAX","PLUGIN_EXTRACONFIGVAR_MAX","NAME_FORMULA_LENGTH_MAX","VARS_PER_TASK","configDatParseConfig","signed","x","flat","TaskSettings","ControllerSettings","NotificationSettings","SecuritySettings","response","arrayBuffer","parseConfig","tasks","extra","controllers","notificationResponse","notifications","securityResponse","security","binary","Uint8Array","console","log","ii","saveConfig","save","buffer","ArrayBuffer","writeConfig","saveData","bufferNotifications","bufferSecurity","a","createElement","appendChild","style","data","fileName","blob","Blob","url","URL","createObjectURL","download","revokeObjectURL","i2c_address","measurmentMode","bh1750","defaults","sensor","mode","send_to_sleep","vals","pme","port","displaySize","lcdCommand","lcd2004","size","line1","line2","line3","line4","button","pins","timeout","command","units","filters","hcsr04","gpio1","gpio2","treshold","max_distance","unit","filter","filter_size","resolution","si7021","tls2561","gain","pn532","dust","eventTypes","pcf8574","gpio4","inversed","send_boot_state","advanced","debounce","dblclick","dblclick_interval","longpress","longpress_interval","safe_button","inputSwitch","pullup","gpio","switch_type","switch_button_type","serialConfig","eventProcessing","ser2net","baudrate","serial_config","reset_after_boot","event_processing","sensorModel","levelControl","check_task","getTasks","check_value","getTaskValues","level","hysteresis","v","pca9685","frequency","range","oled1306","rotation","font","line5","line6","line7","line8","mlx90614","vars","gainOptions","multiplexerOptions","ads1115","multiplexer","enabled","point1","point2","indicator","systemInfo","indicator1","measurmentRange","measurmentType","ina219","bmx280","altitude","offset","mqttDomoticz","idx","analogInput","oversampling","bmp280","sht1x","ms5611","dummyDevice","dht12","sh1106","mqttImport","neopixelBasic","leds","thermocouple","modeTypes","counterTypes","genericPulse","counter_type","mode_type","neopixelClock","R","G","B","neopixelCandle","clock","event1","event2","event3","event4","event5","event6","event7","event8","parity","wifiGateway","data_bits","stop_bits","mhz19","ds18b20","senseAir","sds011","rotaryEncoder","gpio3","limit_min","limit_max","dht","ttp229","scancode","bmp085","pcf8591","weigandType","rfidWeigand","inputMcp","task","index","devices","fields","sort","b","localeCompare","getJsonStat","loadDevices","Sensors","getConfigNodes","device","taskValues","TaskValues","push","TaskName","Name","result","TaskNumber","Type","inputs","outputs","indent","comparison","toDsl","fnNames","fnName","findIndex","getVariables","urls","Promise","all","stat","System","Value","getDashboardConfigNodes","fetchProgress","opts","rej","xhr","XMLHttpRequest","method","k","headers","setRequestHeader","onload","target","responseText","onerror","upload","onProgress","onprogress","send","storeFile","filename","show","file","File","formData","FormData","append","success","error","message","deleteFile","storeDashboardConfig","loadDashboardConfig","storeRuleConfig","loadRuleConfig","storeRule","rule","color","saveChart","renderedNodes","triggers","trigger","walkRule","t","o","out","lines","line","input","nodeObject","c","position","y","loadChart","chart","from","n","configNode","NodeUI","canvas","cfg","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","clientWidth","clientHeight","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","r","rules","ruleset","padding","outI","subrule","trim","join","includes","dNd","enableNativeDrag","nodeElement","draggable","ondragstart","ev","dataTransfer","setData","enableNativeDrop","ondragover","preventDefault","ondrop","fill","createElementNS","setAttribute","setAttributeNS","tension","delta","hx1","hy1","hx2","hy2","Node","assign","toHtml","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","onMouseUp","removeEventListener","addEventListener","handleDblClickEvent","showConfigBox","text","innerHTML","textContent","handleRightClickEvent","parentNode","removeChild","indexOf","splice","destroy","stopPropagation","className","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","remove","inputRect","ondblclick","bind","getCfgUI","template","getSelectOptions","content","cloneNode","onclose","configBox","querySelectorAll","okButton","getElementById","cancelButton","onclick","forms","cfgUI","FlowEditor","onSave","readOnly","debug","nodeConfig","getData","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","object","hasOwnProperty","Loader","querySelector","classList","add","setTimeout","Menus","addMenu","addRoute","forEach","DevicesPage","ControllersPage","RulesEditorPage","ConfigPage","ConfigHardwarePage","ConfigAdvancedPage","RulesPage","LoadPage","RebootPage","FactoryResetPage","ToolsPage","DiscoverPage","SysVarsPage","UpdatePage","FSPage","ControllerEditPage","ControllerNotificationsPage","DevicesEditPage","DiffPage","SetupPage","DataParser","view","DataView","bitbyte","bitbytepos","pad","nr","bit","write","byte","int16","int32","float","setFloat32","getFloat32","bytes","ints","longs","floats","string","code","charCodeAt","String","fromCharCode","apply","p","PLUGINS","dynamicallyLoadScript","resolve","script","src","onreadystatechange","head","getPluginAPI","espeasy","plugin","obj1","obj2","val1","val2","Settings","obj","warn","stored","settings1","logLevelOptions","formConfig","oldengine","mqtt","retain_flag","useunitname","changeclientid","ntp","host","dst","long","lat","syslog_ip","syslog_level","syslog_facility","serial_level","web_level","serial","experimental","ip_octet","WDI2CAddress","ssdp","ConnectionFailuresThreshold","WireClockStretchLimit","pinState","led","inverse","reset","pin","i2c","sda","scl","spi","ipBlockLevel","general","unitname","unitnr","appendunit","password","wifi","ssid","passwd","fallbackssid","fallbackpasswd","wpaapmode","clientIP","blocklevel","lowerrange","upperrange","IP","gw","subnet","dns","sleep","awaketime","sleeptime","sleeponfailiure","protocols","baseFields","hostname","minimal_time_between","max_queue_depth","max_retry","delete_oldest","must_check_reply","client_timeout","user","subscribe","publish","lwtTopicField","MQTT_lwt_topic","lwt_message_connect","lwt_message_disconnect","baseDefaults","getDefaults","public","Custom","setDefaultConfig","getFormConfig","additionalFields","additionalGroups","Number","global","protocol","currentTarget","editUrl","types","domain","sender","receiver","subject","pass","pin1","d","dataAcquisitionForm","send1","send2","send3","idx1","idx2","idx3","reduce","acc","groupKey","configKey","defaultConfig","alert","handleEnableToggle","dataset","deviceType","enabledProp","stage","calculateByteDiff","bytediffcount","bytediff","applyChanges","__html","change","formula","scani2c","scanwifi","keep","network","delete","files","saveForm","fileList","endsWith","hash","reload","unshift","ifElseNode","loaded","selectionChanged","saveRule","componentDidUpdate","WifiSSID","WifiKey","ssd","history","sendCommand","cmd","cmdOutput","Log","Entries","Date","timestamp","toLocaleTimeString","scrollTop","scrollHeight","clearInterval","v1","value1","progress","perc","total","Math","round"],"mappings":"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;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEO;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC,uBAAuB,SAAS;AAChC,sBAAsB,SAAS;AAC/B,yBAAyB,SAAS;AAClC,wBAAwB,MAAM;AAC9B,uBAAuB,KAAK;AAC5B,0BAA0B,QAAQ;AAClC,uBAAuB,KAAK;AAC5B;;AAEP;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA,oDAAoD;AACpD,eAAe,OAAO;AACtB;;AAEA,wCAAwC;;AAExC;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEO;AACP,UAAU,2BAA2B;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,mBAAmB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP,YAAY,cAAc;AAC1B;AACA,OAAO;AACP,YAAY,WAAW;AACvB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,YAAY;AACrB;AACA,KAAK;AACL,SAAS,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB,GAAG,mBAAmB;;AAE7E;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA,+BAA+B;AAC/B;AACA;;AAEe,yE;;;;;;;;;;;;AC3Of;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/app.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","export function fadeOut (element, cb) {\n if (element.style.opacity && element.style.opacity > 0.05) {\n element.style.opacity = element.style.opacity - 0.05\n } else if (element.style.opacity && element.style.opacity <= 0.1) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n if (cb) cb()\n }\n } else {\n element.style.opacity = 0.9\n }\n setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30\n )\n}\n\nexport const LIB_NAME = 'mini-toastr'\n\nexport const ERROR = 'error'\nexport const WARN = 'warn'\nexport const SUCCESS = 'success'\nexport const INFO = 'info'\nexport const CONTAINER_CLASS = LIB_NAME\nexport const NOTIFICATION_CLASS = `${LIB_NAME}__notification`\nexport const TITLE_CLASS = `${LIB_NAME}-notification__title`\nexport const ICON_CLASS = `${LIB_NAME}-notification__icon`\nexport const MESSAGE_CLASS = `${LIB_NAME}-notification__message`\nexport const ERROR_CLASS = `-${ERROR}`\nexport const WARN_CLASS = `-${WARN}`\nexport const SUCCESS_CLASS = `-${SUCCESS}`\nexport const INFO_CLASS = `-${INFO}`\nexport const DEFAULT_TIMEOUT = 3000\n\nconst EMPTY_STRING = ''\n\nexport function flatten (obj, into, prefix) {\n into = into || {}\n prefix = prefix || EMPTY_STRING\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const prop = obj[k]\n if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {\n flatten(prop, into, prefix + k + ' ')\n } else {\n if (into[prefix] && typeof into[prefix] === 'object') {\n into[prefix][k] = prop\n } else {\n into[prefix] = {}\n into[prefix][k] = prop\n }\n }\n }\n }\n\n return into\n}\n\nexport function makeCss (obj) {\n const flat = flatten(obj)\n let str = JSON.stringify(flat, null, 2)\n str = str.replace(/\"([^\"]*)\": {/g, '$1 {')\n .replace(/\"([^\"]*)\"/g, '$1')\n .replace(/(\\w*-?\\w*): ([\\w\\d .#]*),?/g, '$1: $2;')\n .replace(/},/g, '}\\n')\n .replace(/ &([.:])/g, '$1')\n\n str = str.substr(1, str.lastIndexOf('}') - 1)\n\n return str\n}\n\nexport function appendStyles (css) {\n let head = document.head || document.getElementsByTagName('head')[0]\n let styleElem = makeNode('style')\n styleElem.id = `${LIB_NAME}-styles`\n styleElem.type = 'text/css'\n\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css\n } else {\n styleElem.appendChild(document.createTextNode(css))\n }\n\n head.appendChild(styleElem)\n}\n\nexport const config = {\n types: {ERROR, WARN, SUCCESS, INFO},\n animation: fadeOut,\n timeout: DEFAULT_TIMEOUT,\n icons: {},\n appendTarget: document.body,\n node: makeNode(),\n allowHtml: false,\n style: {\n [`.${CONTAINER_CLASS}`]: {\n position: 'fixed',\n 'z-index': 99999,\n right: '12px',\n top: '12px'\n },\n [`.${NOTIFICATION_CLASS}`]: {\n cursor: 'pointer',\n padding: '12px 18px',\n margin: '0 0 6px 0',\n 'background-color': '#000',\n opacity: 0.8,\n color: '#fff',\n 'border-radius': '3px',\n 'box-shadow': '#3c3b3b 0 0 12px',\n width: '300px',\n [`&.${ERROR_CLASS}`]: {\n 'background-color': '#D5122B'\n },\n [`&.${WARN_CLASS}`]: {\n 'background-color': '#F5AA1E'\n },\n [`&.${SUCCESS_CLASS}`]: {\n 'background-color': '#7AC13E'\n },\n [`&.${INFO_CLASS}`]: {\n 'background-color': '#4196E1'\n },\n '&:hover': {\n opacity: 1,\n 'box-shadow': '#000 0 0 12px'\n }\n },\n [`.${TITLE_CLASS}`]: {\n 'font-weight': '500'\n },\n [`.${MESSAGE_CLASS}`]: {\n display: 'inline-block',\n 'vertical-align': 'middle',\n width: '240px',\n padding: '0 12px'\n }\n }\n}\n\nexport function makeNode (type = 'div') {\n return document.createElement(type)\n}\n\nexport function createIcon (node, type, config) {\n const iconNode = makeNode(config.icons[type].nodeType)\n const attrs = config.icons[type].attrs\n\n for (const k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n iconNode.setAttribute(k, attrs[k])\n }\n }\n\n node.appendChild(iconNode)\n}\n\nexport function addElem (node, text, className, config) {\n const elem = makeNode()\n elem.className = className\n if (config.allowHtml) {\n elem.innerHTML = text\n } else {\n elem.appendChild(document.createTextNode(text))\n }\n node.appendChild(elem)\n}\n\nexport function getTypeClass (type) {\n if (type === SUCCESS) return SUCCESS_CLASS\n if (type === WARN) return WARN_CLASS\n if (type === ERROR) return ERROR_CLASS\n if (type === INFO) return INFO_CLASS\n\n return EMPTY_STRING\n}\n\nconst miniToastr = {\n config,\n isInitialised: false,\n showMessage (message, title, type, timeout, cb, overrideConf) {\n const config = {}\n Object.assign(config, this.config)\n Object.assign(config, overrideConf)\n\n const notificationElem = makeNode()\n notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`\n\n notificationElem.onclick = function () {\n config.animation(notificationElem, null)\n }\n\n if (title) addElem(notificationElem, title, TITLE_CLASS, config)\n if (config.icons[type]) createIcon(notificationElem, type, config)\n if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)\n\n config.node.insertBefore(notificationElem, config.node.firstChild)\n setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout\n )\n\n if (cb) cb()\n return this\n },\n init (aConfig) {\n const newConfig = {}\n Object.assign(newConfig, config)\n Object.assign(newConfig, aConfig)\n this.config = newConfig\n\n const cssStr = makeCss(newConfig.style)\n appendStyles(cssStr)\n\n newConfig.node.id = CONTAINER_CLASS\n newConfig.node.className = CONTAINER_CLASS\n newConfig.appendTarget.appendChild(newConfig.node)\n\n Object.keys(newConfig.types).forEach(v => {\n this[newConfig.types[v]] = function (message, title, timeout, cb, config) {\n this.showMessage(message, title, newConfig.types[v], timeout, cb, config)\n return this\n }.bind(this)\n }\n )\n\n this.isInitialised = true\n\n return this\n },\n setIcon (type, nodeType = 'i', attrs = []) {\n attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS\n\n this.config.icons[type] = {nodeType, attrs}\n }\n}\n\nexport default miniToastr","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { h, render, Component } from 'preact';\nimport miniToastr from 'mini-toastr';\nimport { Menu } from './components/menu';\nimport { Page } from './components/page';\nimport { loadConfig } from './conf/config.dat';\nimport { settings } from './lib/settings';\nimport { loader } from './lib/loader';\nimport { loadPlugins } from './lib/plugins';\nimport { menu } from './lib/menu';\n\nminiToastr.init({})\n\nconst clearSlashes = path => {\n return path.toString().replace(/\\/$/, '').replace(/^\\//, '');\n};\n\nconst getFragment = () => {\n const match = window.location.href.match(/#(.*)$/);\n const fragment = match ? match[1] : '';\n return clearSlashes(fragment);\n};\n\nclass App extends Component {\n constructor() {\n super();\n this.state = {\n menuActive: false,\n menu: menu.menus[0],\n page: menu.menus[0],\n changed: false,\n }\n\n this.menuToggle = () => {\n this.setState({ menuActive: !this.state.menuActive });\n }\n }\n\n render(props, state) {\n \n const params = getFragment().split('/').slice(2);\n const active = this.state.menuActive ? 'active' : '';\n return (\n \n );\n }\n\n componentDidMount() {\n loader.hide();\n\n let current = '';\n const fn = () => {\n const newFragment = getFragment();\n const diff = settings.diff();\n if(this.state.changed !== !!diff.length) {\n this.setState({changed: !this.state.changed})\n }\n if(current !== newFragment) {\n current = newFragment;\n const parts = current.split('/');\n const m = menu.menus.find(menu => menu.href === parts[0]);\n const page = parts.length > 1 ? menu.routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m;\n if (page) {\n this.setState({ page, menu: m, menuActive: false });\n }\n }\n }\n this.interval = setInterval(fn, 100);\n }\n\n componentWillUnmount() {}\n}\n\nconst load = async () => {\n await loadConfig();\n await loadPlugins();\n render( , document.body);\n}\n\nload();","import { h, Component } from 'preact';\r\n\r\nexport class EspEaspP2PComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { nodes: [] }\r\n\r\n this.refresh = () => {\r\n fetch('/node_list_json').then(res => res.json()).then((nodes) => {\r\n this.setState({ nodes })\r\n });\r\n \r\n }\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n {this.state.nodes.map(node => {\r\n return (Unit {node.first}: {node.name} [{node.ip}] );\r\n })}\r\n REFRESH \r\n \r\n )\r\n }\r\n\r\n componentDidMount() {\r\n this.refresh();\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { get, set, getKeys } from '../../lib/helpers';\r\nimport { settings } from '../../lib/settings';\r\n\r\nexport class Form extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.onChange = (id, prop, config = {}) => {\r\n return (e) => {\r\n let val = this.form.elements[id].value;\r\n if (config.type === 'checkbox') {\r\n val = this.form.elements[id].checked ? 1 : 0;\r\n } else if (config.type === 'number' || config.type === 'ip') {\r\n val = parseFloat(val);\r\n } else if (config.type === 'select') {\r\n val = isNaN(val) ? val : parseInt(val);\r\n }\r\n if (prop.startsWith('ROOT')) {\r\n settings.set(prop.replace('ROOT.', ''), val);\r\n } else {\r\n set(this.props.selected, prop, val);\r\n }\r\n if (config.onChange) {\r\n config.onChange(e);\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderConfig(id, config, value, varName) {\r\n switch (config.type) {\r\n case 'string':\r\n return (\r\n \r\n );\r\n case 'number':\r\n return (\r\n \r\n ) ;\r\n case 'ip':\r\n return [\r\n ( ),\r\n ( ),\r\n ( ),\r\n ( )\r\n ]\r\n case 'password':\r\n return (\r\n \r\n ) ;\r\n case 'checkbox':\r\n return (\r\n \r\n ) ;\r\n case 'select':\r\n const options = (typeof config.options === 'function') ? config.options() : config.options;\r\n return (\r\n \r\n {options.map(option => {\r\n const name = option instanceof Object ? option.name : option;\r\n const val = option instanceof Object ? option.value : option;\r\n if (val === value) {\r\n return ({name} )\r\n } else {\r\n return ({name} );\r\n }\r\n })}\r\n \r\n ) ;\r\n case 'file':\r\n return (\r\n \r\n )\r\n case 'button':\r\n const clickEvent = () => {\r\n if (!config.click) return;\r\n config.click(this.props.selected);\r\n }\r\n return (\r\n GET IT \r\n );\r\n }\r\n }\r\n\r\n renderConfigGroup(id, configs, values) {\r\n const configArray = Array.isArray(configs) ? configs : [configs];\r\n\r\n return (\r\n \r\n {configArray.map((conf, i) => {\r\n const varId = configArray.length > 1 ? `${id}.${i}` : id;\r\n const varName = conf.var ? conf.var : varId;\r\n const val = varName.startsWith('ROOT') ? settings.get(varName.replace('ROOT.', '')) : get(values, varName, null);\r\n\r\n if (conf.if) {\r\n if (!get(settings.settings, conf.if, false)) return(null);\r\n }\r\n if (conf.type === 'custom') {\r\n const CustomComponent = conf.component;\r\n return ( );\r\n }\r\n return [\r\n ({conf.name} ),\r\n this.renderConfig(varId, conf, val, varName)\r\n ];\r\n })}\r\n
\r\n )\r\n }\r\n\r\n renderGroup(id, group, values) {\r\n if (!group.configs || !Object.keys(group.configs).length) return (null);\r\n const keys = getKeys(group.configs);\r\n return (\r\n \r\n {group.name} \r\n {keys.map(key => {\r\n const conf = group.configs[key];\r\n return this.renderConfigGroup(`${id}.${key}`, conf, values);\r\n })}\r\n \r\n )\r\n }\r\n\r\n render(props) {\r\n const keys = getKeys(props.config.groups);\r\n return ()\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class Menu extends Component {\r\n renderMenuItem(menu) {\r\n if (menu.action) {\r\n return (\r\n \r\n )\r\n }\r\n if (menu.href === this.props.selected.href) {\r\n return [\r\n (),\r\n ...menu.children.map(child => {\r\n if (child.action) {\r\n return (\r\n \r\n )\r\n }\r\n return ();\r\n })\r\n ]\r\n }\r\n return ();\r\n }\r\n\r\n render(props) {\r\n if (props.open === false) return;\r\n \r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class Page extends Component {\r\n render(props) {\r\n const PageComponent = props.page.component;\r\n return (\r\n \r\n );\r\n }\r\n}","import { parseConfig, writeConfig } from '../lib/parser';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst TASKS_MAX = 12;\r\nconst NOTIFICATION_MAX = 3;\r\nconst CONTROLLER_MAX = 3;\r\nconst PLUGIN_CONFIGVAR_MAX = 8;\r\nconst PLUGIN_CONFIGFLOATVAR_MAX = 4;\r\nconst PLUGIN_CONFIGLONGVAR_MAX = 4;\r\nconst PLUGIN_EXTRACONFIGVAR_MAX = 16;\r\nconst NAME_FORMULA_LENGTH_MAX = 40;\r\nconst VARS_PER_TASK = 4;\r\n\r\nexport const configDatParseConfig = [\r\n { prop: 'status.PID', type: 'int32' },\r\n { prop: 'status.version', type: 'int32' },\r\n { prop: 'status.build', type: 'int16' },\r\n { prop: 'config.IP.ip', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.gw', type: 'bytes', length: 4 }, \r\n { prop: 'config.IP.subnet', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.dns', type: 'bytes', length: 4 },\r\n { prop: 'config.experimental.ip_octet', type: 'byte' },\r\n { prop: 'config.general.unitnr', type: 'byte' },\r\n { prop: 'config.general.unitname', type: 'string', length: 26 },\r\n { prop: 'config.ntp.host', type: 'string', length: 64 },\r\n { prop: 'config.sleep.sleeptime', type: 'int32' },\r\n { prop: 'hardware.i2c.sda', type: 'byte' },\r\n { prop: 'hardware.i2c.scl', type: 'byte' },\r\n { prop: 'hardware.led.gpio', type: 'byte' },\r\n { prop: 'Pin_sd_cs', type: 'byte' }, // TODO\r\n { prop: 'hardware.gpio', type: 'bytes', length: 17 },\r\n { prop: 'config.log.syslog_ip', type: 'bytes', length: 4 },\r\n { prop: 'config.espnetwork.port', type: 'int32' },\r\n { prop: 'config.log.syslog_level', type: 'byte' },\r\n { prop: 'config.log.serial_level', type: 'byte' },\r\n { prop: 'config.log.web_level', type: 'byte' },\r\n { prop: 'config.log.sd_level', type: 'byte' },\r\n { prop: 'config.serial.baudrate', type: 'int32' },\r\n { prop: 'config.mqtt.interval', type: 'int32' },\r\n { prop: 'config.sleep.awaketime', type: 'byte' },\r\n { prop: 'CustomCSS', type: 'byte' }, // TODO\r\n { prop: 'config.dst.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WDI2CAddress', type: 'byte' },\r\n { prop: 'config.rules.enabled', type: 'byte' },\r\n { prop: 'config.serial.enabled', type: 'byte' },\r\n { prop: 'config.ssdp.enabled', type: 'byte' },\r\n { prop: 'config.ntp.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WireClockStretchLimit', type: 'int32' },\r\n { prop: 'GlobalSync', type: 'byte' }, // TODO\r\n { prop: 'config.experimental.ConnectionFailuresThreshold', type: 'int32' },\r\n { prop: 'TimeZone', type: 'int16', signed: true},// TODO\r\n { prop: 'config.mqtt.retain_flag', type: 'byte' },\r\n { prop: 'hardware.spi.enabled', type: 'byte' },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].protocol`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].type`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].device`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_TaskDeviceID`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio1`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio2`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio3`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio4`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1pullup`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs`, type:'ints', length: PLUGIN_CONFIGVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1inversed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_float`, type:'floats', length: PLUGIN_CONFIGFLOATVAR_MAX })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_long`, type:'longs', length: PLUGIN_CONFIGLONGVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_senddata`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].global_sync`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].data_feed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].interval`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].enabled`, type:'byte' })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].enabled`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].enabled`, type:'byte' })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceID`, type:'longs', length: CONTROLLER_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceSendData`, type:'bytes', length: CONTROLLER_MAX })),\r\n { prop: 'hardware.led.inverse', type: 'byte' }, \r\n { prop: 'config.sleep.sleeponfailiure', type: 'byte' },\r\n { prop: 'UseValueLogger', type: 'byte' },// TODO\r\n { prop: 'ArduinoOTAEnable', type: 'byte' },// TODO\r\n { prop: 'config.dst.DST_Start', type: 'int16' },\r\n { prop: 'config.dst.DST_End', type: 'int16' },\r\n { prop: 'UseRTOSMultitasking', type: 'byte' },// TODO\r\n { prop: 'hardware.reset.pin', type: 'byte' }, \r\n { prop: 'config.log.syslog_facility', type: 'byte' }, \r\n { prop: 'StructSize', type: 'int32' },// TODO\r\n { prop: 'config.mqtt.useunitname', type: 'byte' },\r\n { prop: 'config.location.lat', type: 'float' },\r\n { prop: 'config.location.long', type: 'float' },\r\n { prop: 'config._emptyBit', type: 'bit' },\r\n { prop: 'config.general.appendunit', type: 'bit' },\r\n { prop: 'config.mqtt.changeclientid', type: 'bit' },\r\n { prop: 'config.rules.oldengine', type: 'bit' },\r\n { prop: 'config._bit4', type: 'bit' },\r\n { prop: 'config._bit5', type: 'bit' },\r\n { prop: 'config._bit6', type: 'bit' },\r\n { prop: 'config._bit7', type: 'bit' },\r\n { prop: 'config._bits1', type: 'byte' },\r\n { prop: 'config._bits2', type: 'byte' },\r\n { prop: 'config._bits3', type: 'byte' },\r\n { prop: 'ResetFactoryDefaultPreference', type: 'int32' },// TODO\r\n].flat();\r\n\r\nexport const TaskSettings = [\r\n { prop: 'index', type:'byte' },\r\n { prop: 'name', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].formula`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].name`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n { prop: 'value_names', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n { prop: 'plugin_config_long', type:'longs', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n { prop: 'decimals', type:'bytes', length: VARS_PER_TASK },\r\n { prop: 'plugin_config', type:'ints', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n].flat();\r\n\r\nexport const ControllerSettings = [\r\n { prop: 'dns', type:'byte' },\r\n { prop: 'IP', type:'bytes', length: 4 },\r\n { prop: 'port', type:'int32' },\r\n { prop: 'hostname', type:'string', length: 65 },\r\n { prop: 'publish', type:'string', length: 129 },\r\n { prop: 'subscribe', type:'string', length: 129 },\r\n { prop: 'MQTT_lwt_topic', type:'string', length: 129 },\r\n { prop: 'lwt_message_connect', type:'string', length: 129 },\r\n { prop: 'lwt_message_disconnect', type:'string', length: 129 },\r\n { prop: 'minimal_time_between', type:'int32' },\r\n { prop: 'max_queue_depth', type:'int32' },\r\n { prop: 'max_retry', type:'int32' },\r\n { prop: 'delete_oldest', type:'byte' },\r\n { prop: 'client_timeout', type:'int32' },\r\n { prop: 'must_check_reply', type:'byte' },\r\n];\r\n\r\nexport const NotificationSettings = [\r\n { prop: 'server', type:'string', length: 65 },\r\n { prop: 'port', type:'int16' },\r\n { prop: 'domain', type:'string', length: 65 },\r\n { prop: 'sender', type:'string', length: 65 },\r\n { prop: 'receiver', type:'string', length: 65 },\r\n { prop: 'subject', type:'string', length: 129 },\r\n { prop: 'body', type:'string', length: 513 },\r\n { prop: 'pin1', type:'byte' },\r\n { prop: 'pin2', type:'byte' },\r\n { prop: 'user', type:'string', length: 49 },\r\n { prop: 'pass', type:'string', length: 33 },\r\n];\r\n\r\nexport const SecuritySettings = [\r\n { prop: 'WifiSSID', type:'string', length: 32 },\r\n { prop: 'WifiKey', type:'string', length: 64 },\r\n { prop: 'WifiSSID2', type:'string', length: 32 },\r\n { prop: 'WifiKey2', type:'string', length: 64 },\r\n { prop: 'WifiAPKey', type:'string', length: 64 },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].user`, type:'string', length: 26 })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].password`, type:'string', length: 64 })),\r\n { prop: 'password', type:'string', length: 26 },\r\n { prop: 'AllowedIPrangeLow', type:'bytes', length: 4 },\r\n { prop: 'AllowedIPrangeHigh', type:'bytes', length: 4 },\r\n { prop: 'IPblockLevel', type:'byte' },\r\n { prop: 'ProgmemMd5', type:'bytes', length: 16 },\r\n { prop: 'md5', type:'bytes', length: 16 },\r\n].flat();\r\n\r\nexport const loadConfig = () => {\r\n return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { \r\n const settings = parseConfig(response, configDatParseConfig);\r\n\r\n [...Array(12)].map((x, i) => {\r\n settings.tasks[i].settings = parseConfig(response, TaskSettings, 1024*4 + 1024 * 2 * i);\r\n settings.tasks[i].extra = parseConfig(response, TaskSettings, 1024*5 + 1024 * 2 * i);\r\n });\r\n \r\n [...Array(3)].map((x, i) => {\r\n settings.controllers[i].settings = parseConfig(response, ControllerSettings, 1024*27 + 1024 * 2 * i);\r\n settings.controllers[i].extra = parseConfig(response, ControllerSettings, 1024*28 + 1024 * 2 * i);\r\n });\r\n \r\n const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());\r\n [...Array(3)].map((x, i) => {\r\n settings.notifications[i].settings = parseConfig(notificationResponse, NotificationSettings, 1024 * i);\r\n });\r\n \r\n const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());\r\n settings.config.security = [...Array(3)].map((x, i) => {\r\n return parseConfig(securityResponse, SecuritySettings, 1024 * i);\r\n });\r\n \r\n return { response, settings };\r\n }).then(conf => {\r\n settings.init(conf.settings);\r\n settings.binary = new Uint8Array(conf.response);\r\n console.log(conf.settings);\r\n });\r\n}\r\n\r\nlet ii = 0;\r\nexport const saveConfig = (save = true) => {\r\n if (ii === 0) {\r\n const buffer = new ArrayBuffer(65536);\r\n writeConfig(buffer, settings.settings, configDatParseConfig);\r\n [...Array(12)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.tasks[i].settings, TaskSettings, 1024*4 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.tasks[i].extra, TaskSettings, 1024*5 + 1024 * 2 * i),\r\n };\r\n });\r\n\r\n [...Array(3)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.controllers[i].settings, ControllerSettings, 1024*27 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.controllers[i].extra, ControllerSettings, 1024*28 + 1024 * 2 * i),\r\n };\r\n });\r\n if (save) saveData(buffer, 'config.dat');\r\n else return buffer;\r\n } else if (ii === 1) {\r\n const bufferNotifications = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferNotifications, settings.settings.notifications[i], NotificationSettings, 1024 * i);\r\n });\r\n saveData(bufferNotifications, 'notification.dat');\r\n } else if (ii === 2) {\r\n const bufferSecurity = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferSecurity, settings.settings.security[i], SecuritySettings, 1024 * i);\r\n });\r\n saveData(bufferSecurity, 'security.dat');\r\n }\r\n ii = (ii + 1) % 3;\r\n}\r\n\r\nconst saveData = (function () {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n return function (data, fileName) {\r\n const blob = new Blob([new Uint8Array(data)]);\r\n const url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n };\r\n}());\r\n","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const bh1750 = {\r\n defaults: () => ({\r\n 'configs[0]': 35,\r\n 'settings.values[0].name': 'Lux',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Measurement mode', type: 'select', options: measurmentMode, var: 'configs[1]' },\r\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst mode = [\r\n { value: 0, name: 'Digital' }, \r\n { value: 1, name: 'Analog' }, \r\n]\r\n\r\nexport const pme = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Value',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'Port', type: 'number', var: 'gpio4' },\r\n mode: { name: 'Port Type', type: 'select', options: mode, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nconst lcdCommand = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const lcd2004 = {\r\n defaults: () => ({\r\n 'configs[0]': 32,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'string', /*var: 'configs[2]' */ },\r\n line2: { name: 'Line 2', type: 'string', /*var: 'configs[2]' */ },\r\n line3: { name: 'Line 3', type: 'string', /*var: 'configs[2]' */ },\r\n line4: { name: 'Line 4', type: 'string', /*var: 'configs[2]' */ },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio3' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n command: { name: 'LCD Command Mode', type: 'select', options: lcdCommand, var: 'configs[3]' },\r\n }\r\n },\r\n}","import { pins } from './_defs';\r\n\r\nconst mode = [\r\n { value: 0, name: 'Value' }, \r\n { value: 1, name: 'State' }, \r\n]\r\n\r\nconst units = [\r\n { value: 0, name: 'Metric' }, \r\n { value: 1, name: 'Imperial' }, \r\n]\r\n\r\nconst filters = [\r\n { value: 0, name: 'None' }, \r\n { value: 1, name: 'Median' }, \r\n]\r\n\r\nexport const hcsr04 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Distance',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO Trigger', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO Echo, 5V', type: 'select', options: pins, var: 'gpio2' },\r\n mode: { name: 'Mode', type: 'select', options: mode, var: 'configs[0]' },\r\n treshold: { name: 'Treshold', type: 'number', var: 'configs[1]' },\r\n max_distance: { name: 'Max Distance', type: 'number', var: 'configs[2]' },\r\n unit: { name: 'Unit', type: 'select', options: units, var: 'configs[3]' },\r\n filter: { name: 'Filter', type: 'select', options: filters, var: 'configs[4]' },\r\n filter_size: { name: 'Filter Size', type: 'number', var: 'configs[5]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\n\r\nconst resolution = [\r\n { value: 0, name: 'Temp 14 bits, RH 12 bits' }, \r\n { value: 128, name: 'Temp 13 bits, RH 10 bits' }, \r\n { value: 1, name: 'Temp 12 bits, RH 8 bits' }, \r\n { value: 129, name: 'Temp 11 bits, RH 11 bits' }, \r\n]\r\n\r\nexport const si7021 = {\r\n defaults: () => ({\r\n interval: 60,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n resolution: { name: 'Resolution', type: 'select', options: resolution, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 57, name: '0x39 (57) - default' }, \r\n { value: 73, name: '0x49 (73)' }, \r\n { value: 41, name: '0x29 (41)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 0, name: '13 ms' }, \r\n { value: 1, name: '101 ms' }, \r\n { value: 2, name: '402 ms' }, \r\n]\r\n\r\nexport const tls2561 = {\r\n defaults: () => ({\r\n 'configs[0]': 57,\r\n 'settings.values[0].name': 'Lux',\r\n 'settings.values[1].name': 'Infrared',\r\n 'settings.values[2].name': 'Broadband',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Integration time', type: 'select', options: measurmentMode, var: 'configs[1]' },\r\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\r\n gain: { name: 'Enable 16x gain', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3\r\n}\r\n","import { pins } from './_defs';\r\n\r\nexport const pn532 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Tag',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'Reset Pin', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const dust = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Dust',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO - LED', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const pcf8574 = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const inputSwitch = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n interval: 60,\r\n 'configs_float[1]': 1000,\r\n 'configs_float[2]': 1000,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n switch_type: { name: 'Switch Type', type: 'select', options: [{ name: 'switch', value: 0}, { name: 'dimmer', value: 3 }], var: 'configs[0]' },\r\n switch_button_type: { name: 'Switch Button Type', type: 'select', options: [\r\n { name: 'normal', value: 0}, { name: 'active low', value: 1 }, { name: 'active high', value: 2 }\r\n ], var: 'configs[2]' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', min: 1000, max: 3000, type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', min: 1000, max: 5000, type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst serialConfig = [\r\n { value: 0, name: 'No Parity' }, \r\n { value: 1, name: 'Even' }, \r\n { value: 2, name: 'Odd' }, \r\n]\r\n\r\nconst eventProcessing = [\r\n { value: 0, name: 'None' }, \r\n { value: 1, name: 'Generic' }, \r\n { value: 2, name: 'RFLink' }, \r\n]\r\n\r\nexport const ser2net = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n port: { name: 'TCP Port', type: 'number', var: 'extra.plugin_config_long[0]' }, \r\n baudrate: { name: 'Baudrate', type: 'number', var: 'extra.plugin_config_long[1]' },\r\n serial_config: { name: 'Data Bits', type: 'select', options: serialConfig, var: 'configs[2]' },\r\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs[0]' },\r\n event_processing: { name: 'Event Processing', type: 'select', options: eventProcessing, var: 'configs[1]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst sensorModel = [\r\n { value: 11, name: 'DHT11' }, \r\n { value: 22, name: 'DHT22' }, \r\n { value: 12, name: 'DHT12' }, \r\n { value: 23, name: 'Sonoff am2301' }, \r\n { value: 70, name: 'Sonoff si7021' },\r\n]\r\n\r\nexport const levelControl = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO Level Low', type: 'select', options: pins, var: 'gpio1' },\r\n check_task: { name: 'Check Task', type: 'select', options: getTasks, var: 'configs[0]' },\r\n check_value: { name: 'Check Value', type: 'select', options: getTaskValues, var: 'configs[1]' },\r\n level: { name: 'Set Level', type: 'number', var: 'configs_float[0]' },\r\n hysteresis: { name: 'Hysteresis', type: 'number', var: 'configs_float[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst mode = [...Array(32)].map((v, i) => ({ value: i, name: `0x${i.toString(16)} (${i})` }));\r\nconst i2c_address = [...Array(32)].map((v, i) => ({ value: i+64, name: `0x${(i+64).toString(16)} (${i+64})` }));\r\n\r\nexport const pca9685 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'configs_float[0]': 1500,\r\n 'configs_float[1]': 4095,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Mode 2', type: 'select', options: mode, var: 'configs[1]' },\r\n frequency: { name: 'Frequency (23 - 1500)', type: 'number', min: 23, max: 1500, var: 'configs_float[0]' },\r\n range: { name: 'Range (1-10000)', type: 'number', min: 1, max: 10000, var: 'configs_float[1]' },\r\n }\r\n },\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const oled1306 = {\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\r\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\r\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\r\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n}","const options = [\r\n { value: 0, name: 'IR Object Temperature' }, \r\n { value: 1, name: 'Ambient Temperature' }, \r\n]\r\n\r\nexport const mlx90614 = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'Port', type: 'number', var: 'gpio4' },\r\n option: { name: 'Option', type: 'select', options: options, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","\r\nconst i2c_address = [\r\n { value: 72, name: '0x48 (72)' }, \r\n { value: 73, name: '0x49 (73)' }, \r\n { value: 74, name: '0x4A (74)' }, \r\n { value: 75, name: '0x4B (75)' }, \r\n];\r\n\r\nconst gainOptions = [\r\n { value: 0, name: '2/3x gain (FS=6.144V)' }, \r\n { value: 1, name: '1x gain (FS=4.096V)' }, \r\n { value: 2, name: '2x gain (FS=2.048V)' }, \r\n { value: 3, name: '4x gain (FS=1.024V)' }, \r\n { value: 4, name: '8x gain (FS=0.512V)' },\r\n { value: 5, name: '16x gain (FS=0.256V)' },\r\n];\r\n\r\nconst multiplexerOptions = [\r\n { value: 0, name: 'AIN0 - AIN1 (Differential)' }, \r\n { value: 1, name: 'AIN0 - AIN3 (Differential)' }, \r\n { value: 2, name: 'AIN1 - AIN3 (Differential)' }, \r\n { value: 3, name: 'AIN2 - AIN3 (Differential)' }, \r\n { value: 4, name: 'AIN0 - GND (Single-Ended)' }, \r\n { value: 5, name: 'AIN1 - GND (Single-Ended)' }, \r\n { value: 6, name: 'AIN2 - GND (Single-Ended)' }, \r\n { value: 7, name: 'AIN3 - GND (Single-Ended)' }, \r\n];\r\n\r\n\r\nexport const ads1115 = {\r\n defaults: () => ({\r\n 'configs[0]': 72,\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n gain: { name: 'Gain', type: 'select', options: gainOptions, var: 'configs[1]' },\r\n multiplexer: { name: 'Input Multiplexer', type: 'select', options: multiplexerOptions, var: 'configs[2]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Two point calibration',\r\n configs: {\r\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\r\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n }\r\n },\r\n data: true,\r\n vars: 1,\r\n}","const indicator = [\r\n { value: 0, name: 'Uptime' }, \r\n { value: 1, name: 'Free Ram' }, \r\n { value: 2, name: 'WiFi RSSI' }, \r\n { value: 3, name: 'Input VCC' }, \r\n { value: 4, name: 'System load' }, \r\n { value: 5, name: 'IP 1.Octet' }, \r\n { value: 6, name: 'IP 2.Octet' }, \r\n { value: 7, name: 'IP 3.Octet' }, \r\n { value: 8, name: 'IP 4.Octet' }, \r\n { value: 9, name: 'Web activity' }, \r\n { value: 10, name: 'Free Stack' }, \r\n { value: 11, name: 'None' }, \r\n]\r\n\r\nexport const systemInfo = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Uptime',\r\n 'settings.values[1].name': 'Uptime',\r\n 'settings.values[2].name': 'Uptime',\r\n 'settings.values[3].name': 'Uptime',\r\n }),\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n indicator1: { name: 'Indicator 1', type: 'select', options: indicator, var: 'configs_long[0]' },\r\n indicator1: { name: 'Indicator 2', type: 'select', options: indicator, var: 'configs_long[1]' },\r\n indicator1: { name: 'Indicator 3', type: 'select', options: indicator, var: 'configs_long[2]' },\r\n indicator1: { name: 'Indicator 4', type: 'select', options: indicator, var: 'configs_long[3]' },\r\n }\r\n },\r\n data: true,\r\n vars: 4,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst measurmentRange = [\r\n { value: 0, name: '32V, 2A' }, \r\n { value: 1, name: '32V, 1A' }, \r\n { value: 2, name: '16V, 0.4A' }, \r\n]\r\n\r\nconst measurmentType = [\r\n { value: 0, name: 'Voltage' }, \r\n { value: 1, name: 'Current' }, \r\n { value: 2, name: 'Power' }, \r\n { value: 3, name: 'Voltage/Current/Power' }, \r\n]\r\n\r\nconst i2c_address = [\r\n { value: 64, name: '0x40 (64) - (default)' }, \r\n { value: 65, name: '0x41 (65)' }, \r\n { value: 68, name: '0x44 (68)' }, \r\n { value: 69, name: '0x45 (69)' }, \r\n]\r\n\r\nexport const ina219 = {\r\n defaults: () => ({\r\n 'configs[0]': 64,\r\n 'settings.values[0].name': 'Voltage',\r\n 'settings.values[1].name': 'Current',\r\n 'settings.values[2].name': 'Power',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n check_task: { name: 'Measurment Range', type: 'select', options: measurmentRange, var: 'configs[1]' },\r\n check_value: { name: 'Measurment Type', type: 'select', options: measurmentType, var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118) - (default)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\nexport const bmx280 = {\r\n defaults: () => ({\r\n 'configs[0]': 118,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n 'settings.values[2].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n offset: { name: 'Temperature Offset', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const mqttDomoticz = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Actuator',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n idx: { name: 'IDX', type: 'number', var: 'configs[0]' },\r\n }\r\n },\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nexport const analogInput = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n oversampling: { name: 'Oversampling', type: 'checkbox', var: 'configs[0]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Two point calibration',\r\n configs: {\r\n enabled: { name: 'Calibration Enabled', type: 'checkbox', var: 'configs[3]' },\r\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[0]' }],\r\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118) - (default)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\nexport const bmp280 = {\r\n defaults: () => ({\r\n 'configs[0]': 118,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const sht1x = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\r\n gpio1: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO SCK', type: 'select', options: pins, var: 'gpio2' },\r\n },\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\n\r\nexport const ms5611 = {\r\n defaults: () => ({\r\n 'configs[0]': 119,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\nconst sensorModel = [\r\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \r\n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \r\n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \r\n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \r\n { value: 5, name: 'SENSOR_TYPE_DUAL' },\r\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\r\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\r\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\r\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\r\n { value: 20, name: 'SENSOR_TYPE_LONG' },\r\n { value: 21, name: 'SENSOR_TYPE_WIND' },\r\n]\r\n\r\nexport const dummyDevice = {\r\n defaults: () => ({\r\n interval: 0,\r\n 'settings.values[0].name': 'Dummy1',\r\n 'settings.values[1].name': 'Dummy1',\r\n 'settings.values[2].name': 'Dummy3',\r\n 'settings.values[3].name': 'Dummy4',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n switch_type: { name: 'Simulate Sensor Type', type: 'select', options: sensorModel, var: 'configs[0]' },\r\n interval: { name: 'Interval', type: 'number' },\r\n }\r\n },\r\n data: true,\r\n vals: 4,\r\n}","\r\nconst sensorModel = [\r\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \r\n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \r\n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \r\n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \r\n { value: 5, name: 'SENSOR_TYPE_DUAL' },\r\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\r\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\r\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\r\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\r\n { value: 20, name: 'SENSOR_TYPE_LONG' },\r\n { value: 21, name: 'SENSOR_TYPE_WIND' },\r\n]\r\n\r\nexport const dht12 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n data: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n interval: { name: 'Interval', type: 'number' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const sh1106 = {\r\n defaults: () => ({\r\n 'configs[0]': 35,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\r\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\r\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\r\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n}","\r\n\r\nexport const mqttImport = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Value1',\r\n 'settings.values[1].name': 'Value2',\r\n 'settings.values[2].name': 'Value3',\r\n 'settings.values[3].name': 'Value4',\r\n }),\r\n settings: {\r\n name: 'Data Settings',\r\n configs: {\r\n switch_type: { name: 'MQTT Topic 1', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 2', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 3', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 4', type: 'text', var: 'configs[0]' },\r\n }\r\n },\r\n vars: 4\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 1, name: 'GRB' }, \r\n { value: 2, name: 'GRBW' }, \r\n]\r\n\r\nexport const neopixelBasic = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n leds: { name: 'LEd Count', type: 'number', var: 'configs[0]' },\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n type: { name: 'Strip Type', type: 'select', options: type, var: 'configs[1]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 1, name: 'MAX 6675' }, \r\n { value: 2, name: 'MAX 31855' }, \r\n]\r\n\r\nexport const thermocouple = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n type: { name: 'Adapter IC', type: 'select', options: type, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst modeTypes = [\r\n { value: 0, name: 'LOW' }, \r\n { value: 1, name: 'CHANGE' }, \r\n { value: 2, name: 'RISING' }, \r\n { value: 3, name: 'FALLING' }, \r\n]\r\n\r\nconst counterTypes = [\r\n { value: 0, name: 'Delta' }, \r\n { value: 1, name: 'Delta/Total/Time' }, \r\n { value: 2, name: 'Total' }, \r\n { value: 3, name: 'Delta/Total' }, \r\n]\r\n\r\nexport const genericPulse = {\r\n sensor: {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Count',\r\n 'settings.values[1].name': 'Total',\r\n 'settings.values[2].name': 'Time',\r\n }),\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs[0]' },\r\n counter_type: { name: 'Counter Type', type: 'select', options: counterTypes, var: 'configs[1]' },\r\n mode_type: { name: 'Switch Button Type', type: 'select', options: modeTypes, var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const neopixelClock = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Actuator',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n R: { name: 'Red', type: 'number', min: 0, max: 255, var: 'configs[0]' },\r\n G: { name: 'Green', type: 'number', min: 0, max: 255, var: 'configs[1]' },\r\n B: { name: 'Blue', type: 'number', min: 0, max: 255, var: 'configs[2]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const neopixelCandle = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'configs[0]': 11,\r\n 'settings.values[0].name': 'Color',\r\n 'settings.values[1].name': 'Brightness',\r\n 'settings.values[2].name': 'Type',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 3\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 0, name: '' },\r\n { value: 1, name: 'Off' }, \r\n { value: 2, name: 'On' }, \r\n]\r\n\r\nexport const clock = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO - Clock Event', type: 'select', options: pins, var: 'gpio1' },\r\n event1: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event2: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event3: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event4: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event5: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event6: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event7: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event8: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst parity = [\r\n { value: 0, name: 'No Parity' }, \r\n { value: 1, name: 'Even' }, \r\n { value: 2, name: 'Odd' }, \r\n]\r\n\r\nexport const wifiGateway = {\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\r\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\r\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\r\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\r\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\r\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\r\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\r\n }\r\n }\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const mhz19 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'PPM',\r\n 'settings.values[1].name': 'Temperature',\r\n 'settings.values[2].name': 'U',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins } from './_defs';\r\n\r\nexport const ds18b20 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const senseAir = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'CO2',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const sds011 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'PM2.5',\r\n 'settings.values[1].name': 'PM10',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const rotaryEncoder = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n gpio3: 255,\r\n 'configs_long[1]': 100,\r\n 'settings.values[0].name': 'Counter',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\r\n gpio3: { name: 'GPIO I - Z', type: 'select', options: pins, var: 'gpio3' },\r\n limit_min: { name: 'Limit - Min', type: 'number', var: 'configs_long[0]' },\r\n limit_max: { name: 'Limit - Max', type: 'number', var: 'configs_long[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst sensorModel = [\r\n { value: 11, name: 'DHT11' }, \r\n { value: 22, name: 'DHT22' }, \r\n { value: 12, name: 'DHT12' }, \r\n { value: 23, name: 'Sonoff am2301' }, \r\n { value: 70, name: 'Sonoff si7021' },\r\n]\r\n\r\nexport const dht = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n interval: 60,\r\n 'configs[0]': 11,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\r\n switch_type: { name: 'Sensor model', type: 'select', options: sensorModel, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const ttp229 = {\r\n defaults: () => ({\r\n 'gpio1' : 1,\r\n }),\r\n sensor: {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'ScanCode',\r\n }),\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\r\n scancode: { name: 'ScanCode', type: 'checkbox', options: pins, var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const bmp085 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\n\r\nexport const pcf8591 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst weigandType = [\r\n { value: 26, name: '26 Bits' }, \r\n { value: 34, name: '34 Bits' }, \r\n]\r\n\r\nexport const rfidWeigand = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Tag',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO D0 (green, 5V)', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO D1 (white, 5V)', type: 'select', options: pins, var: 'gpio2' },\r\n type: { name: 'Weigand Type', type: 'select', options: weigandType, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const inputMcp = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1,\r\n}","import { settings } from '../lib/settings';\r\n\r\nexport { pins } from '../pages/config.hardware';\r\n\r\n\r\nexport const getTasks = () => {\r\n return settings.get('tasks').filter(task => task.enabled).map(task => ({ value: task.settings.index, name: task.settings.name }));\r\n}\r\n\r\nexport const getTaskValues = () => {\r\n return [ 1, 2, 3, 4 ];\r\n}","import { inputSwitch } from './1_input_switch';\r\nimport { analogInput } from './2_analog_input';\r\nimport { genericPulse } from './3_generic_pulse';\r\nimport { ds18b20 } from './4_ds18b20';\r\nimport { dht } from './5_dht';\r\nimport { bmp085 } from './6_bmp085';\r\nimport { pcf8591 } from './7_pcf8591';\r\nimport { rfidWeigand } from './8_rfid';\r\nimport { inputMcp } from './9_io_mcp';\r\nimport { bh1750 } from './10_light_lux';\r\nimport { pme } from './11_pme';\r\nimport { lcd2004 } from './12_lcd';\r\nimport { hcsr04 } from './13_hcsr04';\r\nimport { si7021 } from './14_si7021';\r\nimport { tls2561 } from './15_tls2561';\r\nimport { pn532 } from './17_pn532';\r\nimport { dust } from './18_dust';\r\nimport { pcf8574 } from './19_pcf8574';\r\nimport { ser2net } from './20_ser2net';\r\nimport { levelControl } from './21_level_control';\r\nimport { pca9685 } from './22_pca9685';\r\nimport { oled1306 } from './23_oled1306';\r\nimport { mlx90614 } from './24_mlx90614';\r\nimport { ads1115 } from './25_ads1115';\r\nimport { systemInfo } from './26_system_info';\r\nimport { ina219 } from './27_ina219';\r\nimport { bmx280 } from './28_bmx280';\r\nimport { mqttDomoticz } from './29_mqtt_domoticz';\r\nimport { bmp280 } from './30_bmp280';\r\nimport { sht1x } from './31_sht1x';\r\nimport { ms5611 } from './32_ms5611';\r\nimport { dummyDevice } from './33_dummy_device';\r\nimport { dht12 } from './34_dht12';\r\nimport { sh1106 } from './36_sh1106';\r\nimport { mqttImport } from './37_mqtt_import';\r\nimport { neopixelBasic } from './38_neopixel_basic';\r\nimport { thermocouple } from './39_thermocouple';\r\nimport { neopixelClock } from './41_neopixel_clock';\r\nimport { neopixelCandle } from './42_neopixel_candle';\r\nimport { clock } from './43_output_clock';\r\nimport { wifiGateway } from './44_wifi_gateway';\r\nimport { mhz19 } from './49_mhz19';\r\nimport { senseAir } from './52_senseair';\r\nimport { sds011 } from './56_sds011';\r\nimport { rotaryEncoder } from './59_rotary_encoder';\r\nimport { ttp229 } from './63_ttp229';\r\n\r\nexport const devices = [\r\n { name: '- None -', value: 0, fields: [] },\r\n { name: 'Switch input - Switch', value: 1, fields: inputSwitch },\r\n { name: 'Analog input - internal', value: 2, fields: analogInput },\r\n { name: 'Generic - Pulse counter', value: 3, fields: genericPulse },\r\n { name: 'Environment - DS18b20', value: 4, fields: ds18b20 },\r\n { name: 'Environment - DHT11/12/22 SONOFF2301/7021', value: 5, fields: dht },\r\n { name: 'Environment - BMP085/180', value: 6, fields: bmp085 },\r\n { name: 'Analog input - PCF8591', value: 7, fields: pcf8591 },\r\n { name: 'RFID - Wiegand', value: 8, fields: rfidWeigand },\r\n { name: 'Switch input - MCP23017', value: 9, fields: inputMcp },\r\n { name: 'Light/Lux - BH1750', value: 10, fields: bh1750 },\r\n { name: 'Extra IO - ProMini Extender', value: 11, fields: pme },\r\n { name: 'Display - LCD2004', value: 12, fields: lcd2004 },\r\n { name: 'Position - HC-SR04, RCW-0001, etc.', value: 13, fields: hcsr04 },\r\n { name: 'Environment - SI7021/HTU21D', value: 14, fields: si7021 },\r\n { name: 'Light/Lux - TSL2561', value: 15, fields: tls2561 },\r\n //{ name: 'Communication - IR', value: 16, fields: bh1750 },\r\n { name: 'RFID - PN532', value: 17, fields: pn532 },\r\n { name: 'Dust - Sharp GP2Y10', value: 18, fields: dust },\r\n { name: 'Switch input - PCF8574', value: 19, fields: pcf8574 },\r\n { name: 'Communication - Serial Server', value: 20, fields: ser2net },\r\n { name: 'Regulator - Level Control', value: 21, fields: levelControl },\r\n { name: 'Extra IO - PCA9685', value: 22, fields: pca9685 },\r\n { name: 'Display - OLED SSD1306', value: 23, fields: oled1306 },\r\n { name: 'Environment - MLX90614', value: 24, fields: mlx90614 },\r\n { name: 'Analog input - ADS1115', value: 25, fields: ads1115 },\r\n { name: 'Generic - System Info', value: 26, fields: systemInfo },\r\n { name: 'Energy (DC) - INA219', value: 27, fields: ina219 },\r\n { name: 'Environment - BMx280', value: 28, fields: bmx280 },\r\n { name: 'Output - Domoticz MQTT Helper', value: 29, fields: mqttDomoticz },\r\n { name: 'Environment - BMP280', value: 30, fields: bmp280 },\r\n { name: 'Environment - SHT1X', value: 31, fields: sht1x },\r\n { name: 'Environment - MS5611 (GY-63)', value: 32, fields: ms5611 },\r\n { name: 'Generic - Dummy Device', value: 33, fields: dummyDevice },\r\n { name: 'Environment - DHT12 (I2C)', value: 34, fields: dht12 },\r\n { name: 'Display - OLED SSD1306/SH1106 Framed', value: 36, fields: sh1106 },\r\n { name: 'Generic - MQTT Import', value: 37, fields: mqttImport },\r\n { name: 'Output - NeoPixel (Basic)', value: 38, fields: neopixelBasic },\r\n { name: 'Environment - Thermocouple', value: 39, fields: thermocouple },\r\n { name: 'Output - NeoPixel (Word Clock)', value: 41, fields: neopixelClock },\r\n { name: 'Output - NeoPixel (Candle)', value: 42, fields: neopixelCandle },\r\n { name: 'Output - Clock', value: 43, fields: clock },\r\n { name: 'Communication - P1 Wifi Gateway', value: 44, fields: wifiGateway },\r\n { name: 'Gases - CO2 MH-Z19', value: 49, fields: mhz19 },\r\n { name: 'Gases - CO2 Senseair', value: 52, fields: senseAir },\r\n { name: 'Dust - SDS011/018/198', value: 56, fields: sds011 },\r\n { name: 'Switch Input - Rotary Encoder', value: 59, fields: rotaryEncoder },\r\n { name: 'Keypad - TTP229 Touc', value: 63, fields: ttp229 },\r\n].sort((a, b) => a.name.localeCompare(b.name));","import miniToastr from 'mini-toastr';\nimport { loader } from './loader';\n\nexport const getJsonStat = async (url = '') => {\n return await fetch(`${url}/json`).then(response => response.json())\n}\n\nexport const loadDevices = async (url) => {\n return getJsonStat(url).then(response => response.Sensors);\n}\n\nexport const getConfigNodes = async () => {\n const devices = await loadDevices();\n const vars = [];\n const nodes = devices.map(device => {\n const taskValues = device.TaskValues || [];\n taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n const result = [{\n group: 'TRIGGERS',\n type: device.TaskName || `${device.TaskNumber}-${device.Type}`,\n inputs: [],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n value: taskValues.length ? taskValues[0].Name : '',\n }, {\n name: 'euqality',\n type: 'select',\n values: ['', '=', '<', '>', '<=', '>=', '!='],\n value: '',\n }, {\n name: 'value',\n type: 'number',\n }],\n indent: true,\n toString: function () { \n const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;\n return `when ${this.type}.${this.config[0].value} ${comparison}`; \n },\n toDsl: function () { \n const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;\n return [`on ${this.type}#${this.config[0].value}${comparison} do\\n%%output%%\\nEndon\\n`]; \n }\n }];\n\n let fnNames, fnName, name;\n switch (device.Type) {\n // todo: need access to GPIO number\n // case 'Switch input - Switch':\n // result.push({\n // group: 'ACTIONS',\n // type: `${device.TaskName} - switch`,\n // inputs: [1],\n // outputs: [1],\n // config: [{\n // name: 'value',\n // type: 'number',\n // }],\n // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n // });\n // break;\n case 'Regulator - Level Control':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - setlevel`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'value',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n });\n break;\n case 'Extra IO - PCA9685':\n case 'Switch input - PCF8574':\n case 'Switch input - MCP23017':\n fnNames = {\n 'Extra IO - PCA9685': 'PCF',\n 'Switch input - PCF8574': 'PCF',\n 'Switch input - MCP23017': 'MCP',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Pulse`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n },{\n name: 'unit',\n type: 'select',\n values: ['ms', 's'],\n },{\n name: 'duration',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; },\n toDsl: function () { \n if (this.config[2].value === 's') {\n return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n } else {\n return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n }\n }\n });\n break;\n case 'Extra IO - ProMini Extender':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n break;\n case 'Display - OLED SSD1306':\n case 'Display - LCD2004':\n fnNames = {\n 'Display - OLED SSD1306': 'OLED',\n 'Display - LCD2004': 'LCD',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'row',\n type: 'select',\n values: [1, 2, 3, 4],\n }, {\n name: 'column',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n }, {\n name: 'text',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.text = ${this.config[2].value}`; },\n toDsl: function () { return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; }\n });\n break;\n case 'Generic - Dummy Device':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n }, {\n name: 'value',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; }\n });\n break;\n }\n\n return result;\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const getVariables = async () => {\n const urls = ['']; //, 'http://192.168.1.130'\n const vars = {};\n await Promise.all(urls.map(async url => {\n const stat = await getJsonStat(url);\n stat.Sensors.map(device => {\n device.TaskValues.map(value => {\n vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;\n });\n });\n }));\n return vars;\n}\n\nexport const getDashboardConfigNodes = async (url) => {\n const devices = await loadDevices(url);\n const vars = [];\n const nodes = devices.map(device => {\n device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n return [];\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const fetchProgress = (url, opts={}) => {\n return new Promise( (res, rej)=>{\n var xhr = new XMLHttpRequest();\n xhr.open(opts.method || 'get', url);\n for (var k in opts.headers||{})\n xhr.setRequestHeader(k, opts.headers[k]);\n xhr.onload = e => res(e.target.responseText);\n xhr.onerror = rej;\n if (xhr.upload && opts.onProgress)\n xhr.upload.onprogress = opts.onProgress; // event.loaded / event.total * 100 ; //event.lengthComputable\n xhr.send(opts.body);\n });\n}\n\nexport const storeFile = async (filename, data, onProgress) => {\n loader.show();\n const file = data ? new File([new Blob([data])], filename) : filename;\n const formData = new FormData();\n formData.append('edit', 1);\n formData.append('file', file);\n \n return await fetchProgress('/upload_json', {\n method: 'post',\n body: formData,\n }, onProgress).then(() => {\n loader.hide();\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n loader.hide();\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const deleteFile = async (filename,) => { \n return await fetch('/filelist?delete='+filename).then(() => {\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const storeDashboardConfig = async (config) => {\n storeFile('d1.txt', config);\n}\n\nexport const loadDashboardConfig = async (nodes) => {\n return await fetch('/d1.txt').then(response => response.json());\n}\n\nexport const storeRuleConfig = async (config) => {\n storeFile('r1.txt', config);\n}\n\nexport const loadRuleConfig = async () => {\n return await fetch('/r1.txt').then(response => response.json());\n}\n\nexport const storeRule = async (rule) => {\n const formData = new FormData();\n formData.append('set', 1);\n formData.append('rules', rule);\n \n return await fetch('/rules', {\n method: 'post',\n body: formData,\n });\n}\n\n\nexport default {\n getJsonStat, loadDevices, getConfigNodes, getDashboardConfigNodes, getVariables, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule\n}","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return `${val} `;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'number':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'select':\n template.innerHTML = `${cfg.name} ${cfg.values.map(val => (getSelectOptions(val)))}
`;\n break;\n case 'textselect':\n template.innerHTML = ``\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n \n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","import get from 'lodash/get';\r\nimport set from 'lodash/set';\r\n\r\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\r\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\r\n\r\n// const set = (obj, path, value) => {\r\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\r\n// if (!a[c]) a[c] = {};\r\n// if (i === src.length - 1) a[c] = value;\r\n// }, obj)\r\n// }\r\n\r\nconst getKeys = object => {\r\n const keys = [];\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n}\r\n\r\nexport { get, set, getKeys }","class Loader {\r\n constructor() {\r\n this.loader = document.querySelector('.loading');\r\n }\r\n\r\n show() {\r\n this.loader.classList.add('show');\r\n }\r\n\r\n hide() {\r\n this.loader.classList.add('hide');\r\n setTimeout(() => {\r\n this.loader.classList.remove('hide');\r\n this.loader.classList.remove('show');\r\n }, 1000);\r\n }\r\n}\r\n\r\nexport const loader = new Loader();","import { \n ConfigPage, \n DevicesPage, \n DevicesEditPage, \n ControllersPage, \n ControllerEditPage, \n ControllerNotificationsPage,\n ConfigAdvancedPage, \n ConfigHardwarePage, \n RebootPage, \n LoadPage, \n RulesPage, \n UpdatePage, \n ToolsPage, \n FSPage, \n FactoryResetPage, \n DiscoverPage, \n DiffPage, \n RulesEditorPage, \n SetupPage,\n SysVarsPage\n} from '../pages';\n\nimport { saveConfig } from '../conf/config.dat';\n\nclass Menus {\n constructor() {\n this.menus = [];\n this.routes = [];\n\n this.addMenu = (menu) => {\n this.menus.push(menu);\n this.addRoute(menu);\n }\n\n this.addRoute = (route) => {\n this.routes.push(route);\n if (route.children) {\n route.children.forEach(child => this.routes.push(child));\n }\n }\n }\n \n}\n\nconst menus = [\n { title: 'Devices', href: 'devices', component: DevicesPage, children: [] },\n { title: 'Controllers', href: 'controllers', component: ControllersPage, children: [] },\n { title: 'Automation', href: 'rules', component: RulesEditorPage, class: 'full', children: [] },\n { title: 'Config', href: 'config', component: ConfigPage, children: [\n { title: 'Hardware', href: 'config/hardware', component: ConfigHardwarePage },\n { title: 'Advanced', href: 'config/advanced', component: ConfigAdvancedPage },\n { title: 'Rules', href: 'config/rules', component: RulesPage },\n { title: 'Save', href: 'config/save', action: saveConfig },\n { title: 'Load', href: 'config/load', component: LoadPage },\n { title: 'Reboot', href: 'config/reboot', component: RebootPage },\n { title: 'Factory Reset', href: 'config/factory', component: FactoryResetPage },\n ] },\n { title: 'Tools', href: 'tools', component: ToolsPage, children: [\n { title: 'Discover', href: 'tools/discover', component: DiscoverPage },\n { title: 'Info', href: 'tools/sysinfo', component: SysVarsPage },\n { title: 'Update', href: 'tools/update', component: UpdatePage },\n { title: 'Filesystem', href: 'tools/fs', component: FSPage },\n ] },\n];\n\nconst routes = [\n { title: 'Edit Controller', href:'controllers/edit', component: ControllerEditPage },\n { title: 'Edit Notification', href:'controllers/notification', component: ControllerNotificationsPage },\n { title: 'Edit Device', href:'devices/edit', component: DevicesEditPage },\n { title: 'Save to Flash', href:'tools/diff', component: DiffPage },\n { title: 'Setup', href: 'config/setup', component: SetupPage }\n];\n\nconst menu = new Menus();\nroutes.forEach(menu.addRoute);\nmenus.forEach(menu.addMenu)\n\nexport { menu };","export const nodes = [\n // TRIGGERS\n {\n group: 'TRIGGERS',\n type: 'timer',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }],\n indent: true,\n toString: function () { return `timer ${this.config[0].value}`; },\n toDsl: function () { return [`on Rules#Timer=${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'event',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text',\n }],\n indent: true,\n toString: function () { return `event ${this.config[0].value}`; },\n toDsl: function () { return [`on ${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'clock',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: () => { return 'clock'; },\n toDsl: () => { return ['on Clock#Time do\\n%%output%%\\nEndon\\n']; }\n }, {\n group: 'TRIGGERS',\n type: 'system boot',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On System#Boot do\\n%%output%%\\nEndon\\n`];\n }\n }, {\n group: 'TRIGGERS',\n type: 'Device',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On Device#Value do\\n%%output%%\\nEndon\\n`];\n }\n }, \n // LOGIC\n {\n group: 'LOGIC',\n type: 'if/else',\n inputs: [1],\n outputs: [1, 2],\n config: [{\n name: 'variable',\n type: 'textselect',\n values: ['Clock#Time'],\n },{\n name: 'equality',\n type: 'select',\n values: ['=', '<', '>', '<=', '>=', '!=']\n },{\n name: 'value',\n type: 'text',\n }],\n indent: true,\n toString: function() {\n return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`;\n },\n toDsl: function() {\n return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\\n%%output%%`, `Else\\n%%output%%\\nEndif`];\n }\n }, {\n group: 'LOGIC',\n type: 'delay',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'delay',\n type: 'number',\n }],\n toString: function() {\n return `delay: ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`Delay ${this.config[0].value}\\n`];\n }\n },\n // ACTIONS\n {\n group: 'ACTIONS',\n type: 'GPIO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function() {\n return `GPIO ${this.config[0].value}, ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`GPIO,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'Pulse',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n value: 0\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n value: 1\n }, {\n name: 'unit',\n type: 'select',\n values: ['s', 'ms'],\n value: 'ms',\n }, {\n name: 'duration',\n type: 'number',\n value: 1000\n }],\n toString: function() {\n return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;\n },\n toDsl: function() {\n const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse';\n return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'PWM',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'value',\n type: 'number',\n value: 1023,\n }],\n toString: function() {\n return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`PWM,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'SERVO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'servo',\n type: 'select',\n values: [1, 2],\n value: 0\n }, {\n name: 'position',\n type: 'number',\n value: 90,\n }],\n toString: function() {\n return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'fire event',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text'\n }],\n toString: function() {\n return `event ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`event,${this.config[0].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'settimer',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }, {\n name: 'value',\n type: 'number'\n }],\n toString: function() {\n return `timer${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`timerSet,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'MQTT',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'topic',\n type: 'text',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`Publish ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'UDP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'ip',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `UDP ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'HTTP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'host',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n value: 80\n }, {\n name: 'url',\n type: 'text',\n }],\n toString: function() {\n return `HTTP ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'ESPEASY',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'device',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendTo ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }\n]","import { get, set } from './helpers';\r\n\r\nclass DataParser {\r\n constructor(data) {\r\n this.view = new DataView(data);\r\n this.offset = 0;\r\n this.bitbyte = 0;\r\n this.bitbytepos = 7;\r\n }\r\n\r\n pad(nr) {\r\n while (this.offset % nr) {\r\n this.offset++;\r\n }\r\n }\r\n\r\n bit(signed = false, write = false, val) {\r\n if (this.bitbytepos === 7) {\r\n if (!write) {\r\n this.bitbyte = this.byte();\r\n this.bitbytepos = 0;\r\n } else {\r\n this.byte(signed, write, this.bitbyte);\r\n }\r\n }\r\n if (!write) {\r\n return (this.bitbyte >> this.bitbytepos++) & 1;\r\n } else {\r\n this.bitbyte = val ? (this.bitbyte | (1 << this.bitbytepos++)) : (this.bitbyte & ~(1 << this.bitbytepos++));\r\n }\r\n }\r\n\r\n byte(signed = false, write = false, val) {\r\n this.pad(1);\r\n const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;\r\n const res = this.view[fn](this.offset, val);\r\n this.offset += 1;\r\n return res;\r\n }\r\n\r\n int16(signed = false, write = false, val) {\r\n this.pad(2);\r\n let fn = signed ? 'Int16' : 'Uint16';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 2;\r\n return res;\r\n }\r\n\r\n int32(signed = false, write = false, val) {\r\n this.pad(4);\r\n let fn = signed ? 'Int32' : 'Uint32';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n float(signed = false, write = false, val) {\r\n this.pad(4);\r\n const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n bytes(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.byte(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n ints(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int16(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n longs(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int32(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n floats(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.float(write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n string(nr, signed = false, write = false, val) {\r\n if (write) {\r\n for (var i = 0; i < nr; ++i) {\r\n var code = val.charCodeAt(i) || '\\0';\r\n this.byte(false, true, code);\r\n }\r\n } else {\r\n const res = this.bytes(nr);\r\n return String.fromCharCode.apply(null, res).replace(/\\x00/g, '');\r\n }\r\n }\r\n}\r\n\r\nexport const parseConfig = (data, config, start) => {\r\n const p = new DataParser(data);\r\n if (start) p.offset = start;\r\n const result = {};\r\n config.map(value => {\r\n const prop = value.length ? value.length : value.signed;\r\n set(result, value.prop, p[value.type](prop, value.signed));\r\n });\r\n return result;\r\n}\r\n\r\nexport const writeConfig = (buffer, data, config, start) => {\r\n const p = new DataParser(buffer);\r\n if (start) p.offset = start;\r\n config.map(value => {\r\n const val = get(data, value.prop);\r\n if (value.length) {\r\n p[value.type](value.length, value.signed, true, val);\r\n } else {\r\n p[value.type](value.signed, true, val);\r\n }\r\n });\r\n}","import { settings } from './settings';\nimport espeasy from './espeasy';\nimport { loader } from './loader';\nimport { menu } from './menu';\n\nconst PLUGINS = [\n 'http://localhost:8080/build/dash.js'\n];\n\nconst dynamicallyLoadScript = (url) => {\n return new Promise(resolve => {\n var script = document.createElement(\"script\"); // create a script DOM node\n script.src = url; // set its src to the provided URL\n script.onreadystatechange = resolve;\n script.onload = resolve;\n script.onerror = resolve;\n document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)\n });\n}\n\nconst getPluginAPI = () => {\n return {\n settings,\n loader,\n menu,\n espeasy,\n }\n}\n\nwindow.getPluginAPI = getPluginAPI;\n\nexport const loadPlugins = async () => {\n return Promise.all(PLUGINS.map(async plugin => {\n return dynamicallyLoadScript(plugin);\n }));\n}","import { get, set, getKeys } from './helpers';\r\n\r\nconst diff = (obj1, obj2, path = '') => {\r\n return getKeys(obj1).map(key => {\r\n const val1 = obj1[key];\r\n const val2 = obj2[key];\r\n if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);\r\n else if (val1 !== val2) {\r\n return [{ path: `${path}.${key}`, val1, val2 }];\r\n } else return [];\r\n }).flat();\r\n}\r\n\r\nclass Settings {\r\n init(settings) {\r\n this.settings = settings;\r\n this.apply();\r\n }\r\n\r\n get(prop) {\r\n return get(this.settings, prop);\r\n }\r\n\r\n /**\r\n * sets changes to the current version and sets changed flag\r\n * @param {*} prop \r\n * @param {*} value \r\n */\r\n set(prop, value) {\r\n const obj = get(this.settings, prop);\r\n if (typeof obj === 'object') {\r\n console.warn('settings an object!');\r\n set(this.settings, prop, value);\r\n } else {\r\n set(this.settings, prop, value);\r\n }\r\n \r\n if (this.diff().length) this.changed = true;\r\n }\r\n\r\n /**\r\n * returns diff between applied and current version\r\n */\r\n diff() {\r\n return diff(this.stored, this.settings);\r\n }\r\n\r\n /***\r\n * applys changes and creates new version in localStorage\r\n */\r\n apply() {\r\n this.stored = JSON.parse(JSON.stringify(this.settings));\r\n this.changed = false;\r\n }\r\n}\r\n\r\nexport const settings = window.settings1 = new Settings();","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst logLevelOptions = [\r\n { name: 'None', value: 0 },\r\n { name: 'Error', value: 1 },\r\n { name: 'Info', value: 2 },\r\n { name: 'Debug', value: 3 },\r\n { name: 'Debug More', value: 4 },\r\n { name: 'Debug Dev', value: 9 },\r\n];\r\n\r\nconst formConfig = {\r\n onSave: (vals) => { console.log(vals); },\r\n groups: {\r\n rules: {\r\n name: 'Rules Settings',\r\n configs: {\r\n enabled: { name: 'Enabled', type: 'checkbox' },\r\n oldengine: { name: 'Old Engine', type: 'checkbox' },\r\n }\r\n },\r\n mqtt: {\r\n name: 'Controller Settings',\r\n configs: {\r\n retain_flag: { name: 'MQTT Retain Msg', type: 'checkbox' },\r\n interval: { name: 'Message Interval', type: 'number' },\r\n useunitname: { name: 'MQTT use unit name as ClientId', type: 'checkbox' },\r\n changeclientid: { name: 'MQTT change ClientId at reconnect', type: 'checkbox' },\r\n }\r\n },\r\n ntp: {\r\n name: 'NTP Settings',\r\n configs: {\r\n enabled: { name: 'Use NTP', type: 'checkbox' },\r\n host: { name: 'NTP Hostname', type: 'string' },\r\n }\r\n },\r\n dst: {\r\n name: 'DST Settings',\r\n configs: {\r\n enabled: { name: 'Use DST', type: 'checkbox' },\r\n }\r\n },\r\n location: {\r\n name: 'Location Settings',\r\n configs: {\r\n long: { name: 'Longitude', type: 'number' },\r\n lat: { name: 'Latitude', type: 'number' },\r\n }\r\n },\r\n log: {\r\n name: 'Log Settings',\r\n configs: {\r\n syslog_ip: { name: 'Syslog IP', type: 'ip' },\r\n syslog_level: { name: 'Syslog Level', type: 'select', options: logLevelOptions },\r\n syslog_facility: { name: 'Syslog Level', type: 'select', options: [\r\n { name: 'Kernel', value: 0 },\r\n { name: 'User', value: 1 },\r\n { name: 'Daemon', value: 3 },\r\n { name: 'Message', value: 5 },\r\n { name: 'Local0', value: 16 },\r\n { name: 'Local1', value: 17 },\r\n { name: 'Local2', value: 18 },\r\n { name: 'Local3', value: 19 },\r\n { name: 'Local4', value: 20 },\r\n { name: 'Local5', value: 21 },\r\n { name: 'Local6', value: 22 },\r\n { name: 'Local7', value: 23 },\r\n ] },\r\n serial_level: { name: 'Serial Level', type: 'select', options: logLevelOptions },\r\n web_level: { name: 'Web Level', type: 'select', options: logLevelOptions },\r\n }\r\n },\r\n serial: {\r\n name: 'Serial Settings',\r\n configs: {\r\n enabled: { name: 'Enable Serial', type: 'checkbox' },\r\n baudrate: { name: 'Baud Rate', type: 'number' },\r\n }\r\n },\r\n experimental: {\r\n name: 'Experimental Settings',\r\n configs: {\r\n ip_octet: { name: 'Fixed IP Octet', type: 'number' },\r\n WDI2CAddress: { name: 'WD I2C Address', type: 'number' },\r\n ssdp: { name: 'Use SSDP', type: 'checkbox', var: 'ssdp.enabled' },\r\n ConnectionFailuresThreshold: { name: 'Connection Failiure Treshold', type: 'number' },\r\n WireClockStretchLimit: { name: 'I2C ClockStretchLimit', type: 'number' },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigAdvancedPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (values) => {\r\n settings.set('config', values);\r\n window.location.href='#devices';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nexport const pins = [\r\n { name: 'None', value: 255 },\r\n { name: 'GPIO-0', value: 0 },\r\n { name: 'GPIO-1', value: 1 },\r\n { name: 'GPIO-2', value: 2 },\r\n { name: 'GPIO-3', value: 3 },\r\n { name: 'GPIO-4', value: 4 },\r\n { name: 'GPIO-5', value: 5 },\r\n { name: 'GPIO-9', value: 9 },\r\n { name: 'GPIO-10', value: 10 },\r\n { name: 'GPIO-12', value: 12 },\r\n { name: 'GPIO-13', value: 13 },\r\n { name: 'GPIO-14', value: 14 },\r\n { name: 'GPIO-15', value: 15 },\r\n { name: 'GPIO-16', value: 16 }\r\n];\r\n\r\nconst pinState = [\r\n { name: 'Default', value: 0 },\r\n { name: 'Low', value: 1 },\r\n { name: 'High', value: 2 },\r\n { name: 'Input', value: 3 },\r\n];\r\n\r\nconst formConfig = {\r\n groups: {\r\n led: {\r\n name: 'WiFi Status LED',\r\n configs: {\r\n gpio: { name: 'GPIO --> LED', type: 'select', options: pins },\r\n inverse: { name: 'Inversed LED', type: 'checkbox' },\r\n }\r\n },\r\n reset: {\r\n name: 'Reset Pin',\r\n configs: {\r\n pin: { name: 'GPIO <-- Switch', type: 'select', options: pins },\r\n }\r\n },\r\n i2c: {\r\n name: 'I2C Settings',\r\n configs: {\r\n sda: { name: 'GPIO - SDA', type: 'select', options: pins },\r\n scl: { name: 'GPIO - SCL', type: 'select', options: pins },\r\n }\r\n },\r\n spi: {\r\n name: 'SPI Settings',\r\n configs: {\r\n enabled: { name: 'Init SPI', type: 'checkbox' },\r\n }\r\n },\r\n gpio: {\r\n name: 'GPIO boot states',\r\n configs: {\r\n 0: { name: 'Pin Mode GPIO-0', type: 'select', options: pinState },\r\n 1: { name: 'Pin Mode GPIO-1', type: 'select', options: pinState },\r\n 2: { name: 'Pin Mode GPIO-2', type: 'select', options: pinState },\r\n 3: { name: 'Pin Mode GPIO-3', type: 'select', options: pinState },\r\n 4: { name: 'Pin Mode GPIO-4', type: 'select', options: pinState },\r\n 5: { name: 'Pin Mode GPIO-5', type: 'select', options: pinState },\r\n 9: { name: 'Pin Mode GPIO-9', type: 'select', options: pinState },\r\n 10: { name: 'Pin Mode GPIO-10', type: 'select', options: pinState },\r\n 12: { name: 'Pin Mode GPIO-12', type: 'select', options: pinState },\r\n 13: { name: 'Pin Mode GPIO-13', type: 'select', options: pinState },\r\n 14: { name: 'Pin Mode GPIO-14', type: 'select', options: pinState },\r\n 15: { name: 'Pin Mode GPIO-15', type: 'select', options: pinState },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigHardwarePage extends Component {\r\n render(props) {\r\n const config = settings.get('hardware');\r\n formConfig.onSave = (values) => {\r\n settings.set('hardware', values);\r\n window.location.href='#devices';\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst ipBlockLevel = [\r\n { name: 'Allow All', value: 0 },\r\n { name: 'Allow Local Subnet', value: 1 },\r\n { name: 'Allow IP Range', value: 2 },\r\n]\r\n\r\nconst formConfig = {\r\n groups: {\r\n general: {\r\n name: 'General',\r\n configs: {\r\n unitname: { name: 'Unit Name', type: 'string' },\r\n unitnr: { name: 'Unit Number', type: 'number' },\r\n appendunit: { name: 'Append Unit Name to Hostname', type: 'checkbox' },\r\n password: { name: 'Admin Password', type: 'password', var: 'security[0].password' },\r\n }\r\n },\r\n wifi: {\r\n name: 'WiFi',\r\n configs: {\r\n ssid: { name: 'SSID', type: 'string', var: 'security[0].WifiSSID' },\r\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\r\n fallbackssid: { name: 'Fallback SSID', type: 'string', var: 'security[0].WifiSSID2' },\r\n fallbackpasswd: { name: 'Fallback Password', type: 'password', var: 'security[0].WifiKey2' },\r\n wpaapmode: { name: 'WPA AP Mode Key:', type: 'string', var: 'security[0].WifiAPKey' },\r\n }\r\n },\r\n clientIP: {\r\n name: 'Client IP Filtering',\r\n configs: {\r\n blocklevel: { name: 'IP Block Level', type: 'select', options: ipBlockLevel, var: 'security[0].IPblockLevel' },\r\n lowerrange: { name: 'Access IP lower range', type: 'ip', var: 'security[0].AllowedIPrangeLow' },\r\n upperrange: { name: 'Access IP upper range', type: 'ip', var: 'security[0].AllowedIPrangeHigh' },\r\n }\r\n },\r\n IP: {\r\n name: 'IP Settings',\r\n configs: {\r\n ip: { name: 'IP', type: 'ip' },\r\n gw: { name: 'Gateway', type: 'ip' },\r\n subnet: { name: 'Subnet', type: 'ip' },\r\n dns: { name: 'DNS', type: 'ip' },\r\n }\r\n },\r\n sleep: {\r\n name: 'Sleep Mode',\r\n configs: {\r\n awaketime: { name: 'Sleep awake time', type: 'number' },\r\n sleeptime: { name: 'Sleep time', type: 'number' },\r\n sleeponfailiure: { name: 'Sleep on connection failure', type: 'checkbox' },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (values) => {\r\n settings.set(`config`, values);\r\n window.location.href='#devices';\r\n }\r\n const config = settings.get('config');\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { set } from '../lib/helpers';\r\nimport { EspEaspP2PComponent } from '../components/espeasy_p2p';\r\n\r\nexport const protocols = [\r\n { name: '- Standalone -', value: 0 },\r\n { name: 'Domoticz HTTP', value: 1 },\r\n { name: 'Domoticz MQTT', value: 2 },\r\n { name: 'Nodo Telnet', value: 3 },\r\n { name: 'ThingSpeak', value: 4 },\r\n { name: 'OpenHAB MQTT', value: 5 },\r\n { name: 'PiDome MQTT', value: 6 },\r\n { name: 'Emoncms', value: 7 },\r\n { name: 'Generic HTTP', value: 8 },\r\n { name: 'FHEM HTTP', value: 9 },\r\n { name: 'Generic UDP', value: 10 },\r\n { name: 'ESPEasy P2P Networking', value: 13 },\r\n { name: 'Email', value: 25 },\r\n];\r\n\r\nconst baseFields = { \r\n \r\n dns: { name: 'Locate Controller', type: 'select', options: [{ value: 0, name: 'Use IP Address'}, { value: 1, name: 'Use Hostname' }] },\r\n IP: { name: 'IP', type: 'ip' },\r\n hostname: { name: 'Hostname', type: 'string' },\r\n port: { name: 'Port', type: 'number' },\r\n minimal_time_between: { name: 'Minimum Send Interval', type: 'number' },\r\n max_queue_depth: { name: 'Max Queue Depth', type: 'number' },\r\n max_retry: { name: 'Max Retries', type: 'number' },\r\n delete_oldest: { name: 'Full Queue Action', type: 'select', options: [{ value: 0, name: 'Ignore New'}, { value: 1, name: 'Delete Oldest' }] },\r\n must_check_reply: { name: 'Check Reply', type: 'select', options: [{ value: 0, name: 'Ignore Acknowledgement'}, { value: 1, name: 'Check Acknowledgement' }] },\r\n client_timeout: { name: 'Client Timeout', type: 'number' },\r\n};\r\n\r\nconst user = { name: 'Controller User', type: 'string' };\r\nconst password = { name: 'Controller Password', type: 'password' };\r\nconst subscribe = { name: 'Controller Subscribe', type: 'string' };\r\nconst publish = { name: 'Controller Publish', type: 'string' };\r\nconst lwtTopicField = { MQTT_lwt_topic: { name: 'Controller LWT topic:', type: 'string' }, lwt_message_connect: { name: 'LWT Connect Message', type: 'string' }, lwt_message_disconnect: { name: 'LWT Disconnect Message', type: 'string' }, };\r\n\r\nconst baseDefaults = {\r\n port: 1883,\r\n minimal_time_between: 100,\r\n max_queue_depth: 10,\r\n max_retry: 10,\r\n client_timeout: 1000,\r\n}\r\nconst getDefaults = {\r\n 1: () => ({ // Domoticz HTTP\r\n port: 8080,\r\n }), 2: () => ({ // Domoticz MQTT\r\n subscribe: 'domoticz/out',\r\n public: 'domoticz/in'\r\n }), 3: () => ({ // Nodo Telnet\r\n port: 23,\r\n }), 4: () => ({ // ThingSpeak\r\n port: 80,\r\n }), 5: () => ({ // OpenHAB MQTT\r\n subscribe: '/%sysname%/#',\r\n publish: '/%sysname%/%tskname%/%valname%',\r\n }), 6: () => ({ // PiDome MQTT\r\n subscribe: '/Home/#',\r\n publish: '/hooks/devices/%id%/SensorData/%valname%',\r\n }), 7: () => ({ // Emoncms\r\n port: 80,\r\n }), 8: () => ({ // Generic HTTP\r\n port: 80,\r\n publish: 'demo.php?name=%sysname%&task=%tskname%&valuename=%valname%&value=%value%',\r\n }), 9: () => ({ // FHEM HTTP\r\n port: 8383,\r\n }), 10: () => ({ // Generic UDP\r\n port: 514,\r\n publish: '%sysname%_%tskname%_%valname%=%value%',\r\n }), 13: () => ({ // EspEasy P2P\r\n port: 65501,\r\n Custom: 1\r\n }), \r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const defaults = {...baseDefaults, ...getDefaults[type]()};\r\n Object.keys(defaults).forEach((key) => {\r\n const val = defaults[key];\r\n set(config.settings, key, val);\r\n });\r\n}\r\n\r\nconst getFormConfig = (type) => {\r\n let additionalFields = {};\r\n let additionalGroups = {};\r\n switch (Number(type)) {\r\n case 2: // Domoticz MQTT\r\n case 5: // OpenHAB MQTT\r\n additionalFields = { ...baseFields, user, password, subscribe, publish, ...lwtTopicField };\r\n break;\r\n case 6: // 'PiDome MQTT'\r\n additionalFields = { ...baseFields, subscribe, publish, ...lwtTopicField };\r\n break;\r\n case 3: //'Nodo Telnet'\r\n case 7: //'Emoncms':\r\n additionalFields = { ...baseFields, password };\r\n break;\r\n case 8: // 'Generic HTTP'\r\n additionalFields = { ...baseFields, user, password, subscribe, publish };\r\n break;\r\n case 1: // Domoticz HTTP\r\n case 9: // 'FHEM HTTP'\r\n additionalFields = { ...baseFields, user, password };\r\n break;\r\n case 10: //'Generic UDP': \r\n additionalFields = { ...baseFields, subscribe, publish };\r\n break;\r\n case 13: //'ESPEasy P2P Networking':\r\n additionalGroups = {\r\n global: {\r\n name: 'Global Settings',\r\n configs: {\r\n port: { name: 'UDP Port', type: 'number', var: 'ROOT.config.espnetwork.port' }\r\n }\r\n },\r\n nodes: {\r\n name: 'Connected Nodes',\r\n configs: {\r\n nodes: { type: 'custom', component: EspEaspP2PComponent}\r\n }\r\n } \r\n }\r\n break;\r\n case 0:\r\n default:\r\n additionalFields = { ...baseFields };\r\n }\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Controller Settings',\r\n configs: {\r\n protocol: { name: 'Protocol', type: 'select', var: 'protocol', options: protocols },\r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n ...additionalFields\r\n }\r\n },\r\n ...additionalGroups\r\n },\r\n }\r\n}\r\n\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class ControllerEditPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`controllers[${props.params[0]}]`);\r\n this.state = {\r\n protocol: this.config.protocol,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.protocol);\r\n formConfig.groups.settings.configs.protocol.onChange = (e) => {\r\n this.setState({ protocol: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n \r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { protocols } from './controllers.edit';\r\nimport { types } from './controllers.notifications';\r\n\r\nexport class ControllersPage extends Component {\r\n render(props) {\r\n const controllers = settings.get('controllers');\r\n const notifications = settings.get('notifications');\r\n return (\r\n Controllers \r\n
{controllers.map((c, i) => {\r\n const editUrl = `#controllers/edit/${i}`;\r\n return (\r\n
\r\n
\r\n {i+1}: {(c.enabled) ? (✓ ) : (✗ )}\r\n [{protocols.find(p => p.value === c.protocol).name}] PORT:{c.settings.port} HOST:{c.settings.host}\r\n edit \r\n \r\n
\r\n )\r\n })}
\r\n
Notifications \r\n
{notifications.map((n, i) => {\r\n const editUrl = `#controllers/notification/${i}`;\r\n return (\r\n
\r\n
\r\n {i+1}: {(n.enabled) ? (✓ ) : (✗ )}\r\n [{types.find(p => p.value === n.type).name}] PORT:{n.settings.port} HOST:{n.settings.host}\r\n edit \r\n \r\n
\r\n )\r\n })}
\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { set } from '../lib/helpers';\r\nimport { pins } from '../devices/_defs';\r\n\r\nexport const types = [\r\n { name: '- None -', value: 0 },\r\n { name: 'Email', value: 1 },\r\n { name: 'Buzzer', value: 2 },\r\n];\r\n\r\nconst baseDefaults = {}\r\nconst getDefaults = {\r\n 0: () => ({}),\r\n 1: () => ({ // Email\r\n }), 2: () => ({ // Buzzer\r\n }),\r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const defaults = {...baseDefaults, ...getDefaults[type]()};\r\n Object.keys(defaults).forEach((key) => {\r\n const val = defaults[key];\r\n set(config.settings, key, val);\r\n });\r\n}\r\n\r\nconst getFormConfig = (type) => {\r\n let additionalFields = {};\r\n switch (Number(type)) {\r\n case 1: // Email\r\n additionalFields = { \r\n domain: { name: 'Domain', type: 'string' },\r\n hostname: { name: 'Hostname', type: 'string' },\r\n port: { name: 'Port', type: 'number' },\r\n sender: { name: 'Sender', type: 'string' },\r\n receiver: { name: 'Receiver', type: 'string' },\r\n subject: { name: 'Subject', type: 'string' },\r\n user: { name: 'Username', type: 'string' },\r\n pass: { name: 'Password', type: 'string' },\r\n body: { name: 'Body', type: 'textarea' },\r\n };\r\n break;\r\n case 2: // Buzzer\r\n additionalFields = { \r\n pin1: { name: '1st GPIO', type: 'select', options: pins }\r\n };\r\n break;\r\n }\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Notification Settings',\r\n configs: {\r\n type: { name: 'Type', type: 'select', var: 'type', options: types },\r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n ...additionalFields\r\n }\r\n },\r\n },\r\n }\r\n}\r\n\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class ControllerNotificationsPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`notifications[${props.params[0]}]`);\r\n this.state = {\r\n type: this.config.type,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.type);\r\n formConfig.groups.settings.configs.type.onChange = (e) => {\r\n this.setState({ type: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n formConfig.onSave = (values) => {\r\n settings.set(`notifications[${props.params[0]}]`, values);\r\n window.location.href='#controllers';\r\n }\r\n \r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { devices } from '../devices';\r\nimport { set } from '../lib/helpers';\r\n\r\nconst baseFields = { \r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n name: { name: 'Name', type: 'string' },\r\n};\r\n\r\nconst getFormConfig = (type) => {\r\n const device = devices.find(d => d.value === parseInt(type));\r\n if (!device) return null;\r\n\r\n const dataAcquisitionForm = device.fields.data ? {\r\n name: 'Data Acquisition',\r\n configs: {\r\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]', if: 'controllers[0].enabled' },\r\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]', if: 'controllers[1].enabled' },\r\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]', if: 'controllers[2].enabled' },\r\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]', if: 'controllers[0].enabled' },\r\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]', if: 'controllers[1].enabled' },\r\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]', if: 'controllers[2].enabled' },\r\n interval: { name: 'Interval', type: 'number', var: 'interval' },\r\n }\r\n }: {};\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Device Settings',\r\n configs: {\r\n device: { name: 'Device', type: 'select', var: 'device', options: devices },\r\n ...baseFields,\r\n \r\n }\r\n },\r\n ...device.fields,\r\n data: dataAcquisitionForm,\r\n values: {\r\n name: 'Values',\r\n configs: {\r\n ...[...new Array(device.fields.vals || 0)].reduce((acc, x, i) => {\r\n acc[`value${i}`] = [\r\n { name: `Name ${i+1}`, var: `settings.values[${i}].name`, type: 'string' }, \r\n { name: `Formula ${i+1}`, var: `settings.values[${i}].formula`, type: 'string' },\r\n { name: `Decimals ${i+1}`, var: `extra.decimals[${i}]`, type: 'number' }\r\n ];\r\n return acc;\r\n }, {})\r\n }\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const device = devices.find(d => d.value === parseInt(type));\r\n Object.keys(device.fields).forEach((groupKey) => {\r\n const group = device.fields[groupKey];\r\n if (!group.configs) return;\r\n Object.keys(group.configs).forEach((configKey) => {\r\n const cfg = group.configs[configKey];\r\n const key = cfg.var || `${groupKey}.${configKey}`;\r\n let val = 0;\r\n if (cfg.type === 'string') val = '';\r\n else if (cfg.type === 'ip') val = [0, 0, 0, 0];\r\n set(config, key, val);\r\n });\r\n });\r\n if (device.fields.defaults) {\r\n const defaultConfig = device.fields.defaults();\r\n Object.keys(defaultConfig).forEach(key => {\r\n const val = defaultConfig[key];\r\n set(config, key, val); \r\n })\r\n }\r\n \r\n}\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class DevicesEditPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`tasks[${props.params[0]}]`);\r\n this.state = {\r\n device: this.config.device,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.device);\r\n if (!formConfig) {\r\n alert('something went wrong, cant edit device');\r\n window.location.href='#devices';\r\n }\r\n formConfig.groups.settings.configs.device.onChange = (e) => {\r\n this.setState({ device: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n formConfig.onSave = (values) => {\r\n settings.set(`tasks[${props.params[0]}]`, values);\r\n window.location.href='#devices';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { devices } from '../devices';\r\n\r\nexport class DevicesPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleEnableToggle = (e) => {\r\n settings.set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0);\r\n }\r\n }\r\n render(props) {\r\n const tasks = settings.get('tasks');\r\n if (!tasks) return;\r\n return (\r\n \r\n {tasks.map((task, i) => {\r\n const editUrl = `#devices/edit/${i}`;\r\n const device = devices.find(d => d.value === task.device);\r\n const deviceType = device ? device.name : '--unknown--';\r\n const enabledProp = `tasks[${i}].enabled`;\r\n return (\r\n
\r\n
\r\n {i+1}: \r\n {task.settings.name} [{deviceType}] {task.gpio1!==255?`GPIO:${task.gpio1}`:''}\r\n edit \r\n \r\n
\r\n {/* {device.settings.values.map(v => {\r\n return ({v.name}: {v.value} );\r\n })} */}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { saveConfig } from '../conf/config.dat';\r\nimport { storeFile } from '../lib/espeasy';\r\nimport { loader } from '../lib/loader';\r\n\r\n\r\nexport class DiffPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.diff = settings.diff();\r\n this.stage = 0;\r\n\r\n this.calculateByteDiff = () => {\r\n this.data = saveConfig(false);\r\n this.bytediffcount = 0;\r\n this.bytediff = Array.from(new Uint8Array(this.data));\r\n this.bytediff = this.bytediff.map((byte, i) => {\r\n const binary = settings.binary[i];\r\n if (byte !== binary) {\r\n this.bytediffcount++;\r\n return `${binary.toString(16)}:${byte.toString(16)} `;\r\n } else return `${byte.toString(16)}`;\r\n });\r\n this.bytediff = this.bytediff.join(' ');\r\n }\r\n\r\n this.calculateByteDiff();\r\n\r\n this.applyChanges = () => {\r\n if (this.stage === 0) {\r\n this.diff.map(d => {\r\n const input = this.form.elements[d.path];\r\n if (!input.checked) {\r\n settings.set(input.name, d.val1);\r\n }\r\n });\r\n settings.apply();\r\n this.diff = settings.diff();\r\n this.calculateByteDiff();\r\n this.stage = 1;\r\n return;\r\n }\r\n \r\n loader.show();\r\n storeFile('config.dat', this.data).then(() => {\r\n this.stage = 0;\r\n window.location.href='#config/reboot';\r\n });\r\n \r\n };\r\n }\r\n \r\n\r\n render(props) {\r\n if (this.bytediff && (this.stage === 1 /*|| this.bytediffcount*/)) {\r\n return (
APPLY (bytes: {this.bytediffcount}) )\r\n }\r\n return (\r\n \r\n
byte diff: {this.bytediffcount}
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nconst devices = [\r\n { nr: 1, name: 'Senzor', type: 'DH11', vars: [{ name: 'Temperature', formula: '', value: 21 }, { name: 'Humidity', formula: '', value: 65 }] },\r\n { nr: 1, name: 'Humidity', type: 'Linear Regulator', vars: [{ name: 'Output', formula: '', value: 1 }] }\r\n]\r\n\r\nexport class DiscoverPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n devices: []\r\n }\r\n\r\n this.scani2c = () => {\r\n fetch('/i2cscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n });\r\n }\r\n\r\n this.scanwifi = () => {\r\n fetch('/wifiscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n });\r\n }\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
\r\n Scan I2C \r\n Scan WiFi \r\n
\r\n
{this.state.devices.map(device => {\r\n return (\r\n \r\n \r\n {JSON.stringify(device)}\r\n \r\n \r\n )\r\n })}
\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\n\r\nconst formConfig = {\r\n onSave: (vals) => { console.log(vals); },\r\n groups: {\r\n keep: {\r\n name: 'Settings to keep',\r\n configs: {\r\n unit: { name: 'Keep Unit/Name', type: 'checkbox' },\r\n wifi: { name: 'Keep WiFi config', type: 'checkbox' },\r\n network: { name: 'Keep network config', type: 'checkbox' },\r\n ntp: { name: 'Keep NTP/DST config', type: 'checkbox' },\r\n log: { name: 'Keep log config', type: 'checkbox' },\r\n }\r\n },\r\n load: {\r\n name: 'Pre-defined configurations',\r\n configs: {\r\n config: { name: 'Pre-Defined config', type: 'select', options: [\r\n { name: 'default', value: 0 },\r\n { name: 'Sonoff Basic', value: 1 },\r\n { name: 'Sonoff TH1x', value: 2 },\r\n { name: 'Sonoff S2x', value: 3 },\r\n { name: 'Sonoff TouchT1', value: 4 },\r\n { name: 'Sonoff TouchT2', value: 5 },\r\n { name: 'Sonoff TouchT3', value: 6 },\r\n { name: 'Sonoff 4ch', value: 7 },\r\n { name: 'Sonoff POW', value: 8 },\r\n { name: 'Sonoff POW-r2', value: 9 },\r\n { name: 'Shelly1', value: 10 },\r\n ] },\r\n }\r\n },\r\n },\r\n}\r\n\r\nconst config = {}\r\n\r\nexport class FactoryResetPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (config) => {\r\n const data = new FormData();\r\n if (config.keep.unit) data.append('kun', 'on');\r\n if (config.keep.wifi) data.append('kw', 'on');\r\n if (config.keep.network) data.append('knet', 'on');\r\n if (config.keep.ntp) data.append('kntp', 'on');\r\n if (config.keep.log) data.append('klog', 'on');\r\n data.append('fdm', config.load.config);\r\n data.append('savepref', 'Save Preferences');\r\n fetch('/factoryreset', {\r\n method: 'POST',\r\n body: data \r\n }).then(() => {\r\n data.delete('savepref');\r\n data.append('performfactoryreset', 'Factory Reset');\r\n fetch('/factoryreset', {\r\n method: 'POST',\r\n body: data\r\n }).then(() => {\r\n setTimeout(() => {\r\n window.location.href=\"#devices\";\r\n }, 5000);\r\n }, e => {\r\n\r\n })\r\n }, e => {\r\n\r\n });\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\nimport { deleteFile, storeFile } from '../lib/espeasy';\n\nexport class FSPage extends Component {\n constructor(props) {\n super(props);\n this.state = { files: [] }\n\n this.saveForm = () => {\n storeFile(this.file.files[0]);\n }\n\n this.deleteFile = e => {\n const fileName = e.currentTarget.dataset.name;\n deleteFile(fileName).then(() => (this.fetch()));\n }\n }\n\n fetch() {\n fetch('/filelist_json').then(response => response.json()).then(fileList => {\n this.setState({ files: fileList });\n });\n }\n\n render(props) {\n return (\n \n
\n
\n \n \n File \n Size \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n {file.fileName} \n {file.size} \n \n { file.fileName.endsWith('.dat') ? (null) :\n (X )\n }\n \n \n ); })}\n\n \n
\n
\n );\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","export * from './controllers';\nexport * from './devices';\nexport * from './config';\nexport * from './config.advanced';\nexport * from './config.hardware';\nexport * from './reboot';\nexport * from './load';\nexport * from './update';\nexport * from './rules';\nexport * from './tools';\nexport * from './fs';\nexport * from './factory_reset';\nexport * from './discover';\nexport * from './controllers.edit';\nexport * from './controllers.notifications';\nexport * from './devices.edit';\nexport * from './diff';\nexport * from './rules.editor';\nexport * from './setup';\nexport * from './tools.sysvars';","import { h, Component } from 'preact';\r\nimport { storeFile } from '../lib/espeasy';\r\n\r\nexport class LoadPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.saveForm = () => {\r\n storeFile(this.file.files[0]);\r\n }\r\n }\r\n\r\n render(props) {\r\n return ()\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { loader } from '../lib/loader';\r\n\r\n\r\nexport class RebootPage extends Component {\r\n render(props) {\r\n return (\r\n ESPEasy is rebooting ... please wait a while, this page will auto refresh.
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n loader.show();\r\n fetch('/?cmd=reboot').then(() => {\r\n setTimeout(() => {\r\n loader.hide();\r\n window.location.hash = '#devices';\r\n window.location.reload();\r\n }, 5000)\r\n })\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { FlowEditor } from '../lib/floweditor';\r\nimport { nodes } from '../lib/node_definitions';\r\nimport { getConfigNodes, loadRuleConfig, storeRuleConfig, storeRule } from '../lib/espeasy';\r\n\r\nexport class RulesEditorPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.nodes = nodes;\r\n }\r\n\r\n render(props) {\r\n return (\r\n this.element = ref}>\r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n getConfigNodes().then((out) => {\r\n out.nodes.forEach(device => nodes.unshift(device));\r\n const ifElseNode = nodes.find(node => node.type === 'if/else');\r\n if (!ifElseNode.config[0].loaded) {\r\n out.vars.forEach(v => ifElseNode.config[0].values.push(v)); \r\n ifElseNode.config[0].loaded = true;\r\n }\r\n\r\n this.chart = new FlowEditor(this.element, nodes, { \r\n onSave: (config, rules) => {\r\n storeRuleConfig(config);\r\n storeRule(rules);\r\n }\r\n });\r\n \r\n loadRuleConfig().then(config => {\r\n this.chart.loadConfig(config);\r\n });\r\n });\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\n\r\nconst rules = [\r\n { name: 'Rule 1', file: 'rules1.txt', index: 1 },\r\n { name: 'Rule 2', file: 'rules2.txt', index: 2 },\r\n { name: 'Rule 3', file: 'rules3.txt', index: 3 },\r\n { name: 'Rule 4', file: 'rules4.txt', index: 4 },\r\n];\r\n\r\nexport class RulesPage extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n selected: rules[0]\r\n }\r\n\r\n this.selectionChanged = (e) => {\r\n this.setState({ selected: rules[e.currentTarget.value] });\r\n }\r\n\r\n this.saveRule = () => {\r\n const data = new FormData();\r\n data.append('set', this.state.selected.index);\r\n data.append('rules', this.text.value);\r\n fetch('/rules', {\r\n method: 'POST',\r\n body: data \r\n }).then(res => {\r\n console.log('succesfully saved');\r\n console.log(res.text());\r\n });\r\n }\r\n\r\n this.fetch();\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
\r\n Rule 1 \r\n Rule 2 \r\n Rule 3 \r\n Rule 4 \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n async fetch() {\r\n const text = await fetch(this.state.selected.file).then(response => response.text());\r\n this.text.value = text;\r\n }\r\n\r\n async componentDidUpdate() {\r\n this.fetch();\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { loader } from '../lib/loader';\r\n\r\nconst formConfig = {\r\n groups: {\r\n wifi: {\r\n name: 'WiFi',\r\n configs: {\r\n ssid: { name: 'SSID', type: 'select', options: [], var: 'security[0].WifiSSID' },\r\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\r\n }\r\n },\r\n },\r\n}\r\n\r\nexport class SetupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n devices: [],\r\n }\r\n loader.show();\r\n\r\n this.save = () => {\r\n loader.show();\r\n\r\n const data = new FormData();\r\n data.append('ssid', this.config.security[0].WifiSSID);\r\n data.append('pass', this.config.security[0].WifiKey);\r\n fetch('/setup', {\r\n method: 'POST',\r\n data\r\n }).then(() => {\r\n setTimeout(() => {\r\n loader.hide();\r\n window.location.href = '/';\r\n }, 5000);\r\n })\r\n }\r\n }\r\n\r\n render(props) {\r\n formConfig.groups.wifi.configs.ssid.options = this.state.devices.map(device => ({ name: device.ssid, value: device.ssd }));\r\n const config = settings.get('config');\r\n return (\r\n \r\n
\r\n CONTINUE \r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n fetch('/wifiscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n loader.hide();\r\n });\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class ToolsPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.history = '';\r\n\r\n this.sendCommand = (e) => {\r\n fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => {\r\n this.cmdOutput.value = response;\r\n });\r\n }\r\n }\r\n\r\n fetch() {\r\n fetch('/logjson').then(response => response.json()).then(response => {\r\n response.Log.Entries.map(log => {\r\n this.history += `${(new Date(log.timestamp).toLocaleTimeString())} ${log.text}
`;\r\n this.log.innerHTML = this.history;\r\n if (true) {\r\n this.log.scrollTop = this.log.scrollHeight;\r\n }\r\n })\r\n });\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
this.log = ref}>loading logs ...
\r\n
Command: this.cmd = ref}/>send
\r\n
this.cmdOutput = ref}> \r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n this.interval = setInterval(() => {\r\n this.fetch();\r\n }, 1000);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.interval) clearInterval(this.interval);\r\n }\r\n}","import { h, Component } from 'preact';\n\nexport class SysVarsPage extends Component {\n constructor(props) {\n super(props);\n this.state = { device: props.params[0], vars: {} };\n }\n\n fetch() {\n fetch(`/sysinfo_json`).then(response => response.json()).then(vars => {\n this.setState({ vars });\n });\n }\n\n render(props) {\n return (\n \n {\n Object.keys(this.state.vars).map(v => {\n const value = this.state.vars[v];\n return (\n \n {v} \n {\n Object.keys(value).map((v1, i) => {\n const value1 = value[v1];\n return (\n \n {v1} \n \n
\n )\n })\n }\n \n )\n \n \n })\n }\n \n )\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","import { h, Component } from 'preact';\nimport { fetchProgress } from '../lib/espeasy';\nimport { loader } from '../lib/loader';\n\nexport class UpdatePage extends Component {\n constructor(props) {\n super(props);\n\n this.state = { progress: 0 }\n\n this.saveForm = () => {\n loader.show();\n const data = new FormData()\n data.append('file', this.file.files[0])\n data.append('user', 'hubot')\n \n fetchProgress('/update', {\n method: 'POST',\n body: data,\n onProgress: (e) => {\n const perc = 100 * e.loaded / e.total;\n this.setState({ progress: perc });\n }\n }).then(() => {\n window.location.href = '#config/reboot';\n });\n }\n }\n\n render(props) {\n return (\n \n \n \n Firmware:\n \n this.file = ref} />\n upload \n { (this.state.progress) ? ( {Math.round(this.state.progress)}% ) : (null) }\n
\n \n )\n }\n}"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///./src/lib/helpers.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/set.js","webpack:///./src/lib/floweditor.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/mini-toastr/mini-toastr.js","webpack:///./src/components/menu/index.js","webpack:///./src/components/page/index.js","webpack:///./src/lib/parser.js","webpack:///./src/lib/settings.js","webpack:///./src/conf/config.dat.js","webpack:///./src/lib/loader.js","webpack:///./src/lib/espeasy.js","webpack:///./src/components/form/index.js","webpack:///./src/components/espeasy_p2p/index.js","webpack:///./src/pages/controllers.edit.js","webpack:///./src/pages/config.hardware.js","webpack:///./src/devices/_defs.js","webpack:///./src/pages/controllers.notifications.js","webpack:///./src/devices/1_input_switch.js","webpack:///./src/devices/3_generic_pulse.js","webpack:///./src/devices/4_ds18b20.js","webpack:///./src/devices/5_dht.js","webpack:///./src/devices/8_rfid.js","webpack:///./src/devices/9_io_mcp.js","webpack:///./src/devices/10_light_lux.js","webpack:///./src/devices/11_pme.js","webpack:///./src/devices/12_lcd.js","webpack:///./src/devices/13_hcsr04.js","webpack:///./src/devices/14_si7021.js","webpack:///./src/devices/15_tls2561.js","webpack:///./src/devices/17_pn532.js","webpack:///./src/devices/18_dust.js","webpack:///./src/devices/19_pcf8574.js","webpack:///./src/devices/20_ser2net.js","webpack:///./src/devices/21_level_control.js","webpack:///./src/devices/22_pca9685.js","webpack:///./src/devices/23_oled1306.js","webpack:///./src/devices/26_system_info.js","webpack:///./src/devices/36_sh1106.js","webpack:///./src/devices/43_output_clock.js","webpack:///./src/devices/index.js","webpack:///./src/devices/2_analog_input.js","webpack:///./src/devices/6_bmp085.js","webpack:///./src/devices/7_pcf8591.js","webpack:///./src/devices/24_mlx90614.js","webpack:///./src/devices/25_ads1115.js","webpack:///./src/devices/27_ina219.js","webpack:///./src/devices/28_bmx280.js","webpack:///./src/devices/29_mqtt_domoticz.js","webpack:///./src/devices/30_bmp280.js","webpack:///./src/devices/31_sht1x.js","webpack:///./src/devices/32_ms5611.js","webpack:///./src/devices/33_dummy_device.js","webpack:///./src/devices/34_dht12.js","webpack:///./src/devices/37_mqtt_import.js","webpack:///./src/devices/38_neopixel_basic.js","webpack:///./src/devices/39_thermocouple.js","webpack:///./src/devices/41_neopixel_clock.js","webpack:///./src/devices/42_neopixel_candle.js","webpack:///./src/devices/44_wifi_gateway.js","webpack:///./src/devices/49_mhz19.js","webpack:///./src/devices/52_senseair.js","webpack:///./src/devices/56_sds011.js","webpack:///./src/devices/59_rotary_encoder.js","webpack:///./src/devices/63_ttp229.js","webpack:///./src/pages/config.js","webpack:///./src/pages/config.advanced.js","webpack:///./src/pages/rules.js","webpack:///./src/pages/factory_reset.js","webpack:///./src/pages/devices.edit.js","webpack:///./src/lib/node_definitions.js","webpack:///./src/pages/setup.js","webpack:///./src/lib/menu.js","webpack:///./src/pages/devices.js","webpack:///./src/pages/controllers.js","webpack:///./src/pages/rules.editor.js","webpack:///./src/pages/load.js","webpack:///./src/pages/reboot.js","webpack:///./src/pages/tools.js","webpack:///./src/pages/discover.js","webpack:///./src/pages/tools.sysvars.js","webpack:///./src/pages/update.js","webpack:///./src/pages/fs.js","webpack:///./src/pages/diff.js","webpack:///./src/lib/plugins.js","webpack:///./src/app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","h","Component","render","VNode","options","stack","EMPTY_CHILDREN","nodeName","attributes","lastSimple","child","simple","children","arguments","length","push","pop","undefined","String","vnode","extend","obj","props","applyRef","ref","current","defer","Promise","resolve","then","setTimeout","IS_NON_DIMENSIONAL","items","enqueueRender","component","_dirty","debounceRendering","rerender","renderComponent","isNamedNode","node","normalizedNodeName","toLowerCase","getNodeProps","defaultProps","removeNode","parentNode","removeChild","setAccessor","old","isSvg","style","cssText","test","innerHTML","__html","useCapture","replace","substring","addEventListener","eventProxy","removeEventListener","_listeners","e","removeAttribute","removeAttributeNS","setAttributeNS","setAttribute","className","this","type","event","mounts","diffLevel","isSvgMode","hydrating","flushMounts","shift","afterMount","componentDidMount","diff","dom","context","mountAll","parent","componentRoot","ownerSVGElement","ret","idiff","appendChild","out","prevSvgMode","splitText","_component","nodeValue","document","createTextNode","replaceChild","recollectNodeTree","vnodeName","originalComponent","oldDom","isDirectOwner","_componentConstructor","isOwner","_parentComponent","constructor","setComponentProps","base","unmountComponent","createComponent","nextBase","buildComponentFromVNode","createElementNS","createElement","firstChild","fc","vchildren","a","nextSibling","isHydrating","j","f","vchild","originalChildren","childNodes","keyed","keyedLen","min","len","childrenLen","vlen","_child","__key","trim","insertBefore","innerDiffNode","dangerouslySetInnerHTML","attrs","diffAttributes","unmountOnly","removeChildren","lastChild","next","previousSibling","recyclerComponents","Ctor","inst","doRender","splice","state","renderMode","_disable","__ref","getDerivedStateFromProps","componentWillMount","componentWillReceiveProps","prevContext","prevProps","syncComponentUpdates","isChild","rendered","cbase","previousProps","previousState","prevState","previousContext","isUpdate","initialBase","initialChildComponent","skip","snapshot","shouldComponentUpdate","componentWillUpdate","getChildContext","getSnapshotBeforeUpdate","toUnmount","childComponent","childProps","baseParent","componentRef","componentDidUpdate","afterUpdate","_renderCallbacks","beforeUnmount","componentWillUnmount","inner","merge","setState","callback","forceUpdate","getKeys","lodash_get__WEBPACK_IMPORTED_MODULE_0__","lodash_get__WEBPACK_IMPORTED_MODULE_0___default","lodash_set__WEBPACK_IMPORTED_MODULE_1__","lodash_set__WEBPACK_IMPORTED_MODULE_1___default","keys","nativeCreate","getNative","eq","array","isKeyable","map","data","__data__","isArray","Array","baseGetTag","isObjectLike","symbolTag","freeGlobal","freeSelf","self","root","Function","baseIsNative","getValue","baseGet","path","defaultValue","result","isKey","stringToPath","toString","getRawTag","objectToString","nullTag","undefinedTag","symToStringTag","other","isSymbol","INFINITY","baseSet","FlowEditor","_helpers__WEBPACK_IMPORTED_MODULE_0__","color","saveChart","renderedNodes","filter","inputs","trigger","walkRule","rule","v","config","outputs","lines","line","input","nodeObject","position","x","y","loadChart","chart","from","find","configNode","nodes","NodeUI","canvas","cfg","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","body","clientWidth","clientHeight","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","triggers","group","rules","toDsl","ruleset","padding","indent","outI","subrule","split","join","includes","dNd","enableNativeDrag","nodeElement","draggable","ondragstart","ev","dataTransfer","setData","enableNativeDrop","fn","ondragover","preventDefault","ondrop","fill","tension","delta","Node","conf","assign","toHtml","super","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","onMouseUp","handleDblClickEvent","showConfigBox","text","textContent","handleRightClickEvent","index","indexOf","destroy","stopPropagation","val","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","inputRect","remove","ondblclick","onclose","template","content","cloneNode","configBox","querySelectorAll","okButton","getElementById","onclick","forms","elements","cfgUI","getSelectOptions","values","getCfgUI","onSave","readOnly","debug","nodeConfig","getData","loadConfig","saveConfig","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","groups","castPath","toKey","reIsDeepProp","reIsPlainProp","global","g","window","objectProto","nativeObjectToString","isOwn","tag","unmasked","memoizeCapped","rePropName","reEscapeChar","string","charCodeAt","match","number","quote","subString","memoize","MAX_MEMOIZE_SIZE","func","cache","size","clear","MapCache","FUNC_ERROR_TEXT","resolver","TypeError","memoized","args","apply","has","set","Cache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","entries","entry","Hash","ListCache","Map","hash","hashClear","hashDelete","hashGet","hashHas","hashSet","isFunction","isMasked","isObject","toSource","reIsHostCtor","funcProto","funcToString","reIsNative","RegExp","asyncTag","funcTag","genTag","proxyTag","uid","coreJsData","maskSrcKey","exec","IE_PROTO","HASH_UNDEFINED","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","assocIndexOf","getMapData","baseToString","arrayMap","symbolProto","symbolToString","iteratee","assignValue","isIndex","customizer","lastIndex","nested","newValue","objValue","baseAssignValue","configurable","writable","MAX_SAFE_INTEGER","reIsUint","LIB_NAME","ERROR","WARN","SUCCESS","INFO","CONTAINER_CLASS","NOTIFICATION_CLASS","TITLE_CLASS","ICON_CLASS","MESSAGE_CLASS","ERROR_CLASS","WARN_CLASS","SUCCESS_CLASS","INFO_CLASS","EMPTY_STRING","makeCss","flat","flatten","into","prefix","k","prop","Date","str","substr","lastIndexOf","mini_toastr_config","types","animation","fadeOut","cb","opacity","timeout","icons","appendTarget","makeNode","allowHtml","[object Object]","z-index","right","cursor","margin","background-color","border-radius","box-shadow","&:hover","font-weight","display","vertical-align","addElem","elem","mini_toastr","isInitialised","message","title","overrideConf","notificationElem","getTypeClass","iconNode","nodeType","createIcon","aConfig","newConfig","css","head","getElementsByTagName","styleElem","id","styleSheet","appendStyles","forEach","showMessage","class","Menu","renderMenuItem","menu","action","preact","href","onClick","selected","open","menus","Page","PageComponent","page","pagetitle","changed","params","DataParser","view","DataView","offset","bitbyte","bitbytepos","pad","nr","bit","signed","write","byte","res","int16","int32","float","setFloat32","getFloat32","bytes","vals","ints","longs","floats","fromCharCode","code","parseConfig","writeConfig","buffer","obj1","obj2","val1","val2","settings","settings1","init","console","warn","stored","PLUGIN_EXTRACONFIGVAR_MAX","VARS_PER_TASK","configDatParseConfig","TaskSettings","NAME_FORMULA_LENGTH_MAX","ControllerSettings","NotificationSettings","SecuritySettings","ii","save","ArrayBuffer","tasks","extra","controllers","saveData","bufferNotifications","notifications","bufferSecurity","security","fileName","blob","Blob","Uint8Array","url","URL","createObjectURL","download","click","revokeObjectURL","loader","querySelector","show","classList","add","hide","getJsonStat","async","fetch","response","json","loadDevices","Sensors","getConfigNodes","devices","vars","device","taskValues","TaskValues","TaskName","Name","TaskNumber","Type","comparison","fnNames","fnName","Extra IO - PCA9685","Switch input - PCF8574","Switch input - MCP23017","Display - OLED SSD1306","Display - LCD2004","findIndex","fetchProgress","opts","rej","xhr","XMLHttpRequest","method","headers","setRequestHeader","onload","target","responseText","onerror","upload","onProgress","onprogress","send","storeFile","filename","file","File","formData","FormData","append","miniToastr","success","error","deleteFile","storeRuleConfig","loadRuleConfig","storeRule","espeasy","getDashboardConfigNodes","getVariables","all","stat","System","Value","storeDashboardConfig","loadDashboardConfig","Form","onChange","form","checked","parseFloat","isNaN","parseInt","startsWith","renderConfig","varName","max","defaultChecked","option","clickEvent","renderConfigGroup","configs","configArray","varId","var","if","CustomComponent","for","renderGroup","EspEaspP2PComponent","refresh","first","ip","protocols","baseFields","dns","IP","hostname","port","minimal_time_between","max_queue_depth","max_retry","delete_oldest","must_check_reply","client_timeout","user","password","subscribe","publish","lwtTopicField","MQTT_lwt_topic","lwt_message_connect","lwt_message_disconnect","baseDefaults","getDefaults","1","2","public","3","4","5","6","7","8","9","10","13","Custom","setDefaultConfig","defaults","getFormConfig","additionalFields","additionalGroups","Number","controllers_edit_password","protocol","enabled","pins","pinState","formConfig","led","gpio","inverse","reset","pin","i2c","sda","scl","spi","0","12","14","15","domain","sender","receiver","subject","pass","pin1","eventTypes","inputSwitch","gpio1","interval","configs_float[1]","configs_float[2]","settings.values[0].name","sensor","pullup","inversed","switch_type","switch_button_type","send_boot_state","advanced","debounce","dblclick","dblclick_interval","longpress","longpress_interval","safe_button","genericPulse","settings.values[1].name","settings.values[2].name","counter_type","mode_type","ds18b20","dht","configs[0]","rfidWeigand","gpio2","inputMcp","gpio4","bh1750","i2c_address","send_to_sleep","pme","lcd2004","line1","line2","line3","line4","button","command","hcsr04","treshold","max_distance","unit","filter_size","si7021","resolution","tls2561","gain","pn532","dust","pcf8574","ser2net","baudrate","serial_config","reset_after_boot","event_processing","levelControl","check_task","task","check_value","level","hysteresis","displaySize","indicator","fields","oversampling","point1","point2","altitude","configs_float[0]","frequency","range","rotation","font","line5","line6","line7","line8","multiplexer","settings.values[3].name","indicator1","idx","leds","R","G","B","event1","event2","event3","event4","event5","event6","event7","event8","data_bits","parity","stop_bits","gpio3","configs_long[1]","limit_min","limit_max","scancode","sort","b","localeCompare","general","unitname","unitnr","appendunit","wifi","ssid","passwd","fallbackssid","fallbackpasswd","wpaapmode","clientIP","blocklevel","lowerrange","upperrange","gw","subnet","sleep","awaketime","sleeptime","sleeponfailiure","logLevelOptions","log","oldengine","mqtt","retain_flag","useunitname","changeclientid","ntp","host","dst","location","long","lat","syslog_ip","syslog_level","syslog_facility","serial_level","web_level","serial","experimental","ip_octet","WDI2CAddress","ssdp","ConnectionFailuresThreshold","WireClockStretchLimit","keep","network","load","dataAcquisitionForm","send1","send2","send3","idx1","idx2","idx3","reduce","acc","groupKey","configKey","defaultConfig","handleEnableToggle","currentTarget","dataset","editUrl","deviceType","enabledProp","data-prop","unshift","ifElseNode","loaded","form_Form","selectionChanged","saveRule","saveForm","files","reload","delete","history","sendCommand","cmd","cmdOutput","Log","Entries","timestamp","toLocaleTimeString","scrollTop","scrollHeight","setInterval","clearInterval","scani2c","scanwifi","v1","value1","progress","perc","total","Math","round","fileList","endsWith","data-name","routes","alert","stage","calculateByteDiff","bytediffcount","bytediff","binary","applyChanges","change","WifiSSID","WifiKey","ssd","addMenu","addRoute","route","PLUGINS","getPluginAPI","loadPlugins","script","src","onreadystatechange","dynamicallyLoadScript","plugin","getFragment","clearSlashes","App","menuActive","menuToggle","slice","active","menu_Menu","page_Page","newFragment","parts","arrayBuffer","notificationResponse","securityResponse","app_App"],"mappings":"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","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 62);\n","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","import get from 'lodash/get';\r\nimport set from 'lodash/set';\r\n\r\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\r\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\r\n\r\n// const set = (obj, path, value) => {\r\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\r\n// if (!a[c]) a[c] = {};\r\n// if (i === src.length - 1) a[c] = value;\r\n// }, obj)\r\n// }\r\n\r\nconst getKeys = object => {\r\n const keys = [];\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n}\r\n\r\nexport { get, set, getKeys }","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return `${val} `;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'number':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'select':\n template.innerHTML = `${cfg.name} ${cfg.values.map(val => (getSelectOptions(val)))}
`;\n break;\n case 'textselect':\n template.innerHTML = ``\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n \n
\n \n ${type} \n
\n \n \n \n
\n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","export function fadeOut (element, cb) {\n if (element.style.opacity && element.style.opacity > 0.05) {\n element.style.opacity = element.style.opacity - 0.05\n } else if (element.style.opacity && element.style.opacity <= 0.1) {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n if (cb) cb()\n }\n } else {\n element.style.opacity = 0.9\n }\n setTimeout(() => fadeOut.apply(this, [element, cb]), 1000 / 30\n )\n}\n\nexport const LIB_NAME = 'mini-toastr'\n\nexport const ERROR = 'error'\nexport const WARN = 'warn'\nexport const SUCCESS = 'success'\nexport const INFO = 'info'\nexport const CONTAINER_CLASS = LIB_NAME\nexport const NOTIFICATION_CLASS = `${LIB_NAME}__notification`\nexport const TITLE_CLASS = `${LIB_NAME}-notification__title`\nexport const ICON_CLASS = `${LIB_NAME}-notification__icon`\nexport const MESSAGE_CLASS = `${LIB_NAME}-notification__message`\nexport const ERROR_CLASS = `-${ERROR}`\nexport const WARN_CLASS = `-${WARN}`\nexport const SUCCESS_CLASS = `-${SUCCESS}`\nexport const INFO_CLASS = `-${INFO}`\nexport const DEFAULT_TIMEOUT = 3000\n\nconst EMPTY_STRING = ''\n\nexport function flatten (obj, into, prefix) {\n into = into || {}\n prefix = prefix || EMPTY_STRING\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k)) {\n const prop = obj[k]\n if (prop && typeof prop === 'object' && !(prop instanceof Date || prop instanceof RegExp)) {\n flatten(prop, into, prefix + k + ' ')\n } else {\n if (into[prefix] && typeof into[prefix] === 'object') {\n into[prefix][k] = prop\n } else {\n into[prefix] = {}\n into[prefix][k] = prop\n }\n }\n }\n }\n\n return into\n}\n\nexport function makeCss (obj) {\n const flat = flatten(obj)\n let str = JSON.stringify(flat, null, 2)\n str = str.replace(/\"([^\"]*)\": {/g, '$1 {')\n .replace(/\"([^\"]*)\"/g, '$1')\n .replace(/(\\w*-?\\w*): ([\\w\\d .#]*),?/g, '$1: $2;')\n .replace(/},/g, '}\\n')\n .replace(/ &([.:])/g, '$1')\n\n str = str.substr(1, str.lastIndexOf('}') - 1)\n\n return str\n}\n\nexport function appendStyles (css) {\n let head = document.head || document.getElementsByTagName('head')[0]\n let styleElem = makeNode('style')\n styleElem.id = `${LIB_NAME}-styles`\n styleElem.type = 'text/css'\n\n if (styleElem.styleSheet) {\n styleElem.styleSheet.cssText = css\n } else {\n styleElem.appendChild(document.createTextNode(css))\n }\n\n head.appendChild(styleElem)\n}\n\nexport const config = {\n types: {ERROR, WARN, SUCCESS, INFO},\n animation: fadeOut,\n timeout: DEFAULT_TIMEOUT,\n icons: {},\n appendTarget: document.body,\n node: makeNode(),\n allowHtml: false,\n style: {\n [`.${CONTAINER_CLASS}`]: {\n position: 'fixed',\n 'z-index': 99999,\n right: '12px',\n top: '12px'\n },\n [`.${NOTIFICATION_CLASS}`]: {\n cursor: 'pointer',\n padding: '12px 18px',\n margin: '0 0 6px 0',\n 'background-color': '#000',\n opacity: 0.8,\n color: '#fff',\n 'border-radius': '3px',\n 'box-shadow': '#3c3b3b 0 0 12px',\n width: '300px',\n [`&.${ERROR_CLASS}`]: {\n 'background-color': '#D5122B'\n },\n [`&.${WARN_CLASS}`]: {\n 'background-color': '#F5AA1E'\n },\n [`&.${SUCCESS_CLASS}`]: {\n 'background-color': '#7AC13E'\n },\n [`&.${INFO_CLASS}`]: {\n 'background-color': '#4196E1'\n },\n '&:hover': {\n opacity: 1,\n 'box-shadow': '#000 0 0 12px'\n }\n },\n [`.${TITLE_CLASS}`]: {\n 'font-weight': '500'\n },\n [`.${MESSAGE_CLASS}`]: {\n display: 'inline-block',\n 'vertical-align': 'middle',\n width: '240px',\n padding: '0 12px'\n }\n }\n}\n\nexport function makeNode (type = 'div') {\n return document.createElement(type)\n}\n\nexport function createIcon (node, type, config) {\n const iconNode = makeNode(config.icons[type].nodeType)\n const attrs = config.icons[type].attrs\n\n for (const k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n iconNode.setAttribute(k, attrs[k])\n }\n }\n\n node.appendChild(iconNode)\n}\n\nexport function addElem (node, text, className, config) {\n const elem = makeNode()\n elem.className = className\n if (config.allowHtml) {\n elem.innerHTML = text\n } else {\n elem.appendChild(document.createTextNode(text))\n }\n node.appendChild(elem)\n}\n\nexport function getTypeClass (type) {\n if (type === SUCCESS) return SUCCESS_CLASS\n if (type === WARN) return WARN_CLASS\n if (type === ERROR) return ERROR_CLASS\n if (type === INFO) return INFO_CLASS\n\n return EMPTY_STRING\n}\n\nconst miniToastr = {\n config,\n isInitialised: false,\n showMessage (message, title, type, timeout, cb, overrideConf) {\n const config = {}\n Object.assign(config, this.config)\n Object.assign(config, overrideConf)\n\n const notificationElem = makeNode()\n notificationElem.className = `${NOTIFICATION_CLASS} ${getTypeClass(type)}`\n\n notificationElem.onclick = function () {\n config.animation(notificationElem, null)\n }\n\n if (title) addElem(notificationElem, title, TITLE_CLASS, config)\n if (config.icons[type]) createIcon(notificationElem, type, config)\n if (message) addElem(notificationElem, message, MESSAGE_CLASS, config)\n\n config.node.insertBefore(notificationElem, config.node.firstChild)\n setTimeout(() => config.animation(notificationElem, cb), timeout || config.timeout\n )\n\n if (cb) cb()\n return this\n },\n init (aConfig) {\n const newConfig = {}\n Object.assign(newConfig, config)\n Object.assign(newConfig, aConfig)\n this.config = newConfig\n\n const cssStr = makeCss(newConfig.style)\n appendStyles(cssStr)\n\n newConfig.node.id = CONTAINER_CLASS\n newConfig.node.className = CONTAINER_CLASS\n newConfig.appendTarget.appendChild(newConfig.node)\n\n Object.keys(newConfig.types).forEach(v => {\n this[newConfig.types[v]] = function (message, title, timeout, cb, config) {\n this.showMessage(message, title, newConfig.types[v], timeout, cb, config)\n return this\n }.bind(this)\n }\n )\n\n this.isInitialised = true\n\n return this\n },\n setIcon (type, nodeType = 'i', attrs = []) {\n attrs.class = attrs.class ? attrs.class + ' ' + ICON_CLASS : ICON_CLASS\n\n this.config.icons[type] = {nodeType, attrs}\n }\n}\n\nexport default miniToastr","import { h, Component } from 'preact';\r\n\r\nexport class Menu extends Component {\r\n renderMenuItem(menu) {\r\n if (menu.action) {\r\n return (\r\n \r\n )\r\n }\r\n if (menu.href === this.props.selected.href) {\r\n return [\r\n (),\r\n ...menu.children.map(child => {\r\n if (child.action) {\r\n return (\r\n \r\n )\r\n }\r\n return ();\r\n })\r\n ]\r\n }\r\n return ();\r\n }\r\n\r\n render(props) {\r\n if (props.open === false) return;\r\n \r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class Page extends Component {\r\n render(props) {\r\n const PageComponent = props.page.component;\r\n return (\r\n \r\n );\r\n }\r\n}","import { get, set } from './helpers';\r\n\r\nclass DataParser {\r\n constructor(data) {\r\n this.view = new DataView(data);\r\n this.offset = 0;\r\n this.bitbyte = 0;\r\n this.bitbytepos = 7;\r\n }\r\n\r\n pad(nr) {\r\n while (this.offset % nr) {\r\n this.offset++;\r\n }\r\n }\r\n\r\n bit(signed = false, write = false, val) {\r\n if (this.bitbytepos === 7) {\r\n if (!write) {\r\n this.bitbyte = this.byte();\r\n this.bitbytepos = 0;\r\n } else {\r\n this.byte(signed, write, this.bitbyte);\r\n }\r\n }\r\n if (!write) {\r\n return (this.bitbyte >> this.bitbytepos++) & 1;\r\n } else {\r\n this.bitbyte = val ? (this.bitbyte | (1 << this.bitbytepos++)) : (this.bitbyte & ~(1 << this.bitbytepos++));\r\n }\r\n }\r\n\r\n byte(signed = false, write = false, val) {\r\n this.pad(1);\r\n const fn = `${write ? 'set' : 'get'}${signed ? 'Int8' : 'Uint8'}`;\r\n const res = this.view[fn](this.offset, val);\r\n this.offset += 1;\r\n return res;\r\n }\r\n\r\n int16(signed = false, write = false, val) {\r\n this.pad(2);\r\n let fn = signed ? 'Int16' : 'Uint16';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 2;\r\n return res;\r\n }\r\n\r\n int32(signed = false, write = false, val) {\r\n this.pad(4);\r\n let fn = signed ? 'Int32' : 'Uint32';\r\n const res = write ? this.view[`set${fn}`](this.offset, val, true) : this.view[`get${fn}`](this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n float(signed = false, write = false, val) {\r\n this.pad(4);\r\n const res = write ? this.view.setFloat32(this.offset, val, true) : this.view.getFloat32(this.offset, true);\r\n this.offset += 4;\r\n return res;\r\n }\r\n bytes(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.byte(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n ints(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int16(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n longs(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.int32(signed, write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n floats(nr, signed = false, write = false, vals) {\r\n const res = [];\r\n for (var x = 0; x < nr; x++) {\r\n res.push(this.float(write, vals ? vals[x] : null));\r\n }\r\n return res;\r\n }\r\n string(nr, signed = false, write = false, val) {\r\n if (write) {\r\n for (var i = 0; i < nr; ++i) {\r\n var code = val.charCodeAt(i) || '\\0';\r\n this.byte(false, true, code);\r\n }\r\n } else {\r\n const res = this.bytes(nr);\r\n return String.fromCharCode.apply(null, res).replace(/\\x00/g, '');\r\n }\r\n }\r\n}\r\n\r\nexport const parseConfig = (data, config, start) => {\r\n const p = new DataParser(data);\r\n if (start) p.offset = start;\r\n const result = {};\r\n config.map(value => {\r\n const prop = value.length ? value.length : value.signed;\r\n set(result, value.prop, p[value.type](prop, value.signed));\r\n });\r\n return result;\r\n}\r\n\r\nexport const writeConfig = (buffer, data, config, start) => {\r\n const p = new DataParser(buffer);\r\n if (start) p.offset = start;\r\n config.map(value => {\r\n const val = get(data, value.prop);\r\n if (value.length) {\r\n p[value.type](value.length, value.signed, true, val);\r\n } else {\r\n p[value.type](value.signed, true, val);\r\n }\r\n });\r\n}","import { get, set, getKeys } from './helpers';\r\n\r\nconst diff = (obj1, obj2, path = '') => {\r\n return getKeys(obj1).map(key => {\r\n const val1 = obj1[key];\r\n const val2 = obj2[key];\r\n if (val1 instanceof Object) return diff(val1, val2, path ? `${path}.${key}` : key);\r\n else if (val1 !== val2) {\r\n return [{ path: `${path}.${key}`, val1, val2 }];\r\n } else return [];\r\n }).flat();\r\n}\r\n\r\nclass Settings {\r\n init(settings) {\r\n this.settings = settings;\r\n this.apply();\r\n }\r\n\r\n get(prop) {\r\n return get(this.settings, prop);\r\n }\r\n\r\n /**\r\n * sets changes to the current version and sets changed flag\r\n * @param {*} prop \r\n * @param {*} value \r\n */\r\n set(prop, value) {\r\n const obj = get(this.settings, prop);\r\n if (typeof obj === 'object') {\r\n console.warn('settings an object!');\r\n set(this.settings, prop, value);\r\n } else {\r\n set(this.settings, prop, value);\r\n }\r\n \r\n if (this.diff().length) this.changed = true;\r\n }\r\n\r\n /**\r\n * returns diff between applied and current version\r\n */\r\n diff() {\r\n return diff(this.stored, this.settings);\r\n }\r\n\r\n /***\r\n * applys changes and creates new version in localStorage\r\n */\r\n apply() {\r\n this.stored = JSON.parse(JSON.stringify(this.settings));\r\n this.changed = false;\r\n }\r\n}\r\n\r\nexport const settings = window.settings1 = new Settings();","import { parseConfig, writeConfig } from '../lib/parser';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst TASKS_MAX = 12;\r\nconst NOTIFICATION_MAX = 3;\r\nconst CONTROLLER_MAX = 3;\r\nconst PLUGIN_CONFIGVAR_MAX = 8;\r\nconst PLUGIN_CONFIGFLOATVAR_MAX = 4;\r\nconst PLUGIN_CONFIGLONGVAR_MAX = 4;\r\nconst PLUGIN_EXTRACONFIGVAR_MAX = 16;\r\nconst NAME_FORMULA_LENGTH_MAX = 40;\r\nconst VARS_PER_TASK = 4;\r\n\r\nexport const configDatParseConfig = [\r\n { prop: 'status.PID', type: 'int32' },\r\n { prop: 'status.version', type: 'int32' },\r\n { prop: 'status.build', type: 'int16' },\r\n { prop: 'config.IP.ip', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.gw', type: 'bytes', length: 4 }, \r\n { prop: 'config.IP.subnet', type: 'bytes', length: 4 },\r\n { prop: 'config.IP.dns', type: 'bytes', length: 4 },\r\n { prop: 'config.experimental.ip_octet', type: 'byte' },\r\n { prop: 'config.general.unitnr', type: 'byte' },\r\n { prop: 'config.general.unitname', type: 'string', length: 26 },\r\n { prop: 'config.ntp.host', type: 'string', length: 64 },\r\n { prop: 'config.sleep.sleeptime', type: 'int32' },\r\n { prop: 'hardware.i2c.sda', type: 'byte' },\r\n { prop: 'hardware.i2c.scl', type: 'byte' },\r\n { prop: 'hardware.led.gpio', type: 'byte' },\r\n { prop: 'Pin_sd_cs', type: 'byte' }, // TODO\r\n { prop: 'hardware.gpio', type: 'bytes', length: 17 },\r\n { prop: 'config.log.syslog_ip', type: 'bytes', length: 4 },\r\n { prop: 'config.espnetwork.port', type: 'int32' },\r\n { prop: 'config.log.syslog_level', type: 'byte' },\r\n { prop: 'config.log.serial_level', type: 'byte' },\r\n { prop: 'config.log.web_level', type: 'byte' },\r\n { prop: 'config.log.sd_level', type: 'byte' },\r\n { prop: 'config.serial.baudrate', type: 'int32' },\r\n { prop: 'config.mqtt.interval', type: 'int32' },\r\n { prop: 'config.sleep.awaketime', type: 'byte' },\r\n { prop: 'CustomCSS', type: 'byte' }, // TODO\r\n { prop: 'config.dst.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WDI2CAddress', type: 'byte' },\r\n { prop: 'config.rules.enabled', type: 'byte' },\r\n { prop: 'config.serial.enabled', type: 'byte' },\r\n { prop: 'config.ssdp.enabled', type: 'byte' },\r\n { prop: 'config.ntp.enabled', type: 'byte' },\r\n { prop: 'config.experimental.WireClockStretchLimit', type: 'int32' },\r\n { prop: 'GlobalSync', type: 'byte' }, // TODO\r\n { prop: 'config.experimental.ConnectionFailuresThreshold', type: 'int32' },\r\n { prop: 'TimeZone', type: 'int16', signed: true},// TODO\r\n { prop: 'config.mqtt.retain_flag', type: 'byte' },\r\n { prop: 'hardware.spi.enabled', type: 'byte' },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].protocol`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].type`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].device`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_TaskDeviceID`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio1`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio2`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio3`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].gpio4`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1pullup`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs`, type:'ints', length: PLUGIN_CONFIGVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].pin1inversed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_float`, type:'floats', length: PLUGIN_CONFIGFLOATVAR_MAX })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].configs_long`, type:'longs', length: PLUGIN_CONFIGLONGVAR_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].OLD_senddata`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].global_sync`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].data_feed`, type:'byte' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].interval`, type:'int32' })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].enabled`, type:'byte' })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].enabled`, type:'byte' })),\r\n [...Array(NOTIFICATION_MAX)].map((x, i) => ({ prop: `notifications[${i}].enabled`, type:'byte' })), \r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceID`, type:'longs', length: CONTROLLER_MAX })),\r\n [...Array(TASKS_MAX)].map((x, i) => ({ prop: `tasks[${i}].TaskDeviceSendData`, type:'bytes', length: CONTROLLER_MAX })),\r\n { prop: 'hardware.led.inverse', type: 'byte' }, \r\n { prop: 'config.sleep.sleeponfailiure', type: 'byte' },\r\n { prop: 'UseValueLogger', type: 'byte' },// TODO\r\n { prop: 'ArduinoOTAEnable', type: 'byte' },// TODO\r\n { prop: 'config.dst.DST_Start', type: 'int16' },\r\n { prop: 'config.dst.DST_End', type: 'int16' },\r\n { prop: 'UseRTOSMultitasking', type: 'byte' },// TODO\r\n { prop: 'hardware.reset.pin', type: 'byte' }, \r\n { prop: 'config.log.syslog_facility', type: 'byte' }, \r\n { prop: 'StructSize', type: 'int32' },// TODO\r\n { prop: 'config.mqtt.useunitname', type: 'byte' },\r\n { prop: 'config.location.lat', type: 'float' },\r\n { prop: 'config.location.long', type: 'float' },\r\n { prop: 'config._emptyBit', type: 'bit' },\r\n { prop: 'config.general.appendunit', type: 'bit' },\r\n { prop: 'config.mqtt.changeclientid', type: 'bit' },\r\n { prop: 'config.rules.oldengine', type: 'bit' },\r\n { prop: 'config._bit4', type: 'bit' },\r\n { prop: 'config._bit5', type: 'bit' },\r\n { prop: 'config._bit6', type: 'bit' },\r\n { prop: 'config._bit7', type: 'bit' },\r\n { prop: 'config._bits1', type: 'byte' },\r\n { prop: 'config._bits2', type: 'byte' },\r\n { prop: 'config._bits3', type: 'byte' },\r\n { prop: 'ResetFactoryDefaultPreference', type: 'int32' },// TODO\r\n].flat();\r\n\r\nexport const TaskSettings = [\r\n { prop: 'index', type:'byte' },\r\n { prop: 'name', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].formula`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n [...Array(VARS_PER_TASK)].map((x, i) => ({ prop: `values[${i}].name`, type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 })),\r\n { prop: 'value_names', type:'string', length: NAME_FORMULA_LENGTH_MAX + 1 },\r\n { prop: 'plugin_config_long', type:'longs', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n { prop: 'decimals', type:'bytes', length: VARS_PER_TASK },\r\n { prop: 'plugin_config', type:'ints', length: PLUGIN_EXTRACONFIGVAR_MAX },\r\n].flat();\r\n\r\nexport const ControllerSettings = [\r\n { prop: 'dns', type:'byte' },\r\n { prop: 'IP', type:'bytes', length: 4 },\r\n { prop: 'port', type:'int32' },\r\n { prop: 'hostname', type:'string', length: 65 },\r\n { prop: 'publish', type:'string', length: 129 },\r\n { prop: 'subscribe', type:'string', length: 129 },\r\n { prop: 'MQTT_lwt_topic', type:'string', length: 129 },\r\n { prop: 'lwt_message_connect', type:'string', length: 129 },\r\n { prop: 'lwt_message_disconnect', type:'string', length: 129 },\r\n { prop: 'minimal_time_between', type:'int32' },\r\n { prop: 'max_queue_depth', type:'int32' },\r\n { prop: 'max_retry', type:'int32' },\r\n { prop: 'delete_oldest', type:'byte' },\r\n { prop: 'client_timeout', type:'int32' },\r\n { prop: 'must_check_reply', type:'byte' },\r\n];\r\n\r\nexport const NotificationSettings = [\r\n { prop: 'server', type:'string', length: 65 },\r\n { prop: 'port', type:'int16' },\r\n { prop: 'domain', type:'string', length: 65 },\r\n { prop: 'sender', type:'string', length: 65 },\r\n { prop: 'receiver', type:'string', length: 65 },\r\n { prop: 'subject', type:'string', length: 129 },\r\n { prop: 'body', type:'string', length: 513 },\r\n { prop: 'pin1', type:'byte' },\r\n { prop: 'pin2', type:'byte' },\r\n { prop: 'user', type:'string', length: 49 },\r\n { prop: 'pass', type:'string', length: 33 },\r\n];\r\n\r\nexport const SecuritySettings = [\r\n { prop: 'WifiSSID', type:'string', length: 32 },\r\n { prop: 'WifiKey', type:'string', length: 64 },\r\n { prop: 'WifiSSID2', type:'string', length: 32 },\r\n { prop: 'WifiKey2', type:'string', length: 64 },\r\n { prop: 'WifiAPKey', type:'string', length: 64 },\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].user`, type:'string', length: 26 })),\r\n [...Array(CONTROLLER_MAX)].map((x, i) => ({ prop: `controllers[${i}].password`, type:'string', length: 64 })),\r\n { prop: 'password', type:'string', length: 26 },\r\n { prop: 'AllowedIPrangeLow', type:'bytes', length: 4 },\r\n { prop: 'AllowedIPrangeHigh', type:'bytes', length: 4 },\r\n { prop: 'IPblockLevel', type:'byte' },\r\n { prop: 'ProgmemMd5', type:'bytes', length: 16 },\r\n { prop: 'md5', type:'bytes', length: 16 },\r\n].flat();\r\n\r\nexport const loadConfig = () => {\r\n return fetch('config.dat').then(response => response.arrayBuffer()).then(async response => { \r\n const settings = parseConfig(response, configDatParseConfig);\r\n\r\n [...Array(12)].map((x, i) => {\r\n settings.tasks[i].settings = parseConfig(response, TaskSettings, 1024*4 + 1024 * 2 * i);\r\n settings.tasks[i].extra = parseConfig(response, TaskSettings, 1024*5 + 1024 * 2 * i);\r\n });\r\n \r\n [...Array(3)].map((x, i) => {\r\n settings.controllers[i].settings = parseConfig(response, ControllerSettings, 1024*27 + 1024 * 2 * i);\r\n settings.controllers[i].extra = parseConfig(response, ControllerSettings, 1024*28 + 1024 * 2 * i);\r\n });\r\n \r\n const notificationResponse = await fetch('notification.dat').then(response => response.arrayBuffer());\r\n [...Array(3)].map((x, i) => {\r\n settings.notifications[i].settings = parseConfig(notificationResponse, NotificationSettings, 1024 * i);\r\n });\r\n \r\n const securityResponse = await fetch('security.dat').then(response => response.arrayBuffer());\r\n settings.config.security = [...Array(3)].map((x, i) => {\r\n return parseConfig(securityResponse, SecuritySettings, 1024 * i);\r\n });\r\n \r\n return { response, settings };\r\n }).then(conf => {\r\n settings.init(conf.settings);\r\n settings.binary = new Uint8Array(conf.response);\r\n console.log(conf.settings);\r\n });\r\n}\r\n\r\nlet ii = 0;\r\nexport const saveConfig = (save = true) => {\r\n if (ii === 0) {\r\n const buffer = new ArrayBuffer(65536);\r\n writeConfig(buffer, settings.settings, configDatParseConfig);\r\n [...Array(12)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.tasks[i].settings, TaskSettings, 1024*4 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.tasks[i].extra, TaskSettings, 1024*5 + 1024 * 2 * i),\r\n };\r\n });\r\n\r\n [...Array(3)].map((x, i) => {\r\n return {\r\n settings: writeConfig(buffer, settings.settings.controllers[i].settings, ControllerSettings, 1024*27 + 1024 * 2 * i),\r\n extra: writeConfig(buffer, settings.settings.controllers[i].extra, ControllerSettings, 1024*28 + 1024 * 2 * i),\r\n };\r\n });\r\n if (save) saveData(buffer, 'config.dat');\r\n else return buffer;\r\n } else if (ii === 1) {\r\n const bufferNotifications = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferNotifications, settings.settings.notifications[i], NotificationSettings, 1024 * i);\r\n });\r\n saveData(bufferNotifications, 'notification.dat');\r\n } else if (ii === 2) {\r\n const bufferSecurity = new ArrayBuffer(4096);\r\n [...Array(3)].map((x, i) => {\r\n return writeConfig(bufferSecurity, settings.settings.security[i], SecuritySettings, 1024 * i);\r\n });\r\n saveData(bufferSecurity, 'security.dat');\r\n }\r\n ii = (ii + 1) % 3;\r\n}\r\n\r\nconst saveData = (function () {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style = \"display: none\";\r\n return function (data, fileName) {\r\n const blob = new Blob([new Uint8Array(data)]);\r\n const url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n };\r\n}());\r\n","class Loader {\r\n constructor() {\r\n this.loader = document.querySelector('.loading');\r\n }\r\n\r\n show() {\r\n this.loader.classList.add('show');\r\n }\r\n\r\n hide() {\r\n this.loader.classList.add('hide');\r\n setTimeout(() => {\r\n this.loader.classList.remove('hide');\r\n this.loader.classList.remove('show');\r\n }, 1000);\r\n }\r\n}\r\n\r\nexport const loader = new Loader();","import miniToastr from 'mini-toastr';\nimport { loader } from './loader';\n\nexport const getJsonStat = async (url = '') => {\n return await fetch(`${url}/json`).then(response => response.json())\n}\n\nexport const loadDevices = async (url) => {\n return getJsonStat(url).then(response => response.Sensors);\n}\n\nexport const getConfigNodes = async () => {\n const devices = await loadDevices();\n const vars = [];\n const nodes = devices.map(device => {\n const taskValues = device.TaskValues || [];\n taskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n const result = [{\n group: 'TRIGGERS',\n type: device.TaskName || `${device.TaskNumber}-${device.Type}`,\n inputs: [],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n value: taskValues.length ? taskValues[0].Name : '',\n }, {\n name: 'euqality',\n type: 'select',\n values: ['', '=', '<', '>', '<=', '>=', '!='],\n value: '',\n }, {\n name: 'value',\n type: 'number',\n }],\n indent: true,\n toString: function () { \n const comparison = this.config[1].value === '' ? 'changes' : `${this.config[1].value} ${this.config[2].value}`;\n return `when ${this.type}.${this.config[0].value} ${comparison}`; \n },\n toDsl: function () { \n const comparison = this.config[1].value === '' ? '' : `${this.config[1].value}${this.config[2].value}`;\n return [`on ${this.type}#${this.config[0].value}${comparison} do\\n%%output%%\\nEndon\\n`]; \n }\n }];\n\n let fnNames, fnName, name;\n switch (device.Type) {\n // todo: need access to GPIO number\n // case 'Switch input - Switch':\n // result.push({\n // group: 'ACTIONS',\n // type: `${device.TaskName} - switch`,\n // inputs: [1],\n // outputs: [1],\n // config: [{\n // name: 'value',\n // type: 'number',\n // }],\n // toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n // toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n // });\n // break;\n case 'Regulator - Level Control':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - setlevel`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'value',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.level = ${this.config[0].value}`; },\n toDsl: function () { return [`config,task,${device.TaskName},setlevel,${this.config[0].value}`]; }\n });\n break;\n case 'Extra IO - PCA9685':\n case 'Switch input - PCF8574':\n case 'Switch input - MCP23017':\n fnNames = {\n 'Extra IO - PCA9685': 'PCF',\n 'Switch input - PCF8574': 'PCF',\n 'Switch input - MCP23017': 'MCP',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`${fnName}GPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Pulse`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n },{\n name: 'unit',\n type: 'select',\n values: ['ms', 's'],\n },{\n name: 'duration',\n type: 'number',\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`; },\n toDsl: function () { \n if (this.config[2].value === 's') {\n return [`${fnName}LongPulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n } else {\n return [`${fnName}Pulse,${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; \n }\n }\n });\n break;\n case 'Extra IO - ProMini Extender':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - GPIO`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'pin',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function () { return `${device.TaskName}.pin${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`EXTGPIO,${this.config[0].value},${this.config[1].value}`]; }\n });\n break;\n case 'Display - OLED SSD1306':\n case 'Display - LCD2004':\n fnNames = {\n 'Display - OLED SSD1306': 'OLED',\n 'Display - LCD2004': 'LCD',\n };\n fnName = fnNames[device.Type];\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'row',\n type: 'select',\n values: [1, 2, 3, 4],\n }, {\n name: 'column',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n }, {\n name: 'text',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.text = ${this.config[2].value}`; },\n toDsl: function () { return [`${fnName},${this.config[0].value},${this.config[1].value},${this.config[2].value}`]; }\n });\n break;\n case 'Generic - Dummy Device':\n result.push({\n group: 'ACTIONS',\n type: `${device.TaskName} - Write`,\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'variable',\n type: 'select',\n values: taskValues.map(value => value.Name),\n }, {\n name: 'value',\n type: 'text',\n }],\n toString: function () { return `${device.TaskName}.${this.config[0].value} = ${this.config[1].value}`; },\n toDsl: function () { return [`TaskValueSet,${device.TaskNumber},${this.config[0].values.findIndex(this.config[0].value)},${this.config[1].value}`]; }\n });\n break;\n }\n\n return result;\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const getVariables = async () => {\n const urls = ['']; //, 'http://192.168.1.130'\n const vars = {};\n await Promise.all(urls.map(async url => {\n const stat = await getJsonStat(url);\n stat.Sensors.map(device => {\n device.TaskValues.map(value => {\n vars[`${stat.System.Name}@${device.TaskName}#${value.Name}`] = value.Value;\n });\n });\n }));\n return vars;\n}\n\nexport const getDashboardConfigNodes = async (url) => {\n const devices = await loadDevices(url);\n const vars = [];\n const nodes = devices.map(device => {\n device.TaskValues.map(value => vars.push(`${device.TaskName}#${value.Name}`));\n return [];\n }).flat();\n\n return { nodes, vars };\n}\n\nexport const fetchProgress = (url, opts={}) => {\n return new Promise( (res, rej)=>{\n var xhr = new XMLHttpRequest();\n xhr.open(opts.method || 'get', url);\n for (var k in opts.headers||{})\n xhr.setRequestHeader(k, opts.headers[k]);\n xhr.onload = e => res(e.target.responseText);\n xhr.onerror = rej;\n if (xhr.upload && opts.onProgress)\n xhr.upload.onprogress = opts.onProgress; // event.loaded / event.total * 100 ; //event.lengthComputable\n xhr.send(opts.body);\n });\n}\n\nexport const storeFile = async (filename, data, onProgress) => {\n loader.show();\n const file = data ? new File([new Blob([data])], filename) : filename;\n const formData = new FormData();\n formData.append('edit', 1);\n formData.append('file', file);\n \n return await fetchProgress('/upload_json', {\n method: 'post',\n body: formData,\n }, onProgress).then(() => {\n loader.hide();\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n loader.hide();\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const deleteFile = async (filename,) => { \n return await fetch('/filelist?delete='+filename).then(() => {\n miniToastr.success('Successfully saved to flash!', '', 5000);\n }, e => {\n miniToastr.error(e.message, '', 5000);\n });\n}\n\nexport const storeDashboardConfig = async (config) => {\n storeFile('d1.txt', config);\n}\n\nexport const loadDashboardConfig = async (nodes) => {\n return await fetch('/d1.txt').then(response => response.json());\n}\n\nexport const storeRuleConfig = async (config) => {\n storeFile('r1.txt', config);\n}\n\nexport const loadRuleConfig = async () => {\n return await fetch('/r1.txt').then(response => response.json());\n}\n\nexport const storeRule = async (rule) => {\n const formData = new FormData();\n formData.append('set', 1);\n formData.append('rules', rule);\n \n return await fetch('/rules', {\n method: 'post',\n body: formData,\n });\n}\n\n\nexport default {\n getJsonStat, loadDevices, getConfigNodes, getDashboardConfigNodes, getVariables, storeFile, deleteFile, storeDashboardConfig, loadDashboardConfig, storeRuleConfig, loadRuleConfig, storeRule\n}","import { h, Component } from 'preact';\r\nimport { get, set, getKeys } from '../../lib/helpers';\r\nimport { settings } from '../../lib/settings';\r\n\r\nexport class Form extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.onChange = (id, prop, config = {}) => {\r\n return (e) => {\r\n let val = this.form.elements[id].value;\r\n if (config.type === 'checkbox') {\r\n val = this.form.elements[id].checked ? 1 : 0;\r\n } else if (config.type === 'number' || config.type === 'ip') {\r\n val = parseFloat(val);\r\n } else if (config.type === 'select') {\r\n val = isNaN(val) ? val : parseInt(val);\r\n }\r\n if (prop.startsWith('ROOT')) {\r\n settings.set(prop.replace('ROOT.', ''), val);\r\n } else {\r\n set(this.props.selected, prop, val);\r\n }\r\n if (config.onChange) {\r\n config.onChange(e);\r\n }\r\n }\r\n }\r\n }\r\n\r\n renderConfig(id, config, value, varName) {\r\n switch (config.type) {\r\n case 'string':\r\n return (\r\n \r\n );\r\n case 'number':\r\n return (\r\n \r\n ) ;\r\n case 'ip':\r\n return [\r\n ( ),\r\n ( ),\r\n ( ),\r\n ( )\r\n ]\r\n case 'password':\r\n return (\r\n \r\n ) ;\r\n case 'checkbox':\r\n return (\r\n \r\n ) ;\r\n case 'select':\r\n const options = (typeof config.options === 'function') ? config.options() : config.options;\r\n return (\r\n \r\n {options.map(option => {\r\n const name = option instanceof Object ? option.name : option;\r\n const val = option instanceof Object ? option.value : option;\r\n if (val === value) {\r\n return ({name} )\r\n } else {\r\n return ({name} );\r\n }\r\n })}\r\n \r\n ) ;\r\n case 'file':\r\n return (\r\n \r\n )\r\n case 'button':\r\n const clickEvent = () => {\r\n if (!config.click) return;\r\n config.click(this.props.selected);\r\n }\r\n return (\r\n GET IT \r\n );\r\n }\r\n }\r\n\r\n renderConfigGroup(id, configs, values) {\r\n const configArray = Array.isArray(configs) ? configs : [configs];\r\n\r\n return (\r\n \r\n {configArray.map((conf, i) => {\r\n const varId = configArray.length > 1 ? `${id}.${i}` : id;\r\n const varName = conf.var ? conf.var : varId;\r\n const val = varName.startsWith('ROOT') ? settings.get(varName.replace('ROOT.', '')) : get(values, varName, null);\r\n\r\n if (conf.if) {\r\n if (!get(settings.settings, conf.if, false)) return(null);\r\n }\r\n if (conf.type === 'custom') {\r\n const CustomComponent = conf.component;\r\n return ( );\r\n }\r\n return [\r\n ({conf.name} ),\r\n this.renderConfig(varId, conf, val, varName)\r\n ];\r\n })}\r\n
\r\n )\r\n }\r\n\r\n renderGroup(id, group, values) {\r\n if (!group.configs || !Object.keys(group.configs).length) return (null);\r\n const keys = getKeys(group.configs);\r\n return (\r\n \r\n {group.name} \r\n {keys.map(key => {\r\n const conf = group.configs[key];\r\n return this.renderConfigGroup(`${id}.${key}`, conf, values);\r\n })}\r\n \r\n )\r\n }\r\n\r\n render(props) {\r\n const keys = getKeys(props.config.groups);\r\n return ( this.form = ref}>\r\n {keys.map(key => this.renderGroup(key, props.config.groups[key], props.selected))}\r\n )\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class EspEaspP2PComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { nodes: [] }\r\n\r\n this.refresh = () => {\r\n fetch('/node_list_json').then(res => res.json()).then((nodes) => {\r\n this.setState({ nodes })\r\n });\r\n \r\n }\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n {this.state.nodes.map(node => {\r\n return (Unit {node.first}: {node.name} [{node.ip}] );\r\n })}\r\n REFRESH \r\n \r\n )\r\n }\r\n\r\n componentDidMount() {\r\n this.refresh();\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { set } from '../lib/helpers';\r\nimport { EspEaspP2PComponent } from '../components/espeasy_p2p';\r\n\r\nexport const protocols = [\r\n { name: '- Standalone -', value: 0 },\r\n { name: 'Domoticz HTTP', value: 1 },\r\n { name: 'Domoticz MQTT', value: 2 },\r\n { name: 'Nodo Telnet', value: 3 },\r\n { name: 'ThingSpeak', value: 4 },\r\n { name: 'OpenHAB MQTT', value: 5 },\r\n { name: 'PiDome MQTT', value: 6 },\r\n { name: 'Emoncms', value: 7 },\r\n { name: 'Generic HTTP', value: 8 },\r\n { name: 'FHEM HTTP', value: 9 },\r\n { name: 'Generic UDP', value: 10 },\r\n { name: 'ESPEasy P2P Networking', value: 13 },\r\n { name: 'Email', value: 25 },\r\n];\r\n\r\nconst baseFields = { \r\n \r\n dns: { name: 'Locate Controller', type: 'select', options: [{ value: 0, name: 'Use IP Address'}, { value: 1, name: 'Use Hostname' }] },\r\n IP: { name: 'IP', type: 'ip' },\r\n hostname: { name: 'Hostname', type: 'string' },\r\n port: { name: 'Port', type: 'number' },\r\n minimal_time_between: { name: 'Minimum Send Interval', type: 'number' },\r\n max_queue_depth: { name: 'Max Queue Depth', type: 'number' },\r\n max_retry: { name: 'Max Retries', type: 'number' },\r\n delete_oldest: { name: 'Full Queue Action', type: 'select', options: [{ value: 0, name: 'Ignore New'}, { value: 1, name: 'Delete Oldest' }] },\r\n must_check_reply: { name: 'Check Reply', type: 'select', options: [{ value: 0, name: 'Ignore Acknowledgement'}, { value: 1, name: 'Check Acknowledgement' }] },\r\n client_timeout: { name: 'Client Timeout', type: 'number' },\r\n};\r\n\r\nconst user = { name: 'Controller User', type: 'string' };\r\nconst password = { name: 'Controller Password', type: 'password' };\r\nconst subscribe = { name: 'Controller Subscribe', type: 'string' };\r\nconst publish = { name: 'Controller Publish', type: 'string' };\r\nconst lwtTopicField = { MQTT_lwt_topic: { name: 'Controller LWT topic:', type: 'string' }, lwt_message_connect: { name: 'LWT Connect Message', type: 'string' }, lwt_message_disconnect: { name: 'LWT Disconnect Message', type: 'string' }, };\r\n\r\nconst baseDefaults = {\r\n port: 1883,\r\n minimal_time_between: 100,\r\n max_queue_depth: 10,\r\n max_retry: 10,\r\n client_timeout: 1000,\r\n}\r\nconst getDefaults = {\r\n 1: () => ({ // Domoticz HTTP\r\n port: 8080,\r\n }), 2: () => ({ // Domoticz MQTT\r\n subscribe: 'domoticz/out',\r\n public: 'domoticz/in'\r\n }), 3: () => ({ // Nodo Telnet\r\n port: 23,\r\n }), 4: () => ({ // ThingSpeak\r\n port: 80,\r\n }), 5: () => ({ // OpenHAB MQTT\r\n subscribe: '/%sysname%/#',\r\n publish: '/%sysname%/%tskname%/%valname%',\r\n }), 6: () => ({ // PiDome MQTT\r\n subscribe: '/Home/#',\r\n publish: '/hooks/devices/%id%/SensorData/%valname%',\r\n }), 7: () => ({ // Emoncms\r\n port: 80,\r\n }), 8: () => ({ // Generic HTTP\r\n port: 80,\r\n publish: 'demo.php?name=%sysname%&task=%tskname%&valuename=%valname%&value=%value%',\r\n }), 9: () => ({ // FHEM HTTP\r\n port: 8383,\r\n }), 10: () => ({ // Generic UDP\r\n port: 514,\r\n publish: '%sysname%_%tskname%_%valname%=%value%',\r\n }), 13: () => ({ // EspEasy P2P\r\n port: 65501,\r\n Custom: 1\r\n }), \r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const defaults = {...baseDefaults, ...getDefaults[type]()};\r\n Object.keys(defaults).forEach((key) => {\r\n const val = defaults[key];\r\n set(config.settings, key, val);\r\n });\r\n}\r\n\r\nconst getFormConfig = (type) => {\r\n let additionalFields = {};\r\n let additionalGroups = {};\r\n switch (Number(type)) {\r\n case 2: // Domoticz MQTT\r\n case 5: // OpenHAB MQTT\r\n additionalFields = { ...baseFields, user, password, subscribe, publish, ...lwtTopicField };\r\n break;\r\n case 6: // 'PiDome MQTT'\r\n additionalFields = { ...baseFields, subscribe, publish, ...lwtTopicField };\r\n break;\r\n case 3: //'Nodo Telnet'\r\n case 7: //'Emoncms':\r\n additionalFields = { ...baseFields, password };\r\n break;\r\n case 8: // 'Generic HTTP'\r\n additionalFields = { ...baseFields, user, password, subscribe, publish };\r\n break;\r\n case 1: // Domoticz HTTP\r\n case 9: // 'FHEM HTTP'\r\n additionalFields = { ...baseFields, user, password };\r\n break;\r\n case 10: //'Generic UDP': \r\n additionalFields = { ...baseFields, subscribe, publish };\r\n break;\r\n case 13: //'ESPEasy P2P Networking':\r\n additionalGroups = {\r\n global: {\r\n name: 'Global Settings',\r\n configs: {\r\n port: { name: 'UDP Port', type: 'number', var: 'ROOT.config.espnetwork.port' }\r\n }\r\n },\r\n nodes: {\r\n name: 'Connected Nodes',\r\n configs: {\r\n nodes: { type: 'custom', component: EspEaspP2PComponent}\r\n }\r\n } \r\n }\r\n break;\r\n case 0:\r\n default:\r\n additionalFields = { ...baseFields };\r\n }\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Controller Settings',\r\n configs: {\r\n protocol: { name: 'Protocol', type: 'select', var: 'protocol', options: protocols },\r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n ...additionalFields\r\n }\r\n },\r\n ...additionalGroups\r\n },\r\n }\r\n}\r\n\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class ControllerEditPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`controllers[${props.params[0]}]`);\r\n this.state = {\r\n protocol: this.config.protocol,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.protocol);\r\n formConfig.groups.settings.configs.protocol.onChange = (e) => {\r\n this.setState({ protocol: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n \r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nexport const pins = [\r\n { name: 'None', value: 255 },\r\n { name: 'GPIO-0', value: 0 },\r\n { name: 'GPIO-1', value: 1 },\r\n { name: 'GPIO-2', value: 2 },\r\n { name: 'GPIO-3', value: 3 },\r\n { name: 'GPIO-4', value: 4 },\r\n { name: 'GPIO-5', value: 5 },\r\n { name: 'GPIO-9', value: 9 },\r\n { name: 'GPIO-10', value: 10 },\r\n { name: 'GPIO-12', value: 12 },\r\n { name: 'GPIO-13', value: 13 },\r\n { name: 'GPIO-14', value: 14 },\r\n { name: 'GPIO-15', value: 15 },\r\n { name: 'GPIO-16', value: 16 }\r\n];\r\n\r\nconst pinState = [\r\n { name: 'Default', value: 0 },\r\n { name: 'Low', value: 1 },\r\n { name: 'High', value: 2 },\r\n { name: 'Input', value: 3 },\r\n];\r\n\r\nconst formConfig = {\r\n groups: {\r\n led: {\r\n name: 'WiFi Status LED',\r\n configs: {\r\n gpio: { name: 'GPIO --> LED', type: 'select', options: pins },\r\n inverse: { name: 'Inversed LED', type: 'checkbox' },\r\n }\r\n },\r\n reset: {\r\n name: 'Reset Pin',\r\n configs: {\r\n pin: { name: 'GPIO <-- Switch', type: 'select', options: pins },\r\n }\r\n },\r\n i2c: {\r\n name: 'I2C Settings',\r\n configs: {\r\n sda: { name: 'GPIO - SDA', type: 'select', options: pins },\r\n scl: { name: 'GPIO - SCL', type: 'select', options: pins },\r\n }\r\n },\r\n spi: {\r\n name: 'SPI Settings',\r\n configs: {\r\n enabled: { name: 'Init SPI', type: 'checkbox' },\r\n }\r\n },\r\n gpio: {\r\n name: 'GPIO boot states',\r\n configs: {\r\n 0: { name: 'Pin Mode GPIO-0', type: 'select', options: pinState },\r\n 1: { name: 'Pin Mode GPIO-1', type: 'select', options: pinState },\r\n 2: { name: 'Pin Mode GPIO-2', type: 'select', options: pinState },\r\n 3: { name: 'Pin Mode GPIO-3', type: 'select', options: pinState },\r\n 4: { name: 'Pin Mode GPIO-4', type: 'select', options: pinState },\r\n 5: { name: 'Pin Mode GPIO-5', type: 'select', options: pinState },\r\n 9: { name: 'Pin Mode GPIO-9', type: 'select', options: pinState },\r\n 10: { name: 'Pin Mode GPIO-10', type: 'select', options: pinState },\r\n 12: { name: 'Pin Mode GPIO-12', type: 'select', options: pinState },\r\n 13: { name: 'Pin Mode GPIO-13', type: 'select', options: pinState },\r\n 14: { name: 'Pin Mode GPIO-14', type: 'select', options: pinState },\r\n 15: { name: 'Pin Mode GPIO-15', type: 'select', options: pinState },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigHardwarePage extends Component {\r\n render(props) {\r\n const config = settings.get('hardware');\r\n formConfig.onSave = (values) => {\r\n settings.set('hardware', values);\r\n window.location.href='#devices';\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}","import { settings } from '../lib/settings';\r\n\r\nexport { pins } from '../pages/config.hardware';\r\n\r\n\r\nexport const getTasks = () => {\r\n return settings.get('tasks').filter(task => task.enabled).map(task => ({ value: task.settings.index, name: task.settings.name }));\r\n}\r\n\r\nexport const getTaskValues = () => {\r\n return [ 1, 2, 3, 4 ];\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { set } from '../lib/helpers';\r\nimport { pins } from '../devices/_defs';\r\n\r\nexport const types = [\r\n { name: '- None -', value: 0 },\r\n { name: 'Email', value: 1 },\r\n { name: 'Buzzer', value: 2 },\r\n];\r\n\r\nconst baseDefaults = {}\r\nconst getDefaults = {\r\n 0: () => ({}),\r\n 1: () => ({ // Email\r\n }), 2: () => ({ // Buzzer\r\n }),\r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const defaults = {...baseDefaults, ...getDefaults[type]()};\r\n Object.keys(defaults).forEach((key) => {\r\n const val = defaults[key];\r\n set(config.settings, key, val);\r\n });\r\n}\r\n\r\nconst getFormConfig = (type) => {\r\n let additionalFields = {};\r\n switch (Number(type)) {\r\n case 1: // Email\r\n additionalFields = { \r\n domain: { name: 'Domain', type: 'string' },\r\n hostname: { name: 'Hostname', type: 'string' },\r\n port: { name: 'Port', type: 'number' },\r\n sender: { name: 'Sender', type: 'string' },\r\n receiver: { name: 'Receiver', type: 'string' },\r\n subject: { name: 'Subject', type: 'string' },\r\n user: { name: 'Username', type: 'string' },\r\n pass: { name: 'Password', type: 'string' },\r\n body: { name: 'Body', type: 'textarea' },\r\n };\r\n break;\r\n case 2: // Buzzer\r\n additionalFields = { \r\n pin1: { name: '1st GPIO', type: 'select', options: pins }\r\n };\r\n break;\r\n }\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Notification Settings',\r\n configs: {\r\n type: { name: 'Type', type: 'select', var: 'type', options: types },\r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n ...additionalFields\r\n }\r\n },\r\n },\r\n }\r\n}\r\n\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class ControllerNotificationsPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`notifications[${props.params[0]}]`);\r\n this.state = {\r\n type: this.config.type,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.type);\r\n formConfig.groups.settings.configs.type.onChange = (e) => {\r\n this.setState({ type: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n formConfig.onSave = (values) => {\r\n settings.set(`notifications[${props.params[0]}]`, values);\r\n window.location.href='#controllers';\r\n }\r\n \r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const inputSwitch = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n interval: 60,\r\n 'configs_float[1]': 1000,\r\n 'configs_float[2]': 1000,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n switch_type: { name: 'Switch Type', type: 'select', options: [{ name: 'switch', value: 0}, { name: 'dimmer', value: 3 }], var: 'configs[0]' },\r\n switch_button_type: { name: 'Switch Button Type', type: 'select', options: [\r\n { name: 'normal', value: 0}, { name: 'active low', value: 1 }, { name: 'active high', value: 2 }\r\n ], var: 'configs[2]' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', min: 1000, max: 3000, type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', min: 1000, max: 5000, type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst modeTypes = [\r\n { value: 0, name: 'LOW' }, \r\n { value: 1, name: 'CHANGE' }, \r\n { value: 2, name: 'RISING' }, \r\n { value: 3, name: 'FALLING' }, \r\n]\r\n\r\nconst counterTypes = [\r\n { value: 0, name: 'Delta' }, \r\n { value: 1, name: 'Delta/Total/Time' }, \r\n { value: 2, name: 'Total' }, \r\n { value: 3, name: 'Delta/Total' }, \r\n]\r\n\r\nexport const genericPulse = {\r\n sensor: {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Count',\r\n 'settings.values[1].name': 'Total',\r\n 'settings.values[2].name': 'Time',\r\n }),\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs[0]' },\r\n counter_type: { name: 'Counter Type', type: 'select', options: counterTypes, var: 'configs[1]' },\r\n mode_type: { name: 'Switch Button Type', type: 'select', options: modeTypes, var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins } from './_defs';\r\n\r\nexport const ds18b20 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst sensorModel = [\r\n { value: 11, name: 'DHT11' }, \r\n { value: 22, name: 'DHT22' }, \r\n { value: 12, name: 'DHT12' }, \r\n { value: 23, name: 'Sonoff am2301' }, \r\n { value: 70, name: 'Sonoff si7021' },\r\n]\r\n\r\nexport const dht = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n interval: 60,\r\n 'configs[0]': 11,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\r\n switch_type: { name: 'Sensor model', type: 'select', options: sensorModel, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\nconst weigandType = [\r\n { value: 26, name: '26 Bits' }, \r\n { value: 34, name: '34 Bits' }, \r\n]\r\n\r\nexport const rfidWeigand = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Tag',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO D0 (green, 5V)', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO D1 (white, 5V)', type: 'select', options: pins, var: 'gpio2' },\r\n type: { name: 'Weigand Type', type: 'select', options: weigandType, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const inputMcp = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const bh1750 = {\r\n defaults: () => ({\r\n 'configs[0]': 35,\r\n 'settings.values[0].name': 'Lux',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Measurement mode', type: 'select', options: measurmentMode, var: 'configs[1]' },\r\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst mode = [\r\n { value: 0, name: 'Digital' }, \r\n { value: 1, name: 'Analog' }, \r\n]\r\n\r\nexport const pme = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Value',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'Port', type: 'number', var: 'gpio4' },\r\n mode: { name: 'Port Type', type: 'select', options: mode, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nconst lcdCommand = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const lcd2004 = {\r\n defaults: () => ({\r\n 'configs[0]': 32,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'string', /*var: 'configs[2]' */ },\r\n line2: { name: 'Line 2', type: 'string', /*var: 'configs[2]' */ },\r\n line3: { name: 'Line 3', type: 'string', /*var: 'configs[2]' */ },\r\n line4: { name: 'Line 4', type: 'string', /*var: 'configs[2]' */ },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio3' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n command: { name: 'LCD Command Mode', type: 'select', options: lcdCommand, var: 'configs[3]' },\r\n }\r\n },\r\n}","import { pins } from './_defs';\r\n\r\nconst mode = [\r\n { value: 0, name: 'Value' }, \r\n { value: 1, name: 'State' }, \r\n]\r\n\r\nconst units = [\r\n { value: 0, name: 'Metric' }, \r\n { value: 1, name: 'Imperial' }, \r\n]\r\n\r\nconst filters = [\r\n { value: 0, name: 'None' }, \r\n { value: 1, name: 'Median' }, \r\n]\r\n\r\nexport const hcsr04 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Distance',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO Trigger', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO Echo, 5V', type: 'select', options: pins, var: 'gpio2' },\r\n mode: { name: 'Mode', type: 'select', options: mode, var: 'configs[0]' },\r\n treshold: { name: 'Treshold', type: 'number', var: 'configs[1]' },\r\n max_distance: { name: 'Max Distance', type: 'number', var: 'configs[2]' },\r\n unit: { name: 'Unit', type: 'select', options: units, var: 'configs[3]' },\r\n filter: { name: 'Filter', type: 'select', options: filters, var: 'configs[4]' },\r\n filter_size: { name: 'Filter Size', type: 'number', var: 'configs[5]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\n\r\nconst resolution = [\r\n { value: 0, name: 'Temp 14 bits, RH 12 bits' }, \r\n { value: 128, name: 'Temp 13 bits, RH 10 bits' }, \r\n { value: 1, name: 'Temp 12 bits, RH 8 bits' }, \r\n { value: 129, name: 'Temp 11 bits, RH 11 bits' }, \r\n]\r\n\r\nexport const si7021 = {\r\n defaults: () => ({\r\n interval: 60,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n resolution: { name: 'Resolution', type: 'select', options: resolution, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 57, name: '0x39 (57) - default' }, \r\n { value: 73, name: '0x49 (73)' }, \r\n { value: 41, name: '0x29 (41)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 0, name: '13 ms' }, \r\n { value: 1, name: '101 ms' }, \r\n { value: 2, name: '402 ms' }, \r\n]\r\n\r\nexport const tls2561 = {\r\n defaults: () => ({\r\n 'configs[0]': 57,\r\n 'settings.values[0].name': 'Lux',\r\n 'settings.values[1].name': 'Infrared',\r\n 'settings.values[2].name': 'Broadband',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Integration time', type: 'select', options: measurmentMode, var: 'configs[1]' },\r\n send_to_sleep: { name: 'Send sensor to sleep', type: 'checkbox', var: 'configs[2]' },\r\n gain: { name: 'Enable 16x gain', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3\r\n}\r\n","import { pins } from './_defs';\r\n\r\nexport const pn532 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Tag',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'Reset Pin', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst measurmentMode = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const dust = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Dust',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO - LED', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const pcf8574 = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Switch',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n inversed: { name: 'Inversed logic', type: 'checkbox', var: 'pin1inversed' },\r\n send_boot_state: { name: 'Send Boot State', type: 'checkbox', var: 'configs[3]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Advanced event management',\r\n configs: {\r\n debounce: { name: 'De-bounce (ms)', type: 'number', var: 'configs_float[0]' },\r\n dblclick: { name: 'Doublclick Event', type: 'select', options: eventTypes, var: 'configs[4]' },\r\n dblclick_interval: { name: 'Doubleclick Max interval (ms)', type: 'number', var: 'configs_float[1]' },\r\n longpress: { name: 'Longpress event', type: 'select', options: eventTypes, var: 'configs[5]' },\r\n longpress_interval: { name: 'Longpress min interval (ms)', type: 'number', var: 'configs_float[2]' },\r\n safe_button: { name: 'Use safe button', type: 'checkbox', var: 'configs_float[3]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins } from './_defs';\r\n\r\nconst serialConfig = [\r\n { value: 0, name: 'No Parity' }, \r\n { value: 1, name: 'Even' }, \r\n { value: 2, name: 'Odd' }, \r\n]\r\n\r\nconst eventProcessing = [\r\n { value: 0, name: 'None' }, \r\n { value: 1, name: 'Generic' }, \r\n { value: 2, name: 'RFLink' }, \r\n]\r\n\r\nexport const ser2net = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n port: { name: 'TCP Port', type: 'number', var: 'extra.plugin_config_long[0]' }, \r\n baudrate: { name: 'Baudrate', type: 'number', var: 'extra.plugin_config_long[1]' },\r\n serial_config: { name: 'Data Bits', type: 'select', options: serialConfig, var: 'configs[2]' },\r\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs[0]' },\r\n event_processing: { name: 'Event Processing', type: 'select', options: eventProcessing, var: 'configs[1]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst sensorModel = [\r\n { value: 11, name: 'DHT11' }, \r\n { value: 22, name: 'DHT22' }, \r\n { value: 12, name: 'DHT12' }, \r\n { value: 23, name: 'Sonoff am2301' }, \r\n { value: 70, name: 'Sonoff si7021' },\r\n]\r\n\r\nexport const levelControl = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO Level Low', type: 'select', options: pins, var: 'gpio1' },\r\n check_task: { name: 'Check Task', type: 'select', options: getTasks, var: 'configs[0]' },\r\n check_value: { name: 'Check Value', type: 'select', options: getTaskValues, var: 'configs[1]' },\r\n level: { name: 'Set Level', type: 'number', var: 'configs_float[0]' },\r\n hysteresis: { name: 'Hysteresis', type: 'number', var: 'configs_float[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst mode = [...Array(32)].map((v, i) => ({ value: i, name: `0x${i.toString(16)} (${i})` }));\r\nconst i2c_address = [...Array(32)].map((v, i) => ({ value: i+64, name: `0x${(i+64).toString(16)} (${i+64})` }));\r\n\r\nexport const pca9685 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'configs_float[0]': 1500,\r\n 'configs_float[1]': 4095,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n mode: { name: 'Mode 2', type: 'select', options: mode, var: 'configs[1]' },\r\n frequency: { name: 'Frequency (23 - 1500)', type: 'number', min: 23, max: 1500, var: 'configs_float[0]' },\r\n range: { name: 'Range (1-10000)', type: 'number', min: 1, max: 10000, var: 'configs_float[1]' },\r\n }\r\n },\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const oled1306 = {\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\r\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\r\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\r\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n}","const indicator = [\r\n { value: 0, name: 'Uptime' }, \r\n { value: 1, name: 'Free Ram' }, \r\n { value: 2, name: 'WiFi RSSI' }, \r\n { value: 3, name: 'Input VCC' }, \r\n { value: 4, name: 'System load' }, \r\n { value: 5, name: 'IP 1.Octet' }, \r\n { value: 6, name: 'IP 2.Octet' }, \r\n { value: 7, name: 'IP 3.Octet' }, \r\n { value: 8, name: 'IP 4.Octet' }, \r\n { value: 9, name: 'Web activity' }, \r\n { value: 10, name: 'Free Stack' }, \r\n { value: 11, name: 'None' }, \r\n]\r\n\r\nexport const systemInfo = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Uptime',\r\n 'settings.values[1].name': 'Uptime',\r\n 'settings.values[2].name': 'Uptime',\r\n 'settings.values[3].name': 'Uptime',\r\n }),\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n indicator1: { name: 'Indicator 1', type: 'select', options: indicator, var: 'configs_long[0]' },\r\n indicator1: { name: 'Indicator 2', type: 'select', options: indicator, var: 'configs_long[1]' },\r\n indicator1: { name: 'Indicator 3', type: 'select', options: indicator, var: 'configs_long[2]' },\r\n indicator1: { name: 'Indicator 4', type: 'select', options: indicator, var: 'configs_long[3]' },\r\n }\r\n },\r\n data: true,\r\n vars: 4,\r\n}","import { pins } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 35, name: '0x23 (35) - default' }, \r\n { value: 92, name: '0x5c (92)' }, \r\n]\r\n\r\nconst displaySize = [\r\n { value: 1, name: 'RESOLUTION_LOW' }, \r\n { value: 2, name: 'RESOLUTION_NORMAL' }, \r\n { value: 3, name: 'RESOLUTION_HIGH' }, \r\n { value: 99, name: 'RESOLUTION_AUTO_HIGH' }, \r\n]\r\n\r\nexport const sh1106 = {\r\n defaults: () => ({\r\n 'configs[0]': 35,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n rotation: { name: 'Rotation', type: 'select', options: displaySize, var: 'configs[1]' },\r\n size: { name: 'Display Size', type: 'select', options: displaySize, var: 'configs[1]' },\r\n font: { name: 'Font Width', type: 'select', options: displaySize, var: 'configs[1]' },\r\n line1: { name: 'Line 1', type: 'text', var: 'configs[2]' },\r\n line2: { name: 'Line 2', type: 'text', var: 'configs[2]' },\r\n line3: { name: 'Line 3', type: 'text', var: 'configs[2]' },\r\n line4: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line5: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line6: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line7: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n line8: { name: 'Line 4', type: 'text', var: 'configs[2]' },\r\n button: { name: 'Display Button', type: 'select', options: pins, var: 'gpio1' },\r\n timeout: { name: 'Display Timeout', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 0, name: '' },\r\n { value: 1, name: 'Off' }, \r\n { value: 2, name: 'On' }, \r\n]\r\n\r\nexport const clock = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO - Clock Event', type: 'select', options: pins, var: 'gpio1' },\r\n event1: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event2: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event3: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event4: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event5: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event6: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event7: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n event8: [{ name: 'Day, Time 1', type: 'string', var: 'configs[0]' }, { name: '', type: 'select', options: type, var: 'configs[1]' }],\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { inputSwitch } from './1_input_switch';\r\nimport { analogInput } from './2_analog_input';\r\nimport { genericPulse } from './3_generic_pulse';\r\nimport { ds18b20 } from './4_ds18b20';\r\nimport { dht } from './5_dht';\r\nimport { bmp085 } from './6_bmp085';\r\nimport { pcf8591 } from './7_pcf8591';\r\nimport { rfidWeigand } from './8_rfid';\r\nimport { inputMcp } from './9_io_mcp';\r\nimport { bh1750 } from './10_light_lux';\r\nimport { pme } from './11_pme';\r\nimport { lcd2004 } from './12_lcd';\r\nimport { hcsr04 } from './13_hcsr04';\r\nimport { si7021 } from './14_si7021';\r\nimport { tls2561 } from './15_tls2561';\r\nimport { pn532 } from './17_pn532';\r\nimport { dust } from './18_dust';\r\nimport { pcf8574 } from './19_pcf8574';\r\nimport { ser2net } from './20_ser2net';\r\nimport { levelControl } from './21_level_control';\r\nimport { pca9685 } from './22_pca9685';\r\nimport { oled1306 } from './23_oled1306';\r\nimport { mlx90614 } from './24_mlx90614';\r\nimport { ads1115 } from './25_ads1115';\r\nimport { systemInfo } from './26_system_info';\r\nimport { ina219 } from './27_ina219';\r\nimport { bmx280 } from './28_bmx280';\r\nimport { mqttDomoticz } from './29_mqtt_domoticz';\r\nimport { bmp280 } from './30_bmp280';\r\nimport { sht1x } from './31_sht1x';\r\nimport { ms5611 } from './32_ms5611';\r\nimport { dummyDevice } from './33_dummy_device';\r\nimport { dht12 } from './34_dht12';\r\nimport { sh1106 } from './36_sh1106';\r\nimport { mqttImport } from './37_mqtt_import';\r\nimport { neopixelBasic } from './38_neopixel_basic';\r\nimport { thermocouple } from './39_thermocouple';\r\nimport { neopixelClock } from './41_neopixel_clock';\r\nimport { neopixelCandle } from './42_neopixel_candle';\r\nimport { clock } from './43_output_clock';\r\nimport { wifiGateway } from './44_wifi_gateway';\r\nimport { mhz19 } from './49_mhz19';\r\nimport { senseAir } from './52_senseair';\r\nimport { sds011 } from './56_sds011';\r\nimport { rotaryEncoder } from './59_rotary_encoder';\r\nimport { ttp229 } from './63_ttp229';\r\n\r\nexport const devices = [\r\n { name: '- None -', value: 0, fields: [] },\r\n { name: 'Switch input - Switch', value: 1, fields: inputSwitch },\r\n { name: 'Analog input - internal', value: 2, fields: analogInput },\r\n { name: 'Generic - Pulse counter', value: 3, fields: genericPulse },\r\n { name: 'Environment - DS18b20', value: 4, fields: ds18b20 },\r\n { name: 'Environment - DHT11/12/22 SONOFF2301/7021', value: 5, fields: dht },\r\n { name: 'Environment - BMP085/180', value: 6, fields: bmp085 },\r\n { name: 'Analog input - PCF8591', value: 7, fields: pcf8591 },\r\n { name: 'RFID - Wiegand', value: 8, fields: rfidWeigand },\r\n { name: 'Switch input - MCP23017', value: 9, fields: inputMcp },\r\n { name: 'Light/Lux - BH1750', value: 10, fields: bh1750 },\r\n { name: 'Extra IO - ProMini Extender', value: 11, fields: pme },\r\n { name: 'Display - LCD2004', value: 12, fields: lcd2004 },\r\n { name: 'Position - HC-SR04, RCW-0001, etc.', value: 13, fields: hcsr04 },\r\n { name: 'Environment - SI7021/HTU21D', value: 14, fields: si7021 },\r\n { name: 'Light/Lux - TSL2561', value: 15, fields: tls2561 },\r\n //{ name: 'Communication - IR', value: 16, fields: bh1750 },\r\n { name: 'RFID - PN532', value: 17, fields: pn532 },\r\n { name: 'Dust - Sharp GP2Y10', value: 18, fields: dust },\r\n { name: 'Switch input - PCF8574', value: 19, fields: pcf8574 },\r\n { name: 'Communication - Serial Server', value: 20, fields: ser2net },\r\n { name: 'Regulator - Level Control', value: 21, fields: levelControl },\r\n { name: 'Extra IO - PCA9685', value: 22, fields: pca9685 },\r\n { name: 'Display - OLED SSD1306', value: 23, fields: oled1306 },\r\n { name: 'Environment - MLX90614', value: 24, fields: mlx90614 },\r\n { name: 'Analog input - ADS1115', value: 25, fields: ads1115 },\r\n { name: 'Generic - System Info', value: 26, fields: systemInfo },\r\n { name: 'Energy (DC) - INA219', value: 27, fields: ina219 },\r\n { name: 'Environment - BMx280', value: 28, fields: bmx280 },\r\n { name: 'Output - Domoticz MQTT Helper', value: 29, fields: mqttDomoticz },\r\n { name: 'Environment - BMP280', value: 30, fields: bmp280 },\r\n { name: 'Environment - SHT1X', value: 31, fields: sht1x },\r\n { name: 'Environment - MS5611 (GY-63)', value: 32, fields: ms5611 },\r\n { name: 'Generic - Dummy Device', value: 33, fields: dummyDevice },\r\n { name: 'Environment - DHT12 (I2C)', value: 34, fields: dht12 },\r\n { name: 'Display - OLED SSD1306/SH1106 Framed', value: 36, fields: sh1106 },\r\n { name: 'Generic - MQTT Import', value: 37, fields: mqttImport },\r\n { name: 'Output - NeoPixel (Basic)', value: 38, fields: neopixelBasic },\r\n { name: 'Environment - Thermocouple', value: 39, fields: thermocouple },\r\n { name: 'Output - NeoPixel (Word Clock)', value: 41, fields: neopixelClock },\r\n { name: 'Output - NeoPixel (Candle)', value: 42, fields: neopixelCandle },\r\n { name: 'Output - Clock', value: 43, fields: clock },\r\n { name: 'Communication - P1 Wifi Gateway', value: 44, fields: wifiGateway },\r\n { name: 'Gases - CO2 MH-Z19', value: 49, fields: mhz19 },\r\n { name: 'Gases - CO2 Senseair', value: 52, fields: senseAir },\r\n { name: 'Dust - SDS011/018/198', value: 56, fields: sds011 },\r\n { name: 'Switch Input - Rotary Encoder', value: 59, fields: rotaryEncoder },\r\n { name: 'Keypad - TTP229 Touc', value: 63, fields: ttp229 },\r\n].sort((a, b) => a.name.localeCompare(b.name));","import { pins } from './_defs';\r\n\r\nexport const analogInput = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n oversampling: { name: 'Oversampling', type: 'checkbox', var: 'configs[0]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Two point calibration',\r\n configs: {\r\n enabled: { name: 'Calibration Enabled', type: 'checkbox', var: 'configs[3]' },\r\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[0]' }],\r\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { pins } from './_defs';\r\n\r\nconst eventTypes = [\r\n { value: 0, name: 'Disabled' }, \r\n { value: 1, name: 'Active on LOW' }, \r\n { value: 2, name: 'Active on HIGH' }, \r\n { value: 3, name: 'Active on LOW and HIGH' }, \r\n]\r\n\r\nexport const bmp085 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins } from './_defs';\r\n\r\n\r\nexport const pcf8591 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'PORT', type: 'number', var: 'gpio4' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","const options = [\r\n { value: 0, name: 'IR Object Temperature' }, \r\n { value: 1, name: 'Ambient Temperature' }, \r\n]\r\n\r\nexport const mlx90614 = {\r\n defaults: () => ({\r\n gpio4: 0,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n port: { name: 'Port', type: 'number', var: 'gpio4' },\r\n option: { name: 'Option', type: 'select', options: options, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vars: 1\r\n}","\r\nconst i2c_address = [\r\n { value: 72, name: '0x48 (72)' }, \r\n { value: 73, name: '0x49 (73)' }, \r\n { value: 74, name: '0x4A (74)' }, \r\n { value: 75, name: '0x4B (75)' }, \r\n];\r\n\r\nconst gainOptions = [\r\n { value: 0, name: '2/3x gain (FS=6.144V)' }, \r\n { value: 1, name: '1x gain (FS=4.096V)' }, \r\n { value: 2, name: '2x gain (FS=2.048V)' }, \r\n { value: 3, name: '4x gain (FS=1.024V)' }, \r\n { value: 4, name: '8x gain (FS=0.512V)' },\r\n { value: 5, name: '16x gain (FS=0.256V)' },\r\n];\r\n\r\nconst multiplexerOptions = [\r\n { value: 0, name: 'AIN0 - AIN1 (Differential)' }, \r\n { value: 1, name: 'AIN0 - AIN3 (Differential)' }, \r\n { value: 2, name: 'AIN1 - AIN3 (Differential)' }, \r\n { value: 3, name: 'AIN2 - AIN3 (Differential)' }, \r\n { value: 4, name: 'AIN0 - GND (Single-Ended)' }, \r\n { value: 5, name: 'AIN1 - GND (Single-Ended)' }, \r\n { value: 6, name: 'AIN2 - GND (Single-Ended)' }, \r\n { value: 7, name: 'AIN3 - GND (Single-Ended)' }, \r\n];\r\n\r\n\r\nexport const ads1115 = {\r\n defaults: () => ({\r\n 'configs[0]': 72,\r\n 'settings.values[0].name': 'Analog',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n gain: { name: 'Gain', type: 'select', options: gainOptions, var: 'configs[1]' },\r\n multiplexer: { name: 'Input Multiplexer', type: 'select', options: multiplexerOptions, var: 'configs[2]' },\r\n }\r\n },\r\n advanced: {\r\n name: 'Two point calibration',\r\n configs: {\r\n enabled: { name: 'Calibration Enabled', type: 'number', var: 'configs[3]' },\r\n point1: [{ name: 'Point 1', type: 'number', var: 'configs_long[0]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n point2: [{ name: 'Point 2', type: 'number', var: 'configs_long[1]' }, { name: '=', type: 'number', var: 'configs_float[1]' }],\r\n }\r\n },\r\n data: true,\r\n vars: 1,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst measurmentRange = [\r\n { value: 0, name: '32V, 2A' }, \r\n { value: 1, name: '32V, 1A' }, \r\n { value: 2, name: '16V, 0.4A' }, \r\n]\r\n\r\nconst measurmentType = [\r\n { value: 0, name: 'Voltage' }, \r\n { value: 1, name: 'Current' }, \r\n { value: 2, name: 'Power' }, \r\n { value: 3, name: 'Voltage/Current/Power' }, \r\n]\r\n\r\nconst i2c_address = [\r\n { value: 64, name: '0x40 (64) - (default)' }, \r\n { value: 65, name: '0x41 (65)' }, \r\n { value: 68, name: '0x44 (68)' }, \r\n { value: 69, name: '0x45 (69)' }, \r\n]\r\n\r\nexport const ina219 = {\r\n defaults: () => ({\r\n 'configs[0]': 64,\r\n 'settings.values[0].name': 'Voltage',\r\n 'settings.values[1].name': 'Current',\r\n 'settings.values[2].name': 'Power',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n check_task: { name: 'Measurment Range', type: 'select', options: measurmentRange, var: 'configs[1]' },\r\n check_value: { name: 'Measurment Type', type: 'select', options: measurmentType, var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118) - (default)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\nexport const bmx280 = {\r\n defaults: () => ({\r\n 'configs[0]': 118,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n 'settings.values[2].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n offset: { name: 'Temperature Offset', type: 'number', var: 'configs[2]' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const mqttDomoticz = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Output',\r\n }),\r\n sensor: {\r\n name: 'Actuator',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n idx: { name: 'IDX', type: 'number', var: 'configs[0]' },\r\n }\r\n },\r\n vals: 1\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118) - (default)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\nexport const bmp280 = {\r\n defaults: () => ({\r\n 'configs[0]': 118,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const sht1x = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n pullup: { name: 'Internal PullUp', type: 'checkbox', var: 'pin1pullup' },\r\n gpio1: { name: 'GPIO Data', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO SCK', type: 'select', options: pins, var: 'gpio2' },\r\n },\r\n },\r\n data: true,\r\n vals: 2,\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst i2c_address = [\r\n { value: 118, name: '0x76 (118)' }, \r\n { value: 119, name: '0x77 (119) - (default)' }, \r\n]\r\n\r\n\r\nexport const ms5611 = {\r\n defaults: () => ({\r\n 'configs[0]': 119,\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Pressure',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n i2c_address: { name: 'I2C Address', type: 'select', options: i2c_address, var: 'configs[0]' },\r\n altitude: { name: 'Altitude', type: 'number', var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\nconst sensorModel = [\r\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \r\n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \r\n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \r\n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \r\n { value: 5, name: 'SENSOR_TYPE_DUAL' },\r\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\r\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\r\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\r\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\r\n { value: 20, name: 'SENSOR_TYPE_LONG' },\r\n { value: 21, name: 'SENSOR_TYPE_WIND' },\r\n]\r\n\r\nexport const dummyDevice = {\r\n defaults: () => ({\r\n interval: 0,\r\n 'settings.values[0].name': 'Dummy1',\r\n 'settings.values[1].name': 'Dummy1',\r\n 'settings.values[2].name': 'Dummy3',\r\n 'settings.values[3].name': 'Dummy4',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n switch_type: { name: 'Simulate Sensor Type', type: 'select', options: sensorModel, var: 'configs[0]' },\r\n interval: { name: 'Interval', type: 'number' },\r\n }\r\n },\r\n data: true,\r\n vals: 4,\r\n}","\r\nconst sensorModel = [\r\n { value: 1, name: 'SENSOR_TYPE_SINGLE' }, \r\n { value: 2, name: 'SENSOR_TYPE_TEMP_HUM' }, \r\n { value: 3, name: 'SENSOR_TYPE_TEMP_BARO' }, \r\n { value: 4, name: 'SENSOR_TYPE_TEMP_HUM_BARO' }, \r\n { value: 5, name: 'SENSOR_TYPE_DUAL' },\r\n { value: 5, name: 'SENSOR_TYPE_TRIPLE' },\r\n { value: 7, name: 'SENSOR_TYPE_QUAD' },\r\n { value: 10, name: 'SENSOR_TYPE_SWITCH' },\r\n { value: 11, name: 'SENSOR_TYPE_DIMMER' },\r\n { value: 20, name: 'SENSOR_TYPE_LONG' },\r\n { value: 21, name: 'SENSOR_TYPE_WIND' },\r\n]\r\n\r\nexport const dht12 = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Temperature',\r\n 'settings.values[1].name': 'Humidity',\r\n }),\r\n data: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n interval: { name: 'Interval', type: 'number' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\n\r\nexport const mqttImport = {\r\n defaults: () => ({\r\n 'settings.values[0].name': 'Value1',\r\n 'settings.values[1].name': 'Value2',\r\n 'settings.values[2].name': 'Value3',\r\n 'settings.values[3].name': 'Value4',\r\n }),\r\n settings: {\r\n name: 'Data Settings',\r\n configs: {\r\n switch_type: { name: 'MQTT Topic 1', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 2', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 3', type: 'text', var: 'configs[0]' },\r\n switch_type: { name: 'MQTT Topic 4', type: 'text', var: 'configs[0]' },\r\n }\r\n },\r\n vars: 4\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 1, name: 'GRB' }, \r\n { value: 2, name: 'GRBW' }, \r\n]\r\n\r\nexport const neopixelBasic = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n leds: { name: 'LEd Count', type: 'number', var: 'configs[0]' },\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n type: { name: 'Strip Type', type: 'select', options: type, var: 'configs[1]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nconst type = [\r\n { value: 1, name: 'MAX 6675' }, \r\n { value: 2, name: 'MAX 31855' }, \r\n]\r\n\r\nexport const thermocouple = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'settings.values[0].name': 'Temperature',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n type: { name: 'Adapter IC', type: 'select', options: type, var: 'configs[0]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const neopixelClock = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n }),\r\n sensor: {\r\n name: 'Actuator',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n R: { name: 'Red', type: 'number', min: 0, max: 255, var: 'configs[0]' },\r\n G: { name: 'Green', type: 'number', min: 0, max: 255, var: 'configs[1]' },\r\n B: { name: 'Blue', type: 'number', min: 0, max: 255, var: 'configs[2]' },\r\n }\r\n },\r\n}","import { pins, getTasks, getTaskValues } from './_defs';\r\n\r\nexport const neopixelCandle = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n 'configs[0]': 11,\r\n 'settings.values[0].name': 'Color',\r\n 'settings.values[1].name': 'Brightness',\r\n 'settings.values[2].name': 'Type',\r\n }),\r\n sensor: {\r\n name: 'Sensor',\r\n configs: {\r\n gpio: { name: 'GPIO', type: 'select', options: pins, var: 'gpio1' },\r\n }\r\n },\r\n data: true,\r\n vals: 3\r\n}","import { pins } from './_defs';\r\n\r\nconst parity = [\r\n { value: 0, name: 'No Parity' }, \r\n { value: 1, name: 'Even' }, \r\n { value: 2, name: 'Odd' }, \r\n]\r\n\r\nexport const wifiGateway = {\r\n sensor: {\r\n name: 'Settings',\r\n configs: {\r\n port: { name: 'TCP Port', type: 'number', var: 'configs_float[0]' },\r\n baudrate: { name: 'Baudrate', type: 'number', var: 'configs_float[0]' },\r\n data_bits: { name: 'Data Bits', type: 'number', var: 'configs_float[0]' },\r\n parity: { name: 'Parity', type: 'select', options: parity, var: 'configs[0]' },\r\n stop_bits: { name: 'Stop Bits', type: 'number', var: 'configs_float[0]' },\r\n reset_after_boot: { name: 'Reset target after boot', type: 'select', options: pins, var: 'configs[1]' },\r\n timeout: { name: 'RX Receive Timeout', type: 'number', var: 'configs_float[0]' },\r\n }\r\n }\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const mhz19 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'PPM',\r\n 'settings.values[1].name': 'Temperature',\r\n 'settings.values[2].name': 'U',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 3,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const senseAir = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'CO2',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const sds011 = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'PM2.5',\r\n 'settings.values[1].name': 'PM10',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO - TX', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO - RX', type: 'select', options: pins, var: 'gpio2' },\r\n }\r\n },\r\n data: true,\r\n vals: 2,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const rotaryEncoder = {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n gpio3: 255,\r\n 'configs_long[1]': 100,\r\n 'settings.values[0].name': 'Counter',\r\n }),\r\n sensor: {\r\n name: 'Data Acquisition',\r\n configs: {\r\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\r\n gpio3: { name: 'GPIO I - Z', type: 'select', options: pins, var: 'gpio3' },\r\n limit_min: { name: 'Limit - Min', type: 'number', var: 'configs_long[0]' },\r\n limit_max: { name: 'Limit - Max', type: 'number', var: 'configs_long[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","\r\nimport { pins } from './_defs';\r\n\r\nexport const ttp229 = {\r\n defaults: () => ({\r\n 'gpio1' : 1,\r\n }),\r\n sensor: {\r\n defaults: () => ({\r\n gpio1: 255,\r\n gpio2: 255,\r\n 'settings.values[0].name': 'ScanCode',\r\n }),\r\n name: 'Sensor',\r\n configs: {\r\n gpio1: { name: 'GPIO A - CLK', type: 'select', options: pins, var: 'gpio1' },\r\n gpio2: { name: 'GPIO B - DT', type: 'select', options: pins, var: 'gpio2' },\r\n scancode: { name: 'ScanCode', type: 'checkbox', options: pins, var: 'configs[1]' },\r\n }\r\n },\r\n data: true,\r\n vals: 1,\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst ipBlockLevel = [\r\n { name: 'Allow All', value: 0 },\r\n { name: 'Allow Local Subnet', value: 1 },\r\n { name: 'Allow IP Range', value: 2 },\r\n]\r\n\r\nconst formConfig = {\r\n groups: {\r\n general: {\r\n name: 'General',\r\n configs: {\r\n unitname: { name: 'Unit Name', type: 'string' },\r\n unitnr: { name: 'Unit Number', type: 'number' },\r\n appendunit: { name: 'Append Unit Name to Hostname', type: 'checkbox' },\r\n password: { name: 'Admin Password', type: 'password', var: 'security[0].password' },\r\n }\r\n },\r\n wifi: {\r\n name: 'WiFi',\r\n configs: {\r\n ssid: { name: 'SSID', type: 'string', var: 'security[0].WifiSSID' },\r\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\r\n fallbackssid: { name: 'Fallback SSID', type: 'string', var: 'security[0].WifiSSID2' },\r\n fallbackpasswd: { name: 'Fallback Password', type: 'password', var: 'security[0].WifiKey2' },\r\n wpaapmode: { name: 'WPA AP Mode Key:', type: 'string', var: 'security[0].WifiAPKey' },\r\n }\r\n },\r\n clientIP: {\r\n name: 'Client IP Filtering',\r\n configs: {\r\n blocklevel: { name: 'IP Block Level', type: 'select', options: ipBlockLevel, var: 'security[0].IPblockLevel' },\r\n lowerrange: { name: 'Access IP lower range', type: 'ip', var: 'security[0].AllowedIPrangeLow' },\r\n upperrange: { name: 'Access IP upper range', type: 'ip', var: 'security[0].AllowedIPrangeHigh' },\r\n }\r\n },\r\n IP: {\r\n name: 'IP Settings',\r\n configs: {\r\n ip: { name: 'IP', type: 'ip' },\r\n gw: { name: 'Gateway', type: 'ip' },\r\n subnet: { name: 'Subnet', type: 'ip' },\r\n dns: { name: 'DNS', type: 'ip' },\r\n }\r\n },\r\n sleep: {\r\n name: 'Sleep Mode',\r\n configs: {\r\n awaketime: { name: 'Sleep awake time', type: 'number' },\r\n sleeptime: { name: 'Sleep time', type: 'number' },\r\n sleeponfailiure: { name: 'Sleep on connection failure', type: 'checkbox' },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (values) => {\r\n settings.set(`config`, values);\r\n window.location.href='#devices';\r\n }\r\n const config = settings.get('config');\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\n\r\nconst logLevelOptions = [\r\n { name: 'None', value: 0 },\r\n { name: 'Error', value: 1 },\r\n { name: 'Info', value: 2 },\r\n { name: 'Debug', value: 3 },\r\n { name: 'Debug More', value: 4 },\r\n { name: 'Debug Dev', value: 9 },\r\n];\r\n\r\nconst formConfig = {\r\n onSave: (vals) => { console.log(vals); },\r\n groups: {\r\n rules: {\r\n name: 'Rules Settings',\r\n configs: {\r\n enabled: { name: 'Enabled', type: 'checkbox' },\r\n oldengine: { name: 'Old Engine', type: 'checkbox' },\r\n }\r\n },\r\n mqtt: {\r\n name: 'Controller Settings',\r\n configs: {\r\n retain_flag: { name: 'MQTT Retain Msg', type: 'checkbox' },\r\n interval: { name: 'Message Interval', type: 'number' },\r\n useunitname: { name: 'MQTT use unit name as ClientId', type: 'checkbox' },\r\n changeclientid: { name: 'MQTT change ClientId at reconnect', type: 'checkbox' },\r\n }\r\n },\r\n ntp: {\r\n name: 'NTP Settings',\r\n configs: {\r\n enabled: { name: 'Use NTP', type: 'checkbox' },\r\n host: { name: 'NTP Hostname', type: 'string' },\r\n }\r\n },\r\n dst: {\r\n name: 'DST Settings',\r\n configs: {\r\n enabled: { name: 'Use DST', type: 'checkbox' },\r\n }\r\n },\r\n location: {\r\n name: 'Location Settings',\r\n configs: {\r\n long: { name: 'Longitude', type: 'number' },\r\n lat: { name: 'Latitude', type: 'number' },\r\n }\r\n },\r\n log: {\r\n name: 'Log Settings',\r\n configs: {\r\n syslog_ip: { name: 'Syslog IP', type: 'ip' },\r\n syslog_level: { name: 'Syslog Level', type: 'select', options: logLevelOptions },\r\n syslog_facility: { name: 'Syslog Level', type: 'select', options: [\r\n { name: 'Kernel', value: 0 },\r\n { name: 'User', value: 1 },\r\n { name: 'Daemon', value: 3 },\r\n { name: 'Message', value: 5 },\r\n { name: 'Local0', value: 16 },\r\n { name: 'Local1', value: 17 },\r\n { name: 'Local2', value: 18 },\r\n { name: 'Local3', value: 19 },\r\n { name: 'Local4', value: 20 },\r\n { name: 'Local5', value: 21 },\r\n { name: 'Local6', value: 22 },\r\n { name: 'Local7', value: 23 },\r\n ] },\r\n serial_level: { name: 'Serial Level', type: 'select', options: logLevelOptions },\r\n web_level: { name: 'Web Level', type: 'select', options: logLevelOptions },\r\n }\r\n },\r\n serial: {\r\n name: 'Serial Settings',\r\n configs: {\r\n enabled: { name: 'Enable Serial', type: 'checkbox' },\r\n baudrate: { name: 'Baud Rate', type: 'number' },\r\n }\r\n },\r\n experimental: {\r\n name: 'Experimental Settings',\r\n configs: {\r\n ip_octet: { name: 'Fixed IP Octet', type: 'number' },\r\n WDI2CAddress: { name: 'WD I2C Address', type: 'number' },\r\n ssdp: { name: 'Use SSDP', type: 'checkbox', var: 'ssdp.enabled' },\r\n ConnectionFailuresThreshold: { name: 'Connection Failiure Treshold', type: 'number' },\r\n WireClockStretchLimit: { name: 'I2C ClockStretchLimit', type: 'number' },\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport class ConfigAdvancedPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (values) => {\r\n settings.set('config', values);\r\n window.location.href='#devices';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\n\r\nconst rules = [\r\n { name: 'Rule 1', file: 'rules1.txt', index: 1 },\r\n { name: 'Rule 2', file: 'rules2.txt', index: 2 },\r\n { name: 'Rule 3', file: 'rules3.txt', index: 3 },\r\n { name: 'Rule 4', file: 'rules4.txt', index: 4 },\r\n];\r\n\r\nexport class RulesPage extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n selected: rules[0]\r\n }\r\n\r\n this.selectionChanged = (e) => {\r\n this.setState({ selected: rules[e.currentTarget.value] });\r\n }\r\n\r\n this.saveRule = () => {\r\n const data = new FormData();\r\n data.append('set', this.state.selected.index);\r\n data.append('rules', this.text.value);\r\n fetch('/rules', {\r\n method: 'POST',\r\n body: data \r\n }).then(res => {\r\n console.log('succesfully saved');\r\n console.log(res.text());\r\n });\r\n }\r\n\r\n this.fetch();\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
\r\n Rule 1 \r\n Rule 2 \r\n Rule 3 \r\n Rule 4 \r\n
\r\n
\r\n this.text = ref}>\r\n \r\n \r\n Save \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n async fetch() {\r\n const text = await fetch(this.state.selected.file).then(response => response.text());\r\n this.text.value = text;\r\n }\r\n\r\n async componentDidUpdate() {\r\n this.fetch();\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\n\r\nconst formConfig = {\r\n onSave: (vals) => { console.log(vals); },\r\n groups: {\r\n keep: {\r\n name: 'Settings to keep',\r\n configs: {\r\n unit: { name: 'Keep Unit/Name', type: 'checkbox' },\r\n wifi: { name: 'Keep WiFi config', type: 'checkbox' },\r\n network: { name: 'Keep network config', type: 'checkbox' },\r\n ntp: { name: 'Keep NTP/DST config', type: 'checkbox' },\r\n log: { name: 'Keep log config', type: 'checkbox' },\r\n }\r\n },\r\n load: {\r\n name: 'Pre-defined configurations',\r\n configs: {\r\n config: { name: 'Pre-Defined config', type: 'select', options: [\r\n { name: 'default', value: 0 },\r\n { name: 'Sonoff Basic', value: 1 },\r\n { name: 'Sonoff TH1x', value: 2 },\r\n { name: 'Sonoff S2x', value: 3 },\r\n { name: 'Sonoff TouchT1', value: 4 },\r\n { name: 'Sonoff TouchT2', value: 5 },\r\n { name: 'Sonoff TouchT3', value: 6 },\r\n { name: 'Sonoff 4ch', value: 7 },\r\n { name: 'Sonoff POW', value: 8 },\r\n { name: 'Sonoff POW-r2', value: 9 },\r\n { name: 'Shelly1', value: 10 },\r\n ] },\r\n }\r\n },\r\n },\r\n}\r\n\r\nconst config = {}\r\n\r\nexport class FactoryResetPage extends Component {\r\n render(props) {\r\n formConfig.onSave = (config) => {\r\n const data = new FormData();\r\n if (config.keep.unit) data.append('kun', 'on');\r\n if (config.keep.wifi) data.append('kw', 'on');\r\n if (config.keep.network) data.append('knet', 'on');\r\n if (config.keep.ntp) data.append('kntp', 'on');\r\n if (config.keep.log) data.append('klog', 'on');\r\n data.append('fdm', config.load.config);\r\n data.append('savepref', 'Save Preferences');\r\n fetch('/factoryreset', {\r\n method: 'POST',\r\n body: data \r\n }).then(() => {\r\n data.delete('savepref');\r\n data.append('performfactoryreset', 'Factory Reset');\r\n fetch('/factoryreset', {\r\n method: 'POST',\r\n body: data\r\n }).then(() => {\r\n setTimeout(() => {\r\n window.location.href=\"#devices\";\r\n }, 5000);\r\n }, e => {\r\n\r\n })\r\n }, e => {\r\n\r\n });\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { devices } from '../devices';\r\nimport { set } from '../lib/helpers';\r\n\r\nconst baseFields = { \r\n enabled: { name: 'Enabled', type: 'checkbox', var: 'enabled' },\r\n name: { name: 'Name', type: 'string' },\r\n};\r\n\r\nconst getFormConfig = (type) => {\r\n const device = devices.find(d => d.value === parseInt(type));\r\n if (!device) return null;\r\n\r\n const dataAcquisitionForm = device.fields.data ? {\r\n name: 'Data Acquisition',\r\n configs: {\r\n send1: { name: 'Send to Controller 1', type: 'checkbox', var: 'TaskDeviceSendData[0]', if: 'controllers[0].enabled' },\r\n send2: { name: 'Send to Controller 2', type: 'checkbox', var: 'TaskDeviceSendData[1]', if: 'controllers[1].enabled' },\r\n send3: { name: 'Send to Controller 3', type: 'checkbox', var: 'TaskDeviceSendData[2]', if: 'controllers[2].enabled' },\r\n idx1: { name: 'IDX1', type: 'number', var: 'TaskDeviceID[0]', if: 'controllers[0].enabled' },\r\n idx2: { name: 'IDX2', type: 'number', var: 'TaskDeviceID[1]', if: 'controllers[1].enabled' },\r\n idx3: { name: 'IDX3', type: 'number', var: 'TaskDeviceID[2]', if: 'controllers[2].enabled' },\r\n interval: { name: 'Interval', type: 'number', var: 'interval' },\r\n }\r\n }: {};\r\n \r\n return {\r\n groups: {\r\n settings: {\r\n name: 'Device Settings',\r\n configs: {\r\n device: { name: 'Device', type: 'select', var: 'device', options: devices },\r\n ...baseFields,\r\n \r\n }\r\n },\r\n ...device.fields,\r\n data: dataAcquisitionForm,\r\n values: {\r\n name: 'Values',\r\n configs: {\r\n ...[...new Array(device.fields.vals || 0)].reduce((acc, x, i) => {\r\n acc[`value${i}`] = [\r\n { name: `Name ${i+1}`, var: `settings.values[${i}].name`, type: 'string' }, \r\n { name: `Formula ${i+1}`, var: `settings.values[${i}].formula`, type: 'string' },\r\n { name: `Decimals ${i+1}`, var: `extra.decimals[${i}]`, type: 'number' }\r\n ];\r\n return acc;\r\n }, {})\r\n }\r\n }\r\n },\r\n }\r\n}\r\n\r\nconst setDefaultConfig = (type, config) => {\r\n const device = devices.find(d => d.value === parseInt(type));\r\n Object.keys(device.fields).forEach((groupKey) => {\r\n const group = device.fields[groupKey];\r\n if (!group.configs) return;\r\n Object.keys(group.configs).forEach((configKey) => {\r\n const cfg = group.configs[configKey];\r\n const key = cfg.var || `${groupKey}.${configKey}`;\r\n let val = 0;\r\n if (cfg.type === 'string') val = '';\r\n else if (cfg.type === 'ip') val = [0, 0, 0, 0];\r\n set(config, key, val);\r\n });\r\n });\r\n if (device.fields.defaults) {\r\n const defaultConfig = device.fields.defaults();\r\n Object.keys(defaultConfig).forEach(key => {\r\n const val = defaultConfig[key];\r\n set(config, key, val); \r\n })\r\n }\r\n \r\n}\r\n\r\n// todo: changing protocol needs to update:\r\n// -- back to default (correct default)\r\n// -- field list \r\nexport class DevicesEditPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.config = settings.get(`tasks[${props.params[0]}]`);\r\n this.state = {\r\n device: this.config.device,\r\n }\r\n }\r\n\r\n render(props) {\r\n const formConfig = getFormConfig(this.state.device);\r\n if (!formConfig) {\r\n alert('something went wrong, cant edit device');\r\n window.location.href='#devices';\r\n }\r\n formConfig.groups.settings.configs.device.onChange = (e) => {\r\n this.setState({ device: e.currentTarget.value });\r\n setDefaultConfig(e.currentTarget.value, this.config);\r\n };\r\n formConfig.onSave = (values) => {\r\n settings.set(`tasks[${props.params[0]}]`, values);\r\n window.location.href='#devices';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","export const nodes = [\n // TRIGGERS\n {\n group: 'TRIGGERS',\n type: 'timer',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }],\n indent: true,\n toString: function () { return `timer ${this.config[0].value}`; },\n toDsl: function () { return [`on Rules#Timer=${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'event',\n inputs: [],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text',\n }],\n indent: true,\n toString: function () { return `event ${this.config[0].value}`; },\n toDsl: function () { return [`on ${this.config[0].value} do\\n%%output%%\\nEndon\\n`]; }\n }, {\n group: 'TRIGGERS',\n type: 'clock',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: () => { return 'clock'; },\n toDsl: () => { return ['on Clock#Time do\\n%%output%%\\nEndon\\n']; }\n }, {\n group: 'TRIGGERS',\n type: 'system boot',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On System#Boot do\\n%%output%%\\nEndon\\n`];\n }\n }, {\n group: 'TRIGGERS',\n type: 'Device',\n inputs: [],\n outputs: [1],\n config: [],\n indent: true,\n toString: function() {\n return `on boot`;\n },\n toDsl: function() {\n return [`On Device#Value do\\n%%output%%\\nEndon\\n`];\n }\n }, \n // LOGIC\n {\n group: 'LOGIC',\n type: 'if/else',\n inputs: [1],\n outputs: [1, 2],\n config: [{\n name: 'variable',\n type: 'textselect',\n values: ['Clock#Time'],\n },{\n name: 'equality',\n type: 'select',\n values: ['=', '<', '>', '<=', '>=', '!=']\n },{\n name: 'value',\n type: 'text',\n }],\n indent: true,\n toString: function() {\n return `IF ${this.config[0].value}${this.config[1].value}${this.config[2].value}`;\n },\n toDsl: function() {\n return [`If [${this.config[0].value}]${this.config[1].value}${this.config[2].value}\\n%%output%%`, `Else\\n%%output%%\\nEndif`];\n }\n }, {\n group: 'LOGIC',\n type: 'delay',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'delay',\n type: 'number',\n }],\n toString: function() {\n return `delay: ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`Delay ${this.config[0].value}\\n`];\n }\n },\n // ACTIONS\n {\n group: 'ACTIONS',\n type: 'GPIO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n }],\n toString: function() {\n return `GPIO ${this.config[0].value}, ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`GPIO,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'Pulse',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],\n value: 0\n }, {\n name: 'value',\n type: 'select',\n values: [0, 1],\n value: 1\n }, {\n name: 'unit',\n type: 'select',\n values: ['s', 'ms'],\n value: 'ms',\n }, {\n name: 'duration',\n type: 'number',\n value: 1000\n }],\n toString: function() {\n return `Pulse ${this.config[0].value}=${this.config[1].value} for ${this.config[3].value}${this.config[2].value}`;\n },\n toDsl: function() {\n const fn = this.config[2].value === 's' ? 'LongPulse' : 'Pulse';\n return [`${fn},${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'PWM',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'value',\n type: 'number',\n value: 1023,\n }],\n toString: function() {\n return `PWM.GPIO${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`PWM,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'SERVO',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'gpio',\n type: 'select',\n values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n value: 0\n }, {\n name: 'servo',\n type: 'select',\n values: [1, 2],\n value: 0\n }, {\n name: 'position',\n type: 'number',\n value: 90,\n }],\n toString: function() {\n return `SERVO.GPIO${this.config[0].value} = ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`Servo,${this.config[1].value},${this.config[0].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'fire event',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'name',\n type: 'text'\n }],\n toString: function() {\n return `event ${this.config[0].value}`;\n },\n toDsl: function() {\n return [`event,${this.config[0].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'settimer',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'timer',\n type: 'select',\n values: [1, 2, 3, 4, 5, 6, 7, 8],\n }, {\n name: 'value',\n type: 'number'\n }],\n toString: function() {\n return `timer${this.config[0].value} = ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`timerSet,${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'MQTT',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'topic',\n type: 'text',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`Publish ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'UDP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'ip',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `UDP ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendToUDP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'HTTP',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'host',\n type: 'text',\n }, {\n name: 'port',\n type: 'number',\n value: 80\n }, {\n name: 'url',\n type: 'text',\n }],\n toString: function() {\n return `HTTP ${this.config[2].value}`;\n },\n toDsl: function() {\n return [`SentToHTTP ${this.config[0].value},${this.config[1].value},${this.config[2].value}\\n`];\n }\n }, {\n group: 'ACTIONS',\n type: 'ESPEASY',\n inputs: [1],\n outputs: [1],\n config: [{\n name: 'device',\n type: 'number',\n }, {\n name: 'command',\n type: 'text',\n }],\n toString: function() {\n return `mqtt ${this.config[1].value}`;\n },\n toDsl: function() {\n return [`SendTo ${this.config[0].value},${this.config[1].value}\\n`];\n }\n }\n]","import { h, Component } from 'preact';\r\nimport { Form } from '../components/form';\r\nimport { settings } from '../lib/settings';\r\nimport { loader } from '../lib/loader';\r\n\r\nconst formConfig = {\r\n groups: {\r\n wifi: {\r\n name: 'WiFi',\r\n configs: {\r\n ssid: { name: 'SSID', type: 'select', options: [], var: 'security[0].WifiSSID' },\r\n passwd: { name: 'Password', type: 'password', var: 'security[0].WifiKey' },\r\n }\r\n },\r\n },\r\n}\r\n\r\nexport class SetupPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n devices: [],\r\n }\r\n loader.show();\r\n\r\n this.save = () => {\r\n loader.show();\r\n\r\n const data = new FormData();\r\n data.append('ssid', this.config.security[0].WifiSSID);\r\n data.append('pass', this.config.security[0].WifiKey);\r\n fetch('/setup', {\r\n method: 'POST',\r\n data\r\n }).then(() => {\r\n setTimeout(() => {\r\n loader.hide();\r\n window.location.href = '/';\r\n }, 5000);\r\n })\r\n }\r\n }\r\n\r\n render(props) {\r\n formConfig.groups.wifi.configs.ssid.options = this.state.devices.map(device => ({ name: device.ssid, value: device.ssd }));\r\n const config = settings.get('config');\r\n return (\r\n \r\n
\r\n CONTINUE \r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n fetch('/wifiscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n loader.hide();\r\n });\r\n }\r\n}","import { \n ConfigPage, \n DevicesPage, \n DevicesEditPage, \n ControllersPage, \n ControllerEditPage, \n ControllerNotificationsPage,\n ConfigAdvancedPage, \n ConfigHardwarePage, \n RebootPage, \n LoadPage, \n RulesPage, \n UpdatePage, \n ToolsPage, \n FSPage, \n FactoryResetPage, \n DiscoverPage, \n DiffPage, \n RulesEditorPage, \n SetupPage,\n SysVarsPage\n} from '../pages';\n\nimport { saveConfig } from '../conf/config.dat';\n\nclass Menus {\n constructor() {\n this.menus = [];\n this.routes = [];\n\n this.addMenu = (menu) => {\n this.menus.push(menu);\n this.addRoute(menu);\n }\n\n this.addRoute = (route) => {\n this.routes.push(route);\n if (route.children) {\n route.children.forEach(child => this.routes.push(child));\n }\n }\n }\n \n}\n\nconst menus = [\n { title: 'Devices', href: 'devices', component: DevicesPage, children: [] },\n { title: 'Controllers', href: 'controllers', component: ControllersPage, children: [] },\n { title: 'Automation', href: 'rules', component: RulesEditorPage, class: 'full', children: [] },\n { title: 'Config', href: 'config', component: ConfigPage, children: [\n { title: 'Hardware', href: 'config/hardware', component: ConfigHardwarePage },\n { title: 'Advanced', href: 'config/advanced', component: ConfigAdvancedPage },\n { title: 'Rules', href: 'config/rules', component: RulesPage },\n { title: 'Save', href: 'config/save', action: saveConfig },\n { title: 'Load', href: 'config/load', component: LoadPage },\n { title: 'Reboot', href: 'config/reboot', component: RebootPage },\n { title: 'Factory Reset', href: 'config/factory', component: FactoryResetPage },\n ] },\n { title: 'Tools', href: 'tools', component: ToolsPage, children: [\n { title: 'Discover', href: 'tools/discover', component: DiscoverPage },\n { title: 'Info', href: 'tools/sysinfo', component: SysVarsPage },\n { title: 'Update', href: 'tools/update', component: UpdatePage },\n { title: 'Filesystem', href: 'tools/fs', component: FSPage },\n ] },\n];\n\nconst routes = [\n { title: 'Edit Controller', href:'controllers/edit', component: ControllerEditPage },\n { title: 'Edit Notification', href:'controllers/notification', component: ControllerNotificationsPage },\n { title: 'Edit Device', href:'devices/edit', component: DevicesEditPage },\n { title: 'Save to Flash', href:'tools/diff', component: DiffPage },\n { title: 'Setup', href: 'config/setup', component: SetupPage }\n];\n\nconst menu = new Menus();\nroutes.forEach(menu.addRoute);\nmenus.forEach(menu.addMenu)\n\nexport { menu };","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { devices } from '../devices';\r\n\r\nexport class DevicesPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleEnableToggle = (e) => {\r\n settings.set(e.currentTarget.dataset.prop, e.currentTarget.checked ? 1 : 0);\r\n }\r\n }\r\n render(props) {\r\n const tasks = settings.get('tasks');\r\n if (!tasks) return;\r\n return (\r\n \r\n {tasks.map((task, i) => {\r\n const editUrl = `#devices/edit/${i}`;\r\n const device = devices.find(d => d.value === task.device);\r\n const deviceType = device ? device.name : '--unknown--';\r\n const enabledProp = `tasks[${i}].enabled`;\r\n return (\r\n
\r\n
\r\n {i+1}: \r\n {task.settings.name} [{deviceType}] {task.gpio1!==255?`GPIO:${task.gpio1}`:''}\r\n edit \r\n \r\n
\r\n {/* {device.settings.values.map(v => {\r\n return ({v.name}: {v.value} );\r\n })} */}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { protocols } from './controllers.edit';\r\nimport { types } from './controllers.notifications';\r\n\r\nexport class ControllersPage extends Component {\r\n render(props) {\r\n const controllers = settings.get('controllers');\r\n const notifications = settings.get('notifications');\r\n return (\r\n Controllers \r\n
{controllers.map((c, i) => {\r\n const editUrl = `#controllers/edit/${i}`;\r\n return (\r\n
\r\n
\r\n {i+1}: {(c.enabled) ? (✓ ) : (✗ )}\r\n [{protocols.find(p => p.value === c.protocol).name}] PORT:{c.settings.port} HOST:{c.settings.host}\r\n edit \r\n \r\n
\r\n )\r\n })}
\r\n
Notifications \r\n
{notifications.map((n, i) => {\r\n const editUrl = `#controllers/notification/${i}`;\r\n return (\r\n
\r\n
\r\n {i+1}: {(n.enabled) ? (✓ ) : (✗ )}\r\n [{types.find(p => p.value === n.type).name}] PORT:{n.settings.port} HOST:{n.settings.host}\r\n edit \r\n \r\n
\r\n )\r\n })}
\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { FlowEditor } from '../lib/floweditor';\r\nimport { nodes } from '../lib/node_definitions';\r\nimport { getConfigNodes, loadRuleConfig, storeRuleConfig, storeRule } from '../lib/espeasy';\r\n\r\nexport class RulesEditorPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.nodes = nodes;\r\n }\r\n\r\n render(props) {\r\n return (\r\n this.element = ref}>\r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n getConfigNodes().then((out) => {\r\n out.nodes.forEach(device => nodes.unshift(device));\r\n const ifElseNode = nodes.find(node => node.type === 'if/else');\r\n if (!ifElseNode.config[0].loaded) {\r\n out.vars.forEach(v => ifElseNode.config[0].values.push(v)); \r\n ifElseNode.config[0].loaded = true;\r\n }\r\n\r\n this.chart = new FlowEditor(this.element, nodes, { \r\n onSave: (config, rules) => {\r\n storeRuleConfig(config);\r\n storeRule(rules);\r\n }\r\n });\r\n \r\n loadRuleConfig().then(config => {\r\n this.chart.loadConfig(config);\r\n });\r\n });\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { storeFile } from '../lib/espeasy';\r\n\r\nexport class LoadPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.saveForm = () => {\r\n storeFile(this.file.files[0]);\r\n }\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n \r\n File:\r\n \r\n this.file = ref} />\r\n upload \r\n
\r\n )\r\n }\r\n}","import { h, Component } from 'preact';\r\nimport { loader } from '../lib/loader';\r\n\r\n\r\nexport class RebootPage extends Component {\r\n render(props) {\r\n return (\r\n ESPEasy is rebooting ... please wait a while, this page will auto refresh.
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n loader.show();\r\n fetch('/?cmd=reboot').then(() => {\r\n setTimeout(() => {\r\n loader.hide();\r\n window.location.hash = '#devices';\r\n window.location.reload();\r\n }, 5000)\r\n })\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nexport class ToolsPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.history = '';\r\n\r\n this.sendCommand = (e) => {\r\n fetch(`/control?cmd=${this.cmd.value}`).then(response => response.text()).then(response => {\r\n this.cmdOutput.value = response;\r\n });\r\n }\r\n }\r\n\r\n fetch() {\r\n fetch('/logjson').then(response => response.json()).then(response => {\r\n response.Log.Entries.map(log => {\r\n this.history += `${(new Date(log.timestamp).toLocaleTimeString())} ${log.text}
`;\r\n this.log.innerHTML = this.history;\r\n if (true) {\r\n this.log.scrollTop = this.log.scrollHeight;\r\n }\r\n })\r\n });\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
this.log = ref}>loading logs ...
\r\n
Command: this.cmd = ref}/>send
\r\n
this.cmdOutput = ref}> \r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n this.interval = setInterval(() => {\r\n this.fetch();\r\n }, 1000);\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.interval) clearInterval(this.interval);\r\n }\r\n}","import { h, Component } from 'preact';\r\n\r\nconst devices = [\r\n { nr: 1, name: 'Senzor', type: 'DH11', vars: [{ name: 'Temperature', formula: '', value: 21 }, { name: 'Humidity', formula: '', value: 65 }] },\r\n { nr: 1, name: 'Humidity', type: 'Linear Regulator', vars: [{ name: 'Output', formula: '', value: 1 }] }\r\n]\r\n\r\nexport class DiscoverPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n devices: []\r\n }\r\n\r\n this.scani2c = () => {\r\n fetch('/i2cscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n });\r\n }\r\n\r\n this.scanwifi = () => {\r\n fetch('/wifiscanner').then(r => r.json()).then(r => {\r\n this.setState({ devices: r });\r\n });\r\n }\r\n }\r\n\r\n render(props) {\r\n return (\r\n \r\n
\r\n Scan I2C \r\n Scan WiFi \r\n
\r\n
{this.state.devices.map(device => {\r\n return (\r\n \r\n \r\n {JSON.stringify(device)}\r\n \r\n \r\n )\r\n })}
\r\n
\r\n );\r\n }\r\n}","import { h, Component } from 'preact';\n\nexport class SysVarsPage extends Component {\n constructor(props) {\n super(props);\n this.state = { device: props.params[0], vars: {} };\n }\n\n fetch() {\n fetch(`/sysinfo_json`).then(response => response.json()).then(vars => {\n this.setState({ vars });\n });\n }\n\n render(props) {\n return (\n \n {\n Object.keys(this.state.vars).map(v => {\n const value = this.state.vars[v];\n return (\n \n {v} \n {\n Object.keys(value).map((v1, i) => {\n const value1 = value[v1];\n return (\n \n {v1} \n \n
\n )\n })\n }\n \n )\n \n \n })\n }\n \n )\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","import { h, Component } from 'preact';\nimport { fetchProgress } from '../lib/espeasy';\nimport { loader } from '../lib/loader';\n\nexport class UpdatePage extends Component {\n constructor(props) {\n super(props);\n\n this.state = { progress: 0 }\n\n this.saveForm = () => {\n loader.show();\n const data = new FormData()\n data.append('file', this.file.files[0])\n data.append('user', 'hubot')\n \n fetchProgress('/update', {\n method: 'POST',\n body: data,\n onProgress: (e) => {\n const perc = 100 * e.loaded / e.total;\n this.setState({ progress: perc });\n }\n }).then(() => {\n window.location.href = '#config/reboot';\n });\n }\n }\n\n render(props) {\n return (\n \n \n \n Firmware:\n \n this.file = ref} />\n upload \n { (this.state.progress) ? ( {Math.round(this.state.progress)}% ) : (null) }\n
\n \n )\n }\n}","import { h, Component } from 'preact';\nimport { deleteFile, storeFile } from '../lib/espeasy';\nimport { loader } from '../lib/loader';\n\nexport class FSPage extends Component {\n constructor(props) {\n super(props);\n this.state = { files: [] }\n\n this.saveForm = async () => {\n loader.show();\n await storeFile(this.file.files[0]);\n await fetch();\n }\n\n this.deleteFile = e => {\n const fileName = e.currentTarget.dataset.name;\n deleteFile(fileName).then(() => (this.fetch()));\n }\n }\n\n fetch() {\n fetch('/filelist_json').then(response => response.json()).then(fileList => {\n this.setState({ files: fileList });\n });\n }\n\n render(props) {\n loader.hide();\n return (\n \n
\n \n \n File:\n \n this.file = ref} />\n \n upload \n
\n \n
\n \n \n File \n Size \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n {file.fileName} \n {file.size} \n \n { file.fileName.endsWith('.dat') ? (null) :\n (X )\n }\n \n \n ); })}\n\n \n
\n
\n );\n }\n\n componentDidMount() {\n this.fetch();\n }\n}","import { h, Component } from 'preact';\r\nimport { settings } from '../lib/settings';\r\nimport { saveConfig } from '../conf/config.dat';\r\nimport { storeFile } from '../lib/espeasy';\r\nimport { loader } from '../lib/loader';\r\n\r\n\r\nexport class DiffPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.diff = settings.diff();\r\n this.stage = 0;\r\n\r\n this.calculateByteDiff = () => {\r\n this.data = saveConfig(false);\r\n this.bytediffcount = 0;\r\n this.bytediff = Array.from(new Uint8Array(this.data));\r\n this.bytediff = this.bytediff.map((byte, i) => {\r\n const binary = settings.binary[i];\r\n if (byte !== binary) {\r\n this.bytediffcount++;\r\n return `${binary.toString(16)}:${byte.toString(16)} `;\r\n } else return `${byte.toString(16)}`;\r\n });\r\n this.bytediff = this.bytediff.join(' ');\r\n }\r\n\r\n this.calculateByteDiff();\r\n\r\n this.applyChanges = () => {\r\n if (this.stage === 0) {\r\n this.diff.map(d => {\r\n const input = this.form.elements[d.path];\r\n if (!input.checked) {\r\n settings.set(input.name, d.val1);\r\n }\r\n });\r\n settings.apply();\r\n this.diff = settings.diff();\r\n this.calculateByteDiff();\r\n this.stage = 1;\r\n return;\r\n }\r\n \r\n loader.show();\r\n storeFile('config.dat', this.data).then(() => {\r\n this.stage = 0;\r\n window.location.href='#config/reboot';\r\n });\r\n \r\n };\r\n }\r\n \r\n\r\n render(props) {\r\n if (this.bytediff && (this.stage === 1 /*|| this.bytediffcount*/)) {\r\n return (
APPLY (bytes: {this.bytediffcount}) )\r\n }\r\n return (\r\n \r\n
byte diff: {this.bytediffcount}
\r\n
this.form = ref}>\r\n {this.diff.map(change => {\r\n return (\r\n \r\n {change.path} : before: {JSON.stringify(change.val1)} now:{JSON.stringify(change.val2)} \r\n
\r\n )\r\n })}\r\n APPLY \r\n \r\n
\r\n \r\n );\r\n }\r\n}","import { settings } from './settings';\nimport espeasy from './espeasy';\nimport { loader } from './loader';\nimport { menu } from './menu';\n\nconst PLUGINS = [\n '/dash.js.gz'\n];\n\nconst dynamicallyLoadScript = (url) => {\n return new Promise(resolve => {\n var script = document.createElement(\"script\"); // create a script DOM node\n script.src = url; // set its src to the provided URL\n script.onreadystatechange = resolve;\n script.onload = resolve;\n script.onerror = resolve;\n document.head.appendChild(script); // add it to the end of the head section of the page (could change 'head' to 'body' to add it to the end of the body section instead)\n });\n}\n\nconst getPluginAPI = () => {\n return {\n settings,\n loader,\n menu,\n espeasy,\n }\n}\n\nwindow.getPluginAPI = getPluginAPI;\n\nexport const loadPlugins = async () => {\n return Promise.all(PLUGINS.map(async plugin => {\n return dynamicallyLoadScript(plugin);\n }));\n}","import { h, render, Component } from 'preact';\nimport miniToastr from 'mini-toastr';\nimport { Menu } from './components/menu';\nimport { Page } from './components/page';\nimport { loadConfig } from './conf/config.dat';\nimport { settings } from './lib/settings';\nimport { loader } from './lib/loader';\nimport { loadPlugins } from './lib/plugins';\nimport { menu } from './lib/menu';\n\nminiToastr.init({})\n\nconst clearSlashes = path => {\n return path.toString().replace(/\\/$/, '').replace(/^\\//, '');\n};\n\nconst getFragment = () => {\n const match = window.location.href.match(/#(.*)$/);\n const fragment = match ? match[1] : '';\n return clearSlashes(fragment);\n};\n\nclass App extends Component {\n constructor() {\n super();\n this.state = {\n menuActive: false,\n menu: menu.menus[0],\n page: menu.menus[0],\n changed: false,\n }\n\n this.menuToggle = () => {\n this.setState({ menuActive: !this.state.menuActive });\n }\n }\n\n render(props, state) {\n \n const params = getFragment().split('/').slice(2);\n const active = this.state.menuActive ? 'active' : '';\n return (\n \n );\n }\n\n componentDidMount() {\n loader.hide();\n\n let current = '';\n const fn = () => {\n const newFragment = getFragment();\n const diff = settings.diff();\n if(this.state.changed !== !!diff.length) {\n this.setState({changed: !this.state.changed})\n }\n if(current !== newFragment) {\n current = newFragment;\n const parts = current.split('/');\n const m = menu.menus.find(menu => menu.href === parts[0]);\n const page = parts.length > 1 ? menu.routes.find(route => route.href === `${parts[0]}/${parts[1]}`) : m;\n if (page) {\n this.setState({ page, menu: m, menuActive: false });\n }\n }\n }\n this.interval = setInterval(fn, 100);\n }\n\n componentWillUnmount() {}\n}\n\nconst load = async () => {\n await loadConfig();\n await loadPlugins();\n render( , document.body);\n}\n\nload();"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/dash.js b/build/dash.js
index 7bd3d94..9d1b6b9 100644
--- a/build/dash.js
+++ b/build/dash.js
@@ -1,4033 +1,2 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./src/plugins/dashboard/index.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./node_modules/lodash/_Hash.js":
-/*!**************************************!*\
- !*** ./node_modules/lodash/_Hash.js ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var hashClear = __webpack_require__(/*! ./_hashClear */ "./node_modules/lodash/_hashClear.js"),
- hashDelete = __webpack_require__(/*! ./_hashDelete */ "./node_modules/lodash/_hashDelete.js"),
- hashGet = __webpack_require__(/*! ./_hashGet */ "./node_modules/lodash/_hashGet.js"),
- hashHas = __webpack_require__(/*! ./_hashHas */ "./node_modules/lodash/_hashHas.js"),
- hashSet = __webpack_require__(/*! ./_hashSet */ "./node_modules/lodash/_hashSet.js");
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
-
-module.exports = Hash;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_ListCache.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_ListCache.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var listCacheClear = __webpack_require__(/*! ./_listCacheClear */ "./node_modules/lodash/_listCacheClear.js"),
- listCacheDelete = __webpack_require__(/*! ./_listCacheDelete */ "./node_modules/lodash/_listCacheDelete.js"),
- listCacheGet = __webpack_require__(/*! ./_listCacheGet */ "./node_modules/lodash/_listCacheGet.js"),
- listCacheHas = __webpack_require__(/*! ./_listCacheHas */ "./node_modules/lodash/_listCacheHas.js"),
- listCacheSet = __webpack_require__(/*! ./_listCacheSet */ "./node_modules/lodash/_listCacheSet.js");
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-
-module.exports = ListCache;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_Map.js":
-/*!*************************************!*\
- !*** ./node_modules/lodash/_Map.js ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js"),
- root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/* Built-in method references that are verified to be native. */
-var Map = getNative(root, 'Map');
-
-module.exports = Map;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_MapCache.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_MapCache.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var mapCacheClear = __webpack_require__(/*! ./_mapCacheClear */ "./node_modules/lodash/_mapCacheClear.js"),
- mapCacheDelete = __webpack_require__(/*! ./_mapCacheDelete */ "./node_modules/lodash/_mapCacheDelete.js"),
- mapCacheGet = __webpack_require__(/*! ./_mapCacheGet */ "./node_modules/lodash/_mapCacheGet.js"),
- mapCacheHas = __webpack_require__(/*! ./_mapCacheHas */ "./node_modules/lodash/_mapCacheHas.js"),
- mapCacheSet = __webpack_require__(/*! ./_mapCacheSet */ "./node_modules/lodash/_mapCacheSet.js");
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
- var index = -1,
- length = entries == null ? 0 : entries.length;
-
- this.clear();
- while (++index < length) {
- var entry = entries[index];
- this.set(entry[0], entry[1]);
- }
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
-
-module.exports = MapCache;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_Symbol.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/_Symbol.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/** Built-in value references. */
-var Symbol = root.Symbol;
-
-module.exports = Symbol;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_arrayMap.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_arrayMap.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
- var index = -1,
- length = array == null ? 0 : array.length,
- result = Array(length);
-
- while (++index < length) {
- result[index] = iteratee(array[index], index, array);
- }
- return result;
-}
-
-module.exports = arrayMap;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_assignValue.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_assignValue.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseAssignValue = __webpack_require__(/*! ./_baseAssignValue */ "./node_modules/lodash/_baseAssignValue.js"),
- eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns `value` to `key` of `object` if the existing value is not equivalent
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignValue(object, key, value) {
- var objValue = object[key];
- if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
- (value === undefined && !(key in object))) {
- baseAssignValue(object, key, value);
- }
-}
-
-module.exports = assignValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_assocIndexOf.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_assocIndexOf.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var eq = __webpack_require__(/*! ./eq */ "./node_modules/lodash/eq.js");
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
- var length = array.length;
- while (length--) {
- if (eq(array[length][0], key)) {
- return length;
- }
- }
- return -1;
-}
-
-module.exports = assocIndexOf;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseAssignValue.js":
-/*!*************************************************!*\
- !*** ./node_modules/lodash/_baseAssignValue.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var defineProperty = __webpack_require__(/*! ./_defineProperty */ "./node_modules/lodash/_defineProperty.js");
-
-/**
- * The base implementation of `assignValue` and `assignMergeValue` without
- * value checks.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function baseAssignValue(object, key, value) {
- if (key == '__proto__' && defineProperty) {
- defineProperty(object, key, {
- 'configurable': true,
- 'enumerable': true,
- 'value': value,
- 'writable': true
- });
- } else {
- object[key] = value;
- }
-}
-
-module.exports = baseAssignValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseGet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_baseGet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),
- toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");
-
-/**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path) {
- path = castPath(path, object);
-
- var index = 0,
- length = path.length;
-
- while (object != null && index < length) {
- object = object[toKey(path[index++])];
- }
- return (index && index == length) ? object : undefined;
-}
-
-module.exports = baseGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseGetTag.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_baseGetTag.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
- getRawTag = __webpack_require__(/*! ./_getRawTag */ "./node_modules/lodash/_getRawTag.js"),
- objectToString = __webpack_require__(/*! ./_objectToString */ "./node_modules/lodash/_objectToString.js");
-
-/** `Object#toString` result references. */
-var nullTag = '[object Null]',
- undefinedTag = '[object Undefined]';
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
- if (value == null) {
- return value === undefined ? undefinedTag : nullTag;
- }
- return (symToStringTag && symToStringTag in Object(value))
- ? getRawTag(value)
- : objectToString(value);
-}
-
-module.exports = baseGetTag;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseIsNative.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_baseIsNative.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isFunction = __webpack_require__(/*! ./isFunction */ "./node_modules/lodash/isFunction.js"),
- isMasked = __webpack_require__(/*! ./_isMasked */ "./node_modules/lodash/_isMasked.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
- toSource = __webpack_require__(/*! ./_toSource */ "./node_modules/lodash/_toSource.js");
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
- objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
- funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- * else `false`.
- */
-function baseIsNative(value) {
- if (!isObject(value) || isMasked(value)) {
- return false;
- }
- var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
- return pattern.test(toSource(value));
-}
-
-module.exports = baseIsNative;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseSet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_baseSet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assignValue = __webpack_require__(/*! ./_assignValue */ "./node_modules/lodash/_assignValue.js"),
- castPath = __webpack_require__(/*! ./_castPath */ "./node_modules/lodash/_castPath.js"),
- isIndex = __webpack_require__(/*! ./_isIndex */ "./node_modules/lodash/_isIndex.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js"),
- toKey = __webpack_require__(/*! ./_toKey */ "./node_modules/lodash/_toKey.js");
-
-/**
- * The base implementation of `_.set`.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @param {Function} [customizer] The function to customize path creation.
- * @returns {Object} Returns `object`.
- */
-function baseSet(object, path, value, customizer) {
- if (!isObject(object)) {
- return object;
- }
- path = castPath(path, object);
-
- var index = -1,
- length = path.length,
- lastIndex = length - 1,
- nested = object;
-
- while (nested != null && ++index < length) {
- var key = toKey(path[index]),
- newValue = value;
-
- if (index != lastIndex) {
- var objValue = nested[key];
- newValue = customizer ? customizer(objValue, key, nested) : undefined;
- if (newValue === undefined) {
- newValue = isObject(objValue)
- ? objValue
- : (isIndex(path[index + 1]) ? [] : {});
- }
- }
- assignValue(nested, key, newValue);
- nested = nested[key];
- }
- return object;
-}
-
-module.exports = baseSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_baseToString.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_baseToString.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js"),
- arrayMap = __webpack_require__(/*! ./_arrayMap */ "./node_modules/lodash/_arrayMap.js"),
- isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
- symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
- // Exit early for strings to avoid a performance hit in some environments.
- if (typeof value == 'string') {
- return value;
- }
- if (isArray(value)) {
- // Recursively convert values (susceptible to call stack limits).
- return arrayMap(value, baseToString) + '';
- }
- if (isSymbol(value)) {
- return symbolToString ? symbolToString.call(value) : '';
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = baseToString;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_castPath.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_castPath.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isKey = __webpack_require__(/*! ./_isKey */ "./node_modules/lodash/_isKey.js"),
- stringToPath = __webpack_require__(/*! ./_stringToPath */ "./node_modules/lodash/_stringToPath.js"),
- toString = __webpack_require__(/*! ./toString */ "./node_modules/lodash/toString.js");
-
-/**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @param {Object} [object] The object to query keys on.
- * @returns {Array} Returns the cast property path array.
- */
-function castPath(value, object) {
- if (isArray(value)) {
- return value;
- }
- return isKey(value, object) ? [value] : stringToPath(toString(value));
-}
-
-module.exports = castPath;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_coreJsData.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_coreJsData.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var root = __webpack_require__(/*! ./_root */ "./node_modules/lodash/_root.js");
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
-
-module.exports = coreJsData;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_defineProperty.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_defineProperty.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js");
-
-var defineProperty = (function() {
- try {
- var func = getNative(Object, 'defineProperty');
- func({}, '', {});
- return func;
- } catch (e) {}
-}());
-
-module.exports = defineProperty;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_freeGlobal.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_freeGlobal.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-module.exports = freeGlobal;
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js")))
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getMapData.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_getMapData.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isKeyable = __webpack_require__(/*! ./_isKeyable */ "./node_modules/lodash/_isKeyable.js");
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
- var data = map.__data__;
- return isKeyable(key)
- ? data[typeof key == 'string' ? 'string' : 'hash']
- : data.map;
-}
-
-module.exports = getMapData;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getNative.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_getNative.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseIsNative = __webpack_require__(/*! ./_baseIsNative */ "./node_modules/lodash/_baseIsNative.js"),
- getValue = __webpack_require__(/*! ./_getValue */ "./node_modules/lodash/_getValue.js");
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
- var value = getValue(object, key);
- return baseIsNative(value) ? value : undefined;
-}
-
-module.exports = getNative;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getRawTag.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_getRawTag.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Symbol = __webpack_require__(/*! ./_Symbol */ "./node_modules/lodash/_Symbol.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
-function getRawTag(value) {
- var isOwn = hasOwnProperty.call(value, symToStringTag),
- tag = value[symToStringTag];
-
- try {
- value[symToStringTag] = undefined;
- var unmasked = true;
- } catch (e) {}
-
- var result = nativeObjectToString.call(value);
- if (unmasked) {
- if (isOwn) {
- value[symToStringTag] = tag;
- } else {
- delete value[symToStringTag];
- }
- }
- return result;
-}
-
-module.exports = getRawTag;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_getValue.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_getValue.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
- return object == null ? undefined : object[key];
-}
-
-module.exports = getValue;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashClear.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_hashClear.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
- this.__data__ = nativeCreate ? nativeCreate(null) : {};
- this.size = 0;
-}
-
-module.exports = hashClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashDelete.js":
-/*!********************************************!*\
- !*** ./node_modules/lodash/_hashDelete.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
- var result = this.has(key) && delete this.__data__[key];
- this.size -= result ? 1 : 0;
- return result;
-}
-
-module.exports = hashDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashGet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashGet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
- var data = this.__data__;
- if (nativeCreate) {
- var result = data[key];
- return result === HASH_UNDEFINED ? undefined : result;
- }
- return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-module.exports = hashGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashHas.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashHas.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
- var data = this.__data__;
- return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
-}
-
-module.exports = hashHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_hashSet.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_hashSet.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var nativeCreate = __webpack_require__(/*! ./_nativeCreate */ "./node_modules/lodash/_nativeCreate.js");
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
- var data = this.__data__;
- this.size += this.has(key) ? 0 : 1;
- data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
- return this;
-}
-
-module.exports = hashSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isIndex.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/_isIndex.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
- var type = typeof value;
- length = length == null ? MAX_SAFE_INTEGER : length;
-
- return !!length &&
- (type == 'number' ||
- (type != 'symbol' && reIsUint.test(value))) &&
- (value > -1 && value % 1 == 0 && value < length);
-}
-
-module.exports = isIndex;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isKey.js":
-/*!***************************************!*\
- !*** ./node_modules/lodash/_isKey.js ***!
- \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isArray = __webpack_require__(/*! ./isArray */ "./node_modules/lodash/isArray.js"),
- isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
- reIsPlainProp = /^\w*$/;
-
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
- if (isArray(value)) {
- return false;
- }
- var type = typeof value;
- if (type == 'number' || type == 'symbol' || type == 'boolean' ||
- value == null || isSymbol(value)) {
- return true;
- }
- return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
- (object != null && value in Object(object));
-}
-
-module.exports = isKey;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isKeyable.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/_isKeyable.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
- var type = typeof value;
- return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
- ? (value !== '__proto__')
- : (value === null);
-}
-
-module.exports = isKeyable;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_isMasked.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_isMasked.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var coreJsData = __webpack_require__(/*! ./_coreJsData */ "./node_modules/lodash/_coreJsData.js");
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
- var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
- return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
- return !!maskSrcKey && (maskSrcKey in func);
-}
-
-module.exports = isMasked;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheClear.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_listCacheClear.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
- this.__data__ = [];
- this.size = 0;
-}
-
-module.exports = listCacheClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheDelete.js":
-/*!*************************************************!*\
- !*** ./node_modules/lodash/_listCacheDelete.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype;
-
-/** Built-in value references. */
-var splice = arrayProto.splice;
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- return false;
- }
- var lastIndex = data.length - 1;
- if (index == lastIndex) {
- data.pop();
- } else {
- splice.call(data, index, 1);
- }
- --this.size;
- return true;
-}
-
-module.exports = listCacheDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheGet.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheGet.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- return index < 0 ? undefined : data[index][1];
-}
-
-module.exports = listCacheGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheHas.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheHas.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
- return assocIndexOf(this.__data__, key) > -1;
-}
-
-module.exports = listCacheHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_listCacheSet.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_listCacheSet.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var assocIndexOf = __webpack_require__(/*! ./_assocIndexOf */ "./node_modules/lodash/_assocIndexOf.js");
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
- var data = this.__data__,
- index = assocIndexOf(data, key);
-
- if (index < 0) {
- ++this.size;
- data.push([key, value]);
- } else {
- data[index][1] = value;
- }
- return this;
-}
-
-module.exports = listCacheSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheClear.js":
-/*!***********************************************!*\
- !*** ./node_modules/lodash/_mapCacheClear.js ***!
- \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Hash = __webpack_require__(/*! ./_Hash */ "./node_modules/lodash/_Hash.js"),
- ListCache = __webpack_require__(/*! ./_ListCache */ "./node_modules/lodash/_ListCache.js"),
- Map = __webpack_require__(/*! ./_Map */ "./node_modules/lodash/_Map.js");
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
- this.size = 0;
- this.__data__ = {
- 'hash': new Hash,
- 'map': new (Map || ListCache),
- 'string': new Hash
- };
-}
-
-module.exports = mapCacheClear;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheDelete.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_mapCacheDelete.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
- var result = getMapData(this, key)['delete'](key);
- this.size -= result ? 1 : 0;
- return result;
-}
-
-module.exports = mapCacheDelete;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheGet.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheGet.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
- return getMapData(this, key).get(key);
-}
-
-module.exports = mapCacheGet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheHas.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheHas.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
- return getMapData(this, key).has(key);
-}
-
-module.exports = mapCacheHas;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_mapCacheSet.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/_mapCacheSet.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getMapData = __webpack_require__(/*! ./_getMapData */ "./node_modules/lodash/_getMapData.js");
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
- var data = getMapData(this, key),
- size = data.size;
-
- data.set(key, value);
- this.size += data.size == size ? 0 : 1;
- return this;
-}
-
-module.exports = mapCacheSet;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_memoizeCapped.js":
-/*!***********************************************!*\
- !*** ./node_modules/lodash/_memoizeCapped.js ***!
- \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var memoize = __webpack_require__(/*! ./memoize */ "./node_modules/lodash/memoize.js");
-
-/** Used as the maximum memoize cache size. */
-var MAX_MEMOIZE_SIZE = 500;
-
-/**
- * A specialized version of `_.memoize` which clears the memoized function's
- * cache when it exceeds `MAX_MEMOIZE_SIZE`.
- *
- * @private
- * @param {Function} func The function to have its output memoized.
- * @returns {Function} Returns the new memoized function.
- */
-function memoizeCapped(func) {
- var result = memoize(func, function(key) {
- if (cache.size === MAX_MEMOIZE_SIZE) {
- cache.clear();
- }
- return key;
- });
-
- var cache = result.cache;
- return result;
-}
-
-module.exports = memoizeCapped;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_nativeCreate.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_nativeCreate.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var getNative = __webpack_require__(/*! ./_getNative */ "./node_modules/lodash/_getNative.js");
-
-/* Built-in method references that are verified to be native. */
-var nativeCreate = getNative(Object, 'create');
-
-module.exports = nativeCreate;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_objectToString.js":
-/*!************************************************!*\
- !*** ./node_modules/lodash/_objectToString.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
-function objectToString(value) {
- return nativeObjectToString.call(value);
-}
-
-module.exports = objectToString;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_root.js":
-/*!**************************************!*\
- !*** ./node_modules/lodash/_root.js ***!
- \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var freeGlobal = __webpack_require__(/*! ./_freeGlobal */ "./node_modules/lodash/_freeGlobal.js");
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-module.exports = root;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_stringToPath.js":
-/*!**********************************************!*\
- !*** ./node_modules/lodash/_stringToPath.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var memoizeCapped = __webpack_require__(/*! ./_memoizeCapped */ "./node_modules/lodash/_memoizeCapped.js");
-
-/** Used to match property names within property paths. */
-var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = memoizeCapped(function(string) {
- var result = [];
- if (string.charCodeAt(0) === 46 /* . */) {
- result.push('');
- }
- string.replace(rePropName, function(match, number, quote, subString) {
- result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
- });
- return result;
-});
-
-module.exports = stringToPath;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_toKey.js":
-/*!***************************************!*\
- !*** ./node_modules/lodash/_toKey.js ***!
- \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var isSymbol = __webpack_require__(/*! ./isSymbol */ "./node_modules/lodash/isSymbol.js");
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
- if (typeof value == 'string' || isSymbol(value)) {
- return value;
- }
- var result = (value + '');
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = toKey;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/_toSource.js":
-/*!******************************************!*\
- !*** ./node_modules/lodash/_toSource.js ***!
- \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
- if (func != null) {
- try {
- return funcToString.call(func);
- } catch (e) {}
- try {
- return (func + '');
- } catch (e) {}
- }
- return '';
-}
-
-module.exports = toSource;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/eq.js":
-/*!***********************************!*\
- !*** ./node_modules/lodash/eq.js ***!
- \***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
- return value === other || (value !== value && other !== other);
-}
-
-module.exports = eq;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/get.js":
-/*!************************************!*\
- !*** ./node_modules/lodash/get.js ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGet = __webpack_require__(/*! ./_baseGet */ "./node_modules/lodash/_baseGet.js");
-
-/**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.get(object, 'a[0].b.c');
- * // => 3
- *
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
- *
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
- */
-function get(object, path, defaultValue) {
- var result = object == null ? undefined : baseGet(object, path);
- return result === undefined ? defaultValue : result;
-}
-
-module.exports = get;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isArray.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/isArray.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-module.exports = isArray;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isFunction.js":
-/*!*******************************************!*\
- !*** ./node_modules/lodash/isFunction.js ***!
- \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
- isObject = __webpack_require__(/*! ./isObject */ "./node_modules/lodash/isObject.js");
-
-/** `Object#toString` result references. */
-var asyncTag = '[object AsyncFunction]',
- funcTag = '[object Function]',
- genTag = '[object GeneratorFunction]',
- proxyTag = '[object Proxy]';
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
- if (!isObject(value)) {
- return false;
- }
- // The use of `Object#toString` avoids issues with the `typeof` operator
- // in Safari 9 which returns 'object' for typed arrays and other constructors.
- var tag = baseGetTag(value);
- return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
-}
-
-module.exports = isFunction;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isObject.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/isObject.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
- var type = typeof value;
- return value != null && (type == 'object' || type == 'function');
-}
-
-module.exports = isObject;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isObjectLike.js":
-/*!*********************************************!*\
- !*** ./node_modules/lodash/isObjectLike.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
- return value != null && typeof value == 'object';
-}
-
-module.exports = isObjectLike;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/isSymbol.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/isSymbol.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseGetTag = __webpack_require__(/*! ./_baseGetTag */ "./node_modules/lodash/_baseGetTag.js"),
- isObjectLike = __webpack_require__(/*! ./isObjectLike */ "./node_modules/lodash/isObjectLike.js");
-
-/** `Object#toString` result references. */
-var symbolTag = '[object Symbol]';
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
- return typeof value == 'symbol' ||
- (isObjectLike(value) && baseGetTag(value) == symbolTag);
-}
-
-module.exports = isSymbol;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/memoize.js":
-/*!****************************************!*\
- !*** ./node_modules/lodash/memoize.js ***!
- \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var MapCache = __webpack_require__(/*! ./_MapCache */ "./node_modules/lodash/_MapCache.js");
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
- *
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `clear`, `delete`, `get`, `has`, and `set`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
- *
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
- *
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
- *
- * values(other);
- * // => [3, 4]
- *
- * object.a = 2;
- * values(object);
- * // => [1, 2]
- *
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
- *
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
- */
-function memoize(func, resolver) {
- if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
- throw new TypeError(FUNC_ERROR_TEXT);
- }
- var memoized = function() {
- var args = arguments,
- key = resolver ? resolver.apply(this, args) : args[0],
- cache = memoized.cache;
-
- if (cache.has(key)) {
- return cache.get(key);
- }
- var result = func.apply(this, args);
- memoized.cache = cache.set(key, result) || cache;
- return result;
- };
- memoized.cache = new (memoize.Cache || MapCache);
- return memoized;
-}
-
-// Expose `MapCache`.
-memoize.Cache = MapCache;
-
-module.exports = memoize;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/set.js":
-/*!************************************!*\
- !*** ./node_modules/lodash/set.js ***!
- \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseSet = __webpack_require__(/*! ./_baseSet */ "./node_modules/lodash/_baseSet.js");
-
-/**
- * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
- * it's created. Arrays are created for missing index properties while objects
- * are created for all other missing properties. Use `_.setWith` to customize
- * `path` creation.
- *
- * **Note:** This method mutates `object`.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.set(object, 'a[0].b.c', 4);
- * console.log(object.a[0].b.c);
- * // => 4
- *
- * _.set(object, ['x', '0', 'y', 'z'], 5);
- * console.log(object.x[0].y.z);
- * // => 5
- */
-function set(object, path, value) {
- return object == null ? object : baseSet(object, path, value);
-}
-
-module.exports = set;
-
-
-/***/ }),
-
-/***/ "./node_modules/lodash/toString.js":
-/*!*****************************************!*\
- !*** ./node_modules/lodash/toString.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var baseToString = __webpack_require__(/*! ./_baseToString */ "./node_modules/lodash/_baseToString.js");
-
-/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
-function toString(value) {
- return value == null ? '' : baseToString(value);
-}
-
-module.exports = toString;
-
-
-/***/ }),
-
-/***/ "./node_modules/preact/dist/preact.mjs":
-/*!*********************************************!*\
- !*** ./node_modules/preact/dist/preact.mjs ***!
- \*********************************************/
-/*! exports provided: default, h, createElement, cloneElement, createRef, Component, render, rerender, options */
-/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return h; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneElement", function() { return cloneElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rerender", function() { return rerender; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "options", function() { return options; });
-var VNode = function VNode() {};
-
-var options = {};
-
-var stack = [];
-
-var EMPTY_CHILDREN = [];
-
-function h(nodeName, attributes) {
- var children = EMPTY_CHILDREN,
- lastSimple,
- child,
- simple,
- i;
- for (i = arguments.length; i-- > 2;) {
- stack.push(arguments[i]);
- }
- if (attributes && attributes.children != null) {
- if (!stack.length) stack.push(attributes.children);
- delete attributes.children;
- }
- while (stack.length) {
- if ((child = stack.pop()) && child.pop !== undefined) {
- for (i = child.length; i--;) {
- stack.push(child[i]);
- }
- } else {
- if (typeof child === 'boolean') child = null;
-
- if (simple = typeof nodeName !== 'function') {
- if (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;
- }
-
- if (simple && lastSimple) {
- children[children.length - 1] += child;
- } else if (children === EMPTY_CHILDREN) {
- children = [child];
- } else {
- children.push(child);
- }
-
- lastSimple = simple;
- }
- }
-
- var p = new VNode();
- p.nodeName = nodeName;
- p.children = children;
- p.attributes = attributes == null ? undefined : attributes;
- p.key = attributes == null ? undefined : attributes.key;
-
- if (options.vnode !== undefined) options.vnode(p);
-
- return p;
-}
-
-function extend(obj, props) {
- for (var i in props) {
- obj[i] = props[i];
- }return obj;
-}
-
-function applyRef(ref, value) {
- if (ref != null) {
- if (typeof ref == 'function') ref(value);else ref.current = value;
- }
-}
-
-var defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
-
-function cloneElement(vnode, props) {
- return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
-}
-
-var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
-
-var items = [];
-
-function enqueueRender(component) {
- if (!component._dirty && (component._dirty = true) && items.push(component) == 1) {
- (options.debounceRendering || defer)(rerender);
- }
-}
-
-function rerender() {
- var p;
- while (p = items.pop()) {
- if (p._dirty) renderComponent(p);
- }
-}
-
-function isSameNodeType(node, vnode, hydrating) {
- if (typeof vnode === 'string' || typeof vnode === 'number') {
- return node.splitText !== undefined;
- }
- if (typeof vnode.nodeName === 'string') {
- return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
- }
- return hydrating || node._componentConstructor === vnode.nodeName;
-}
-
-function isNamedNode(node, nodeName) {
- return node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
-}
-
-function getNodeProps(vnode) {
- var props = extend({}, vnode.attributes);
- props.children = vnode.children;
-
- var defaultProps = vnode.nodeName.defaultProps;
- if (defaultProps !== undefined) {
- for (var i in defaultProps) {
- if (props[i] === undefined) {
- props[i] = defaultProps[i];
- }
- }
- }
-
- return props;
-}
-
-function createNode(nodeName, isSvg) {
- var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
- node.normalizedNodeName = nodeName;
- return node;
-}
-
-function removeNode(node) {
- var parentNode = node.parentNode;
- if (parentNode) parentNode.removeChild(node);
-}
-
-function setAccessor(node, name, old, value, isSvg) {
- if (name === 'className') name = 'class';
-
- if (name === 'key') {} else if (name === 'ref') {
- applyRef(old, null);
- applyRef(value, node);
- } else if (name === 'class' && !isSvg) {
- node.className = value || '';
- } else if (name === 'style') {
- if (!value || typeof value === 'string' || typeof old === 'string') {
- node.style.cssText = value || '';
- }
- if (value && typeof value === 'object') {
- if (typeof old !== 'string') {
- for (var i in old) {
- if (!(i in value)) node.style[i] = '';
- }
- }
- for (var i in value) {
- node.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];
- }
- }
- } else if (name === 'dangerouslySetInnerHTML') {
- if (value) node.innerHTML = value.__html || '';
- } else if (name[0] == 'o' && name[1] == 'n') {
- var useCapture = name !== (name = name.replace(/Capture$/, ''));
- name = name.toLowerCase().substring(2);
- if (value) {
- if (!old) node.addEventListener(name, eventProxy, useCapture);
- } else {
- node.removeEventListener(name, eventProxy, useCapture);
- }
- (node._listeners || (node._listeners = {}))[name] = value;
- } else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {
- try {
- node[name] = value == null ? '' : value;
- } catch (e) {}
- if ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);
- } else {
- var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
-
- if (value == null || value === false) {
- if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);
- } else if (typeof value !== 'function') {
- if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);
- }
- }
-}
-
-function eventProxy(e) {
- return this._listeners[e.type](options.event && options.event(e) || e);
-}
-
-var mounts = [];
-
-var diffLevel = 0;
-
-var isSvgMode = false;
-
-var hydrating = false;
-
-function flushMounts() {
- var c;
- while (c = mounts.shift()) {
- if (options.afterMount) options.afterMount(c);
- if (c.componentDidMount) c.componentDidMount();
- }
-}
-
-function diff(dom, vnode, context, mountAll, parent, componentRoot) {
- if (!diffLevel++) {
- isSvgMode = parent != null && parent.ownerSVGElement !== undefined;
-
- hydrating = dom != null && !('__preactattr_' in dom);
- }
-
- var ret = idiff(dom, vnode, context, mountAll, componentRoot);
-
- if (parent && ret.parentNode !== parent) parent.appendChild(ret);
-
- if (! --diffLevel) {
- hydrating = false;
-
- if (!componentRoot) flushMounts();
- }
-
- return ret;
-}
-
-function idiff(dom, vnode, context, mountAll, componentRoot) {
- var out = dom,
- prevSvgMode = isSvgMode;
-
- if (vnode == null || typeof vnode === 'boolean') vnode = '';
-
- if (typeof vnode === 'string' || typeof vnode === 'number') {
- if (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {
- if (dom.nodeValue != vnode) {
- dom.nodeValue = vnode;
- }
- } else {
- out = document.createTextNode(vnode);
- if (dom) {
- if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
- recollectNodeTree(dom, true);
- }
- }
-
- out['__preactattr_'] = true;
-
- return out;
- }
-
- var vnodeName = vnode.nodeName;
- if (typeof vnodeName === 'function') {
- return buildComponentFromVNode(dom, vnode, context, mountAll);
- }
-
- isSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;
-
- vnodeName = String(vnodeName);
- if (!dom || !isNamedNode(dom, vnodeName)) {
- out = createNode(vnodeName, isSvgMode);
-
- if (dom) {
- while (dom.firstChild) {
- out.appendChild(dom.firstChild);
- }
- if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
-
- recollectNodeTree(dom, true);
- }
- }
-
- var fc = out.firstChild,
- props = out['__preactattr_'],
- vchildren = vnode.children;
-
- if (props == null) {
- props = out['__preactattr_'] = {};
- for (var a = out.attributes, i = a.length; i--;) {
- props[a[i].name] = a[i].value;
- }
- }
-
- if (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {
- if (fc.nodeValue != vchildren[0]) {
- fc.nodeValue = vchildren[0];
- }
- } else if (vchildren && vchildren.length || fc != null) {
- innerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);
- }
-
- diffAttributes(out, vnode.attributes, props);
-
- isSvgMode = prevSvgMode;
-
- return out;
-}
-
-function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
- var originalChildren = dom.childNodes,
- children = [],
- keyed = {},
- keyedLen = 0,
- min = 0,
- len = originalChildren.length,
- childrenLen = 0,
- vlen = vchildren ? vchildren.length : 0,
- j,
- c,
- f,
- vchild,
- child;
-
- if (len !== 0) {
- for (var i = 0; i < len; i++) {
- var _child = originalChildren[i],
- props = _child['__preactattr_'],
- key = vlen && props ? _child._component ? _child._component.__key : props.key : null;
- if (key != null) {
- keyedLen++;
- keyed[key] = _child;
- } else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {
- children[childrenLen++] = _child;
- }
- }
- }
-
- if (vlen !== 0) {
- for (var i = 0; i < vlen; i++) {
- vchild = vchildren[i];
- child = null;
-
- var key = vchild.key;
- if (key != null) {
- if (keyedLen && keyed[key] !== undefined) {
- child = keyed[key];
- keyed[key] = undefined;
- keyedLen--;
- }
- } else if (min < childrenLen) {
- for (j = min; j < childrenLen; j++) {
- if (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {
- child = c;
- children[j] = undefined;
- if (j === childrenLen - 1) childrenLen--;
- if (j === min) min++;
- break;
- }
- }
- }
-
- child = idiff(child, vchild, context, mountAll);
-
- f = originalChildren[i];
- if (child && child !== dom && child !== f) {
- if (f == null) {
- dom.appendChild(child);
- } else if (child === f.nextSibling) {
- removeNode(f);
- } else {
- dom.insertBefore(child, f);
- }
- }
- }
- }
-
- if (keyedLen) {
- for (var i in keyed) {
- if (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);
- }
- }
-
- while (min <= childrenLen) {
- if ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);
- }
-}
-
-function recollectNodeTree(node, unmountOnly) {
- var component = node._component;
- if (component) {
- unmountComponent(component);
- } else {
- if (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);
-
- if (unmountOnly === false || node['__preactattr_'] == null) {
- removeNode(node);
- }
-
- removeChildren(node);
- }
-}
-
-function removeChildren(node) {
- node = node.lastChild;
- while (node) {
- var next = node.previousSibling;
- recollectNodeTree(node, true);
- node = next;
- }
-}
-
-function diffAttributes(dom, attrs, old) {
- var name;
-
- for (name in old) {
- if (!(attrs && attrs[name] != null) && old[name] != null) {
- setAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);
- }
- }
-
- for (name in attrs) {
- if (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {
- setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
- }
- }
-}
-
-var recyclerComponents = [];
-
-function createComponent(Ctor, props, context) {
- var inst,
- i = recyclerComponents.length;
-
- if (Ctor.prototype && Ctor.prototype.render) {
- inst = new Ctor(props, context);
- Component.call(inst, props, context);
- } else {
- inst = new Component(props, context);
- inst.constructor = Ctor;
- inst.render = doRender;
- }
-
- while (i--) {
- if (recyclerComponents[i].constructor === Ctor) {
- inst.nextBase = recyclerComponents[i].nextBase;
- recyclerComponents.splice(i, 1);
- return inst;
- }
- }
-
- return inst;
-}
-
-function doRender(props, state, context) {
- return this.constructor(props, context);
-}
-
-function setComponentProps(component, props, renderMode, context, mountAll) {
- if (component._disable) return;
- component._disable = true;
-
- component.__ref = props.ref;
- component.__key = props.key;
- delete props.ref;
- delete props.key;
-
- if (typeof component.constructor.getDerivedStateFromProps === 'undefined') {
- if (!component.base || mountAll) {
- if (component.componentWillMount) component.componentWillMount();
- } else if (component.componentWillReceiveProps) {
- component.componentWillReceiveProps(props, context);
- }
- }
-
- if (context && context !== component.context) {
- if (!component.prevContext) component.prevContext = component.context;
- component.context = context;
- }
-
- if (!component.prevProps) component.prevProps = component.props;
- component.props = props;
-
- component._disable = false;
-
- if (renderMode !== 0) {
- if (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {
- renderComponent(component, 1, mountAll);
- } else {
- enqueueRender(component);
- }
- }
-
- applyRef(component.__ref, component);
-}
-
-function renderComponent(component, renderMode, mountAll, isChild) {
- if (component._disable) return;
-
- var props = component.props,
- state = component.state,
- context = component.context,
- previousProps = component.prevProps || props,
- previousState = component.prevState || state,
- previousContext = component.prevContext || context,
- isUpdate = component.base,
- nextBase = component.nextBase,
- initialBase = isUpdate || nextBase,
- initialChildComponent = component._component,
- skip = false,
- snapshot = previousContext,
- rendered,
- inst,
- cbase;
-
- if (component.constructor.getDerivedStateFromProps) {
- state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
- component.state = state;
- }
-
- if (isUpdate) {
- component.props = previousProps;
- component.state = previousState;
- component.context = previousContext;
- if (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {
- skip = true;
- } else if (component.componentWillUpdate) {
- component.componentWillUpdate(props, state, context);
- }
- component.props = props;
- component.state = state;
- component.context = context;
- }
-
- component.prevProps = component.prevState = component.prevContext = component.nextBase = null;
- component._dirty = false;
-
- if (!skip) {
- rendered = component.render(props, state, context);
-
- if (component.getChildContext) {
- context = extend(extend({}, context), component.getChildContext());
- }
-
- if (isUpdate && component.getSnapshotBeforeUpdate) {
- snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
- }
-
- var childComponent = rendered && rendered.nodeName,
- toUnmount,
- base;
-
- if (typeof childComponent === 'function') {
-
- var childProps = getNodeProps(rendered);
- inst = initialChildComponent;
-
- if (inst && inst.constructor === childComponent && childProps.key == inst.__key) {
- setComponentProps(inst, childProps, 1, context, false);
- } else {
- toUnmount = inst;
-
- component._component = inst = createComponent(childComponent, childProps, context);
- inst.nextBase = inst.nextBase || nextBase;
- inst._parentComponent = component;
- setComponentProps(inst, childProps, 0, context, false);
- renderComponent(inst, 1, mountAll, true);
- }
-
- base = inst.base;
- } else {
- cbase = initialBase;
-
- toUnmount = initialChildComponent;
- if (toUnmount) {
- cbase = component._component = null;
- }
-
- if (initialBase || renderMode === 1) {
- if (cbase) cbase._component = null;
- base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);
- }
- }
-
- if (initialBase && base !== initialBase && inst !== initialChildComponent) {
- var baseParent = initialBase.parentNode;
- if (baseParent && base !== baseParent) {
- baseParent.replaceChild(base, initialBase);
-
- if (!toUnmount) {
- initialBase._component = null;
- recollectNodeTree(initialBase, false);
- }
- }
- }
-
- if (toUnmount) {
- unmountComponent(toUnmount);
- }
-
- component.base = base;
- if (base && !isChild) {
- var componentRef = component,
- t = component;
- while (t = t._parentComponent) {
- (componentRef = t).base = base;
- }
- base._component = componentRef;
- base._componentConstructor = componentRef.constructor;
- }
- }
-
- if (!isUpdate || mountAll) {
- mounts.push(component);
- } else if (!skip) {
-
- if (component.componentDidUpdate) {
- component.componentDidUpdate(previousProps, previousState, snapshot);
- }
- if (options.afterUpdate) options.afterUpdate(component);
- }
-
- while (component._renderCallbacks.length) {
- component._renderCallbacks.pop().call(component);
- }if (!diffLevel && !isChild) flushMounts();
-}
-
-function buildComponentFromVNode(dom, vnode, context, mountAll) {
- var c = dom && dom._component,
- originalComponent = c,
- oldDom = dom,
- isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
- isOwner = isDirectOwner,
- props = getNodeProps(vnode);
- while (c && !isOwner && (c = c._parentComponent)) {
- isOwner = c.constructor === vnode.nodeName;
- }
-
- if (c && isOwner && (!mountAll || c._component)) {
- setComponentProps(c, props, 3, context, mountAll);
- dom = c.base;
- } else {
- if (originalComponent && !isDirectOwner) {
- unmountComponent(originalComponent);
- dom = oldDom = null;
- }
-
- c = createComponent(vnode.nodeName, props, context);
- if (dom && !c.nextBase) {
- c.nextBase = dom;
-
- oldDom = null;
- }
- setComponentProps(c, props, 1, context, mountAll);
- dom = c.base;
-
- if (oldDom && dom !== oldDom) {
- oldDom._component = null;
- recollectNodeTree(oldDom, false);
- }
- }
-
- return dom;
-}
-
-function unmountComponent(component) {
- if (options.beforeUnmount) options.beforeUnmount(component);
-
- var base = component.base;
-
- component._disable = true;
-
- if (component.componentWillUnmount) component.componentWillUnmount();
-
- component.base = null;
-
- var inner = component._component;
- if (inner) {
- unmountComponent(inner);
- } else if (base) {
- if (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);
-
- component.nextBase = base;
-
- removeNode(base);
- recyclerComponents.push(component);
-
- removeChildren(base);
- }
-
- applyRef(component.__ref, null);
-}
-
-function Component(props, context) {
- this._dirty = true;
-
- this.context = context;
-
- this.props = props;
-
- this.state = this.state || {};
-
- this._renderCallbacks = [];
-}
-
-extend(Component.prototype, {
- setState: function setState(state, callback) {
- if (!this.prevState) this.prevState = this.state;
- this.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);
- if (callback) this._renderCallbacks.push(callback);
- enqueueRender(this);
- },
- forceUpdate: function forceUpdate(callback) {
- if (callback) this._renderCallbacks.push(callback);
- renderComponent(this, 2);
- },
- render: function render() {}
-});
-
-function render(vnode, parent, merge) {
- return diff(merge, vnode, {}, false, parent, false);
-}
-
-function createRef() {
- return {};
-}
-
-var preact = {
- h: h,
- createElement: h,
- cloneElement: cloneElement,
- createRef: createRef,
- Component: Component,
- render: render,
- rerender: rerender,
- options: options
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (preact);
-
-//# sourceMappingURL=preact.mjs.map
-
-
-/***/ }),
-
-/***/ "./node_modules/webpack/buildin/global.js":
-/*!***********************************!*\
- !*** (webpack)/buildin/global.js ***!
- \***********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-var g;
-
-// This works in non-strict mode
-g = (function() {
- return this;
-})();
-
-try {
- // This works if eval is allowed (see CSP)
- g = g || new Function("return this")();
-} catch (e) {
- // This works if the window reference is available
- if (typeof window === "object") g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
-
-
-/***/ }),
-
-/***/ "./src/lib/floweditor.js":
-/*!*******************************!*\
- !*** ./src/lib/floweditor.js ***!
- \*******************************/
-/*! exports provided: FlowEditor */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlowEditor", function() { return FlowEditor; });
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/lib/helpers.js");
- // todo:
-// improve relability of moving elements around
-// global config
-
-const color = '#000000';
-
-const saveChart = renderedNodes => {
- // find initial nodes (triggers);
- const triggers = renderedNodes.filter(node => node.inputs.length === 0); // for each initial node walk the tree and produce one 'rule'
-
- const result = triggers.map(trigger => {
- const walkRule = rule => {
- return {
- t: rule.type,
- v: rule.config.map(config => config.value),
- o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),
- c: [rule.position.x, rule.position.y]
- };
- };
-
- return walkRule(trigger);
- });
- return result;
-};
-
-const loadChart = (config, chart, from) => {
- config.map(config => {
- let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);
-
- if (!node) {
- const configNode = chart.nodes.find(n => config.t == n.type);
- node = new NodeUI(chart.canvas, configNode, {
- x: config.c[0],
- y: config.c[1]
- });
- node.config.map((cfg, i) => {
- cfg.value = config.v[i];
- });
- node.render();
- chart.renderedNodes.push(node);
- }
-
- if (from) {
- const fromDimension = from.getBoundingClientRect();
- const toDimension = node.inputs[0].getBoundingClientRect();
- const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);
- chart.canvas.appendChild(lineSvg.element);
- const x1 = fromDimension.x + fromDimension.width;
- const y1 = fromDimension.y + fromDimension.height / 2;
- const x2 = toDimension.x;
- const y2 = toDimension.y + toDimension.height / 2;
- lineSvg.setPath(x1, y1, x2, y2);
- const connection = {
- output: from,
- input: node.inputs[0],
- svg: lineSvg,
- start: {
- x: x1,
- y: y1
- },
- end: {
- x: x2,
- y: y2
- }
- };
- node.inputs[0].lines.push(connection);
- from.lines.push(connection);
- }
-
- config.o.map((output, outputI) => {
- loadChart(output, chart, node.outputs[outputI]);
- });
- });
-};
-
-const exportChart = renderedNodes => {
- // find initial nodes (triggers);
- const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');
- let result = ''; // for each initial node walk the tree and produce one 'rule'
-
- triggers.map(trigger => {
- const walkRule = (r, i) => {
- const rules = r.toDsl ? r.toDsl() : [];
- let ruleset = '';
- let padding = r.indent ? ' ' : '';
- r.outputs.map((out, outI) => {
- let rule = rules[outI] || r.type;
- let subrule = '';
-
- if (out.lines) {
- out.lines.map(line => {
- subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);
- });
- subrule = subrule.split('\n').map(line => padding + line).filter(line => line.trim() !== '').join('\n') + '\n';
- }
-
- if (rule.includes('%%output%%')) {
- rule = rule.replace('%%output%%', subrule);
- } else {
- rule += subrule;
- }
-
- ruleset += rule;
- });
- return ruleset;
- };
-
- const rule = walkRule(trigger, 0);
- result += rule + "\n\n";
- });
- return result;
-}; // drag and drop helpers
-
-
-const dNd = {
- enableNativeDrag: (nodeElement, data) => {
- nodeElement.draggable = true;
-
- nodeElement.ondragstart = ev => {
- Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getKeys"])(data).map(key => {
- ev.dataTransfer.setData(key, data[key]);
- });
- };
- },
- enableNativeDrop: (nodeElement, fn) => {
- nodeElement.ondragover = ev => {
- ev.preventDefault();
- };
-
- nodeElement.ondrop = fn;
- } // svg helpers
-
-};
-
-class svgArrow {
- constructor(width, height, fill, color) {
- this.element = document.createElementNS("http://www.w3.org/2000/svg", "svg");
- this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');
- this.element.setAttribute('width', width);
- this.element.setAttribute('height', height);
- this.element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
- this.line = document.createElementNS("http://www.w3.org/2000/svg", "path");
- this.line.setAttributeNS(null, "fill", fill);
- this.line.setAttributeNS(null, "stroke", color);
- this.element.appendChild(this.line);
- }
-
- setPath(x1, y1, x2, y2, tension = 0.5) {
- const delta = (x2 - x1) * tension;
- const hx1 = x1 + delta;
- const hy1 = y1;
- const hx2 = x2 - delta;
- const hy2 = y2;
- const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;
- this.line.setAttributeNS(null, "d", path);
- }
-
-} // node configuration (each node in the left menu is represented by an instance of this object)
-
-
-class Node {
- constructor(conf) {
- this.type = conf.type;
- this.group = conf.group;
- this.config = conf.config.map(config => Object.assign({}, config));
- this.inputs = conf.inputs.map(input => {});
- this.outputs = conf.outputs.map(output => {});
- this.toDsl = conf.toDsl;
- this.toString = conf.toString;
- this.toHtml = conf.toHtml;
- this.indent = conf.indent;
- }
-
-} // node UI (each node in your flow diagram is represented by an instance of this object)
-
-
-class NodeUI extends Node {
- constructor(canvas, conf, position) {
- super(conf);
- this.canvas = canvas;
- this.position = position;
- this.lines = [];
- this.linesEnd = [];
- this.toDsl = conf.toDsl;
- this.toString = conf.toString;
- this.toHtml = conf.toHtml;
- this.indent = conf.indent;
- }
-
- updateInputsOutputs(inputs, outputs) {
- inputs.map(input => {
- const rect = input.getBoundingClientRect();
- input.lines.map(line => {
- line.end.x = rect.x;
- line.end.y = rect.y + rect.height / 2;
- line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);
- });
- });
- outputs.map(output => {
- const rect = output.getBoundingClientRect();
- output.lines.map(line => {
- line.start.x = rect.x + rect.width;
- line.start.y = rect.y + rect.height / 2;
- line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);
- });
- });
- }
-
- handleMoveEvent(ev) {
- if (!this.canvas.canEdit) return;
- const shiftX = ev.clientX - this.element.getBoundingClientRect().left;
- const shiftY = ev.clientY - this.element.getBoundingClientRect().top;
-
- const onMouseMove = ev => {
- const newy = ev.y - shiftY;
- const newx = ev.x - shiftX;
- this.position.y = newy - newy % this.canvas.gridSize;
- this.position.x = newx - newx % this.canvas.gridSize;
- this.element.style.top = `${this.position.y}px`;
- this.element.style.left = `${this.position.x}px`;
- this.updateInputsOutputs(this.inputs, this.outputs);
- };
-
- const onMouseUp = ev => {
- document.removeEventListener('mousemove', onMouseMove);
- document.removeEventListener('mouseup', onMouseUp);
- };
-
- document.addEventListener('mousemove', onMouseMove);
- document.addEventListener('mouseup', onMouseUp);
- }
-
- handleDblClickEvent(ev) {
- if (!this.canvas.canEdit) return;
- if (this.config.length) showConfigBox(this.type, this.config, () => {
- if (this.toHtml) {
- this.text.innerHTML = this.toHtml();
- } else {
- this.text.textContent = this.toString();
- }
- });
- }
-
- handleRightClickEvent(ev) {
- if (!this.canvas.canEdit) return;
- this.inputs.map(input => {
- input.lines.map(line => {
- line.output.lines = [];
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- input.lines = [];
- });
- this.outputs.map(output => {
- output.lines.map(line => {
- const index = line.input.lines.indexOf(line);
- line.input.lines.splice(index, 1);
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- output.lines = [];
- });
- this.element.parentNode.removeChild(this.element);
- if (this.destroy) this.destroy();
- ev.preventDefault();
- ev.stopPropagation();
- return false;
- }
-
- render() {
- this.element = document.createElement('div');
- this.element.nodeObject = this;
- this.element.className = `node node-chart group-${this.group}`;
- this.text = document.createElement('span');
-
- if (this.toHtml) {
- this.text.innerHTML = this.toHtml();
- } else {
- this.text.textContent = this.toString();
- }
-
- this.element.appendChild(this.text);
- this.element.style.top = `${this.position.y}px`;
- this.element.style.left = `${this.position.x}px`;
- const inputs = document.createElement('div');
- inputs.className = 'node-inputs';
- this.element.appendChild(inputs);
- this.inputs.map((val, index) => {
- const input = this.inputs[index] = document.createElement('div');
- input.className = 'node-input';
- input.nodeObject = this;
- input.lines = [];
-
- input.onmousedown = ev => {
- ev.preventDefault();
- ev.stopPropagation();
- };
-
- inputs.appendChild(input);
- });
- const outputs = document.createElement('div');
- outputs.className = 'node-outputs';
- this.element.appendChild(outputs);
- this.outputs.map((val, index) => {
- const output = this.outputs[index] = document.createElement('div');
- output.className = 'node-output';
- output.nodeObject = this;
- output.lines = [];
-
- output.oncontextmenu = ev => {
- output.lines.map(line => {
- line.svg.element.parentNode.removeChild(line.svg.element);
- });
- output.lines = [];
- ev.stopPropagation();
- ev.preventDefault();
- return false;
- };
-
- output.onmousedown = ev => {
- ev.stopPropagation();
- if (output.lines.length) return;
- const rects = output.getBoundingClientRect();
- const x1 = rects.x + rects.width;
- const y1 = rects.y + rects.height / 2;
- const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);
- this.canvas.appendChild(lineSvg.element);
-
- const onMouseMove = ev => {
- lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);
- };
-
- const onMouseUp = ev => {
- const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);
- const input = elemBelow ? elemBelow.closest('.node-input') : null;
-
- if (!input) {
- lineSvg.element.remove();
- } else {
- const inputRect = input.getBoundingClientRect();
- const x2 = inputRect.x;
- const y2 = inputRect.y + inputRect.height / 2;
- lineSvg.setPath(x1, y1, x2, y2);
- const connection = {
- output,
- input,
- svg: lineSvg,
- start: {
- x: x1,
- y: y1
- },
- end: {
- x: x2,
- y: y2
- }
- };
- output.lines.push(connection);
- input.lines.push(connection);
- }
-
- document.removeEventListener('mousemove', onMouseMove);
- document.removeEventListener('mouseup', onMouseUp);
- };
-
- document.addEventListener('mousemove', onMouseMove);
- document.addEventListener('mouseup', onMouseUp);
- };
-
- outputs.appendChild(output);
- });
- this.element.ondblclick = this.handleDblClickEvent.bind(this);
- this.element.onmousedown = this.handleMoveEvent.bind(this);
- this.element.oncontextmenu = this.handleRightClickEvent.bind(this);
- this.canvas.appendChild(this.element);
- }
-
-}
-
-const getCfgUI = cfg => {
- const template = document.createElement('template');
-
- const getSelectOptions = val => {
- const selected = val == cfg.value ? 'selected' : '';
- return `${val} `;
- };
-
- switch (cfg.type) {
- case 'text':
- template.innerHTML = `${cfg.name}
`;
- break;
-
- case 'number':
- template.innerHTML = `${cfg.name}
`;
- break;
-
- case 'select':
- template.innerHTML = `${cfg.name} ${cfg.values.map(val => getSelectOptions(val))}
`;
- break;
-
- case 'textselect':
- template.innerHTML = ``;
- }
-
- return template.content.cloneNode(true);
-};
-
-const showConfigBox = (type, config, onclose) => {
- const template = document.createElement('template');
- template.innerHTML = `
-
- `;
- document.body.appendChild(template.content.cloneNode(true));
- const configBox = document.body.querySelectorAll('.configbox')[0];
- const body = document.body.querySelectorAll('.configbox-body')[0];
- const okButton = document.getElementById('ob');
- const cancelButton = document.getElementById('cb');
-
- cancelButton.onclick = () => {
- configBox.remove();
- };
-
- okButton.onclick = () => {
- // set configuration to node
- config.map(cfg => {
- cfg.value = document.forms['configform'].elements[cfg.name].value;
- });
- configBox.remove();
- onclose();
- };
-
- config.map(cfg => {
- const cfgUI = getCfgUI(cfg);
- body.appendChild(cfgUI);
- });
-};
-
-class FlowEditor {
- constructor(element, nodes, config) {
- this.nodes = [];
- this.renderedNodes = [];
- this.onSave = config.onSave;
- this.canEdit = !config.readOnly;
- this.debug = config.debug != null ? config.debug : true;
- this.gridSize = config.gridSize || 1;
- this.element = element;
- nodes.map(nodeConfig => {
- const node = new Node(nodeConfig);
- this.nodes.push(node);
- });
- this.render();
- if (this.canEdit) dNd.enableNativeDrop(this.canvas, ev => {
- const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));
- let node = new NodeUI(this.canvas, configNode, {
- x: ev.x,
- y: ev.y
- });
- node.render();
-
- node.destroy = () => {
- this.renderedNodes.splice(this.renderedNodes.indexOf(node), 1);
- node = null;
- };
-
- this.renderedNodes.push(node);
- });
- }
-
- loadConfig(config) {
- loadChart(config, this);
- }
-
- saveConfig() {
- return saveChart(this.renderedNodes);
- }
-
- renderContainers() {
- if (this.canEdit) {
- this.sidebar = document.createElement('div');
- this.sidebar.className = 'sidebar';
- this.element.appendChild(this.sidebar);
- }
-
- this.canvas = document.createElement('div');
- this.canvas.className = 'canvas';
- this.canvas.canEdit = this.canEdit;
- this.canvas.gridSize = this.gridSize;
- this.element.appendChild(this.canvas);
-
- if (this.canEdit && this.debug) {
- this.debug = document.createElement('div');
- this.debug.className = 'debug';
- const text = document.createElement('div');
- this.debug.appendChild(text);
- const saveBtn = document.createElement('button');
- saveBtn.textContent = 'SAVE';
-
- saveBtn.onclick = () => {
- const config = JSON.stringify(saveChart(this.renderedNodes));
- const rules = exportChart(this.renderedNodes);
- this.onSave(config, rules);
- };
-
- const loadBtn = document.createElement('button');
- loadBtn.textContent = 'LOAD';
-
- loadBtn.onclick = () => {
- const input = prompt('enter config');
- loadChart(JSON.parse(input), this);
- };
-
- const exportBtn = document.createElement('button');
- exportBtn.textContent = 'EXPORT';
-
- exportBtn.onclick = () => {
- const exported = exportChart(this.renderedNodes);
- text.textContent = exported;
- };
-
- this.debug.appendChild(exportBtn);
- this.debug.appendChild(saveBtn);
- this.debug.appendChild(loadBtn);
- this.debug.appendChild(text);
- this.element.appendChild(this.debug);
- }
- }
-
- renderConfigNodes() {
- const groups = {};
- this.nodes.map(node => {
- if (!groups[node.group]) {
- const group = document.createElement('div');
- group.className = 'group';
- group.textContent = node.group;
- this.sidebar.appendChild(group);
- groups[node.group] = group;
- }
-
- const nodeElement = document.createElement('div');
- nodeElement.className = `node group-${node.group}`;
- nodeElement.textContent = node.type;
- groups[node.group].appendChild(nodeElement);
- dNd.enableNativeDrag(nodeElement, {
- type: node.type
- });
- });
- }
-
- render() {
- this.renderContainers();
- if (this.canEdit) this.renderConfigNodes();
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/lib/helpers.js":
-/*!****************************!*\
- !*** ./src/lib/helpers.js ***!
- \****************************/
-/*! exports provided: get, set, getKeys */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getKeys", function() { return getKeys; });
-/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/get */ "./node_modules/lodash/get.js");
-/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "get", function() { return lodash_get__WEBPACK_IMPORTED_MODULE_0___default.a; });
-/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/set */ "./node_modules/lodash/set.js");
-/* harmony import */ var lodash_set__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_set__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony reexport (default from non-harmony) */ __webpack_require__.d(__webpack_exports__, "set", function() { return lodash_set__WEBPACK_IMPORTED_MODULE_1___default.a; });
-
- // const get = (obj, path, defaultValue) => path.replace(/\[/g, '.').replace(/\]/g, '').split(".")
-// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)
-// const set = (obj, path, value) => {
-// path.replace(/\[/g, '.').replace(/\]/g, '').split('.').reduce((a, c, i, src) => {
-// if (!a[c]) a[c] = {};
-// if (i === src.length - 1) a[c] = value;
-// }, obj)
-// }
-
-const getKeys = object => {
- const keys = [];
-
- for (let key in object) {
- if (object.hasOwnProperty(key)) {
- keys.push(key);
- }
- }
-
- return keys;
-};
-
-
-
-/***/ }),
-
-/***/ "./src/plugins/dashboard/api.js":
-/*!**************************************!*\
- !*** ./src/plugins/dashboard/api.js ***!
- \**************************************/
-/*! exports provided: getVariables, loadDashboardConfig, storeDashboardConfig */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVariables", function() { return getVariables; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadDashboardConfig", function() { return loadDashboardConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "storeDashboardConfig", function() { return storeDashboardConfig; });
-const api = window.getPluginAPI();
-const getVariables = api.espeasy.getVariables;
-const loadDashboardConfig = api.espeasy.loadDashboardConfig;
-const storeDashboardConfig = api.espeasy.storeDashboardConfig;
-
-/***/ }),
-
-/***/ "./src/plugins/dashboard/dashboard.editor.js":
-/*!***************************************************!*\
- !*** ./src/plugins/dashboard/dashboard.editor.js ***!
- \***************************************************/
-/*! exports provided: DashboardEditorPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DashboardEditorPage", function() { return DashboardEditorPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/floweditor */ "./src/lib/floweditor.js");
-/* harmony import */ var _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dashboard_node_definitions */ "./src/plugins/dashboard/dashboard_node_definitions.js");
-/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./api */ "./src/plugins/dashboard/api.js");
-
-
-
-
-class DashboardEditorPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.pages = [];
- this.nodes = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"];
-
- this.saveConfig = () => {
- const config = this.pages.map(page => {
- return {
- title: page.title,
- nodes: page.chart.saveConfig()
- };
- });
- Object(_api__WEBPACK_IMPORTED_MODULE_3__["storeDashboardConfig"])(JSON.stringify(config));
- };
-
- this.addPage = ({
- title,
- nodes = []
- } = {}) => {
- if (!title) title = prompt('enter page name', 'new');
- this.pages.push({
- title,
- nodes,
- chart: this.createPage({
- title,
- nodes
- })
- });
- this.selectTab(null, this.pages.length - 1);
- };
-
- this.selectTab = (e, tabIndex) => {
- const tab = tabIndex != null ? tabIndex : e.currentTarget.dataset.tab;
- const elements = document.querySelectorAll('ul.tabs li');
- elements.forEach((element, i) => {
- if (i === parseInt(tab)) element.classList.add('active');else element.classList.remove('active');
- });
- };
- }
-
- createPage(page) {
- // add menu
- const menu = document.createElement('li');
- menu.innerText = page.title;
- menu.dataset.tab = this.pages.length;
- menu.onclick = this.selectTab;
- this.menu.appendChild(menu); // add tab
-
- const el = document.createElement('li');
- const chart = this.renderChart(el, page.nodes);
- this.tabs.appendChild(el);
- return chart;
- }
-
- renderChart(domNode, elements) {
- const chart = new _lib_floweditor__WEBPACK_IMPORTED_MODULE_1__["FlowEditor"](domNode, _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"], {
- gridSize: 10,
- debug: false
- });
- chart.loadConfig(elements);
- return chart;
- }
-
- render(props) {
- this.editors = [];
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "dash_menu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- style: "display: inline",
- ref: ref => this.menu = ref
- }), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- onClick: this.addPage
- }, "add page")))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "dash_menu_right"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- onClick: this.saveConfig
- }, "SAVE"))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", {
- class: "tabs",
- ref: ref => this.tabs = ref
- }));
- }
-
- componentDidMount() {
- Object(_api__WEBPACK_IMPORTED_MODULE_3__["getVariables"])().then(out => {
- const varNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'VARIABLE');
- const meterNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'METER');
- const imageNode = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_2__["nodes"].find(node => node.type === 'IMAGE_METER');
- Object.keys(out).forEach(v => {
- varNode.config[0].values.push(v);
- meterNode.config[0].values.push(v);
- imageNode.config[0].values.push(v);
- });
- Object(_api__WEBPACK_IMPORTED_MODULE_3__["loadDashboardConfig"])().then(configs => {
- configs.forEach(page => {
- this.addPage(page);
- });
- this.selectTab(null, 0);
- });
- });
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/plugins/dashboard/dashboard.js":
-/*!********************************************!*\
- !*** ./src/plugins/dashboard/dashboard.js ***!
- \********************************************/
-/*! exports provided: DashboardPage */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DashboardPage", function() { return DashboardPage; });
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.mjs");
-/* harmony import */ var _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dashboard_node_definitions */ "./src/plugins/dashboard/dashboard_node_definitions.js");
-/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api */ "./src/plugins/dashboard/api.js");
-
-
-
-class DashboardPage extends preact__WEBPACK_IMPORTED_MODULE_0__["Component"] {
- constructor(props) {
- super(props);
- this.shutdown = false;
- this.state = {
- pages: [],
- vals: [],
- tab: 0
- };
-
- this.selectTab = e => {
- const tab = parseInt(e.currentTarget.dataset.tab);
- this.setState({
- tab: tab
- });
- };
- }
-
- render(props) {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: "dash_menu"
- }, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", {
- ref: ref => this.menu = ref
- }, this.state.pages.map((page, i) => {
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", null, Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("a", {
- onClick: this.selectTab,
- "data-tab": i
- }, page.title));
- }))), Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", {
- class: "tabs"
- }, this.state.pages.map((page, i) => {
- const classname = `editor ${i === this.state.tab ? 'active' : ''}`;
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("li", {
- class: classname
- }, page.nodes.map(cfg => {
- const node = _dashboard_node_definitions__WEBPACK_IMPORTED_MODULE_1__["nodes"].find(n => n.type === cfg.t);
- const cssClass = `node-dash node-${node.group}`;
- const style = `top: ${cfg.c[1]}px; left: ${cfg.c[0]}px;`;
- const context = {
- config: cfg.v.map(v => ({
- value: v
- }))
- };
- return Object(preact__WEBPACK_IMPORTED_MODULE_0__["h"])("div", {
- class: cssClass,
- style: style,
- dangerouslySetInnerHTML: {
- __html: node.toHtml.bind(context)(this.state.vals)
- }
- });
- }));
- })));
- }
-
- componentDidMount() {
- Object(_api__WEBPACK_IMPORTED_MODULE_2__["loadDashboardConfig"])().then(config => {
- this.setState({
- pages: config
- });
- });
-
- const timeout = async () => {
- const variables = await Object(_api__WEBPACK_IMPORTED_MODULE_2__["getVariables"])();
- this.setState({
- vals: variables
- });
- if (!this.shutdown) setTimeout(timeout, 1000);
- };
-
- timeout();
- }
-
- componentWillUnmount() {
- this.shutdown = true;
- }
-
-}
-
-/***/ }),
-
-/***/ "./src/plugins/dashboard/dashboard_node_definitions.js":
-/*!*************************************************************!*\
- !*** ./src/plugins/dashboard/dashboard_node_definitions.js ***!
- \*************************************************************/
-/*! exports provided: nodes */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nodes", function() { return nodes; });
-const nodes = [// TRIGGERS
-{
- group: 'DEVICES',
- type: 'CLOCK',
- inputs: [],
- outputs: [],
- config: [],
- vals: [],
- indent: true,
- toHtml: () => {
- return `${new Date().toTimeString()} `;
- }
-}, {
- group: 'DEVICES',
- type: 'IMAGE',
- inputs: [],
- outputs: [],
- config: [{
- name: 'url',
- type: 'text',
- value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png'
- }, {
- name: 'width',
- type: 'number',
- value: '200'
- }],
- vals: [],
- indent: true,
- toHtml: function () {
- return ` `;
- }
-}, {
- group: 'DEVICES',
- type: 'VARIABLE',
- inputs: [],
- outputs: [],
- vals: [],
- config: [{
- name: 'device',
- type: 'select',
- values: [],
- value: 0
- }],
- toHtml: function (vals) {
- return `${this.config[0].value}: ${vals ? vals[this.config[0].value] : 0}`;
- }
-}, {
- group: 'DEVICES',
- type: 'METER',
- inputs: [],
- outputs: [],
- vals: [],
- config: [{
- name: 'device',
- type: 'select',
- values: [],
- value: 0
- }, {
- name: 'max',
- type: 'number',
- value: '255'
- }, {
- name: 'size',
- type: 'number',
- value: '255'
- }, {
- name: 'orientation',
- type: 'select',
- values: ['horizontal', 'vertical'],
- value: 'horizontal'
- }],
- toHtml: function (vals) {
- const val = vals ? vals[this.config[0].value] : 0;
- const vertical = this.config[3].value === 'vertical';
- const width = vertical ? 24 : this.config[2].value;
- const height = vertical ? this.config[2].value : 24;
- const widthPercent = vertical ? 100 : 100 * val / this.config[1].value;
- const heightPercent = !vertical ? 100 : 100 * val / this.config[1].value;
- return `${this.config[0].value}: ${val}
`;
- }
-}, {
- group: 'DEVICES',
- type: 'IMAGE_METER',
- inputs: [],
- outputs: [],
- vals: [],
- config: [{
- name: 'device',
- type: 'select',
- values: [],
- value: 0
- }, {
- name: 'max',
- type: 'number',
- value: '255'
- }, {
- name: 'image width',
- type: 'number',
- value: '255'
- }, {
- name: 'image height',
- type: 'number',
- value: '255'
- }, {
- name: 'image 1 url',
- type: 'text',
- value: '#'
- }, {
- name: 'image 2 url',
- type: 'text',
- value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png'
- }, {
- name: 'orientation',
- type: 'select',
- values: ['left', 'right', 'top', 'bottom'],
- value: 'left'
- }],
- toHtml: function (vals) {
- const val = vals ? vals[this.config[0].value] : 0;
- const width = this.config[2].value;
- const height = this.config[3].value;
- const image1 = this.config[4].value;
- const image2 = this.config[5].value;
- let percent = 100 * val / this.config[1].value;
- let widthPercent, heightPercent;
-
- switch (this.config[6].value) {
- case 'right':
- percent = 100 - percent;
-
- case 'left':
- widthPercent = percent;
- heightPercent = 100;
- break;
-
- case 'top':
- percent = 100 - percent;
-
- case 'bottom':
- widthPercent = 100;
- heightPercent = percent;
- break;
- }
-
- return `
-
-
-
-
`;
- }
-}, {
- group: 'ACTIONS',
- type: 'BUTTON',
- inputs: [],
- outputs: [],
- vals: [],
- config: [{
- name: 'text',
- type: 'text',
- value: 'CLICK'
- }, {
- name: 'cmd',
- type: 'text',
- value: 'event,test'
- }],
- toHtml: function () {
- return `${this.config[0].value} `;
- }
-}, {
- group: 'ACTIONS',
- type: 'INPUT',
- inputs: [],
- outputs: [],
- vals: [],
- config: [{
- name: 'name',
- type: 'text',
- value: 'var'
- }, {
- name: 'min',
- type: 'number',
- value: '0'
- }, {
- name: 'max',
- type: 'number',
- value: '255'
- }, {
- name: 'cmd',
- type: 'text',
- value: 'set_level,1'
- }, {
- name: 'type',
- type: 'select',
- values: ['input', 'slider'],
- value: 'slider'
- }],
- toHtml: function (vals) {
- return `${this.config[0].value}: `;
- }
-}];
-
-/***/ }),
-
-/***/ "./src/plugins/dashboard/index.js":
-/*!****************************************!*\
- !*** ./src/plugins/dashboard/index.js ***!
- \****************************************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _dashboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dashboard */ "./src/plugins/dashboard/dashboard.js");
-/* harmony import */ var _dashboard_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dashboard.editor */ "./src/plugins/dashboard/dashboard.editor.js");
-
-
-const pluginAPI = window.getPluginAPI();
-const menu = {
- title: 'Dashboard',
- pagetitle: '',
- href: 'dashboard',
- class: 'full',
- component: _dashboard__WEBPACK_IMPORTED_MODULE_0__["DashboardPage"],
- children: [{
- title: 'Editor',
- pagetitle: '',
- href: 'dashboard/editor',
- class: 'full',
- component: _dashboard_editor__WEBPACK_IMPORTED_MODULE_1__["DashboardEditorPage"]
- }]
-};
-pluginAPI.menu.addMenu(menu);
-
-/***/ })
-
-/******/ });
+!function(t){var e={};function n(o){if(e[o])return e[o].exports;var i=e[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(o,i,function(e){return t[e]}.bind(null,i));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=63)}([function(t,e,n){"use strict";n.d(e,"b",function(){return a}),n.d(e,"a",function(){return M}),n.d(e,"c",function(){return A});var o=function(){},i={},r=[],s=[];function a(t,e){var n,a,l,u,c=s;for(u=arguments.length;u-- >2;)r.push(arguments[u]);for(e&&null!=e.children&&(r.length||r.push(e.children),delete e.children);r.length;)if((a=r.pop())&&void 0!==a.pop)for(u=a.length;u--;)r.push(a[u]);else"boolean"==typeof a&&(a=null),(l="function"!=typeof t)&&(null==a?a="":"number"==typeof a?a=String(a):"string"!=typeof a&&(l=!1)),l&&n?c[c.length-1]+=a:c===s?c=[a]:c.push(a),n=l;var p=new o;return p.nodeName=t,p.children=c,p.attributes=null==e?void 0:e,p.key=null==e?void 0:e.key,void 0!==i.vnode&&i.vnode(p),p}function l(t,e){for(var n in e)t[n]=e[n];return t}function u(t,e){null!=t&&("function"==typeof t?t(e):t.current=e)}var c="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout;var p=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,d=[];function h(t){!t._dirty&&(t._dirty=!0)&&1==d.push(t)&&(i.debounceRendering||c)(f)}function f(){for(var t;t=d.pop();)t._dirty&&D(t)}function v(t,e){return t.normalizedNodeName===e||t.nodeName.toLowerCase()===e.toLowerCase()}function m(t){var e=l({},t.attributes);e.children=t.children;var n=t.nodeName.defaultProps;if(void 0!==n)for(var o in n)void 0===e[o]&&(e[o]=n[o]);return e}function g(t){var e=t.parentNode;e&&e.removeChild(t)}function b(t,e,n,o,i){if("className"===e&&(e="class"),"key"===e);else if("ref"===e)u(n,null),u(o,t);else if("class"!==e||i)if("style"===e){if(o&&"string"!=typeof o&&"string"!=typeof n||(t.style.cssText=o||""),o&&"object"==typeof o){if("string"!=typeof n)for(var r in n)r in o||(t.style[r]="");for(var r in o)t.style[r]="number"==typeof o[r]&&!1===p.test(r)?o[r]+"px":o[r]}}else if("dangerouslySetInnerHTML"===e)o&&(t.innerHTML=o.__html||"");else if("o"==e[0]&&"n"==e[1]){var s=e!==(e=e.replace(/Capture$/,""));e=e.toLowerCase().substring(2),o?n||t.addEventListener(e,y,s):t.removeEventListener(e,y,s),(t._listeners||(t._listeners={}))[e]=o}else if("list"!==e&&"type"!==e&&!i&&e in t){try{t[e]=null==o?"":o}catch(t){}null!=o&&!1!==o||"spellcheck"==e||t.removeAttribute(e)}else{var a=i&&e!==(e=e.replace(/^xlink:?/,""));null==o||!1===o?a?t.removeAttributeNS("http://www.w3.org/1999/xlink",e.toLowerCase()):t.removeAttribute(e):"function"!=typeof o&&(a?t.setAttributeNS("http://www.w3.org/1999/xlink",e.toLowerCase(),o):t.setAttribute(e,o))}else t.className=o||""}function y(t){return this._listeners[t.type](i.event&&i.event(t)||t)}var x=[],_=0,C=!1,w=!1;function E(){for(var t;t=x.shift();)i.afterMount&&i.afterMount(t),t.componentDidMount&&t.componentDidMount()}function S(t,e,n,o,i,r){_++||(C=null!=i&&void 0!==i.ownerSVGElement,w=null!=t&&!("__preactattr_"in t));var s=N(t,e,n,o,r);return i&&s.parentNode!==i&&i.appendChild(s),--_||(w=!1,r||E()),s}function N(t,e,n,o,i){var r=t,s=C;if(null!=e&&"boolean"!=typeof e||(e=""),"string"==typeof e||"number"==typeof e)return t&&void 0!==t.splitText&&t.parentNode&&(!t._component||i)?t.nodeValue!=e&&(t.nodeValue=e):(r=document.createTextNode(e),t&&(t.parentNode&&t.parentNode.replaceChild(r,t),O(t,!0))),r.__preactattr_=!0,r;var a,l,u=e.nodeName;if("function"==typeof u)return function(t,e,n,o){var i=t&&t._component,r=i,s=t,a=i&&t._componentConstructor===e.nodeName,l=a,u=m(e);for(;i&&!l&&(i=i._parentComponent);)l=i.constructor===e.nodeName;i&&l&&(!o||i._component)?(T(i,u,3,n,o),t=i.base):(r&&!a&&(L(r),t=s=null),i=P(e.nodeName,u,n),t&&!i.nextBase&&(i.nextBase=t,s=null),T(i,u,1,n,o),t=i.base,s&&t!==s&&(s._component=null,O(s,!1)));return t}(t,e,n,o);if(C="svg"===u||"foreignObject"!==u&&C,u=String(u),(!t||!v(t,u))&&(a=u,(l=C?document.createElementNS("http://www.w3.org/2000/svg",a):document.createElement(a)).normalizedNodeName=a,r=l,t)){for(;t.firstChild;)r.appendChild(t.firstChild);t.parentNode&&t.parentNode.replaceChild(r,t),O(t,!0)}var c=r.firstChild,p=r.__preactattr_,d=e.children;if(null==p){p=r.__preactattr_={};for(var h=r.attributes,f=h.length;f--;)p[h[f].name]=h[f].value}return!w&&d&&1===d.length&&"string"==typeof d[0]&&null!=c&&void 0!==c.splitText&&null==c.nextSibling?c.nodeValue!=d[0]&&(c.nodeValue=d[0]):(d&&d.length||null!=c)&&function(t,e,n,o,i){var r,s,a,l,u,c=t.childNodes,p=[],d={},h=0,f=0,m=c.length,b=0,y=e?e.length:0;if(0!==m)for(var x=0;x{const e=[];for(let n in t)t.hasOwnProperty(n)&&e.push(n);return e}},function(t,e,n){var o=n(9)(Object,"create");t.exports=o},function(t,e,n){var o=n(14);t.exports=function(t,e){for(var n=t.length;n--;)if(o(t[n][0],e))return n;return-1}},function(t,e,n){var o=n(50);t.exports=function(t,e){var n=t.__data__;return o(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var o=n(13),i=n(24),r="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&o(t)==r}},function(t,e,n){var o=n(8).Symbol;t.exports=o},function(t,e,n){var o=n(20),i="object"==typeof self&&self&&self.Object===Object&&self,r=o||i||Function("return this")();t.exports=r},function(t,e,n){var o=n(32),i=n(37);t.exports=function(t,e){var n=i(t,e);return o(n)?n:void 0}},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var o=n(18);t.exports=function(t,e,n){var i=null==t?void 0:o(t,e);return void 0===i?n:i}},function(t,e,n){var o=n(5),i=n(19),r=n(25),s=n(54);t.exports=function(t,e){return o(t)?t:i(t,e)?[t]:r(s(t))}},function(t,e,n){var o=n(7),i=n(22),r=n(23),s="[object Null]",a="[object Undefined]",l=o?o.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?a:s:l&&l in Object(t)?i(t):r(t)}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var o=n(6),i=1/0;t.exports=function(t){if("string"==typeof t||o(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},function(t,e,n){var o=n(57);t.exports=function(t,e,n){return null==t?t:o(t,e,n)}},function(t,e,n){"use strict";n.d(e,"a",function(){return h});var o=n(1);const i="#000000",r=t=>{return t.filter(t=>0===t.inputs.length).map(t=>{const e=t=>({t:t.type,v:t.config.map(t=>t.value),o:t.outputs.map(t=>t.lines.map(t=>e(t.input.nodeObject))),c:[t.position.x,t.position.y]});return e(t)})},s=(t,e,n)=>{t.map(t=>{let o=e.renderedNodes.find(e=>e.position.x===t.c[0]&&e.position.y===t.c[1]);if(!o){const n=e.nodes.find(e=>t.t==e.type);(o=new p(e.canvas,n,{x:t.c[0],y:t.c[1]})).config.map((e,n)=>{e.value=t.v[n]}),o.render(),e.renderedNodes.push(o)}if(n){const t=n.getBoundingClientRect(),r=o.inputs[0].getBoundingClientRect(),s=new u(document.body.clientWidth,document.body.clientHeight,"none",i);e.canvas.appendChild(s.element);const a=t.x+t.width,l=t.y+t.height/2,c=r.x,p=r.y+r.height/2;s.setPath(a,l,c,p);const d={output:n,input:o.inputs[0],svg:s,start:{x:a,y:l},end:{x:c,y:p}};o.inputs[0].lines.push(d),n.lines.push(d)}t.o.map((t,n)=>{s(t,e,o.outputs[n])})})},a=t=>{const e=t.filter(t=>"TRIGGERS"===t.group);let n="";return e.map(t=>{const e=(t,n)=>{const o=t.toDsl?t.toDsl():[];let i="",r=t.indent?" ":"";return t.outputs.map((s,a)=>{let l=o[a]||t.type,u="";s.lines&&(s.lines.map(o=>{u+=e(o.input.nodeObject,t.indent?n+1:n)}),u=u.split("\n").map(t=>r+t).filter(t=>""!==t.trim()).join("\n")+"\n"),l.includes("%%output%%")?l=l.replace("%%output%%",u):l+=u,i+=l}),i},o=e(t,0);n+=o+"\n\n"}),n},l={enableNativeDrag:(t,e)=>{t.draggable=!0,t.ondragstart=(t=>{Object(o.b)(e).map(n=>{t.dataTransfer.setData(n,e[n])})})},enableNativeDrop:(t,e)=>{t.ondragover=(t=>{t.preventDefault()}),t.ondrop=e}};class u{constructor(t,e,n,o){this.element=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.element.setAttribute("style","z-index: -1;position:absolute;top:0px;left:0px"),this.element.setAttribute("width",t),this.element.setAttribute("height",e),this.element.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),this.line=document.createElementNS("http://www.w3.org/2000/svg","path"),this.line.setAttributeNS(null,"fill",n),this.line.setAttributeNS(null,"stroke",o),this.element.appendChild(this.line)}setPath(t,e,n,o,i=.5){const r=(n-t)*i,s=`M ${t} ${e} C ${t+r} ${e} ${n-r} ${o} ${n} ${o}`;this.line.setAttributeNS(null,"d",s)}}class c{constructor(t){this.type=t.type,this.group=t.group,this.config=t.config.map(t=>Object.assign({},t)),this.inputs=t.inputs.map(t=>{}),this.outputs=t.outputs.map(t=>{}),this.toDsl=t.toDsl,this.toString=t.toString,this.toHtml=t.toHtml,this.indent=t.indent}}class p extends c{constructor(t,e,n){super(e),this.canvas=t,this.position=n,this.lines=[],this.linesEnd=[],this.toDsl=e.toDsl,this.toString=e.toString,this.toHtml=e.toHtml,this.indent=e.indent}updateInputsOutputs(t,e){t.map(t=>{const e=t.getBoundingClientRect();t.lines.map(t=>{t.end.x=e.x,t.end.y=e.y+e.height/2,t.svg.setPath(t.start.x,t.start.y,t.end.x,t.end.y)})}),e.map(t=>{const e=t.getBoundingClientRect();t.lines.map(t=>{t.start.x=e.x+e.width,t.start.y=e.y+e.height/2,t.svg.setPath(t.start.x,t.start.y,t.end.x,t.end.y)})})}handleMoveEvent(t){if(!this.canvas.canEdit)return;const e=t.clientX-this.element.getBoundingClientRect().left,n=t.clientY-this.element.getBoundingClientRect().top,o=t=>{const o=t.y-n,i=t.x-e;this.position.y=o-o%this.canvas.gridSize,this.position.x=i-i%this.canvas.gridSize,this.element.style.top=`${this.position.y}px`,this.element.style.left=`${this.position.x}px`,this.updateInputsOutputs(this.inputs,this.outputs)},i=t=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",i)};document.addEventListener("mousemove",o),document.addEventListener("mouseup",i)}handleDblClickEvent(t){this.canvas.canEdit&&this.config.length&&d(this.type,this.config,()=>{this.toHtml?this.text.innerHTML=this.toHtml():this.text.textContent=this.toString()})}handleRightClickEvent(t){if(this.canvas.canEdit)return this.inputs.map(t=>{t.lines.map(t=>{t.output.lines=[],t.svg.element.parentNode.removeChild(t.svg.element)}),t.lines=[]}),this.outputs.map(t=>{t.lines.map(t=>{const e=t.input.lines.indexOf(t);t.input.lines.splice(e,1),t.svg.element.parentNode.removeChild(t.svg.element)}),t.lines=[]}),this.element.parentNode.removeChild(this.element),this.destroy&&this.destroy(),t.preventDefault(),t.stopPropagation(),!1}render(){this.element=document.createElement("div"),this.element.nodeObject=this,this.element.className=`node node-chart group-${this.group}`,this.text=document.createElement("span"),this.toHtml?this.text.innerHTML=this.toHtml():this.text.textContent=this.toString(),this.element.appendChild(this.text),this.element.style.top=`${this.position.y}px`,this.element.style.left=`${this.position.x}px`;const t=document.createElement("div");t.className="node-inputs",this.element.appendChild(t),this.inputs.map((e,n)=>{const o=this.inputs[n]=document.createElement("div");o.className="node-input",o.nodeObject=this,o.lines=[],o.onmousedown=(t=>{t.preventDefault(),t.stopPropagation()}),t.appendChild(o)});const e=document.createElement("div");e.className="node-outputs",this.element.appendChild(e),this.outputs.map((t,n)=>{const o=this.outputs[n]=document.createElement("div");o.className="node-output",o.nodeObject=this,o.lines=[],o.oncontextmenu=(t=>(o.lines.map(t=>{t.svg.element.parentNode.removeChild(t.svg.element)}),o.lines=[],t.stopPropagation(),t.preventDefault(),!1)),o.onmousedown=(t=>{if(t.stopPropagation(),o.lines.length)return;const e=o.getBoundingClientRect(),n=e.x+e.width,r=e.y+e.height/2,s=new u(document.body.clientWidth,document.body.clientHeight,"none",i);this.canvas.appendChild(s.element);const a=t=>{s.setPath(n,r,t.pageX,t.pageY)},l=t=>{const e=document.elementFromPoint(t.clientX,t.clientY),i=e?e.closest(".node-input"):null;if(i){const t=i.getBoundingClientRect(),e=t.x,a=t.y+t.height/2;s.setPath(n,r,e,a);const l={output:o,input:i,svg:s,start:{x:n,y:r},end:{x:e,y:a}};o.lines.push(l),i.lines.push(l)}else s.element.remove();document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",a),document.addEventListener("mouseup",l)}),e.appendChild(o)}),this.element.ondblclick=this.handleDblClickEvent.bind(this),this.element.onmousedown=this.handleMoveEvent.bind(this),this.element.oncontextmenu=this.handleRightClickEvent.bind(this),this.canvas.appendChild(this.element)}}const d=(t,e,n)=>{const o=document.createElement("template");o.innerHTML=`\n \n
\n \n ${t} \n
\n \n \n \n
\n `,document.body.appendChild(o.content.cloneNode(!0));const i=document.body.querySelectorAll(".configbox")[0],r=document.body.querySelectorAll(".configbox-body")[0],s=document.getElementById("ob");document.getElementById("cb").onclick=(()=>{i.remove()}),s.onclick=(()=>{e.map(t=>{t.value=document.forms.configform.elements[t.name].value}),i.remove(),n()}),e.map(t=>{const e=(t=>{const e=document.createElement("template"),n=e=>`${e} `;switch(t.type){case"text":e.innerHTML=`${t.name}
`;break;case"number":e.innerHTML=`${t.name}
`;break;case"select":e.innerHTML=`${t.name} ${t.values.map(t=>n(t))}
`;break;case"textselect":e.innerHTML=``}return e.content.cloneNode(!0)})(t);r.appendChild(e)})};class h{constructor(t,e,n){this.nodes=[],this.renderedNodes=[],this.onSave=n.onSave,this.canEdit=!n.readOnly,this.debug=null==n.debug||n.debug,this.gridSize=n.gridSize||1,this.element=t,e.map(t=>{const e=new c(t);this.nodes.push(e)}),this.render(),this.canEdit&&l.enableNativeDrop(this.canvas,t=>{const e=this.nodes.find(e=>e.type==t.dataTransfer.getData("type"));let n=new p(this.canvas,e,{x:t.x,y:t.y});n.render(),n.destroy=(()=>{this.renderedNodes.splice(this.renderedNodes.indexOf(n),1),n=null}),this.renderedNodes.push(n)})}loadConfig(t){s(t,this)}saveConfig(){return r(this.renderedNodes)}renderContainers(){if(this.canEdit&&(this.sidebar=document.createElement("div"),this.sidebar.className="sidebar",this.element.appendChild(this.sidebar)),this.canvas=document.createElement("div"),this.canvas.className="canvas",this.canvas.canEdit=this.canEdit,this.canvas.gridSize=this.gridSize,this.element.appendChild(this.canvas),this.canEdit&&this.debug){this.debug=document.createElement("div"),this.debug.className="debug";const t=document.createElement("div");this.debug.appendChild(t);const e=document.createElement("button");e.textContent="SAVE",e.onclick=(()=>{const t=JSON.stringify(r(this.renderedNodes)),e=a(this.renderedNodes);this.onSave(t,e)});const n=document.createElement("button");n.textContent="LOAD",n.onclick=(()=>{const t=prompt("enter config");s(JSON.parse(t),this)});const o=document.createElement("button");o.textContent="EXPORT",o.onclick=(()=>{const e=a(this.renderedNodes);t.textContent=e}),this.debug.appendChild(o),this.debug.appendChild(e),this.debug.appendChild(n),this.debug.appendChild(t),this.element.appendChild(this.debug)}}renderConfigNodes(){const t={};this.nodes.map(e=>{if(!t[e.group]){const n=document.createElement("div");n.className="group",n.textContent=e.group,this.sidebar.appendChild(n),t[e.group]=n}const n=document.createElement("div");n.className=`node group-${e.group}`,n.textContent=e.type,t[e.group].appendChild(n),l.enableNativeDrag(n,{type:e.type})})}render(){this.renderContainers(),this.canEdit&&this.renderConfigNodes()}}},function(t,e,n){var o=n(12),i=n(15);t.exports=function(t,e){for(var n=0,r=(e=o(e,t)).length;null!=t&&n-1}},function(t,e,n){var o=n(3);t.exports=function(t,e){var n=this.__data__,i=o(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var o=n(9)(n(8),"Map");t.exports=o},function(t,e,n){var o=n(4);t.exports=function(t){var e=o(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var o=n(4);t.exports=function(t){return o(this,t).get(t)}},function(t,e,n){var o=n(4);t.exports=function(t){return o(this,t).has(t)}},function(t,e,n){var o=n(4);t.exports=function(t,e){var n=o(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},function(t,e,n){var o=n(55);t.exports=function(t){return null==t?"":o(t)}},function(t,e,n){var o=n(7),i=n(56),r=n(5),s=n(6),a=1/0,l=o?o.prototype:void 0,u=l?l.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(r(e))return i(e,t)+"";if(s(e))return u?u.call(e):"";var n=e+"";return"0"==n&&1/e==-a?"-0":n}},function(t,e){t.exports=function(t,e){for(var n=-1,o=null==t?0:t.length,i=Array(o);++n-1&&t%1==0&&t`${(new Date).toTimeString()} `},{group:"DEVICES",type:"IMAGE",inputs:[],outputs:[],config:[{name:"url",type:"text",value:"https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png"},{name:"width",type:"number",value:"200"}],vals:[],indent:!0,toHtml:function(){return` `}},{group:"DEVICES",type:"VARIABLE",inputs:[],outputs:[],vals:[],config:[{name:"device",type:"select",values:[],value:0}],toHtml:function(t){return`${this.config[0].value}: ${t?t[this.config[0].value]:0}`}},{group:"DEVICES",type:"METER",inputs:[],outputs:[],vals:[],config:[{name:"device",type:"select",values:[],value:0},{name:"max",type:"number",value:"255"},{name:"size",type:"number",value:"255"},{name:"orientation",type:"select",values:["horizontal","vertical"],value:"horizontal"}],toHtml:function(t){const e=t?t[this.config[0].value]:0,n="vertical"===this.config[3].value;return`${this.config[0].value}: ${e}
`}},{group:"DEVICES",type:"IMAGE_METER",inputs:[],outputs:[],vals:[],config:[{name:"device",type:"select",values:[],value:0},{name:"max",type:"number",value:"255"},{name:"image width",type:"number",value:"255"},{name:"image height",type:"number",value:"255"},{name:"image 1 url",type:"text",value:"#"},{name:"image 2 url",type:"text",value:"https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png"},{name:"orientation",type:"select",values:["left","right","top","bottom"],value:"left"}],toHtml:function(t){const e=t?t[this.config[0].value]:0,n=this.config[2].value,o=this.config[3].value,i=this.config[4].value,r=this.config[5].value;let s,a,l=100*e/this.config[1].value;switch(this.config[6].value){case"right":l=100-l;case"left":s=l,a=100;break;case"top":l=100-l;case"bottom":s=100,a=l}return`\n
\n
\n
\n
`}},{group:"ACTIONS",type:"BUTTON",inputs:[],outputs:[],vals:[],config:[{name:"text",type:"text",value:"CLICK"},{name:"cmd",type:"text",value:"event,test"}],toHtml:function(){return`${this.config[0].value} `}},{group:"ACTIONS",type:"INPUT",inputs:[],outputs:[],vals:[],config:[{name:"name",type:"text",value:"var"},{name:"min",type:"number",value:"0"},{name:"max",type:"number",value:"255"},{name:"cmd",type:"text",value:"set_level,1"},{name:"type",type:"select",values:["input","slider"],value:"slider"}],toHtml:function(t){return`${this.config[0].value}: `}}],r=window.getPluginAPI(),s=r.espeasy.getVariables,a=r.espeasy.loadDashboardConfig,l=r.espeasy.storeDashboardConfig;var u=n(17);const c={title:"Dashboard",pagetitle:"",href:"dashboard",class:"full",component:class extends o.a{constructor(t){super(t),this.shutdown=!1,this.state={pages:[],vals:[],tab:0},this.selectTab=(t=>{const e=parseInt(t.currentTarget.dataset.tab);this.setState({tab:e})})}render(t){return Object(o.b)("div",null,Object(o.b)("div",{class:"dash_menu"},Object(o.b)("ul",{ref:t=>this.menu=t},this.state.pages.map((t,e)=>Object(o.b)("li",null,Object(o.b)("a",{onClick:this.selectTab,"data-tab":e},t.title))))),Object(o.b)("ul",{class:"tabs"},this.state.pages.map((t,e)=>{const n=`editor ${e===this.state.tab?"active":""}`;return Object(o.b)("li",{class:n},t.nodes.map(t=>{const e=i.find(e=>e.type===t.t),n=`node-dash node-${e.group}`,r=`top: ${t.c[1]}px; left: ${t.c[0]}px;`,s={config:t.v.map(t=>({value:t}))};return Object(o.b)("div",{class:n,style:r,dangerouslySetInnerHTML:{__html:e.toHtml.bind(s)(this.state.vals)}})}))})))}componentDidMount(){a().then(t=>{this.setState({pages:t})});const t=async()=>{const e=await s();this.setState({vals:e}),this.shutdown||setTimeout(t,1e3)};t()}componentWillUnmount(){this.shutdown=!0}},children:[{title:"Editor",pagetitle:"",href:"dashboard/editor",class:"full",component:class extends o.a{constructor(t){super(t),this.pages=[],this.nodes=i,this.saveConfig=(()=>{const t=this.pages.map(t=>({title:t.title,nodes:t.chart.saveConfig()}));l(JSON.stringify(t))}),this.addPage=(({title:t,nodes:e=[]}={})=>{t||(t=prompt("enter page name","new")),this.pages.push({title:t,nodes:e,chart:this.createPage({title:t,nodes:e})}),this.selectTab(null,this.pages.length-1)}),this.selectTab=((t,e)=>{const n=null!=e?e:t.currentTarget.dataset.tab;document.querySelectorAll("ul.tabs li").forEach((t,e)=>{e===parseInt(n)?t.classList.add("active"):t.classList.remove("active")})})}createPage(t){const e=document.createElement("li");e.innerText=t.title,e.dataset.tab=this.pages.length,e.onclick=this.selectTab,this.menu.appendChild(e);const n=document.createElement("li"),o=this.renderChart(n,t.nodes);return this.tabs.appendChild(n),o}renderChart(t,e){const n=new u.a(t,i,{gridSize:10,debug:!1});return n.loadConfig(e),n}render(t){return this.editors=[],Object(o.b)("div",null,Object(o.b)("div",{class:"dash_menu"},Object(o.b)("ul",null,Object(o.b)("div",{style:"display: inline",ref:t=>this.menu=t}),Object(o.b)("li",null,Object(o.b)("a",{onClick:this.addPage},"add page")))),Object(o.b)("div",{class:"dash_menu_right"},Object(o.b)("div",null,Object(o.b)("a",{onClick:this.saveConfig},"SAVE"))),Object(o.b)("ul",{class:"tabs",ref:t=>this.tabs=t}))}componentDidMount(){s().then(t=>{const e=i.find(t=>"VARIABLE"===t.type),n=i.find(t=>"METER"===t.type),o=i.find(t=>"IMAGE_METER"===t.type);Object.keys(t).forEach(t=>{e.config[0].values.push(t),n.config[0].values.push(t),o.config[0].values.push(t)}),a().then(t=>{t.forEach(t=>{this.addPage(t)}),this.selectTab(null,0)})})}}}]};window.getPluginAPI().menu.addMenu(c)}]);
//# sourceMappingURL=dash.js.map
\ No newline at end of file
diff --git a/build/dash.js.map b/build/dash.js.map
index 7c9c26d..d66e6cf 100644
--- a/build/dash.js.map
+++ b/build/dash.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/set.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///(webpack)/buildin/global.js","webpack:///./src/lib/floweditor.js","webpack:///./src/lib/helpers.js","webpack:///./src/plugins/dashboard/api.js","webpack:///./src/plugins/dashboard/dashboard.editor.js","webpack:///./src/plugins/dashboard/dashboard.js","webpack:///./src/plugins/dashboard/dashboard_node_definitions.js","webpack:///./src/plugins/dashboard/index.js"],"names":["color","saveChart","renderedNodes","triggers","filter","node","inputs","length","result","map","trigger","walkRule","rule","t","type","v","config","value","o","outputs","out","lines","line","input","nodeObject","c","position","x","y","loadChart","chart","from","find","n","configNode","nodes","NodeUI","canvas","cfg","i","render","push","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","document","body","clientWidth","clientHeight","appendChild","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","group","r","rules","toDsl","ruleset","padding","indent","outI","subrule","split","trim","join","includes","replace","dNd","enableNativeDrag","nodeElement","data","draggable","ondragstart","ev","getKeys","key","dataTransfer","setData","enableNativeDrop","fn","ondragover","preventDefault","ondrop","constructor","fill","createElementNS","setAttribute","setAttributeNS","tension","delta","hx1","hy1","hx2","hy2","path","Node","conf","Object","assign","toString","toHtml","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","style","onMouseUp","removeEventListener","addEventListener","handleDblClickEvent","showConfigBox","text","innerHTML","textContent","handleRightClickEvent","parentNode","removeChild","index","indexOf","splice","destroy","stopPropagation","createElement","className","val","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","remove","inputRect","ondblclick","bind","getCfgUI","template","getSelectOptions","selected","name","values","content","cloneNode","onclose","configBox","querySelectorAll","okButton","getElementById","cancelButton","onclick","forms","elements","cfgUI","FlowEditor","onSave","readOnly","debug","nodeConfig","getData","loadConfig","saveConfig","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","groups","object","keys","hasOwnProperty","api","window","getPluginAPI","getVariables","espeasy","loadDashboardConfig","storeDashboardConfig","DashboardEditorPage","Component","props","pages","page","title","addPage","createPage","selectTab","e","tabIndex","tab","currentTarget","dataset","forEach","parseInt","classList","add","menu","innerText","el","renderChart","tabs","domNode","editors","ref","componentDidMount","then","varNode","meterNode","imageNode","configs","DashboardPage","shutdown","state","vals","setState","classname","cssClass","context","__html","timeout","variables","setTimeout","componentWillUnmount","Date","toTimeString","vertical","widthPercent","heightPercent","image1","image2","percent","pluginAPI","pagetitle","href","class","component","children","addMenu"],"mappings":"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;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxBA,cAAc,mBAAO,CAAC,mDAAW;AACjC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACZA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClBA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,WAAW,mBAAO,CAAC,+CAAS;AAC5B,gBAAgB,mBAAO,CAAC,yDAAc;AACtC,UAAU,mBAAO,CAAC,6CAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACfA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,cAAc,mBAAO,CAAC,mDAAW;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,gBAAgB,mBAAO,CAAC,yDAAc;;AAEtC;AACA;;AAEA;;;;;;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACrBA,iBAAiB,mBAAO,CAAC,2DAAe;;AAExC;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACRA,oBAAoB,mBAAO,CAAC,iEAAkB;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;;;;;;AC1BA,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACzBA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,eAAe,mBAAO,CAAC,qDAAY;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,iBAAiB,mBAAO,CAAC,2DAAe;AACxC,mBAAmB,mBAAO,CAAC,6DAAgB;;AAE3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC5BA,eAAe,mBAAO,CAAC,uDAAa;;AAEpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxEA,cAAc,mBAAO,CAAC,qDAAY;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCA,mBAAmB,mBAAO,CAAC,+DAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA,GAAG;AACH;;AAEA;AACA,kCAAkC,0DAA0D;AAC5F;;AAEA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,EAAE;AACF;;AAEA;AACA,sFAAsF;AACtF,GAAG;AACH,0FAA0F;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA,CAAC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","file":"dash.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/plugins/dashboard/index.js\");\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return `${val} `;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'number':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'select':\n template.innerHTML = `${cfg.name} ${cfg.values.map(val => (getSelectOptions(val)))}
`;\n break;\n case 'textselect':\n template.innerHTML = ``\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n \n
\n \n ${type} \n
\n \n \n \n
\n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","import get from 'lodash/get';\r\nimport set from 'lodash/set';\r\n\r\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\r\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\r\n\r\n// const set = (obj, path, value) => {\r\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\r\n// if (!a[c]) a[c] = {};\r\n// if (i === src.length - 1) a[c] = value;\r\n// }, obj)\r\n// }\r\n\r\nconst getKeys = object => {\r\n const keys = [];\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n}\r\n\r\nexport { get, set, getKeys }","const api = window.getPluginAPI();\n\nexport const getVariables = api.espeasy.getVariables;\nexport const loadDashboardConfig = api.espeasy.loadDashboardConfig;\nexport const storeDashboardConfig = api.espeasy.storeDashboardConfig;\n","import { h, Component } from 'preact';\nimport { FlowEditor } from '../../lib/floweditor';\nimport { nodes } from './dashboard_node_definitions';\nimport { loadDashboardConfig, storeDashboardConfig, getVariables } from './api';\n\nexport class DashboardEditorPage extends Component {\n constructor(props) {\n super(props);\n this.pages = []\n this.nodes = nodes;\n\n this.saveConfig = () => {\n const config = this.pages.map(page => {\n return { title: page.title, nodes: page.chart.saveConfig() };\n });\n storeDashboardConfig(JSON.stringify(config));\n }\n\n this.addPage = ({ title, nodes = []} = {}) => {\n if (!title) title = prompt('enter page name', 'new');\n this.pages.push({\n title, nodes, chart: this.createPage({ title, nodes })\n });\n this.selectTab(null, this.pages.length - 1);\n }\n\n this.selectTab = (e, tabIndex) => {\n const tab = tabIndex != null ? tabIndex : e.currentTarget.dataset.tab;\n const elements = document.querySelectorAll('ul.tabs li');\n elements.forEach((element, i) => {\n if (i === parseInt(tab)) element.classList.add('active');\n else element.classList.remove('active');\n });\n }\n }\n\n createPage(page) {\n // add menu\n const menu = document.createElement('li');\n menu.innerText = page.title;\n menu.dataset.tab = this.pages.length;\n menu.onclick = this.selectTab; \n this.menu.appendChild(menu);\n\n // add tab\n const el = document.createElement('li');\n const chart = this.renderChart(el, page.nodes)\n this.tabs.appendChild(el);\n return chart;\n }\n\n renderChart(domNode, elements) {\n const chart = new FlowEditor(domNode, nodes, { \n gridSize: 10, debug: false\n });\n chart.loadConfig(elements);\n return chart;\n }\n\n render(props) {\n this.editors = [];\n return (\n \n \n );\n }\n\n componentDidMount() {\n getVariables().then((out) => {\n const varNode = nodes.find(node => node.type === 'VARIABLE');\n const meterNode = nodes.find(node => node.type === 'METER');\n const imageNode = nodes.find(node => node.type === 'IMAGE_METER');\n Object.keys(out).forEach(v => {\n varNode.config[0].values.push(v); \n meterNode.config[0].values.push(v); \n imageNode.config[0].values.push(v); \n });\n \n loadDashboardConfig().then(configs => {\n configs.forEach(page => {\n this.addPage(page);\n });\n this.selectTab(null, 0);\n });\n });\n }\n}","import { h, Component } from 'preact';\nimport { nodes } from './dashboard_node_definitions';\nimport { getVariables, loadDashboardConfig } from './api';\n\nexport class DashboardPage extends Component {\n constructor(props) {\n super(props);\n this.shutdown = false;\n this.state = {\n pages: [], vals: [], tab: 0\n }\n\n this.selectTab = (e) => {\n const tab = parseInt(e.currentTarget.dataset.tab);\n this.setState({ tab: tab });\n }\n }\n\n render(props) {\n return (\n \n \n
\n {this.state.pages.map((page, i) => {\n const classname = `editor ${i === this.state.tab ? 'active' : ''}`;\n return (\n \n {page.nodes.map(cfg => {\n const node = nodes.find(n => n.type === cfg.t);\n const cssClass = `node-dash node-${node.group}`;\n const style = `top: ${cfg.c[1]}px; left: ${cfg.c[0]}px;`;\n const context = {\n config: cfg.v.map(v => ({ value: v })),\n }\n return (\n
\n )\n })}\n \n )\n })}\n \n
\n \n );\n }\n\n componentDidMount() {\n loadDashboardConfig().then(config => {\n this.setState({ pages: config });\n });\n\n const timeout = async () => {\n const variables = await getVariables();\n this.setState({ vals: variables });\n if (!this.shutdown) setTimeout(timeout, 1000);\n };\n\n timeout();\n }\n\n componentWillUnmount() {\n this.shutdown = true;\n }\n}","export const nodes = [\n // TRIGGERS\n {\n group: 'DEVICES',\n type: 'CLOCK',\n inputs: [],\n outputs: [],\n config: [],\n vals: [],\n indent: true,\n toHtml: () => { return `${(new Date()).toTimeString()} `; },\n },\n {\n group: 'DEVICES',\n type: 'IMAGE',\n inputs: [],\n outputs: [],\n config: [{\n name: 'url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png'\n }, {\n name: 'width',\n type: 'number',\n value: '200',\n }],\n vals: [],\n indent: true,\n toHtml: function () { return ` `; },\n },\n {\n group: 'DEVICES',\n type: 'VARIABLE',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: ${vals ? vals[this.config[0].value] : 0}`;\n }\n }, {\n group: 'DEVICES',\n type: 'METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'size',\n type: 'number',\n value: '255',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['horizontal', 'vertical'],\n value: 'horizontal',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const vertical = this.config[3].value === 'vertical';\n const width = vertical ? 24 : this.config[2].value;\n const height = vertical ? this.config[2].value : 24;\n const widthPercent = vertical ? 100 : 100 * val / this.config[1].value;\n const heightPercent = !vertical ? 100 : 100 * val / this.config[1].value;\n\n return `${this.config[0].value}: ${val}
`;\n }\n }, {\n group: 'DEVICES',\n type: 'IMAGE_METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'image width',\n type: 'number',\n value: '255',\n }, {\n name: 'image height',\n type: 'number',\n value: '255',\n }, {\n name: 'image 1 url',\n type: 'text',\n value: '#',\n }, {\n name: 'image 2 url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['left', 'right', 'top', 'bottom'],\n value: 'left',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const width = this.config[2].value;\n const height = this.config[3].value;\n const image1 = this.config[4].value;\n const image2 = this.config[5].value;\n let percent = 100 * val / this.config[1].value;\n let widthPercent, heightPercent;\n switch (this.config[6].value) {\n case 'right':\n percent = 100 - percent;\n case 'left':\n widthPercent = percent;\n heightPercent = 100;\n break;\n case 'top':\n percent = 100 - percent;\n case 'bottom':\n widthPercent = 100;\n heightPercent = percent;\n break;\n }\n\n return `\n
\n
\n
\n
`;\n }\n }, {\n group: 'ACTIONS',\n type: 'BUTTON',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'text',\n type: 'text',\n value: 'CLICK'\n },{\n name: 'cmd',\n type: 'text',\n value: 'event,test'\n }],\n toHtml: function() {\n return `${this.config[0].value} `;\n }\n }, {\n group: 'ACTIONS',\n type: 'INPUT',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'name',\n type: 'text',\n value: 'var',\n },{\n name: 'min',\n type: 'number',\n value: '0',\n },{\n name: 'max',\n type: 'number',\n value: '255',\n },{\n name: 'cmd',\n type: 'text',\n value: 'set_level,1',\n },{\n name: 'type',\n type: 'select',\n values: ['input', 'slider'],\n value: 'slider',\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: `;\n }\n }\n]","import { DashboardPage } from './dashboard';\nimport { DashboardEditorPage } from './dashboard.editor';\n\nconst pluginAPI = window.getPluginAPI();\n\nconst menu = { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [\n { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage },\n ] };\n\npluginAPI.menu.addMenu(menu);"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/preact/dist/preact.mjs","webpack:///./src/lib/helpers.js","webpack:///./node_modules/lodash/_nativeCreate.js","webpack:///./node_modules/lodash/_assocIndexOf.js","webpack:///./node_modules/lodash/_getMapData.js","webpack:///./node_modules/lodash/isArray.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_getNative.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/lodash/get.js","webpack:///./node_modules/lodash/_castPath.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/eq.js","webpack:///./node_modules/lodash/_toKey.js","webpack:///./node_modules/lodash/set.js","webpack:///./src/lib/floweditor.js","webpack:///./node_modules/lodash/_baseGet.js","webpack:///./node_modules/lodash/_isKey.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/lodash/_stringToPath.js","webpack:///./node_modules/lodash/_memoizeCapped.js","webpack:///./node_modules/lodash/memoize.js","webpack:///./node_modules/lodash/_MapCache.js","webpack:///./node_modules/lodash/_mapCacheClear.js","webpack:///./node_modules/lodash/_Hash.js","webpack:///./node_modules/lodash/_hashClear.js","webpack:///./node_modules/lodash/_baseIsNative.js","webpack:///./node_modules/lodash/isFunction.js","webpack:///./node_modules/lodash/_isMasked.js","webpack:///./node_modules/lodash/_coreJsData.js","webpack:///./node_modules/lodash/_toSource.js","webpack:///./node_modules/lodash/_getValue.js","webpack:///./node_modules/lodash/_hashDelete.js","webpack:///./node_modules/lodash/_hashGet.js","webpack:///./node_modules/lodash/_hashHas.js","webpack:///./node_modules/lodash/_hashSet.js","webpack:///./node_modules/lodash/_ListCache.js","webpack:///./node_modules/lodash/_listCacheClear.js","webpack:///./node_modules/lodash/_listCacheDelete.js","webpack:///./node_modules/lodash/_listCacheGet.js","webpack:///./node_modules/lodash/_listCacheHas.js","webpack:///./node_modules/lodash/_listCacheSet.js","webpack:///./node_modules/lodash/_Map.js","webpack:///./node_modules/lodash/_mapCacheDelete.js","webpack:///./node_modules/lodash/_isKeyable.js","webpack:///./node_modules/lodash/_mapCacheGet.js","webpack:///./node_modules/lodash/_mapCacheHas.js","webpack:///./node_modules/lodash/_mapCacheSet.js","webpack:///./node_modules/lodash/toString.js","webpack:///./node_modules/lodash/_baseToString.js","webpack:///./node_modules/lodash/_arrayMap.js","webpack:///./node_modules/lodash/_baseSet.js","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./node_modules/lodash/_defineProperty.js","webpack:///./node_modules/lodash/_isIndex.js","webpack:///./src/plugins/dashboard/dashboard_node_definitions.js","webpack:///./src/plugins/dashboard/api.js","webpack:///./src/plugins/dashboard/index.js","webpack:///./src/plugins/dashboard/dashboard.js","webpack:///./src/plugins/dashboard/dashboard.editor.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","h","Component","render","VNode","options","stack","EMPTY_CHILDREN","nodeName","attributes","lastSimple","child","simple","children","arguments","length","push","pop","undefined","String","vnode","extend","obj","props","applyRef","ref","current","defer","Promise","resolve","then","setTimeout","IS_NON_DIMENSIONAL","items","enqueueRender","component","_dirty","debounceRendering","rerender","renderComponent","isNamedNode","node","normalizedNodeName","toLowerCase","getNodeProps","defaultProps","removeNode","parentNode","removeChild","setAccessor","old","isSvg","style","cssText","test","innerHTML","__html","useCapture","replace","substring","addEventListener","eventProxy","removeEventListener","_listeners","e","removeAttribute","removeAttributeNS","setAttributeNS","setAttribute","className","this","type","event","mounts","diffLevel","isSvgMode","hydrating","flushMounts","shift","afterMount","componentDidMount","diff","dom","context","mountAll","parent","componentRoot","ownerSVGElement","ret","idiff","appendChild","out","prevSvgMode","splitText","_component","nodeValue","document","createTextNode","replaceChild","recollectNodeTree","vnodeName","originalComponent","oldDom","isDirectOwner","_componentConstructor","isOwner","_parentComponent","constructor","setComponentProps","base","unmountComponent","createComponent","nextBase","buildComponentFromVNode","createElementNS","createElement","firstChild","fc","vchildren","a","nextSibling","isHydrating","j","f","vchild","originalChildren","childNodes","keyed","keyedLen","min","len","childrenLen","vlen","_child","__key","trim","insertBefore","innerDiffNode","dangerouslySetInnerHTML","attrs","diffAttributes","unmountOnly","removeChildren","lastChild","next","previousSibling","recyclerComponents","Ctor","inst","doRender","splice","state","renderMode","_disable","__ref","getDerivedStateFromProps","componentWillMount","componentWillReceiveProps","prevContext","prevProps","syncComponentUpdates","isChild","rendered","cbase","previousProps","previousState","prevState","previousContext","isUpdate","initialBase","initialChildComponent","skip","snapshot","shouldComponentUpdate","componentWillUpdate","getChildContext","getSnapshotBeforeUpdate","toUnmount","childComponent","childProps","baseParent","componentRef","componentDidUpdate","afterUpdate","_renderCallbacks","beforeUnmount","componentWillUnmount","inner","merge","setState","callback","forceUpdate","getKeys","lodash_get__WEBPACK_IMPORTED_MODULE_0__","lodash_get__WEBPACK_IMPORTED_MODULE_0___default","lodash_set__WEBPACK_IMPORTED_MODULE_1__","lodash_set__WEBPACK_IMPORTED_MODULE_1___default","keys","nativeCreate","getNative","eq","array","isKeyable","map","data","__data__","isArray","Array","baseGetTag","isObjectLike","symbolTag","freeGlobal","freeSelf","self","root","Function","baseIsNative","getValue","baseGet","path","defaultValue","result","isKey","stringToPath","toString","getRawTag","objectToString","nullTag","undefinedTag","symToStringTag","other","isSymbol","INFINITY","baseSet","FlowEditor","_helpers__WEBPACK_IMPORTED_MODULE_0__","color","saveChart","renderedNodes","filter","inputs","trigger","walkRule","rule","v","config","outputs","lines","line","input","nodeObject","position","x","y","loadChart","chart","from","find","configNode","nodes","NodeUI","canvas","cfg","fromDimension","getBoundingClientRect","toDimension","lineSvg","svgArrow","body","clientWidth","clientHeight","element","x1","width","y1","height","x2","y2","setPath","connection","output","svg","start","end","outputI","exportChart","triggers","group","rules","toDsl","ruleset","padding","indent","outI","subrule","split","join","includes","dNd","enableNativeDrag","nodeElement","draggable","ondragstart","ev","dataTransfer","setData","enableNativeDrop","fn","ondragover","preventDefault","ondrop","fill","tension","delta","Node","conf","assign","toHtml","super","linesEnd","updateInputsOutputs","rect","handleMoveEvent","canEdit","shiftX","clientX","left","shiftY","clientY","top","onMouseMove","newy","newx","gridSize","onMouseUp","handleDblClickEvent","showConfigBox","text","textContent","handleRightClickEvent","index","indexOf","destroy","stopPropagation","val","onmousedown","oncontextmenu","rects","pageX","pageY","elemBelow","elementFromPoint","closest","inputRect","remove","ondblclick","onclose","template","content","cloneNode","configBox","querySelectorAll","okButton","getElementById","onclick","forms","elements","cfgUI","getSelectOptions","values","getCfgUI","onSave","readOnly","debug","nodeConfig","getData","loadConfig","saveConfig","renderContainers","sidebar","saveBtn","JSON","stringify","loadBtn","prompt","parse","exportBtn","exported","renderConfigNodes","groups","castPath","toKey","reIsDeepProp","reIsPlainProp","global","g","window","objectProto","nativeObjectToString","isOwn","tag","unmasked","memoizeCapped","rePropName","reEscapeChar","string","charCodeAt","match","number","quote","subString","memoize","MAX_MEMOIZE_SIZE","func","cache","size","clear","MapCache","FUNC_ERROR_TEXT","resolver","TypeError","memoized","args","apply","has","set","Cache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","entries","entry","Hash","ListCache","Map","hash","hashClear","hashDelete","hashGet","hashHas","hashSet","isFunction","isMasked","isObject","toSource","reIsHostCtor","funcProto","funcToString","reIsNative","RegExp","asyncTag","funcTag","genTag","proxyTag","uid","coreJsData","maskSrcKey","exec","IE_PROTO","HASH_UNDEFINED","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","assocIndexOf","getMapData","baseToString","arrayMap","symbolProto","symbolToString","iteratee","assignValue","isIndex","customizer","lastIndex","nested","newValue","objValue","baseAssignValue","configurable","writable","MAX_SAFE_INTEGER","reIsUint","vals","Date","toTimeString","vertical","image1","image2","widthPercent","heightPercent","percent","api","getPluginAPI","getVariables","espeasy","loadDashboardConfig","storeDashboardConfig","menu","title","pagetitle","href","class","shutdown","pages","tab","selectTab","parseInt","currentTarget","dataset","preact","page","onClick","data-tab","classname","cssClass","timeout","async","variables","addPage","createPage","tabIndex","forEach","classList","add","innerText","el","renderChart","tabs","domNode","editors","varNode","meterNode","imageNode","configs","addMenu"],"mappings":"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","file":"dash.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 63);\n","var VNode = function VNode() {};\n\nvar options = {};\n\nvar stack = [];\n\nvar EMPTY_CHILDREN = [];\n\nfunction h(nodeName, attributes) {\n\tvar children = EMPTY_CHILDREN,\n\t lastSimple,\n\t child,\n\t simple,\n\t i;\n\tfor (i = arguments.length; i-- > 2;) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children != null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop !== undefined) {\n\t\t\tfor (i = child.length; i--;) {\n\t\t\t\tstack.push(child[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof child === 'boolean') child = null;\n\n\t\t\tif (simple = typeof nodeName !== 'function') {\n\t\t\t\tif (child == null) child = '';else if (typeof child === 'number') child = String(child);else if (typeof child !== 'string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length - 1] += child;\n\t\t\t} else if (children === EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t} else {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tvar p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes == null ? undefined : attributes;\n\tp.key = attributes == null ? undefined : attributes.key;\n\n\tif (options.vnode !== undefined) options.vnode(p);\n\n\treturn p;\n}\n\nfunction extend(obj, props) {\n for (var i in props) {\n obj[i] = props[i];\n }return obj;\n}\n\nfunction applyRef(ref, value) {\n if (ref != null) {\n if (typeof ref == 'function') ref(value);else ref.current = value;\n }\n}\n\nvar defer = typeof Promise == 'function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n\nfunction cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n}\n\nvar IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nvar items = [];\n\nfunction enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component) == 1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\nfunction rerender() {\n\tvar p;\n\twhile (p = items.pop()) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n\nfunction isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\treturn node.splitText !== undefined;\n\t}\n\tif (typeof vnode.nodeName === 'string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor === vnode.nodeName;\n}\n\nfunction isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n}\n\nfunction getNodeProps(vnode) {\n\tvar props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tvar defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps !== undefined) {\n\t\tfor (var i in defaultProps) {\n\t\t\tif (props[i] === undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\nfunction createNode(nodeName, isSvg) {\n\tvar node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\nfunction removeNode(node) {\n\tvar parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nfunction setAccessor(node, name, old, value, isSvg) {\n\tif (name === 'className') name = 'class';\n\n\tif (name === 'key') {} else if (name === 'ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t} else if (name === 'class' && !isSvg) {\n\t\tnode.className = value || '';\n\t} else if (name === 'style') {\n\t\tif (!value || typeof value === 'string' || typeof old === 'string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tif (typeof old !== 'string') {\n\t\t\t\tfor (var i in old) {\n\t\t\t\t\tif (!(i in value)) node.style[i] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var i in value) {\n\t\t\t\tnode.style[i] = typeof value[i] === 'number' && IS_NON_DIMENSIONAL.test(i) === false ? value[i] + 'px' : value[i];\n\t\t\t}\n\t\t}\n\t} else if (name === 'dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t} else if (name[0] == 'o' && name[1] == 'n') {\n\t\tvar useCapture = name !== (name = name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t} else {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t} else if (name !== 'list' && name !== 'type' && !isSvg && name in node) {\n\t\ttry {\n\t\t\tnode[name] = value == null ? '' : value;\n\t\t} catch (e) {}\n\t\tif ((value == null || value === false) && name != 'spellcheck') node.removeAttribute(name);\n\t} else {\n\t\tvar ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n\n\t\tif (value == null || value === false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());else node.removeAttribute(name);\n\t\t} else if (typeof value !== 'function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);else node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n\nvar mounts = [];\n\nvar diffLevel = 0;\n\nvar isSvgMode = false;\n\nvar hydrating = false;\n\nfunction flushMounts() {\n\tvar c;\n\twhile (c = mounts.shift()) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\nfunction diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\tif (!diffLevel++) {\n\t\tisSvgMode = parent != null && parent.ownerSVGElement !== undefined;\n\n\t\thydrating = dom != null && !('__preactattr_' in dom);\n\t}\n\n\tvar ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\tif (parent && ret.parentNode !== parent) parent.appendChild(ret);\n\n\tif (! --diffLevel) {\n\t\thydrating = false;\n\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tvar out = dom,\n\t prevSvgMode = isSvgMode;\n\n\tif (vnode == null || typeof vnode === 'boolean') vnode = '';\n\n\tif (typeof vnode === 'string' || typeof vnode === 'number') {\n\t\tif (dom && dom.splitText !== undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\tif (dom.nodeValue != vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t} else {\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout['__preactattr_'] = true;\n\n\t\treturn out;\n\t}\n\n\tvar vnodeName = vnode.nodeName;\n\tif (typeof vnodeName === 'function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\tisSvgMode = vnodeName === 'svg' ? true : vnodeName === 'foreignObject' ? false : isSvgMode;\n\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\twhile (dom.firstChild) {\n\t\t\t\tout.appendChild(dom.firstChild);\n\t\t\t}\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\tvar fc = out.firstChild,\n\t props = out['__preactattr_'],\n\t vchildren = vnode.children;\n\n\tif (props == null) {\n\t\tprops = out['__preactattr_'] = {};\n\t\tfor (var a = out.attributes, i = a.length; i--;) {\n\t\t\tprops[a[i].name] = a[i].value;\n\t\t}\n\t}\n\n\tif (!hydrating && vchildren && vchildren.length === 1 && typeof vchildren[0] === 'string' && fc != null && fc.splitText !== undefined && fc.nextSibling == null) {\n\t\tif (fc.nodeValue != vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t} else if (vchildren && vchildren.length || fc != null) {\n\t\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML != null);\n\t\t}\n\n\tdiffAttributes(out, vnode.attributes, props);\n\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tvar originalChildren = dom.childNodes,\n\t children = [],\n\t keyed = {},\n\t keyedLen = 0,\n\t min = 0,\n\t len = originalChildren.length,\n\t childrenLen = 0,\n\t vlen = vchildren ? vchildren.length : 0,\n\t j,\n\t c,\n\t f,\n\t vchild,\n\t child;\n\n\tif (len !== 0) {\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tvar _child = originalChildren[i],\n\t\t\t props = _child['__preactattr_'],\n\t\t\t key = vlen && props ? _child._component ? _child._component.__key : props.key : null;\n\t\t\tif (key != null) {\n\t\t\t\tkeyedLen++;\n\t\t\t\tkeyed[key] = _child;\n\t\t\t} else if (props || (_child.splitText !== undefined ? isHydrating ? _child.nodeValue.trim() : true : isHydrating)) {\n\t\t\t\tchildren[childrenLen++] = _child;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (vlen !== 0) {\n\t\tfor (var i = 0; i < vlen; i++) {\n\t\t\tvchild = vchildren[i];\n\t\t\tchild = null;\n\n\t\t\tvar key = vchild.key;\n\t\t\tif (key != null) {\n\t\t\t\tif (keyedLen && keyed[key] !== undefined) {\n\t\t\t\t\tchild = keyed[key];\n\t\t\t\t\tkeyed[key] = undefined;\n\t\t\t\t\tkeyedLen--;\n\t\t\t\t}\n\t\t\t} else if (min < childrenLen) {\n\t\t\t\t\tfor (j = min; j < childrenLen; j++) {\n\t\t\t\t\t\tif (children[j] !== undefined && isSameNodeType(c = children[j], vchild, isHydrating)) {\n\t\t\t\t\t\t\tchild = c;\n\t\t\t\t\t\t\tchildren[j] = undefined;\n\t\t\t\t\t\t\tif (j === childrenLen - 1) childrenLen--;\n\t\t\t\t\t\t\tif (j === min) min++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tchild = idiff(child, vchild, context, mountAll);\n\n\t\t\tf = originalChildren[i];\n\t\t\tif (child && child !== dom && child !== f) {\n\t\t\t\tif (f == null) {\n\t\t\t\t\tdom.appendChild(child);\n\t\t\t\t} else if (child === f.nextSibling) {\n\t\t\t\t\tremoveNode(f);\n\t\t\t\t} else {\n\t\t\t\t\tdom.insertBefore(child, f);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (keyedLen) {\n\t\tfor (var i in keyed) {\n\t\t\tif (keyed[i] !== undefined) recollectNodeTree(keyed[i], false);\n\t\t}\n\t}\n\n\twhile (min <= childrenLen) {\n\t\tif ((child = children[childrenLen--]) !== undefined) recollectNodeTree(child, false);\n\t}\n}\n\nfunction recollectNodeTree(node, unmountOnly) {\n\tvar component = node._component;\n\tif (component) {\n\t\tunmountComponent(component);\n\t} else {\n\t\tif (node['__preactattr_'] != null) applyRef(node['__preactattr_'].ref, null);\n\n\t\tif (unmountOnly === false || node['__preactattr_'] == null) {\n\t\t\tremoveNode(node);\n\t\t}\n\n\t\tremoveChildren(node);\n\t}\n}\n\nfunction removeChildren(node) {\n\tnode = node.lastChild;\n\twhile (node) {\n\t\tvar next = node.previousSibling;\n\t\trecollectNodeTree(node, true);\n\t\tnode = next;\n\t}\n}\n\nfunction diffAttributes(dom, attrs, old) {\n\tvar name;\n\n\tfor (name in old) {\n\t\tif (!(attrs && attrs[name] != null) && old[name] != null) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = undefined, isSvgMode);\n\t\t}\n\t}\n\n\tfor (name in attrs) {\n\t\tif (name !== 'children' && name !== 'innerHTML' && (!(name in old) || attrs[name] !== (name === 'value' || name === 'checked' ? dom[name] : old[name]))) {\n\t\t\tsetAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n\t\t}\n\t}\n}\n\nvar recyclerComponents = [];\n\nfunction createComponent(Ctor, props, context) {\n\tvar inst,\n\t i = recyclerComponents.length;\n\n\tif (Ctor.prototype && Ctor.prototype.render) {\n\t\tinst = new Ctor(props, context);\n\t\tComponent.call(inst, props, context);\n\t} else {\n\t\tinst = new Component(props, context);\n\t\tinst.constructor = Ctor;\n\t\tinst.render = doRender;\n\t}\n\n\twhile (i--) {\n\t\tif (recyclerComponents[i].constructor === Ctor) {\n\t\t\tinst.nextBase = recyclerComponents[i].nextBase;\n\t\t\trecyclerComponents.splice(i, 1);\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\treturn inst;\n}\n\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n\nfunction setComponentProps(component, props, renderMode, context, mountAll) {\n\tif (component._disable) return;\n\tcomponent._disable = true;\n\n\tcomponent.__ref = props.ref;\n\tcomponent.__key = props.key;\n\tdelete props.ref;\n\tdelete props.key;\n\n\tif (typeof component.constructor.getDerivedStateFromProps === 'undefined') {\n\t\tif (!component.base || mountAll) {\n\t\t\tif (component.componentWillMount) component.componentWillMount();\n\t\t} else if (component.componentWillReceiveProps) {\n\t\t\tcomponent.componentWillReceiveProps(props, context);\n\t\t}\n\t}\n\n\tif (context && context !== component.context) {\n\t\tif (!component.prevContext) component.prevContext = component.context;\n\t\tcomponent.context = context;\n\t}\n\n\tif (!component.prevProps) component.prevProps = component.props;\n\tcomponent.props = props;\n\n\tcomponent._disable = false;\n\n\tif (renderMode !== 0) {\n\t\tif (renderMode === 1 || options.syncComponentUpdates !== false || !component.base) {\n\t\t\trenderComponent(component, 1, mountAll);\n\t\t} else {\n\t\t\tenqueueRender(component);\n\t\t}\n\t}\n\n\tapplyRef(component.__ref, component);\n}\n\nfunction renderComponent(component, renderMode, mountAll, isChild) {\n\tif (component._disable) return;\n\n\tvar props = component.props,\n\t state = component.state,\n\t context = component.context,\n\t previousProps = component.prevProps || props,\n\t previousState = component.prevState || state,\n\t previousContext = component.prevContext || context,\n\t isUpdate = component.base,\n\t nextBase = component.nextBase,\n\t initialBase = isUpdate || nextBase,\n\t initialChildComponent = component._component,\n\t skip = false,\n\t snapshot = previousContext,\n\t rendered,\n\t inst,\n\t cbase;\n\n\tif (component.constructor.getDerivedStateFromProps) {\n\t\tstate = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n\t\tcomponent.state = state;\n\t}\n\n\tif (isUpdate) {\n\t\tcomponent.props = previousProps;\n\t\tcomponent.state = previousState;\n\t\tcomponent.context = previousContext;\n\t\tif (renderMode !== 2 && component.shouldComponentUpdate && component.shouldComponentUpdate(props, state, context) === false) {\n\t\t\tskip = true;\n\t\t} else if (component.componentWillUpdate) {\n\t\t\tcomponent.componentWillUpdate(props, state, context);\n\t\t}\n\t\tcomponent.props = props;\n\t\tcomponent.state = state;\n\t\tcomponent.context = context;\n\t}\n\n\tcomponent.prevProps = component.prevState = component.prevContext = component.nextBase = null;\n\tcomponent._dirty = false;\n\n\tif (!skip) {\n\t\trendered = component.render(props, state, context);\n\n\t\tif (component.getChildContext) {\n\t\t\tcontext = extend(extend({}, context), component.getChildContext());\n\t\t}\n\n\t\tif (isUpdate && component.getSnapshotBeforeUpdate) {\n\t\t\tsnapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n\t\t}\n\n\t\tvar childComponent = rendered && rendered.nodeName,\n\t\t toUnmount,\n\t\t base;\n\n\t\tif (typeof childComponent === 'function') {\n\n\t\t\tvar childProps = getNodeProps(rendered);\n\t\t\tinst = initialChildComponent;\n\n\t\t\tif (inst && inst.constructor === childComponent && childProps.key == inst.__key) {\n\t\t\t\tsetComponentProps(inst, childProps, 1, context, false);\n\t\t\t} else {\n\t\t\t\ttoUnmount = inst;\n\n\t\t\t\tcomponent._component = inst = createComponent(childComponent, childProps, context);\n\t\t\t\tinst.nextBase = inst.nextBase || nextBase;\n\t\t\t\tinst._parentComponent = component;\n\t\t\t\tsetComponentProps(inst, childProps, 0, context, false);\n\t\t\t\trenderComponent(inst, 1, mountAll, true);\n\t\t\t}\n\n\t\t\tbase = inst.base;\n\t\t} else {\n\t\t\tcbase = initialBase;\n\n\t\t\ttoUnmount = initialChildComponent;\n\t\t\tif (toUnmount) {\n\t\t\t\tcbase = component._component = null;\n\t\t\t}\n\n\t\t\tif (initialBase || renderMode === 1) {\n\t\t\t\tif (cbase) cbase._component = null;\n\t\t\t\tbase = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, true);\n\t\t\t}\n\t\t}\n\n\t\tif (initialBase && base !== initialBase && inst !== initialChildComponent) {\n\t\t\tvar baseParent = initialBase.parentNode;\n\t\t\tif (baseParent && base !== baseParent) {\n\t\t\t\tbaseParent.replaceChild(base, initialBase);\n\n\t\t\t\tif (!toUnmount) {\n\t\t\t\t\tinitialBase._component = null;\n\t\t\t\t\trecollectNodeTree(initialBase, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (toUnmount) {\n\t\t\tunmountComponent(toUnmount);\n\t\t}\n\n\t\tcomponent.base = base;\n\t\tif (base && !isChild) {\n\t\t\tvar componentRef = component,\n\t\t\t t = component;\n\t\t\twhile (t = t._parentComponent) {\n\t\t\t\t(componentRef = t).base = base;\n\t\t\t}\n\t\t\tbase._component = componentRef;\n\t\t\tbase._componentConstructor = componentRef.constructor;\n\t\t}\n\t}\n\n\tif (!isUpdate || mountAll) {\n\t\tmounts.push(component);\n\t} else if (!skip) {\n\n\t\tif (component.componentDidUpdate) {\n\t\t\tcomponent.componentDidUpdate(previousProps, previousState, snapshot);\n\t\t}\n\t\tif (options.afterUpdate) options.afterUpdate(component);\n\t}\n\n\twhile (component._renderCallbacks.length) {\n\t\tcomponent._renderCallbacks.pop().call(component);\n\t}if (!diffLevel && !isChild) flushMounts();\n}\n\nfunction buildComponentFromVNode(dom, vnode, context, mountAll) {\n\tvar c = dom && dom._component,\n\t originalComponent = c,\n\t oldDom = dom,\n\t isDirectOwner = c && dom._componentConstructor === vnode.nodeName,\n\t isOwner = isDirectOwner,\n\t props = getNodeProps(vnode);\n\twhile (c && !isOwner && (c = c._parentComponent)) {\n\t\tisOwner = c.constructor === vnode.nodeName;\n\t}\n\n\tif (c && isOwner && (!mountAll || c._component)) {\n\t\tsetComponentProps(c, props, 3, context, mountAll);\n\t\tdom = c.base;\n\t} else {\n\t\tif (originalComponent && !isDirectOwner) {\n\t\t\tunmountComponent(originalComponent);\n\t\t\tdom = oldDom = null;\n\t\t}\n\n\t\tc = createComponent(vnode.nodeName, props, context);\n\t\tif (dom && !c.nextBase) {\n\t\t\tc.nextBase = dom;\n\n\t\t\toldDom = null;\n\t\t}\n\t\tsetComponentProps(c, props, 1, context, mountAll);\n\t\tdom = c.base;\n\n\t\tif (oldDom && dom !== oldDom) {\n\t\t\toldDom._component = null;\n\t\t\trecollectNodeTree(oldDom, false);\n\t\t}\n\t}\n\n\treturn dom;\n}\n\nfunction unmountComponent(component) {\n\tif (options.beforeUnmount) options.beforeUnmount(component);\n\n\tvar base = component.base;\n\n\tcomponent._disable = true;\n\n\tif (component.componentWillUnmount) component.componentWillUnmount();\n\n\tcomponent.base = null;\n\n\tvar inner = component._component;\n\tif (inner) {\n\t\tunmountComponent(inner);\n\t} else if (base) {\n\t\tif (base['__preactattr_'] != null) applyRef(base['__preactattr_'].ref, null);\n\n\t\tcomponent.nextBase = base;\n\n\t\tremoveNode(base);\n\t\trecyclerComponents.push(component);\n\n\t\tremoveChildren(base);\n\t}\n\n\tapplyRef(component.__ref, null);\n}\n\nfunction Component(props, context) {\n\tthis._dirty = true;\n\n\tthis.context = context;\n\n\tthis.props = props;\n\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\nextend(Component.prototype, {\n\tsetState: function setState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(extend({}, this.state), typeof state === 'function' ? state(this.state, this.props) : state);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\tforceUpdate: function forceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, 2);\n\t},\n\trender: function render() {}\n});\n\nfunction render(vnode, parent, merge) {\n return diff(merge, vnode, {}, false, parent, false);\n}\n\nfunction createRef() {\n\treturn {};\n}\n\nvar preact = {\n\th: h,\n\tcreateElement: h,\n\tcloneElement: cloneElement,\n\tcreateRef: createRef,\n\tComponent: Component,\n\trender: render,\n\trerender: rerender,\n\toptions: options\n};\n\nexport default preact;\nexport { h, h as createElement, cloneElement, createRef, Component, render, rerender, options };\n//# sourceMappingURL=preact.mjs.map\n","import get from 'lodash/get';\r\nimport set from 'lodash/set';\r\n\r\n// const get = (obj, path, defaultValue) => path.replace(/\\[/g, '.').replace(/\\]/g, '').split(\".\")\r\n// .reduce((a, c) => (a && a[c] ? a[c] : (defaultValue || null)), obj)\r\n\r\n// const set = (obj, path, value) => {\r\n// path.replace(/\\[/g, '.').replace(/\\]/g, '').split('.').reduce((a, c, i, src) => {\r\n// if (!a[c]) a[c] = {};\r\n// if (i === src.length - 1) a[c] = value;\r\n// }, obj)\r\n// }\r\n\r\nconst getKeys = object => {\r\n const keys = [];\r\n for (let key in object) {\r\n if (object.hasOwnProperty(key)) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n}\r\n\r\nexport { get, set, getKeys }","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","import { getKeys } from \"./helpers\";\n\n// todo:\n// improve relability of moving elements around\n\n// global config\nconst color = '#000000';\n\nconst saveChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.inputs.length === 0);\n\n // for each initial node walk the tree and produce one 'rule'\n const result = triggers.map(trigger => {\n const walkRule = rule => {\n return {\n t: rule.type,\n v: rule.config.map(config => config.value),\n o: rule.outputs.map(out => out.lines.map(line => walkRule(line.input.nodeObject))),\n c: [rule.position.x, rule.position.y]\n }\n }\n\n return walkRule(trigger);\n });\n\n return result;\n}\n\nconst loadChart = (config, chart, from) => {\n config.map(config => {\n let node = chart.renderedNodes.find(n => n.position.x === config.c[0] && n.position.y === config.c[1]);\n if (!node) {\n const configNode = chart.nodes.find(n => config.t == n.type);\n node = new NodeUI(chart.canvas, configNode, { x: config.c[0], y: config.c[1] });\n node.config.map((cfg, i) => {\n cfg.value = config.v[i];\n });\n node.render();\n chart.renderedNodes.push(node);\n }\n \n\n if (from) {\n const fromDimension = from.getBoundingClientRect();\n const toDimension = node.inputs[0].getBoundingClientRect();\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n chart.canvas.appendChild(lineSvg.element);\n const x1 = fromDimension.x + fromDimension.width;\n const y1 = fromDimension.y + fromDimension.height/2;\n const x2 = toDimension.x;\n const y2 = toDimension.y + toDimension.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n\n const connection = {\n output: from,\n input: node.inputs[0],\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n node.inputs[0].lines.push(connection);\n from.lines.push(connection);\n }\n\n config.o.map((output, outputI) => {\n loadChart(output, chart, node.outputs[outputI]);\n });\n })\n}\n\nconst exportChart = renderedNodes => {\n // find initial nodes (triggers);\n const triggers = renderedNodes.filter(node => node.group === 'TRIGGERS');\n\n let result = '';\n // for each initial node walk the tree and produce one 'rule'\n triggers.map(trigger => {\n \n const walkRule = (r, i) => {\n const rules = r.toDsl ? r.toDsl() : [];\n let ruleset = '';\n let padding = r.indent ? ' ' : '';\n \n r.outputs.map((out, outI) => {\n let rule = rules[outI] || r.type;\n let subrule = '';\n if (out.lines) {\n out.lines.map(line => {\n subrule += walkRule(line.input.nodeObject, r.indent ? i + 1 : i);\n });\n subrule = subrule.split('\\n').map(line => (padding + line)).filter(line => line.trim() !== '').join('\\n') + '\\n';\n } \n if (rule.includes('%%output%%')) {\n rule = rule.replace('%%output%%', subrule);\n } else {\n rule += subrule;\n }\n ruleset += rule;\n });\n \n return ruleset;\n }\n\n const rule = walkRule(trigger, 0);\n result += rule + \"\\n\\n\";\n });\n\n return result;\n}\n\n// drag and drop helpers\nconst dNd = {\n enableNativeDrag: (nodeElement, data) => {\n nodeElement.draggable = true;\n nodeElement.ondragstart = ev => {\n getKeys(data).map(key => {\n ev.dataTransfer.setData(key, data[key]);\n }); \n }\n }, enableNativeDrop: (nodeElement, fn) => {\n nodeElement.ondragover = ev => {\n ev.preventDefault();\n }\n nodeElement.ondrop = fn;\n }\n}\n\n// svg helpers\nclass svgArrow {\n constructor(width, height, fill, color) {\n this.element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.element.setAttribute('style', 'z-index: -1;position:absolute;top:0px;left:0px');\n this.element.setAttribute('width', width);\n this.element.setAttribute('height', height);\n this.element.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\n this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this.line.setAttributeNS(null, \"fill\", fill);\n this.line.setAttributeNS(null, \"stroke\", color);\n this.element.appendChild(this.line);\n }\n\n setPath(x1, y1, x2, y2, tension = 0.5) {\n const delta = (x2-x1)*tension;\n const hx1=x1+delta;\n const hy1=y1;\n const hx2=x2-delta;\n const hy2=y2;\n \n const path = `M ${x1} ${y1} C ${hx1} ${hy1} ${hx2} ${hy2} ${x2} ${y2}`;\n this.line.setAttributeNS(null, \"d\", path);\n }\n}\n\n// node configuration (each node in the left menu is represented by an instance of this object)\nclass Node {\n constructor(conf) {\n this.type = conf.type;\n this.group = conf.group;\n this.config = conf.config.map(config => (Object.assign({}, config)));\n this.inputs = conf.inputs.map(input => {});\n this.outputs = conf.outputs.map(output => {});\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n}\n\n// node UI (each node in your flow diagram is represented by an instance of this object)\nclass NodeUI extends Node {\n constructor(canvas, conf, position) {\n super(conf);\n this.canvas = canvas;\n this.position = position;\n this.lines = [];\n this.linesEnd = [];\n this.toDsl = conf.toDsl;\n this.toString = conf.toString;\n this.toHtml = conf.toHtml;\n this.indent = conf.indent;\n }\n\n updateInputsOutputs(inputs, outputs) {\n inputs.map(input => {\n const rect = input.getBoundingClientRect();\n input.lines.map(line => {\n line.end.x = rect.x;\n line.end.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n outputs.map(output => {\n const rect = output.getBoundingClientRect();\n output.lines.map(line => {\n line.start.x = rect.x + rect.width;\n line.start.y = rect.y + rect.height/2;\n line.svg.setPath(line.start.x, line.start.y, line.end.x, line.end.y);\n });\n });\n }\n\n handleMoveEvent(ev) {\n if (!this.canvas.canEdit) return;\n const shiftX = ev.clientX - this.element.getBoundingClientRect().left;\n const shiftY = ev.clientY - this.element.getBoundingClientRect().top;\n const onMouseMove = ev => {\n const newy = ev.y - shiftY;\n const newx = ev.x - shiftX\n this.position.y = newy - newy % this.canvas.gridSize;\n this.position.x = newx - newx % this.canvas.gridSize;\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`; \n this.updateInputsOutputs(this.inputs, this.outputs);\n }\n const onMouseUp = ev => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp); \n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n handleDblClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n if (this.config.length)\n showConfigBox(this.type, this.config, () => {\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n });\n }\n\n handleRightClickEvent(ev) {\n if (!this.canvas.canEdit) return;\n this.inputs.map(input => {\n input.lines.map(line => {\n line.output.lines = [];\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n input.lines = [];\n });\n this.outputs.map(output => {\n output.lines.map(line => {\n const index = line.input.lines.indexOf(line);\n line.input.lines.splice(index, 1);\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n });\n this.element.parentNode.removeChild(this.element);\n if (this.destroy) this.destroy();\n ev.preventDefault();\n ev.stopPropagation();\n return false;\n }\n\n render() {\n this.element = document.createElement('div');\n this.element.nodeObject = this;\n this.element.className = `node node-chart group-${this.group}`;\n\n this.text = document.createElement('span');\n if (this.toHtml) {\n this.text.innerHTML = this.toHtml();\n } else {\n this.text.textContent = this.toString();\n }\n \n this.element.appendChild(this.text);\n\n this.element.style.top = `${this.position.y}px`;\n this.element.style.left = `${this.position.x}px`;\n\n const inputs = document.createElement('div');\n inputs.className = 'node-inputs';\n this.element.appendChild(inputs);\n \n this.inputs.map((val, index) => {\n const input = this.inputs[index] = document.createElement('div');\n input.className = 'node-input';\n input.nodeObject = this;\n input.lines = []\n input.onmousedown = ev => {\n ev.preventDefault();\n ev.stopPropagation();\n }\n inputs.appendChild(input);\n })\n\n const outputs = document.createElement('div');\n outputs.className = 'node-outputs';\n this.element.appendChild(outputs);\n\n this.outputs.map((val, index) => {\n const output = this.outputs[index] = document.createElement('div');\n output.className = 'node-output';\n output.nodeObject = this;\n output.lines = [];\n output.oncontextmenu = ev => {\n output.lines.map(line => {\n line.svg.element.parentNode.removeChild(line.svg.element);\n });\n output.lines = [];\n ev.stopPropagation();\n ev.preventDefault();\n return false;\n }\n output.onmousedown = ev => {\n ev.stopPropagation();\n if (output.lines.length) return;\n const rects = output.getBoundingClientRect();\n const x1 = rects.x + rects.width;\n const y1 = rects.y + rects.height/2;\n\n const lineSvg = new svgArrow(document.body.clientWidth, document.body.clientHeight, 'none', color);\n this.canvas.appendChild(lineSvg.element);\n\n const onMouseMove = ev => {\n lineSvg.setPath(x1, y1, ev.pageX, ev.pageY);\n }\n\n const onMouseUp = ev => {\n const elemBelow = document.elementFromPoint(ev.clientX, ev.clientY);\n const input = elemBelow ? elemBelow.closest('.node-input') : null;\n if (!input) {\n lineSvg.element.remove();\n } else {\n const inputRect = input.getBoundingClientRect();\n const x2 = inputRect.x;\n const y2 = inputRect.y + inputRect.height/2;\n lineSvg.setPath(x1, y1, x2, y2);\n const connection = {\n output,\n input,\n svg: lineSvg,\n start: { x: x1, y: y1 },\n end: { x: x2, y: y2 },\n };\n output.lines.push(connection);\n input.lines.push(connection);\n }\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n outputs.appendChild(output);\n });\n\n this.element.ondblclick = this.handleDblClickEvent.bind(this);\n this.element.onmousedown = this.handleMoveEvent.bind(this);\n this.element.oncontextmenu = this.handleRightClickEvent.bind(this);\n this.canvas.appendChild(this.element);\n }\n}\n\nconst getCfgUI = cfg => {\n const template = document.createElement('template');\n\n const getSelectOptions = val => {\n const selected = val == cfg.value ? 'selected' : '';\n return `${val} `;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'number':\n template.innerHTML = `${cfg.name}
`;\n break;\n case 'select':\n template.innerHTML = `${cfg.name} ${cfg.values.map(val => (getSelectOptions(val)))}
`;\n break;\n case 'textselect':\n template.innerHTML = ``\n }\n return template.content.cloneNode(true);\n}\n\nconst showConfigBox = (type, config, onclose) => {\n const template = document.createElement('template');\n template.innerHTML = `\n \n
\n \n ${type} \n
\n \n \n \n
\n `;\n\n document.body.appendChild(template.content.cloneNode(true));\n const configBox = document.body.querySelectorAll('.configbox')[0];\n const body = document.body.querySelectorAll('.configbox-body')[0];\n const okButton = document.getElementById('ob');\n const cancelButton = document.getElementById('cb');\n cancelButton.onclick = () => {\n configBox.remove();\n }\n okButton.onclick = () => {\n // set configuration to node\n config.map(cfg => {\n cfg.value = document.forms['configform'].elements[cfg.name].value;\n });\n configBox.remove();\n onclose();\n }\n config.map(cfg => {\n const cfgUI = getCfgUI(cfg);\n body.appendChild(cfgUI);\n })\n}\n\nexport class FlowEditor {\n constructor(element, nodes, config) {\n this.nodes = [];\n this.renderedNodes = [];\n this.onSave = config.onSave;\n this.canEdit = !config.readOnly;\n this.debug = config.debug!= null ? config.debug : true;\n this.gridSize = config.gridSize || 1;\n\n this.element = element;\n\n nodes.map(nodeConfig => {\n const node = new Node(nodeConfig);\n this.nodes.push(node);\n });\n this.render();\n\n if (this.canEdit)\n dNd.enableNativeDrop(this.canvas, ev => {\n const configNode = this.nodes.find(node => node.type == ev.dataTransfer.getData('type'));\n let node = new NodeUI(this.canvas, configNode, { x: ev.x, y: ev.y });\n node.render();\n node.destroy = () => {\n this.renderedNodes.splice( this.renderedNodes.indexOf(node), 1 );\n node = null;\n }\n this.renderedNodes.push(node); \n });\n }\n\n loadConfig(config) {\n loadChart(config, this);\n }\n\n saveConfig() {\n return saveChart(this.renderedNodes);\n }\n\n renderContainers() {\n if (this.canEdit) {\n this.sidebar = document.createElement('div');\n this.sidebar.className = 'sidebar';\n this.element.appendChild(this.sidebar);\n }\n\n this.canvas = document.createElement('div');\n this.canvas.className = 'canvas';\n this.canvas.canEdit = this.canEdit;\n this.canvas.gridSize = this.gridSize;\n this.element.appendChild(this.canvas);\n\n if (this.canEdit && this.debug) {\n this.debug = document.createElement('div');\n this.debug.className = 'debug';\n\n const text = document.createElement('div');\n this.debug.appendChild(text);\n\n const saveBtn = document.createElement('button');\n saveBtn.textContent = 'SAVE';\n saveBtn.onclick = () => {\n const config = JSON.stringify(saveChart(this.renderedNodes));\n const rules = exportChart(this.renderedNodes);\n this.onSave(config, rules);\n }\n\n const loadBtn = document.createElement('button');\n loadBtn.textContent = 'LOAD';\n loadBtn.onclick = () => {\n const input = prompt('enter config');\n loadChart(JSON.parse(input), this);\n }\n\n const exportBtn = document.createElement('button');\n exportBtn.textContent = 'EXPORT';\n exportBtn.onclick = () => {\n const exported = exportChart(this.renderedNodes);\n text.textContent = exported;\n }\n this.debug.appendChild(exportBtn);\n this.debug.appendChild(saveBtn);\n this.debug.appendChild(loadBtn);\n this.debug.appendChild(text);\n this.element.appendChild(this.debug);\n }\n \n }\n\n renderConfigNodes() {\n const groups = {};\n this.nodes.map(node => {\n if (!groups[node.group]) {\n const group = document.createElement('div');\n group.className = 'group';\n group.textContent = node.group;\n this.sidebar.appendChild(group);\n groups[node.group] = group;\n }\n const nodeElement = document.createElement('div');\n nodeElement.className = `node group-${node.group}`;\n nodeElement.textContent = node.type;\n groups[node.group].appendChild(nodeElement);\n\n dNd.enableNativeDrag(nodeElement, { type: node.type });\n })\n }\n\n render() {\n this.renderContainers();\n if (this.canEdit) this.renderConfigNodes();\n }\n}","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","export const nodes = [\n // TRIGGERS\n {\n group: 'DEVICES',\n type: 'CLOCK',\n inputs: [],\n outputs: [],\n config: [],\n vals: [],\n indent: true,\n toHtml: () => { return `${(new Date()).toTimeString()} `; },\n },\n {\n group: 'DEVICES',\n type: 'IMAGE',\n inputs: [],\n outputs: [],\n config: [{\n name: 'url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png'\n }, {\n name: 'width',\n type: 'number',\n value: '200',\n }],\n vals: [],\n indent: true,\n toHtml: function () { return ` `; },\n },\n {\n group: 'DEVICES',\n type: 'VARIABLE',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: ${vals ? vals[this.config[0].value] : 0}`;\n }\n }, {\n group: 'DEVICES',\n type: 'METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'size',\n type: 'number',\n value: '255',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['horizontal', 'vertical'],\n value: 'horizontal',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const vertical = this.config[3].value === 'vertical';\n const width = vertical ? 24 : this.config[2].value;\n const height = vertical ? this.config[2].value : 24;\n const widthPercent = vertical ? 100 : 100 * val / this.config[1].value;\n const heightPercent = !vertical ? 100 : 100 * val / this.config[1].value;\n\n return `${this.config[0].value}: ${val}
`;\n }\n }, {\n group: 'DEVICES',\n type: 'IMAGE_METER',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'device',\n type: 'select',\n values: [],\n value: 0\n }, {\n name: 'max',\n type: 'number',\n value: '255',\n }, {\n name: 'image width',\n type: 'number',\n value: '255',\n }, {\n name: 'image height',\n type: 'number',\n value: '255',\n }, {\n name: 'image 1 url',\n type: 'text',\n value: '#',\n }, {\n name: 'image 2 url',\n type: 'text',\n value: 'https://www.letscontrolit.com/wiki/images/4/44/ESPeasyLOGO.png',\n }, {\n name: 'orientation',\n type: 'select',\n values: ['left', 'right', 'top', 'bottom'],\n value: 'left',\n }],\n toHtml: function(vals) {\n const val = vals ? vals[this.config[0].value] : 0;\n const width = this.config[2].value;\n const height = this.config[3].value;\n const image1 = this.config[4].value;\n const image2 = this.config[5].value;\n let percent = 100 * val / this.config[1].value;\n let widthPercent, heightPercent;\n switch (this.config[6].value) {\n case 'right':\n percent = 100 - percent;\n case 'left':\n widthPercent = percent;\n heightPercent = 100;\n break;\n case 'top':\n percent = 100 - percent;\n case 'bottom':\n widthPercent = 100;\n heightPercent = percent;\n break;\n }\n\n return `\n
\n
\n
\n
`;\n }\n }, {\n group: 'ACTIONS',\n type: 'BUTTON',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'text',\n type: 'text',\n value: 'CLICK'\n },{\n name: 'cmd',\n type: 'text',\n value: 'event,test'\n }],\n toHtml: function() {\n return `${this.config[0].value} `;\n }\n }, {\n group: 'ACTIONS',\n type: 'INPUT',\n inputs: [],\n outputs: [],\n vals: [],\n config: [{\n name: 'name',\n type: 'text',\n value: 'var',\n },{\n name: 'min',\n type: 'number',\n value: '0',\n },{\n name: 'max',\n type: 'number',\n value: '255',\n },{\n name: 'cmd',\n type: 'text',\n value: 'set_level,1',\n },{\n name: 'type',\n type: 'select',\n values: ['input', 'slider'],\n value: 'slider',\n }],\n toHtml: function(vals) {\n return `${this.config[0].value}: `;\n }\n }\n]","const api = window.getPluginAPI();\n\nexport const getVariables = api.espeasy.getVariables;\nexport const loadDashboardConfig = api.espeasy.loadDashboardConfig;\nexport const storeDashboardConfig = api.espeasy.storeDashboardConfig;\n","import { DashboardPage } from './dashboard';\nimport { DashboardEditorPage } from './dashboard.editor';\n\nconst pluginAPI = window.getPluginAPI();\n\nconst menu = { title: 'Dashboard', pagetitle: '', href: 'dashboard', class: 'full', component: DashboardPage, children: [\n { title: 'Editor', pagetitle: '', href: 'dashboard/editor', class: 'full', component: DashboardEditorPage },\n ] };\n\npluginAPI.menu.addMenu(menu);","import { h, Component } from 'preact';\nimport { nodes } from './dashboard_node_definitions';\nimport { getVariables, loadDashboardConfig } from './api';\n\nexport class DashboardPage extends Component {\n constructor(props) {\n super(props);\n this.shutdown = false;\n this.state = {\n pages: [], vals: [], tab: 0\n }\n\n this.selectTab = (e) => {\n const tab = parseInt(e.currentTarget.dataset.tab);\n this.setState({ tab: tab });\n }\n }\n\n render(props) {\n return (\n \n \n
\n {this.state.pages.map((page, i) => {\n const classname = `editor ${i === this.state.tab ? 'active' : ''}`;\n return (\n \n {page.nodes.map(cfg => {\n const node = nodes.find(n => n.type === cfg.t);\n const cssClass = `node-dash node-${node.group}`;\n const style = `top: ${cfg.c[1]}px; left: ${cfg.c[0]}px;`;\n const context = {\n config: cfg.v.map(v => ({ value: v })),\n }\n return (\n
\n )\n })}\n \n )\n })}\n \n
\n \n );\n }\n\n componentDidMount() {\n loadDashboardConfig().then(config => {\n this.setState({ pages: config });\n });\n\n const timeout = async () => {\n const variables = await getVariables();\n this.setState({ vals: variables });\n if (!this.shutdown) setTimeout(timeout, 1000);\n };\n\n timeout();\n }\n\n componentWillUnmount() {\n this.shutdown = true;\n }\n}","import { h, Component } from 'preact';\nimport { FlowEditor } from '../../lib/floweditor';\nimport { nodes } from './dashboard_node_definitions';\nimport { loadDashboardConfig, storeDashboardConfig, getVariables } from './api';\n\nexport class DashboardEditorPage extends Component {\n constructor(props) {\n super(props);\n this.pages = []\n this.nodes = nodes;\n\n this.saveConfig = () => {\n const config = this.pages.map(page => {\n return { title: page.title, nodes: page.chart.saveConfig() };\n });\n storeDashboardConfig(JSON.stringify(config));\n }\n\n this.addPage = ({ title, nodes = []} = {}) => {\n if (!title) title = prompt('enter page name', 'new');\n this.pages.push({\n title, nodes, chart: this.createPage({ title, nodes })\n });\n this.selectTab(null, this.pages.length - 1);\n }\n\n this.selectTab = (e, tabIndex) => {\n const tab = tabIndex != null ? tabIndex : e.currentTarget.dataset.tab;\n const elements = document.querySelectorAll('ul.tabs li');\n elements.forEach((element, i) => {\n if (i === parseInt(tab)) element.classList.add('active');\n else element.classList.remove('active');\n });\n }\n }\n\n createPage(page) {\n // add menu\n const menu = document.createElement('li');\n menu.innerText = page.title;\n menu.dataset.tab = this.pages.length;\n menu.onclick = this.selectTab; \n this.menu.appendChild(menu);\n\n // add tab\n const el = document.createElement('li');\n const chart = this.renderChart(el, page.nodes)\n this.tabs.appendChild(el);\n return chart;\n }\n\n renderChart(domNode, elements) {\n const chart = new FlowEditor(domNode, nodes, { \n gridSize: 10, debug: false\n });\n chart.loadConfig(elements);\n return chart;\n }\n\n render(props) {\n this.editors = [];\n return (\n \n \n );\n }\n\n componentDidMount() {\n getVariables().then((out) => {\n const varNode = nodes.find(node => node.type === 'VARIABLE');\n const meterNode = nodes.find(node => node.type === 'METER');\n const imageNode = nodes.find(node => node.type === 'IMAGE_METER');\n Object.keys(out).forEach(v => {\n varNode.config[0].values.push(v); \n meterNode.config[0].values.push(v); \n imageNode.config[0].values.push(v); \n });\n \n loadDashboardConfig().then(configs => {\n configs.forEach(page => {\n this.addPage(page);\n });\n this.selectTab(null, 0);\n });\n });\n }\n}"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/index.htm.gz b/build/index.htm.gz
index 71bf723..0e68c5d 100644
Binary files a/build/index.htm.gz and b/build/index.htm.gz differ
diff --git a/gulpfile.js b/gulpfile.js
index b5f0d48..7c9940d 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -36,6 +36,12 @@ gulp.task('styles', function () {
.pipe(gulp.dest('./build'))
});
+ gulp.task('scripts', function () {
+ return gulp.src('./build/dash.js')
+ .pipe(gzip())
+ .pipe(gulp.dest('./build'))
+ });
+
gulp.task('pages', function() {
return gulp.src(['./src/index.htm'])
.pipe(htmlmin({
diff --git a/src/lib/plugins.js b/src/lib/plugins.js
index 0bab11f..10d4e3b 100644
--- a/src/lib/plugins.js
+++ b/src/lib/plugins.js
@@ -4,7 +4,7 @@ import { loader } from './loader';
import { menu } from './menu';
const PLUGINS = [
- 'http://localhost:8080/build/dash.js'
+ '/dash.js.gz'
];
const dynamicallyLoadScript = (url) => {
diff --git a/src/pages/fs.js b/src/pages/fs.js
index b55c020..97d63f2 100644
--- a/src/pages/fs.js
+++ b/src/pages/fs.js
@@ -1,13 +1,16 @@
import { h, Component } from 'preact';
import { deleteFile, storeFile } from '../lib/espeasy';
+import { loader } from '../lib/loader';
export class FSPage extends Component {
constructor(props) {
super(props);
this.state = { files: [] }
- this.saveForm = () => {
- storeFile(this.file.files[0]);
+ this.saveForm = async () => {
+ loader.show();
+ await storeFile(this.file.files[0]);
+ await fetch();
}
this.deleteFile = e => {
@@ -23,6 +26,7 @@ export class FSPage extends Component {
}
render(props) {
+ loader.hide();
return (
diff --git a/webpack.config.js b/webpack.config.js
index a24bc64..cb7d02c 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -4,7 +4,7 @@ var LiveReloadPlugin = require('webpack-livereload-plugin');
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = env => ({
- mode: 'development', //env && env.production ? 'production' : 'development',
+ mode: 'production', //env && env.production ? 'production' : 'development',
entry: {
app: './src/app.js',
dash: './src/plugins/dashboard/index.js',