@nebularstreams/libmui 0.1.23 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"libui.esm.js","sources":["../node_modules/mithril/render/vnode.js","../node_modules/mithril/render/hyperscriptVnode.js","../node_modules/mithril/util/hasOwn.js","../node_modules/mithril/render/hyperscript.js","../node_modules/mithril/render/trust.js","../node_modules/mithril/render/fragment.js","../node_modules/mithril/hyperscript.js","../node_modules/mithril/render/domFor.js","../node_modules/mithril/render/render.js","../node_modules/mithril/render.js","../node_modules/mithril/api/mount-redraw.js","../node_modules/mithril/mount-redraw.js","../node_modules/mithril/querystring/build.js","../node_modules/mithril/pathname/build.js","../node_modules/mithril/request/request.js","../node_modules/mithril/request.js","../node_modules/mithril/querystring/parse.js","../node_modules/mithril/pathname/parse.js","../node_modules/mithril/pathname/compileTemplate.js","../node_modules/mithril/util/censor.js","../node_modules/mithril/index.js","../node_modules/mithril/route.js","../node_modules/mithril/api/router.js","../src/widgets/Basic.js","../src/util/widgets.utils.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.js","../src/widgets/SwitchWidget.js","../src/util/widgets.js","../src/util/widgets.core.js","../src/util/util.clone.js","../src/widgets/OverflowUtils.js","../src/widgets/Separator.js","../src/util/mithril-range.js","../src/widgets/RangeWidget.js","../src/app/app.js"],"sourcesContent":["\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\tisKeyed && (input[i] != null || typeof input[i] === \"boolean\")\n\t\t\t\t\t\t? \"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.\"\n\t\t\t\t\t\t: \"In fragments, vnodes must either all have keys or none have keys.\"\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril.js requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nmodule.exports = {}.hasOwnProperty\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = Object.create(null)\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\tif (isEmpty(attrs)) attrs = null\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\n\tif (state.attrs != null) {\n\t\tattrs = Object.assign({}, state.attrs, attrs)\n\n\t\tif (className != null || state.attrs.className != null) attrs.className =\n\t\t\tclassName != null\n\t\t\t\t? state.attrs.className != null\n\t\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t\t: className\n\t\t\t\t: state.attrs.className != null\n\t\t\t\t\t? state.attrs.className\n\t\t\t\t\t: null\n\t} else {\n\t\tif (className != null) attrs.className = className\n\t}\n\n\tif (hasClass) attrs.class = null\n\n\t// workaround for #2622 (reorder keys in attrs to set \"type\" first)\n\t// The DOM does things to inputs based on the \"type\", so it needs set first.\n\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\tif (state.tag === \"input\" && hasOwn.call(attrs, \"type\")) {\n\t\tattrs = Object.assign({type: attrs.type}, attrs)\n\t}\n\n\tvnode.attrs = attrs\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar delayedRemoval = new WeakMap\n\nfunction *domFor(vnode, object = {}) {\n\t// To avoid unintended mangling of the internal bundler,\n\t// parameter destructuring is not used here.\n\tvar dom = vnode.dom\n\tvar domSize = vnode.domSize\n\tvar generation = object.generation\n\tif (dom != null) do {\n\t\tvar nextSibling = dom.nextSibling\n\n\t\tif (delayedRemoval.get(dom) === generation) {\n\t\t\tyield dom\n\t\t\tdomSize--\n\t\t}\n\n\t\tdom = nextSibling\n\t}\n\twhile (domSize)\n}\n\nmodule.exports = {\n\tdelayedRemoval: delayedRemoval,\n\tdomFor: domFor,\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar df = require(\"../render/domFor\")\nvar delayedRemoval = df.delayedRemoval\nvar domFor = df.domFor\n\nmodule.exports = function() {\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tvar currentRedraw\n\tvar currentRender\n\n\tfunction getDocument(dom) {\n\t\treturn dom.ownerDocument;\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"'vnode.state' must not be modified.\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement(dom) {\n\t\ttry {\n\t\t\treturn getDocument(dom).activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = getDocument(parent).createTextNode(vnode.children)\n\t\tinsertDOM(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"<td>i</td><td>j</td>\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no <td> in sight.\n\t\tvar temp = getDocument(parent).createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\" + vnode.children + \"</svg>\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvar fragment = getDocument(parent).createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertDOM(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = getDocument(parent).createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertDOM(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? getDocument(parent).createElementNS(ns, tag, {is: is}) : getDocument(parent).createElementNS(ns, tag) :\n\t\t\tis ? getDocument(parent).createElement(tag, {is: is}) : getDocument(parent).createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertDOM(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveDOM(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveDOM(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveDOM(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveDOM(parent, old, undefined)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequence\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This handles fragments with zombie children (removed from vdom, but persisted in DOM through onbeforeremove)\n\tfunction moveDOM(parent, vnode, nextSibling) {\n\t\tif (vnode.dom != null) {\n\t\t\tvar target\n\t\t\tif (vnode.domSize == null) {\n\t\t\t\t// don't allocate for the common case\n\t\t\t\ttarget = vnode.dom\n\t\t\t} else {\n\t\t\t\ttarget = getDocument(parent).createDocumentFragment()\n\t\t\t\tfor (var dom of domFor(vnode)) target.appendChild(dom)\n\t\t\t}\n\t\t\tinsertDOM(parent, target, nextSibling)\n\t\t}\n\t}\n\n\tfunction insertDOM(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted.\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\t\tvar generation\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveDOM(parent, vnode, generation)\n\t\t} else {\n\t\t\tgeneration = currentRender\n\t\t\tfor (var dom of domFor(vnode)) delayedRemoval.set(dom, generation)\n\t\t\tif (stateResult != null) {\n\t\t\t\tstateResult.finally(function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) {\n\t\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\t\tmask &= 2\n\t\t\t\t\t\tif (!mask) {\n\t\t\t\t\t\t\tcheckState(vnode, original)\n\t\t\t\t\t\t\tonremove(vnode)\n\t\t\t\t\t\t\tremoveDOM(parent, vnode, generation)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tattrsResult.finally(function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) {\n\t\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\t\tmask &= 1\n\t\t\t\t\t\tif (!mask) {\n\t\t\t\t\t\t\tcheckState(vnode, original)\n\t\t\t\t\t\t\tonremove(vnode)\n\t\t\t\t\t\t\tremoveDOM(parent, vnode, generation)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\tfunction removeDOM(parent, vnode, generation) {\n\t\tif (vnode.dom == null) return\n\t\tif (vnode.domSize == null) {\n\t\t\t// don't allocate for the common case\n\t\t\tif (delayedRemoval.get(vnode.dom) === generation) parent.removeChild(vnode.dom)\n\t\t} else {\n\t\t\tfor (var dom of domFor(vnode, {generation})) parent.removeChild(dom)\n\t\t}\n\t}\n\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\tvar isFileInput = vnode.tag === \"input\" && vnode.attrs.type === \"file\"\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\t//setting input[type=file][value] to same value causes an error to be generated if it's non-empty\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && (isFileInput || vnode.dom === activeElement(vnode.dom))) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting input[type=file][value] to different value is an error if it's non-empty\n\t\t\t\t// Not ideal, but it at least works around the most common source of uncaught exceptions for now.\n\t\t\t\tif (isFileInput && \"\" + value !== \"\") { console.error(\"`value` is read-only on file inputs!\"); return }\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\tif (vnode.tag === \"input\" && key === \"type\") vnode.dom.setAttribute(key, value)\n\t\t\telse vnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& key !== \"title\" // creates \"null\" as title\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement(vnode.dom)\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (old && old === attrs) {\n\t\t\tconsole.warn(\"Don't reuse attrs object, use new object for every redraw, this will throw in next major\")\n\t\t}\n\t\tif (attrs != null) {\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement(vnode.dom) || vnode.tag === \"option\" && vnode.dom.parentNode === activeElement(vnode.dom)\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) {\n\t\t\t\t\tif (key.includes(\"-\")) element.style.setProperty(key, String(value))\n\t\t\t\t\telse element.style[key] = String(value)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\tif (key.includes(\"-\")) element.style.setProperty(key, value)\n\t\t\t\t\telse element.style[key] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\tif (key.includes(\"-\")) element.style.removeProperty(key)\n\t\t\t\t\telse element.style[key] = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tvnode.events._ = currentRedraw\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\tvar currentDOM\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\t\tif (currentDOM != null && dom.contains(currentDOM)) {\n\t\t\tthrow new TypeError(\"Node is currently being rendered to and thus is locked.\")\n\t\t}\n\t\tvar prevRedraw = currentRedraw\n\t\tvar prevDOM = currentDOM\n\t\tvar hooks = []\n\t\tvar active = activeElement(dom)\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\tcurrentRender = {}\n\t\ttry {\n\t\t\t// First time rendering into a node clears it out\n\t\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\t\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t\tdom.vnodes = vnodes\n\t\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\t\tif (active != null && activeElement(dom) !== active && typeof active.focus === \"function\") active.focus()\n\t\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t\tcurrentDOM = prevDOM\n\t\t}\n\t}\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(typeof window !== \"undefined\" ? window : null)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar pending = false\n\tvar offset = -1\n\n\tfunction sync() {\n\t\tfor (offset = 0; offset < subscriptions.length; offset += 2) {\n\t\t\ttry { render(subscriptions[offset], Vnode(subscriptions[offset + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\toffset = -1\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount expects a component, not a vnode.\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\tif (index <= offset) offset -= 2\n\t\t\trender(root, [])\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : null, typeof console !== \"undefined\" ? console : null)\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names must be separated by either a '/', '-', or '.'.\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tObject.assign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nmodule.exports = function($window, oncompletion) {\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\tfunction makeRequest(url, args) {\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\turl = buildPathname(url, args.params)\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData || body instanceof $window.URLSearchParams)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false, isTimeout = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, \"content-type\")) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, \"accept\")) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif (hasOwn.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") {\n\t\t\t\t\t\t\t\t// Handle no-content which will not parse.\n\t\t\t\t\t\t\t\ttry { response = JSON.parse(ev.target.responseText) }\n\t\t\t\t\t\t\t\tcatch (e) { response = null }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (success) {\n\t\t\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\t\t\tif (Array.isArray(response)) {\n\t\t\t\t\t\t\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\t\t\t\t\t\t\tresponse[i] = new args.type(response[i])\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse response = new args.type(response)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar completeErrorResponse = function() {\n\t\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (xhr.status === 0) {\n\t\t\t\t\t\t\t\t// Use setTimeout to push this code block onto the event queue\n\t\t\t\t\t\t\t\t// This allows `xhr.ontimeout` to run in the case that there is a timeout\n\t\t\t\t\t\t\t\t// Without this setTimeout, `xhr.ontimeout` doesn't have a chance to reject\n\t\t\t\t\t\t\t\t// as `xhr.onreadystatechange` will run before it\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif (isTimeout) return\n\t\t\t\t\t\t\t\t\tcompleteErrorResponse()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else completeErrorResponse()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.ontimeout = function (ev) {\n\t\t\t\tisTimeout = true\n\t\t\t\tvar error = new Error(\"Request timed out\")\n\t\t\t\terror.code = ev.target.status\n\t\t\t\treject(error)\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData || body instanceof $window.URLSearchParams) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t})\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif (hasOwn.call(args.headers, key) && key.toLowerCase() === name) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = makeRequest(url, args)\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n}\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, mountRedraw.redraw)\n","\"use strict\"\n\nfunction decodeURIComponentSave(str) {\n\ttry {\n\t\treturn decodeURIComponent(str)\n\t} catch(err) {\n\t\treturn str\n\t}\n}\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponentSave(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponentSave(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\n// Note: this is mildly perf-sensitive.\n//\n// It does *not* use `delete` - dynamic `delete`s usually cause objects to bail\n// out into dictionary mode and just generally cause a bunch of optimization\n// issues within engines.\n//\n// Ideally, I would've preferred to do this, if it weren't for the optimization\n// issues:\n//\n// ```js\n// const hasOwn = require(\"./hasOwn\")\n// const magic = [\n// \"key\", \"oninit\", \"oncreate\", \"onbeforeupdate\", \"onupdate\",\n// \"onbeforeremove\", \"onremove\",\n// ]\n// module.exports = (attrs, extras) => {\n// const result = Object.assign(Object.create(null), attrs)\n// for (const key of magic) delete result[key]\n// if (extras != null) for (const key of extras) delete result[key]\n// return result\n// }\n// ```\n\nvar hasOwn = require(\"./hasOwn\")\n// Words in RegExp literals are sometimes mangled incorrectly by the internal bundler, so use RegExp().\nvar magic = new RegExp(\"^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$\")\n\nmodule.exports = function(attrs, extras) {\n\tvar result = {}\n\n\tif (extras != null) {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key) && extras.indexOf(key) < 0) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key)) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\nvar domFor = require(\"./render/domFor\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.Fragment = \"[\"\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.censor = require(\"./util/censor\")\nm.domFor = domFor.domFor\n\nmodule.exports = m\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar censor = require(\"../util/censor\")\n\nvar sentinel = {}\n\nfunction decodeURIComponentSave(component) {\n\ttry {\n\t\treturn decodeURIComponent(component)\n\t} catch(e) {\n\t\treturn component\n\t}\n}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar callAsync = $window == null\n\t\t// In case Mithril.js' loaded globally without the DOM, let's not break\n\t\t? null\n\t\t: typeof $window.setImmediate === \"function\" ? $window.setImmediate : $window.setTimeout\n\tvar p = Promise.resolve()\n\n\tvar scheduled = false\n\n\t// state === 0: init\n\t// state === 1: scheduled\n\t// state === 2: done\n\tvar ready = false\n\tvar state = 0\n\n\tvar compiled, fallbackRoute\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar RouterRoot = {\n\t\tonbeforeupdate: function() {\n\t\t\tstate = state ? 2 : 1\n\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t},\n\t\tonremove: function() {\n\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t},\n\t\tview: function() {\n\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\treturn vnode\n\t\t},\n\t}\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction resolveRoute() {\n\t\tscheduled = false\n\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t// but that's not our problem.\n\t\tvar prefix = $window.location.hash\n\t\tif (route.prefix[0] !== \"#\") {\n\t\t\tprefix = $window.location.search + prefix\n\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t}\n\t\t}\n\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t// since the representation is consistently a relatively poorly\n\t\t// optimized cons string.\n\t\tvar path = prefix.concat()\n\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponentSave)\n\t\t\t.slice(route.prefix.length)\n\t\tvar data = parsePathname(path)\n\n\t\tObject.assign(data.params, $window.history.state)\n\n\t\tfunction reject(e) {\n\t\t\tconsole.error(e)\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\n\t\tloop(0)\n\t\tfunction loop(i) {\n\t\t\t// state === 0: init\n\t\t\t// state === 1: scheduled\n\t\t\t// state === 2: done\n\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\tvar localComp = payload\n\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t}).then(update, path === fallbackRoute ? null : reject)\n\t\t\t\t\t}\n\t\t\t\t\telse update(\"div\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path === fallbackRoute) {\n\t\t\t\tthrow new Error(\"Could not resolve default route \" + fallbackRoute + \".\")\n\t\t\t}\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\t}\n\n\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t// cleared if `hashchange` is used, since that makes it automatically\n\t// async.\n\tfunction fireAsync() {\n\t\tif (!scheduled) {\n\t\t\tscheduled = true\n\t\t\t// TODO: just do `mountRedraw.redraw()` here and elide the timer\n\t\t\t// dependency. Note that this will muck with tests a *lot*, so it's\n\t\t\t// not as easy of a change as it sounds.\n\t\t\tcallAsync(resolveRoute)\n\t\t}\n\t}\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (ready) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (!root) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\n\t\tcompiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a '/'.\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either '/', '.', or '-'.\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tfallbackRoute = defaultRoute\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes.\")\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\tready = true\n\t\tmountRedraw.mount(root, RouterRoot)\n\t\tresolveRoute()\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\t// Omit the used parameters from the rendered element - they are\n\t\t\t// internal. Also, censor the various lifecycle methods.\n\t\t\t//\n\t\t\t// We don't strip the other parameters because for convenience we\n\t\t\t// let them be specified in the selector as well.\n\t\t\tvar child = m(\n\t\t\t\tvnode.attrs.selector || \"a\",\n\t\t\t\tcensor(vnode.attrs, [\"options\", \"params\", \"selector\", \"onclick\"]),\n\t\t\t\tvnode.children\n\t\t\t)\n\t\t\tvar options, onclick, href\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want add `onclick` on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t} else {\n\t\t\t\toptions = vnode.attrs.options\n\t\t\t\tonclick = vnode.attrs.onclick\n\t\t\t\t// Easier to build it now to keep it isomorphic.\n\t\t\t\thref = buildPathname(child.attrs.href, vnode.attrs.params)\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","import m from \"mithril\";\n\n// ------------------------------------------------------------------------\n\nfunction getAttrs(attrs, parentAttrs, panelInitialParams) {\n const data = ((typeof attrs === \"function\") ? attrs(parentAttrs) : attrs) || {};\n if (panelInitialParams) data.initialParams = panelInitialParams;\n return data;\n}\n\nconst\n\n isCurrent = ({currentIndex}, index) => currentIndex === index,\n\n Icon = {\n view: ({attrs}) => m(\n `i.icon.${attrs.pack || \"fas\"}.fa-${attrs.icon || \"cog\"}${attrs.size ? \".fa-\" + attrs.size + \"x\" : \"\"}`,\n {\n title: attrs.icontitle || undefined,\n role: \"presentation\",\n onclick: attrs.onclick || null, ...attrs.iconClass && {class: attrs.iconClass}\n }\n )\n },\n\n Button = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onclick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onclick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n ButtonNew = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {rel: \"nofollow\", download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onClick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onClick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n Empty = {\n\n view: ({attrs, children}) => m(\n \".flexcol.flexcenter.al-center.grows.emptywidget\",\n {\n ...attrs.class && {class: attrs.class},\n ...attrs.key && {key: attrs.key},\n role: \"presentation\"\n },\n [\n m(Icon, attrs),\n ...attrs.message\n ? [\n m(\".marg-2.marg-v\",\n {\n role: \"status\",\n class: attrs.size > 4 ? \"font-150\" : \"font-100\",\n \"aria-label\": attrs.message\n },\n attrs.message.split(\"\\n\")\n .map((str, idx, all) => all.length === 1 ? str : m(\"p.msg\" + idx, str))\n )\n ]\n : [],\n ...children\n ? [m(\".flexcol.additional\", children)]\n : []\n ]\n )\n },\n\n setItem = (attrs, state, index, params) => {\n\n\n const\n lastIndex = state.currentIndex,\n lastParams = state.currentParams;\n\n if (index === -1) {\n Object.assign(state, {\n current: null,\n currentIndex: -1,\n currentParams: []\n });\n } else {\n Object.assign(state, {\n current: attrs.items[index] || null,\n currentIndex: state.current ? index : -1,\n currentParams: params || []\n });\n }\n\n if (attrs.onSelected) attrs.onSelected(state.current, state.currentParams, state.currentIndex !== lastIndex, lastParams);\n\n m.redraw();\n },\n\n Selector = {\n\n oninit: ({attrs, state}) => {\n\n state = attrs.state || state;\n state.setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n\n const\n hasState = !isNaN(state.currentIndex),\n selected = hasState ? state.currentIndex : attrs.selected,\n currentIndex = (attrs.items && attrs.items.length)\n ? (selected !== undefined && attrs.items[selected])\n ? selected\n : attrs.noinitial ? -1 : 0\n : -1,\n current = currentIndex !== -1 ? attrs.items[currentIndex] : null;\n\n Object.assign(state, {currentIndex, current});\n\n },\n\n onupdate: ({attrs, state}) => {\n (attrs.state || state).setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n },\n\n view: ({attrs, state}) => {\n\n state = attrs.state || state;\n const {current} = state;\n\n return m(\n (attrs.element || \"widget\") + \".selector\" + (attrs.horizontal ? \".flexrow\" : \".flexcol\") + (attrs.className ? \".\" + attrs.className : \"\"),\n {\n ...attrs.key && {key: attrs.key},\n class: (state.current ? \"hascurrent\" : \"empty\") + (attrs.class ? \" \" + attrs.class : \"\")\n },\n [\n ...((!attrs.hideonly || (attrs.items.length > 1)) && (!attrs.hidesel))\n ? [\n /** navigation bar */\n m(\n \"nav.toolbar.fullwidth\" + (attrs.horizontal ? \".flexcol\" : \".flexrow\"),\n {\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || \"selector\",\n class: attrs.toolbarClass\n },\n attrs.items.map((item, index) => m(Button, {\n class: (item.class ? item.class + \" \" : \"\") + (isCurrent(state, index) ? \"accent\" : \"nel\"),\n icon: item.icon || null,\n ...item.title && {title: item.title},\n ...item[\"aria-label\"] && {\"aria-label\": item[\"aria-label\"]},\n ...item.text && {text: item.text},\n onclick: () => {\n const t = Date.now();\n if (t - state.clickts < 200) return;\n state.clickts = Date.now();\n state.bodyHidden = false;\n state.setItem(index);\n }\n }))\n )]\n : [],\n ...current\n ? [\n ...(attrs.toggle && !state.bodyHidden)\n ? [\n m(ButtonNew, {\n class: \"selectornotch \" + (state.bodyHidden ? \"bodyhidden\" : \"bodyshown\"),\n icon: state.bodyHidden ? \"caret-up\" : \"caret-down\",\n title: state.bodyHidden ? \"expand panel\" : \"contract panel\",\n onClick: () => {\n state.bodyHidden = !state.bodyHidden;\n m.redraw();\n }\n })\n ] : [],\n ...(!attrs.toggle || !state.bodyHidden)\n ? [\n /** body */\n m(\".grows.flexcol.ohidden\", {class: attrs.bodyClass, role: \"presentation\"}, [\n m(\n current.widget,\n getAttrs(current.attrs, attrs, state.currentParams),\n current.children\n )\n ])\n ]\n : [],\n ...attrs.closeButton\n ? [\n m(Button, {\n class: \"closebutton absolute toright\",\n icon: \"times\",\n onclick: () => {\n state.setItem(-1);\n },\n \"aria-label\": \"close item\"\n })] : []\n ]\n : m(Empty, attrs)\n ]\n );\n }\n };\n\nconst ICONS = {\n info: \"info\",\n error: \"exclamation-triangle\",\n success: \"check\"\n};\n\nfunction Notifications(TOAST_SHORT = 5000, altContainer) {\n\n let\n mNotifications = [],\n mTimer;\n\n function render(container, n) {\n m.render(\n container, m(\n Button, {\n class: \"notification \" + n.type,\n text: n.text,\n icon: ICONS[n.type] || \"info\",\n size: 1,\n role: \"status\",\n // eslint-disable-next-line no-use-before-define\n onclick: next\n }\n )\n );\n }\n\n function next() {\n\n const\n container = altContainer || document.getElementById(\"notification-container\");\n\n if (mNotifications.length) {\n const n = mNotifications.splice(0, 1)[0];\n render(container, n);\n clearTimeout(mTimer);\n mTimer = setTimeout(next, n.timer || TOAST_SHORT);\n } else {\n m.render(container, \"\");\n mTimer = null;\n }\n }\n\n return {\n add: (text, type) => {\n mNotifications.push({\n text,\n type\n });\n if (!mTimer) next();\n },\n clear: () => {\n mNotifications = [];\n next();\n }\n\n };\n}\n\nconst Notification = new Notifications();\n\nexport {\n Empty,\n Icon,\n Selector,\n Button,\n ButtonNew,\n Notification\n}\n","export default function defineWidget (view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {ButtonNew} from \"./Basic\";\n\nconst\n globalState = {},\n CARDIE_CLOSED = 0;\n\nfunction setCardStatus(cardid, expanded = CARDIE_CLOSED) {\n if (cardid) {\n const [uniq, subname] = cardid.split(\"-\");\n if (expanded && uniq && subname) {\n Object.keys(globalState)\n .forEach((key) => {\n if (key.startsWith(uniq + \"-\")) {\n globalState[key] = CARDIE_CLOSED;\n }\n });\n }\n globalState[cardid] = expanded;\n }\n}\n\nconst CardieWidget = defineWidget(\n ({attrs, state, children}) => {\n\n const\n\n {\n nofold,\n cardid,\n size,\n title,\n action,\n collapsedAction,\n collapsedClass,\n expandedClass,\n cols,\n element,\n busy,\n expandedView,\n collapsedView,\n titleWidget: titWidget,\n titleAttrs,\n titleClass,\n bodyClass,\n titleExpanded,\n titleCollapsed\n } = attrs,\n\n collapsed = nofold\n ? false\n : cardid\n ? !globalState[cardid]\n : !!state.collapsed,\n\n items = (!collapsed)\n ? (\n expandedView\n ? expandedView(attrs, state)\n : (children || [])\n )\n : collapsedView ? collapsedView(attrs, state) : [],\n\n titleWidget = titWidget\n ? m(titWidget, titleAttrs || {})\n : title ? m(\"span.ellipsis.ohidden.unfold\", title) : undefined,\n\n buttonClass = busy\n ? \"fa-sync\"\n : `fa-caret-down ${collapsed ? \"iscollapsed\" : \"isexpanded\"}`;\n\n return items.length || !attrs.skipEmpty\n ? m(\n (element || \"ul\"),\n {\n class: \"cardie ohidden noshrink \"\n + (cols ? \"flexcol \" : \"flexrow wrap \")\n + (attrs.class ? \" \" + attrs.class : \"\")\n + (nofold\n ? \" expanded\"\n : ` ${collapsed ? \"collapsed \" + (collapsedClass || \"\") : \"expanded \" + (expandedClass || \"\")}`)\n + (size ? \" marg-\" + size : \" marg-2\")\n + (titWidget ? \" withwidget\" : \"\")\n + (busy ? \" busycard\" : \"\")\n },\n [\n\n ...titleWidget\n ? [\n m(\n \".title.grows.fabf.flexrow.pointer.unfold\",\n nofold\n ? {\n class: titleClass || \"pad-2\"\n }\n : {\n class: `${titleClass || \"pad-2\"} ${buttonClass || \"\"}`,\n\n title: collapsed\n ? (titleCollapsed || \"Click to expand the options\")\n : (titleExpanded || titleCollapsed || \"Click to collapse the options\"),\n\n onclick: (e) => {\n\n if (e.target.classList.contains(\"unfold\")) {\n if (e.shiftKey && attrs.onShiftOpen) {\n attrs.onShiftOpen();\n } else if (attrs.cardid) {\n setCardStatus(cardid, collapsed); // !state\n } else {\n state.collapsed = !state.collapsed;\n }\n\n m.redraw();\n }\n }\n },\n action && (nofold || !collapsed)\n ? [\n m(ButtonNew, action),\n titleWidget\n ]\n : collapsedAction && collapsed\n ? [\n m(ButtonNew, collapsedAction),\n titleWidget\n ]\n : titleWidget\n )\n ]\n : [],\n\n ...items.length\n ? [\n m(\".flexbreak\"),\n m(\n \".cardiebody.fadein-filter.grows\",\n {\n class: (cols ? \"flexcol \" : \"flexrow wrap\") + \" \" + (bodyClass || \"\")\n },\n ...items\n )\n ] : [],\n\n ...(attrs.alwaysView\n ? [attrs.alwaysView({attrs, state})]\n : [])\n\n ]\n ) : [];\n },\n ({attrs, state}) => {\n if (!attrs.cardid) {\n state.collapsed = attrs.nofold\n ? false\n : attrs.cardid\n ? !globalState[attrs.cardid]\n : !!attrs.collapsed;\n }\n },\n undefined,\n undefined,\n undefined,\n {setCardStatus}\n);\n\nexport default CardieWidget;","import m from \"mithril\";\nimport {ButtonNew} from \"./Basic\";\n\n/* eslint-disable no-prototype-builtins,no-nested-ternary */\n/* global m, Hammer */\n\nconst\n\n getInput = (attrs, value, parse = false) => {\n if (parse || attrs.type === \"number\") {\n const val = attrs.float ? Number.parseFloat(value) : Number.parseInt(value, 10);\n return Number.isNaN(val) ? undefined : val;\n }\n return value;\n },\n getValue = (attrs, state, parse) => {\n const lastVal = state.hasOwnProperty(\"value\") ? state.value : attrs.value;\n return getInput(attrs, lastVal, parse);\n },\n /*\n hammer = new Hammer.Manager(dom, { touchAction: \"pan-y\" }),\n panner = new Hammer.Pan({ direction: Hammer.DIRECTION_VERTICAL }),\n singleTap = listenTap && new Hammer.Tap();\n\n hammer.add(listenTap ? [panner, singleTap] : [panner]);\n hammer.on(\"panstart\", (e) => {\n\n */\n\n StaticFieldWidget = {\n view: (vnode) => {\n const {attrs, state} = vnode;\n // este vnode NO es el mismo que el del hammer, pero su estado SI !\n state.attrs = attrs; // guardamos una copia de los ultimos attrs en el estado\n\n return m(\n \".input-static.w-100.ellipsis\",\n {\n class: (attrs.onDrag ? \"withdrag \" : \"\") + (attrs.staticClass || \"grows\"),\n ...attrs.staticTitle && {title: attrs.staticTitle},\n ...attrs.onDrag || {onclick: attrs.onClick},\n oncreate: ({dom, state}) => {\n\n if (attrs.onDrag && !attrs.readonly) {\n\n const\n hammer = state.hammer = new Hammer.Manager(dom, {touchAction: \"pan-y\"}),\n panner = new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL}),\n singleTap = new Hammer.Tap();\n\n hammer.add([panner, singleTap]);\n hammer.on(\"tap\", () => vnode.state.attrs.onClick());\n hammer.on(\"panup\", (e) => vnode.state.attrs.onDrag(-1, e.srcEvent));\n hammer.on(\"pandown\", (e) => vnode.state.attrs.onDrag(1, e.srcEvent));\n hammer.on(\"panend pancancel\", (e) => vnode.state.attrs.onDrag(0, e.srcEvent));\n }\n if (attrs.focus) {\n dom.focus();\n }\n },\n onremove: ({state}) => {\n state.hammer && state.hammer.destroy();\n }\n },\n attrs.value\n );\n }\n },\n InputWidget = {\n view: ({attrs, state}) => {\n const reset = (redraw) => {\n // if (state.value !== undefined && state.showInput) delete state.showInput;\n if (state.value && state.showInput) delete state.showInput;\n delete state.value;\n if (redraw) m.redraw();\n };\n return m(\n \".textfield.flexcol.relative\",\n {\n class: (attrs.label ? \"witharia\" : \"\") + (attrs.containerClass ? \" \" + attrs.containerClass : \"\"),\n ...attrs.label && {\"aria-label\": attrs.label}\n },\n [\n (attrs.staticField && (attrs.readonly || !state.showInput))\n ? m(StaticFieldWidget, {\n readonly: attrs.readonly,\n staticClass: (state.dragging ? \"accent \" : \"\") + (attrs.staticClass || \"\"),\n staticTitle: attrs.staticTitle || attrs.draginc && \"Click then drag up and down to modify value, or just click to enter a custom value\",\n value: attrs.displayTitle || getValue(attrs, state),\n focus: attrs.focus,\n ...attrs.draginc && !attrs.readonly && {\n onDrag: (direction, event) => {\n if (direction) {\n state.dragging = true;\n let value = getValue(attrs, state, true);\n if (Number.isNaN(value) || value === undefined) return;\n value += direction * attrs.draginc;\n if (attrs.max !== undefined && value > attrs.max) value = attrs.max;\n if (attrs.min !== undefined && value < attrs.min) value = attrs.min;\n state.value = attrs.type === \"number\" ? value : String(value);\n attrs.onchange(state.value, event);\n } else {\n delete state.dragging;\n delete state.value;\n m.redraw();\n }\n }\n },\n ...attrs.readonly || {\n onClick: () => {\n state.showInput = true;\n state.value = attrs.value;\n m.redraw();\n }\n }\n })\n\n : ((state.multi || attrs.alwaysmulti) && (!attrs.type || attrs.type === \"text\"))\n ? m(\"textarea.w-100\", {\n class: attrs.class,\n value: getValue(attrs, state),\n ...attrs.title && {title: attrs.title},\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event, true);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n const value = getInput(attrs, event.target.value);\n reset(false);\n attrs.onchange(value, event, true);\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (event.key === \"Escape\" && state.showInput) {\n reset(false);\n }\n }\n })\n : m(\"input.w-100\", {\n ...attrs.id && {id: attrs.id},\n type: attrs.type || \"text\",\n ...attrs.max !== undefined && {max: attrs.max},\n ...attrs.min !== undefined && {min: attrs.min},\n ...attrs.step > 0 && {step: attrs.step},\n ...attrs.maxlength && {maxlength: attrs.maxlength},\n class: (attrs.class || \"\") + (attrs.validator ? state.isValid ? \" bg-ok\" : \" bg-error\" : \"\"),\n ...attrs.title && {title: attrs.title},\n value: getValue(attrs, state),\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n event.fromoninput = true;\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n event.enterPressed = state.enterPressed;\n delete state.enterPressed;\n attrs.onchange(getInput(attrs, event.target.value), event);\n if (attrs.staticField) {\n reset(true);\n } else {\n delete state.value;\n }\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (state.showInput) {\n if (event.key === \"Escape\") {\n reset(true);\n } else if (event.key === \"Enter\") {\n if (state.value === attrs.value || !state.value) {\n attrs.onchange(attrs.value, event);\n reset(true);\n }\n }\n }\n },\n onkeypress: (event) => {\n if (!state.showInput && event.key === \"Enter\") {\n attrs.onenter && attrs.onenter(event.target.value, event);\n }\n }\n }),\n\n m(\".span.actions.absolute.right.bottom\", [\n ...(attrs.multi && !attrs.alwaysmulti && (!attrs.type || attrs.type === \"text\"))\n ? [\n m(ButtonNew, {\n icon: state.multi ? \"angle-double-up\" : \"angle-double-down\",\n class: \"pad-2 transp\",\n onClick: () => {\n state.multi = !state.multi;\n m.redraw();\n }\n })\n ]\n : [],\n ...attrs.actions ? attrs.actions.map((action) => m(ButtonNew, {\n ...action,\n class: \"transp pad-2\"\n })) : [],\n ...attrs.action\n ? [\n m(ButtonNew, {...attrs.action, class: \"transp pad-2\"})\n ] : []\n ])\n ]);\n },\n oninit: ({attrs, state}) => {\n if (attrs.staticField && attrs.draginc) {\n const value = getValue(attrs, state, true);\n state.showInput = (Number.isNaN(value) || value === undefined || value === null);\n }\n }\n };\n\nexport default InputWidget;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n NoticeWidget = defineWidget(\n ({attrs, children}) => (\n children.length\n ? m(\n \".notice.cardie.flexcol.pad-3\",\n {class: attrs.class || \"marg-2 font-75\"},\n m(\n \".flexrow\",\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n ),\n ...children\n )\n : m(\n \".notice.cardie.flexrow.pad-3\",\n {class: attrs.class || \"marg-2 font-75\", onclick: attrs.onClick},\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n )\n )\n );\n\nexport default NoticeWidget;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n SwitchWidget = defineWidget(\n ({attrs, state}) => m((attrs.unit || \"\") + \".flexrow\" + (attrs.subline ? \" withsubline\" : \"\"),\n {\n class: attrs.class,\n text: attrs.text,\n title: attrs.title || null,\n onclick: () => {\n state.checked = !state.checked;\n if (attrs.onchange) {\n attrs.onchange(state.checked);\n }\n m.redraw();\n }\n },\n attrs.right\n ? [\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : [],\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"})\n ]\n : [\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"}),\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : []\n ]),\n ({attrs, state}) => {\n state.checked = state.original = attrs.checked;\n },\n null,\n null,\n ({attrs, state}) => {\n if (attrs.checked !== state.original) {\n state.checked = state.original = attrs.checked;\n m.redraw();\n }\n }\n );\n\nexport default SwitchWidget;","import m from \"mithril\";\n\nlet\n\tmCurrentCancelable;\n\nfunction runCancelable(container) {\n\tif (typeof mCurrentCancelable === \"function\") {\n\t\tmCurrentCancelable();\n\t\tmCurrentCancelable = undefined;\n\t}\n\tcontainer.style.display = \"none\";\n\tdelete popupMessage.redraw;\n}\n\n// There are ways of doing this inside m.route but it is probably\n// cleaner and faster when kept outside of the main auto\n// rendering system\n\nfunction popupMessage(message, cancelable = false, contentClass = \".modal-content\") {\n\n\tconst container = document.getElementById(\"modal-container\");\n\tcontainer.classList.toggle(\"iscustom\", contentClass !== \".modal-content\");\n\n\tif (cancelable) {\n\n\t\tmCurrentCancelable = cancelable;\n\n\t\tcontainer.onclick = (event) => {\n\t\t\tif (event.target.id === \"modal-container\") {\n\t\t\t\trunCancelable(container);\n\t\t\t}\n\t\t};\n\t}\n\n\tif (!message) {\n\t\tdelete popupMessage.redraw;\n\t\tif (message === null)\n\t\t\tcontainer.style.display = \"none\";\n\t\telse\n\t\t\trunCancelable(container);\n\n\t\treturn;\n\t}\n\n\tcontainer.style.display = \"flex\";\n\n\tpopupMessage.redraw = () => {\n\t\tm.render(\n\t\t\tcontainer,\n\t\t\tm(contentClass, {\n\t\t\t\trole: \"alertdialog\",\n\t\t\t\t\"aria-labelledby\": \"modaltitle\",\n\t\t\t\t\"aria-modal\": true\n\t\t\t}, [\n\t\t\t\ttypeof message === \"function\" ? message() : message\n\t\t\t])\n\t\t);\n\t};\n\n\tpopupMessage.redraw();\n}\n\nfunction clearModal() {\n\tconst container = document.getElementById(\"modal-container\");\n\tif (container.style.display !== \"none\") {\n\t\trunCancelable(container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport { popupMessage, clearModal };\n","/* eslint-disable no-nested-ternary */\n/**\n * Basic Mithril Widget functions\n * Provides some utilities and basic UI functions like an Alert or a Confirmation dialog\n *\n * @author Rodolfo Lopez Pintor, 2020 <rlp@nebular.tv>\n * @module apps.widgets.basic\n *\n */\nimport m from \"mithril\";\nimport * as widget from \"./widgets\";\nimport * as Tokenizer from \"./util.tokenizer\";\nimport {Button, Empty} from \"../widgets/Basic\";\n\n/**\n *\n * Computes a Class String\n *\n * @param {string} initials INitial CSS Classes\n * @param {Object<string, boolean>} clases New classes dictionary\n * @return {string} The CSS Class expression like .class1.class2.class3\n * @public\n * @static\n */\n\nconst packClassString = (initials, clases) => {\n const finals = [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(\".\" + cla);\n return (initials || \"\") + finals.join(\"\");\n};\n\n\nconst packClass = (initials, clases) => {\n const finals = initials ? [initials] : [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(cla);\n return finals.join(\" \");\n};\n\n/**\n * Shows a modal confirm dialog\n * @param {string} title The dialog title\n * @param {string} message The dialog message\n * @param {Array} buttons Buttons to display\n * @param {Object=} options noCancel: dialog is uncanellable\n * @public\n * @static\n */\n\nfunction Confirm(title, message,\n buttons = [\"CANCEL\", \"OK\"], options = {}\n) {\n widget.popupMessage(\n m(\n {\n view: () => [\n ...title ? [m(\"h3\", title)] : [],\n ...message ? [m(\"h4\", message)] : [],\n m(\".container\",\n buttons.map(\n option => m(\n \"button\",\n {\n onclick: () => {\n document.getElementById(\"modal-container\").style.display = \"none\";\n if (option.onclick) option.onclick(option.caption);\n }\n },\n option.caption || \"OK\"\n )\n ))\n ]\n },\n {}\n ),\n options.onCancel || !options.noCancel\n );\n}\n\nfunction ConfirmPromise(title, message, actions, isModal = false) {\n\n let onCancel = undefined;\n\n if (typeof isModal === \"function\") {\n onCancel = isModal;\n isModal = false;\n }\n\n return new Promise((resolve) => {\n\n const opts = actions.map((name, idx) => ({\n caption: name,\n onclick: () => resolve({\n idx,\n name\n })\n }));\n\n Confirm(title, message, opts, {\n onCancel,\n noCancel: isModal\n });\n });\n}\n\n/**\n * Shows An Alert Modal Dialog\n * @param {string} title Dialog Title\n * @param {string} message Dialog Message\n * @param {string?} caption Button caption\n * @param {function?} onclick On press handler\n * @public\n * @static\n */\n\nfunction Alert(title, message, caption, onclick) {\n return Confirm(title, message, [{caption, onclick}]);\n}\n\n\nfunction OverflowMenu(domItem, item, actions, options) {\n\n return new Promise((resolve) => {\n\n options = options || {};\n\n function closeResolve(value) {\n widget.popupMessage(null);\n try {\n resolve(value);\n } catch (e) {\n //\n }\n }\n\n const\n classes = packClassString(\".popup.flexcol\", {\n \".favlist\": options.favlist,\n \".isfav\": domItem && domItem.classList.contains(\"isfav\"),\n \".isplay\": domItem && domItem.classList.contains(\"selected\")\n });\n\n widget.popupMessage(\n m({\n view: () => m(\n classes,\n {\n onclick: (event) => {\n\n if (event.target.nodeName === \"INPUT\") {\n return;\n }\n\n const\n action = event.target.getAttribute(\"data-action\");\n\n if (action) {\n closeResolve({\n domItem,\n item,\n action\n });\n } else {\n widget.popupMessage(null);\n }\n }\n },\n [\n ...item.title ? [m(\"h3\", {id: \"modaltitle\"}, item.title)] : [],\n ...actions.map(action => (action.type === \"text\"\n ? m(\n \"input.action\",\n {\n value: action.value || \"\",\n type: \"text\",\n placeholder: action.hint || \"\",\n oncreate: ({dom}) => dom.focus(),\n onkeyup: (ev) => {\n if (ev.keyCode === 27) {\n closeResolve({domItem, item, action});\n }\n },\n onchange: (ev) => {\n ev.target.blur();\n closeResolve({\n domItem,\n item,\n action,\n value: ev.target.value\n });\n }\n }\n )\n : m(\n Button,\n {\n ...action,\n onclick: () => closeResolve({\n domItem,\n item,\n action\n })\n },\n action.caption\n )))\n ]\n )\n }),\n true\n );\n });\n}\n\n/**\n * Creates an HTML UL/LI structure with the object properties\n * @param {Object} object An object to render\n * @param {RenderOptions?} options\n * @param {Object[]} children additional vnodes\n * @param {string} recurse parent key\n * @param isArrayChild\n * @return {m} The rendered view\n * @public\n * @static\n */\n\nfunction RenderObject(object, options, children, recurse, isArrayChild = false) {\n\n // noinspection JSValidateTypes\n options = options || {};\n const {arrayClass = \"isarray\", arrayChildClass = \"ischildren\", objectClass = \"isobject\"} = options;\n\n return m(\n \"ul\",\n {\n ...(options.attrs || {}),\n class: options.class\n },\n object\n ? [\n ...(options.keys || Object.keys(object))\n .map((key) => {\n\n const\n value = object[key] || null,\n isObject = value !== null && (typeof value === \"object\"),\n isArray = isObject && value.length,\n fullkey = (recurse ? recurse + \"_\" : \"\") + key;\n\n return m(\n \"li.field_\" + (options.start || \"\") + fullkey,\n {\n class: (isArray ? arrayClass : isObject ? (objectClass + \" \") : \"\") + (isArrayChild ? arrayChildClass : \"\"),\n \"data-title\": options.titles ? options.titles[key] || key : key,\n ...(options.itemAttrs || {})\n },\n // eslint-disable-next-line\n isObject\n ? [\n m(\".subvalues\",\n RenderObject(\n value,\n {\n ...options,\n keys: null\n },\n null,\n (recurse ? recurse + \"_\" : \"\") + key,\n isArray\n ))]\n : (\n (options.renderer && options.renderer[fullkey])\n ? options.renderer[fullkey](value)\n : m(\"span.value\", object[key])\n )\n );\n }),\n ...children || []\n ]\n : [\n m(\".empty\", {})\n ]\n );\n\n}\n\n\nconst\n JSONWidget = {\n view:\n ({attrs, children}) => {\n let object;\n try {\n object = attrs.pointer\n ? Tokenizer.getPointedData(attrs.object, attrs.pointer)\n : attrs.object;\n } catch (e) {\n return m(Empty, {message: e.message, ...attrs});\n }\n\n return object\n ? RenderObject(object, attrs, children)\n : m(Empty, attrs);\n }\n };\n\n// noinspection JSUnusedGlobalSymbols\nexport {\n Alert,\n Confirm,\n ConfirmPromise,\n RenderObject,\n OverflowMenu,\n JSONWidget,\n packClass\n}\n","const\n ENABLE_SCLONE = true, // atm SLOWER than JSON\n softClone = (o) => JSON.parse(JSON.stringify(o)),\n clone = window.structuredClone && ENABLE_SCLONE\n ? window.structuredClone\n : softClone;\n\nexport default clone;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport * as widget from \"../util/widgets\";\nimport {Icon, Notification, ButtonNew} from \"./Basic\"\nimport {OverflowMenu} from \"../util/widgets.core\";\nimport SwitchWidget from \"../widgets/SwitchWidget\";\nimport InputWidget from \"../widgets/InputWidget\";\nimport Notice from \"../widgets/NoticeWidget\";\nimport clone from \"../util/util.clone\"\n\nfunction choose(items, config = {\n icon: \"circle\", onSelect: () => {\n }\n}) {\n\n const\n {icon, title, field, onSelect, parser = (v) => v} = config,\n options = items.map((item, index) => ({\n icon: field && item.icon || icon,\n // WARNING !!!!!\n caption: parser(field ? item[field] : item, item),\n // caption: idField ? item[idField] : item,\n onClick: (e) => onSelect(item, e, index)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n options\n )\n .then(({action}) => action.onClick());\n }\n}\n\nfunction promptOptions(items, onchange, options = {}) {\n\n const\n {title, field, icon, textNew, textHint, resolve} = options,\n dialogOptions = Array.isArray(items)\n ? items.map((item) => ({\n icon,\n // WARNING !!!!!\n caption: field ? item[field] : item,\n // caption: idField ? item[idField] : item,\n onClick: (e) => onchange(item, e)\n }))\n : Object.keys(items)\n .map((key) => ({\n icon: items[key].icon || icon,\n caption: items[key].caption || key,\n onClick: (e) => onchange(\n resolve && items[key].value !== undefined\n ? items[key].value\n : items[key],\n e)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n [\n ...textNew && !field\n ? [\n {\n icon: \"plus\",\n caption: textNew,\n onClick: () => promptName(\n textNew,\n \"\",\n textHint,\n (value) => {\n if (value) {\n if (value && value.trim()) {\n onchange(value);\n m.redraw();\n }\n }\n }\n )\n }\n ]\n : [],\n ...dialogOptions\n ]\n )\n .then(({action}) => action.onClick())\n .finally(() => {\n });\n }\n}\n\nfunction promptName(title, value, hint, action, state = {}) {\n setTimeout(() => OverflowMenu(\n document.body,\n {title},\n [\n {\n type: \"text\",\n hint,\n value\n }\n ]\n )\n .then(({value: val}) => {\n state.refreshKey = String(Date.now());\n return action(val);\n }), 100);\n}\n\nconst\n WHAT_DO_UPDATE_LIGHTS = 0, // 0\n WHAT_DO_UPDATE_FACE = 1, // 1\n WHAT_DO_UPDATE_PARTICLES = 2, // 4\n WHAT_DO_UPDATE_SEGMENTATION = 3,\n WHAT_DO_UPDATE_VAL_VPLANE = 4,\n WHAT_DO_UPDATE_VAL_PANO = 5,\n WHAT_DO_UPDATE_VAL_FREE = 6,\n WHAT_DO_UPDATE_VAL_DRONE = 7,\n WHAT_DO_UPDATE_VAL_TRANSITION = 8,\n WHAT_DO_UPDATE_TVFX = 9,\n WHAT_DO_UPDATE_VAL_FOLLOW = 10,\n\n PROPERTIES = [\n [\"Lights and Fog\", null, [\"amblight\", \"l0\", \"l1\", \"l2\", \"l3\", \"fog\"], WHAT_DO_UPDATE_LIGHTS],\n [\"Face and Accessories\", null, [\"facekit\"], WHAT_DO_UPDATE_FACE],\n [\"Particle settings\", null, [\"particles\"], WHAT_DO_UPDATE_PARTICLES],\n [\"Video Segmentation\", \"common\", [\"segcam\", \"mask\", \"green\"], WHAT_DO_UPDATE_SEGMENTATION, true],\n [\"Video Effects\", null, [\"fxconfig\"], WHAT_DO_UPDATE_TVFX],\n [\"Video Plane\", \"val\", [\"xvideo\", \"yvideo\", \"zvideo\", \"rvideo\", \"svideo\", \"video\"], WHAT_DO_UPDATE_VAL_VPLANE],\n [\"Main Camera\", \"val\", [\"ypos\", \"xpos\", \"zoom\", \"yaw\", \"pitch\", \"roll\", \"ai\"], WHAT_DO_UPDATE_VAL_PANO],\n [\"Drone Camera\", \"val\", [\"free\"], WHAT_DO_UPDATE_VAL_FREE],\n [\"Followed Agent\", \"val\", [\"track\"], WHAT_DO_UPDATE_VAL_FOLLOW],\n [\"Game Camera\", \"val\", [\"orbit\", \"track\", \"ocam\"], WHAT_DO_UPDATE_VAL_DRONE, undefined, true],\n [\"Transition Speed\", \"val\", [\"spd\"], WHAT_DO_UPDATE_VAL_TRANSITION]\n ],\n\n TitleBarWidget = defineWidget(\n ({attrs}) => m(\"h2.marg-2.no-marg-bottom\", attrs.title)\n ),\n EntityTemplates = defineWidget(\n ({attrs}) => {\n\n const\n {type = \"changes\", meta, onInput, title, options} = attrs,\n valid = meta.title?.trim().length && meta.description?.trim().length,\n embedded = options && options.embedded;\n\n return m(\".flexcol.grows.ohidden.fadein\", [\n ...attrs.title ? [\n m(TitleBarWidget, {\n title\n })] : [],\n m(\".flexrow.wrap.grows.pad-3.propsgroup.scrolly\", [\n ...attrs.notice ? [\n m(Notice, {\n class: \"marg-1 marg-v withbottommargin font-75 col-12\",\n size: 1,\n icon: \"info-circle\",\n text: attrs.notice\n })\n ] : [],\n m(\n \".witharia.col-12.pad-1.pad-v\",\n {\"aria-label\": type + \" name\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (valid ? \"valid\" : \"invalid\"),\n value: meta.title,\n maxlength: 64,\n onchange: (newvalue) => {\n meta.title = newvalue;\n m.redraw();\n }\n })\n ),\n ...embedded ? []\n : [\n m(\n \".col-12.witharia.pad-1.pad-v\",\n {\"aria-label\": \"description\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (meta.description ? \"valid\" : \"invalid\"),\n value: meta.description,\n maxlength: 240,\n multi: true,\n alwaysmulti: true,\n onchange: (newvalue) => {\n meta.description = newvalue;\n m.redraw();\n }\n })\n ),\n m(\n \".col-8.witharia.pad-1.pad-v\",\n {\"aria-label\": \"tags\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.tags,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.tags = newvalue.toLowerCase()\n .split(\" \")\n .join(\",\")\n .split(\",\")\n .filter((tag) => tag.length)\n .join(\",\");\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"youtube video\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.ytref || \"\",\n hint: \"YouTube ID\",\n maxlength: 16,\n onchange: (newvalue) => {\n newvalue = newvalue.trim();\n if (newvalue) {\n if (newvalue.indexOf(\" \") === -1) {\n meta.ytref = newvalue.trim();\n }\n } else {\n delete meta.ytref;\n }\n }\n })\n )\n ],\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"content attribution\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.author,\n hint: \"author name\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.author = newvalue;\n }\n })\n ),\n\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"license or author link\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n hint: \"https://...\",\n value: meta.link,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.link = newvalue;\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"source domain\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.source,\n hint: \"example.com\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.source = newvalue;\n }\n })\n ),\n\n m(\n \".col-12.al-right.marg-2.marg-v\",\n m(ButtonNew, {\n class: \"noshrink accentbutton unitheightsmall col-4\",\n text: \"save \" + type,\n onClick: () => {\n\n const isValid = meta.title?.trim().length && (embedded || meta.description?.trim().length);\n\n if (isValid) {\n widget.popupMessage(null);\n onInput(meta);\n } else {\n Notification.add(\"Information is incomplete or invalid\");\n }\n }\n })\n )\n ])\n ]);\n }\n ),\n promptEntity = (meta, title, type, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n m(EntityTemplates, {\n meta,\n type,\n title,\n options,\n onInput: (newMeta) => resolve(newMeta)\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n }),\n PresetTemplate = defineWidget(\n ({attrs}) => {\n\n const\n\n {parameters, preset, presetComponents, types, globalData, fetcher} = attrs,\n available = [],\n sourceAvailable = [],\n items = types\n ? PROPERTIES\n : PROPERTIES.filter((cosa) => {\n\n const\n [, primaryTarget, elements, index, globalSource] = cosa,\n target = primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = primaryTarget ? rootSource[primaryTarget] : rootSource;\n\n let found = false;\n\n if (elements.length) {\n\n for (const element of elements) {\n if (target && target[element] !== undefined) {\n found = available[index] = true;\n }\n if (source[element] !== undefined) {\n found = sourceAvailable[index] = true;\n }\n }\n return found;\n } else {\n found = true;\n sourceAvailable[index] = !!source;\n available[index] = !!target;\n }\n return found;\n\n });\n\n return m(\n \"ul.flexrow.wrap.userdialog\",\n items.length\n ? items.map((cosa) => {\n\n const\n [title, primaryTarget, elements, cosaIndex, globalSource, fetchLive] = cosa,\n target = types ? undefined : primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = types ? undefined : primaryTarget ? rootSource[primaryTarget] : rootSource,\n deleteCurrent = () => {\n if (elements.length) {\n for (const field of elements) {\n delete target[field];\n }\n } else if (elements.length === 0 && primaryTarget) {\n delete preset[primaryTarget];\n }\n attrs.redraw && attrs.redraw();\n },\n updateCurrent = () => {\n if (elements.length) {\n if (primaryTarget && !preset[primaryTarget]) preset[primaryTarget] = {};\n const updatedTarget = primaryTarget ? preset[primaryTarget] : preset;\n for (const field of elements) {\n if (source[field] !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(updatedTarget[field], cosaIndex) : source[field];\n updatedTarget[field] = clone(finalSource);\n }\n }\n } else if (elements.length === 0 && primaryTarget) {\n if (source !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(source, cosaIndex) : source;\n preset[primaryTarget] = clone(finalSource);\n }\n }\n attrs.redraw && attrs.redraw();\n Notification.add(`updated ${title} from current scene`);\n },\n isAvailable = types || available[cosaIndex],\n isSourceAvailable = sourceAvailable[cosaIndex];\n\n return [\n ...presetComponents ? [\n m(SwitchWidget, {\n title: `Include ${cosa[0]} in snapshots`,\n class: \"grows unitheightsmall\" + (presetComponents[cosaIndex] ? \" accent\" : \"\"),\n checked: !!presetComponents[cosaIndex],\n onchange: (status) => {\n presetComponents[cosaIndex] = !presetComponents[cosaIndex];\n m.redraw();\n attrs.redraw && attrs.redraw();\n }\n }),\n m(\".grows\", {class: isAvailable ? \"avail\" : \"unavail\"}, title)\n ] : [],\n ...!attrs.types ? [\n m(ButtonNew, {\n class: \"col-3\" + (isSourceAvailable ? \"avail\" : \"unavail\"),\n icon: \"sync\", title: `Copy ${title} from current state`,\n onClick: updateCurrent\n }),\n m(ButtonNew, {\n class: \"col-3 \" + (isAvailable ? \"\" : \"disabled text-lo\"),\n icon: \"trash\", title: `Delete ${title} in preset`,\n onClick: () => isAvailable && deleteCurrent()\n })\n ] : [],\n m(\".flexbreak\")\n ];\n\n })\n : m(\"h3\", \"Preset is Empty\")\n );\n }\n ),\n promptPreset = (preset, parameters, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n () => m(PresetTemplate, {\n ...options,\n preset,\n parameters,\n redraw: () => widget.popupMessage.redraw()\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n });\n\nexport {\n promptName,\n promptEntity,\n promptPreset,\n promptOptions,\n choose\n};\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\n\n\nconst\n\n\tSeparator = defineWidget(\n\t\t({ attrs, children }) => m(\n\t\t\t\".separator\",\n\t\t\t{\n\t\t\t\tclass: attrs.class || \"mini\",\n\t\t\t\t...attrs.onClick && { onclick: attrs.onClick }\n\t\t\t},\n\t\t\t[\n\t\t\t\tm(\"span.grows\", attrs.text),\n\t\t\t\t...(children || [])\n\t\t\t]\n\t\t)\n\t);\n\nexport default Separator;\n","import m from \"mithril\";\n\n\n///////////////////////////////////////////////\n// Mithril Range\n// (c) 2017-2018 by Mike Linkovich\n// https://github.com/spacejack/mithril-range\n// License: MIT\n///////////////////////////////////////////////\nconst\n\n NONE = 0,\n MOUSE = 1,\n TOUCH = 2,\n\n // So we aren't triggered by echoed mouse events (some mobile browsers)\n DEVICE_DELAY = 350,\n\n isIOS = !!navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\n// This is some unbelievable stone-age nonsense.\n// Workaround for webkit bug where event.preventDefault\n// within touchmove handler fails to prevent scrolling.\n\nlet\n iOSHackApplied = false;\n\n/** Clamp number to range */\nfunction clamp(n, min, max) {\n return Math.min(Math.max(n, min), max);\n}\n\nfunction applyIOSHack() {\n // Only apply this hack if iOS, haven't yet applied it,\n // and only if a component is actually created\n if (!isIOS || iOSHackApplied) {\n return;\n }\n window.addEventListener(\"touchmove\", function () {\n });\n iOSHackApplied = true;\n}\n\nexport function quantize(val, min, max, step) {\n if (max - min <= 0) {\n return min;\n }\n if (step <= 0) {\n return clamp(val, min, max);\n }\n const\n steps = Math.ceil((max - min) / step),\n v = min + Math.round(steps * (val - min) / (max - min)) * step;\n return clamp(v, min, max);\n}\n\n\n/** Range Component */\nfunction MithrilRange() {\n let\n elHit,\n elBar,\n elBar0,\n elBar1,\n elHandle,\n rcBar,\n device = NONE,\n pressed = false,\n\n useAbsolute = false,\n factorCoarse = 4,\n factorFine = 1,\n absolute,\n lastRead,\n\n // Attrs we need to cache\n min = 0,\n max = 10,\n value = 0,\n startValue = 0,\n step = 1,\n orientation = \"horizontal\",\n onchange,\n ondrag;\n\n // App handlers\n function onPressAbsolute(x, y) {\n startValue = value;\n pressed = absolute = true;\n rcBar = elBar.getBoundingClientRect();\n const val = moveHandleAbsolute(x, y);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onPressDelta(x, y, e, isTouch) {\n startValue = value;\n pressed = true;\n absolute = false;\n rcBar = elBar.getBoundingClientRect();\n lastRead = (orientation === \"vertical\") ? y : x;\n if (!isTouch) e.target.requestPointerLock();\n }\n\n function moveHandleAbsolute(x, y) {\n\n let\n barLength,\n delta;\n\n if (orientation === \"vertical\") {\n\n barLength = rcBar.bottom - rcBar.top;\n delta = rcBar.bottom - y;\n\n } else {\n barLength = rcBar.right - rcBar.left;\n delta = x - rcBar.left;\n }\n\n delta = clamp(delta, 0, barLength);\n const val = quantize((delta / barLength) * (max - min) + min, min, max, step);\n setStyles(val);\n return val;\n }\n\n function moveHandleDelta(x, y, event) {\n\n const\n factor = event.shiftKey\n ? factorCoarse\n : (event.metaKey || event.ctrlKey)\n ? 4 * factorCoarse\n : factorFine;\n\n let\n delta;\n\n if (orientation === \"vertical\") {\n delta = event.movementY || 0;\n } else {\n delta = event.movementX || 0;\n }\n\n let newVal;\n let s = step > 0 ? step : (max - min) / 100;\n\n if (delta < 0) {\n newVal = Math.max(value + s * factor * delta, min);\n } else if (delta > 0) { // right/up\n newVal = Math.min(value + s * factor * delta, max);\n } else {\n return value;\n }\n\n newVal = quantize(newVal, min, max, step);\n\n setStyles(newVal);\n return newVal;\n\n }\n\n function onPress(x, y, event) {\n return useAbsolute\n ? onPressAbsolute(x, y, event)\n : onPressDelta(x, y, event);\n }\n\n function moveHandle(x, y, event) {\n return absolute\n ? moveHandleAbsolute(x, y, event)\n : moveHandleDelta(x, y, event);\n }\n\n // Event handlers\n function onMouseDown(e) {\n if (device === TOUCH) {\n return;\n }\n device = MOUSE;\n if (e.button !== 0) {\n return;\n }\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n onPress(e.clientX, e.clientY, e);\n }\n\n function onMouseMove(e) {\n e.preventDefault();\n onMove(e.clientX, e.clientY, e);\n }\n\n function onMouseUp(e) {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n onRelease(e.clientX, e.clientY, e);\n }\n\n function onTouchStart(e) {\n if (device === MOUSE) {\n return;\n }\n elHit.addEventListener(\"touchmove\", onTouchMove);\n elHit.addEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onPress(t.clientX, t.clientY, e, true);\n }\n\n function onTouchMove(e) {\n e.preventDefault();\n const t = e.changedTouches[0];\n onMove(t.clientX, t.clientY, e);\n }\n\n function onTouchEnd(e) {\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onRelease(t.clientX, t.clientY, t);\n }\n\n function onKeyDown(e) {\n\n const k = e.keyCode;\n let newVal;\n\n if (k === 33) { // pgup\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value + s, min, max, step);\n } else if (k === 34) { // pgdown\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value - s, min, max, step);\n } else if (k === 35) { // end\n e.preventDefault();\n newVal = max;\n } else if (k === 36) { // home\n e.preventDefault();\n newVal = min;\n } else if (k === 37 || k === 40) { // left/down\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.max(value - s, min);\n } else if (k === 38 || k === 39) { // right/up\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.min(value + s, max);\n } else if (k === 48) { // 0\n newVal = (max + min) / 2;\n }\n if (typeof newVal !== \"number\" || newVal === value) {\n return; // no change to make\n }\n value = newVal;\n setStyles(value);\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n\n function onMove(x, y, event) {\n if (!pressed) {\n return;\n }\n\n const val = moveHandle(x, y, event);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onRelease(x, y, e) {\n\n if (!pressed) {\n return;\n }\n\n pressed = false;\n value = moveHandle(x, y, e);\n\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n\n /*\n if (value !== startValue) {\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n */\n\n if (!absolute) document.exitPointerLock();\n\n setTimeout(function () {\n if (!pressed) {\n device = NONE;\n }\n }, DEVICE_DELAY);\n }\n\n /** Compute handle position style */\n function positionStyle(val) {\n let s = (val - min) / (max - min);\n if (orientation === \"vertical\") {\n s = 1.0 - s;\n }\n return String(100 * s) + \"%\";\n }\n\n /** Set styles for movable parts */\n function setStyles(value) {\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n\n if (orientation === \"vertical\") {\n elHandle.style.top = ps;\n elBar0.style.height = ps;\n elBar1.style.height = rps;\n } else {\n elHandle.style.left = ps;\n elBar0.style.width = rps;\n elBar1.style.width = ps;\n }\n }\n\n /** Some attrs need to be cached (and updated) so that they are current in event handlers */\n function updateAttrs(attrs) {\n min = attrs.min;\n max = attrs.max;\n step = (typeof attrs.step === \"number\" && !Number.isNaN(attrs.step))\n ? clamp(attrs.step, 0, max - min) : 1;\n orientation = attrs.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n onchange = attrs.onchange;\n ondrag = attrs.ondrag;\n if (typeof attrs.value === \"number\") {\n value = clamp(attrs.value, min, max);\n }\n useAbsolute = !attrs.relative;\n factorCoarse = (attrs.factor && attrs.factor[0]) || 4;\n factorFine = (attrs.factor && attrs.factor[1]) || 1;\n\n }\n\n /** Return mithril component hooks object */\n return {\n oncreate: ({attrs, dom}) => {\n applyIOSHack();\n updateAttrs(attrs);\n elHit = dom;\n elBar = elHit.querySelector(\".mithril-range-bar\");\n elBar0 = elBar.querySelector(\".mithril-range-bar-0\");\n elBar1 = elBar.querySelector(\".mithril-range-bar-1\");\n elHandle = elBar.querySelector(\".mithril-range-handle\");\n elHit.addEventListener(\"mousedown\", onMouseDown);\n elHit.addEventListener(\"touchstart\", onTouchStart);\n elHit.addEventListener(\"keydown\", onKeyDown);\n },\n onremove: function () {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n elHit.removeEventListener(\"mousedown\", onMouseDown);\n elHit.removeEventListener(\"touchstart\", onTouchStart);\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n elHit.removeEventListener(\"keydown\", onKeyDown);\n },\n view: function ({attrs, children}) {\n\n updateAttrs(attrs);\n value = quantize(value, min, max, step);\n const a = {\n class: \"mithril-range nokey\" + (attrs.relative ? \" isrelative \" : \" \") + (value === 0 ? \"atzero\" : value < 0 ? \"belowzero\" : \"overzero\") + (attrs.class != null ? \" \" + attrs.class : \"\"),\n tabIndex: \"0\",\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": orientation\n };\n if (attrs.id) {\n a.id = attrs.id;\n }\n // noinspection JSUnresolvedVariable\n if (attrs.ariaLabelledby) {\n a[\"aria-labelledby\"] = attrs.ariaLabelledby;\n }\n if (attrs.disabled) {\n a.style = {pointerEvents: \"none\"};\n a[\"aria-disabled\"] = \"true\";\n }\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n let\n handleStyle,\n bar0Style,\n bar1Style;\n\n if (orientation === \"vertical\") {\n handleStyle = {top: ps};\n bar0Style = {height: ps};\n bar1Style = {height: rps};\n } else {\n handleStyle = {left: ps};\n bar0Style = {width: rps};\n bar1Style = {width: ps};\n }\n return m(\"div\", a, m(\"div\", {class: \"mithril-range-bar nokey\"}, m(\"div\", {\n class: \"mithril-range-bar-0 nokey\",\n style: bar0Style\n }), m(\"div\", {\n class: \"mithril-range-bar-1 nokey\",\n style: bar1Style\n }), m(\"div\", {\n class: \"mithril-range-handle nokey\",\n style: handleStyle\n }, children)), !!attrs.name && m(\"input\", {\n type: \"hidden\",\n name: attrs.name,\n value: String(value)\n }));\n }\n };\n}\n\nexport default MithrilRange;\n","import m from \"mithril\";\nimport MithrilRange from \"../util/mithril-range\";\n\nlet\n __timer;\n\nconst\n resetMultiplier = (state) => {\n /*\n if (state.curMultiplier > 1 && state.value < state.curMax * (state.curMultiplier - 1)) {\n state.curMultiplier = Math.ceil(state.value / state.curMax);\n m.redraw();\n }\n */\n\n const\n // req multiplier to show value within negative bounds\n maxMultiplier = state.value > state.curMax ? Math.ceil(state.value / state.curMax) : 1,\n // req multiplier to show value within positive bounds\n minMultiplier = (state.curMin < 0 && state.value < state.curMin) ? Math.abs(Math.ceil(state.value / state.curMin)) : 1,\n // chosen\n multiplier = Math.min(Math.max(minMultiplier, maxMultiplier), state.maxMultiplier);\n\n if (state.curMultiplier !== multiplier) {\n state.curMultiplier = multiplier;\n m.redraw();\n }\n },\n increaseMultiplier = (state) => {\n if (\n state.value >= (state.curMax * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n if (state.curMin < 0) return increaseMinMultiplier(state);\n },\n increaseMinMultiplier = (state) => {\n if (state.value <= (state.curMin * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n },\n RangeSlider = {\n\n oninit: ({attrs, state}) => {\n Object.assign(state, {\n value: attrs.value || 0,\n initial: attrs.value || 0,\n curMax: attrs.max,\n curMin: attrs.min,\n curMultiplier: 1,\n maxMultiplier: attrs.multiplier || 1,\n id: \"I\" + Date.now()\n });\n // adjust initial multiplier\n if (state.maxMultiplier > 1) {\n if (state.value > attrs.max) {\n state.curMultiplier = Math.ceil(state.value / attrs.max);\n } else if (attrs.min < 0 && state.value < attrs.min) {\n state.curMultiplier = Math.abs(Math.ceil(state.value / attrs.min));\n }\n }\n },\n onupdate: ({attrs, state}) => {\n const\n attrsMultiplier = attrs.multiplier || 1,\n attrsValue = attrs.value || 0;\n\n if (state.curMax !== attrs.max || state.maxMultiplier !== attrsMultiplier) {\n\n Object.assign(state, {\n curMax: attrs.max,\n curMin: attrs.min,\n maxMultiplier: attrsMultiplier,\n value: attrs.value,\n initial: attrsValue\n });\n if (!increaseMultiplier(state)) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n m.redraw();\n\n } else if (state.initial !== attrsValue) {\n\n Object.assign(state, {\n value: attrsValue,\n initial: attrsValue\n });\n\n clearTimeout(__timer);\n __timer = setTimeout(() => m.redraw(), 50);\n\n /*\n if (!increaseMultiplier(state)) {\n state.timer = setTimeout(resetMultiplier, 1000, state);\n clearTimeout(state.timer);\n }\n */\n }\n },\n view: ({attrs, state}) => m(\n \".range.flexcol.control.relative\" + (attrs.multiplier > 1 ? \".withmultiplier\" : \"\"),\n {\n ...attrs.class && {class: attrs.class},\n title: attrs.hint || \"Click, then use arrows to finetune value if needed\"\n },\n [\n ...attrs.title ? [m(\"label\", {class: \"rangelabel\", htmlFor: state.id}, attrs.title)] : [],\n m(MithrilRange, {\n onchange: (value) => {\n\n state.value = value;\n\n const increased = increaseMultiplier(state);\n\n if (!increased && state.curMultiplier > 1) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n if (attrs.onchange) {\n attrs.onchange(value);\n } else {\n m.redraw();\n }\n },\n ondrag: (value) => {\n if (value !== state.value) {\n state.value = value;\n if (attrs.ondrag) attrs.ondrag(value);\n return true;\n }\n return false;\n },\n value: state.value || 0,\n min: (attrs.min || 0) * state.curMultiplier,\n max: (state.curMax * state.curMultiplier) || 100,\n step: attrs.step || 1,\n relative: attrs.relative,\n factor: attrs.factor\n }, [\n m(\".currentval\", attrs.parser\n ? attrs.parser(state.value, attrs.step < 1)\n : state.value\n ? attrs.step < 1\n ? state.value.toFixed(2)\n : (\"\" + Math.floor(state.value)) : \"\")\n ])\n /*\n m(\".datalist.flexrow\", [\n m(\"div\", attrs.getLabel(0)),\n m(\".ismax\", attrs.getLabel(attrs.max || 100))\n ])\n */\n ]\n )\n },\n RangeWidget = {\n view: ({attrs, state}) => m(RangeSlider, {\n value: attrs.value || 0,\n min: attrs.min || 0,\n max: attrs.max || 100,\n step: attrs.step || 0.1,\n class: (attrs.disabled ? \"disabled \" : \"\") + (attrs.class || \"\"),\n title: attrs.title,\n multiplier: attrs.multiplier,\n hint: attrs.hint,\n parser: attrs.parser,\n relative: attrs.relative,\n factor: attrs.factor,\n\n // values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n getLabel: (value) => (value ? \"\" + value : \"default\"),\n ondrag: (value) => {\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, true);\n return true;\n },\n onchange: (value) => {\n if (attrs.auto0) {\n value = 0;\n } else if (attrs.autoValue) value = attrs.autoValue;\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, false);\n return true;\n }\n })\n };\n\nexport default RangeWidget;\n","function startApp(target, appMetadata) {\n m.route(\n document.getElementById(target),\n appMetadata.default || \"/\",\n appMetadata.routes\n );\n}\n\nexport default startApp;"],"names":["Vnode","tag","key","attrs","children","text","dom","domSize","undefined","state","events","instance","normalize","node","Array","isArray","normalizeChildren","String","input","length","isKeyed","i","TypeError","vnode","require$$0","hyperscriptVnode","arguments","this","start","push","hasOwn","hasOwnProperty","require$$1","require$$2","selectorParser","selectorCache","Object","create","compileSelector","selector","match","classes","exec","type","value","id","attrValue","replace","className","join","object","call","isEmpty","hyperscript_1","view","Error","apply","hasClass","class","assign","execSelector","hyperscript","trust","html","fragment","delayedRemoval","WeakMap","domFor_1","domFor","generation","nextSibling","get","render","currentRedraw","currentRender","nameSpace","svg","math","getDocument","ownerDocument","getNameSpace","xmlns","checkState","original","callHook","activeElement","e","createNodes","parent","vnodes","end","hooks","ns","createNode","initLifecycle","createTextNode","insertDOM","createText","createHTML","createDocumentFragment","firstChild","childNodes","createFragment","is","element","createElementNS","createElement","setAttr","setAttrs","maybeSetContentEditable","selectedIndex","normalized","setLateSelectAttrs","sentinel","$$reentrantLock$$","prototype","initComponent","createComponent","possibleParents","caption","thead","tbody","tfoot","tr","th","td","colgroup","col","temp","innerHTML","child","appendChild","updateNodes","old","removeNodes","isOldKeyed","oldStart","o","v","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveDOM","map","lisIndices","originalNextSibling","vnodesLength","oldIndices","li","pos","matched","getKeyMap","oldIndex","a","result","u","il","lisTemp","j","c","makeLisIndices","commonLength","removeNode","oldTag","force","onbeforeupdate","shouldNotUpdate","updateLifecycle","toString","nodeValue","updateText","removeDOM","updateHTML","updateFragment","console","warn","val","removeAttr","updateAttrs","updateElement","updateComponent","currentDOM","target","insertBefore","contenteditable","contentEditable","content","stateResult","attrsResult","mask","onbeforeremove","then","set","finally","onremove","removeChild","isLifecycleMethod","attr","parentNode","isFormAttribute","updateEvent","slice","setAttributeNS","updateStyle","hasPropertyKey","isFileInput","error","setAttribute","removeAttribute","nsLastIndex","indexOf","style","cssText","includes","setProperty","removeProperty","EventDict","_","removeEventListener","addEventListener","source","oninit","oncreate","bind","onupdate","handleEvent","ev","handler","currentTarget","redraw","preventDefault","stopPropagation","contains","prevRedraw","prevDOM","active","namespace","namespaceURI","textContent","focus","window","mountRedraw","schedule","subscriptions","pending","offset","sync","mount","root","component","index","splice","requestAnimationFrame","build","args","destructure","encodeURIComponent","buildQueryString","template","params","test","SyntaxError","queryIndex","hashIndex","queryEnd","pathEnd","path","query","resolved","m","variadic","newQueryIndex","newHashIndex","newQueryEnd","newPathEnd","querystring","buildPathname","request","$window","oncompletion","PromiseProxy","executor","Promise","hasHeader","name","headers","toLowerCase","__proto__","url","promise","resolve","reject","replacedAbort","method","toUpperCase","body","assumeJSON","serialize","JSON","FormData","URLSearchParams","responseType","extract","xhr","XMLHttpRequest","aborted","isTimeout","abort","open","async","user","password","setRequestHeader","deserialize","withCredentials","timeout","onreadystatechange","readyState","message","success","status","response","parse","responseText","completeErrorResponse","code","setTimeout","ontimeout","config","send","stringify","makeRequest","background","count","complete","wrap","constructor","next","decodeURIComponentSave","str","decodeURIComponent","err","string","charAt","entries","split","counters","data","entry","levels","cursor","pop","level","nextLevel","isNumber","isNaN","parseInt","desc","getOwnPropertyDescriptor","parseQueryString","parsePathname","compileTemplate","templateData","templateKeys","keys","regexp","RegExp","extra","k","r","values","magic","censor","extras","require$$3","Fragment","route","require$$4","require$$5","router","compiled","fallbackRoute","currentPath","lastUpdate","callAsync","setImmediate","p","scheduled","ready","currentResolver","RouterRoot","fireAsync","resolveRoute","SKIP","prefix","location","hash","search","pathname","concat","setPath","history","loop","check","payload","matchedRoute","localComp","update","comp","onmatch","options","title","replaceState","pushState","href","defaultRoute","routes","defaultData","some","ReferenceError","Link","onclick","disabled","Boolean","defaultPrevented","button","which","ctrlKey","metaKey","shiftKey","altKey","param","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","getAttrs","parentAttrs","panelInitialParams","initialParams","isCurrent","currentIndex","Icon","pack","icon","size","icontitle","role","iconClass","Button","download","link","busy","event","clearTimeout","debounce","catch","right","textClass","ButtonNew","rel","onClick","Empty","idx","all","setItem","lastIndex","lastParams","currentParams","current","items","onSelected","Selector","selected","noinitial","horizontal","hideonly","hidesel","toolbarClass","item","Date","now","clickts","bodyHidden","toggle","bodyClass","widget","closeButton","ICONS","info","Notification","TOAST_SHORT","altContainer","mTimer","mNotifications","container","document","getElementById","n","timer","add","clear","defineWidget","globalState","CardieWidget","nofold","cardid","action","collapsedAction","collapsedClass","expandedClass","cols","expandedView","collapsedView","titleWidget","titWidget","titleAttrs","titleClass","titleExpanded","titleCollapsed","collapsed","buttonClass","skipEmpty","classList","onShiftOpen","expanded","uniq","subname","forEach","startsWith","setCardStatus","alwaysView","getInput","float","Number","parseFloat","getValue","lastVal","StaticFieldWidget","onDrag","staticClass","staticTitle","readonly","hammer","Hammer","Manager","touchAction","panner","Pan","direction","DIRECTION_VERTICAL","singleTap","Tap","on","srcEvent","destroy","InputWidget","reset","showInput","label","containerClass","staticField","multi","alwaysmulti","max","min","step","maxlength","validator","isValid","placeholder","hint","oninput","fromoninput","onchange","enterPressed","onblur","onkeyup","onkeypress","onenter","dragging","draginc","displayTitle","actions","NoticeWidget","SwitchWidget","unit","subline","checked","mCurrentCancelable","runCancelable","display","popupMessage","cancelable","contentClass","clearModal","OverflowMenu","domItem","closeResolve","widget.popupMessage","initials","clases","finals","cla","packClassString","favlist","nodeName","getAttribute","keyCode","blur","clone","structuredClone","promptName","refreshKey","PROPERTIES","TitleBarWidget","EntityTemplates","meta","onInput","valid","trim","description","embedded","notice","Notice","newvalue","tags","filter","ytref","author","PresetTemplate","parameters","preset","presetComponents","types","globalData","fetcher","available","sourceAvailable","cosa","primaryTarget","elements","globalSource","rootSource","found","cosaIndex","fetchLive","isAvailable","isSourceAvailable","updatedTarget","field","finalSource","deleteCurrent","onSelect","parser","newMeta","textNew","textHint","dialogOptions","Separator","isIOS","navigator","userAgent","__timer","iOSHackApplied","clamp","Math","quantize","steps","ceil","round","MithrilRange","elHit","elBar","elBar0","elBar1","elHandle","rcBar","absolute","ondrag","device","pressed","useAbsolute","factorCoarse","factorFine","orientation","moveHandleAbsolute","x","y","barLength","delta","bottom","top","left","setStyles","onPress","getBoundingClientRect","onPressAbsolute","isTouch","requestPointerLock","moveHandle","factor","newVal","movementY","movementX","s","moveHandleDelta","onMouseDown","onMouseMove","onMouseUp","clientX","clientY","onMove","onRelease","onTouchStart","onTouchMove","onTouchEnd","t","changedTouches","onKeyDown","exitPointerLock","positionStyle","ps","rps","height","width","relative","querySelector","tabIndex","ariaLabelledby","pointerEvents","handleStyle","bar0Style","bar1Style","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue","startApp","appMetadata","default"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]}
1
+ {"version":3,"file":"libui.esm.js","sources":["../src/widgets/Basic.js","../src/util/widgets.utils.js","../src/widgets/CardieWidget.js","../src/widgets/InputWidget.js","../src/widgets/NoticeWidget.js","../src/widgets/SwitchWidget.js","../src/util/widgets.js","../src/util/widgets.core.js","../src/util/util.clone.js","../src/widgets/OverflowUtils.js","../src/widgets/Separator.js","../src/util/mithril-range.js","../src/widgets/RangeWidget.js","../src/app/app.js"],"sourcesContent":["import m from \"mithril\";\n\n// ------------------------------------------------------------------------\n\nfunction getAttrs(attrs, parentAttrs, panelInitialParams) {\n const data = ((typeof attrs === \"function\") ? attrs(parentAttrs) : attrs) || {};\n if (panelInitialParams) data.initialParams = panelInitialParams;\n return data;\n}\n\nconst\n\n isCurrent = ({currentIndex}, index) => currentIndex === index,\n\n Icon = {\n view: ({attrs}) => m(\n `i.icon.${attrs.pack || \"fas\"}.fa-${attrs.icon || \"cog\"}${attrs.size ? \".fa-\" + attrs.size + \"x\" : \"\"}`,\n {\n title: attrs.icontitle || undefined,\n role: \"presentation\",\n onclick: attrs.onclick || null, ...attrs.iconClass && {class: attrs.iconClass}\n }\n )\n },\n\n Button = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onclick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onclick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n ButtonNew = {\n view: ({attrs, state, children}) => m((attrs.download || attrs.link) ? \"a.button\" : \"button\", {\n ...attrs.link && {href: attrs.link},\n ...attrs.download && {rel: \"nofollow\", download: attrs.download},\n ...attrs.target && {target: attrs.target},\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || attrs.text,\n title: attrs.title || attrs[\"aria-label\"],\n class: (attrs.class || \"\") + (state.busy ? \" busy\" : \"\"),\n ...state.error && {\"data-error\": state.error.message},\n ...attrs.onClick && {\n onclick: (event) => {\n clearTimeout(state.debounce);\n state.debounce = setTimeout(() => {\n const result = attrs.onClick(event, attrs);\n if (result && result.then && result.catch) {\n state.busy = true;\n m.redraw();\n result\n .then(() => {\n state.busy = false;\n m.redraw();\n })\n .catch((error) => {\n state.busy = false;\n state.error = error;\n m.redraw();\n });\n }\n }, 25);\n }\n }\n }, [\n ...(attrs.icon && !attrs.right) ? [m(Icon, attrs)] : [],\n ...attrs.text ? [m(\"span.pad-1.pad-h\", {class: attrs.textClass || null}, attrs.text)] : [],\n ...(attrs.icon && attrs.right) ? [m(Icon, attrs)] : [],\n ...children\n ])\n },\n\n Empty = {\n\n view: ({attrs, children}) => m(\n \".flexcol.flexcenter.al-center.grows.emptywidget\",\n {\n ...attrs.class && {class: attrs.class},\n ...attrs.key && {key: attrs.key},\n role: \"presentation\"\n },\n [\n m(Icon, attrs),\n ...attrs.message\n ? [\n m(\".marg-2.marg-v\",\n {\n role: \"status\",\n class: attrs.size > 4 ? \"font-150\" : \"font-100\",\n \"aria-label\": attrs.message\n },\n attrs.message.split(\"\\n\")\n .map((str, idx, all) => all.length === 1 ? str : m(\"p.msg\" + idx, str))\n )\n ]\n : [],\n ...children\n ? [m(\".flexcol.additional\", children)]\n : []\n ]\n )\n },\n\n setItem = (attrs, state, index, params) => {\n\n\n const\n lastIndex = state.currentIndex,\n lastParams = state.currentParams;\n\n if (index === -1) {\n Object.assign(state, {\n current: null,\n currentIndex: -1,\n currentParams: []\n });\n } else {\n Object.assign(state, {\n current: attrs.items[index] || null,\n currentIndex: state.current ? index : -1,\n currentParams: params || []\n });\n }\n\n if (attrs.onSelected) attrs.onSelected(state.current, state.currentParams, state.currentIndex !== lastIndex, lastParams);\n\n m.redraw();\n },\n\n Selector = {\n\n oninit: ({attrs, state}) => {\n\n state = attrs.state || state;\n state.setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n\n const\n hasState = !isNaN(state.currentIndex),\n selected = hasState ? state.currentIndex : attrs.selected,\n currentIndex = (attrs.items && attrs.items.length)\n ? (selected !== undefined && attrs.items[selected])\n ? selected\n : attrs.noinitial ? -1 : 0\n : -1,\n current = currentIndex !== -1 ? attrs.items[currentIndex] : null;\n\n Object.assign(state, {currentIndex, current});\n\n },\n\n onupdate: ({attrs, state}) => {\n (attrs.state || state).setItem = (index, ...params) => setItem(attrs, attrs.state || state, index, params);\n },\n\n view: ({attrs, state}) => {\n\n state = attrs.state || state;\n const {current} = state;\n\n return m(\n (attrs.element || \"widget\") + \".selector\" + (attrs.horizontal ? \".flexrow\" : \".flexcol\") + (attrs.className ? \".\" + attrs.className : \"\"),\n {\n ...attrs.key && {key: attrs.key},\n class: (state.current ? \"hascurrent\" : \"empty\") + (attrs.class ? \" \" + attrs.class : \"\")\n },\n [\n ...((!attrs.hideonly || (attrs.items.length > 1)) && (!attrs.hidesel))\n ? [\n /** navigation bar */\n m(\n \"nav.toolbar.fullwidth\" + (attrs.horizontal ? \".flexcol\" : \".flexrow\"),\n {\n \"aria-label\": attrs[\"aria-label\"] || attrs.title || \"selector\",\n class: attrs.toolbarClass\n },\n attrs.items.map((item, index) => m(Button, {\n class: (item.class ? item.class + \" \" : \"\") + (isCurrent(state, index) ? \"accent\" : \"nel\"),\n icon: item.icon || null,\n ...item.title && {title: item.title},\n ...item[\"aria-label\"] && {\"aria-label\": item[\"aria-label\"]},\n ...item.text && {text: item.text},\n onclick: () => {\n const t = Date.now();\n if (t - state.clickts < 200) return;\n state.clickts = Date.now();\n state.bodyHidden = false;\n state.setItem(index);\n }\n }))\n )]\n : [],\n ...current\n ? [\n ...(attrs.toggle && !state.bodyHidden)\n ? [\n m(ButtonNew, {\n class: \"selectornotch \" + (state.bodyHidden ? \"bodyhidden\" : \"bodyshown\"),\n icon: state.bodyHidden ? \"caret-up\" : \"caret-down\",\n title: state.bodyHidden ? \"expand panel\" : \"contract panel\",\n onClick: () => {\n state.bodyHidden = !state.bodyHidden;\n m.redraw();\n }\n })\n ] : [],\n ...(!attrs.toggle || !state.bodyHidden)\n ? [\n /** body */\n m(\".grows.flexcol.ohidden\", {class: attrs.bodyClass, role: \"presentation\"}, [\n m(\n current.widget,\n getAttrs(current.attrs, attrs, state.currentParams),\n current.children\n )\n ])\n ]\n : [],\n ...attrs.closeButton\n ? [\n m(Button, {\n class: \"closebutton absolute toright\",\n icon: \"times\",\n onclick: () => {\n state.setItem(-1);\n },\n \"aria-label\": \"close item\"\n })] : []\n ]\n : m(Empty, attrs)\n ]\n );\n }\n };\n\nconst ICONS = {\n info: \"info\",\n error: \"exclamation-triangle\",\n success: \"check\"\n};\n\nfunction Notifications(TOAST_SHORT = 5000, altContainer) {\n\n let\n mNotifications = [],\n mTimer;\n\n function render(container, n) {\n m.render(\n container, m(\n Button, {\n class: \"notification \" + n.type,\n text: n.text,\n icon: ICONS[n.type] || \"info\",\n size: 1,\n role: \"status\",\n // eslint-disable-next-line no-use-before-define\n onclick: next\n }\n )\n );\n }\n\n function next() {\n\n const\n container = altContainer || document.getElementById(\"notification-container\");\n\n if (mNotifications.length) {\n const n = mNotifications.splice(0, 1)[0];\n render(container, n);\n clearTimeout(mTimer);\n mTimer = setTimeout(next, n.timer || TOAST_SHORT);\n } else {\n m.render(container, \"\");\n mTimer = null;\n }\n }\n\n return {\n add: (text, type) => {\n mNotifications.push({\n text,\n type\n });\n if (!mTimer) next();\n },\n clear: () => {\n mNotifications = [];\n next();\n }\n\n };\n}\n\nconst Notification = new Notifications();\n\nexport {\n Empty,\n Icon,\n Selector,\n Button,\n ButtonNew,\n Notification\n}\n","export default function defineWidget (view, oninit, oncreate, onremove, onupdate) {\n return {\n ...view && {view},\n ...oninit && {oninit},\n ...oncreate && {oncreate},\n ...onupdate && {onupdate},\n ...onremove && {onremove}\n }\n}\n\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {ButtonNew} from \"./Basic\";\n\nconst\n globalState = {},\n CARDIE_CLOSED = 0;\n\nfunction setCardStatus(cardid, expanded = CARDIE_CLOSED) {\n if (cardid) {\n const [uniq, subname] = cardid.split(\"-\");\n if (expanded && uniq && subname) {\n Object.keys(globalState)\n .forEach((key) => {\n if (key.startsWith(uniq + \"-\")) {\n globalState[key] = CARDIE_CLOSED;\n }\n });\n }\n globalState[cardid] = expanded;\n }\n}\n\nconst CardieWidget = defineWidget(\n ({attrs, state, children}) => {\n\n const\n\n {\n nofold,\n cardid,\n size,\n title,\n action,\n collapsedAction,\n collapsedClass,\n expandedClass,\n cols,\n element,\n busy,\n expandedView,\n collapsedView,\n titleWidget: titWidget,\n titleAttrs,\n titleClass,\n bodyClass,\n titleExpanded,\n titleCollapsed\n } = attrs,\n\n collapsed = nofold\n ? false\n : cardid\n ? !globalState[cardid]\n : !!state.collapsed,\n\n items = (!collapsed)\n ? (\n expandedView\n ? expandedView(attrs, state)\n : (children || [])\n )\n : collapsedView ? collapsedView(attrs, state) : [],\n\n titleWidget = titWidget\n ? m(titWidget, titleAttrs || {})\n : title ? m(\"span.ellipsis.ohidden.unfold\", title) : undefined,\n\n buttonClass = busy\n ? \"fa-sync\"\n : `fa-caret-down ${collapsed ? \"iscollapsed\" : \"isexpanded\"}`;\n\n return items.length || !attrs.skipEmpty\n ? m(\n (element || \"ul\"),\n {\n class: \"cardie ohidden noshrink \"\n + (cols ? \"flexcol \" : \"flexrow wrap \")\n + (attrs.class ? \" \" + attrs.class : \"\")\n + (nofold\n ? \" expanded\"\n : ` ${collapsed ? \"collapsed \" + (collapsedClass || \"\") : \"expanded \" + (expandedClass || \"\")}`)\n + (size ? \" marg-\" + size : \" marg-2\")\n + (titWidget ? \" withwidget\" : \"\")\n + (busy ? \" busycard\" : \"\")\n },\n [\n\n ...titleWidget\n ? [\n m(\n \".title.grows.fabf.flexrow.pointer.unfold\",\n nofold\n ? {\n class: titleClass || \"pad-2\"\n }\n : {\n class: `${titleClass || \"pad-2\"} ${buttonClass || \"\"}`,\n\n title: collapsed\n ? (titleCollapsed || \"Click to expand the options\")\n : (titleExpanded || titleCollapsed || \"Click to collapse the options\"),\n\n onclick: (e) => {\n\n if (e.target.classList.contains(\"unfold\")) {\n if (e.shiftKey && attrs.onShiftOpen) {\n attrs.onShiftOpen();\n } else if (attrs.cardid) {\n setCardStatus(cardid, collapsed); // !state\n } else {\n state.collapsed = !state.collapsed;\n }\n\n m.redraw();\n }\n }\n },\n action && (nofold || !collapsed)\n ? [\n m(ButtonNew, action),\n titleWidget\n ]\n : collapsedAction && collapsed\n ? [\n m(ButtonNew, collapsedAction),\n titleWidget\n ]\n : titleWidget\n )\n ]\n : [],\n\n ...items.length\n ? [\n m(\".flexbreak\"),\n m(\n \".cardiebody.fadein-filter.grows\",\n {\n class: (cols ? \"flexcol \" : \"flexrow wrap\") + \" \" + (bodyClass || \"\")\n },\n ...items\n )\n ] : [],\n\n ...(attrs.alwaysView\n ? [attrs.alwaysView({attrs, state})]\n : [])\n\n ]\n ) : [];\n },\n ({attrs, state}) => {\n if (!attrs.cardid) {\n state.collapsed = attrs.nofold\n ? false\n : attrs.cardid\n ? !globalState[attrs.cardid]\n : !!attrs.collapsed;\n }\n },\n undefined,\n undefined,\n undefined,\n {setCardStatus}\n);\n\nexport default CardieWidget;","import m from \"mithril\";\nimport {ButtonNew} from \"./Basic\";\n\n/* eslint-disable no-prototype-builtins,no-nested-ternary */\n/* global m, Hammer */\n\nconst\n\n getInput = (attrs, value, parse = false) => {\n if (parse || attrs.type === \"number\") {\n const val = attrs.float ? Number.parseFloat(value) : Number.parseInt(value, 10);\n return Number.isNaN(val) ? undefined : val;\n }\n return value;\n },\n getValue = (attrs, state, parse) => {\n const lastVal = state.hasOwnProperty(\"value\") ? state.value : attrs.value;\n return getInput(attrs, lastVal, parse);\n },\n /*\n hammer = new Hammer.Manager(dom, { touchAction: \"pan-y\" }),\n panner = new Hammer.Pan({ direction: Hammer.DIRECTION_VERTICAL }),\n singleTap = listenTap && new Hammer.Tap();\n\n hammer.add(listenTap ? [panner, singleTap] : [panner]);\n hammer.on(\"panstart\", (e) => {\n\n */\n\n StaticFieldWidget = {\n view: (vnode) => {\n const {attrs, state} = vnode;\n // este vnode NO es el mismo que el del hammer, pero su estado SI !\n state.attrs = attrs; // guardamos una copia de los ultimos attrs en el estado\n\n return m(\n \".input-static.w-100.ellipsis\",\n {\n class: (attrs.onDrag ? \"withdrag \" : \"\") + (attrs.staticClass || \"grows\"),\n ...attrs.staticTitle && {title: attrs.staticTitle},\n ...attrs.onDrag || {onclick: attrs.onClick},\n oncreate: ({dom, state}) => {\n\n if (attrs.onDrag && !attrs.readonly) {\n\n const\n hammer = state.hammer = new Hammer.Manager(dom, {touchAction: \"pan-y\"}),\n panner = new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL}),\n singleTap = new Hammer.Tap();\n\n hammer.add([panner, singleTap]);\n hammer.on(\"tap\", () => vnode.state.attrs.onClick());\n hammer.on(\"panup\", (e) => vnode.state.attrs.onDrag(-1, e.srcEvent));\n hammer.on(\"pandown\", (e) => vnode.state.attrs.onDrag(1, e.srcEvent));\n hammer.on(\"panend pancancel\", (e) => vnode.state.attrs.onDrag(0, e.srcEvent));\n }\n if (attrs.focus) {\n dom.focus();\n }\n },\n onremove: ({state}) => {\n state.hammer && state.hammer.destroy();\n }\n },\n attrs.value\n );\n }\n },\n InputWidget = {\n view: ({attrs, state}) => {\n const reset = (redraw) => {\n // if (state.value !== undefined && state.showInput) delete state.showInput;\n if (state.value && state.showInput) delete state.showInput;\n delete state.value;\n if (redraw) m.redraw();\n };\n return m(\n \".textfield.flexcol.relative\",\n {\n class: (attrs.label ? \"witharia\" : \"\") + (attrs.containerClass ? \" \" + attrs.containerClass : \"\"),\n ...attrs.label && {\"aria-label\": attrs.label}\n },\n [\n (attrs.staticField && (attrs.readonly || !state.showInput))\n ? m(StaticFieldWidget, {\n readonly: attrs.readonly,\n staticClass: (state.dragging ? \"accent \" : \"\") + (attrs.staticClass || \"\"),\n staticTitle: attrs.staticTitle || attrs.draginc && \"Click then drag up and down to modify value, or just click to enter a custom value\",\n value: attrs.displayTitle || getValue(attrs, state),\n focus: attrs.focus,\n ...attrs.draginc && !attrs.readonly && {\n onDrag: (direction, event) => {\n if (direction) {\n state.dragging = true;\n let value = getValue(attrs, state, true);\n if (Number.isNaN(value) || value === undefined) return;\n value += direction * attrs.draginc;\n if (attrs.max !== undefined && value > attrs.max) value = attrs.max;\n if (attrs.min !== undefined && value < attrs.min) value = attrs.min;\n state.value = attrs.type === \"number\" ? value : String(value);\n attrs.onchange(state.value, event);\n } else {\n delete state.dragging;\n delete state.value;\n m.redraw();\n }\n }\n },\n ...attrs.readonly || {\n onClick: () => {\n state.showInput = true;\n state.value = attrs.value;\n m.redraw();\n }\n }\n })\n\n : ((state.multi || attrs.alwaysmulti) && (!attrs.type || attrs.type === \"text\"))\n ? m(\"textarea.w-100\", {\n class: attrs.class,\n value: getValue(attrs, state),\n ...attrs.title && {title: attrs.title},\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event, true);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n const value = getInput(attrs, event.target.value);\n reset(false);\n attrs.onchange(value, event, true);\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (event.key === \"Escape\" && state.showInput) {\n reset(false);\n }\n }\n })\n : m(\"input.w-100\", {\n ...attrs.id && {id: attrs.id},\n type: attrs.type || \"text\",\n ...attrs.max !== undefined && {max: attrs.max},\n ...attrs.min !== undefined && {min: attrs.min},\n ...attrs.step > 0 && {step: attrs.step},\n ...attrs.maxlength && {maxlength: attrs.maxlength},\n class: (attrs.class || \"\") + (attrs.validator ? state.isValid ? \" bg-ok\" : \" bg-error\" : \"\"),\n ...attrs.title && {title: attrs.title},\n value: getValue(attrs, state),\n placeholder: attrs.hint || \"\",\n oninput: (event) => {\n state.value = getInput(attrs, event.target.value);\n event.fromoninput = true;\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n if (attrs.onchange) {\n (attrs.oninput || attrs.onchange)(state.value, event);\n }\n },\n onchange: (event) => {\n if (attrs.onchange) {\n if (attrs.validator) state.isValid = attrs.validator(state.value);\n event.enterPressed = state.enterPressed;\n delete state.enterPressed;\n attrs.onchange(getInput(attrs, event.target.value), event);\n if (attrs.staticField) {\n reset(true);\n } else {\n delete state.value;\n }\n }\n },\n onblur: () => {\n if (state.showInput) {\n reset(true);\n }\n },\n onkeyup: (event) => {\n if (state.showInput) {\n if (event.key === \"Escape\") {\n reset(true);\n } else if (event.key === \"Enter\") {\n if (state.value === attrs.value || !state.value) {\n attrs.onchange(attrs.value, event);\n reset(true);\n }\n }\n }\n },\n onkeypress: (event) => {\n if (!state.showInput && event.key === \"Enter\") {\n attrs.onenter && attrs.onenter(event.target.value, event);\n }\n }\n }),\n\n m(\".span.actions.absolute.right.bottom\", [\n ...(attrs.multi && !attrs.alwaysmulti && (!attrs.type || attrs.type === \"text\"))\n ? [\n m(ButtonNew, {\n icon: state.multi ? \"angle-double-up\" : \"angle-double-down\",\n class: \"pad-2 transp\",\n onClick: () => {\n state.multi = !state.multi;\n m.redraw();\n }\n })\n ]\n : [],\n ...attrs.actions ? attrs.actions.map((action) => m(ButtonNew, {\n ...action,\n class: \"transp pad-2\"\n })) : [],\n ...attrs.action\n ? [\n m(ButtonNew, {...attrs.action, class: \"transp pad-2\"})\n ] : []\n ])\n ]);\n },\n oninit: ({attrs, state}) => {\n if (attrs.staticField && attrs.draginc) {\n const value = getValue(attrs, state, true);\n state.showInput = (Number.isNaN(value) || value === undefined || value === null);\n }\n }\n };\n\nexport default InputWidget;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n NoticeWidget = defineWidget(\n ({attrs, children}) => (\n children.length\n ? m(\n \".notice.cardie.flexcol.pad-3\",\n {class: attrs.class || \"marg-2 font-75\"},\n m(\n \".flexrow\",\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n ),\n ...children\n )\n : m(\n \".notice.cardie.flexrow.pad-3\",\n {class: attrs.class || \"marg-2 font-75\", onclick: attrs.onClick},\n [\n ...attrs.icon ? [m(Icon, attrs)] : [],\n m(\".pad-2.pad-h\", attrs.text)\n ]\n )\n )\n );\n\nexport default NoticeWidget;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport {Icon} from \"./Basic\";\n\nconst\n SwitchWidget = defineWidget(\n ({attrs, state}) => m((attrs.unit || \"\") + \".flexrow\" + (attrs.subline ? \" withsubline\" : \"\"),\n {\n class: attrs.class,\n text: attrs.text,\n title: attrs.title || null,\n onclick: () => {\n state.checked = !state.checked;\n if (attrs.onchange) {\n attrs.onchange(state.checked);\n }\n m.redraw();\n }\n },\n attrs.right\n ? [\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : [],\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"})\n ]\n : [\n m(Icon, {iconClass: \"pad-2 pad-h\", icon: state.checked ? \"toggle-on\" : \"toggle-off\"}),\n ...attrs.text ? [m(\"span.grows.caption\", attrs.subline ? {\"data-subline\": attrs.subline} : {}, attrs.text)] : []\n ]),\n ({attrs, state}) => {\n state.checked = state.original = attrs.checked;\n },\n null,\n null,\n ({attrs, state}) => {\n if (attrs.checked !== state.original) {\n state.checked = state.original = attrs.checked;\n m.redraw();\n }\n }\n );\n\nexport default SwitchWidget;","import m from \"mithril\";\n\nlet\n\tmCurrentCancelable;\n\nfunction runCancelable(container) {\n\tif (typeof mCurrentCancelable === \"function\") {\n\t\tmCurrentCancelable();\n\t\tmCurrentCancelable = undefined;\n\t}\n\tcontainer.style.display = \"none\";\n\tdelete popupMessage.redraw;\n}\n\n// There are ways of doing this inside m.route but it is probably\n// cleaner and faster when kept outside of the main auto\n// rendering system\n\nfunction popupMessage(message, cancelable = false, contentClass = \".modal-content\") {\n\n\tconst container = document.getElementById(\"modal-container\");\n\tcontainer.classList.toggle(\"iscustom\", contentClass !== \".modal-content\");\n\n\tif (cancelable) {\n\n\t\tmCurrentCancelable = cancelable;\n\n\t\tcontainer.onclick = (event) => {\n\t\t\tif (event.target.id === \"modal-container\") {\n\t\t\t\trunCancelable(container);\n\t\t\t}\n\t\t};\n\t}\n\n\tif (!message) {\n\t\tdelete popupMessage.redraw;\n\t\tif (message === null)\n\t\t\tcontainer.style.display = \"none\";\n\t\telse\n\t\t\trunCancelable(container);\n\n\t\treturn;\n\t}\n\n\tcontainer.style.display = \"flex\";\n\n\tpopupMessage.redraw = () => {\n\t\tm.render(\n\t\t\tcontainer,\n\t\t\tm(contentClass, {\n\t\t\t\trole: \"alertdialog\",\n\t\t\t\t\"aria-labelledby\": \"modaltitle\",\n\t\t\t\t\"aria-modal\": true\n\t\t\t}, [\n\t\t\t\ttypeof message === \"function\" ? message() : message\n\t\t\t])\n\t\t);\n\t};\n\n\tpopupMessage.redraw();\n}\n\nfunction clearModal() {\n\tconst container = document.getElementById(\"modal-container\");\n\tif (container.style.display !== \"none\") {\n\t\trunCancelable(container);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport { popupMessage, clearModal };\n","/* eslint-disable no-nested-ternary */\n/**\n * Basic Mithril Widget functions\n * Provides some utilities and basic UI functions like an Alert or a Confirmation dialog\n *\n * @author Rodolfo Lopez Pintor, 2020 <rlp@nebular.tv>\n * @module apps.widgets.basic\n *\n */\nimport m from \"mithril\";\nimport * as widget from \"./widgets\";\nimport * as Tokenizer from \"./util.tokenizer\";\nimport {Button, Empty} from \"../widgets/Basic\";\n\n/**\n *\n * Computes a Class String\n *\n * @param {string} initials INitial CSS Classes\n * @param {Object<string, boolean>} clases New classes dictionary\n * @return {string} The CSS Class expression like .class1.class2.class3\n * @public\n * @static\n */\n\nconst packClassString = (initials, clases) => {\n const finals = [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(\".\" + cla);\n return (initials || \"\") + finals.join(\"\");\n};\n\n\nconst packClass = (initials, clases) => {\n const finals = initials ? [initials] : [];\n if (clases) for (const cla of Object.keys(clases)) if (clases[cla]) finals.push(cla);\n return finals.join(\" \");\n};\n\n/**\n * Shows a modal confirm dialog\n * @param {string} title The dialog title\n * @param {string} message The dialog message\n * @param {Array} buttons Buttons to display\n * @param {Object=} options noCancel: dialog is uncanellable\n * @public\n * @static\n */\n\nfunction Confirm(title, message,\n buttons = [\"CANCEL\", \"OK\"], options = {}\n) {\n widget.popupMessage(\n m(\n {\n view: () => [\n ...title ? [m(\"h3\", title)] : [],\n ...message ? [m(\"h4\", message)] : [],\n m(\".container\",\n buttons.map(\n option => m(\n \"button\",\n {\n onclick: () => {\n document.getElementById(\"modal-container\").style.display = \"none\";\n if (option.onclick) option.onclick(option.caption);\n }\n },\n option.caption || \"OK\"\n )\n ))\n ]\n },\n {}\n ),\n options.onCancel || !options.noCancel\n );\n}\n\nfunction ConfirmPromise(title, message, actions, isModal = false) {\n\n let onCancel = undefined;\n\n if (typeof isModal === \"function\") {\n onCancel = isModal;\n isModal = false;\n }\n\n return new Promise((resolve) => {\n\n const opts = actions.map((name, idx) => ({\n caption: name,\n onclick: () => resolve({\n idx,\n name\n })\n }));\n\n Confirm(title, message, opts, {\n onCancel,\n noCancel: isModal\n });\n });\n}\n\n/**\n * Shows An Alert Modal Dialog\n * @param {string} title Dialog Title\n * @param {string} message Dialog Message\n * @param {string?} caption Button caption\n * @param {function?} onclick On press handler\n * @public\n * @static\n */\n\nfunction Alert(title, message, caption, onclick) {\n return Confirm(title, message, [{caption, onclick}]);\n}\n\n\nfunction OverflowMenu(domItem, item, actions, options) {\n\n return new Promise((resolve) => {\n\n options = options || {};\n\n function closeResolve(value) {\n widget.popupMessage(null);\n try {\n resolve(value);\n } catch (e) {\n //\n }\n }\n\n const\n classes = packClassString(\".popup.flexcol\", {\n \".favlist\": options.favlist,\n \".isfav\": domItem && domItem.classList.contains(\"isfav\"),\n \".isplay\": domItem && domItem.classList.contains(\"selected\")\n });\n\n widget.popupMessage(\n m({\n view: () => m(\n classes,\n {\n onclick: (event) => {\n\n if (event.target.nodeName === \"INPUT\") {\n return;\n }\n\n const\n action = event.target.getAttribute(\"data-action\");\n\n if (action) {\n closeResolve({\n domItem,\n item,\n action\n });\n } else {\n widget.popupMessage(null);\n }\n }\n },\n [\n ...item.title ? [m(\"h3\", {id: \"modaltitle\"}, item.title)] : [],\n ...actions.map(action => (action.type === \"text\"\n ? m(\n \"input.action\",\n {\n value: action.value || \"\",\n type: \"text\",\n placeholder: action.hint || \"\",\n oncreate: ({dom}) => dom.focus(),\n onkeyup: (ev) => {\n if (ev.keyCode === 27) {\n closeResolve({domItem, item, action});\n }\n },\n onchange: (ev) => {\n ev.target.blur();\n closeResolve({\n domItem,\n item,\n action,\n value: ev.target.value\n });\n }\n }\n )\n : m(\n Button,\n {\n ...action,\n onclick: () => closeResolve({\n domItem,\n item,\n action\n })\n },\n action.caption\n )))\n ]\n )\n }),\n true\n );\n });\n}\n\n/**\n * Creates an HTML UL/LI structure with the object properties\n * @param {Object} object An object to render\n * @param {RenderOptions?} options\n * @param {Object[]} children additional vnodes\n * @param {string} recurse parent key\n * @param isArrayChild\n * @return {m} The rendered view\n * @public\n * @static\n */\n\nfunction RenderObject(object, options, children, recurse, isArrayChild = false) {\n\n // noinspection JSValidateTypes\n options = options || {};\n const {arrayClass = \"isarray\", arrayChildClass = \"ischildren\", objectClass = \"isobject\"} = options;\n\n return m(\n \"ul\",\n {\n ...(options.attrs || {}),\n class: options.class\n },\n object\n ? [\n ...(options.keys || Object.keys(object))\n .map((key) => {\n\n const\n value = object[key] || null,\n isObject = value !== null && (typeof value === \"object\"),\n isArray = isObject && value.length,\n fullkey = (recurse ? recurse + \"_\" : \"\") + key;\n\n return m(\n \"li.field_\" + (options.start || \"\") + fullkey,\n {\n class: (isArray ? arrayClass : isObject ? (objectClass + \" \") : \"\") + (isArrayChild ? arrayChildClass : \"\"),\n \"data-title\": options.titles ? options.titles[key] || key : key,\n ...(options.itemAttrs || {})\n },\n // eslint-disable-next-line\n isObject\n ? [\n m(\".subvalues\",\n RenderObject(\n value,\n {\n ...options,\n keys: null\n },\n null,\n (recurse ? recurse + \"_\" : \"\") + key,\n isArray\n ))]\n : (\n (options.renderer && options.renderer[fullkey])\n ? options.renderer[fullkey](value)\n : m(\"span.value\", object[key])\n )\n );\n }),\n ...children || []\n ]\n : [\n m(\".empty\", {})\n ]\n );\n\n}\n\n\nconst\n JSONWidget = {\n view:\n ({attrs, children}) => {\n let object;\n try {\n object = attrs.pointer\n ? Tokenizer.getPointedData(attrs.object, attrs.pointer)\n : attrs.object;\n } catch (e) {\n return m(Empty, {message: e.message, ...attrs});\n }\n\n return object\n ? RenderObject(object, attrs, children)\n : m(Empty, attrs);\n }\n };\n\n// noinspection JSUnusedGlobalSymbols\nexport {\n Alert,\n Confirm,\n ConfirmPromise,\n RenderObject,\n OverflowMenu,\n JSONWidget,\n packClass\n}\n","const\n ENABLE_SCLONE = true, // atm SLOWER than JSON\n softClone = (o) => JSON.parse(JSON.stringify(o)),\n clone = window.structuredClone && ENABLE_SCLONE\n ? window.structuredClone\n : softClone;\n\nexport default clone;\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\nimport * as widget from \"../util/widgets\";\nimport {Icon, Notification, ButtonNew} from \"./Basic\"\nimport {OverflowMenu} from \"../util/widgets.core\";\nimport SwitchWidget from \"../widgets/SwitchWidget\";\nimport InputWidget from \"../widgets/InputWidget\";\nimport Notice from \"../widgets/NoticeWidget\";\nimport clone from \"../util/util.clone\"\n\nfunction choose(items, config = {\n icon: \"circle\", onSelect: () => {\n }\n}) {\n\n const\n {icon, title, field, onSelect, parser = (v) => v} = config,\n options = items.map((item, index) => ({\n icon: field && item.icon || icon,\n // WARNING !!!!!\n caption: parser(field ? item[field] : item, item),\n // caption: idField ? item[idField] : item,\n onClick: (e) => onSelect(item, e, index)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n options\n )\n .then(({action}) => action.onClick());\n }\n}\n\nfunction promptOptions(items, onchange, options = {}) {\n\n const\n {title, field, icon, textNew, textHint, resolve} = options,\n dialogOptions = Array.isArray(items)\n ? items.map((item) => ({\n icon,\n // WARNING !!!!!\n caption: field ? item[field] : item,\n // caption: idField ? item[idField] : item,\n onClick: (e) => onchange(item, e)\n }))\n : Object.keys(items)\n .map((key) => ({\n icon: items[key].icon || icon,\n caption: items[key].caption || key,\n onClick: (e) => onchange(\n resolve && items[key].value !== undefined\n ? items[key].value\n : items[key],\n e)\n }));\n\n if (Array.isArray(items) && !items.length) {\n Notification.add(\"No items available\");\n } else {\n OverflowMenu(\n document.body,\n {title},\n [\n ...textNew && !field\n ? [\n {\n icon: \"plus\",\n caption: textNew,\n onClick: () => promptName(\n textNew,\n \"\",\n textHint,\n (value) => {\n if (value) {\n if (value && value.trim()) {\n onchange(value);\n m.redraw();\n }\n }\n }\n )\n }\n ]\n : [],\n ...dialogOptions\n ]\n )\n .then(({action}) => action.onClick())\n .finally(() => {\n });\n }\n}\n\nfunction promptName(title, value, hint, action, state = {}) {\n setTimeout(() => OverflowMenu(\n document.body,\n {title},\n [\n {\n type: \"text\",\n hint,\n value\n }\n ]\n )\n .then(({value: val}) => {\n state.refreshKey = String(Date.now());\n return action(val);\n }), 100);\n}\n\nconst\n WHAT_DO_UPDATE_LIGHTS = 0, // 0\n WHAT_DO_UPDATE_FACE = 1, // 1\n WHAT_DO_UPDATE_PARTICLES = 2, // 4\n WHAT_DO_UPDATE_SEGMENTATION = 3,\n WHAT_DO_UPDATE_VAL_VPLANE = 4,\n WHAT_DO_UPDATE_VAL_PANO = 5,\n WHAT_DO_UPDATE_VAL_FREE = 6,\n WHAT_DO_UPDATE_VAL_DRONE = 7,\n WHAT_DO_UPDATE_VAL_TRANSITION = 8,\n WHAT_DO_UPDATE_TVFX = 9,\n WHAT_DO_UPDATE_VAL_FOLLOW = 10,\n\n PROPERTIES = [\n [\"Lights and Fog\", null, [\"amblight\", \"l0\", \"l1\", \"l2\", \"l3\", \"fog\"], WHAT_DO_UPDATE_LIGHTS],\n [\"Face and Accessories\", null, [\"facekit\"], WHAT_DO_UPDATE_FACE],\n [\"Particle settings\", null, [\"particles\"], WHAT_DO_UPDATE_PARTICLES],\n [\"Video Segmentation\", \"common\", [\"segcam\", \"mask\", \"green\"], WHAT_DO_UPDATE_SEGMENTATION, true],\n [\"Video Effects\", null, [\"fxconfig\"], WHAT_DO_UPDATE_TVFX],\n [\"Video Plane\", \"val\", [\"xvideo\", \"yvideo\", \"zvideo\", \"rvideo\", \"svideo\", \"video\"], WHAT_DO_UPDATE_VAL_VPLANE],\n [\"Main Camera\", \"val\", [\"ypos\", \"xpos\", \"zoom\", \"yaw\", \"pitch\", \"roll\", \"ai\"], WHAT_DO_UPDATE_VAL_PANO],\n [\"Drone Camera\", \"val\", [\"free\"], WHAT_DO_UPDATE_VAL_FREE],\n [\"Followed Agent\", \"val\", [\"track\"], WHAT_DO_UPDATE_VAL_FOLLOW],\n [\"Game Camera\", \"val\", [\"orbit\", \"track\", \"ocam\"], WHAT_DO_UPDATE_VAL_DRONE, undefined, true],\n [\"Transition Speed\", \"val\", [\"spd\"], WHAT_DO_UPDATE_VAL_TRANSITION]\n ],\n\n TitleBarWidget = defineWidget(\n ({attrs}) => m(\"h2.marg-2.no-marg-bottom\", attrs.title)\n ),\n EntityTemplates = defineWidget(\n ({attrs}) => {\n\n const\n {type = \"changes\", meta, onInput, title, options} = attrs,\n valid = meta.title?.trim().length && meta.description?.trim().length,\n embedded = options && options.embedded;\n\n return m(\".flexcol.grows.ohidden.fadein\", [\n ...attrs.title ? [\n m(TitleBarWidget, {\n title\n })] : [],\n m(\".flexrow.wrap.grows.pad-3.propsgroup.scrolly\", [\n ...attrs.notice ? [\n m(Notice, {\n class: \"marg-1 marg-v withbottommargin font-75 col-12\",\n size: 1,\n icon: \"info-circle\",\n text: attrs.notice\n })\n ] : [],\n m(\n \".witharia.col-12.pad-1.pad-v\",\n {\"aria-label\": type + \" name\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (valid ? \"valid\" : \"invalid\"),\n value: meta.title,\n maxlength: 64,\n onchange: (newvalue) => {\n meta.title = newvalue;\n m.redraw();\n }\n })\n ),\n ...embedded ? []\n : [\n m(\n \".col-12.witharia.pad-1.pad-v\",\n {\"aria-label\": \"description\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh \" + (meta.description ? \"valid\" : \"invalid\"),\n value: meta.description,\n maxlength: 240,\n multi: true,\n alwaysmulti: true,\n onchange: (newvalue) => {\n meta.description = newvalue;\n m.redraw();\n }\n })\n ),\n m(\n \".col-8.witharia.pad-1.pad-v\",\n {\"aria-label\": \"tags\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.tags,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.tags = newvalue.toLowerCase()\n .split(\" \")\n .join(\",\")\n .split(\",\")\n .filter((tag) => tag.length)\n .join(\",\");\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"youtube video\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.ytref || \"\",\n hint: \"YouTube ID\",\n maxlength: 16,\n onchange: (newvalue) => {\n newvalue = newvalue.trim();\n if (newvalue) {\n if (newvalue.indexOf(\" \") === -1) {\n meta.ytref = newvalue.trim();\n }\n } else {\n delete meta.ytref;\n }\n }\n })\n )\n ],\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"content attribution\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.author,\n hint: \"author name\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.author = newvalue;\n }\n })\n ),\n\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"license or author link\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n hint: \"https://...\",\n value: meta.link,\n maxlength: 128,\n onchange: (newvalue) => {\n meta.link = newvalue;\n }\n })\n ),\n m(\n \".col-4.witharia.pad-1.pad-v\",\n {\"aria-label\": \"source domain\"},\n m(InputWidget, {\n class: \"pad-2 pad-xh\",\n value: meta.source,\n hint: \"example.com\",\n maxlength: 128,\n onchange: (newvalue) => {\n meta.source = newvalue;\n }\n })\n ),\n\n m(\n \".col-12.al-right.marg-2.marg-v\",\n m(ButtonNew, {\n class: \"noshrink accentbutton unitheightsmall col-4\",\n text: \"save \" + type,\n onClick: () => {\n\n const isValid = meta.title?.trim().length && (embedded || meta.description?.trim().length);\n\n if (isValid) {\n widget.popupMessage(null);\n onInput(meta);\n } else {\n Notification.add(\"Information is incomplete or invalid\");\n }\n }\n })\n )\n ])\n ]);\n }\n ),\n promptEntity = (meta, title, type, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n m(EntityTemplates, {\n meta,\n type,\n title,\n options,\n onInput: (newMeta) => resolve(newMeta)\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n }),\n PresetTemplate = defineWidget(\n ({attrs}) => {\n\n const\n\n {parameters, preset, presetComponents, types, globalData, fetcher} = attrs,\n available = [],\n sourceAvailable = [],\n items = types\n ? PROPERTIES\n : PROPERTIES.filter((cosa) => {\n\n const\n [, primaryTarget, elements, index, globalSource] = cosa,\n target = primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = primaryTarget ? rootSource[primaryTarget] : rootSource;\n\n let found = false;\n\n if (elements.length) {\n\n for (const element of elements) {\n if (target && target[element] !== undefined) {\n found = available[index] = true;\n }\n if (source[element] !== undefined) {\n found = sourceAvailable[index] = true;\n }\n }\n return found;\n } else {\n found = true;\n sourceAvailable[index] = !!source;\n available[index] = !!target;\n }\n return found;\n\n });\n\n return m(\n \"ul.flexrow.wrap.userdialog\",\n items.length\n ? items.map((cosa) => {\n\n const\n [title, primaryTarget, elements, cosaIndex, globalSource, fetchLive] = cosa,\n target = types ? undefined : primaryTarget ? preset[primaryTarget] : preset,\n rootSource = globalSource ? globalData : parameters,\n source = types ? undefined : primaryTarget ? rootSource[primaryTarget] : rootSource,\n deleteCurrent = () => {\n if (elements.length) {\n for (const field of elements) {\n delete target[field];\n }\n } else if (elements.length === 0 && primaryTarget) {\n delete preset[primaryTarget];\n }\n attrs.redraw && attrs.redraw();\n },\n updateCurrent = () => {\n if (elements.length) {\n if (primaryTarget && !preset[primaryTarget]) preset[primaryTarget] = {};\n const updatedTarget = primaryTarget ? preset[primaryTarget] : preset;\n for (const field of elements) {\n if (source[field] !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(updatedTarget[field], cosaIndex) : source[field];\n updatedTarget[field] = clone(finalSource);\n }\n }\n } else if (elements.length === 0 && primaryTarget) {\n if (source !== undefined) {\n const finalSource = fetchLive && fetcher ? fetcher(source, cosaIndex) : source;\n preset[primaryTarget] = clone(finalSource);\n }\n }\n attrs.redraw && attrs.redraw();\n Notification.add(`updated ${title} from current scene`);\n },\n isAvailable = types || available[cosaIndex],\n isSourceAvailable = sourceAvailable[cosaIndex];\n\n return [\n ...presetComponents ? [\n m(SwitchWidget, {\n title: `Include ${cosa[0]} in snapshots`,\n class: \"grows unitheightsmall\" + (presetComponents[cosaIndex] ? \" accent\" : \"\"),\n checked: !!presetComponents[cosaIndex],\n onchange: (status) => {\n presetComponents[cosaIndex] = !presetComponents[cosaIndex];\n m.redraw();\n attrs.redraw && attrs.redraw();\n }\n }),\n m(\".grows\", {class: isAvailable ? \"avail\" : \"unavail\"}, title)\n ] : [],\n ...!attrs.types ? [\n m(ButtonNew, {\n class: \"col-3\" + (isSourceAvailable ? \"avail\" : \"unavail\"),\n icon: \"sync\", title: `Copy ${title} from current state`,\n onClick: updateCurrent\n }),\n m(ButtonNew, {\n class: \"col-3 \" + (isAvailable ? \"\" : \"disabled text-lo\"),\n icon: \"trash\", title: `Delete ${title} in preset`,\n onClick: () => isAvailable && deleteCurrent()\n })\n ] : [],\n m(\".flexbreak\")\n ];\n\n })\n : m(\"h3\", \"Preset is Empty\")\n );\n }\n ),\n promptPreset = (preset, parameters, options = {}) => new Promise((resolve, reject) => {\n widget.popupMessage(\n () => m(PresetTemplate, {\n ...options,\n preset,\n parameters,\n redraw: () => widget.popupMessage.redraw()\n }),\n () => {\n reject(new Error(\"cancelled\"));\n }\n );\n });\n\nexport {\n promptName,\n promptEntity,\n promptPreset,\n promptOptions,\n choose\n};\n","import m from \"mithril\";\nimport defineWidget from \"../util/widgets.utils\";\n\n\nconst\n\n\tSeparator = defineWidget(\n\t\t({ attrs, children }) => m(\n\t\t\t\".separator\",\n\t\t\t{\n\t\t\t\tclass: attrs.class || \"mini\",\n\t\t\t\t...attrs.onClick && { onclick: attrs.onClick }\n\t\t\t},\n\t\t\t[\n\t\t\t\tm(\"span.grows\", attrs.text),\n\t\t\t\t...(children || [])\n\t\t\t]\n\t\t)\n\t);\n\nexport default Separator;\n","import m from \"mithril\";\n\n\n///////////////////////////////////////////////\n// Mithril Range\n// (c) 2017-2018 by Mike Linkovich\n// https://github.com/spacejack/mithril-range\n// License: MIT\n///////////////////////////////////////////////\nconst\n\n NONE = 0,\n MOUSE = 1,\n TOUCH = 2,\n\n // So we aren't triggered by echoed mouse events (some mobile browsers)\n DEVICE_DELAY = 350,\n\n isIOS = !!navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\n// This is some unbelievable stone-age nonsense.\n// Workaround for webkit bug where event.preventDefault\n// within touchmove handler fails to prevent scrolling.\n\nlet\n iOSHackApplied = false;\n\n/** Clamp number to range */\nfunction clamp(n, min, max) {\n return Math.min(Math.max(n, min), max);\n}\n\nfunction applyIOSHack() {\n // Only apply this hack if iOS, haven't yet applied it,\n // and only if a component is actually created\n if (!isIOS || iOSHackApplied) {\n return;\n }\n window.addEventListener(\"touchmove\", function () {\n });\n iOSHackApplied = true;\n}\n\nexport function quantize(val, min, max, step) {\n if (max - min <= 0) {\n return min;\n }\n if (step <= 0) {\n return clamp(val, min, max);\n }\n const\n steps = Math.ceil((max - min) / step),\n v = min + Math.round(steps * (val - min) / (max - min)) * step;\n return clamp(v, min, max);\n}\n\n\n/** Range Component */\nfunction MithrilRange() {\n let\n elHit,\n elBar,\n elBar0,\n elBar1,\n elHandle,\n rcBar,\n device = NONE,\n pressed = false,\n\n useAbsolute = false,\n factorCoarse = 4,\n factorFine = 1,\n absolute,\n lastRead,\n\n // Attrs we need to cache\n min = 0,\n max = 10,\n value = 0,\n startValue = 0,\n step = 1,\n orientation = \"horizontal\",\n onchange,\n ondrag;\n\n // App handlers\n function onPressAbsolute(x, y) {\n startValue = value;\n pressed = absolute = true;\n rcBar = elBar.getBoundingClientRect();\n const val = moveHandleAbsolute(x, y);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onPressDelta(x, y, e, isTouch) {\n startValue = value;\n pressed = true;\n absolute = false;\n rcBar = elBar.getBoundingClientRect();\n lastRead = (orientation === \"vertical\") ? y : x;\n if (!isTouch) e.target.requestPointerLock();\n }\n\n function moveHandleAbsolute(x, y) {\n\n let\n barLength,\n delta;\n\n if (orientation === \"vertical\") {\n\n barLength = rcBar.bottom - rcBar.top;\n delta = rcBar.bottom - y;\n\n } else {\n barLength = rcBar.right - rcBar.left;\n delta = x - rcBar.left;\n }\n\n delta = clamp(delta, 0, barLength);\n const val = quantize((delta / barLength) * (max - min) + min, min, max, step);\n setStyles(val);\n return val;\n }\n\n function moveHandleDelta(x, y, event) {\n\n const\n factor = event.shiftKey\n ? factorCoarse\n : (event.metaKey || event.ctrlKey)\n ? 4 * factorCoarse\n : factorFine;\n\n let\n delta;\n\n if (orientation === \"vertical\") {\n delta = event.movementY || 0;\n } else {\n delta = event.movementX || 0;\n }\n\n let newVal;\n let s = step > 0 ? step : (max - min) / 100;\n\n if (delta < 0) {\n newVal = Math.max(value + s * factor * delta, min);\n } else if (delta > 0) { // right/up\n newVal = Math.min(value + s * factor * delta, max);\n } else {\n return value;\n }\n\n newVal = quantize(newVal, min, max, step);\n\n setStyles(newVal);\n return newVal;\n\n }\n\n function onPress(x, y, event) {\n return useAbsolute\n ? onPressAbsolute(x, y, event)\n : onPressDelta(x, y, event);\n }\n\n function moveHandle(x, y, event) {\n return absolute\n ? moveHandleAbsolute(x, y, event)\n : moveHandleDelta(x, y, event);\n }\n\n // Event handlers\n function onMouseDown(e) {\n if (device === TOUCH) {\n return;\n }\n device = MOUSE;\n if (e.button !== 0) {\n return;\n }\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", onMouseUp);\n onPress(e.clientX, e.clientY, e);\n }\n\n function onMouseMove(e) {\n e.preventDefault();\n onMove(e.clientX, e.clientY, e);\n }\n\n function onMouseUp(e) {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n onRelease(e.clientX, e.clientY, e);\n }\n\n function onTouchStart(e) {\n if (device === MOUSE) {\n return;\n }\n elHit.addEventListener(\"touchmove\", onTouchMove);\n elHit.addEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onPress(t.clientX, t.clientY, e, true);\n }\n\n function onTouchMove(e) {\n e.preventDefault();\n const t = e.changedTouches[0];\n onMove(t.clientX, t.clientY, e);\n }\n\n function onTouchEnd(e) {\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n const t = e.changedTouches[0];\n onRelease(t.clientX, t.clientY, t);\n }\n\n function onKeyDown(e) {\n\n const k = e.keyCode;\n let newVal;\n\n if (k === 33) { // pgup\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value + s, min, max, step);\n } else if (k === 34) { // pgdown\n e.preventDefault();\n let s = Math.max((max - min) / 10, step);\n if (s <= 0) {\n s = 1;\n }\n newVal = quantize(value - s, min, max, step);\n } else if (k === 35) { // end\n e.preventDefault();\n newVal = max;\n } else if (k === 36) { // home\n e.preventDefault();\n newVal = min;\n } else if (k === 37 || k === 40) { // left/down\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.max(value - s, min);\n } else if (k === 38 || k === 39) { // right/up\n e.preventDefault();\n let s = (step > 0 ? step : (max - min) / 10) * (e.shiftKey ? 0.25 : (e.ctrlKey || e.metaKey) ? 4 : 1);\n newVal = Math.min(value + s, max);\n } else if (k === 48) { // 0\n newVal = (max + min) / 2;\n }\n if (typeof newVal !== \"number\" || newVal === value) {\n return; // no change to make\n }\n value = newVal;\n setStyles(value);\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n\n function onMove(x, y, event) {\n if (!pressed) {\n return;\n }\n\n const val = moveHandle(x, y, event);\n if (val !== value) {\n value = val;\n if (ondrag && ondrag(value) !== false) {\n m.redraw();\n }\n }\n }\n\n function onRelease(x, y, e) {\n\n if (!pressed) {\n return;\n }\n\n pressed = false;\n value = moveHandle(x, y, e);\n\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n\n /*\n if (value !== startValue) {\n if (onchange && onchange(value) !== false) {\n m.redraw();\n }\n }\n */\n\n if (!absolute) document.exitPointerLock();\n\n setTimeout(function () {\n if (!pressed) {\n device = NONE;\n }\n }, DEVICE_DELAY);\n }\n\n /** Compute handle position style */\n function positionStyle(val) {\n let s = (val - min) / (max - min);\n if (orientation === \"vertical\") {\n s = 1.0 - s;\n }\n return String(100 * s) + \"%\";\n }\n\n /** Set styles for movable parts */\n function setStyles(value) {\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n\n if (orientation === \"vertical\") {\n elHandle.style.top = ps;\n elBar0.style.height = ps;\n elBar1.style.height = rps;\n } else {\n elHandle.style.left = ps;\n elBar0.style.width = rps;\n elBar1.style.width = ps;\n }\n }\n\n /** Some attrs need to be cached (and updated) so that they are current in event handlers */\n function updateAttrs(attrs) {\n min = attrs.min;\n max = attrs.max;\n step = (typeof attrs.step === \"number\" && !Number.isNaN(attrs.step))\n ? clamp(attrs.step, 0, max - min) : 1;\n orientation = attrs.orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n onchange = attrs.onchange;\n ondrag = attrs.ondrag;\n if (typeof attrs.value === \"number\") {\n value = clamp(attrs.value, min, max);\n }\n useAbsolute = !attrs.relative;\n factorCoarse = (attrs.factor && attrs.factor[0]) || 4;\n factorFine = (attrs.factor && attrs.factor[1]) || 1;\n\n }\n\n /** Return mithril component hooks object */\n return {\n oncreate: ({attrs, dom}) => {\n applyIOSHack();\n updateAttrs(attrs);\n elHit = dom;\n elBar = elHit.querySelector(\".mithril-range-bar\");\n elBar0 = elBar.querySelector(\".mithril-range-bar-0\");\n elBar1 = elBar.querySelector(\".mithril-range-bar-1\");\n elHandle = elBar.querySelector(\".mithril-range-handle\");\n elHit.addEventListener(\"mousedown\", onMouseDown);\n elHit.addEventListener(\"touchstart\", onTouchStart);\n elHit.addEventListener(\"keydown\", onKeyDown);\n },\n onremove: function () {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", onMouseUp);\n elHit.removeEventListener(\"mousedown\", onMouseDown);\n elHit.removeEventListener(\"touchstart\", onTouchStart);\n elHit.removeEventListener(\"touchmove\", onTouchMove);\n elHit.removeEventListener(\"touchend\", onTouchEnd);\n elHit.removeEventListener(\"keydown\", onKeyDown);\n },\n view: function ({attrs, children}) {\n\n updateAttrs(attrs);\n value = quantize(value, min, max, step);\n const a = {\n class: \"mithril-range nokey\" + (attrs.relative ? \" isrelative \" : \" \") + (value === 0 ? \"atzero\" : value < 0 ? \"belowzero\" : \"overzero\") + (attrs.class != null ? \" \" + attrs.class : \"\"),\n tabIndex: \"0\",\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": orientation\n };\n if (attrs.id) {\n a.id = attrs.id;\n }\n // noinspection JSUnresolvedVariable\n if (attrs.ariaLabelledby) {\n a[\"aria-labelledby\"] = attrs.ariaLabelledby;\n }\n if (attrs.disabled) {\n a.style = {pointerEvents: \"none\"};\n a[\"aria-disabled\"] = \"true\";\n }\n const\n ps = positionStyle(value),\n rps = positionStyle(max - value + min);\n let\n handleStyle,\n bar0Style,\n bar1Style;\n\n if (orientation === \"vertical\") {\n handleStyle = {top: ps};\n bar0Style = {height: ps};\n bar1Style = {height: rps};\n } else {\n handleStyle = {left: ps};\n bar0Style = {width: rps};\n bar1Style = {width: ps};\n }\n return m(\"div\", a, m(\"div\", {class: \"mithril-range-bar nokey\"}, m(\"div\", {\n class: \"mithril-range-bar-0 nokey\",\n style: bar0Style\n }), m(\"div\", {\n class: \"mithril-range-bar-1 nokey\",\n style: bar1Style\n }), m(\"div\", {\n class: \"mithril-range-handle nokey\",\n style: handleStyle\n }, children)), !!attrs.name && m(\"input\", {\n type: \"hidden\",\n name: attrs.name,\n value: String(value)\n }));\n }\n };\n}\n\nexport default MithrilRange;\n","import m from \"mithril\";\nimport MithrilRange from \"../util/mithril-range\";\n\nlet\n __timer;\n\nconst\n resetMultiplier = (state) => {\n /*\n if (state.curMultiplier > 1 && state.value < state.curMax * (state.curMultiplier - 1)) {\n state.curMultiplier = Math.ceil(state.value / state.curMax);\n m.redraw();\n }\n */\n\n const\n // req multiplier to show value within negative bounds\n maxMultiplier = state.value > state.curMax ? Math.ceil(state.value / state.curMax) : 1,\n // req multiplier to show value within positive bounds\n minMultiplier = (state.curMin < 0 && state.value < state.curMin) ? Math.abs(Math.ceil(state.value / state.curMin)) : 1,\n // chosen\n multiplier = Math.min(Math.max(minMultiplier, maxMultiplier), state.maxMultiplier);\n\n if (state.curMultiplier !== multiplier) {\n state.curMultiplier = multiplier;\n m.redraw();\n }\n },\n increaseMultiplier = (state) => {\n if (\n state.value >= (state.curMax * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n if (state.curMin < 0) return increaseMinMultiplier(state);\n },\n increaseMinMultiplier = (state) => {\n if (state.value <= (state.curMin * state.curMultiplier) * 0.9\n && state.maxMultiplier > 1\n && state.curMultiplier <= state.maxMultiplier - 1\n ) {\n state.curMultiplier++;\n return true;\n }\n },\n RangeSlider = {\n\n oninit: ({attrs, state}) => {\n Object.assign(state, {\n value: attrs.value || 0,\n initial: attrs.value || 0,\n curMax: attrs.max,\n curMin: attrs.min,\n curMultiplier: 1,\n maxMultiplier: attrs.multiplier || 1,\n id: \"I\" + Date.now()\n });\n // adjust initial multiplier\n if (state.maxMultiplier > 1) {\n if (state.value > attrs.max) {\n state.curMultiplier = Math.ceil(state.value / attrs.max);\n } else if (attrs.min < 0 && state.value < attrs.min) {\n state.curMultiplier = Math.abs(Math.ceil(state.value / attrs.min));\n }\n }\n },\n onupdate: ({attrs, state}) => {\n const\n attrsMultiplier = attrs.multiplier || 1,\n attrsValue = attrs.value || 0;\n\n if (state.curMax !== attrs.max || state.maxMultiplier !== attrsMultiplier) {\n\n Object.assign(state, {\n curMax: attrs.max,\n curMin: attrs.min,\n maxMultiplier: attrsMultiplier,\n value: attrs.value,\n initial: attrsValue\n });\n if (!increaseMultiplier(state)) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n m.redraw();\n\n } else if (state.initial !== attrsValue) {\n\n Object.assign(state, {\n value: attrsValue,\n initial: attrsValue\n });\n\n clearTimeout(__timer);\n __timer = setTimeout(() => m.redraw(), 50);\n\n /*\n if (!increaseMultiplier(state)) {\n state.timer = setTimeout(resetMultiplier, 1000, state);\n clearTimeout(state.timer);\n }\n */\n }\n },\n view: ({attrs, state}) => m(\n \".range.flexcol.control.relative\" + (attrs.multiplier > 1 ? \".withmultiplier\" : \"\"),\n {\n ...attrs.class && {class: attrs.class},\n title: attrs.hint || \"Click, then use arrows to finetune value if needed\"\n },\n [\n ...attrs.title ? [m(\"label\", {class: \"rangelabel\", htmlFor: state.id}, attrs.title)] : [],\n m(MithrilRange, {\n onchange: (value) => {\n\n state.value = value;\n\n const increased = increaseMultiplier(state);\n\n if (!increased && state.curMultiplier > 1) {\n clearTimeout(state.timer);\n state.timer = setTimeout(resetMultiplier, 1000, state);\n }\n\n if (attrs.onchange) {\n attrs.onchange(value);\n } else {\n m.redraw();\n }\n },\n ondrag: (value) => {\n if (value !== state.value) {\n state.value = value;\n if (attrs.ondrag) attrs.ondrag(value);\n return true;\n }\n return false;\n },\n value: state.value || 0,\n min: (attrs.min || 0) * state.curMultiplier,\n max: (state.curMax * state.curMultiplier) || 100,\n step: attrs.step || 1,\n relative: attrs.relative,\n factor: attrs.factor\n }, [\n m(\".currentval\", attrs.parser\n ? attrs.parser(state.value, attrs.step < 1)\n : state.value\n ? attrs.step < 1\n ? state.value.toFixed(2)\n : (\"\" + Math.floor(state.value)) : \"\")\n ])\n /*\n m(\".datalist.flexrow\", [\n m(\"div\", attrs.getLabel(0)),\n m(\".ismax\", attrs.getLabel(attrs.max || 100))\n ])\n */\n ]\n )\n },\n RangeWidget = {\n view: ({attrs, state}) => m(RangeSlider, {\n value: attrs.value || 0,\n min: attrs.min || 0,\n max: attrs.max || 100,\n step: attrs.step || 0.1,\n class: (attrs.disabled ? \"disabled \" : \"\") + (attrs.class || \"\"),\n title: attrs.title,\n multiplier: attrs.multiplier,\n hint: attrs.hint,\n parser: attrs.parser,\n relative: attrs.relative,\n factor: attrs.factor,\n\n // values: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],\n getLabel: (value) => (value ? \"\" + value : \"default\"),\n ondrag: (value) => {\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, true);\n return true;\n },\n onchange: (value) => {\n if (attrs.auto0) {\n value = 0;\n } else if (attrs.autoValue) value = attrs.autoValue;\n state.changed = true;\n state.value = value;\n if (attrs.onchange) attrs.onchange(value, false);\n return true;\n }\n })\n };\n\nexport default RangeWidget;\n","function startApp(target, appMetadata) {\n m.route(\n document.getElementById(target),\n appMetadata.default || \"/\",\n appMetadata.routes\n );\n}\n\nexport default startApp;"],"names":["getAttrs","attrs","parentAttrs","panelInitialParams","data","initialParams","isCurrent","currentIndex","index","Icon","view","m","pack","icon","size","title","icontitle","undefined","role","onclick","iconClass","class","Button","state","children","download","link","href","target","text","busy","error","message","event","clearTimeout","debounce","setTimeout","result","then","catch","redraw","right","textClass","ButtonNew","rel","onClick","Empty","key","split","map","str","idx","all","length","setItem","params","lastIndex","lastParams","currentParams","Object","assign","current","items","onSelected","Selector","oninit","selected","isNaN","noinitial","onupdate","element","horizontal","className","hideonly","hidesel","toolbarClass","item","Date","now","clickts","bodyHidden","toggle","bodyClass","widget","closeButton","ICONS","info","success","Notification","TOAST_SHORT","altContainer","mTimer","mNotifications","next","container","document","getElementById","n","splice","render","type","timer","add","push","clear","defineWidget","oncreate","onremove","globalState","CardieWidget","nofold","cardid","action","collapsedAction","collapsedClass","expandedClass","cols","expandedView","collapsedView","titleWidget","titWidget","titleAttrs","titleClass","titleExpanded","titleCollapsed","collapsed","buttonClass","skipEmpty","e","classList","contains","shiftKey","onShiftOpen","expanded","uniq","subname","keys","forEach","startsWith","setCardStatus","alwaysView","getInput","value","parse","val","float","Number","parseFloat","parseInt","getValue","lastVal","hasOwnProperty","StaticFieldWidget","vnode","onDrag","staticClass","staticTitle","dom","readonly","hammer","Hammer","Manager","touchAction","panner","Pan","direction","DIRECTION_VERTICAL","singleTap","Tap","on","srcEvent","focus","destroy","InputWidget","reset","showInput","label","containerClass","staticField","multi","alwaysmulti","id","max","min","step","maxlength","validator","isValid","placeholder","hint","oninput","fromoninput","onchange","enterPressed","onblur","onkeyup","onkeypress","onenter","dragging","draginc","displayTitle","String","actions","NoticeWidget","SwitchWidget","unit","subline","checked","original","mCurrentCancelable","runCancelable","style","display","popupMessage","cancelable","contentClass","clearModal","OverflowMenu","domItem","options","Promise","resolve","closeResolve","widget.popupMessage","classes","initials","clases","finals","cla","join","packClassString","favlist","nodeName","getAttribute","ev","keyCode","blur","caption","clone","window","structuredClone","o","JSON","stringify","promptName","body","refreshKey","PROPERTIES","TitleBarWidget","EntityTemplates","meta","onInput","valid","trim","description","embedded","notice","Notice","newvalue","tags","toLowerCase","filter","tag","ytref","indexOf","author","source","PresetTemplate","parameters","preset","presetComponents","types","globalData","fetcher","available","sourceAvailable","cosa","primaryTarget","elements","globalSource","rootSource","found","cosaIndex","fetchLive","isAvailable","isSourceAvailable","status","updatedTarget","field","finalSource","deleteCurrent","config","onSelect","parser","v","Array","isArray","reject","newMeta","Error","textNew","textHint","dialogOptions","finally","Separator","isIOS","navigator","userAgent","match","__timer","iOSHackApplied","clamp","Math","quantize","steps","ceil","round","MithrilRange","elHit","elBar","elBar0","elBar1","elHandle","rcBar","absolute","ondrag","device","pressed","useAbsolute","factorCoarse","factorFine","orientation","moveHandleAbsolute","x","y","barLength","delta","bottom","top","left","setStyles","onPress","getBoundingClientRect","onPressAbsolute","isTouch","requestPointerLock","moveHandle","factor","metaKey","ctrlKey","newVal","movementY","movementX","s","moveHandleDelta","onMouseDown","button","addEventListener","onMouseMove","onMouseUp","clientX","clientY","preventDefault","onMove","removeEventListener","onRelease","onTouchStart","onTouchMove","onTouchEnd","t","changedTouches","onKeyDown","k","exitPointerLock","positionStyle","ps","rps","height","width","updateAttrs","relative","querySelector","a","tabIndex","ariaLabelledby","disabled","pointerEvents","handleStyle","bar0Style","bar1Style","name","resetMultiplier","maxMultiplier","curMax","minMultiplier","curMin","abs","multiplier","curMultiplier","increaseMultiplier","increaseMinMultiplier","RangeSlider","initial","attrsMultiplier","attrsValue","htmlFor","toFixed","floor","RangeWidget","getLabel","changed","auto0","autoValue","startApp","appMetadata","route","default","routes"],"mappings":"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"}