mithril-materialized 0.19.6 → 1.0.0-beta.1

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.
Files changed (84) hide show
  1. package/README.md +6 -2
  2. package/dist/autocomplete.d.ts +14 -7
  3. package/dist/button.d.ts +40 -40
  4. package/dist/carousel.d.ts +38 -18
  5. package/dist/chip.d.ts +31 -11
  6. package/dist/code-block.d.ts +8 -9
  7. package/dist/collapsible.d.ts +26 -22
  8. package/dist/collection.d.ts +49 -49
  9. package/dist/dropdown.d.ts +45 -46
  10. package/dist/floating-action-button.d.ts +37 -34
  11. package/dist/icon.d.ts +11 -11
  12. package/dist/index.css +7968 -2
  13. package/dist/index.d.ts +26 -28
  14. package/dist/index.esm.js +4211 -2
  15. package/dist/index.js +4265 -2
  16. package/dist/index.umd.js +4269 -2
  17. package/dist/input-options.d.ts +85 -81
  18. package/dist/input.d.ts +47 -42
  19. package/dist/label.d.ts +21 -22
  20. package/dist/material-box.d.ts +38 -21
  21. package/dist/material-icon.d.ts +14 -0
  22. package/dist/modal.d.ts +41 -26
  23. package/dist/option.d.ts +61 -52
  24. package/dist/pagination.d.ts +16 -20
  25. package/dist/parallax.d.ts +14 -13
  26. package/dist/pickers.d.ts +130 -8
  27. package/dist/radio.d.ts +41 -37
  28. package/dist/search-select.d.ts +41 -0
  29. package/dist/select.d.ts +46 -45
  30. package/dist/switch.d.ts +12 -13
  31. package/dist/tabs.d.ts +57 -45
  32. package/dist/utils.d.ts +43 -70
  33. package/package.json +55 -16
  34. package/sass/components/_badges.scss +59 -0
  35. package/sass/components/_buttons.scss +327 -0
  36. package/sass/components/_cards.scss +197 -0
  37. package/sass/components/_carousel.scss +92 -0
  38. package/sass/components/_chips.scss +92 -0
  39. package/sass/components/_collapsible.scss +94 -0
  40. package/sass/components/_color-classes.scss +34 -0
  41. package/sass/components/_color-variables.scss +371 -0
  42. package/sass/components/_datepicker.scss +251 -0
  43. package/sass/components/_dropdown.scss +90 -0
  44. package/sass/components/_global.scss +775 -0
  45. package/sass/components/_grid.scss +160 -0
  46. package/sass/components/_icons-material-design.scss +5 -0
  47. package/sass/components/_materialbox.scss +43 -0
  48. package/sass/components/_modal.scss +97 -0
  49. package/sass/components/_navbar.scss +211 -0
  50. package/sass/components/_normalize.scss +447 -0
  51. package/sass/components/_preloader.scss +336 -0
  52. package/sass/components/_pulse.scss +34 -0
  53. package/sass/components/_sidenav.scss +213 -0
  54. package/sass/components/_slider.scss +94 -0
  55. package/sass/components/_table_of_contents.scss +36 -0
  56. package/sass/components/_tabs.scss +102 -0
  57. package/sass/components/_tapTarget.scss +105 -0
  58. package/sass/components/_timepicker.scss +170 -0
  59. package/sass/components/_toast.scss +61 -0
  60. package/sass/components/_tooltip.scss +32 -0
  61. package/sass/components/_transitions.scss +13 -0
  62. package/sass/components/_typography.scss +61 -0
  63. package/sass/components/_variables.scss +352 -0
  64. package/sass/components/_waves.scss +114 -0
  65. package/sass/components/forms/_checkboxes.scss +203 -0
  66. package/sass/components/forms/_file-input.scss +50 -0
  67. package/sass/components/forms/_form-groups.scss +28 -0
  68. package/sass/components/forms/_forms.scss +24 -0
  69. package/sass/components/forms/_input-fields.scss +361 -0
  70. package/sass/components/forms/_radio-buttons.scss +118 -0
  71. package/sass/components/forms/_range.scss +164 -0
  72. package/sass/components/forms/_select.scss +193 -0
  73. package/sass/components/forms/_switches.scss +92 -0
  74. package/sass/materialize.scss +41 -0
  75. package/dist/index.css.map +0 -1
  76. package/dist/index.esm.js.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/index.modern.js +0 -2
  79. package/dist/index.modern.js.map +0 -1
  80. package/dist/index.umd.js.map +0 -1
  81. package/dist/kanban.d.ts +0 -47
  82. package/dist/layout-form-generator.d.ts +0 -75
  83. package/dist/map-editor.d.ts +0 -63
  84. package/dist/timeline.d.ts +0 -24
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/vnode.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/hyperscriptVnode.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/util/hasOwn.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/hyperscript.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/hyperscript.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/trust.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/fragment.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/promise/polyfill.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/promise/promise.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render/render.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/render.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/api/mount-redraw.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/mount-redraw.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/querystring/build.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/util/assign.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/pathname/build.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/request/request.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/request.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/querystring/parse.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/pathname/parse.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/util/censor.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/api/router.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/pathname/compileTemplate.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/route.js","../../../node_modules/.pnpm/mithril@2.2.2/node_modules/mithril/index.js","../src/utils.ts","../src/collection.ts","../src/label.ts","../src/icon.ts","../src/button.ts","../src/carousel.ts","../src/collapsible.ts","../src/dropdown.ts","../src/input.ts","../src/pickers.ts","../src/option.ts","../src/select.ts","../src/radio.ts","../src/layout-form-generator.ts","../src/modal.ts","../src/pagination.ts","../src/timeline.ts","../src/autocomplete.ts","../src/chip.ts","../src/code-block.ts","../src/floating-action-button.ts","../src/kanban.ts","../src/map-editor.ts","../src/material-box.ts","../src/parallax.ts","../src/switch.ts","../src/tabs.ts"],"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 = {}\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\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\tvnode.attrs = {}\n\n\tif (!isEmpty(state.attrs) && !isEmpty(attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tfor (var key in attrs) {\n\t\tif (hasOwn.call(attrs, key) && key !== \"key\") {\n\t\t\tvnode.attrs = attrs\n\t\t\tbreak\n\t\t}\n\t}\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 hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\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/** @constructor */\nvar PromisePolyfill = function(executor) {\n\tif (!(this instanceof PromisePolyfill)) throw new Error(\"Promise must be called with 'new'.\")\n\tif (typeof executor !== \"function\") throw new TypeError(\"executor must be a function.\")\n\n\tvar self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false)\n\tvar instance = self._instance = {resolvers: resolvers, rejectors: rejectors}\n\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\tfunction handler(list, shouldAbsorb) {\n\t\treturn function execute(value) {\n\t\t\tvar then\n\t\t\ttry {\n\t\t\t\tif (shouldAbsorb && value != null && (typeof value === \"object\" || typeof value === \"function\") && typeof (then = value.then) === \"function\") {\n\t\t\t\t\tif (value === self) throw new TypeError(\"Promise can't be resolved with itself.\")\n\t\t\t\t\texecuteOnce(then.bind(value))\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallAsync(function() {\n\t\t\t\t\t\tif (!shouldAbsorb && list.length === 0) console.error(\"Possible unhandled promise rejection:\", value)\n\t\t\t\t\t\tfor (var i = 0; i < list.length; i++) list[i](value)\n\t\t\t\t\t\tresolvers.length = 0, rejectors.length = 0\n\t\t\t\t\t\tinstance.state = shouldAbsorb\n\t\t\t\t\t\tinstance.retry = function() {execute(value)}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\trejectCurrent(e)\n\t\t\t}\n\t\t}\n\t}\n\tfunction executeOnce(then) {\n\t\tvar runs = 0\n\t\tfunction run(fn) {\n\t\t\treturn function(value) {\n\t\t\t\tif (runs++ > 0) return\n\t\t\t\tfn(value)\n\t\t\t}\n\t\t}\n\t\tvar onerror = run(rejectCurrent)\n\t\ttry {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)}\n\t}\n\n\texecuteOnce(executor)\n}\nPromisePolyfill.prototype.then = function(onFulfilled, onRejection) {\n\tvar self = this, instance = self._instance\n\tfunction handle(callback, list, next, state) {\n\t\tlist.push(function(value) {\n\t\t\tif (typeof callback !== \"function\") next(value)\n\t\t\telse try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)}\n\t\t})\n\t\tif (typeof instance.retry === \"function\" && state === instance.state) instance.retry()\n\t}\n\tvar resolveNext, rejectNext\n\tvar promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject})\n\thandle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false)\n\treturn promise\n}\nPromisePolyfill.prototype.catch = function(onRejection) {\n\treturn this.then(null, onRejection)\n}\nPromisePolyfill.prototype.finally = function(callback) {\n\treturn this.then(\n\t\tfunction(value) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\tfunction(reason) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn PromisePolyfill.reject(reason);\n\t\t\t})\n\t\t}\n\t)\n}\nPromisePolyfill.resolve = function(value) {\n\tif (value instanceof PromisePolyfill) return value\n\treturn new PromisePolyfill(function(resolve) {resolve(value)})\n}\nPromisePolyfill.reject = function(value) {\n\treturn new PromisePolyfill(function(resolve, reject) {reject(value)})\n}\nPromisePolyfill.all = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tvar total = list.length, count = 0, values = []\n\t\tif (list.length === 0) resolve([])\n\t\telse for (var i = 0; i < list.length; i++) {\n\t\t\t(function(i) {\n\t\t\t\tfunction consume(value) {\n\t\t\t\t\tcount++\n\t\t\t\t\tvalues[i] = value\n\t\t\t\t\tif (count === total) resolve(values)\n\t\t\t\t}\n\t\t\t\tif (list[i] != null && (typeof list[i] === \"object\" || typeof list[i] === \"function\") && typeof list[i].then === \"function\") {\n\t\t\t\t\tlist[i].then(consume, reject)\n\t\t\t\t}\n\t\t\t\telse consume(list[i])\n\t\t\t})(i)\n\t\t}\n\t})\n}\nPromisePolyfill.race = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tlist[i].then(resolve, reject)\n\t\t}\n\t})\n}\n\nmodule.exports = PromisePolyfill\n","/* global window */\n\"use strict\"\n\nvar PromisePolyfill = require(\"./polyfill\")\n\nif (typeof window !== \"undefined\") {\n\tif (typeof window.Promise === \"undefined\") {\n\t\twindow.Promise = PromisePolyfill\n\t} else if (!window.Promise.prototype.finally) {\n\t\twindow.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = window.Promise\n} else if (typeof global !== \"undefined\") {\n\tif (typeof global.Promise === \"undefined\") {\n\t\tglobal.Promise = PromisePolyfill\n\t} else if (!global.Promise.prototype.finally) {\n\t\tglobal.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = global.Promise\n} else {\n\tmodule.exports = PromisePolyfill\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function($window) {\n\tvar $doc = $window && $window.document\n\tvar currentRedraw\n\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\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() {\n\t\ttry {\n\t\t\treturn $doc.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 = $doc.createTextNode(vnode.children)\n\t\tinsertNode(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 = $doc.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\tvnode.instance = []\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tvnode.instance.push(child)\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = $doc.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\tinsertNode(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 ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) :\n\t\t\tis ? $doc.createElement(tag, {is: is}) : $doc.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\tinsertNode(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\t//\n\t// The fourth part of the diff currently inserts nodes unconditionally, leading to issues\n\t// like #1791 and #1999. We need to be smarter about those situations where adjascent old\n\t// nodes remain together in the new list in a way that isn't covered by parts one and\n\t// three of the diff algo.\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\tmoveNodes(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) moveNodes(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 moveNodes(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\tremoveHTML(parent, old)\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\tvnode.instance = old.instance\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\tif (vnode.tag === \"textarea\") {\n\t\t\tif (vnode.attrs == null) vnode.attrs = {}\n\t\t}\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 covers a really specific edge case:\n\t// - Parent node is keyed and contains child\n\t// - Child is removed, returns unresolved promise in `onbeforeremove`\n\t// - Parent node is moved in keyed diff\n\t// - Remaining children still need moved appropriately\n\t//\n\t// Ideally, I'd track removed nodes as well, but that introduces a lot more\n\t// complexity and I'm not exactly interested in doing that.\n\tfunction moveNodes(parent, vnode, nextSibling) {\n\t\tvar frag = $doc.createDocumentFragment()\n\t\tmoveChildToFrag(parent, frag, vnode)\n\t\tinsertNode(parent, frag, nextSibling)\n\t}\n\tfunction moveChildToFrag(parent, frag, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\t\t\tfrag.appendChild(vnode.instance[i])\n\t\t\t\t}\n\t\t\t} else if (vnode.tag !== \"[\") {\n\t\t\t\t// Don't recurse for text nodes *or* elements, just fragments\n\t\t\t\tfrag.appendChild(vnode.dom)\n\t\t\t} else if (vnode.children.length === 1) {\n\t\t\t\tvnode = vnode.children[0]\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\tif (child != null) moveChildToFrag(parent, frag, child)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfunction insertNode(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\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\tremoveChild(parent, vnode)\n\t\t} else {\n\t\t\tif (stateResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) { mask &= 2; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tstateResult.then(next, next)\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) { mask &= 1; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tattrsResult.then(next, next)\n\t\t\t}\n\t\t}\n\n\t\tfunction reallyRemove() {\n\t\t\tcheckState(vnode, original)\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t}\n\t}\n\tfunction removeHTML(parent, vnode) {\n\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\tparent.removeChild(vnode.instance[i])\n\t\t}\n\t}\n\tfunction removeChild(parent, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tremoveHTML(parent, vnode)\n\t\t\t} else {\n\t\t\t\tif (vnode.tag !== \"[\") {\n\t\t\t\t\tparent.removeChild(vnode.dom)\n\t\t\t\t\tif (!Array.isArray(vnode.children)) break\n\t\t\t\t}\n\t\t\t\tif (vnode.children.length === 1) {\n\t\t\t\t\tvnode = vnode.children[0]\n\t\t\t\t\tif (vnode != null) continue\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\t\tif (child != null) removeChild(parent, child)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\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\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//\n\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\tvar isFileInput = attrs != null && vnode.tag === \"input\" && attrs.type === \"file\"\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns, isFileInput)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns, isFileInput) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\" || key === \"type\" && vnode.tag === \"input\") 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\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())) 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\tvnode.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()\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\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\t//\n\t\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\t\tvar isFileInput = vnode.tag === \"input\" && attrs.type === \"file\"\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns, isFileInput)\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.tag === \"option\" && vnode.dom.parentNode === $doc.activeElement\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\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\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.cssText = \"\"\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.cssText = 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) element.style.setProperty(normalizeKey(key), String(value))\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\telement.style.setProperty(normalizeKey(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\telement.style.removeProperty(normalizeKey(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()\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\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() !== 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","// This exists so I'm only saving it once.\n\"use strict\"\n\nvar hasOwn = require(\"./hasOwn\")\n\nmodule.exports = Object.assign || function(target, source) {\n\tfor (var key in source) {\n\t\tif (hasOwn.call(source, key)) target[key] = source[key]\n\t}\n}\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"../util/assign\")\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\tassign(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, Promise, oncompletion) {\n\tvar callbackCount = 0\n\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\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 makeRequest(factory) {\n\t\treturn 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 = new Promise(function(resolve, reject) {\n\t\t\t\tfactory(buildPathname(url, args.params), args, function (data) {\n\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tdata[i] = new args.type(data[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse data = new args.type(data)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data)\n\t\t\t\t}, reject)\n\t\t\t})\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\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: makeRequest(function(url, args, resolve, reject) {\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\t\t\t\t\t\tif (success) resolve(response)\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\tjsonp: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar callbackName = args.callbackName || \"_mithril_\" + Math.round(Math.random() * 1e16) + \"_\" + callbackCount++\n\t\t\tvar script = $window.document.createElement(\"script\")\n\t\t\t$window[callbackName] = function(data) {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\tresolve(data)\n\t\t\t}\n\t\t\tscript.onerror = function() {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\treject(new Error(\"JSONP request failed\"))\n\t\t\t}\n\t\t\tscript.src = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n\t\t\t\tencodeURIComponent(args.callbackKey || \"callback\") + \"=\" +\n\t\t\t\tencodeURIComponent(callbackName)\n\t\t\t$window.document.documentElement.appendChild(script)\n\t\t}),\n\t}\n}\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./promise/promise\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, PromisePolyfill, 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\tif (path.length > 1 && path[path.length - 1] === \"/\") path = path.slice(0, -1)\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\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 Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\nvar Promise = require(\"../promise/promise\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../util/assign\")\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\tassign(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","\"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\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\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.jsonp = request.jsonp\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.PromisePolyfill = require(\"./promise/polyfill\")\nm.censor = require(\"./util/censor\")\n\nmodule.exports = m\n","import { IInputOptions } from './input-options';\n\n/**\n * Create a unique ID\n * @see https://stackoverflow.com/a/2117523/319711\n *\n * @returns id followed by 8 hexadecimal characters.\n */\nexport const uniqueId = () => {\n // tslint:disable-next-line:no-bitwise\n return 'idxxxxxxxx'.replace(/[x]/g, () => ((Math.random() * 16) | 0).toString(16));\n};\n\n/**\n * Create a GUID\n * @see https://stackoverflow.com/a/2117523/319711\n *\n * @returns RFC4122 version 4 compliant GUID\n */\nexport const uuid4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nexport const compose = <F extends (d: any) => any, T>(...functions: F[]) => (data: T) =>\n functions.reduceRight((value, func) => func(value), data);\n\nexport const map = <T>(f: (...args: any[]) => any) => (x: T[]) => Array.prototype.map.call(x, f);\n\nexport const join = <T>(seperator: string) => (list: T[]): string => Array.prototype.join.call(list, seperator);\n\n/**\n * Convert camel case to snake case.\n *\n * @param {string} cc: Camel case string\n */\nexport const camelToSnake = (cc: string) => cc.replace(/([A-Z])/g, ($1) => '-' + $1.toLowerCase());\n\nconst encodeAttribute = (x = '') => x.toString().replace(/\"/g, '&quot;');\n\n/** Convert an object to a string of HTML attributes */\nexport const toAttributeString = <T extends { [key: string]: any }>(x?: T) =>\n x\n ? compose<any, T>(\n join(''),\n map((attribute: string) => `[${camelToSnake(attribute)}=\"${encodeAttribute(x[attribute])}\"]`),\n Object.keys\n )(x)\n : '';\n\n/** Options that we want to convert to attributes */\nconst inputAttributes = [\n 'min',\n 'max',\n 'minLength',\n 'maxLength',\n 'rows',\n 'cols',\n 'placeholder',\n 'autocomplete',\n 'pattern',\n 'readOnly',\n 'step',\n];\n\nconst isInputAttribute = (key: string) => inputAttributes.indexOf(key) >= 0;\n\nconst isDefinedAttribute = <T>(opt: IInputOptions<T>) => (key: string) => typeof (opt as any)[key] !== 'undefined';\n\nconst toProps = <T>(o: IInputOptions<T>) => {\n const isAttributeDefined = isDefinedAttribute(o);\n return Object.keys(o)\n .filter(isInputAttribute)\n .filter(isAttributeDefined)\n .reduce((p, c) => {\n const value = (o as any)[c];\n p.push(`[${c.toLowerCase()}=${value}]`);\n return p;\n }, [] as string[])\n .join('');\n};\n\n/** Add a character counter when there is an input restriction. */\nconst charCounter = <T>(o: IInputOptions<T>) => (o.maxLength ? `[data-length=${o.maxLength}]` : '');\n\n/** Add the disabled attribute when required */\nexport const disable = ({ disabled }: { disabled?: boolean }) => (disabled ? '[disabled]' : '');\n\n/** Add the required and aria-required attribute when required */\nexport const req = ({ required, isMandatory }: { required?: boolean; isMandatory?: boolean }) =>\n required || isMandatory ? '[required][aria-required=true]' : '';\n\n/** Add the autofocus attribute when required */\nconst focus = ({ autofocus }: { autofocus?: (() => boolean) | boolean }) =>\n (typeof autofocus === 'boolean' && autofocus) || (autofocus && autofocus()) ? '[autofocus]' : '';\n\n/** Convert input options to a set of input attributes */\nexport const toAttrs = <T>(o: IInputOptions<T>) => toProps(o) + charCounter(o) + disable(o) + req(o) + focus(o);\n\n/** Check if a string or number is numeric. @see https://stackoverflow.com/a/9716488/319711 */\nexport const isNumeric = (n: string | number) => !isNaN(parseFloat(n as string)) && isFinite(n as number);\n\nexport const pipe = (...fncs: Array<(x: any) => any>) => <T>(x: T) => fncs.reduce((y, f) => f(y), x);\n\n/**\n * Pad left, default width 2 with a '0'\n *\n * @see http://stackoverflow.com/a/10073788/319711\n * @param {(string | number)} n\n * @param {number} [width=2]\n * @param {string} [z='0']\n * @returns\n */\nexport const padLeft = (n: string | number, width = 2, z = '0') => {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n};\n\n/**\n * Swap two elements at index i and j.\n * Mutates the original array.\n *\n * @param arr array of items\n * @param i from index\n * @param j to index\n */\nexport const swap = <T>(arr: T[], i: number, j: number) => {\n const temp = arr[i];\n arr[i] = arr[j];\n arr[j] = temp;\n};\n\n/**\n * Move an element at index i to index j.\n * Mutates the original array.\n *\n * @param arr array of items\n * @param i from index\n * @param j to index\n */\nexport const move = <T>(arr: T[], i: number, j: number) => {\n const temp = arr[i];\n arr.splice(i, 1);\n arr.splice(j, 0, temp);\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\nimport { Icon } from './icon';\n\nexport enum CollectionMode {\n BASIC,\n LINKS,\n AVATAR,\n}\n\nexport interface ICollectionItem {\n /** If available, will be used as the key, so all items need an id. */\n id?: string | number;\n /** Title of the collection item */\n title: string | Vnode<any, any>;\n /** For links, may contain a URL reference */\n href?: string;\n /** For Avatar mode, may contain a URL reference to an image or a material icons class name */\n avatar?: string;\n /** Add a class to the avatar image or icon, e.g. a color 'red'. */\n className?: string;\n /** For Avatar mode, may contain a two-line trusted HTML content */\n content?: string;\n /** If active, preselect the collection item. */\n active?: boolean;\n /** Add a material icon as secondary content. */\n iconName?: string;\n /** Onclick event handler */\n onclick?: (item: ICollectionItem) => void;\n /** Any other virtual element properties, including attributes and event handlers. */\n [property: string]: any;\n}\n\nexport interface ICollection extends Attributes {\n /** Optional header */\n header?: string;\n /** The list of items */\n items: ICollectionItem[];\n /** Mode of operation */\n mode?: CollectionMode;\n}\n\nconst isNonLocalRoute = (url?: string) => url && /https?:\\/\\//.test(url);\n\nexport const SecondaryContent: FactoryComponent<ICollectionItem> = () => {\n return {\n view: ({ attrs }) => {\n const { href, iconName = 'send', onclick, style = { cursor: 'pointer' } } = attrs;\n const props = {\n href,\n style,\n className: 'secondary-content',\n onclick: onclick ? () => onclick(attrs) : undefined,\n };\n return isNonLocalRoute(href) || !href\n ? m('a[target=_]', props, m(Icon, { iconName }))\n : m(m.route.Link, props as { href: string }, m(Icon, { iconName }));\n },\n };\n};\n\nconst avatarIsImage = (avatar = '') => /\\./.test(avatar);\n\nexport const ListItem: FactoryComponent<{ item: ICollectionItem; mode: CollectionMode }> = () => {\n return {\n view: ({ attrs: { item, mode } }) => {\n const { title, content = '', active, iconName, avatar, className, onclick } = item;\n return mode === CollectionMode.AVATAR\n ? m(\n `li.collection-item.avatar${active ? '.active' : ''}`,\n {\n onclick: onclick ? () => onclick(item) : undefined,\n },\n [\n avatarIsImage(avatar)\n ? m('img.circle', { src: avatar })\n : m('i.material-icons.circle', { className }, avatar),\n m('span.title', title),\n m('p', m.trust(content)),\n m(SecondaryContent, item),\n ]\n )\n : m(\n `li.collection-item${active ? '.active' : ''}`,\n iconName ? m('div', [title, m(SecondaryContent, item)]) : title\n );\n },\n };\n};\n\nconst BasicCollection: FactoryComponent<ICollection> = () => {\n return {\n view: ({ attrs: { header, items, mode = CollectionMode.BASIC, ...params } }) => {\n const collectionItems = items.map(item => m(ListItem, { key: item.id, item, mode }));\n return header\n ? m('ul.collection.with-header', params, [m('li.collection-header', m('h4', header)), collectionItems])\n : m('ul.collection', params, collectionItems);\n },\n };\n};\n\nexport const AnchorItem: FactoryComponent<{ item: ICollectionItem }> = () => {\n return {\n view: ({ attrs: { item } }) => {\n const { title, active, href, ...params } = item;\n const props = {\n ...params,\n className: `collection-item ${active ? 'active' : ''}`,\n href,\n };\n return isNonLocalRoute(href) || !href\n ? m('a[target=_]', props, title)\n : m(m.route.Link, props as { href: string }, title);\n },\n };\n};\n\nconst LinksCollection: FactoryComponent<ICollection> = () => {\n return {\n view: ({ attrs: { items, header, ...params } }) => {\n return header\n ? m('.collection.with-header', params, [\n m('.collection-header', m('h4', header)),\n items.map(item => m(AnchorItem, { key: item.id, item })),\n ])\n : m('.collection', params, items.map(item => m(AnchorItem, { key: item.id, item })));\n },\n };\n};\n\n/**\n * Creates a Collection of items, optionally containing links, headers, secondary content or avatars.\n * @see https://materializecss.com/collections.html\n */\nexport const Collection: FactoryComponent<ICollection> = () => {\n return {\n view: ({ attrs: { items, header, mode = CollectionMode.BASIC, ...params } }) => {\n return header || (items && items.length > 0)\n ? mode === CollectionMode.LINKS\n ? m(LinksCollection, { header, items, ...params })\n : m(BasicCollection, { header, items, mode, ...params })\n : undefined;\n },\n };\n};\n","import m, { FactoryComponent, Component, Attributes } from 'mithril';\nimport { toAttributeString } from './utils';\nimport './styles/input.css';\n\nexport const Mandatory: Component = { view: ({ attrs }) => m('span.mandatory', attrs, '*') };\n\nexport interface IMaterialLabel extends Attributes {\n /** Optional title/label */\n label?: string;\n /** Optional ID */\n id?: string;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** Add the active class to the label */\n isActive?: boolean | string;\n}\n\n/** Simple label element, used for most components. */\nexport const Label: FactoryComponent<IMaterialLabel> = () => {\n return {\n view: ({ attrs: { label, id, isMandatory, isActive, ...params } }) =>\n label\n ? m(`label${isActive ? '.active' : ''}${id ? `[for=${id}]` : ''}`, params, [\n m.trust(label),\n isMandatory ? m(Mandatory) : undefined,\n ])\n : undefined,\n };\n};\n\nexport interface IHelperTextOptions extends Attributes {\n helperText?: string;\n dataError?: string;\n dataSuccess?: string;\n}\n\n/** Create a helper text, often used for displaying a small help text. May be replaced by the validation message. */\nexport const HelperText: FactoryComponent<IHelperTextOptions> = () => {\n return {\n view: ({ attrs: { helperText, dataError, dataSuccess } }) => {\n const a = dataError || dataSuccess ? toAttributeString({ dataError, dataSuccess }) : '';\n return helperText || a ? m(`span.helper-text${a}`, helperText ? m.trust(helperText) : '') : undefined;\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IMaterialIcon extends Attributes {\n iconName: string;\n}\n\n/**\n * A simple material icon, defined by its icon name.\n *\n * @example m(Icon, { className: 'small' }, 'create') renders a small 'create' icon\n * @example m(Icon, { className: 'prefix' }, iconName) renders the icon as a prefix\n */\nexport const Icon: FactoryComponent<IMaterialIcon> = () => ({\n view: ({ attrs: { iconName, ...passThrough } }) => m('i.material-icons', passThrough, iconName),\n});\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { toAttributeString } from './utils';\nimport { Icon } from './icon';\n\nexport interface IHtmlAttributes {\n id?: string;\n for?: string;\n placeholder?: string;\n autofocus?: boolean;\n disabled?: boolean;\n type?: 'submit' | 'button' | 'text' | 'textarea' | 'number';\n}\n\nexport interface IMaterialButton extends Attributes {\n /** Optional (e.g. in case you only want to use an icon) button label */\n label?: string;\n /** Optional icon material-icons name, @see https://materializecss.com/icons.html */\n iconName?: string;\n /** Optional icon class, e.g. tiny (1em), small (2em), medium (4em), large (6em), or 'tiny right' */\n iconClass?: string;\n /**\n * If the button is intended to open a modal, specify its modal id so we can trigger it,\n * @see https://materializecss.com/modals.html\n */\n modalId?: string;\n /** Some additional HTML attributes that can be attached to the button */\n attr?: IHtmlAttributes;\n /** Optional text-based tooltip, @see https://materializecss.com/tooltips.html */\n tooltip?: string;\n /** Optional location for the tooltip */\n tooltipPostion?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * A factory to create new buttons.\n *\n * @example FlatButton = ButtonFactory('a.waves-effect.waves-teal.btn-flat');\n */\nexport const ButtonFactory = (\n defaultClassNames: string,\n attributes: string = ''\n): FactoryComponent<IMaterialButton> => () => {\n const dca = `${defaultClassNames}${attributes}`;\n return {\n view: ({ attrs }) => {\n const { modalId, tooltip, tooltipPostion, iconName, iconClass, label, attr, ...passThrough } = attrs;\n return m(\n `${dca}${modalId ? `.modal-trigger[href=#${modalId}]` : ''}${\n tooltip ? `.tooltipped[data-position=${tooltipPostion || 'top'}][data-tooltip=${tooltip}]` : ''\n }${toAttributeString(attr)}`,\n passThrough,\n iconName ? m(Icon, { iconName, className: iconClass || 'left' }) : undefined,\n label ? label : undefined\n );\n },\n };\n};\n\nexport const Button = ButtonFactory('a.waves-effect.waves-light.btn');\nexport const LargeButton = ButtonFactory('a.waves-effect.waves-light.btn-large');\nexport const SmallButton = ButtonFactory('a.waves-effect.waves-light.btn-small');\nexport const FlatButton = ButtonFactory('a.waves-effect.waves-teal.btn-flat');\nexport const RoundIconButton = ButtonFactory('button.btn-floating.btn-large.waves-effect.waves-light');\nexport const SubmitButton = ButtonFactory('button.btn.waves-effect.waves-light', '[type=submit]');\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ICarouselItem extends Attributes {\n /** Relative page link, e.g. '#one' */\n href: string;\n /** Image source */\n src: string;\n}\n\nexport interface ICarousel extends Partial<M.CarouselOptions>, Attributes {\n /** The list of images */\n items: ICarouselItem[];\n}\n\nexport const CarouselItem: FactoryComponent<ICarouselItem> = () => {\n return {\n view: ({ attrs: { href, src } }) => {\n return m('a.carousel-item', { href }, m(`img[src=${src}]`));\n },\n };\n};\n\n/**\n * Creates a collabsible or accordion (via the accordion option, default true) component.\n * @see https://materializecss.com/carousel.html\n */\nexport const Carousel: FactoryComponent<ICarousel> = () => {\n return {\n view: ({ attrs }) => {\n const { items } = attrs;\n return items && items.length > 0\n ? m(\n '.carousel',\n {\n oncreate: ({ dom }) => {\n M.Carousel.init(dom, attrs);\n },\n },\n items.map(item => m(CarouselItem, item))\n )\n : undefined;\n },\n };\n};\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\nexport interface ICollapsibleItem extends Attributes {\n /** Header of the collabsible item, may contain HTML or may be a Vnode */\n header?: string | Vnode<any, any>;\n /** Body of the collabsible item, may contain HTML or may be a Vnode */\n body?: string | Vnode<any, any>;\n /** If active, preselect the collabsible item. */\n active?: boolean;\n /** Add an material icon in front of the header. */\n iconName?: string;\n}\n\nexport interface ICollapsible extends Partial<M.CollapsibleOptions>, Attributes {\n /** The list of accordeon/collabsible items */\n items: ICollapsibleItem[];\n}\n\nexport const CollapsibleItem: FactoryComponent<ICollapsibleItem> = () => {\n return {\n view: ({ attrs: { header, body, active, iconName } }) => {\n return m(active ? 'li.active' : 'li', [\n header || iconName\n ? m('.collapsible-header', [\n iconName ? m('i.material-icons', iconName) : undefined,\n header ? (typeof header === 'string' ? m('span', header) : header) : undefined,\n ])\n : undefined,\n body ? m('.collapsible-body', typeof body === 'string' ? body : body) : undefined,\n ]);\n },\n };\n};\n\n/**\n * Creates a collabsible or accordion (via the accordion option, default true) component.\n * @see https://materializecss.com/collapsible.html\n */\nexport const Collapsible: FactoryComponent<ICollapsible> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Collapsible.init(dom, attrs);\n },\n view: ({ attrs }) => {\n const { items, class: c, className, style, id } = attrs;\n return items && items.length > 0\n ? m(\n 'ul.collapsible',\n {\n class: c || className,\n style,\n id,\n },\n items.map((item) => m(CollapsibleItem, item))\n )\n : undefined;\n },\n };\n};\n","import m, { Component, Attributes } from 'mithril';\nimport { HelperText } from './label';\nimport { uniqueId } from './utils';\n\nexport interface IDropdownOption {\n /** ID property of the selected item */\n id?: string | number;\n /** Label to show in the dropdown */\n label: string;\n /** Can we select the item */\n disabled?: boolean;\n /** Display a Materials Icon in front of the label */\n iconName?: string;\n /** Add a divider */\n divider?: boolean;\n}\n\nexport interface IDropdownOptions extends Partial<M.DropdownOptions>, Attributes {\n /**\n * Optional id of the dropdown element\n * @default 'dropdown'\n */\n id?: string;\n /**\n * Optional label when no item is selected\n * @default 'Select'\n */\n label?: string;\n key?: string | number;\n /** If true, disable the selection */\n disabled?: boolean;\n /** Item array to show in the dropdown. If the value is not supplied, uses he name. */\n items: IDropdownOption[];\n /**\n * Selected value or name\n * @deprecated Use initialValue instead\n */\n checkedId?: string | number;\n /** Selected value or name */\n initialValue?: string | number;\n /** When a value or name is selected */\n onchange?: (value: string | number) => void;\n /** Uses Materialize icons as a prefix or postfix. */\n iconName?: string;\n /** Add a description underneath the input field. */\n helperText?: string;\n}\n\n/** Dropdown component */\nexport const Dropdown = (): Component<IDropdownOptions> => {\n// export const Dropdown: FactoryComponent<IDropdownOptions> = () => {\n const state = {} as {\n initialValue?: string | number;\n id: string;\n };\n return {\n oninit: ({ attrs: { id = uniqueId(), initialValue, checkedId }}) => {\n state.id = id;\n state.initialValue = initialValue || checkedId;\n },\n view: ({ attrs: {\n key,\n label,\n onchange,\n disabled = false,\n items,\n iconName,\n helperText,\n style,\n className = 'col s12',\n ...props\n } }) => {\n const { id, initialValue } = state;\n const selectedItem = initialValue\n ? items\n .filter((i: IDropdownOption) => (i.id ? i.id === initialValue : i.label === initialValue))\n .shift()\n : undefined;\n const title = selectedItem ? selectedItem.label : label || 'Select';\n return m('.input-field', { className, key, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m(HelperText, { helperText }),\n m(\n `a.dropdown-trigger.btn.truncate[href=#][data-target=${id}]${disabled ? '[disabled]' : ''}`,\n {\n className: 'col s12',\n style: style || (iconName ? 'margin: 0.2em 0 0 3em;' : undefined),\n oncreate: ({ dom }) => {\n M.Dropdown.init(dom, props);\n },\n },\n title\n ),\n m(\n `ul.dropdown-content[id=${id}]`,\n items.map(i =>\n m(\n `li${i.divider ? '.divider[tabindex=-1]' : ''}`,\n i.divider\n ? undefined\n : m(\n 'a',\n {\n onclick: onchange\n ? () => {\n state.initialValue = i.id || i.label;\n onchange(state.initialValue);\n }\n : undefined,\n },\n [i.iconName ? m('i.material-icons', i.iconName) : undefined, i.label]\n )\n )\n )\n ),\n ]);\n },\n };\n};\n","import M from 'materialize-css';\nimport m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId, toAttrs } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label, HelperText } from './label';\nimport './styles/input.css';\n\n/** Create a TextArea */\nexport const TextArea: FactoryComponent<IInputOptions<string>> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n helperText,\n iconName,\n id = state.id,\n initialValue,\n isMandatory,\n label,\n onchange,\n style,\n ...params\n } = attrs;\n const attributes = toAttrs(params);\n return m(`.input-field`, { className, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(`textarea.materialize-textarea[tabindex=0][id=${id}]${attributes}`, {\n oncreate: ({ dom }) => {\n M.textareaAutoResize(dom);\n if (attrs.maxLength) {\n M.CharacterCounter.init(dom);\n }\n },\n onchange: onchange\n ? (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target && typeof target.value === 'string' ? target.value : '';\n onchange(value);\n }\n : undefined,\n value: initialValue,\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue || attrs.placeholder }),\n m(HelperText, { helperText }),\n ]);\n },\n };\n};\n\nexport type InputType = 'url' | 'color' | 'text' | 'number' | 'email' | 'range' | 'password';\n\n/** Default component for all kinds of input fields. */\nconst InputField =\n <T>(type: InputType, defaultClass = ''): FactoryComponent<IInputOptions<T>> =>\n () => {\n const state = { id: uniqueId() };\n const getValue = (target: HTMLInputElement) => {\n const val = target.value as any as T;\n return (val ? (type === 'number' || type === 'range' ? +val : val) : val) as T;\n };\n const setValidity = (target: HTMLInputElement, validationResult: string | boolean) => {\n if (typeof validationResult === 'boolean') {\n target.setCustomValidity(validationResult ? '' : 'Custom validation failed');\n } else {\n target.setCustomValidity(validationResult);\n }\n };\n const focus = ({ autofocus }: IInputOptions<T>) =>\n autofocus ? (typeof autofocus === 'boolean' ? autofocus : autofocus()) : false;\n\n return {\n view: ({ attrs }) => {\n const {\n className = 'col s12',\n dataError,\n dataSuccess,\n helperText,\n iconName,\n id = state.id,\n initialValue,\n isMandatory,\n label,\n maxLength,\n newRow,\n onchange,\n onkeydown,\n onkeypress,\n onkeyup,\n style,\n validate,\n ...params\n } = attrs;\n const attributes = toAttrs(params);\n return m(`.input-field${newRow ? '.clear' : ''}${defaultClass}`, { className, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : undefined,\n m(`input.validate[type=${type}][tabindex=0][id=${id}]${attributes}`, {\n oncreate: ({ dom }) => {\n if (focus(attrs)) {\n (dom as HTMLElement).focus();\n }\n if (maxLength) {\n M.CharacterCounter.init(dom);\n }\n if (type === 'range') {\n M.Range.init(dom);\n }\n },\n onkeyup: onkeyup\n ? (ev: KeyboardEvent) => {\n onkeyup(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n onkeydown: onkeydown\n ? (ev: KeyboardEvent) => {\n onkeydown(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n onkeypress: onkeypress\n ? (ev: KeyboardEvent) => {\n onkeypress(ev, getValue(ev.target as HTMLInputElement));\n }\n : undefined,\n onupdate: validate\n ? ({ dom }) => {\n const target = dom as HTMLInputElement;\n setValidity(target, validate(getValue(target), target));\n }\n : undefined,\n onchange: (e: UIEvent) => {\n const target = e.target as HTMLInputElement;\n if (target) {\n const value = getValue(target);\n if (onchange) {\n onchange(value);\n }\n if (validate) {\n setValidity(target, validate(value, target));\n }\n }\n },\n value: initialValue,\n }),\n m(Label, {\n label,\n id,\n isMandatory,\n isActive:\n typeof initialValue !== 'undefined' ||\n attrs.placeholder ||\n type === 'number' ||\n type === 'color' ||\n type === 'range'\n ? true\n : false,\n }),\n m(HelperText, { helperText, dataError, dataSuccess }),\n ]);\n },\n };\n };\n\n/** Component for entering some text */\nexport const TextInput = InputField<string>('text');\n/** Component for entering a password */\nexport const PasswordInput = InputField<string>('password');\n/** Component for entering a number */\nexport const NumberInput = InputField<number>('number');\n/** Component for entering a URL */\nexport const UrlInput = InputField<string>('url');\n/** Component for entering a color */\nexport const ColorInput = InputField<string>('color');\n/** Component for entering a range */\nexport const RangeInput = InputField<number>('range', '.range-field');\n/** Component for entering an email */\nexport const EmailInput = InputField<string>('email');\n\nexport interface IFileInputOptions extends Attributes {\n /** Displayed on the button, @default File */\n label?: string;\n /** Current value of the file input, write only */\n initialValue?: string;\n /** Adds a placeholder message */\n placeholder?: string;\n /** If true, upload multiple files */\n multiple?: boolean;\n /** Called when the file input is changed */\n onchange?: (files: FileList) => void;\n /** If true, disable the box */\n disabled?: boolean;\n /**\n * Accepted file types, e.g. image/png, image/jpeg,\n * any image/*, video/*. audio/*, .pdf, a valid MIME type string, with no extensions, etc.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers\n */\n accept?: string | string[];\n}\n\n/** Component for uploading a file */\nexport const FileInput: FactoryComponent<IFileInputOptions> = () => {\n let canClear = false;\n let i: HTMLInputElement;\n return {\n view: ({ attrs }) => {\n const {\n multiple,\n disabled,\n initialValue,\n placeholder,\n onchange,\n className = 'col s12',\n accept,\n label = 'File',\n } = attrs;\n const accepted = accept ? (accept instanceof Array ? accept.join(', ') : accept) : undefined;\n const acc = accepted ? `[accept=${accepted}]` : '';\n const mul = multiple ? '[multiple]' : '';\n const dis = disabled ? '[disabled]' : '';\n const ph = placeholder ? `[placeholder=${placeholder}]` : '';\n return m(\n '.file-field.input-field',\n {\n className: attrs.class || className,\n },\n [\n m('.btn', [\n m('span', label),\n m(`input[type=file]${mul}${dis}${acc}`, {\n onchange: onchange\n ? (e: UIEvent) => {\n const i = e.target as HTMLInputElement;\n if (i && i.files && onchange) {\n canClear = true;\n onchange(i.files);\n }\n }\n : undefined,\n }),\n ]),\n m(\n '.file-path-wrapper',\n m(`input.file-path.validate${ph}[type=text]`, {\n oncreate: ({ dom }) => {\n i = dom as HTMLInputElement;\n if (initialValue) i.value = initialValue;\n },\n })\n ),\n (canClear || initialValue) &&\n m(\n 'a.waves-effect.waves-teal.btn-flat',\n {\n style: 'float: right;position: relative;top: -3rem; padding: 0',\n onclick: () => {\n canClear = false;\n i.value = '';\n onchange && onchange({} as FileList);\n },\n },\n m('i.material-icons', 'clear')\n ),\n ]\n );\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { IInputOptions } from './input-options';\nimport { uniqueId, toAttrs } from './utils';\nimport { Label, HelperText } from './label';\n\n/** Component to pick a date */\nexport const DatePicker: FactoryComponent<IInputOptions<Date> & Partial<M.DatepickerOptions>> = () => {\n const state = { id: uniqueId() } as { id: string; dp: M.Datepicker };\n return {\n view: ({\n attrs: {\n label,\n helperText,\n initialValue,\n newRow,\n className = 'col s12',\n iconName,\n isMandatory,\n onchange,\n disabled,\n ...props\n },\n }) => {\n const id = state.id;\n const attributes = toAttrs(props);\n // const {} = attrs;\n const clear = newRow ? '.clear' : '';\n const onClose = onchange ? () => state.dp && onchange(state.dp.date) : undefined;\n return m(\n `.input-field${clear}`,\n {\n className,\n onremove: () => {\n // console.log('removing dp');\n return state.dp && state.dp.destroy();\n },\n },\n [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(`input.datepicker[type=text][tabindex=0][id=${id}]${attributes}${disabled ? '[disabled]' : ''}`, {\n oncreate: ({ dom }) => {\n state.dp = M.Datepicker.init(dom, {\n format: 'yyyy/mm/dd',\n showClearBtn: true,\n setDefaultDate: true,\n defaultDate: initialValue ? new Date(initialValue) : new Date(),\n // onSelect: onchange,\n ...props,\n onClose,\n } as Partial<M.DatepickerOptions>);\n },\n }),\n m(Label, { label, id, isMandatory, isActive: !!initialValue }),\n m(HelperText, { helperText }),\n ]\n );\n },\n };\n};\n\n/** Component to pick a time */\nexport const TimePicker: FactoryComponent<IInputOptions & Partial<M.TimepickerOptions>> = () => {\n const state = { id: uniqueId() } as { id: string; tp: M.Timepicker };\n return {\n view: ({\n attrs: {\n label,\n helperText,\n initialValue,\n newRow,\n className = 'col s12',\n iconName,\n isMandatory,\n onchange,\n disabled,\n ...props\n },\n }) => {\n const id = state.id;\n const attributes = toAttrs(props);\n const clear = newRow ? '.clear' : '';\n const now = new Date();\n const onCloseEnd = onchange\n ? () => state.tp && onchange(state.tp.time || initialValue || `${now.getHours()}:${now.getMinutes()}`)\n : undefined;\n return m(\n `.input-field.timepicker${clear}`,\n {\n className,\n onremove: () => state.tp && state.tp.destroy(),\n },\n [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(`input[type=text][tabindex=0][id=${id}]${attributes}${disabled ? '[disabled]' : ''}`, {\n value: initialValue,\n oncreate: ({ dom }) => {\n state.tp = M.Timepicker.init(dom, {\n twelveHour: false,\n showClearBtn: true,\n defaultTime: initialValue,\n // onSelect: onchange ? (hours: number, minutes: number) => onchange(`${hours}:${minutes}`) : undefined,\n ...props,\n onCloseEnd,\n } as Partial<M.TimepickerOptions>);\n },\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue }),\n m(HelperText, { helperText }),\n ]\n );\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes } from 'mithril';\nimport { Label, HelperText } from './label';\n\nexport interface IInputCheckbox extends Attributes {\n /** Optional event handler when a checkbox is clicked */\n onchange?: (checked: boolean) => void;\n /** Label of the checkbox, can be a string or Vnode */\n label?: string | Vnode<any, any>;\n /** If true, the checkbox is checked */\n checked?: boolean;\n /** If true, the checkbox is disabled */\n disabled?: boolean;\n}\n\n/** Component to show a check box */\nexport const InputCheckbox: FactoryComponent<IInputCheckbox> = () => {\n return {\n view: ({ attrs: { className = 'col s12', onchange, label, checked, disabled } }) => {\n return m(\n `div`,\n { className },\n m('label', [\n m(`input[type=checkbox][tabindex=0]${checked ? '[checked]' : ''}${disabled ? '[disabled]' : ''}`, {\n onclick: onchange\n ? (e: Event) => {\n if (e.target && typeof (e.target as HTMLInputElement).checked !== 'undefined') {\n onchange((e.target as HTMLInputElement).checked);\n }\n }\n : undefined,\n }),\n label ? (typeof label === 'string' ? m('span', label) : label) : undefined,\n ])\n );\n },\n };\n};\n\nexport interface IInputOption {\n /** Option ID */\n id: string | number;\n /** Displayed label */\n label: string;\n /** Optional title, often used to display a tooltip - will only work when choosing browser-defaults */\n title?: string;\n /** Is the option disabled? */\n disabled?: boolean;\n // isChecked?: boolean;\n}\n\nexport interface IOptions extends Attributes {\n /** Element ID */\n id?: string;\n /** Optional title or label */\n label?: string;\n /** The options that you have */\n options: IInputOption[];\n /** Event handler that is called when an option is changed */\n onchange?: (checkedId: Array<string | number>) => void;\n /**\n * Selected id or ids (in case of multiple options)\n * @deprecated Please use initialValue instead\n */\n checkedId?: string | number | Array<string | number>;\n /** Selected id or ids (in case of multiple options) */\n initialValue?: string | number | Array<string | number>;\n /** Optional description */\n description?: string;\n /** Optional CSS that is added to the input checkbox, e.g. if you add col s4, the items will be put inline */\n checkboxClass?: string;\n /** If true, start on a new row */\n newRow?: boolean;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** If true, disable the options. */\n disabled?: boolean;\n}\n\n/** A list of checkboxes */\nexport const Options: FactoryComponent<IOptions> = () => {\n const state = {} as {\n checkedId?: string | number | Array<string | number>;\n checkedIds: Array<string | number>;\n };\n\n const isChecked = (id: string | number) => state.checkedIds.indexOf(id) >= 0;\n\n return {\n oninit: ({ attrs: { initialValue, checkedId } }) => {\n const iv = checkedId || initialValue;\n state.checkedId = checkedId;\n state.checkedIds = iv ? (iv instanceof Array ? [...iv] : [iv]) : [];\n },\n view: ({\n attrs: {\n label,\n id,\n options,\n checkedId,\n description,\n className = 'col s12',\n disabled,\n checkboxClass,\n newRow,\n isMandatory,\n onchange: callback,\n },\n }) => {\n if (checkedId && state.checkedId !== checkedId) {\n state.checkedId = checkedId;\n state.checkedIds = checkedId instanceof Array ? checkedId : [checkedId];\n }\n const clear = newRow ? '.clear' : '';\n const onchange = callback\n ? (propId: string | number, checked: boolean) => {\n const checkedIds = state.checkedIds.filter((i) => i !== propId);\n if (checked) {\n checkedIds.push(propId);\n }\n state.checkedIds = checkedIds;\n callback(checkedIds);\n }\n : undefined;\n return m(`div${clear}`, { className }, [\n m('div', { className: 'input-field options' }, m(Label, { id, label, isMandatory })),\n m(HelperText, { helperText: description }),\n ...options.map((option) =>\n m(InputCheckbox, {\n disabled: disabled || option.disabled,\n label: option.label,\n onchange: onchange ? (v: boolean) => onchange(option.id, v) : undefined,\n className: checkboxClass,\n checked: isChecked(option.id),\n })\n ),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { isNumeric } from './utils';\nimport { Label, HelperText } from './label';\nimport { IInputOption } from './option';\n\nexport interface ISelectOptions extends Attributes, Partial<M.FormSelectOptions> {\n /** Options to select from */\n options: IInputOption[];\n /** Called when the value is changed, either contains a single or all selected (checked) ids */\n onchange: (checkedIds: Array<string | number>) => void;\n /**\n * Selected id or ids (in case of multiple options). Processed in the oninit and onupdate lifecycle.\n * When the checkedId property changes (using a shallow compare), the selections are updated accordingly.\n */\n checkedId?: string | number | Array<string | number>;\n /** Selected id or ids (in case of multiple options). Only processed in the oninit lifecycle. */\n initialValue?: string | number | Array<string | number>;\n /** Select a single option or multiple options */\n multiple?: boolean;\n /** Optional label. */\n label?: string;\n /** Optional ID. */\n id?: string;\n /** Unique key for use of the element in an array. */\n key?: string | number;\n /** Add a a placeholder to the input field. */\n placeholder?: string;\n /** Add a description underneath the input field. */\n helperText?: string;\n /** Uses Materialize icons as a prefix or postfix. */\n iconName?: string;\n /** Sets the input field to disabled. */\n disabled?: boolean;\n /** Optional style information. */\n style?: string;\n /** If true, break to a new row */\n newRow?: boolean;\n /**\n * If true, add a mandatory * after the label (if any),\n * and add the required and aria-required attributes to the input element.\n */\n isMandatory?: boolean;\n /** Add the required and aria-required attributes to the input element */\n required?: boolean;\n}\n\n/** Component to select from a list of values in a dropdowns */\nexport const Select: FactoryComponent<ISelectOptions> = () => {\n const state = {} as {\n checkedId?: string | number | Array<string | number>;\n initialValue?: Array<string | number>;\n instance?: M.FormSelect;\n /** Concatenation of all options IDs, to see if the options have changed and we need to re-init the select */\n ids?: string;\n };\n const optionsIds = (options: IInputOption[]) => options.map((o) => o.id).join('');\n\n const isSelected = (id?: string | number, checkedId?: string | number | Array<string | number>, selected = false) =>\n selected ||\n (checkedId instanceof Array && (id || typeof id === 'number') ? checkedId.indexOf(id) >= 0 : checkedId === id);\n return {\n oninit: ({ attrs: { checkedId, initialValue, options } }) => {\n state.ids = optionsIds(options);\n const iv = checkedId || initialValue;\n state.checkedId = checkedId;\n state.initialValue = iv ? (iv instanceof Array ? [...iv.filter((i) => i !== null)] : [iv]) : [];\n },\n view: ({\n attrs: {\n id,\n newRow,\n className = 'col s12',\n checkedId,\n key,\n options,\n multiple,\n label,\n helperText,\n placeholder,\n isMandatory,\n iconName,\n disabled,\n classes,\n dropdownOptions,\n onchange: callback,\n },\n }) => {\n if (state.checkedId !== checkedId) {\n state.initialValue = checkedId ? (checkedId instanceof Array ? checkedId : [checkedId]) : undefined;\n }\n const { initialValue } = state;\n const onchange = callback\n ? multiple\n ? () => {\n const values = state.instance && state.instance.getSelectedValues();\n const v = values\n ? values.length > 0 && isNumeric(values[0])\n ? values.map((n) => +n)\n : values.filter((i) => i !== null || typeof i !== 'undefined')\n : undefined;\n state.initialValue = v ? v : [];\n callback(state.initialValue);\n }\n : (e: Event) => {\n if (e && e.currentTarget) {\n const b = e.currentTarget as HTMLButtonElement;\n const v = isNumeric(b.value) ? +b.value : b.value;\n state.initialValue = typeof v !== undefined ? [v] : [];\n }\n state.initialValue && callback(state.initialValue);\n }\n : undefined;\n const clear = newRow ? '.clear' : '';\n const isDisabled = disabled ? '[disabled]' : '';\n const isMultiple = multiple ? '[multiple]' : '';\n const noValidSelection = options.filter((o) => isSelected(o.id, initialValue)).length === 0;\n return m(`.input-field.select-space${clear}`, { className, key }, [\n iconName && m('i.material-icons.prefix', iconName),\n m(\n `select[id=${id}]${isDisabled}${isMultiple}`,\n {\n oncreate: ({ dom }) => {\n state.instance = M.FormSelect.init(dom, { classes, dropdownOptions });\n },\n onupdate: ({ dom }) => {\n const ids = optionsIds(options);\n let reinit = checkedId && state.checkedId !== checkedId.toString();\n if (state.ids !== ids) {\n state.ids = ids;\n reinit = true;\n }\n if (state.checkedId !== checkedId) {\n state.checkedId = checkedId;\n reinit = true;\n }\n if (reinit) {\n state.instance = M.FormSelect.init(dom, { classes, dropdownOptions });\n }\n },\n onchange,\n },\n placeholder ? m(`option[disabled]${noValidSelection ? '[selected]' : ''}`, placeholder) : '',\n options.map((o, i) =>\n m(\n `option[value=${o.id}]${o.title ? `[title=${o.title}]` : ''}${o.disabled ? '[disabled]' : ''}${\n isSelected(o.id, initialValue, i === 0 && noValidSelection && !placeholder) ? '[selected]' : ''\n }`,\n o.label.replace('&amp;', '&')\n )\n )\n ),\n m(Label, { label, isMandatory }),\n m(HelperText, { helperText }),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { uniqueId } from './utils';\nimport { IInputOption } from './option';\nimport { Label } from './label';\n\nexport interface IRadioButtons extends Attributes {\n /** Element ID */\n id?: string;\n /** Optional title or label */\n label?: string;\n /** The options that you have */\n options: IInputOption[];\n /** Event handler that is called when an option is changed */\n onchange: (id: string | number) => void;\n /** Selected id (in oninit lifecycle) */\n initialValue?: string | number;\n /** Selected id (in oninit and onupdate lifecycle) */\n checkedId?: string | number;\n /** Optional description */\n description?: string;\n /** If true, start on a new row */\n newRow?: boolean;\n /** If true, add a mandatory '*' after the label */\n isMandatory?: boolean;\n /** Optional CSS that is added to the input checkbox, e.g. if you add col s4, the items will be put inline */\n checkboxClass?: string;\n /** Disable the button */\n disabled?: boolean;\n}\n\n/** Component to show a list of radio buttons, from which you can choose one. */\nexport const RadioButtons: FactoryComponent<IRadioButtons> = () => {\n const state = { groupId: uniqueId() } as {\n groupId: string;\n oldCheckedId?: string | number;\n checkedId?: string | number;\n onchange: (id: string | number) => void;\n };\n return {\n oninit: ({ attrs: { checkedId, initialValue } }) => {\n state.oldCheckedId = checkedId;\n state.checkedId = checkedId || initialValue;\n },\n view: ({\n attrs: {\n id,\n checkedId: cid,\n newRow,\n className = 'col s12',\n label = '',\n disabled,\n description,\n options,\n isMandatory,\n checkboxClass,\n onchange: callback,\n },\n }) => {\n if (state.oldCheckedId !== cid) {\n state.oldCheckedId = state.checkedId = cid;\n }\n const { groupId, checkedId } = state;\n const onchange = (propId: string | number) => {\n state.checkedId = propId;\n if (callback) {\n callback(propId);\n }\n };\n\n const clear = newRow ? '.clear' : '';\n return m(`div${id ? `[id=${id}]` : ''}${clear}`, { className }, [\n m('div', { className: 'input-field options' }, m(Label, { id, label, isMandatory })),\n description ? m('p.helper-text', m.trust(description)) : '',\n ...options.map((r) =>\n m(RadioButton, {\n ...r,\n onchange,\n groupId,\n disabled,\n className: checkboxClass,\n checked: r.id === checkedId,\n })\n ),\n ]);\n },\n };\n};\n\nexport interface IRadioButton extends Attributes {\n id: string | number;\n checked?: boolean;\n onchange: (id: string | number) => void;\n label: string;\n groupId: string;\n disabled?: boolean;\n}\n\nexport const RadioButton: FactoryComponent<IRadioButton> = () => ({\n view: ({ attrs: { id, groupId, label, onchange, className = 'col s12', checked, disabled } }) => {\n return m(\n `div`,\n { className },\n m('label', [\n m(\n `input[type=radio][tabindex=0][name=${groupId}]${checked ? '[checked=checked]' : ''}${\n disabled ? '[disabled]' : ''\n }`,\n {\n onclick: onchange ? () => onchange(id) : undefined,\n }\n ),\n m('span', m.trust(label)),\n ])\n );\n },\n});\n","import 'tslib';\nimport m, { Component } from 'mithril';\nimport { TextInput, TextArea, EmailInput, UrlInput, NumberInput } from './input';\nimport { TimePicker, DatePicker } from './pickers';\nimport { InputCheckbox, Options, IInputOption } from './option';\nimport { Select } from './select';\nimport { RadioButtons } from './radio';\nimport { uniqueId, uuid4 } from './utils';\n\n/** List of components that can be used for generating a form */\nexport type ComponentType =\n | 'text'\n | 'number'\n | 'url'\n | 'email'\n | 'date'\n | 'time'\n | 'checkbox'\n | 'select'\n | 'options'\n | 'radios';\n\n/** Generic description of a form field, based on a union of the individual component options */\nexport interface IModelField {\n /** Name of the property in the generated object */\n id: string;\n /** Type of component to use for rendering the field. If empty, field will not be rendered. */\n component?: ComponentType;\n /** Label to display */\n label?: string;\n /** Optional class to append to the field */\n className?: string;\n /** Optional icon to display on the element, based on the materializecss.com/icons */\n iconName?: string;\n /** Optional class for the icon, e.g. to make it smaller or bigger */\n iconClass?: string;\n /** For text, may it have multiple lines */\n multiline?: boolean;\n /** If true, the item is required */\n required?: boolean;\n /** If true, the item is disabled */\n disabled?: boolean;\n /** Optional placeholder */\n placeholder?: string;\n /** Optional helper text */\n helperText?: string;\n /** Start a new row after this field */\n newRow?: boolean;\n /** Options for radios, options (checkboxes), and selections */\n options?: IInputOption[];\n /** If true, draw the radio buttons inline */\n inline?: boolean;\n /**\n * If specified, generate a value automatically, e.g. to set an ID, or to use a GUID.\n * Possible options are `guid` to generate a GUID, or 'id' to generate an `idXXXX`.\n */\n autogenerate?: 'guid' | 'id';\n}\n\n/** A data object that can be created */\nexport interface IConvertibleType {\n id: string | number;\n [key: string]: undefined | string | number | boolean | Date | Array<string | number>;\n}\n\n/**\n * Convert a model field to a component.\n *\n * @param model Model properties\n * @param value Initial value of the property item\n * @param options Component options\n */\nexport const fieldToComponent = (\n { component, required: isMandatory, options: selectOptions, autogenerate, ...props }: IModelField,\n value?: string | number | boolean | Date | Array<string | number>,\n options: {\n onchange?: (v: string | number | boolean | Date | Array<string | number>, overwrite?: boolean) => void;\n containerId?: string;\n autofocus?: boolean;\n disabled?: boolean;\n multiline?: boolean;\n key?: number | string;\n } = {}\n) => {\n const { containerId, autofocus, disabled = false, onchange, multiline, key } = options;\n if (autogenerate && onchange) {\n onchange(autogenerate === 'id' ? uniqueId() : uuid4(), false);\n }\n const validate = isMandatory\n ? (v: string | number | Array<string | number>) => (v instanceof Array ? v && v.length > 0 : typeof v !== undefined)\n : undefined;\n\n switch (component) {\n case 'text':\n return m(multiline ? TextArea : TextInput, {\n ...props,\n key,\n isMandatory,\n validate,\n autofocus,\n disabled,\n onchange,\n initialValue: value as string,\n });\n case 'number':\n return m(NumberInput, {\n ...props,\n key,\n isMandatory,\n validate,\n autofocus,\n disabled,\n onchange,\n initialValue: value as number,\n });\n case 'url':\n return m(UrlInput, {\n ...props,\n key,\n isMandatory,\n validate,\n autofocus,\n disabled,\n onchange,\n initialValue: value as string,\n });\n case 'email':\n return m(EmailInput, {\n ...props,\n key,\n isMandatory,\n validate,\n autofocus,\n disabled,\n onchange,\n initialValue: value as string,\n });\n case 'checkbox':\n return m(InputCheckbox, {\n ...props,\n validate,\n disabled,\n onchange,\n checked: value as boolean,\n });\n case 'select':\n const onChange = (v?: string | number | Array<string | number>) => v && onchange && onchange(v);\n return m(Select, {\n ...props,\n key,\n options: selectOptions || [{ id: 'none', label: 'Unspecified' }],\n disabled,\n isMandatory,\n validate,\n onchange: onChange,\n checkedId: value as string | number | Array<string | number>,\n });\n case 'options':\n const onChange2 = (checkedIds: Array<string | number>) => onchange && onchange(checkedIds);\n return m(Options, {\n ...props,\n key,\n options: selectOptions || [{ id: 'none', label: 'Unspecified' }],\n disabled,\n isMandatory,\n validate,\n onchange: onChange2,\n checkedId: value as string | number | Array<string | number>,\n });\n case 'radios':\n const onChange3 = (v?: string | number) => v && onchange && onchange(v);\n return m(RadioButtons, {\n ...props,\n key,\n options: selectOptions || [{ id: 'none', label: 'Unspecified' }],\n disabled,\n isMandatory,\n validate,\n onchange: onChange3,\n checkedId: value as string | number,\n });\n case 'date':\n const date = (value as Date) || new Date();\n if (!value && onchange) {\n onchange(date);\n }\n return m(DatePicker, {\n ...props,\n key,\n isMandatory,\n autofocus,\n disabled,\n onchange,\n initialValue: date,\n container: (containerId ? document.getElementById(containerId) : document.body) as HTMLElement,\n });\n case 'time':\n const time = (value as string) || '00:00';\n if (!value && onchange) {\n onchange(time);\n }\n return m(TimePicker, {\n ...props,\n key,\n isMandatory,\n autofocus,\n disabled,\n onchange,\n initialValue: time,\n container: containerId || document.body.id,\n });\n default:\n return undefined;\n }\n};\n\n/**\n * Generate a new group or form based on an object's model description, where a model consists of multiple fields.\n */\nexport const LayoutForm = <T extends IConvertibleType>(): Component<{\n el?: string;\n model: IModelField[];\n item: T;\n containerId?: string;\n disabled?: boolean;\n editableIds?: Array<keyof T>;\n onchange?: (valid: boolean) => void;\n}> => {\n const state = {} as {\n model: IModelField[];\n item: IConvertibleType;\n };\n\n const isValid = () => {\n const { model, item } = state;\n return model\n .filter(f => f.required)\n .reduce(\n (acc, cur) =>\n acc &&\n !(\n typeof item[cur.id] === 'undefined' ||\n (item[cur.id] instanceof Array && (item[cur.id] as any[]).length === 0) ||\n (typeof item[cur.id] === 'string' && (item[cur.id] as string).length === 0)\n ),\n true\n );\n };\n\n return {\n view: ({ attrs: { el = '.row', model, item, containerId, disabled = false, editableIds = [], onchange } }) => {\n state.item = item;\n state.model = model;\n if (onchange) {\n onchange(false);\n }\n\n return m(\n el,\n { style: 'margin-bottom: -15px;', key: item.id },\n model.map((f, i) =>\n fieldToComponent(f, item[f.id], {\n containerId,\n autofocus: i === 0,\n disabled: disabled && editableIds.indexOf(f.id) < 0,\n onchange:\n disabled && editableIds.indexOf(f.id) < 0\n ? undefined\n : (v, overwrite = true) => {\n if (overwrite || typeof state.item[f.id] === 'undefined') {\n if (v instanceof Array) {\n state.item[f.id] = v;\n } else {\n state.item[f.id] = v;\n }\n if (onchange) {\n onchange(isValid());\n }\n }\n },\n })\n )\n );\n },\n };\n};\n","import m, { FactoryComponent, Vnode, Attributes } from 'mithril';\nimport { FlatButton } from './button';\n\nexport interface IMaterialModal extends Attributes {\n id: string;\n title: string;\n description?: string | Vnode<any, any>;\n /** Set to true when the description contains HTML */\n richContent?: boolean;\n /** Fixate the footer, so you can show more content. */\n fixedFooter?: boolean;\n /** Display on the bottom */\n bottomSheet?: boolean;\n /** Materialize css' modal options */\n options?: Partial<M.ModalOptions>;\n /** Menu buttons, from left to right */\n buttons?: Array<{ label: string; iconName?: string; disabled?: boolean; onclick?: (e: UIEvent) => void }>;\n /** Get the modal instance, so you can control it programmatically */\n onCreate?: (modal: M.Modal) => void;\n}\n\n/** Builds a modal panel, which can be triggered using its id */\nexport const ModalPanel: FactoryComponent<IMaterialModal> = () => ({\n oncreate: ({ dom, attrs: { options, onCreate } }) => {\n const modal = M.Modal.init(dom, options);\n if (onCreate) {\n onCreate(modal);\n }\n },\n view: ({ attrs: { id, title, description, fixedFooter, bottomSheet, buttons, richContent } }) => {\n const ff = fixedFooter ? '.modal-fixed-footer' : '';\n const bs = bottomSheet ? '.bottom-sheet' : '';\n return m(`.modal${ff}${bs}[id=${id}]`, [\n m('.modal-content', [\n m('h4', title),\n richContent && typeof description === 'string'\n ? m.trust(description || '')\n : typeof description === 'string'\n ? m('p', description)\n : description,\n ]),\n buttons\n ? m('.modal-footer', buttons.map(props => m(FlatButton, { ...props, className: 'modal-close' })))\n : undefined,\n ]);\n },\n});\n","import m, { FactoryComponent, Attributes, Vnode } from 'mithril';\n\nexport interface IInternalPaginationOption extends IPaginationOption {\n active?: boolean;\n title: number | Vnode<any, any>;\n}\n\nexport interface IPaginationOption extends Attributes {\n href: string;\n disabled?: boolean;\n}\n\nconst PaginationItem: FactoryComponent<IInternalPaginationOption> = () => ({\n view: ({ attrs: { title, href, active, disabled } }) =>\n m(\n 'li',\n { className: active ? 'active' : disabled ? 'disabled' : 'waves-effect' },\n typeof title === 'number' ? m(m.route.Link, { href }, title) : title\n ),\n});\n\nexport interface IPaginationOptions extends Attributes {\n /**\n * How many items do we show\n * @default 9 or items.length, whatever is the smallest\n */\n size?: number;\n /** The active page index */\n curPage?: number;\n items: IPaginationOption[];\n}\n\nexport const Pagination: FactoryComponent<IPaginationOptions> = () => {\n const state = {\n pagIndex: 0,\n };\n return {\n view: ({ attrs: { items, curPage = 1, size = Math.min(9, items.length) } }) => {\n const { pagIndex } = state;\n const startPage = pagIndex * size;\n const endPage = startPage + size;\n const canGoBack = pagIndex > 0;\n const canGoForward = endPage < items.length;\n const displayedItems = [\n {\n title: m(\n 'a',\n {\n onclick: () => canGoBack && state.pagIndex--,\n },\n m('i.material-icons', 'chevron_left')\n ),\n disabled: !canGoBack,\n },\n ...items.filter((_, i) => startPage <= i && i < endPage),\n {\n title: m(\n 'a',\n {\n onclick: () => canGoForward && state.pagIndex++,\n },\n m('i.material-icons', 'chevron_right')\n ),\n disabled: !canGoForward,\n },\n ] as (\n | IPaginationOption\n | {\n title?: m.Vnode<any, any>;\n disabled: boolean;\n }\n )[];\n return m(\n 'ul.pagination',\n displayedItems.map((item, i) =>\n m(PaginationItem, {\n title: startPage + i,\n ...item,\n active: startPage + i === curPage,\n })\n )\n );\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes } from 'mithril';\nimport './styles/timeline.css';\nimport { padLeft } from './utils';\n\nexport interface ITimelineItem {\n id?: string;\n title?: Vnode<any, any> | string;\n datetime: Date;\n iconName?: string;\n active?: boolean;\n content?: Vnode<any, any> | string;\n}\n\ninterface IInternalTimelineItem extends ITimelineItem {\n /** Formatter for the dates, normally specified by Timeline component */\n dateFormatter: (d: Date) => string;\n /** Formatter for the time, normally specified by Timeline component */\n timeFormatter: (d: Date) => string;\n /** When an item is selected, call this function */\n onSelect?: (ti: ITimelineItem) => void;\n}\n\nexport interface ITimeline extends Attributes {\n items: ITimelineItem[];\n /** When an item is selected, call this function */\n onSelect?: (ti: ITimelineItem) => void;\n /** Formatter for the dates, @default date/month/year in UTC */\n dateFormatter?: (d: Date) => string;\n /** Formatter for the time @default HH:mm in UTC */\n timeFormatter?: (d: Date) => string;\n}\n\nconst TimelineItem: FactoryComponent<IInternalTimelineItem> = () => {\n return {\n view: ({ attrs: { id, title, datetime, active, content, iconName, dateFormatter, timeFormatter, onSelect } }) => {\n const onclick = onSelect ? () => onSelect({ id, title, datetime, active, content }) : undefined;\n const style = onSelect ? 'cursor: pointer;' : undefined;\n return m(`li${active ? '.active' : ''}${id ? `[id=${id}]` : ''}`, { onclick, style }, [\n m('.mm_time', { datetime }, [m('span', dateFormatter(datetime)), m('span', timeFormatter(datetime))]),\n iconName ? m('.mm_icon', m('i.material-icons', iconName)) : undefined,\n m('.mm_label', [\n title ? typeof title === 'string' ? m('h5', title) : title : undefined,\n content ? (typeof content === 'string' ? m('p', content) : content) : undefined,\n ]),\n ]);\n },\n };\n};\n\n/**\n * A timeline component to generate a simple vertical timeline based on Codrops' Vertical Timeline.\n * @see https://tympanus.net/codrops/2013/05/02/vertical-timeline/\n */\nexport const Timeline: FactoryComponent<ITimeline> = () => {\n const df = (d: Date) => `${d.getUTCDate()}/${d.getUTCMonth() + 1}/${d.getUTCFullYear()}`;\n const tf = (d: Date) => `${padLeft(d.getUTCHours())}:${padLeft(d.getUTCMinutes())}`;\n return {\n view: ({ attrs: { items, onSelect, timeFormatter = tf, dateFormatter = df } }) => {\n return m(\n 'ul.mm_timeline',\n items.map(item => m(TimelineItem, { onSelect, dateFormatter, timeFormatter, ...item }))\n );\n },\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId, toAttrs } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label, HelperText } from './label';\n\nexport interface IAutoCompleteOptions extends Partial<M.AutocompleteOptions>, IInputOptions<string> {}\n\n/** Component to auto complete your text input */\nexport const Autocomplete: FactoryComponent<IAutoCompleteOptions> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const id = attrs.id || state.id;\n const attributes = toAttrs(attrs);\n const {\n label,\n helperText,\n initialValue,\n onchange,\n newRow,\n className = 'col s12',\n style,\n iconName,\n isMandatory,\n } = attrs;\n return m(`.input-field${newRow ? '.clear' : ''}`, { className, style }, [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(`input.autocomplete[type=text][tabindex=0][id=${id}]${attributes}`, {\n oncreate: ({ dom }) => {\n M.Autocomplete.init(dom, attrs);\n },\n onchange: onchange\n ? (e: Event) => {\n if (e.target && (e.target as HTMLInputElement).value) {\n onchange((e.target as HTMLInputElement).value);\n }\n }\n : undefined,\n value: initialValue,\n }),\n m(Label, { label, id, isMandatory, isActive: initialValue }),\n m(HelperText, { helperText }),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport { Label, HelperText } from './label';\n\nexport interface IChipsOptions extends Partial<M.ChipsOptions>, Attributes {\n onchange?: (chips: M.ChipData[]) => void;\n /** Optional label above the input */\n label?: string;\n /** Optional help text below the input */\n helperText?: string;\n}\n\n/** Chips and tags */\nexport const Chips: FactoryComponent<IChipsOptions> = () => {\n return {\n oncreate: ({ attrs, dom }) => {\n const { onchange, onChipAdd, onChipDelete } = attrs;\n const chips = M.Chips.getInstance(dom.children[0]) as M.Chips;\n const onChipAddBound = onChipAdd ? (onChipAdd.bind(chips) as (el: Element, chip: Element) => void) : undefined;\n attrs.onChipAdd = function (this: M.Chips, el: Element, chip: Element) {\n if (onchange) {\n onchange(this.chipsData);\n }\n if (onChipAddBound) {\n onChipAddBound(el, chip);\n }\n };\n const onChipDeleteBound = onChipDelete\n ? (onChipDelete.bind(chips) as (el: Element, chip: Element) => void)\n : undefined;\n attrs.onChipDelete = function (this: M.Chips, el: Element, chip: Element) {\n if (onchange) {\n onchange(this.chipsData);\n }\n if (onChipDeleteBound) {\n onChipDeleteBound(el, chip);\n }\n };\n M.Chips.init(dom.children[0], attrs);\n },\n onupdate: ({ dom, attrs: { data } }) => {\n if (!data || data.length === 0) {\n return;\n }\n const chips = M.Chips.getInstance(dom.children[0]) as M.Chips;\n data.forEach((d) => chips.addChip(d));\n },\n view: ({\n attrs: { placeholder, required, isMandatory = required, data, className = 'col s12', label, helperText },\n }) => {\n return m('.input-field', { className }, [\n m(`.chips.chips-autocomplete${placeholder ? '.chips-placeholder' : ''}${data ? '.chips-initial' : ''}`),\n label ? m(Label, { label, isMandatory, className: 'active' }) : undefined,\n helperText ? m(HelperText, { helperText }) : undefined,\n ]);\n },\n };\n};\n","import './styles/codeblock.css';\nimport m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface ICodeBlock extends Attributes {\n language?: string;\n code: string | string[];\n newRow?: boolean;\n}\n\n/** A simple code block without syntax high-lighting */\nexport const CodeBlock: FactoryComponent<ICodeBlock> = () => ({\n view: ({ attrs }) => {\n const { newRow, code, language } = attrs;\n const lang = language || 'lang-TypeScript';\n const label = lang.replace('lang-', '');\n const cb = code instanceof Array ? code.join('\\n') : code;\n return m(`pre.codeblock${newRow ? '.clear' : ''}`, attrs, [\n m('div', m('label', label)),\n m(`code.${lang}`, cb),\n ]);\n },\n});\n","import m, { FactoryComponent } from 'mithril';\n\nexport interface IFloatingActionButton extends Partial<M.FloatingActionButtonOptions> {\n /** Optional classes to add to the top element */\n className?: string;\n /** Optional style to add to the top element, e.g. for positioning it inline */\n style?: string;\n /** Material-icons name for the main FAB, @see https://materializecss.com/icons.html */\n iconName: string;\n /** Helper option to place the FAB inline instead of the bottom right of the display */\n position?: 'left' | 'right' | 'inline-left' | 'inline-right';\n /**\n * Optional icon class, e.g. tiny (1em), small (2em), medium (4em), large (6em), or 'tiny right'.\n * @default large\n */\n iconClass?: string;\n /** The buttons you want to show */\n buttons?: Array<{\n /** Optional classes you want to add to the main element */\n className?: string;\n /** Name of the icon */\n iconName: string;\n /** Classes of the icon */\n iconClass?: string;\n /** On click function */\n onClick?: (e: UIEvent) => void;\n }>;\n}\n\n/**\n * A Floating Action Button.\n *\n * @example FlatButton = ButtonFactory('a.waves-effect.waves-teal.btn-flat');\n */\nexport const FloatingActionButton: FactoryComponent<IFloatingActionButton> = () => {\n return {\n view: ({\n attrs: {\n className,\n iconName,\n iconClass = 'large',\n position,\n style = position === 'left' || position === 'inline-left'\n ? 'position: absolute; display: inline-block; left: 24px;'\n : position === 'right' || position === 'inline-right'\n ? 'position: absolute; display: inline-block; right: 24px;'\n : undefined,\n buttons,\n ...options\n },\n }) => {\n const fab = m(\n '.fixed-action-btn',\n {\n style,\n oncreate: ({ dom }) => M.FloatingActionButton.init(dom, options),\n },\n [\n m('a.btn-floating.btn-large', { className }, m('i.material-icons', { classNames: iconClass }, iconName)),\n buttons\n ? m(\n 'ul',\n buttons.map(b =>\n m(\n 'li',\n m(\n 'a.btn-floating',\n { className: b.className, onclick: (e: UIEvent) => b.onClick && b.onClick(e) },\n m('i.material-icons', { className: b.iconClass }, b.iconName)\n )\n )\n )\n )\n : undefined,\n ]\n );\n return position === 'inline-right' || position === 'inline-left'\n ? m('div', { style: 'position: relative; height: 70px;' }, fab)\n : fab;\n },\n };\n};\n","import m, { Component, Attributes } from 'mithril';\nimport { FlatButton } from './button';\nimport { Dropdown } from './dropdown';\nimport { ModalPanel } from './modal';\nimport { IModelField, IConvertibleType, LayoutForm } from './layout-form-generator';\nimport { move, uuid4, uniqueId } from './utils';\nimport './styles/kanban.css';\n\nexport interface IKanbanI18n {\n newItem: string;\n modalDeleteItem: string;\n modalCreateNewItem: string;\n modalEditNewItem: string;\n}\n\nexport interface IKanban<T> extends Attributes {\n /**\n * Label for creating a new item\n * @deprecated Use i18n instead\n */\n label?: string;\n /** Label for creating a new item */\n i18n?: IKanbanI18n;\n /** The model representing the item's fields */\n model: IModelField[];\n /** The items that we want to show */\n items?: T[];\n /** Notify of changes */\n onchange?: (items: T[]) => void;\n /** If true, use a modal for editing with a fixed footer */\n fixedFooter?: boolean;\n /** Can we create and edit new items: default true */\n canEdit?: boolean;\n /** Can we sort items: default true */\n canSort?: boolean;\n /** Can we drag items - in this case, sorting is disabled: default false */\n canDrag?: boolean;\n /**\n * Can we move items between lists (based on the same model): default false.\n * Must be enabled on both lists in order to work.\n */\n moveBetweenList?: boolean;\n /** Sort direction */\n sortDirection?: 'asc' | 'desc';\n /** Properties to sort */\n sortProperties?: string[];\n /** Property IDs which can always be edited, e.g. also in the list view */\n editableIds?: string[];\n /** If true, disable the item */\n disabled?: boolean;\n}\n\ninterface IKanbanState<T extends IConvertibleType> extends IKanban<T> {\n /** Container ID for DatePicker and TimePicker */\n items: T[];\n containerId?: string;\n curSortId?: string;\n curItem?: T;\n updatedItem?: T;\n canSave?: boolean;\n id: string;\n editId: string;\n deleteId: string;\n dragIndex: number;\n /** Are we coyping or moving the item */\n copying?: boolean;\n}\n\n/** A flexible list of items, supporting drag-n-drop */\nexport const Kanban = <T extends IConvertibleType>(): Component<Partial<IKanban<T>>> => {\n const state = {\n id: uniqueId(),\n } as IKanbanState<T>;\n\n const notify = () => state.onchange && state.onchange(state.items);\n\n /** The drop location indicates the new position of the dropped element: above or below */\n const computeDropLocation = (target: HTMLElement, ev: DragEvent) => {\n const { top, height } = target.getBoundingClientRect();\n const y = ev.clientY - top;\n const deltaZone = height / 2;\n return y < deltaZone ? 'above' : 'below';\n };\n\n const getItemIndex = (target: Element): number => {\n const data = target.getAttribute('data-kanban-index');\n if (data) {\n return +data;\n } else if (target.parentElement) {\n return getItemIndex(target.parentElement);\n } else {\n return -1;\n }\n };\n\n const isKanbanItem = (target: Element): boolean => {\n if (/kanban__item/.test(target.className)) {\n return true;\n } else if (target.parentElement) {\n return isKanbanItem(target.parentElement);\n } else {\n return false;\n }\n };\n\n const getKanbanItem = (target: Element): HTMLDivElement | null => {\n if (/kanban__item/.test(target.className)) {\n return target as HTMLDivElement;\n } else if (target.parentElement) {\n return getKanbanItem(target.parentElement);\n } else {\n return null;\n }\n };\n\n const getNewIndex = (dropLocation: 'above' | 'below', targetIndex: number, sourceIndex: number) =>\n state.moveBetweenList\n ? dropLocation === 'above'\n ? targetIndex\n : targetIndex + 1\n : sourceIndex < targetIndex\n ? dropLocation === 'above'\n ? targetIndex - 1\n : targetIndex\n : dropLocation === 'above'\n ? targetIndex\n : targetIndex - 1;\n\n const isValidTarget = (target: HTMLElement, dropLocation: 'above' | 'below') => {\n const kanbanItem = isKanbanItem(target);\n if (!kanbanItem) {\n return false;\n }\n const { dragIndex, moveBetweenList } = state;\n if (moveBetweenList) {\n return true;\n }\n const targetIndex = getItemIndex(target);\n const newIndex = getNewIndex(dropLocation, targetIndex, dragIndex);\n return dragIndex !== targetIndex && newIndex !== dragIndex;\n };\n\n /** Autogenerate any autogenerated fields on copy */\n const processAutogeneratedFields = (item: IConvertibleType) => {\n const { model } = state;\n model\n .filter(f => f.autogenerate)\n .forEach(({ id, autogenerate }) => {\n item[id] = autogenerate === 'id' ? uniqueId() : uuid4();\n });\n };\n\n const ondragstart = (ev: DragEvent) => {\n const target = ev.target as HTMLElement;\n if (ev.dataTransfer) {\n const { items } = state;\n ev.dataTransfer.effectAllowed = 'copyMove';\n state.dragIndex = getItemIndex(target);\n const item = items[state.dragIndex];\n ev.dataTransfer.setData('application/json', JSON.stringify(item, null, 2));\n }\n };\n\n const ondragover = (ev: DragEvent) => {\n // console.log('ondragover');\n (ev as any).redraw = false;\n ev.preventDefault();\n const target = ev.target as HTMLElement;\n const kanbanItem = getKanbanItem(target);\n if (kanbanItem && ev.dataTransfer) {\n const copying = ev.getModifierState('Control');\n kanbanItem.classList.remove('kanban__above', 'kanban__below');\n const dropLocation = computeDropLocation(kanbanItem, ev);\n if (isValidTarget(kanbanItem, dropLocation)) {\n kanbanItem.classList.add('kanban__' + dropLocation);\n state.copying = copying;\n ev.dataTransfer.dropEffect = copying ? 'copy' : 'move';\n } else {\n ev.dataTransfer.dropEffect = 'none';\n }\n }\n };\n\n const ondragleave = (ev: DragEvent) => {\n (ev as any).redraw = false;\n const target = ev.target as HTMLElement;\n const kanbanItem = getKanbanItem(target);\n if (kanbanItem) {\n kanbanItem.classList.remove('kanban__above', 'kanban__below');\n }\n };\n\n // const shallowCopy = <T extends { [key: string]: any }>(item: T) => ({ ...item });\n const ondrop = (ev: DragEvent) => {\n ev.preventDefault();\n const { dragIndex, moveBetweenList, copying } = state;\n const target = ev.target as HTMLElement;\n const kanbanItem = getKanbanItem(target);\n if (kanbanItem) {\n kanbanItem.classList.remove('kanban__above', 'kanban__below');\n const dropLocation = computeDropLocation(target, ev);\n const targetIndex = getItemIndex(target);\n const newIndex = getNewIndex(dropLocation, targetIndex, dragIndex);\n if (newIndex < dragIndex) {\n state.dragIndex++;\n }\n if (moveBetweenList && ev.dataTransfer) {\n const item = JSON.parse(ev.dataTransfer.getData('application/json')) as T;\n if (copying) {\n processAutogeneratedFields(item);\n }\n state.items.splice(newIndex, 0, item);\n } else {\n move(state.items, dragIndex, newIndex);\n }\n notify();\n }\n };\n\n /** ondragend is invoked on the source Kanban, also when the drop occurs in another Kanban instance. */\n const ondragend = (ev: DragEvent) => {\n if (ev.dataTransfer) {\n if (ev.dataTransfer.dropEffect === 'move') {\n state.items.splice(state.dragIndex, 1);\n notify();\n }\n }\n };\n\n const dragOptions = {\n draggable: true,\n ondrop,\n ondragstart,\n ondragover,\n ondragleave,\n ondragend,\n };\n\n return {\n oninit: ({\n attrs: {\n items = [],\n canEdit = true,\n canSort = true,\n canDrag = false,\n sortDirection = 'asc',\n model = [],\n label = 'item',\n i18n = {\n newItem: `New ${label}`,\n modalDeleteItem: `Delete ${label}`,\n modalCreateNewItem: `Create new ${label}`,\n modalEditNewItem: `Edit new ${label}`,\n },\n containerId,\n editableIds = [],\n fixedFooter = false,\n moveBetweenList = false,\n },\n }) => {\n state.items = items.map(item => ({ ...item }));\n state.model = model;\n state.i18n = i18n;\n state.canEdit = canEdit;\n state.canSort = canSort;\n state.canDrag = canDrag;\n state.sortDirection = sortDirection as 'asc' | 'desc';\n state.containerId = containerId;\n state.fixedFooter = fixedFooter;\n state.editId = `edit_item_${state.id}`;\n state.deleteId = `delete_item_${state.id}`;\n state.moveBetweenList = moveBetweenList;\n state.editableIds = editableIds;\n state.sortableIds = [{ label: 'None' }, ...model.filter(i => i.label).map(i => ({ label: i.label!, id: i.id }))];\n },\n view: ({ attrs: { disabled, onchange } }) => {\n const {\n model,\n items,\n canSort,\n sortDirection,\n curSortId,\n i18n,\n containerId,\n fixedFooter,\n canDrag,\n canEdit,\n moveBetweenList,\n sortableIds,\n editableIds,\n } = state;\n if (!model) {\n return undefined;\n }\n state.onchange = onchange;\n\n const dir = sortDirection === 'asc' ? 1 : -1;\n const sortedItems =\n canSort && curSortId\n ? items.sort((a, b) => (a[curSortId]! > b[curSortId]! ? dir : a[curSortId]! < b[curSortId]! ? -dir : 0))\n : items;\n\n return m('.kanban', [\n m('.row.kanban__menu', { style: 'margin-bottom: 0;' }, [\n canEdit && !disabled\n ? m(FlatButton, {\n label: i18n!.newItem,\n modalId: state.editId,\n iconName: 'add',\n onclick: () => {\n state.curItem = undefined;\n state.updatedItem = {} as T;\n },\n })\n : undefined,\n canSort && !canDrag && sortableIds && items.length > 1\n ? [\n m(FlatButton, {\n iconName: 'sort',\n iconClass: sortDirection === 'asc' ? 'left twist' : '',\n className: 'right',\n onclick: () => {\n state.sortDirection = state.sortDirection === 'asc' ? 'desc' : 'asc';\n },\n }),\n m(Dropdown, {\n items: sortableIds,\n checkedId: curSortId,\n className: 'right',\n style: 'margin: 0 auto;',\n onchange: (id: string | number) => (state.curSortId = id as string),\n }),\n ]\n : undefined,\n ]),\n\n m(\n '.row.kanban__items',\n m(\n '.col.s12',\n sortedItems.length > 0 || !moveBetweenList\n ? sortedItems.map((item, i) =>\n m(\n `.card-panel.kanban__item[data-kanban-index=${i}]${disabled ? '.disabled' : ''}`,\n canDrag && !disabled ? { key: item.id, ...dragOptions } : { key: item.id },\n [\n m(\n '.card-content',\n m(LayoutForm, {\n model,\n item,\n containerId,\n disabled: true,\n editableIds,\n onchange: (valid: boolean) => {\n state.canSave = valid;\n if (valid && onchange) {\n onchange(state.items);\n }\n },\n })\n ),\n canEdit && !disabled\n ? m(\n '.card-action.row',\n m('.col.s12', [\n m(FlatButton, {\n iconName: 'edit',\n modalId: state.editId,\n onclick: () => {\n state.curItem = item;\n state.updatedItem = { ...item };\n },\n }),\n m(FlatButton, {\n iconName: 'delete',\n modalId: state.deleteId,\n onclick: () => (state.curItem = item),\n }),\n ])\n )\n : undefined,\n ]\n )\n )\n : m('.card-panel.kanban__item', { ...dragOptions })\n )\n ),\n m(ModalPanel, {\n id: state.editId,\n title: i18n!.modalCreateNewItem,\n fixedFooter,\n description: state.updatedItem\n ? m(LayoutForm, {\n model,\n item: state.updatedItem || {},\n containerId,\n onchange: (valid: boolean) => {\n state.canSave = valid;\n },\n })\n : undefined,\n buttons: [\n {\n iconName: 'cancel',\n label: 'Cancel',\n },\n {\n iconName: 'save',\n label: 'Save',\n disabled: !state.canSave,\n onclick: () => {\n if (state.curItem) {\n const curItem = state.curItem;\n model.forEach(f => {\n (curItem as IConvertibleType)[f.id] = state.updatedItem![f.id];\n });\n } else if (state.updatedItem) {\n state.items.push(state.updatedItem);\n }\n notify();\n },\n },\n ],\n }),\n m(ModalPanel, {\n id: state.deleteId,\n title: i18n!.modalDeleteItem,\n description: 'Are you sure?',\n buttons: [\n {\n label: 'No',\n },\n {\n label: 'Yes',\n onclick: () => {\n state.items = state.items.filter(item => item !== state.curItem);\n notify();\n },\n },\n ],\n }),\n ]);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\nimport './styles/map-editor.css';\nimport { ICollectionItem, Collection, CollectionMode } from './collection';\nimport { InputCheckbox } from './option';\nimport { uniqueId } from './utils';\nimport { Label } from './label';\nimport { TextArea, TextInput, NumberInput } from './input';\nimport { FlatButton } from './button';\n\nexport interface IMapEditor extends Attributes {\n /** Optional ID of the element */\n id?: string;\n /** If true, displays a header over the map */\n header?: string;\n /** Instead of a header, use a label */\n label?: string;\n /** Places a required * after the label */\n isMandatory?: boolean;\n /**\n * Optional value for the key label\n * @default: \"Key\"\n */\n labelKey?: string;\n /**\n * Optional value for the value label\n * @default: \"Value\"\n */\n labelValue?: string;\n /** If true, the item cannot be edited */\n disabled?: boolean;\n /** Icon for the properties' collection */\n iconName?: string;\n /** Icon for the key editor: if none provided, and the iconName is set, uses 'label' */\n iconNameKey?: string;\n /** If true, do not parse arrays like [1, 2, 3] into number[] or [a, b, c] into a string[] */\n disallowArrays?: boolean;\n /** The actual map of key-value pairs supports numbers, strings, booleans and arrays of strings and numbers. */\n properties: { [key: string]: number | string | boolean | Array<string | number> };\n /**\n * Called when the properties collection has changed. Not needed if you are performing a direct edit on the\n * properties object, but in case you have created a mapping, this allows you to convert the object back again.\n */\n onchange?: (properties: { [key: string]: number | string | boolean | Array<string | number> }) => void;\n /**\n * In order to create a boolean, you first have to enter a truthy or falsy value.\n * Default 'true' and 'false', but you can add more options.\n */\n truthy?: string[];\n /**\n * In order to create a boolean, you first have to enter a truthy or falsy value.\n * Default 'true' and 'false', but you can add more options.\n */\n falsy?: string[];\n /**\n * Optional function to replace the render function of a key-value pair.\n * The ICollectionItems's title may be a Vnode.\n */\n keyValueConverter?: (key: string, value: number | string | boolean | Array<string | number>) => ICollectionItem;\n /** Optional class to apply to the key column, @default .col.s4 */\n keyClass?: string;\n /** Optional class to apply to the value column, @default .col.s8 */\n valueClass?: string;\n}\n\n/** A simple viewer and/or editor for a map of key - value pairs */\nexport const MapEditor: FactoryComponent<IMapEditor> = () => {\n const parseArray = (v?: string, disallowArrays = false) => {\n if (disallowArrays) {\n return v;\n }\n const extractArrayData = /\\s*\\[(.*)\\]\\s*/gi;\n if (!v) {\n return undefined;\n }\n const match = extractArrayData.exec(v);\n if (!match || match.length !== 2) {\n return undefined;\n }\n return match[1]\n .split(',')\n .map(i => i.trim())\n .map(i => (/^\\d+$/g.test(i) ? +i : i));\n };\n\n const kvc = (\n key: string,\n value: number | string | boolean | Array<string | number>,\n options: { keyClass?: string; valueClass?: string }\n ) => {\n const { keyClass = '.col.s4', valueClass = '.col.s8' } = options;\n const displayValue =\n value instanceof Array\n ? value.join(', ')\n : typeof value === 'boolean'\n ? m(InputCheckbox, { label: ' ', checked: value, disabled: true, className: 'checkbox-in-collection' })\n : value.toString();\n const title = m('.row', { style: 'margin-bottom: 0' }, [m(keyClass, m('b', key)), m(valueClass, displayValue)]);\n return {\n title,\n } as ICollectionItem;\n };\n\n const onclick = (key: string) => (state.curKey = state.id = key);\n\n const kvcWrapper = (key: string, item: ICollectionItem) => {\n const clickHandler = item.onclick;\n item.id = item.id || key;\n item.active = key === state.curKey;\n item.onclick = clickHandler ? () => onclick(key) && clickHandler(item) : () => onclick(key);\n return item;\n };\n\n const toCollectionArray = (\n properties: { [key: string]: number | string | boolean | Array<string | number> },\n options: { keyClass?: string; valueClass?: string }\n ) =>\n Object.keys(properties)\n .map(key => ({ key, value: properties[key] }))\n .map(item =>\n kvcWrapper(\n item.key,\n state.kvc(item.key, item.value, { keyClass: options.keyClass, valueClass: options.valueClass })\n )\n );\n\n const isTruthy = (i: string, truthy: string[], falsy: string[]) =>\n truthy.indexOf(i) >= 0 ? true : falsy.indexOf(i) >= 0 ? false : undefined;\n\n const state = {\n elementId: uniqueId(),\n id: '',\n curKey: '',\n kvc,\n };\n\n const resetInputs = () => {\n state.id = '';\n state.curKey = '';\n };\n\n return {\n oninit: ({ attrs: { keyValueConverter, id } }) => {\n if (keyValueConverter) {\n state.kvc = keyValueConverter;\n }\n if (id) {\n state.elementId = id;\n }\n },\n view: ({\n attrs: {\n className = 'col s12',\n disabled,\n disallowArrays,\n header,\n iconName,\n iconNameKey = iconName ? 'label' : undefined,\n isMandatory,\n label,\n labelKey = 'Key',\n labelValue = 'Value',\n properties,\n keyClass,\n valueClass,\n onchange,\n falsy = ['false'],\n truthy = ['true'],\n },\n }) => {\n const notify = () => (onchange ? onchange(properties) : undefined);\n const items = toCollectionArray(properties, { keyClass, valueClass });\n const key = state.curKey;\n const prop = properties[key];\n const value =\n typeof prop === 'boolean' || typeof prop === 'number'\n ? prop\n : prop\n ? prop instanceof Array\n ? `[${prop.join(', ')}]`\n : prop\n : '';\n const id = state.elementId;\n return [\n m(\n '.map-editor',\n m('.input-field', { className, style: 'min-height: 1.5em;' }, [\n iconName ? m('i.material-icons.prefix', iconName) : '',\n m(Label, { label, isMandatory, isActive: items.length > 0 }),\n m(Collection, { id, items, mode: CollectionMode.LINKS, header }),\n ])\n ),\n disabled\n ? undefined\n : [\n m(TextInput, {\n label: labelKey,\n iconName: iconNameKey,\n className: 'col s5',\n initialValue: key,\n onchange: (v: string) => {\n state.curKey = v;\n if (state.id) {\n delete properties[state.id];\n properties[v] = prop;\n state.id = v;\n }\n notify();\n },\n }),\n typeof value === 'string'\n ? m(TextArea, {\n label: labelValue,\n initialValue: value,\n className: 'col s7',\n onchange: (v: string) => {\n const b = isTruthy(v, truthy, falsy);\n const n = typeof b === 'undefined' ? (/^\\s*\\d+\\s*$/i.test(v) ? +v : undefined) : undefined;\n properties[key] =\n typeof b === 'boolean' ? b : typeof n === 'number' ? n : parseArray(v, disallowArrays) || v;\n notify();\n },\n })\n : typeof value === 'number'\n ? m(NumberInput, {\n label: labelValue,\n initialValue: value,\n className: 'col s7',\n onchange: (v: number) => {\n properties[key] = v;\n notify();\n },\n })\n : m(InputCheckbox, {\n label: labelValue,\n checked: value,\n className: 'input-field col s7',\n onchange: (v: boolean) => {\n properties[key] = v;\n notify();\n },\n }),\n m('.col.s12.right-align', [\n m(FlatButton, {\n iconName: 'add',\n onclick: resetInputs,\n }),\n m(FlatButton, {\n iconName: 'delete',\n disabled: !key,\n onclick: () => {\n delete properties[key];\n resetInputs();\n notify();\n },\n }),\n ]),\n ],\n ];\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IMaterialBox extends Partial<M.MaterialboxOptions>, Attributes {\n /** Source image path */\n src: string;\n /**\n * Width of the image\n * @default undefined\n */\n width?: number;\n /**\n * Height of the image\n * @default undefined\n */\n height?: number;\n}\n\n/**\n * Create an image box, that, when clicked upon, fills the screen.\n * @see https://materializecss.com/media.html\n */\nexport const MaterialBox: FactoryComponent<IMaterialBox> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Materialbox.init(dom, attrs);\n },\n view: ({ attrs }) => {\n const { src, width, height } = attrs;\n const w = width ? `[width=${width}]` : '';\n const h = height ? `[height=${height}]` : '';\n return m(`img.materialboxed[src=${src}]${w}${h}`, attrs);\n },\n };\n};\n","import m, { FactoryComponent, Attributes } from 'mithril';\n\nexport interface IParallax extends Partial<M.ParallaxOptions>, Attributes {\n /** Image source */\n src: string;\n}\n\n/**\n * Parallax component:\n * Parallax is an effect where the background content or image in this case,\n * is moved at a different speed than the foreground content while scrolling.\n * @see https://materializecss.com/parallax.html\n */\nexport const Parallax: FactoryComponent<IParallax> = () => {\n return {\n oncreate: ({ dom, attrs }) => {\n M.Parallax.init(dom, attrs);\n },\n view: ({ attrs: { src } }) => (src ? m('.parallax-container', m('.parallax', m(`img[src=${src}]`))) : undefined),\n };\n};\n","import m, { FactoryComponent } from 'mithril';\nimport { uniqueId, disable } from './utils';\nimport { IInputOptions } from './input-options';\nimport { Label } from './label';\nimport './styles/switch.css';\n\nexport interface ISwitchOptions extends Partial<IInputOptions<boolean>> {\n /** Left text label */\n left?: string;\n /** Right text label */\n right?: string;\n /** If checked is true, the switch is set in the right position. */\n checked?: boolean;\n}\n\n/** Component to display a switch with two values. */\nexport const Switch: FactoryComponent<ISwitchOptions> = () => {\n const state = { id: uniqueId() };\n return {\n view: ({ attrs }) => {\n const id = attrs.id || state.id;\n const { label, left, right, disabled, newRow, onchange, checked, isMandatory, className = 'col s12' } = attrs;\n return m(`div${newRow ? '.clear' : ''}`, { className }, [\n label ? m(Label, { label: label || '', id, isMandatory }) : undefined,\n m(\n '.switch',\n m('label', [\n left || 'Off',\n m(`input[id=${id}][type=checkbox]${disable({ disabled })}${checked ? '[checked]' : ''}`, {\n onclick: onchange\n ? (e: Event) => {\n if (e.target && typeof (e.target as HTMLInputElement).checked !== 'undefined') {\n onchange((e.target as HTMLInputElement).checked);\n }\n }\n : undefined,\n }),\n m('span.lever'),\n right || 'On',\n ])\n ),\n ]);\n },\n };\n};\n","import m, { Vnode, FactoryComponent, Attributes } from 'mithril';\n\n/**\n * Link or anchor target may take 4 values:\n * - _blank: Opens the linked document in a new window or tab\n * - _self: Opens the linked document in the same frame as it was clicked (this is default)\n * - _parent: Opens the linked document in the parent frame\n * - _top: Opens the linked document in the full body of the window\n */\nexport type AnchorTarget = '_blank' | '_self' | '_parent' | '_top';\n\nexport interface ITabItem {\n /** Title of the tab */\n title: string;\n /** Vnode to render: may be empty in case of a using the tab as a hyperlink. */\n vnode?: Vnode<any, any>;\n /** ID of the tab element. Default the title in lowercase */\n id?: string;\n /** If the tab should be active */\n active?: boolean;\n /** If the tab should be disabled */\n disabled?: boolean;\n /** CSS class for the tab (li), default `.tab.col.s3` */\n className?: string;\n /** CSS class for the content (li), default `.tab.col.s3` */\n contentClass?: string;\n /**\n * By default, Materialize tabs will ignore their default anchor behaviour.\n * To force a tab to behave as a regular hyperlink, just specify the target property of that link.\n */\n target?: AnchorTarget;\n /** Only used in combination with a set target to make the tab act as a regular hyperlink. */\n href?: string;\n}\n\nexport interface ITabs extends Partial<M.TabsOptions>, Attributes {\n /** Selected tab id */\n selectedTabId?: string;\n /**\n * Tab width, can be `auto` to use the width of the title,\n * `fill` to use all availabe space, or `fixed` to use a column size.\n */\n tabWidth?: 'auto' | 'fixed' | 'fill';\n /** List of tab items */\n tabs: ITabItem[];\n}\n\nexport const Tabs: FactoryComponent<ITabs> = () => {\n const state = {} as { instance: M.Tabs };\n\n const createId = (title: string, id?: string) => (id ? id : title.replace(/ /g, '').toLowerCase());\n return {\n view: ({\n attrs: { tabWidth, selectedTabId, tabs, className: cn, style, duration, onShow, swipeable, responsiveThreshold },\n }) => {\n const activeTab = tabs.filter((t) => t.active).shift();\n const select = selectedTabId || (activeTab ? createId(activeTab.title, activeTab.id) : '');\n return m('.row', [\n m(\n '.col.s12',\n m(\n `ul.tabs${tabWidth === 'fill' ? '.tabs-fixed-width' : ''}`,\n {\n className: cn,\n style,\n oncreate: ({ dom }) => {\n state.instance = M.Tabs.init(dom, {\n duration,\n onShow,\n responsiveThreshold,\n swipeable,\n });\n },\n onupdate: () => {\n if (select) {\n const el = document.getElementById(`tab_${select}`);\n if (el) {\n el.click();\n }\n }\n },\n onremove: () => state.instance.destroy(),\n },\n tabs.map(({ className, title, id, active, disabled, target, href }) =>\n m(\n `li.tab${disabled ? '.disabled' : ''}${\n tabWidth === 'fixed' ? `.col.s${Math.floor(12 / tabs.length)}` : ''\n }`,\n { className },\n m(\n `a[id=tab_${createId(title, id)}]${active ? '.active' : ''}`,\n { target, href: href || `#${createId(title, id)}` },\n title\n )\n )\n )\n )\n ),\n tabs\n .filter(({ href }) => typeof href === 'undefined')\n .map(({ id, title, vnode, contentClass }) =>\n m(`.col.s12[id=${createId(title, id)}]`, { className: contentClass }, vnode)\n ),\n ]);\n },\n };\n};\n"],"names":["Vnode","tag","key","attrs","children","text","dom","domSize","undefined","state","events","instance","normalize","node","Array","isArray","normalizeChildren","String","input","length","isKeyed","i","TypeError","arguments","this","start","push","hasOwnProperty","selectorParser","selectorCache","isEmpty","object","hasOwn","call","compileSelector","selector","match","classes","exec","type","value","id","attrValue","replace","className","join","execSelector","vnode","hasClass","class","newAttrs","view","Error","hyperscriptVnode","apply","hyperscript","trust","html","fragment","PromisePolyfill","executor","self","resolvers","rejectors","resolveCurrent","handler","rejectCurrent","_instance","callAsync","setImmediate","setTimeout","list","shouldAbsorb","execute","then","console","error","retry","executeOnce","bind","e","runs","run","fn","onerror","prototype","onFulfilled","onRejection","resolveNext","rejectNext","handle","callback","next","promise","resolve","reject","catch","finally","reason","all","total","count","values","consume","race","window","Promise","module","global","$window","currentRedraw","$doc","document","nameSpace","svg","math","getNameSpace","xmlns","checkState","original","callHook","activeElement","createNodes","parent","vnodes","end","hooks","nextSibling","ns","createNode","initLifecycle","createTextNode","insertNode","createText","createHTML","createDocumentFragment","firstChild","childNodes","createFragment","is","element","createElementNS","createElement","setAttribute","isFileInput","setAttr","setAttrs","maybeSetContentEditable","selectedIndex","normalized","setLateSelectAttrs","initComponent","createComponent","possibleParents","caption","thead","tbody","tfoot","tr","th","td","colgroup","col","temp","innerHTML","child","appendChild","sentinel","Object","create","$$reentrantLock$$","updateNodes","old","removeNodes","isOldKeyed","oldStart","o","v","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveNodes","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","removeHTML","updateHTML","updateFragment","warn","val","removeAttr","updateAttrs","updateElement","updateComponent","frag","moveChildToFrag","parentNode","insertBefore","contenteditable","contentEditable","content","stateResult","attrsResult","mask","reallyRemove","onremove","removeChild","onbeforeremove","isLifecycleMethod","attr","isFormAttribute","updateEvent","slice","setAttributeNS","updateStyle","hasPropertyKey","removeAttribute","nsLastIndex","indexOf","currentDOM","uppercaseRegex","toLowerCase","capital","normalizeKey","style","cssText","setProperty","removeProperty","EventDict","_","removeEventListener","addEventListener","source","oninit","oncreate","onupdate","handleEvent","ev","currentTarget","redraw","preventDefault","stopPropagation","contains","prevRedraw","prevDOM","active","namespace","namespaceURI","textContent","focus","require$$0","render","schedule","subscriptions","pending","offset","sync","mount","root","component","index","splice","requestAnimationFrame","args","destructure","encodeURIComponent","assign","target","template","params","test","SyntaxError","queryIndex","hashIndex","queryEnd","path","query","resolved","m","variadic","newQueryIndex","newHashIndex","newQueryEnd","querystring","buildQueryString","oncompletion","callbackCount","PromiseProxy","makeRequest","factory","url","buildPathname","data","background","complete","wrap","constructor","hasHeader","name","headers","__proto__","request","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","ontimeout","config","send","stringify","jsonp","callbackName","Math","round","random","script","src","callbackKey","documentElement","mountRedraw","decodeURIComponentSave","str","decodeURIComponent","err","string","charAt","entries","split","counters","entry","levels","cursor","pop","level","nextLevel","isNumber","isNaN","parseInt","desc","getOwnPropertyDescriptor","parseQueryString","magic","RegExp","extras","compiled","fallbackRoute","currentPath","lastUpdate","p","scheduled","ready","currentResolver","RouterRoot","fireAsync","resolveRoute","SKIP","route","prefix","location","hash","search","pathname","concat","parsePathname","setPath","history","loop","check","payload","matchedRoute","localComp","update","comp","onmatch","options","title","replaceState","pushState","href","defaultRoute","routes","keys","templateData","templateKeys","regexp","extra","k","r","defaultData","some","ReferenceError","set","get","Link","onclick","censor","disabled","Boolean","defaultPrevented","button","which","ctrlKey","metaKey","shiftKey","altKey","param","Fragment","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","uniqueId","uuid4","compose","reduceRight","func","f","x","seperator","camelToSnake","cc","$1","toAttributeString","attribute","encodeAttribute","inputAttributes","isInputAttribute","disable","req","required","isMandatory","toAttrs","opt","isAttributeDefined","filter","reduce","toProps","maxLength","charCounter","autofocus","isNumeric","n","parseFloat","isFinite","padLeft","width","z","move","arr","CollectionMode","Mandatory","Label","label","isActive","HelperText","helperText","dataError","dataSuccess","Icon","iconName","passThrough","ButtonFactory","defaultClassNames","attributes","dca","modalId","tooltip","tooltipPostion","iconClass","Button","LargeButton","SmallButton","FlatButton","RoundIconButton","SubmitButton","CarouselItem","CollapsibleItem","header","isNonLocalRoute","SecondaryContent","props","avatarIsImage","avatar","ListItem","item","mode","AVATAR","BasicCollection","items","BASIC","collectionItems","AnchorItem","LinksCollection","Collection","LINKS","Dropdown","initialValue","checkedId","onchange","selectedItem","shift","M","init","divider","TextArea","textareaAutoResize","CharacterCounter","placeholder","InputField","defaultClass","getValue","setValidity","validationResult","setCustomValidity","newRow","onkeydown","onkeypress","onkeyup","validate","Range","TextInput","PasswordInput","NumberInput","UrlInput","ColorInput","RangeInput","EmailInput","DatePicker","onClose","dp","date","destroy","Datepicker","format","showClearBtn","setDefaultDate","defaultDate","Date","TimePicker","clear","now","onCloseEnd","tp","time","getHours","getMinutes","Timepicker","twelveHour","defaultTime","InputCheckbox","checked","Options","isChecked","checkedIds","iv","description","checkboxClass","propId","option","Select","optionsIds","isSelected","selected","ids","multiple","dropdownOptions","getSelectedValues","b","isDisabled","isMultiple","noValidSelection","FormSelect","reinit","RadioButtons","groupId","oldCheckedId","cid","RadioButton","fieldToComponent","selectOptions","autogenerate","containerId","multiline","container","getElementById","LayoutForm","el","model","editableIds","overwrite","acc","cur","isValid","ModalPanel","onCreate","modal","Modal","buttons","richContent","fixedFooter","bottomSheet","PaginationItem","TimelineItem","datetime","timeFormatter","onSelect","dateFormatter","Autocomplete","Carousel","onChipAdd","onChipDelete","chips","Chips","getInstance","onChipAddBound","chip","chipsData","onChipDeleteBound","forEach","d","addChip","lang","language","cb","Collapsible","canClear","accept","accepted","mul","dis","ph","files","position","fab","FloatingActionButton","classNames","onClick","notify","computeDropLocation","getBoundingClientRect","clientY","top","height","getItemIndex","getAttribute","parentElement","isKanbanItem","getKanbanItem","getNewIndex","dropLocation","targetIndex","sourceIndex","moveBetweenList","dragOptions","draggable","ondrop","dragIndex","copying","kanbanItem","classList","remove","newIndex","dataTransfer","getData","processAutogeneratedFields","ondragstart","effectAllowed","setData","ondragover","getModifierState","isValidTarget","dropEffect","add","ondragleave","ondragend","canEdit","canSort","canDrag","sortDirection","i18n","newItem","modalDeleteItem","modalCreateNewItem","modalEditNewItem","editId","deleteId","sortableIds","curSortId","dir","sortedItems","sort","curItem","updatedItem","valid","canSave","curKey","elementId","kvc","keyClass","valueClass","displayValue","resetInputs","keyValueConverter","disallowArrays","iconNameKey","labelKey","labelValue","properties","falsy","truthy","clickHandler","kvcWrapper","toCollectionArray","prop","isTruthy","trim","parseArray","Materialbox","pagIndex","curPage","size","min","startPage","endPage","canGoBack","canGoForward","displayedItems","Parallax","left","right","createId","tabWidth","selectedTabId","tabs","cn","duration","onShow","swipeable","responsiveThreshold","activeTab","t","select","Tabs","click","floor","contentClass","df","getUTCDate","getUTCMonth","getUTCFullYear","tf","getUTCHours","getUTCMinutes","y"],"mappings":"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"}