From 9d927c256db31c0c381d02bb066d1eb21eed3416 Mon Sep 17 00:00:00 2001 From: ppisljar Date: Mon, 18 Feb 2019 12:05:16 +0100 Subject: [PATCH] latest build --- build/app.js | 11799 +------------------------------------------ build/app.js.map | 2 +- build/dash.js | 4033 +-------------- build/dash.js.map | 2 +- build/index.htm.gz | Bin 36930 -> 33799 bytes gulpfile.js | 6 + src/lib/plugins.js | 2 +- src/pages/fs.js | 8 +- webpack.config.js | 2 +- 9 files changed, 18 insertions(+), 15836 deletions(-) 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 ``; - }; - - switch (cfg.type) { - case 'text': - template.innerHTML = `
`; - break; - - case 'number': - template.innerHTML = `
`; - break; - - case 'select': - template.innerHTML = `
`; - 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
\n
\n \n
\n
\n
\n \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=>``;switch(e.type){case"text":t.innerHTML=`
`;break;case"number":t.innerHTML=`
`;break;case"select":t.innerHTML=`
`;break;case"textselect":t.innerHTML=`
\n \n \n \n
`}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 \n \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 \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 ) ;\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 \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 (),\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 \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 Menu extends Component {\r\n renderMenuItem(menu) {\r\n if (menu.action) {\r\n return (\r\n
  • \r\n {menu.title}\r\n
  • \r\n )\r\n }\r\n if (menu.href === this.props.selected.href) {\r\n return [\r\n (
  • \r\n {menu.title}\r\n
  • ),\r\n ...menu.children.map(child => {\r\n if (child.action) {\r\n return (\r\n
  • \r\n {child.title}\r\n
  • \r\n )\r\n }\r\n return (
  • \r\n {child.title}\r\n
  • );\r\n })\r\n ]\r\n }\r\n return (
  • \r\n {menu.title}\r\n
  • );\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 ESPEasy\r\n
      \r\n {props.menus.map(menu => (this.renderMenuItem(menu)))}\r\n
    \r\n
    \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 > {props.page.pagetitle == null ? props.page.title : props.page.pagetitle}\r\n { props.changed ? (\r\n CHANGED! Click here to SAVE\r\n ) : (null) }\r\n
    \r\n\r\n
    \r\n \r\n
    \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 ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\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 \n
    \n
    \n
    \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 }","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 (
    )\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 \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 \r\n \r\n
    \r\n {this.state.devices.map(device => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}
    \r\n {JSON.stringify(device)}\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 this.file = ref} />\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n \n \n \n \n ); })}\n\n \n
    FileSize
    {file.fileName}{file.size}\n { file.fileName.endsWith('.dat') ? (null) :\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 \r\n this.file = ref} />\r\n \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\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
    \r\n \r\n
    \r\n \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 \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}/>
    \r\n \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 \n {\n Object.keys(value).map((v1, i) => {\n const value1 = value[v1];\n return (\n
    \n \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 this.file = ref} />\n \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 ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\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 \n
    \n
    \n
    \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 {menu.title}\r\n
  • \r\n )\r\n }\r\n if (menu.href === this.props.selected.href) {\r\n return [\r\n (
  • \r\n {menu.title}\r\n
  • ),\r\n ...menu.children.map(child => {\r\n if (child.action) {\r\n return (\r\n
  • \r\n {child.title}\r\n
  • \r\n )\r\n }\r\n return (
  • \r\n {child.title}\r\n
  • );\r\n })\r\n ]\r\n }\r\n return (
  • \r\n {menu.title}\r\n
  • );\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 ESPEasy\r\n
      \r\n {props.menus.map(menu => (this.renderMenuItem(menu)))}\r\n
    \r\n
    \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 > {props.page.pagetitle == null ? props.page.title : props.page.pagetitle}\r\n { props.changed ? (\r\n CHANGED! Click here to SAVE\r\n ) : (null) }\r\n
    \r\n\r\n
    \r\n \r\n
    \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 ) ;\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 \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 (),\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 \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 \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 \r\n \r\n
    \r\n \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 \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 this.file = ref} />\r\n \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}/>
    \r\n \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 \r\n \r\n
    \r\n {this.state.devices.map(device => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}
    \r\n {JSON.stringify(device)}\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 \n {\n Object.keys(value).map((v1, i) => {\n const value1 = value[v1];\n return (\n
    \n \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 this.file = ref} />\n \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 this.file = ref} />\n \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n {this.state.files.map(file => {\n const url = `/${file.fileName}`;\n return (\n \n \n \n \n \n ); })}\n\n \n
    FileSize
    {file.fileName}{file.size}\n { file.fileName.endsWith('.dat') ? (null) :\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 (
    )\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 \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 \n \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 ``; - }; - - switch (cfg.type) { - case 'text': - template.innerHTML = `
    `; - break; - - case 'number': - template.innerHTML = `
    `; - break; - - case 'select': - template.innerHTML = `
    `; - 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 ``; - } -}, { - 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 \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=>``;switch(t.type){case"text":e.innerHTML=`
    `;break;case"number":e.innerHTML=`
    `;break;case"select":e.innerHTML=`
    `;break;case"textselect":e.innerHTML=`
    \n \n \n \n
    `}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``}},{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 ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\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 \n
    \n
    \n
    \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
    \n \n
    \n
      this.tabs = ref}>
    \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
      this.menu = ref}>\n {this.state.pages.map((page, i) => {\n return (
    • {page.title}
    • )\n })}\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 ``;\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 ``;\n }\n\n switch (cfg.type) {\n case 'text':\n template.innerHTML = `
    `;\n break;\n case 'number':\n template.innerHTML = `
    `;\n break;\n case 'select':\n template.innerHTML = `
    `;\n break;\n case 'textselect':\n template.innerHTML = `
    \n \n \n \n
    `\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 \n
    \n
    \n
    \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 ``;\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
      this.menu = ref}>\n {this.state.pages.map((page, i) => {\n return (
    • {page.title}
    • )\n })}\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
    \n \n
    \n
      this.tabs = ref}>
    \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 71bf723d905edf1a7426a34f7afdd15784827440..0e68c5dcd9adc5fe52883cb96efc7d6c82f4f4da 100644 GIT binary patch literal 33799 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%0D-ym)!G)^wN@^<@8PIc}sfU$(|dzn(__i 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 { 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',