{"version":3,"sources":["jsdelivr-header.js","/npm/vidom@0.12.1/lib/vidom.js"],"names":[],"mappings":"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","file":"/npm/vidom@0.12.1/lib/vidom.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/vidom@0.12.1/lib/vidom.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar AMP_RE = /&/g,\n    QUOT_RE = /\"/g;\nfunction escapeAttr(str) {\n  str = str + '';\n  var i = str.length,\n      escapes = 0; // 1 — escape '&', 2 — escape '\"'\n\n  while (i-- > 0) {\n    switch (str.charCodeAt(i)) {\n      case 38:\n        escapes |= 1;\n        break;\n\n      case 34:\n        escapes |= 2;\n        break;\n    }\n  }\n\n  if ((escapes & 1) === 1) {\n    str = str.replace(AMP_RE, '&amp;');\n  }\n\n  if ((escapes & 2) === 2) {\n    str = str.replace(QUOT_RE, '&quot;');\n  }\n\n  return str;\n}\n\nfunction isInArray(arr, item) {\n  var len = arr.length;\n  var i = 0;\n\n  while (i < len) {\n    if (arr[i++] == item) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar DASHERIZE_RE = /([^A-Z]+)([A-Z])/g;\nfunction dasherize(str) {\n  return str.replace(DASHERIZE_RE, '$1-$2').toLowerCase();\n}\n\nfunction merge(source1, source2, overrideWithUndefined) {\n  var res = {};\n\n  for (var key in source1) {\n    res[key] = source1[key];\n  }\n\n  for (var _key in source2) {\n    var val = source2[_key];\n\n    if (overrideWithUndefined || typeof val !== 'undefined') {\n      res[_key] = val;\n    }\n  }\n\n  return res;\n}\n\n/** @const */\nvar IS_DEBUG = !process.env.NODE_ENV || process.env.NODE_ENV === 'development';\n\nfunction setAttr(node, name, val) {\n  if (name === 'type' && node.tagName === 'INPUT') {\n    var value = node.value; // value will be lost in IE if type is changed\n\n    node.setAttribute(name, '' + val);\n    node.value = value;\n  } else {\n    node.setAttribute(getAttrName(name), '' + val);\n  }\n}\n\nfunction setBooleanAttr(node, name, val) {\n  if (val) {\n    setAttr(node, name, val);\n  } else {\n    removeAttr(node, name);\n  }\n}\n\nfunction setProp(node, name, val) {\n  node[name] = val;\n}\n\nfunction setObjProp(node, name, val) {\n  if (IS_DEBUG) {\n    var typeOfVal = typeof val;\n\n    if (typeOfVal !== 'object') {\n      throw TypeError(\"vidom: \\\"\" + name + \"\\\" attribute value must be an object, not a \" + typeOfVal);\n    }\n  }\n\n  var prop = node[name];\n\n  for (var i in val) {\n    prop[i] = val[i] == null ? '' : val[i];\n  }\n}\n\nfunction setPropWithCheck(node, name, val) {\n  if (name === 'value' && node.tagName === 'SELECT') {\n    setSelectValue(node, val);\n  } else if (node[name] !== val) {\n    node[name] = val;\n  }\n}\n\nfunction removeAttr(node, name) {\n  node.removeAttribute(getAttrName(name));\n}\n\nfunction removeProp(node, name) {\n  if (name === 'style') {\n    node[name].cssText = '';\n  } else if (name === 'value' && node.tagName === 'SELECT') {\n    removeSelectValue(node);\n  } else {\n    node[name] = getDefaultPropVal(node.tagName, name);\n  }\n}\n\nfunction setSelectValue(node, value) {\n  var isMultiple = Array.isArray(value);\n\n  if (isMultiple) {\n    var options = node.options,\n        len = options.length;\n    var i = 0,\n        optionNode;\n\n    while (i < len) {\n      optionNode = options[i++];\n      optionNode.selected = value != null && isInArray(value, optionNode.value);\n    }\n  } else {\n    node.value = value;\n  }\n}\n\nfunction removeSelectValue(node) {\n  var options = node.options,\n      len = options.length;\n  var i = 0;\n\n  while (i < len) {\n    options[i++].selected = false;\n  }\n}\n\nfunction attrToString(name, value) {\n  var attrName = getAttrName(name);\n  return attrName && attrName + '=\"' + escapeAttr(value) + '\"';\n}\n\nfunction booleanAttrToString(name, value) {\n  return value ? getAttrName(name) : '';\n}\n\nfunction overloadedBooleanAttrToString(name, value) {\n  return typeof value === 'boolean' ? booleanAttrToString(name, value) : attrToString(name, value);\n}\n\nfunction stylePropToString(name, value) {\n  var styles = '',\n      i;\n\n  for (i in value) {\n    if (value[i] != null) {\n      styles += dasherize(i) + ':' + value[i] + ';';\n    }\n  }\n\n  return styles ? name + '=\"' + styles + '\"' : styles;\n}\n\nvar defaultNodes = Object.create(null),\n    defaultPropVals = Object.create(null);\n\nfunction getDefaultPropVal(tag, attrName) {\n  var key = tag + \":\" + attrName;\n\n  if (key in defaultPropVals) {\n    return defaultPropVals[key];\n  }\n\n  var node = tag in defaultNodes ? defaultNodes[tag] : defaultNodes[tag] = document.createElement(tag);\n  return defaultPropVals[key] = node[attrName];\n}\n\nvar VALID_ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\",\n    VALID_ATTRIBUTE_NAME_CHAR = VALID_ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\",\n    VALID_ATTRIBUTE_NAME_RE = new RegExp(\"^[\" + VALID_ATTRIBUTE_NAME_START_CHAR + \"][\" + VALID_ATTRIBUTE_NAME_CHAR + \"]*$\"),\n    attrNames = Object.create(null);\n\nfunction getAttrName(attrName) {\n  return attrName in attrNames ? attrNames[attrName] : attrNames[attrName] = VALID_ATTRIBUTE_NAME_RE.test(attrName) ? attrName.toLowerCase() : '';\n}\n\nvar DEFAULT_ATTR_CFG = {\n  set: setAttr,\n  remove: removeAttr,\n  toString: attrToString\n},\n    BOOLEAN_ATTR_CFG = merge(DEFAULT_ATTR_CFG, {\n  set: setBooleanAttr,\n  toString: booleanAttrToString\n}),\n    OVERLOADED_BOOLEAN_ATTR_CFG = merge(BOOLEAN_ATTR_CFG, {\n  toString: overloadedBooleanAttrToString\n}),\n    DEFAULT_PROP_CFG = {\n  set: setProp,\n  remove: removeProp,\n  toString: attrToString\n},\n    BOOLEAN_PROP_CFG = merge(DEFAULT_PROP_CFG, {\n  toString: booleanAttrToString\n}),\n    attrsCfg = Object.create(null);\nattrNames.acceptCharset = 'accept-charset';\nattrNames.className = 'class';\nattrNames.htmlFor = 'for';\nattrNames.httpEquiv = 'http-equiv';\nattrsCfg.autoPlay = BOOLEAN_ATTR_CFG;\nattrsCfg.checked = BOOLEAN_PROP_CFG;\nattrsCfg.controls = DEFAULT_PROP_CFG;\nattrsCfg.disabled = BOOLEAN_ATTR_CFG;\nattrsCfg.download = OVERLOADED_BOOLEAN_ATTR_CFG;\nattrsCfg.id = DEFAULT_PROP_CFG;\nattrsCfg.ismap = BOOLEAN_ATTR_CFG;\nattrsCfg.loop = DEFAULT_PROP_CFG;\nattrsCfg.multiple = BOOLEAN_PROP_CFG;\nattrsCfg.muted = DEFAULT_PROP_CFG;\nattrsCfg.open = BOOLEAN_ATTR_CFG;\nattrsCfg.readOnly = BOOLEAN_PROP_CFG;\nattrsCfg.selected = BOOLEAN_PROP_CFG;\nattrsCfg.srcDoc = DEFAULT_PROP_CFG;\nattrsCfg.style = {\n  set: setObjProp,\n  remove: removeProp,\n  toString: stylePropToString\n};\nattrsCfg.value = {\n  set: setPropWithCheck,\n  remove: removeProp,\n  toString: attrToString\n};\nfunction domAttrs (attrName) {\n  return attrName in attrsCfg ? attrsCfg[attrName] : DEFAULT_ATTR_CFG;\n}\n\nfunction append(parent, child) {\n  if (Array.isArray(parent)) {\n    insertBefore(child, parent[1]);\n  } else if (Array.isArray(child)) {\n    var currentChild = child[0],\n        nextChild;\n    var lastChild = child[1];\n\n    while (currentChild !== lastChild) {\n      nextChild = currentChild.nextSibling;\n      parent.appendChild(currentChild);\n      currentChild = nextChild;\n    }\n\n    parent.appendChild(lastChild);\n  } else {\n    parent.appendChild(child);\n  }\n}\n\nfunction remove(child) {\n  if (Array.isArray(child)) {\n    var currentChild = child[0],\n        nextChild;\n    var lastChild = child[1],\n        parent = lastChild.parentNode;\n\n    while (currentChild !== lastChild) {\n      nextChild = currentChild.nextSibling;\n      parent.removeChild(currentChild);\n      currentChild = nextChild;\n    }\n\n    parent.removeChild(lastChild);\n  } else {\n    child.parentNode.removeChild(child);\n  }\n}\n\nfunction insertBefore(child, beforeChild) {\n  if (Array.isArray(beforeChild)) {\n    beforeChild = beforeChild[0];\n  }\n\n  if (Array.isArray(child)) {\n    var currentChild = child[0],\n        nextChild;\n    var lastChild = child[1],\n        parent = lastChild.parentNode;\n\n    while (currentChild !== lastChild) {\n      nextChild = currentChild.nextSibling;\n      parent.insertBefore(currentChild, beforeChild);\n      currentChild = nextChild;\n    }\n\n    parent.insertBefore(lastChild, beforeChild);\n  } else {\n    beforeChild.parentNode.insertBefore(child, beforeChild);\n  }\n}\n\nfunction move(child, toChild, after) {\n  if (after) {\n    if (Array.isArray(toChild)) {\n      toChild = toChild[1];\n    }\n\n    var nextSibling = toChild.nextSibling;\n\n    if (nextSibling) {\n      insertBefore(child, nextSibling);\n    } else {\n      append(toChild.parentNode, child);\n    }\n  } else {\n    insertBefore(child, toChild);\n  }\n}\n\nfunction replace(old, replacement) {\n  if (Array.isArray(old)) {\n    insertBefore(replacement, old);\n    remove(old);\n  } else {\n    old.parentNode.replaceChild(replacement, old);\n  }\n}\n\nfunction removeChildren(from) {\n  if (Array.isArray(from)) {\n    var currentChild = from[0].nextSibling,\n        nextChild;\n    var lastChild = from[1],\n        parent = lastChild.parentNode;\n\n    while (currentChild !== lastChild) {\n      nextChild = currentChild.nextSibling;\n      parent.removeChild(currentChild);\n      currentChild = nextChild;\n    }\n  } else {\n    from.textContent = '';\n  }\n}\n\nfunction updateText(node, text, escape) {\n  if (Array.isArray(node)) {\n    var beforeChild = node[1],\n        previousChild = beforeChild.previousSibling;\n\n    if (previousChild === node[0]) {\n      beforeChild.parentNode.insertBefore(document.createTextNode(text), beforeChild);\n    } else {\n      previousChild.nodeValue = text;\n    }\n  } else if (escape) {\n    var firstChild = node.firstChild;\n\n    if (firstChild) {\n      firstChild.nodeValue = text;\n    } else {\n      node.textContent = text;\n    }\n  } else {\n    node.innerHTML = text;\n  }\n}\n\nfunction removeText(from) {\n  if (Array.isArray(from)) {\n    var child = from[0].nextSibling;\n    child.parentNode.removeChild(child);\n  } else {\n    from.textContent = '';\n  }\n}\n\nvar domOps = {\n  append: append,\n  remove: remove,\n  insertBefore: insertBefore,\n  move: move,\n  replace: replace,\n  removeChildren: removeChildren,\n  updateText: updateText,\n  removeText: removeText\n};\n\nvar ID_PROP = typeof Symbol === 'undefined' ? '__vidom__id__' : Symbol();\nvar counter = 1;\n\nfunction getDomNodeId(node, onlyGet) {\n  return ID_PROP in node ? node[ID_PROP] : onlyGet ? null : node[ID_PROP] = counter++;\n}\n\nvar ua = typeof navigator === 'undefined' ? '' : navigator.userAgent,\n    platform = typeof navigator === 'undefined' ? '' : navigator.platform;\nvar isTrident = ua.indexOf('Trident') > -1;\nvar isEdge = ua.indexOf('Edge') > -1;\nvar isIos = /iPad|iPhone|iPod/.test(platform);\n\nvar MOUSE_NATIVE_EVENTS = ['click', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup'];\nvar BUBBLEABLE_NATIVE_EVENTS = ['animationend', 'animationiteration', 'animationstart', 'blur', 'change', 'contextmenu', 'copy', 'cut', 'dblclick', 'drag', 'dragend', 'dragenter', 'dragleave', 'dragover', 'dragstart', 'drop', 'focus', 'input', 'keydown', 'keypress', 'keyup', 'paste', 'pointerover', 'pointerdown', 'pointermove', 'pointerup', 'pointercancel', 'pointerout', 'submit', 'touchcancel', 'touchend', 'touchmove', 'touchstart', 'transitionend', 'wheel'],\n    NON_BUBBLEABLE_NATIVE_EVENTS = ['canplay', 'canplaythrough', 'complete', 'durationchange', 'emptied', 'ended', 'error', 'gotpointercapture', 'load', 'loadeddata', 'loadedmetadata', 'loadstart', 'lostpointercapture', 'mouseenter', 'mouseleave', 'pause', 'play', 'playing', 'pointerenter', 'pointerleave', 'progress', 'ratechange', 'scroll', 'seeked', 'seeking', 'select', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'];\n\nif (isIos) {\n  NON_BUBBLEABLE_NATIVE_EVENTS = [].concat(NON_BUBBLEABLE_NATIVE_EVENTS, MOUSE_NATIVE_EVENTS);\n} else {\n  BUBBLEABLE_NATIVE_EVENTS = [].concat(BUBBLEABLE_NATIVE_EVENTS, MOUSE_NATIVE_EVENTS);\n}\n\nvar listenersStorage = Object.create(null),\n    eventsCfg = Object.create(null);\nvar areListenersEnabled = true;\n\nfunction globalEventListener(e, type) {\n  if (type === void 0) {\n    type = e.type;\n  }\n\n  if (!areListenersEnabled) {\n    return;\n  }\n\n  var target = e.target,\n      listenersCount = eventsCfg[type].listenersCount,\n      listener,\n      domNodeId;\n\n  while (listenersCount && target && target !== document) {\n    // need to check target for detached dom\n    if (domNodeId = getDomNodeId(target, true)) {\n      if (domNodeId in listenersStorage) {\n        listener = listenersStorage[domNodeId][type];\n\n        if (listener != null) {\n          listener(e);\n\n          if (--listenersCount === 0 || e.cancelBubble) {\n            return;\n          }\n        }\n      }\n    }\n\n    target = target.parentNode;\n  }\n}\n\nfunction eventListener(e) {\n  if (areListenersEnabled) {\n    listenersStorage[getDomNodeId(e.currentTarget)][e.type](e);\n  }\n}\n\nif (typeof document !== 'undefined') {\n  (function () {\n    var focusEvents = {\n      focus: 'focusin',\n      blur: 'focusout'\n    };\n    var i = 0,\n        isBubblingFocusSupported = true,\n        type;\n    var matchFirefox = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/);\n\n    if (matchFirefox !== null && Number(matchFirefox[1]) < 52) {\n      isBubblingFocusSupported = false;\n    }\n\n    while (i < BUBBLEABLE_NATIVE_EVENTS.length) {\n      type = BUBBLEABLE_NATIVE_EVENTS[i++];\n      eventsCfg[type] = {\n        type: type,\n        bubbles: true,\n        listenersCount: 0,\n        set: false,\n        setup: type in focusEvents ? isBubblingFocusSupported ? function () {\n          var type = this.type;\n          document.addEventListener(focusEvents[type], function (e) {\n            globalEventListener(e, type);\n          });\n        } : function () {\n          document.addEventListener(this.type, globalEventListener, true);\n        } : null\n      };\n    }\n\n    i = 0;\n\n    while (i < NON_BUBBLEABLE_NATIVE_EVENTS.length) {\n      eventsCfg[NON_BUBBLEABLE_NATIVE_EVENTS[i++]] = {\n        type: type,\n        bubbles: false,\n        set: false,\n        setup: null\n      };\n    }\n  })();\n}\n\nfunction doAddListener(cfg, domNode, type) {\n  if (cfg.bubbles) {\n    ++cfg.listenersCount;\n  } else {\n    domNode.addEventListener(type, eventListener, false);\n  }\n}\n\nfunction addListener(domNode, type, listener) {\n  if (!(type in eventsCfg)) {\n    return;\n  }\n\n  var cfg = eventsCfg[type];\n\n  if (!cfg.set) {\n    if (cfg.setup !== null) {\n      cfg.setup();\n    } else if (cfg.bubbles) {\n      document.addEventListener(type, globalEventListener, false);\n    }\n\n    cfg.set = true;\n  }\n\n  var domNodeId = getDomNodeId(domNode);\n  var listeners;\n\n  if (domNodeId in listenersStorage) {\n    listeners = listenersStorage[domNodeId];\n\n    if (listeners[type] == null) {\n      doAddListener(cfg, domNode, type);\n    }\n  } else {\n    listeners = listenersStorage[domNodeId] = Object.create(null);\n    doAddListener(cfg, domNode, type);\n  }\n\n  listeners[type] = listener;\n}\n\nfunction doRemoveListener(cfg, domNode, type) {\n  if (cfg.bubbles) {\n    --cfg.listenersCount;\n  } else {\n    domNode.removeEventListener(type, eventListener);\n  }\n}\n\nfunction removeListener(domNode, type) {\n  var domNodeId = getDomNodeId(domNode, true);\n\n  if (domNodeId !== null) {\n    if (domNodeId in listenersStorage) {\n      var listeners = listenersStorage[domNodeId];\n      listeners[type] = null;\n      doRemoveListener(eventsCfg[type], domNode, type);\n    }\n  }\n}\n\nfunction removeListeners(domNode) {\n  var domNodeId = getDomNodeId(domNode, true);\n\n  if (domNodeId !== null && domNodeId in listenersStorage) {\n    var listeners = listenersStorage[domNodeId];\n\n    for (var type in listeners) {\n      if (listeners[type] !== null) {\n        doRemoveListener(eventsCfg[type], domNode, type);\n      }\n    }\n\n    delete listenersStorage[domNodeId];\n  }\n}\n\nfunction disableListeners() {\n  areListenersEnabled = false;\n}\n\nfunction enableListeners() {\n  areListenersEnabled = true;\n}\n\nvar NS = Object.create(null);\nNS.html = 'http://www.w3.org/1999/xhtml';\nNS.svg = 'http://www.w3.org/2000/svg';\nNS.math = 'http://www.w3.org/1998/Math/MathML';\nfunction getNs(domNode) {\n  return Array.isArray(domNode) ? getParentNs(domNode) : domNode.namespaceURI === NS.html ? null : domNode.namespaceURI;\n}\nfunction getParentNs(domNode) {\n  return getNs((Array.isArray(domNode) ? domNode[domNode.length - 1] : domNode).parentNode);\n}\n\nvar ATTRS_TO_EVENTS = ['onAnimationEnd', 'onAnimationIteration', 'onAnimationStart', 'onBlur', 'onCanPlay', 'onCanPlayThrough', 'onChange', 'onClick', 'onComplete', 'onContextMenu', 'onCopy', 'onCut', 'onDblClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onDurationChange', 'onEmptied', 'onEnded', 'onError', 'onFocus', 'onGotPointerCapture', 'onInput', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onLoad', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onLostPointerCapture', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'onPause', 'onPlay', 'onPlaying', 'onPointerCancel', 'onPointerDown', 'onPointerEnter', 'onPointerLeave', 'onPointerMove', 'onPointerOut', 'onPointerOver', 'onPointerUp', 'onProgress', 'onRateChange', 'onScroll', 'onSeeked', 'onSeeking', 'onSelect', 'onStalled', 'onSubmit', 'onSuspend', 'onTimeUpdate', 'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart', 'onTransitionEnd', 'onVolumeChange', 'onWaiting', 'onWheel'].reduce(function (res, attr) {\n  res[attr] = attr.substr(2).toLowerCase();\n  return res;\n}, Object.create(null));\n\nfunction appendChild(parentElement, childElement) {\n  var parentDomNode = parentElement.getDomNode();\n  domOps.append(parentDomNode, childElement.renderToDom(getNs(parentDomNode)));\n  childElement.mount();\n}\n\nfunction insertChild(childElement, beforeChildElement) {\n  var beforeChildDomNode = beforeChildElement.getDomNode();\n  domOps.insertBefore(childElement.renderToDom(getParentNs(beforeChildDomNode)), beforeChildDomNode);\n  childElement.mount();\n}\n\nfunction removeChild(childElement) {\n  var childDomNode = childElement.getDomNode();\n  childElement.unmount();\n  domOps.remove(childDomNode);\n}\n\nfunction moveChild(childElement, toChildElement, after) {\n  var activeDomNode = document.activeElement;\n  disableListeners();\n  domOps.move(childElement.getDomNode(), toChildElement.getDomNode(), after);\n\n  if (document.activeElement !== activeDomNode) {\n    activeDomNode.focus();\n  }\n\n  enableListeners();\n}\n\nfunction removeChildren$1(parentElement) {\n  var parentDomNode = parentElement.getDomNode(),\n      childNodes = parentElement.children,\n      len = childNodes.length;\n  var j = 0;\n\n  while (j < len) {\n    childNodes[j++].unmount();\n  }\n\n  domOps.removeChildren(parentDomNode);\n}\n\nfunction replace$1(oldElement, newElement) {\n  var oldDomNode = oldElement.getDomNode();\n  oldElement.unmount();\n  domOps.replace(oldDomNode, newElement.renderToDom(getParentNs(oldDomNode)));\n  newElement.mount();\n}\n\nfunction updateAttr(element, attrName, attrVal) {\n  var domNode = element.getDomNode();\n\n  if (attrName in ATTRS_TO_EVENTS) {\n    addListener(domNode, ATTRS_TO_EVENTS[attrName], attrVal);\n  } else {\n    domAttrs(attrName).set(domNode, attrName, attrVal);\n  }\n}\n\nfunction removeAttr$1(element, attrName) {\n  var domNode = element.getDomNode();\n\n  if (attrName in ATTRS_TO_EVENTS) {\n    removeListener(domNode, ATTRS_TO_EVENTS[attrName]);\n  } else {\n    domAttrs(attrName).remove(domNode, attrName);\n  }\n}\n\nfunction updateText$1(element, text, escape) {\n  domOps.updateText(element.getDomNode(), text, escape);\n}\n\nfunction removeText$1(element) {\n  domOps.removeText(element.getDomNode());\n}\n\nvar patchOps = {\n  appendChild: appendChild,\n  insertChild: insertChild,\n  removeChild: removeChild,\n  moveChild: moveChild,\n  removeChildren: removeChildren$1,\n  replace: replace$1,\n  updateAttr: updateAttr,\n  removeAttr: removeAttr$1,\n  updateText: updateText$1,\n  removeText: removeText$1\n};\n\nfunction checkReuse(node, name) {\n  if (node.getDomNode()) {\n    throw Error(\"vidom: Detected unexpected attempt to reuse the same node \\\"\" + name + \"\\\".\");\n  }\n}\n\nfunction checkChildren(children) {\n  var keys = Object.create(null),\n      len = children.length;\n  var i = 0,\n      child;\n\n  while (i < len) {\n    child = children[i++];\n\n    if (child.key != null) {\n      if (child.key in keys) {\n        throw Error('vidom: Childrens\\' keys must be unique across the children. ' + (\"Found duplicate of \\\"\" + child.key + \"\\\" key.\"));\n      } else {\n        keys[child.key] = true;\n      }\n    }\n  }\n}\n\nfunction patchChildren(elementA, elementB) {\n  var childrenA = elementA.children,\n      childrenB = elementB.children,\n      childrenALen = childrenA.length,\n      childrenBLen = childrenB.length;\n\n  if (childrenALen === 1 && childrenBLen === 1) {\n    childrenA[0].patch(childrenB[0]);\n    return;\n  }\n\n  var leftIdxA = 0,\n      rightIdxA = childrenALen - 1,\n      leftChildA = childrenA[leftIdxA],\n      leftChildAKey = leftChildA.key,\n      rightChildA = childrenA[rightIdxA],\n      rightChildAKey = rightChildA.key,\n      leftIdxB = 0,\n      rightIdxB = childrenBLen - 1,\n      leftChildB = childrenB[leftIdxB],\n      leftChildBKey = leftChildB.key,\n      rightChildB = childrenB[rightIdxB],\n      rightChildBKey = rightChildB.key,\n      updateIdxs = 0,\n      // 1 — left A, 2 — right A, 4 — left B, 8 — right B\n  childrenAKeys = null,\n      foundAChildIdx,\n      foundAChild;\n  var childrenAIndicesToSkip = Object.create(null);\n\n  while (leftIdxA <= rightIdxA && leftIdxB <= rightIdxB) {\n    if (leftIdxA in childrenAIndicesToSkip) {\n      updateIdxs = 1;\n    } else if (rightIdxA in childrenAIndicesToSkip) {\n      updateIdxs = 2;\n    } else if (leftChildAKey === leftChildBKey) {\n      leftChildA.patch(leftChildB);\n      updateIdxs = 5;\n    } else if (rightChildAKey === rightChildBKey) {\n      rightChildA.patch(rightChildB);\n      updateIdxs = 10;\n    } else if (leftChildAKey !== null && leftChildAKey === rightChildBKey) {\n      patchOps.moveChild(leftChildA, rightChildA, true);\n      leftChildA.patch(rightChildB);\n      updateIdxs = 9;\n    } else if (rightChildAKey !== null && rightChildAKey === leftChildBKey) {\n      patchOps.moveChild(rightChildA, leftChildA, false);\n      rightChildA.patch(leftChildB);\n      updateIdxs = 6;\n    } else if (leftChildAKey !== null && leftChildBKey === null) {\n      patchOps.insertChild(leftChildB, leftChildA);\n      updateIdxs = 4;\n    } else if (leftChildAKey === null && leftChildBKey !== null) {\n      patchOps.removeChild(leftChildA);\n      updateIdxs = 1;\n    } else {\n      if (childrenAKeys === null) {\n        childrenAKeys = buildKeys(childrenA, leftIdxA, rightIdxA);\n      }\n\n      if (leftChildBKey in childrenAKeys) {\n        foundAChildIdx = childrenAKeys[leftChildBKey];\n        foundAChild = childrenA[foundAChildIdx];\n        childrenAIndicesToSkip[foundAChildIdx] = true;\n        patchOps.moveChild(foundAChild, leftChildA, false);\n        foundAChild.patch(leftChildB);\n      } else {\n        patchOps.insertChild(leftChildB, leftChildA);\n      }\n\n      updateIdxs = 4;\n    }\n\n    if ((updateIdxs & 1) === 1) {\n      if (++leftIdxA <= rightIdxA) {\n        leftChildA = childrenA[leftIdxA];\n        leftChildAKey = leftChildA.key;\n      }\n    }\n\n    if ((updateIdxs & 2) === 2) {\n      if (--rightIdxA >= leftIdxA) {\n        rightChildA = childrenA[rightIdxA];\n        rightChildAKey = rightChildA.key;\n      }\n    }\n\n    if ((updateIdxs & 4) === 4) {\n      if (++leftIdxB <= rightIdxB) {\n        leftChildB = childrenB[leftIdxB];\n        leftChildBKey = leftChildB.key;\n      }\n    }\n\n    if ((updateIdxs & 8) === 8) {\n      if (--rightIdxB >= leftIdxB) {\n        rightChildB = childrenB[rightIdxB];\n        rightChildBKey = rightChildB.key;\n      }\n    }\n\n    updateIdxs = 0;\n  }\n\n  while (leftIdxA <= rightIdxA) {\n    if (!(leftIdxA in childrenAIndicesToSkip)) {\n      patchOps.removeChild(childrenA[leftIdxA]);\n    }\n\n    ++leftIdxA;\n  }\n\n  while (leftIdxB <= rightIdxB) {\n    if (rightIdxB < childrenBLen - 1) {\n      patchOps.insertChild(childrenB[leftIdxB], childrenB[rightIdxB + 1]);\n    } else {\n      patchOps.appendChild(elementB, childrenB[leftIdxB]);\n    }\n\n    ++leftIdxB;\n  }\n}\n\nfunction buildKeys(children, idxFrom, idxTo) {\n  var res = Object.create(null);\n  var childKey;\n\n  while (idxFrom < idxTo) {\n    childKey = children[idxFrom].key;\n\n    if (childKey !== null) {\n      res[childKey] = idxFrom;\n    }\n\n    ++idxFrom;\n  }\n\n  return res;\n}\n\nvar AMP_RE$1 = /&/g,\n    LT_RE = /</g,\n    GT_RE = />/g;\nfunction escapeHtml(str) {\n  str = str + '';\n  var i = str.length;\n\n  if (i === 0) {\n    return str;\n  }\n\n  var escapes = 0; // 1 — escape '&', 2 — escape '<', 4 — escape '>'\n\n  while (i-- > 0) {\n    switch (str.charCodeAt(i)) {\n      case 38:\n        escapes |= 1;\n        break;\n\n      case 60:\n        escapes |= 2;\n        break;\n\n      case 62:\n        escapes |= 4;\n        break;\n    }\n  }\n\n  if ((escapes & 1) === 1) {\n    str = str.replace(AMP_RE$1, '&amp;');\n  }\n\n  if ((escapes & 2) === 2) {\n    str = str.replace(LT_RE, '&lt;');\n  }\n\n  if ((escapes & 4) === 4) {\n    str = str.replace(GT_RE, '&gt;');\n  }\n\n  return str;\n}\n\nvar obj = Object.create(null);\n\nif (IS_DEBUG) {\n  Object.freeze(obj);\n}\n\nvar elementProtos = Object.create(null);\nfunction createElement(tag, ns) {\n  var baseElement;\n\n  if (ns === null) {\n    baseElement = tag in elementProtos ? elementProtos[tag] : elementProtos[tag] = tag === '!' ? document.createComment('') : document.createElement(tag);\n  } else {\n    var key = ns + \":\" + tag;\n    baseElement = key in elementProtos ? elementProtos[key] : elementProtos[key] = document.createElementNS(ns, tag);\n  }\n\n  return baseElement.cloneNode();\n}\n\nvar TOP_LEVEL_NS_TAGS = {\n  'http://www.w3.org/2000/svg': 'svg',\n  'http://www.w3.org/1998/Math/MathML': 'math'\n},\n    parentTags = {\n  thead: 'table',\n  tbody: 'table',\n  tfoot: 'table',\n  tr: 'tbody',\n  td: 'tr'\n},\n    helperDomNodes = Object.create(null);\nfunction createElementByHtml(html, tag, ns) {\n  var parentTag = parentTags[tag] || 'div',\n      helperDomNode = helperDomNodes[parentTag] || (helperDomNodes[parentTag] = document.createElement(parentTag));\n\n  if (!ns || !TOP_LEVEL_NS_TAGS[ns] || TOP_LEVEL_NS_TAGS[ns] === tag) {\n    helperDomNode.innerHTML = html;\n    return helperDomNode.removeChild(helperDomNode.firstChild);\n  }\n\n  var topLevelTag = TOP_LEVEL_NS_TAGS[ns];\n  helperDomNode.innerHTML = \"<\" + topLevelTag + \" xmlns=\\\"\" + ns + \"\\\">\" + html + \"</\" + topLevelTag + \">\";\n  return helperDomNode.removeChild(helperDomNode.firstChild).firstChild;\n}\n\nfunction restrictObjProp(obj, prop) {\n  var hiddenProp = \"__\" + prop + \"__\";\n  Object.defineProperty(obj, prop, {\n    get: function get() {\n      return obj[hiddenProp];\n    },\n    set: function set(value) {\n      if (obj.__isFrozen) {\n        throw TypeError(\"vidom: \" + prop + \" is readonly\");\n      }\n\n      obj[hiddenProp] = value;\n    }\n  });\n}\n\nvar ELEMENT_TYPE_TAG = 1;\nvar ELEMENT_TYPE_TEXT = 2;\nvar ELEMENT_TYPE_FRAGMENT = 3;\nvar ELEMENT_TYPE_COMPONENT = 4;\nvar ELEMENT_TYPE_FUNCTION_COMPONENT = 5;\n\nfunction normalizeNode(obj) {\n  if (obj == null) {\n    return null;\n  }\n\n  var typeOfObj = typeof obj;\n\n  if (typeOfObj !== 'object') {\n    return typeOfObj === 'string' ? obj || null : typeOfObj === 'boolean' ? null : '' + obj;\n  }\n\n  if (!Array.isArray(obj)) {\n    return obj;\n  }\n\n  if (obj.length === 0) {\n    return null;\n  }\n\n  var res = obj,\n      i = 0,\n      hasContentBefore = false,\n      child;\n  var len = obj.length,\n      alreadyNormalizeChildren = Object.create(null);\n\n  while (i < len) {\n    child = i in alreadyNormalizeChildren ? alreadyNormalizeChildren[i] : normalizeNode(obj[i]);\n\n    if (child === null) {\n      if (res !== null) {\n        if (!hasContentBefore) {\n          res = null;\n        } else if (res === obj) {\n          res = obj.slice(0, i);\n        }\n      }\n    } else if (typeof child === 'object') {\n      if (Array.isArray(child)) {\n        res = hasContentBefore ? (res === obj ? res.slice(0, i) : Array.isArray(res) ? res : [nodeToElement(res)]).concat(child) : child.slice();\n      } else if (res !== obj) {\n        if (!hasContentBefore) {\n          res = child;\n        } else if (Array.isArray(res)) {\n          res.push(child);\n        } else {\n          res = [nodeToElement(res), child];\n        }\n      } else if (child !== obj[i]) {\n        if (hasContentBefore) {\n          res = res.slice(0, i);\n          res.push(child);\n        } else {\n          res = child;\n        }\n      }\n\n      hasContentBefore = true;\n    } else {\n      var nextChild = void 0,\n          j = i; // join all next text nodes\n\n      while (++j < len) {\n        nextChild = alreadyNormalizeChildren[j] = normalizeNode(obj[j]);\n\n        if (typeof nextChild === 'string') {\n          child += nextChild;\n        } else if (nextChild !== null) {\n          break;\n        }\n      }\n\n      if (hasContentBefore) {\n        if (Array.isArray(res)) {\n          if (res === obj) {\n            res = res.slice(0, i);\n          }\n\n          res.push(nodeToElement(child));\n        } else {\n          res = [res, nodeToElement(child)];\n        }\n      } else {\n        res = '' + child;\n      }\n\n      i = j - 1;\n      hasContentBefore = true;\n    }\n\n    ++i;\n  }\n\n  return res;\n}\n\nfunction nodeToElement(obj) {\n  return typeof obj === 'object' ? obj : createElement$1('plaintext', null, null, obj);\n}\n\nvar SHORT_TAGS = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'].reduce(function (res, tag) {\n  res[tag] = true;\n  return res;\n}, Object.create(null)),\n    USE_DOM_STRINGS = isTrident || isEdge;\nfunction TagElement(tag, key, attrs, children, ref, escapeChildren) {\n  if (IS_DEBUG) {\n    restrictObjProp(this, 'type');\n    restrictObjProp(this, 'tag');\n    restrictObjProp(this, 'key');\n    restrictObjProp(this, 'attrs');\n    restrictObjProp(this, 'children');\n    restrictObjProp(this, 'ref');\n    this.__isFrozen = false;\n  }\n\n  this.type = ELEMENT_TYPE_TAG;\n  this.tag = tag;\n  this.key = key == null ? null : key;\n  this.attrs = attrs || obj;\n  this.children = processChildren(children);\n  this.ref = ref == null ? null : ref;\n\n  if (IS_DEBUG) {\n    checkAttrs(this.attrs);\n    Object.freeze(this.attrs);\n\n    if (Array.isArray(this.children)) {\n      Object.freeze(this.children);\n    }\n\n    this.__isFrozen = true;\n  }\n\n  this._domNode = null;\n  this._ns = tag in NS ? NS[tag] : null;\n  this._escapeChildren = escapeChildren !== false;\n  this._ctx = obj;\n}\nTagElement.prototype = {\n  getDomNode: function getDomNode() {\n    return this._domNode;\n  },\n  setCtx: function setCtx(ctx) {\n    if (ctx !== obj) {\n      this._ctx = ctx;\n      var children = this.children;\n\n      if (children !== null && typeof children !== 'string') {\n        var len = children.length;\n        var i = 0;\n\n        while (i < len) {\n          children[i++].setCtx(ctx);\n        }\n      }\n    }\n\n    return this;\n  },\n  renderToDom: function renderToDom(parentNs) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.tag);\n    }\n\n    var tag = this.tag,\n        children = this.children,\n        ns = this._ns || parentNs;\n\n    if (USE_DOM_STRINGS && children && typeof children !== 'string') {\n      var _domNode = createElementByHtml(this.renderToString(), tag, ns);\n\n      this.adoptDom([_domNode], 0);\n      return _domNode;\n    }\n\n    var domNode = this._domNode = createElement(tag, ns),\n        attrs = this.attrs;\n\n    if (children !== null) {\n      if (typeof children === 'string') {\n        this._escapeChildren ? domNode.textContent = children : domNode.innerHTML = children;\n      } else {\n        var i = 0;\n        var len = children.length;\n\n        while (i < len) {\n          domNode.appendChild(children[i++].renderToDom(ns));\n        }\n      }\n    }\n\n    if (attrs !== obj) {\n      var name, value;\n\n      for (name in attrs) {\n        if ((value = attrs[name]) != null) {\n          if (name in ATTRS_TO_EVENTS) {\n            addListener(domNode, ATTRS_TO_EVENTS[name], value);\n          } else {\n            domAttrs(name).set(domNode, name, value);\n          }\n        }\n      }\n    }\n\n    return domNode;\n  },\n  renderToString: function renderToString() {\n    var tag = this.tag;\n\n    if (tag === '!') {\n      return '<!---->';\n    }\n\n    var ns = this._ns,\n        attrs = this.attrs;\n    var children = this.children,\n        res = '<' + tag;\n\n    if (ns !== null) {\n      res += ' xmlns=\"' + ns + '\"';\n    }\n\n    if (attrs !== obj) {\n      var name, value, attrHtml;\n\n      for (name in attrs) {\n        value = attrs[name];\n\n        if (value != null) {\n          if (name === 'value') {\n            switch (tag) {\n              case 'textarea':\n                children = value;\n                continue;\n\n              case 'select':\n                this.setCtx({\n                  value: value,\n                  multiple: attrs.multiple\n                });\n                continue;\n\n              case 'option':\n                var ctx = this._ctx;\n\n                if (ctx.multiple ? isInArray(ctx.value, value) : ctx.value === value) {\n                  res += ' ' + domAttrs('selected').toString('selected', true);\n                }\n\n            }\n          }\n\n          if (!(name in ATTRS_TO_EVENTS) && (attrHtml = domAttrs(name).toString(name, value)) !== '') {\n            res += ' ' + attrHtml;\n          }\n        }\n      }\n    }\n\n    if (tag in SHORT_TAGS) {\n      res += '/>';\n    } else {\n      res += '>';\n\n      if (children !== null) {\n        if (typeof children === 'string') {\n          res += this._escapeChildren ? escapeHtml(children) : children;\n        } else {\n          var i = 0;\n          var len = children.length;\n\n          while (i < len) {\n            res += children[i++].renderToString();\n          }\n        }\n      }\n\n      res += '</' + tag + '>';\n    }\n\n    return res;\n  },\n  adoptDom: function adoptDom(domNodes, domIdx) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.tag);\n    }\n\n    var domNode = this._domNode = domNodes[domIdx],\n        attrs = this.attrs,\n        children = this.children;\n\n    if (attrs !== obj) {\n      var name, value;\n\n      for (name in attrs) {\n        if ((value = attrs[name]) != null && name in ATTRS_TO_EVENTS) {\n          addListener(domNode, ATTRS_TO_EVENTS[name], value);\n        }\n      }\n    }\n\n    if (children !== null && typeof children !== 'string') {\n      var i = 0;\n      var len = children.length;\n\n      if (len > 0) {\n        var domChildren = domNode.childNodes;\n        var domChildIdx = 0;\n\n        while (i < len) {\n          domChildIdx = children[i++].adoptDom(domChildren, domChildIdx);\n        }\n      }\n    }\n\n    return domIdx + 1;\n  },\n  mount: function mount() {\n    var children = this.children;\n\n    if (children !== null && typeof children !== 'string') {\n      var i = 0;\n      var len = children.length;\n\n      while (i < len) {\n        children[i++].mount();\n      }\n    }\n\n    if (this.ref !== null) {\n      this.ref(this._domNode);\n    }\n  },\n  unmount: function unmount() {\n    var children = this.children;\n\n    if (children && typeof children !== 'string') {\n      var i = 0;\n      var len = children.length;\n\n      while (i < len) {\n        children[i++].unmount();\n      }\n    }\n\n    removeListeners(this._domNode);\n    this._domNode = null;\n\n    if (this.ref !== null) {\n      this.ref(null);\n    }\n  },\n  clone: function clone(attrs, children, ref) {\n    var res = new TagElement(this.tag, this.key);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = false;\n    }\n\n    res.attrs = attrs == null ? this.attrs : merge(this.attrs, attrs);\n    res.children = children == null ? this.children : processChildren(children);\n    res.ref = ref == null ? this.ref : ref;\n\n    if (IS_DEBUG) {\n      res.__isFrozen = true;\n    }\n\n    res._escapeChildren = this._escapeChildren;\n    res._ctx = this._ctx;\n    return res;\n  },\n  patch: function patch(element) {\n    if (this === element) {\n      this._patchChildren(element);\n    } else if (this.key === element.key && this.type === element.type && this.tag === element.tag && this._ns === element._ns) {\n      element._domNode = this._domNode;\n\n      this._patchAttrs(element);\n\n      this._patchChildren(element);\n\n      this._patchRef(element);\n    } else {\n      patchOps.replace(this, element);\n    }\n  },\n  _patchChildren: function _patchChildren(element) {\n    var childrenA = this.children,\n        childrenB = element.children;\n\n    if (childrenA === null && childrenB === null) {\n      return;\n    }\n\n    var isChildrenAText = typeof childrenA === 'string',\n        isChildrenBText = typeof childrenB === 'string';\n\n    if (isChildrenBText) {\n      if (isChildrenAText) {\n        if (childrenA !== childrenB) {\n          patchOps.updateText(this, childrenB, element._escapeChildren);\n        }\n\n        return;\n      }\n\n      if (childrenA !== null && childrenA.length > 0) {\n        patchOps.removeChildren(this);\n      }\n\n      if (childrenB !== '') {\n        patchOps.updateText(this, childrenB, element._escapeChildren);\n      }\n\n      return;\n    }\n\n    if (childrenB === null || childrenB.length === 0) {\n      if (childrenA) {\n        if (isChildrenAText) {\n          patchOps.removeText(this);\n        } else if (childrenA.length > 0) {\n          patchOps.removeChildren(this);\n        }\n      }\n\n      return;\n    }\n\n    if (isChildrenAText && childrenA !== '') {\n      patchOps.removeText(this);\n    }\n\n    if (isChildrenAText || childrenA === null || childrenA.length === 0) {\n      var childrenBLen = childrenB.length;\n      var iB = 0;\n\n      while (iB < childrenBLen) {\n        patchOps.appendChild(element, childrenB[iB++]);\n      }\n\n      return;\n    }\n\n    patchChildren(this, element);\n  },\n  _patchAttrs: function _patchAttrs(element) {\n    var attrsA = this.attrs,\n        attrsB = element.attrs;\n\n    if (attrsA === attrsB) {\n      return;\n    }\n\n    var attrName;\n\n    if (attrsB !== obj) {\n      var attrAVal, attrBVal, isAttrAValArray, isAttrBValArray;\n\n      for (attrName in attrsB) {\n        attrBVal = attrsB[attrName];\n\n        if (attrsA === obj || (attrAVal = attrsA[attrName]) == null) {\n          if (attrBVal != null) {\n            patchOps.updateAttr(this, attrName, attrBVal);\n          }\n        } else if (attrBVal == null) {\n          patchOps.removeAttr(this, attrName);\n        } else if (typeof attrBVal === 'object' && typeof attrAVal === 'object') {\n          isAttrBValArray = Array.isArray(attrBVal);\n          isAttrAValArray = Array.isArray(attrAVal);\n\n          if (isAttrBValArray || isAttrAValArray) {\n            if (isAttrBValArray && isAttrAValArray) {\n              this._patchAttrArr(attrName, attrAVal, attrBVal);\n            } else {\n              patchOps.updateAttr(this, attrName, attrBVal);\n            }\n          } else {\n            this._patchAttrObj(attrName, attrAVal, attrBVal);\n          }\n        } else if (attrAVal !== attrBVal) {\n          patchOps.updateAttr(this, attrName, attrBVal);\n        }\n      }\n    }\n\n    if (attrsA !== obj) {\n      for (attrName in attrsA) {\n        if ((attrsB === obj || !(attrName in attrsB)) && attrsA[attrName] != null) {\n          patchOps.removeAttr(this, attrName);\n        }\n      }\n    }\n  },\n  _patchAttrArr: function _patchAttrArr(attrName, arrA, arrB) {\n    if (arrA === arrB) {\n      return;\n    }\n\n    var lenA = arrA.length;\n    var hasDiff = false;\n\n    if (lenA === arrB.length) {\n      var i = 0;\n\n      while (!hasDiff && i < lenA) {\n        if (arrA[i] != arrB[i]) {\n          hasDiff = true;\n        }\n\n        ++i;\n      }\n    } else {\n      hasDiff = true;\n    }\n\n    if (hasDiff) {\n      patchOps.updateAttr(this, attrName, arrB);\n    }\n  },\n  _patchAttrObj: function _patchAttrObj(attrName, objA, objB) {\n    if (objA === objB) {\n      return;\n    }\n\n    var diffObj = Object.create(null);\n    var hasDiff = false;\n\n    for (var i in objB) {\n      if (objA[i] != objB[i]) {\n        hasDiff = true;\n        diffObj[i] = objB[i];\n      }\n    }\n\n    for (var _i in objA) {\n      if (objA[_i] != null && !(_i in objB)) {\n        hasDiff = true;\n        diffObj[_i] = null;\n      }\n    }\n\n    if (hasDiff) {\n      patchOps.updateAttr(this, attrName, diffObj);\n    }\n  },\n  _patchRef: function _patchRef(element) {\n    if (this.ref !== null) {\n      if (this.ref !== element.ref) {\n        this.ref(null);\n\n        if (element.ref !== null) {\n          element.ref(element._domNode);\n        }\n      }\n    } else if (element.ref !== null) {\n      element.ref(element._domNode);\n    }\n  }\n};\n\nfunction processChildren(children) {\n  var normalizedChildren = normalizeNode(children),\n      res = normalizedChildren !== null && typeof normalizedChildren === 'object' && !Array.isArray(normalizedChildren) ? [normalizedChildren] : normalizedChildren;\n\n  if (IS_DEBUG) {\n    if (Array.isArray(res)) {\n      checkChildren(res);\n    }\n  }\n\n  return res;\n}\n\nfunction checkAttrs(attrs) {\n  for (var name in attrs) {\n    if (name.substr(0, 2) === 'on' && !(name in ATTRS_TO_EVENTS)) {\n      throw Error(\"vidom: Unsupported type of dom event listener \\\"\" + name + \"\\\".\");\n    }\n  }\n}\n\nfunction noOp() {}\n\nvar raf = typeof window !== 'undefined' && (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame) || function (callback) {\n  setTimeout(callback, 1000 / 60);\n};\n\nvar batch = [];\n\nfunction compareBatchItems(itemA, itemB) {\n  return itemA.priority - itemB.priority;\n}\n\nfunction applyBatch() {\n  var i = 0;\n\n  while (i < batch.length) {\n    batch.sort(compareBatchItems);\n    var batchLen = batch.length;\n\n    while (i < batchLen) {\n      var _batch = batch[i++],\n          fn = _batch.fn,\n          ctx = _batch.ctx;\n      fn.call(ctx);\n    }\n\n    if (batch.length > batchLen) {\n      batch = batch.slice(batchLen);\n      i = 0;\n    }\n  }\n\n  batch = [];\n}\n\nfunction rafBatch(item) {\n  if (batch.push(item) === 1) {\n    raf(applyBatch);\n  }\n}\n\nvar globalConsole = typeof console == 'undefined' ? null : console,\n    consoleWrapper = {},\n    PREFIXES = {\n  log: '',\n  info: '',\n  warn: 'Warning!',\n  error: 'Error!'\n};\n['log', 'info', 'warn', 'error'].forEach(function (name) {\n  consoleWrapper[name] = globalConsole ? globalConsole[name] ? function (arg1, arg2, arg3, arg4, arg5) {\n    // IE9: console methods aren't functions\n    var arg0 = PREFIXES[name];\n\n    switch (arguments.length) {\n      case 1:\n        globalConsole[name](arg0, arg1);\n        break;\n\n      case 2:\n        globalConsole[name](arg0, arg1, arg2);\n        break;\n\n      case 3:\n        globalConsole[name](arg0, arg1, arg2, arg3);\n        break;\n\n      case 4:\n        globalConsole[name](arg0, arg1, arg2, arg3, arg4);\n        break;\n\n      case 5:\n        globalConsole[name](arg0, arg1, arg2, arg3, arg4, arg5);\n        break;\n    }\n  } : function () {\n    globalConsole.log.apply(globalConsole, arguments);\n  } : noOp;\n});\n\nfunction nodeToElement$1(node) {\n  var normalizedNode = normalizeNode(node);\n  return normalizedNode === null ? createElement$1('!') : typeof normalizedNode === 'object' ? Array.isArray(normalizedNode) ? createElement$1('fragment', null, null, normalizedNode) : normalizedNode : createElement$1('plaintext', null, null, normalizedNode);\n}\n\nfunction Emitter() {\n  this._listeners = Object.create(null);\n}\n\nEmitter.prototype = {\n  on: function on(event, fn, fnCtx) {\n    if (fnCtx === void 0) {\n      fnCtx = null;\n    }\n\n    (this._listeners[event] || (this._listeners[event] = [])).push({\n      fn: fn,\n      fnCtx: fnCtx\n    });\n    return this;\n  },\n  off: function off(event, fn, fnCtx) {\n    if (fnCtx === void 0) {\n      fnCtx = null;\n    }\n\n    var eventListeners = this._listeners[event];\n\n    if (eventListeners) {\n      var i = 0,\n          eventListener;\n\n      while (i < eventListeners.length) {\n        eventListener = eventListeners[i];\n\n        if (eventListener.fn === fn && eventListener.fnCtx === fnCtx) {\n          eventListeners.splice(i, 1);\n          break;\n        }\n\n        i++;\n      }\n    }\n\n    return this;\n  },\n  emit: function emit(event) {\n    var eventListeners = this._listeners[event];\n\n    if (eventListeners) {\n      var i = 0;\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      while (i < eventListeners.length) {\n        var _eventListeners = eventListeners[i++],\n            fn = _eventListeners.fn,\n            fnCtx = _eventListeners.fnCtx;\n        fn.call.apply(fn, [fnCtx].concat(args));\n      }\n    }\n\n    return this;\n  }\n};\n\nvar mountedElements = Object.create(null);\nvar counter$1 = 0;\n\nfunction mountToDomNode(domNode, node, ctx, cb, syncMode) {\n  var domNodeId = getDomNodeId(domNode);\n  var mounted = mountedElements[domNodeId],\n      mountId;\n\n  if (mounted && mounted.tree !== null) {\n    mountId = ++mounted.id;\n\n    var patchFn = function patchFn() {\n      mounted = mountedElements[domNodeId];\n\n      if (mounted && mounted.id === mountId) {\n        var prevTree = mounted.tree,\n            newTree = nodeToElement$1(node);\n\n        if (ctx) {\n          newTree.setCtx(ctx);\n        }\n\n        prevTree.patch(newTree);\n        mounted.tree = newTree;\n        callCb(cb);\n\n        if (IS_DEBUG) {\n          hook.emit('replace', prevTree, newTree);\n        }\n      }\n    };\n\n    if (syncMode) {\n      patchFn();\n    } else {\n      rafBatch({\n        priority: 0,\n        fn: patchFn\n      });\n    }\n  } else {\n    mounted = mountedElements[domNodeId] = {\n      tree: null,\n      id: mountId = ++counter$1\n    };\n\n    if (domNode.childNodes.length > 0) {\n      var topDomChildNodes = collectTopDomChildNodes(domNode);\n\n      if (topDomChildNodes === null) {\n        domNode.textContent = '';\n      } else {\n        var tree = mounted.tree = nodeToElement$1(node);\n\n        if (ctx) {\n          tree.setCtx(ctx);\n        }\n\n        tree.adoptDom(topDomChildNodes, 0);\n        tree.mount();\n        callCb(cb);\n\n        if (IS_DEBUG) {\n          hook.emit('mount', tree);\n        }\n\n        return;\n      }\n    }\n\n    var renderFn = function renderFn() {\n      var mounted = mountedElements[domNodeId];\n\n      if (mounted && mounted.id === mountId) {\n        var _tree = mounted.tree = nodeToElement$1(node);\n\n        if (ctx) {\n          _tree.setCtx(ctx);\n        }\n\n        domOps.append(domNode, _tree.renderToDom(getNs(domNode)));\n\n        _tree.mount();\n\n        callCb(cb);\n\n        if (IS_DEBUG) {\n          hook.emit('mount', _tree);\n        }\n      }\n    };\n\n    if (syncMode) {\n      renderFn();\n    } else {\n      rafBatch({\n        priority: 0,\n        fn: renderFn\n      });\n    }\n  }\n}\n\nfunction unmountFromDomNode(domNode, cb, syncMode) {\n  var domNodeId = getDomNodeId(domNode);\n  var mounted = mountedElements[domNodeId];\n\n  if (mounted) {\n    var mountId = ++mounted.id,\n        unmountFn = function unmountFn() {\n      mounted = mountedElements[domNodeId];\n\n      if (mounted && mounted.id === mountId) {\n        delete mountedElements[domNodeId];\n        var tree = mounted.tree;\n\n        if (tree !== null) {\n          var treeDomNode = tree.getDomNode();\n          tree.unmount();\n          domOps.remove(treeDomNode);\n        }\n\n        callCb(cb);\n\n        if (IS_DEBUG) {\n          tree && hook.emit('unmount', tree);\n        }\n      }\n    };\n\n    if (mounted.tree) {\n      if (syncMode) {\n        unmountFn();\n      } else {\n        rafBatch({\n          priority: 0,\n          fn: unmountFn\n        });\n      }\n    } else if (!syncMode) {\n      callCb(cb);\n    }\n  } else if (!syncMode) {\n    callCb(cb);\n  }\n}\n\nfunction callCb(cb) {\n  if (cb) {\n    cb();\n  }\n}\n\nfunction collectTopDomChildNodes(node) {\n  var childNodes = node.childNodes,\n      len = childNodes.length;\n  var i = 0,\n      res = null,\n      childNode;\n\n  while (i < len) {\n    childNode = childNodes[i++];\n\n    if (res) {\n      res.push(childNode);\n    } else if (childNode.nodeType === Node.COMMENT_NODE && childNode.textContent === 'vidom') {\n      res = [];\n    }\n  }\n\n  return res;\n}\n\nfunction mount(domNode, tree, ctx, cb) {\n  if (typeof ctx === 'function') {\n    cb = ctx;\n    ctx = this;\n  }\n\n  mountToDomNode(domNode, tree, ctx, cb, false);\n}\nfunction mountSync(domNode, tree, ctx) {\n  mountToDomNode(domNode, tree, ctx, null, true);\n}\nfunction unmount(domNode, cb) {\n  unmountFromDomNode(domNode, cb, false);\n}\nfunction unmountSync(domNode) {\n  unmountFromDomNode(domNode, null, true);\n}\nfunction getMountedRootNodes() {\n  var res = [];\n\n  for (var domNodeId in mountedElements) {\n    var tree = mountedElements[domNodeId].tree;\n\n    if (tree) {\n      res.push(tree);\n    }\n  }\n\n  return res;\n}\n\nvar hook = new Emitter();\nhook.getRootNodes = getMountedRootNodes;\n\nif (IS_DEBUG) {\n  if (typeof window !== 'undefined') {\n    window['__vidom__hook__'] = hook;\n  }\n}\n\nvar componentId = 1;\n\nfunction initComponent() {\n  this.onInit();\n}\n\nfunction mountComponent() {\n  this.__isMounted = true;\n  this.__prevState = this.state;\n  this.getRootElement().mount();\n  this.onMount();\n}\n\nfunction unmountComponent() {\n  this.__isMounted = false;\n  this.getRootElement().unmount();\n  this.onUnmount();\n}\n\nfunction patchComponent(nextAttrs, nextChildren, nextContext, byParent) {\n  if (byParent) {\n    this.__prevAttrs = this.attrs;\n    this.__prevChildren = this.children;\n    this.__prevContext = this.context;\n\n    if (IS_DEBUG) {\n      this.__isFrozen = false;\n    }\n\n    this.attrs = this.__buildAttrs(nextAttrs);\n    this.children = nextChildren;\n    this.context = nextContext;\n\n    if (IS_DEBUG) {\n      this.__isFrozen = true;\n    }\n  }\n\n  this.__isUpdating = true;\n  this.onChange(this.__prevAttrs, this.__prevChildren, this.__prevState, this.__prevContext);\n  this.__isUpdating = false;\n  var shouldRerender = true;\n\n  if (!this.__forcedUpdate__) {\n    shouldRerender = this.shouldRerender(this.__prevAttrs, this.__prevChildren, this.__prevState, this.__prevContext);\n\n    if (IS_DEBUG) {\n      var shouldRerenderResType = typeof shouldRerender;\n\n      if (shouldRerenderResType !== 'boolean') {\n        var name = getComponentName(this);\n        consoleWrapper.warn(name + \"#shouldRerender() should return boolean instead of \" + shouldRerenderResType);\n      }\n    }\n  }\n\n  this.__forcedUpdate__ = false;\n\n  if (shouldRerender) {\n    var prevRootElem = this.getRootElement();\n    this.__rootElement = this.render();\n    prevRootElem.patch(this.__rootElement);\n  }\n\n  this.onUpdate(this.__prevAttrs, this.__prevChildren, this.__prevState, this.__prevContext);\n  this.__prevAttrs = this.attrs;\n  this.__prevChildren = this.children;\n  this.__prevState = this.state;\n  this.__prevContext = this.context;\n}\n\nfunction shouldComponentRerender() {\n  return true;\n}\n\nfunction onComponentRender() {\n  return null;\n}\n\nfunction renderComponentToDom(parentNs) {\n  return this.getRootElement().renderToDom(parentNs);\n}\n\nfunction renderComponentToString() {\n  return this.getRootElement().renderToString();\n}\n\nfunction adoptComponentDom(domNode, domIdx) {\n  return this.getRootElement().adoptDom(domNode, domIdx);\n}\n\nfunction getComponentDomNode() {\n  return this.getRootElement().getDomNode();\n}\n\nfunction requestChildContext() {\n  return obj;\n}\n\nfunction setComponentState(state) {\n  if (IS_DEBUG) {\n    if (this.__disallowSetState) {\n      var name = getComponentName(this);\n      consoleWrapper.warn(name + \"#setState() should not be called during rendering\");\n    }\n\n    this.__isFrozen = false;\n  }\n\n  this.state = this.state === obj ? state : merge(this.state, state, true);\n\n  if (IS_DEBUG) {\n    Object.freeze(this.state);\n    this.__isFrozen = true;\n  }\n\n  this.update();\n}\n\nfunction renderComponent() {\n  if (IS_DEBUG) {\n    this.__disallowSetState = true;\n  }\n\n  var rootElem = nodeToElement$1(this.onRender());\n\n  if (IS_DEBUG) {\n    this.__disallowSetState = false;\n  }\n\n  var childCtx = this.onChildContextRequest(),\n      rootElemCtx = childCtx === obj ? this.context : this.context === obj ? childCtx : merge(this.context, childCtx);\n\n  if (IS_DEBUG) {\n    Object.freeze(rootElemCtx);\n  }\n\n  rootElem.setCtx(rootElemCtx);\n  return rootElem;\n}\n\nfunction updateComponent() {\n  if (!this.isMounted()) {\n    return;\n  }\n\n  this.__forcedUpdate__ = true;\n\n  if (this.__isUpdating) {\n    return;\n  }\n\n  this.__isUpdating = true;\n  rafBatch({\n    priority: this.__id,\n    fn: applyUpdate,\n    ctx: this\n  });\n}\n\nfunction applyUpdate() {\n  if (this.__isUpdating && this.isMounted()) {\n    if (IS_DEBUG) {\n      var prevRootElem = this.__rootElement;\n      this.patch(this.attrs, this.children, this.context, false);\n      hook.emit('replace', prevRootElem, this.__rootElement);\n    } else {\n      this.patch(this.attrs, this.children, this.context, false);\n    }\n  }\n}\n\nfunction getComponentRootElem() {\n  return this.__rootElement === null ? this.__rootElement = this.render() : this.__rootElement;\n}\n\nfunction isComponentMounted() {\n  return this.__isMounted;\n}\n\nfunction onComponentRefRequest() {\n  return this;\n}\n\nfunction buildComponentAttrs(attrs) {\n  if (attrs === this.attrs) {\n    return attrs;\n  }\n\n  var defaultAttrs = this.constructor.defaultAttrs,\n      hasDefaultAttrs = defaultAttrs != null,\n      res = attrs === obj ? hasDefaultAttrs ? defaultAttrs : attrs : hasDefaultAttrs ? merge(defaultAttrs, attrs) : attrs;\n\n  if (IS_DEBUG) {\n    Object.freeze(res);\n  }\n\n  return res;\n}\n\nfunction getComponentName(component) {\n  return component.constructor.name || 'Component';\n}\n\nfunction createComponent(props, staticProps) {\n  var res = function res(attrs, children, ctx) {\n    if (IS_DEBUG) {\n      restrictObjProp(this, 'attrs');\n      restrictObjProp(this, 'children');\n      restrictObjProp(this, 'state');\n      restrictObjProp(this, 'context');\n      this.__isFrozen = false;\n      this.__disallowSetState = false;\n    }\n\n    this.attrs = this.__buildAttrs(attrs);\n    this.children = children;\n    this.state = obj;\n    this.context = ctx;\n\n    if (IS_DEBUG) {\n      this.__isFrozen = true;\n    }\n\n    this.__id = componentId++;\n    this.__isMounted = false;\n    this.__isUpdating = false;\n    this.__forcedUpdate__ = false;\n    this.__rootElement = null;\n    this.__prevAttrs = this.attrs;\n    this.__prevChildren = this.children;\n    this.__prevState = obj;\n    this.__prevContext = this.context;\n  },\n      ptp = {\n    constructor: res,\n    init: initComponent,\n    onInit: noOp,\n    mount: mountComponent,\n    unmount: unmountComponent,\n    onMount: noOp,\n    onUnmount: noOp,\n    onChange: noOp,\n    shouldRerender: shouldComponentRerender,\n    onRender: onComponentRender,\n    onUpdate: noOp,\n    isMounted: isComponentMounted,\n    setState: setComponentState,\n    renderToDom: renderComponentToDom,\n    renderToString: renderComponentToString,\n    adoptDom: adoptComponentDom,\n    getDomNode: getComponentDomNode,\n    getRootElement: getComponentRootElem,\n    render: renderComponent,\n    update: updateComponent,\n    patch: patchComponent,\n    onChildContextRequest: requestChildContext,\n    onRefRequest: onComponentRefRequest,\n    __buildAttrs: buildComponentAttrs\n  };\n\n  for (var i in props) {\n    ptp[i] = props[i];\n  }\n\n  res.prototype = ptp;\n\n  for (var _i in staticProps) {\n    res[_i] = staticProps[_i];\n  }\n\n  res['__vidom__component__'] = true;\n  return res;\n}\n\nvar Input = createComponent({\n  onInit: function onInit() {\n    var _this = this;\n\n    this._addAttrs = {\n      onChange: null,\n      onInput: function onInput(e) {\n        _this.onInput(e);\n      }\n    };\n  },\n  onRender: function onRender() {\n    return new TagElement('input', null, merge(this.attrs, this._addAttrs));\n  },\n  onInput: function onInput(e) {\n    var _this$attrs = this.attrs,\n        onChange = _this$attrs.onChange,\n        _this$attrs$value = _this$attrs.value,\n        value = _this$attrs$value === void 0 ? '' : _this$attrs$value,\n        control = this.getDomNode();\n\n    if (value !== control.value) {\n      if (onChange) {\n        onChange(e);\n      }\n\n      applyBatch();\n\n      if (this.isMounted()) {\n        var _value = this.attrs.value; // attrs could be changed during applyBatch()\n\n        if (typeof _value !== 'undefined' && control.value !== _value) {\n          control.value = _value;\n        }\n      }\n    }\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nvar namedRadioInputs = Object.create(null);\nvar Radio = createComponent({\n  onInit: function onInit() {\n    var _this = this;\n\n    this._addAttrs = {\n      onChange: function onChange(e) {\n        _this.onInputChange(e);\n      }\n    };\n  },\n  onRender: function onRender() {\n    return new TagElement('input', null, merge(this.attrs, this._addAttrs));\n  },\n  onMount: function onMount() {\n    var name = this.attrs.name;\n\n    if (name) {\n      addToNamedRadioInputs(name, this);\n    }\n  },\n  onUpdate: function onUpdate(_ref) {\n    var prevName = _ref.name;\n    var name = this.attrs.name;\n\n    if (name !== prevName) {\n      if (prevName) {\n        removeFromNamedRadioInputs(prevName, this);\n      }\n\n      if (name) {\n        addToNamedRadioInputs(name, this);\n      }\n    }\n  },\n  onUnmount: function onUnmount() {\n    var name = this.attrs.name;\n\n    if (name) {\n      removeFromNamedRadioInputs(name, this);\n    }\n  },\n  onInputChange: function onInputChange(e) {\n    var onChange = this.attrs.onChange;\n\n    if (onChange) {\n      onChange(e);\n    }\n\n    applyBatch();\n\n    if (this.isMounted()) {\n      var control = this.getDomNode(),\n          _this$attrs = this.attrs,\n          name = _this$attrs.name,\n          checked = _this$attrs.checked; // attrs could be changed during applyBatch()\n\n      if (typeof checked !== 'undefined' && control.checked !== checked) {\n        if (name) {\n          var radioInputs = namedRadioInputs[name],\n              len = radioInputs.length;\n\n          var i = 0,\n              radioInput,\n              _checked;\n\n          while (i < len) {\n            radioInput = radioInputs[i++];\n            _checked = radioInput.attrs.checked;\n\n            if (typeof _checked !== 'undefined') {\n              var radioControl = radioInput.getDomNode();\n\n              if (_checked !== radioControl.checked) {\n                radioControl.checked = _checked;\n              }\n            }\n          }\n        } else {\n          control.checked = checked;\n        }\n      }\n    }\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nfunction addToNamedRadioInputs(name, input) {\n  if (name in namedRadioInputs) {\n    namedRadioInputs[name].push(input);\n  } else {\n    namedRadioInputs[name] = [input];\n  }\n}\n\nfunction removeFromNamedRadioInputs(name, input) {\n  var radioInputs = namedRadioInputs[name],\n      len = radioInputs.length;\n  var i = 0;\n\n  while (i < len) {\n    if (radioInputs[i] === input) {\n      if (len === 1) {\n        delete namedRadioInputs[name];\n      } else {\n        radioInputs.splice(i, 1);\n      }\n\n      return;\n    }\n\n    i++;\n  }\n}\n\nvar CheckBox = createComponent({\n  onInit: function onInit() {\n    var _this = this;\n\n    this._addAttrs = {\n      onChange: function onChange(e) {\n        _this.onInputChange(e);\n      }\n    };\n  },\n  onRender: function onRender() {\n    return new TagElement('input', null, merge(this.attrs, this._addAttrs));\n  },\n  onInputChange: function onInputChange(e) {\n    var onChange = this.attrs.onChange;\n\n    if (onChange) {\n      onChange(e);\n    }\n\n    applyBatch();\n\n    if (this.isMounted()) {\n      var control = this.getDomNode(),\n          checked = this.attrs.checked; // attrs could be changed during applyBatch()\n\n      if (typeof checked !== 'undefined' && control.checked !== checked) {\n        control.checked = checked;\n      }\n    }\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nvar File = createComponent({\n  onRender: function onRender() {\n    return new TagElement('input', null, this.attrs);\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nfunction ComponentElement(component, key, attrs, children, ref) {\n  if (IS_DEBUG) {\n    restrictObjProp(this, 'type');\n    restrictObjProp(this, 'key');\n    restrictObjProp(this, 'attrs');\n    restrictObjProp(this, 'children');\n    restrictObjProp(this, 'ref');\n    this.__isFrozen = false;\n  }\n\n  this.type = ELEMENT_TYPE_COMPONENT;\n  this.key = key == null ? null : key;\n  this.attrs = attrs || obj;\n  this.children = children;\n  this.ref = ref == null ? null : ref;\n\n  if (component === Input) {\n    switch (this.attrs.type) {\n      case 'radio':\n        this.component = Radio;\n        break;\n\n      case 'checkbox':\n        this.component = CheckBox;\n        break;\n\n      case 'file':\n        this.component = File;\n        break;\n\n      default:\n        this.component = component;\n    }\n  } else {\n    this.component = component;\n  }\n\n  if (IS_DEBUG) {\n    Object.freeze(this.attrs);\n    this.__isFrozen = true;\n  }\n\n  this._instance = null;\n  this._ctx = obj;\n}\nComponentElement.prototype = {\n  getDomNode: function getDomNode() {\n    return this._instance === null ? null : this._instance.getDomNode();\n  },\n  setCtx: function setCtx(ctx) {\n    this._ctx = ctx;\n    return this;\n  },\n  renderToDom: function renderToDom(parentNs) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.component.name || 'Anonymous');\n    }\n\n    return this._getInstance().renderToDom(parentNs);\n  },\n  renderToString: function renderToString() {\n    return this._getInstance().renderToString();\n  },\n  adoptDom: function adoptDom(domNode, domIdx) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.component.name || 'Anonymous');\n    }\n\n    return this._getInstance().adoptDom(domNode, domIdx);\n  },\n  mount: function mount() {\n    this._instance.mount();\n\n    if (this.ref !== null) {\n      this.ref(this._instance.onRefRequest());\n    }\n  },\n  unmount: function unmount() {\n    if (this._instance !== null) {\n      this._instance.unmount();\n\n      this._instance = null;\n    }\n\n    if (this.ref !== null) {\n      this.ref(null);\n    }\n  },\n  clone: function clone(attrs, children, ref) {\n    var res = new ComponentElement(this.component, this.key);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = false;\n    }\n\n    res.attrs = attrs == null ? this.attrs : merge(this.attrs, attrs);\n    res.children = children == null ? this.children : children;\n    res.ref = ref == null ? this.ref : ref;\n\n    if (IS_DEBUG) {\n      res.__isFrozen = true;\n    }\n\n    res._ctx = this._ctx;\n    return res;\n  },\n  patch: function patch(element) {\n    var instance = this._getInstance();\n\n    if (this === element) {\n      instance.patch(element.attrs, element.children, element._ctx, true);\n    } else if (this.key === element.key && this.type === element.type && this.component === element.component) {\n      instance.patch(element.attrs, element.children, element._ctx, true);\n      element._instance = instance;\n\n      this._patchRef(element);\n    } else {\n      patchOps.replace(this, element);\n      this._instance = null;\n    }\n  },\n  _patchRef: function _patchRef(element) {\n    if (this.ref !== null) {\n      if (this.ref !== element.ref) {\n        this.ref(null);\n\n        if (element.ref !== null) {\n          element.ref(element._instance.onRefRequest());\n        }\n      }\n    } else if (element.ref !== null) {\n      element.ref(element._instance.onRefRequest());\n    }\n  },\n  _getInstance: function _getInstance() {\n    if (this._instance === null) {\n      this._instance = new this.component(this.attrs, this.children, this._ctx);\n\n      this._instance.init();\n    }\n\n    return this._instance;\n  }\n};\n\nfunction FunctionComponentElement(component, key, attrs, children) {\n  if (IS_DEBUG) {\n    restrictObjProp(this, 'type');\n    restrictObjProp(this, 'key');\n    restrictObjProp(this, 'attrs');\n    restrictObjProp(this, 'children');\n    this.__isFrozen = false;\n  }\n\n  this.type = ELEMENT_TYPE_FUNCTION_COMPONENT;\n  this.component = component;\n  this.key = key == null ? null : key;\n  this.attrs = attrs || obj;\n  this.children = children;\n\n  if (IS_DEBUG) {\n    Object.freeze(this.attrs);\n    this.__isFrozen = true;\n  }\n\n  this._rootElement = null;\n  this._ctx = obj;\n}\nFunctionComponentElement.prototype = {\n  getDomNode: function getDomNode() {\n    return this._rootElement === null ? null : this._rootElement.getDomNode();\n  },\n  setCtx: function setCtx(ctx) {\n    this._ctx = ctx;\n    return this;\n  },\n  renderToDom: function renderToDom(parentNs) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.component.name || 'Anonymous');\n    }\n\n    return this._getRootElement().renderToDom(parentNs);\n  },\n  renderToString: function renderToString() {\n    return this._getRootElement().renderToString();\n  },\n  adoptDom: function adoptDom(domNode, domIdx) {\n    if (IS_DEBUG) {\n      checkReuse(this, this.component.name || 'Anonymous');\n    }\n\n    return this._getRootElement().adoptDom(domNode, domIdx);\n  },\n  mount: function mount() {\n    this._getRootElement().mount();\n  },\n  unmount: function unmount() {\n    if (this._rootElement !== null) {\n      this._rootElement.unmount();\n\n      this._rootElement = null;\n    }\n  },\n  clone: function clone(attrs, children) {\n    var res = new FunctionComponentElement(this.component, this.key);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = false;\n    }\n\n    res.attrs = attrs == null ? this.attrs : merge(this.attrs, attrs);\n    res.children = children == null ? this.children : children;\n\n    if (IS_DEBUG) {\n      res.__isFrozen = true;\n    }\n\n    res._ctx = this._ctx;\n    return res;\n  },\n  patch: function patch(element) {\n    if (this === element) {\n      var prevRootElement = this._getRootElement();\n\n      this._rootElement = null;\n      prevRootElement.patch(this._getRootElement());\n    } else if (this.key === element.key && this.type === element.type && this.component === element.component) {\n      this._getRootElement().patch(element._getRootElement());\n\n      this._rootElement = null;\n    } else {\n      patchOps.replace(this, element);\n      this._rootElement = null;\n    }\n  },\n  _getRootElement: function _getRootElement() {\n    if (this._rootElement !== null) {\n      return this._rootElement;\n    }\n\n    var attrs = this.attrs,\n        component = this.component,\n        defaultAttrs = component.defaultAttrs,\n        hasDefaultAttrs = defaultAttrs != null,\n        resAttrs = attrs === obj ? hasDefaultAttrs ? defaultAttrs : attrs : hasDefaultAttrs ? merge(defaultAttrs, attrs) : attrs;\n\n    if (IS_DEBUG) {\n      Object.freeze(resAttrs);\n    }\n\n    this._rootElement = nodeToElement$1(component(resAttrs, this.children, this._ctx));\n\n    this._rootElement.setCtx(this._ctx);\n\n    return this._rootElement;\n  }\n};\n\nfunction FragmentElement(key, children) {\n  if (IS_DEBUG) {\n    restrictObjProp(this, 'type');\n    restrictObjProp(this, 'key');\n    restrictObjProp(this, 'children');\n    this.__isFrozen = false;\n  }\n\n  this.type = ELEMENT_TYPE_FRAGMENT;\n  this.key = key == null ? null : key;\n  this.children = processChildren$1(children);\n\n  if (IS_DEBUG) {\n    if (Array.isArray(this.children)) {\n      Object.freeze(this.children);\n    }\n\n    this.__isFrozen = true;\n  }\n\n  this._domNode = null;\n  this._ctx = obj;\n}\nFragmentElement.prototype = {\n  getDomNode: function getDomNode() {\n    return this._domNode;\n  },\n  setCtx: function setCtx(ctx) {\n    if (ctx !== obj) {\n      this._ctx = ctx;\n      var children = this.children;\n\n      if (children !== null) {\n        var len = children.length;\n        var i = 0;\n\n        while (i < len) {\n          children[i++].setCtx(ctx);\n        }\n      }\n    }\n\n    return this;\n  },\n  renderToDom: function renderToDom(parentNs) {\n    if (IS_DEBUG) {\n      checkReuse(this, 'fragment');\n    }\n\n    var children = this.children,\n        domNode = [createElement('!', null), createElement('!', null)],\n        domFragment = document.createDocumentFragment();\n    domFragment.appendChild(domNode[0]);\n\n    if (children !== null) {\n      var len = children.length;\n      var i = 0;\n\n      while (i < len) {\n        domFragment.appendChild(children[i++].renderToDom(parentNs));\n      }\n    }\n\n    domFragment.appendChild(domNode[1]);\n    this._domNode = domNode;\n    return domFragment;\n  },\n  renderToString: function renderToString() {\n    var children = this.children;\n    var res = '<!---->';\n\n    if (children !== null) {\n      var i = children.length - 1;\n\n      while (i >= 0) {\n        res = children[i--].renderToString() + res;\n      }\n    }\n\n    return '<!---->' + res;\n  },\n  adoptDom: function adoptDom(domNodes, domIdx) {\n    if (IS_DEBUG) {\n      checkReuse(this, 'fragment');\n    }\n\n    var domNode = [domNodes[domIdx++]],\n        children = this.children;\n\n    if (children !== null) {\n      var len = children.length;\n      var i = 0;\n\n      while (i < len) {\n        domIdx = children[i++].adoptDom(domNodes, domIdx);\n      }\n    }\n\n    domNode.push(domNodes[domIdx]);\n    this._domNode = domNode;\n    return domIdx + 1;\n  },\n  mount: function mount() {\n    var children = this.children;\n\n    if (children !== null) {\n      var i = 0;\n      var len = children.length;\n\n      while (i < len) {\n        children[i++].mount();\n      }\n    }\n  },\n  unmount: function unmount() {\n    var children = this.children;\n\n    if (children !== null) {\n      var len = children.length;\n      var i = 0;\n\n      while (i < len) {\n        children[i++].unmount();\n      }\n    }\n\n    this._domNode = null;\n  },\n  clone: function clone(children) {\n    var res = new FragmentElement(this.key);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = false;\n    }\n\n    res.children = children == null ? this.children : processChildren$1(children);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = true;\n    }\n\n    res._ctx = this._ctx;\n    return res;\n  },\n  patch: function patch(element) {\n    if (this === element) {\n      this._patchChildren(element);\n    } else if (this.key === element.key && this.type === element.type) {\n      element._domNode = this._domNode;\n\n      this._patchChildren(element);\n    } else {\n      patchOps.replace(this, element);\n    }\n  },\n  _patchChildren: function _patchChildren(element) {\n    var childrenA = this.children,\n        childrenB = element.children;\n\n    if (childrenA === null && childrenB === null) {\n      return;\n    }\n\n    if (childrenB === null || childrenB.length === 0) {\n      if (childrenA !== null && childrenA.length > 0) {\n        patchOps.removeChildren(this);\n      }\n\n      return;\n    }\n\n    if (childrenA === null || childrenA.length === 0) {\n      var childrenBLen = childrenB.length;\n      var iB = 0;\n\n      while (iB < childrenBLen) {\n        patchOps.appendChild(element, childrenB[iB++]);\n      }\n\n      return;\n    }\n\n    patchChildren(this, element);\n  }\n};\n\nfunction processChildren$1(children) {\n  var normalizedChildren = normalizeNode(children),\n      res = normalizedChildren !== null && !Array.isArray(normalizedChildren) ? [typeof normalizedChildren === 'string' ? nodeToElement$1(normalizedChildren) : normalizedChildren] : normalizedChildren;\n\n  if (IS_DEBUG) {\n    if (Array.isArray(res)) {\n      checkChildren(res);\n    }\n  }\n\n  return res;\n}\n\nfunction TextElement(key, children) {\n  if (IS_DEBUG) {\n    restrictObjProp(this, 'type');\n    restrictObjProp(this, 'key');\n    restrictObjProp(this, 'children');\n    this.__isFrozen = false;\n  }\n\n  this.type = ELEMENT_TYPE_TEXT;\n  this.key = key == null ? null : key;\n  this.children = processChildren$2(children);\n\n  if (IS_DEBUG) {\n    this.__isFrozen = true;\n  }\n\n  this._domNode = null;\n}\nTextElement.prototype = {\n  getDomNode: function getDomNode() {\n    return this._domNode;\n  },\n  setCtx: function setCtx() {\n    return this;\n  },\n  renderToDom: function renderToDom() {\n    if (IS_DEBUG) {\n      checkReuse(this, 'text');\n    }\n\n    var children = this.children;\n    this._domNode = document.createTextNode(children === null ? '' : children);\n    return this._domNode;\n  },\n  renderToString: function renderToString() {\n    return '<!---->' + (this.children === null ? '' : escapeHtml(this.children)) + '<!---->';\n  },\n  adoptDom: function adoptDom(domNodes, domIdx) {\n    if (IS_DEBUG) {\n      checkReuse(this, 'text');\n    }\n\n    var domNode = [domNodes[domIdx++]];\n\n    if (this.children) {\n      domIdx++;\n    }\n\n    domNode.push(domNodes[domIdx++]);\n    this._domNode = domNode;\n    return domIdx;\n  },\n  mount: noOp,\n  unmount: function unmount() {\n    this._domNode = null;\n  },\n  clone: function clone(children) {\n    var res = new TextElement(this.key);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = false;\n    }\n\n    res.children = children == null ? this.children : processChildren$2(children);\n\n    if (IS_DEBUG) {\n      res.__isFrozen = true;\n    }\n\n    return res;\n  },\n  patch: function patch(element) {\n    if (this !== element) {\n      if (this.type === element.type) {\n        element._domNode = this._domNode;\n\n        this._patchChildren(element);\n      } else {\n        patchOps.replace(this, element);\n      }\n    }\n  },\n  _patchChildren: function _patchChildren(element) {\n    var childrenA = this.children,\n        childrenB = element.children;\n\n    if (childrenA !== childrenB) {\n      if (childrenB) {\n        patchOps.updateText(this, childrenB, true);\n      } else if (childrenA) {\n        patchOps.removeText(this);\n      }\n    }\n  }\n};\n\nfunction processChildren$2(children) {\n  if (children == null) {\n    return null;\n  }\n\n  switch (typeof children) {\n    case 'string':\n      return children;\n\n    case 'boolean':\n      return null;\n\n    default:\n      return '' + children;\n  }\n}\n\nvar TextArea = createComponent({\n  onInit: function onInit() {\n    var _this = this;\n\n    this._addAttrs = {\n      onChange: null,\n      onInput: function onInput(e) {\n        _this.onInput(e);\n      }\n    };\n  },\n  onRender: function onRender() {\n    return new TagElement('textarea', null, merge(this.attrs, this._addAttrs));\n  },\n  onInput: function onInput(e) {\n    var _this$attrs = this.attrs,\n        onChange = _this$attrs.onChange,\n        _this$attrs$value = _this$attrs.value,\n        value = _this$attrs$value === void 0 ? '' : _this$attrs$value,\n        control = this.getDomNode();\n\n    if (value !== control.value) {\n      if (onChange) {\n        onChange(e);\n      }\n\n      applyBatch();\n\n      if (this.isMounted()) {\n        var _value = this.attrs.value; // attrs could be changed during applyBatch()\n\n        if (typeof _value !== 'undefined' && control.value !== _value) {\n          control.value = _value;\n        }\n      }\n    }\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nvar Select = createComponent({\n  onInit: function onInit() {\n    var _this = this;\n\n    this._addAttrs = {\n      onChange: function onChange(e) {\n        _this.onInputChange(e);\n      }\n    };\n  },\n  onRender: function onRender() {\n    return new TagElement('select', null, merge(this.attrs, this._addAttrs), this.children);\n  },\n  onInputChange: function onInputChange(e) {\n    var target = e.target,\n        _this$attrs = this.attrs,\n        onChange = _this$attrs.onChange,\n        multiple = _this$attrs.multiple;\n\n    if (onChange) {\n      if (multiple) {\n        var newValue = [],\n            options = target.options,\n            len = options.length;\n        var i = 0,\n            option;\n\n        while (i < len) {\n          option = options[i++];\n\n          if (option.selected) {\n            newValue.push(option.value);\n          }\n        }\n\n        onChange(e, newValue);\n      } else {\n        onChange(e);\n      }\n    }\n\n    applyBatch();\n\n    if (this.isMounted()) {\n      var _this$attrs2 = this.attrs,\n          value = _this$attrs2.value,\n          _multiple = _this$attrs2.multiple; // attrs could be changed during applyBatch()\n\n      if (typeof value !== 'undefined') {\n        if (_multiple) {\n          var _options = target.options,\n              _len = _options.length;\n\n          var _i = 0,\n              _option;\n\n          while (_i < _len) {\n            _option = _options[_i++];\n            _option.selected = isInArray(value, _option.value);\n          }\n        } else if (target.value != value) {\n          target.value = value;\n        }\n      }\n    }\n  },\n  onRefRequest: function onRefRequest() {\n    return this.getDomNode();\n  }\n});\n\nfunction createElement$1(type, key, attrs, children, ref, escapeChildren) {\n  switch (typeof type) {\n    case 'string':\n      switch (type) {\n        case 'fragment':\n          return new FragmentElement(key, children);\n\n        case 'plaintext':\n          return new TextElement(key, children);\n\n        case 'input':\n          return new ComponentElement(Input, key, attrs, children, ref);\n\n        case 'textarea':\n          return new ComponentElement(TextArea, key, attrs, children, ref);\n\n        case 'select':\n          return new ComponentElement(Select, key, attrs, children, ref);\n\n        default:\n          return new TagElement(type, key, attrs, children, ref, escapeChildren);\n      }\n\n    case 'function':\n      return type.__vidom__component__ ? new ComponentElement(type, key, attrs, children, ref) : new FunctionComponentElement(type, key, attrs, children);\n\n    default:\n      if (IS_DEBUG) {\n        throw TypeError('vidom: Unexpected type of element is passed to the elements factory.');\n      }\n\n  }\n}\n\nvar slice = Array.prototype.slice;\nfunction h(type, props) {\n  var hasNonAttrsProps = false,\n      attrs = null,\n      key = null,\n      ref = null,\n      children = arguments.length > 2 ? arguments.length > 3 ? slice.call(arguments, 2) : arguments[2] : null,\n      escapeChildren;\n\n  if (props) {\n    for (var i in props) {\n      switch (i) {\n        case 'key':\n          key = props[i];\n          hasNonAttrsProps = true;\n          break;\n\n        case 'ref':\n          ref = props[i];\n          hasNonAttrsProps = true;\n          break;\n\n        case 'html':\n          children = props[i];\n          escapeChildren = false;\n          hasNonAttrsProps = true;\n          break;\n\n        default:\n          if (attrs === null) {\n            attrs = Object.create(null);\n          }\n\n          attrs[i] = props[i];\n      }\n    }\n  }\n\n  return createElement$1(type, key, hasNonAttrsProps ? attrs : props, children, ref, escapeChildren);\n}\n\nfunction renderToString(node) {\n  return '<!--vidom-->' + nodeToElement$1(node).renderToString();\n}\n\nvar Component = createComponent();\n\nfunction nodeToElements(node) {\n  var normalizedNode = normalizeNode(node);\n  return normalizedNode === null ? [] : typeof normalizedNode === 'string' ? [createElement$1('plaintext', null, null, normalizedNode)] : Array.isArray(normalizedNode) ? normalizedNode : [normalizedNode];\n}\n\nexports.Component = Component;\nexports.IS_DEBUG = IS_DEBUG;\nexports.console = consoleWrapper;\nexports.createComponent = createComponent;\nexports.elem = createElement$1;\nexports.getMountedRootNodes = getMountedRootNodes;\nexports.h = h;\nexports.mount = mount;\nexports.mountSync = mountSync;\nexports.renderToString = renderToString;\nexports.toElem = nodeToElement$1;\nexports.toElems = nodeToElements;\nexports.unmount = unmount;\nexports.unmountSync = unmountSync;\n"]}