VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/rgb64/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/rgb64/rgb64_app.js
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 885:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var external = __webpack_require__.g.external;
var re_msie = /\b(?:msie |ie |trident\/[0-9].*rv[ :])([0-9.]+)/;
var re_blackberry_10 = /\bbb10\b.+?\bversion\/([\d.]+)/;
var re_blackberry_6_7 = /\bblackberry\b.+\bversion\/([\d.]+)/;
var re_blackberry_4_5 = /\bblackberry\d+\/([\d.]+)/;
var NA_VERSION = "-1";
var DEVICES = [["nokia", function (ua) {
  //  nokia/-1
  if (ua.indexOf("nokia ") !== -1) {
    return /\bnokia ([0-9]+)?/;
  } else {
    return /\bnokia([a-z0-9]+)?/;
  }
}], //Android WP
["samsung", function (ua) {
  if (ua.indexOf("samsung") !== -1) {
    return /\bsamsung(?:[ \-](?:sgh|gt|sm))?-([a-z0-9]+)/;
  } else {
    return /\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/;
  }
}], ["wp", function (ua) {
  return ua.indexOf("windows phone ") !== -1 || ua.indexOf("xblwp") !== -1 || ua.indexOf("zunewp") !== -1 || ua.indexOf("windows ce") !== -1;
}], ["pc", "windows"], ["ipad", "ipad"], // ipod iphone
["ipod", "ipod"], ["iphone", /\biphone\b|\biph(\d)/], ["mac", "macintosh"], ["mi", /\bmi[ \-]?([a-z0-9 ]+(?= build|\)))/], ["hongmi", /\bhm[ \-]?([a-z0-9]+)/], ["aliyun", /\baliyunos\b(?:[\-](\d+))?/], ["meizu", function (ua) {
  return ua.indexOf("meizu") >= 0 ? /\bmeizu[\/ ]([a-z0-9]+)\b/ : /\bm([0-9cx]{1,4})\b/;
}], ["nexus", /\bnexus ([0-9s.]+)/], ["huawei", function (ua) {
  var re_mediapad = /\bmediapad (.+?)(?= build\/huaweimediapad\b)/;

  if (ua.indexOf("huawei-huawei") !== -1) {
    return /\bhuawei\-huawei\-([a-z0-9\-]+)/;
  } else if (re_mediapad.test(ua)) {
    return re_mediapad;
  } else {
    return /\bhuawei[ _\-]?([a-z0-9]+)/;
  }
}], ["lenovo", function (ua) {
  if (ua.indexOf("lenovo-lenovo") !== -1) {
    return /\blenovo\-lenovo[ \-]([a-z0-9]+)/;
  } else {
    return /\blenovo[ \-]?([a-z0-9]+)/;
  }
}], ["zte", function (ua) {
  if (/\bzte\-[tu]/.test(ua)) {
    return /\bzte-[tu][ _\-]?([a-su-z0-9\+]+)/;
  } else {
    return /\bzte[ _\-]?([a-su-z0-9\+]+)/;
  }
}], ["vivo", /\bvivo(?: ([a-z0-9]+))?/], ["htc", function (ua) {
  if (/\bhtc[a-z0-9 _\-]+(?= build\b)/.test(ua)) {
    return /\bhtc[ _\-]?([a-z0-9 ]+(?= build))/;
  } else {
    return /\bhtc[ _\-]?([a-z0-9 ]+)/;
  }
}], ["oppo", /\boppo[_ ]([a-z0-9]+)/], ["konka", /\bkonka[_\-]([a-z0-9]+)/], ["sonyericsson", /\bmt([a-z0-9]+)/], ["coolpad", /\bcoolpad[_ ]?([a-z0-9]+)/], ["lg", /\blg[\-]([a-z0-9]+)/], ["android", /\bandroid\b|\badr\b/], ["blackberry", function (ua) {
  if (ua.indexOf("blackberry") >= 0) {
    return /\bblackberry\s?(\d+)/;
  }

  return "bb10";
}]];
var OS = [["wp", function (ua) {
  if (ua.indexOf("windows phone ") !== -1) {
    return /\bwindows phone (?:os )?([0-9.]+)/;
  } else if (ua.indexOf("xblwp") !== -1) {
    return /\bxblwp([0-9.]+)/;
  } else if (ua.indexOf("zunewp") !== -1) {
    return /\bzunewp([0-9.]+)/;
  }

  return "windows phone";
}], ["windows", /\bwindows nt ([0-9.]+)/], ["macosx", /\bmac os x ([0-9._]+)/], ["ios", function (ua) {
  if (/\bcpu(?: iphone)? os /.test(ua)) {
    return /\bcpu(?: iphone)? os ([0-9._]+)/;
  } else if (ua.indexOf("iph os ") !== -1) {
    return /\biph os ([0-9_]+)/;
  } else {
    return /\bios\b/;
  }
}], ["yunos", /\baliyunos ([0-9.]+)/], ["android", function (ua) {
  if (ua.indexOf("android") >= 0) {
    return /\bandroid[ \/-]?([0-9.x]+)?/;
  } else if (ua.indexOf("adr") >= 0) {
    if (ua.indexOf("mqqbrowser") >= 0) {
      return /\badr[ ]\(linux; u; ([0-9.]+)?/;
    } else {
      return /\badr(?:[ ]([0-9.]+))?/;
    }
  }

  return "android"; //return /\b(?:android|\badr)(?:[\/\- ](?:\(linux; u; )?)?([0-9.x]+)?/;
}], ["chromeos", /\bcros i686 ([0-9.]+)/], ["linux", "linux"], ["windowsce", /\bwindows ce(?: ([0-9.]+))?/], ["symbian", /\bsymbian(?:os)?\/([0-9.]+)/], ["blackberry", function (ua) {
  var m = ua.match(re_blackberry_10) || ua.match(re_blackberry_6_7) || ua.match(re_blackberry_4_5);
  return m ? {
    version: m[1]
  } : "blackberry";
}], ['ie', /\rv\:\/([0-9.]+)/]];
var ENGINE = [["edgehtml", /edge\/([0-9.]+)/], ["trident", re_msie], ["blink", function () {
  return "chrome" in __webpack_require__.g && "CSS" in __webpack_require__.g && /\bapplewebkit[\/]?([0-9.+]+)/;
}], ["webkit", /\bapplewebkit[\/]?([0-9.+]+)/], ["gecko", function (ua) {
  var match = ua.match(/\brv:([\d\w.]+).*\bgecko\/(\d+)/);

  if (match) {
    return {
      version: match[1] + "." + match[2]
    };
  }
}], ["presto", /\bpresto\/([0-9.]+)/], ["androidwebkit", /\bandroidwebkit\/([0-9.]+)/], ["coolpadwebkit", /\bcoolpadwebkit\/([0-9.]+)/], ["u2", /\bu2\/([0-9.]+)/], ["u3", /\bu3\/([0-9.]+)/]];
var BROWSER = [['coccoc', /coc_coc_browser\/([0-9.]+)/], // Microsoft Edge Browser, Default browser in Windows 10.
["edge", /edge\/([0-9.]+)/], ["chrome-edge", /chrome.+edg\/([0-9.]+)/], // Sogou.
["sogou", function (ua) {
  if (ua.indexOf("sogoumobilebrowser") >= 0) {
    return /sogoumobilebrowser\/([0-9.]+)/;
  } else if (ua.indexOf("sogoumse") >= 0) {
    return true;
  }

  return / se ([0-9.x]+)/;
}], // Maxthon
["maxthon", function () {
  try {
    if (external && (external.mxVersion || external.max_version)) {
      return {
        version: external.mxVersion || external.max_version
      };
    }
  } catch (ex) {
    /* */
  }

  return /\b(?:maxthon|mxbrowser)(?:[ \/]([0-9.]+))?/;
}], ["micromessenger", /\bmicromessenger\/([\d.]+)/], ["qq", /\bm?qqbrowser\/([0-9.]+)/], ["green", "greenbrowser"], ["tt", /\btencenttraveler ([0-9.]+)/], ["liebao", function (ua) {
  if (ua.indexOf("liebaofast") >= 0) {
    return /\bliebaofast\/([0-9.]+)/;
  }

  if (ua.indexOf("lbbrowser") === -1) {
    return false;
  }

  var version;

  try {
    if (external && external.LiebaoGetVersion) {
      version = external.LiebaoGetVersion();
    }
  } catch (ex) {
    /* */
  }

  return {
    version: version || NA_VERSION
  };
}], ["tao", /\btaobrowser\/([0-9.]+)/], ["coolnovo", /\bcoolnovo\/([0-9.]+)/], ["saayaa", "saayaa"], ["baidu", /\b(?:ba?idubrowser|baiduhd)[ \/]([0-9.x]+)/], ["ie", re_msie], ["mi", /\bmiuibrowser\/([0-9.]+)/], ["opera", function (ua) {
  var re_opera_old = /\bopera.+version\/([0-9.ab]+)/;
  var re_opera_new = /\bopr\/([0-9.]+)/;
  return re_opera_old.test(ua) ? re_opera_old : re_opera_new;
}], ["oupeng", /\boupeng\/([0-9.]+)/], ["yandex", /yabrowser\/([0-9.]+)/], ["ali-ap", function (ua) {
  if (ua.indexOf("aliapp") > 0) {
    return /\baliapp\(ap\/([0-9.]+)\)/;
  } else {
    return /\balipayclient\/([0-9.]+)\b/;
  }
}], ["ali-ap-pd", /\baliapp\(ap-pd\/([0-9.]+)\)/], ["ali-am", /\baliapp\(am\/([0-9.]+)\)/], ["ali-tb", /\baliapp\(tb\/([0-9.]+)\)/], ["ali-tb-pd", /\baliapp\(tb-pd\/([0-9.]+)\)/], ["ali-tm", /\baliapp\(tm\/([0-9.]+)\)/], ["ali-tm-pd", /\baliapp\(tm-pd\/([0-9.]+)\)/], ["uc", function (ua) {
  if (ua.indexOf("ucbrowser/") >= 0) {
    return /\bucbrowser\/([0-9.]+)/;
  } else if (ua.indexOf("ubrowser/") >= 0) {
    return /\bubrowser\/([0-9.]+)/;
  } else if (/\buc\/[0-9]/.test(ua)) {
    return /\buc\/([0-9.]+)/;
  } else if (ua.indexOf("ucweb") >= 0) {
    // `ucweb/2.0` is compony info.
    // `UCWEB8.7.2.214/145/800` is browser info.
    return /\bucweb([0-9.]+)?/;
  } else {
    return /\b(?:ucbrowser|uc)\b/;
  }
}], ["baiduboxapp", function (ua) {
  var back = 0;
  var a;

  if (/ baiduboxapp\//i.test(ua)) {
    a = /([\d+.]+)_(?:diordna|enohpi)_/.exec(ua);

    if (a) {
      a = a[1].split(".");
      back = a.reverse().join(".");
    } else if (a = /baiduboxapp\/([\d+.]+)/.exec(ua)) {
      back = a[1];
    }

    return {
      version: back
    };
  }

  return false;
}], ["oppobrowser", /\boppobrowser\/([0-9.]+)/], ["edge-android", / (?:edga)\/([0-9.]+)/], ["chrome", / (?:chrome|crios|crmo)\/([0-9.]+)/], // Android safari 
["android", function (ua) {
  if (ua.indexOf("android") === -1) {
    return;
  }

  return /\bversion\/([0-9.]+(?: beta)?)/;
}], ["blackberry", function (ua) {
  var m = ua.match(re_blackberry_10) || ua.match(re_blackberry_6_7) || ua.match(re_blackberry_4_5);
  return m ? {
    version: m[1]
  } : "blackberry";
}], ["safari", /\bversion\/([0-9.]+(?: beta)?)(?: mobile(?:\/[a-z0-9]+)?)? safari\//], //  Safari, WebView
["webview", /\bcpu(?: iphone)? os (?:[0-9._]+).+\bapplewebkit\b/], ["firefox", /\bfirefox\/([0-9.ab]+)/], ["nokia", /\bnokiabrowser\/([0-9.]+)/]];
module.exports = {
  device: DEVICES,
  os: OS,
  browser: BROWSER,
  engine: ENGINE,
  re_msie: re_msie
};

/***/ }),

/***/ 9733:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/* module decorator */ module = __webpack_require__.nmd(module);
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

(function (w) {
  "use strict";

  function findBest(atobNative) {
    // normal window
    if ('function' === typeof atobNative) {
      return atobNative;
    } // browserify (web worker)


    if ('function' === typeof Buffer) {
      return function atobBrowserify(a) {
        //!! Deliberately using an API that's deprecated in node.js because
        //!! this file is for browsers and we expect them to cope with it.
        //!! Discussion: github.com/node-browser-compat/atob/pull/9
        return new Buffer(a, 'base64').toString('binary');
      };
    } // ios web worker with base64js


    if ('object' === _typeof(w.base64js)) {
      // bufferToBinaryString
      // https://git.coolaj86.com/coolaj86/unibabel.js/blob/master/index.js#L50
      return function atobWebWorker_iOS(a) {
        var buf = w.base64js.b64ToByteArray(a);
        return Array.prototype.map.call(buf, function (ch) {
          return String.fromCharCode(ch);
        }).join('');
      };
    }

    return function () {
      // ios web worker without base64js
      throw new Error("You're probably in an old browser or an iOS webworker." + " It might help to include beatgammit's base64-js.");
    };
  }

  var atobBest = findBest(w.atob);
  w.atob = atobBest;

  if (( false ? 0 : _typeof(module)) === 'object' && module && module.exports) {
    module.exports = atobBest;
  }
})(window);

/***/ }),

/***/ 7943:
/***/ ((__unused_webpack_module, exports) => {

"use strict";


exports.byteLength = byteLength;
exports.toByteArray = toByteArray;
exports.fromByteArray = fromByteArray;
var lookup = [];
var revLookup = [];
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i];
  revLookup[code.charCodeAt(i)] = i;
} // Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications


revLookup['-'.charCodeAt(0)] = 62;
revLookup['_'.charCodeAt(0)] = 63;

function getLens(b64) {
  var len = b64.length;

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4');
  } // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42


  var validLen = b64.indexOf('=');
  if (validLen === -1) validLen = len;
  var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
  return [validLen, placeHoldersLen];
} // base64 is 4/3 + up to two characters of the original data


function byteLength(b64) {
  var lens = getLens(b64);
  var validLen = lens[0];
  var placeHoldersLen = lens[1];
  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}

function _byteLength(b64, validLen, placeHoldersLen) {
  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}

function toByteArray(b64) {
  var tmp;
  var lens = getLens(b64);
  var validLen = lens[0];
  var placeHoldersLen = lens[1];
  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
  var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars

  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
  var i;

  for (i = 0; i < len; i += 4) {
    tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
    arr[curByte++] = tmp >> 16 & 0xFF;
    arr[curByte++] = tmp >> 8 & 0xFF;
    arr[curByte++] = tmp & 0xFF;
  }

  if (placeHoldersLen === 2) {
    tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
    arr[curByte++] = tmp & 0xFF;
  }

  if (placeHoldersLen === 1) {
    tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
    arr[curByte++] = tmp >> 8 & 0xFF;
    arr[curByte++] = tmp & 0xFF;
  }

  return arr;
}

function tripletToBase64(num) {
  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
}

function encodeChunk(uint8, start, end) {
  var tmp;
  var output = [];

  for (var i = start; i < end; i += 3) {
    tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
    output.push(tripletToBase64(tmp));
  }

  return output.join('');
}

function fromByteArray(uint8) {
  var tmp;
  var len = uint8.length;
  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes

  var parts = [];
  var maxChunkLength = 16383; // must be multiple of 3
  // go through the array every three bytes, we'll deal with trailing stuff later

  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
  } // pad the end with zeros, but make sure to not forget the extra bytes


  if (extraBytes === 1) {
    tmp = uint8[len - 1];
    parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1];
    parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
  }

  return parts.join('');
}

/***/ }),

/***/ 6835:
/***/ ((module) => {

(function () {
  "use strict";

  function btoa(str) {
    var buffer;

    if (str instanceof Buffer) {
      buffer = str;
    } else {
      buffer = Buffer.from(str.toString(), 'binary');
    }

    return buffer.toString('base64');
  }

  module.exports = btoa;
})();

/***/ }),

/***/ 365:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
var __webpack_unused_export__;
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */

/* eslint-disable no-proto */


function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

var base64 = __webpack_require__(7943);

var ieee754 = __webpack_require__(8405);

var customInspectSymbol = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' // eslint-disable-line dot-notation
? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation
: null;
exports.lW = Buffer;
__webpack_unused_export__ = SlowBuffer;
exports.h2 = 50;
var K_MAX_LENGTH = 0x7fffffff;
__webpack_unused_export__ = K_MAX_LENGTH;
/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Print warning and recommend using `buffer` v4.x which has an Object
 *               implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * We report that the browser does not support typed arrays if the are not subclassable
 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
 * for __proto__ and has a buggy typed array implementation.
 */

Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();

if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') {
  console.error('This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.');
}

function typedArraySupport() {
  // Can typed array instances can be augmented?
  try {
    var arr = new Uint8Array(1);
    var proto = {
      foo: function foo() {
        return 42;
      }
    };
    Object.setPrototypeOf(proto, Uint8Array.prototype);
    Object.setPrototypeOf(arr, proto);
    return arr.foo() === 42;
  } catch (e) {
    return false;
  }
}

Object.defineProperty(Buffer.prototype, 'parent', {
  enumerable: true,
  get: function get() {
    if (!Buffer.isBuffer(this)) return undefined;
    return this.buffer;
  }
});
Object.defineProperty(Buffer.prototype, 'offset', {
  enumerable: true,
  get: function get() {
    if (!Buffer.isBuffer(this)) return undefined;
    return this.byteOffset;
  }
});

function createBuffer(length) {
  if (length > K_MAX_LENGTH) {
    throw new RangeError('The value "' + length + '" is invalid for option "size"');
  } // Return an augmented `Uint8Array` instance


  var buf = new Uint8Array(length);
  Object.setPrototypeOf(buf, Buffer.prototype);
  return buf;
}
/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */


function Buffer(arg, encodingOrOffset, length) {
  // Common case.
  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new TypeError('The "string" argument must be of type string. Received type number');
    }

    return allocUnsafe(arg);
  }

  return from(arg, encodingOrOffset, length);
}

Buffer.poolSize = 8192; // not used by this implementation

function from(value, encodingOrOffset, length) {
  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset);
  }

  if (ArrayBuffer.isView(value)) {
    return fromArrayView(value);
  }

  if (value == null) {
    throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + _typeof(value));
  }

  if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {
    return fromArrayBuffer(value, encodingOrOffset, length);
  }

  if (typeof SharedArrayBuffer !== 'undefined' && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {
    return fromArrayBuffer(value, encodingOrOffset, length);
  }

  if (typeof value === 'number') {
    throw new TypeError('The "value" argument must not be of type number. Received type number');
  }

  var valueOf = value.valueOf && value.valueOf();

  if (valueOf != null && valueOf !== value) {
    return Buffer.from(valueOf, encodingOrOffset, length);
  }

  var b = fromObject(value);
  if (b) return b;

  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') {
    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length);
  }

  throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + _typeof(value));
}
/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/


Buffer.from = function (value, encodingOrOffset, length) {
  return from(value, encodingOrOffset, length);
}; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148


Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);
Object.setPrototypeOf(Buffer, Uint8Array);

function assertSize(size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be of type number');
  } else if (size < 0) {
    throw new RangeError('The value "' + size + '" is invalid for option "size"');
  }
}

function alloc(size, fill, encoding) {
  assertSize(size);

  if (size <= 0) {
    return createBuffer(size);
  }

  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpreted as a start offset.
    return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);
  }

  return createBuffer(size);
}
/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/


Buffer.alloc = function (size, fill, encoding) {
  return alloc(size, fill, encoding);
};

function allocUnsafe(size) {
  assertSize(size);
  return createBuffer(size < 0 ? 0 : checked(size) | 0);
}
/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */


Buffer.allocUnsafe = function (size) {
  return allocUnsafe(size);
};
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */


Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(size);
};

function fromString(string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8';
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('Unknown encoding: ' + encoding);
  }

  var length = byteLength(string, encoding) | 0;
  var buf = createBuffer(length);
  var actual = buf.write(string, encoding);

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual);
  }

  return buf;
}

function fromArrayLike(array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0;
  var buf = createBuffer(length);

  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255;
  }

  return buf;
}

function fromArrayView(arrayView) {
  if (isInstance(arrayView, Uint8Array)) {
    var copy = new Uint8Array(arrayView);
    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);
  }

  return fromArrayLike(arrayView);
}

function fromArrayBuffer(array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('"offset" is outside of buffer bounds');
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('"length" is outside of buffer bounds');
  }

  var buf;

  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array);
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset);
  } else {
    buf = new Uint8Array(array, byteOffset, length);
  } // Return an augmented `Uint8Array` instance


  Object.setPrototypeOf(buf, Buffer.prototype);
  return buf;
}

function fromObject(obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0;
    var buf = createBuffer(len);

    if (buf.length === 0) {
      return buf;
    }

    obj.copy(buf, 0, 0, len);
    return buf;
  }

  if (obj.length !== undefined) {
    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
      return createBuffer(0);
    }

    return fromArrayLike(obj);
  }

  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
    return fromArrayLike(obj.data);
  }
}

function checked(length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes');
  }

  return length | 0;
}

function SlowBuffer(length) {
  if (+length != length) {
    // eslint-disable-line eqeqeq
    length = 0;
  }

  return Buffer.alloc(+length);
}

Buffer.isBuffer = function isBuffer(b) {
  return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false
};

Buffer.compare = function compare(a, b) {
  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);
  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);

  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
  }

  if (a === b) return 0;
  var x = a.length;
  var y = b.length;

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i];
      y = b[i];
      break;
    }
  }

  if (x < y) return -1;
  if (y < x) return 1;
  return 0;
};

Buffer.isEncoding = function isEncoding(encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true;

    default:
      return false;
  }
};

Buffer.concat = function concat(list, length) {
  if (!Array.isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers');
  }

  if (list.length === 0) {
    return Buffer.alloc(0);
  }

  var i;

  if (length === undefined) {
    length = 0;

    for (i = 0; i < list.length; ++i) {
      length += list[i].length;
    }
  }

  var buffer = Buffer.allocUnsafe(length);
  var pos = 0;

  for (i = 0; i < list.length; ++i) {
    var buf = list[i];

    if (isInstance(buf, Uint8Array)) {
      if (pos + buf.length > buffer.length) {
        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);
        buf.copy(buffer, pos);
      } else {
        Uint8Array.prototype.set.call(buffer, buf, pos);
      }
    } else if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers');
    } else {
      buf.copy(buffer, pos);
    }

    pos += buf.length;
  }

  return buffer;
};

function byteLength(string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length;
  }

  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
    return string.byteLength;
  }

  if (typeof string !== 'string') {
    throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + _typeof(string));
  }

  var len = string.length;
  var mustMatch = arguments.length > 2 && arguments[2] === true;
  if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion

  var loweredCase = false;

  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len;

      case 'utf8':
      case 'utf-8':
        return utf8ToBytes(string).length;

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2;

      case 'hex':
        return len >>> 1;

      case 'base64':
        return base64ToBytes(string).length;

      default:
        if (loweredCase) {
          return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8
        }

        encoding = ('' + encoding).toLowerCase();
        loweredCase = true;
    }
  }
}

Buffer.byteLength = byteLength;

function slowToString(encoding, start, end) {
  var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.
  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.

  if (start === undefined || start < 0) {
    start = 0;
  } // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.


  if (start > this.length) {
    return '';
  }

  if (end === undefined || end > this.length) {
    end = this.length;
  }

  if (end <= 0) {
    return '';
  } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.


  end >>>= 0;
  start >>>= 0;

  if (end <= start) {
    return '';
  }

  if (!encoding) encoding = 'utf8';

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end);

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end);

      case 'ascii':
        return asciiSlice(this, start, end);

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end);

      case 'base64':
        return base64Slice(this, start, end);

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end);

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
        encoding = (encoding + '').toLowerCase();
        loweredCase = true;
    }
  }
} // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154


Buffer.prototype._isBuffer = true;

function swap(b, n, m) {
  var i = b[n];
  b[n] = b[m];
  b[m] = i;
}

Buffer.prototype.swap16 = function swap16() {
  var len = this.length;

  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits');
  }

  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1);
  }

  return this;
};

Buffer.prototype.swap32 = function swap32() {
  var len = this.length;

  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits');
  }

  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3);
    swap(this, i + 1, i + 2);
  }

  return this;
};

Buffer.prototype.swap64 = function swap64() {
  var len = this.length;

  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits');
  }

  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7);
    swap(this, i + 1, i + 6);
    swap(this, i + 2, i + 5);
    swap(this, i + 3, i + 4);
  }

  return this;
};

Buffer.prototype.toString = function toString() {
  var length = this.length;
  if (length === 0) return '';
  if (arguments.length === 0) return utf8Slice(this, 0, length);
  return slowToString.apply(this, arguments);
};

Buffer.prototype.toLocaleString = Buffer.prototype.toString;

Buffer.prototype.equals = function equals(b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
  if (this === b) return true;
  return Buffer.compare(this, b) === 0;
};

Buffer.prototype.inspect = function inspect() {
  var str = '';
  var max = exports.h2;
  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();
  if (this.length > max) str += ' ... ';
  return '<Buffer ' + str + '>';
};

if (customInspectSymbol) {
  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;
}

Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
  if (isInstance(target, Uint8Array)) {
    target = Buffer.from(target, target.offset, target.byteLength);
  }

  if (!Buffer.isBuffer(target)) {
    throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + _typeof(target));
  }

  if (start === undefined) {
    start = 0;
  }

  if (end === undefined) {
    end = target ? target.length : 0;
  }

  if (thisStart === undefined) {
    thisStart = 0;
  }

  if (thisEnd === undefined) {
    thisEnd = this.length;
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index');
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0;
  }

  if (thisStart >= thisEnd) {
    return -1;
  }

  if (start >= end) {
    return 1;
  }

  start >>>= 0;
  end >>>= 0;
  thisStart >>>= 0;
  thisEnd >>>= 0;
  if (this === target) return 0;
  var x = thisEnd - thisStart;
  var y = end - start;
  var len = Math.min(x, y);
  var thisCopy = this.slice(thisStart, thisEnd);
  var targetCopy = target.slice(start, end);

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i];
      y = targetCopy[i];
      break;
    }
  }

  if (x < y) return -1;
  if (y < x) return 1;
  return 0;
}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf


function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1; // Normalize byteOffset

  if (typeof byteOffset === 'string') {
    encoding = byteOffset;
    byteOffset = 0;
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff;
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000;
  }

  byteOffset = +byteOffset; // Coerce to Number.

  if (numberIsNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : buffer.length - 1;
  } // Normalize byteOffset: negative offsets start from the end of the buffer


  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;

  if (byteOffset >= buffer.length) {
    if (dir) return -1;else byteOffset = buffer.length - 1;
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0;else return -1;
  } // Normalize val


  if (typeof val === 'string') {
    val = Buffer.from(val, encoding);
  } // Finally, search either indexOf (if dir is true) or lastIndexOf


  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1;
    }

    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
  } else if (typeof val === 'number') {
    val = val & 0xFF; // Search for a byte value [0-255]

    if (typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
      }
    }

    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
  }

  throw new TypeError('val must be string, number or Buffer');
}

function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
  var indexSize = 1;
  var arrLength = arr.length;
  var valLength = val.length;

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase();

    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1;
      }

      indexSize = 2;
      arrLength /= 2;
      valLength /= 2;
      byteOffset /= 2;
    }
  }

  function read(buf, i) {
    if (indexSize === 1) {
      return buf[i];
    } else {
      return buf.readUInt16BE(i * indexSize);
    }
  }

  var i;

  if (dir) {
    var foundIndex = -1;

    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i;
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
      } else {
        if (foundIndex !== -1) i -= i - foundIndex;
        foundIndex = -1;
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;

    for (i = byteOffset; i >= 0; i--) {
      var found = true;

      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false;
          break;
        }
      }

      if (found) return i;
    }
  }

  return -1;
}

Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1;
};

Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
};

Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
};

function hexWrite(buf, string, offset, length) {
  offset = Number(offset) || 0;
  var remaining = buf.length - offset;

  if (!length) {
    length = remaining;
  } else {
    length = Number(length);

    if (length > remaining) {
      length = remaining;
    }
  }

  var strLen = string.length;

  if (length > strLen / 2) {
    length = strLen / 2;
  }

  var i;

  for (i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16);
    if (numberIsNaN(parsed)) return i;
    buf[offset + i] = parsed;
  }

  return i;
}

function utf8Write(buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
}

function asciiWrite(buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length);
}

function base64Write(buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length);
}

function ucs2Write(buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
}

Buffer.prototype.write = function write(string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8';
    length = this.length;
    offset = 0; // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset;
    length = this.length;
    offset = 0; // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset >>> 0;

    if (isFinite(length)) {
      length = length >>> 0;
      if (encoding === undefined) encoding = 'utf8';
    } else {
      encoding = length;
      length = undefined;
    }
  } else {
    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
  }

  var remaining = this.length - offset;
  if (length === undefined || length > remaining) length = remaining;

  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds');
  }

  if (!encoding) encoding = 'utf8';
  var loweredCase = false;

  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length);

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length);

      case 'ascii':
      case 'latin1':
      case 'binary':
        return asciiWrite(this, string, offset, length);

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length);

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length);

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
        encoding = ('' + encoding).toLowerCase();
        loweredCase = true;
    }
  }
};

Buffer.prototype.toJSON = function toJSON() {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  };
};

function base64Slice(buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf);
  } else {
    return base64.fromByteArray(buf.slice(start, end));
  }
}

function utf8Slice(buf, start, end) {
  end = Math.min(buf.length, end);
  var res = [];
  var i = start;

  while (i < end) {
    var firstByte = buf[i];
    var codePoint = null;
    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;

    if (i + bytesPerSequence <= end) {
      var secondByte = void 0,
          thirdByte = void 0,
          fourthByte = void 0,
          tempCodePoint = void 0;

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte;
          }

          break;

        case 2:
          secondByte = buf[i + 1];

          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;

            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint;
            }
          }

          break;

        case 3:
          secondByte = buf[i + 1];
          thirdByte = buf[i + 2];

          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;

            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint;
            }
          }

          break;

        case 4:
          secondByte = buf[i + 1];
          thirdByte = buf[i + 2];
          fourthByte = buf[i + 3];

          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;

            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint;
            }
          }

      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD;
      bytesPerSequence = 1;
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000;
      res.push(codePoint >>> 10 & 0x3FF | 0xD800);
      codePoint = 0xDC00 | codePoint & 0x3FF;
    }

    res.push(codePoint);
    i += bytesPerSequence;
  }

  return decodeCodePointsArray(res);
} // Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety


var MAX_ARGUMENTS_LENGTH = 0x1000;

function decodeCodePointsArray(codePoints) {
  var len = codePoints.length;

  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
  } // Decode in chunks to avoid "call stack size exceeded".


  var res = '';
  var i = 0;

  while (i < len) {
    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
  }

  return res;
}

function asciiSlice(buf, start, end) {
  var ret = '';
  end = Math.min(buf.length, end);

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F);
  }

  return ret;
}

function latin1Slice(buf, start, end) {
  var ret = '';
  end = Math.min(buf.length, end);

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i]);
  }

  return ret;
}

function hexSlice(buf, start, end) {
  var len = buf.length;
  if (!start || start < 0) start = 0;
  if (!end || end < 0 || end > len) end = len;
  var out = '';

  for (var i = start; i < end; ++i) {
    out += hexSliceLookupTable[buf[i]];
  }

  return out;
}

function utf16leSlice(buf, start, end) {
  var bytes = buf.slice(start, end);
  var res = ''; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)

  for (var i = 0; i < bytes.length - 1; i += 2) {
    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
  }

  return res;
}

Buffer.prototype.slice = function slice(start, end) {
  var len = this.length;
  start = ~~start;
  end = end === undefined ? len : ~~end;

  if (start < 0) {
    start += len;
    if (start < 0) start = 0;
  } else if (start > len) {
    start = len;
  }

  if (end < 0) {
    end += len;
    if (end < 0) end = 0;
  } else if (end > len) {
    end = len;
  }

  if (end < start) end = start;
  var newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance

  Object.setPrototypeOf(newBuf, Buffer.prototype);
  return newBuf;
};
/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */


function checkOffset(offset, ext, length) {
  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
}

Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var val = this[offset];
  var mul = 1;
  var i = 0;

  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul;
  }

  return val;
};

Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;

  if (!noAssert) {
    checkOffset(offset, byteLength, this.length);
  }

  var val = this[offset + --byteLength];
  var mul = 1;

  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul;
  }

  return val;
};

Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 1, this.length);
  return this[offset];
};

Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 2, this.length);
  return this[offset] | this[offset + 1] << 8;
};

Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 2, this.length);
  return this[offset] << 8 | this[offset + 1];
};

Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
};

Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
};

Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {
  offset = offset >>> 0;
  validateNumber(offset, 'offset');
  var first = this[offset];
  var last = this[offset + 7];

  if (first === undefined || last === undefined) {
    boundsError(offset, this.length - 8);
  }

  var lo = first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24);
  var hi = this[++offset] + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + last * Math.pow(2, 24);
  return BigInt(lo) + (BigInt(hi) << BigInt(32));
});
Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {
  offset = offset >>> 0;
  validateNumber(offset, 'offset');
  var first = this[offset];
  var last = this[offset + 7];

  if (first === undefined || last === undefined) {
    boundsError(offset, this.length - 8);
  }

  var hi = first * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];
  var lo = this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last;
  return (BigInt(hi) << BigInt(32)) + BigInt(lo);
});

Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var val = this[offset];
  var mul = 1;
  var i = 0;

  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul;
  }

  mul *= 0x80;
  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
  return val;
};

Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;
  if (!noAssert) checkOffset(offset, byteLength, this.length);
  var i = byteLength;
  var mul = 1;
  var val = this[offset + --i];

  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul;
  }

  mul *= 0x80;
  if (val >= mul) val -= Math.pow(2, 8 * byteLength);
  return val;
};

Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 1, this.length);
  if (!(this[offset] & 0x80)) return this[offset];
  return (0xff - this[offset] + 1) * -1;
};

Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 2, this.length);
  var val = this[offset] | this[offset + 1] << 8;
  return val & 0x8000 ? val | 0xFFFF0000 : val;
};

Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 2, this.length);
  var val = this[offset + 1] | this[offset] << 8;
  return val & 0x8000 ? val | 0xFFFF0000 : val;
};

Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
};

Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
};

Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {
  offset = offset >>> 0;
  validateNumber(offset, 'offset');
  var first = this[offset];
  var last = this[offset + 7];

  if (first === undefined || last === undefined) {
    boundsError(offset, this.length - 8);
  }

  var val = this[offset + 4] + this[offset + 5] * Math.pow(2, 8) + this[offset + 6] * Math.pow(2, 16) + (last << 24); // Overflow

  return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * Math.pow(2, 8) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 24));
});
Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {
  offset = offset >>> 0;
  validateNumber(offset, 'offset');
  var first = this[offset];
  var last = this[offset + 7];

  if (first === undefined || last === undefined) {
    boundsError(offset, this.length - 8);
  }

  var val = (first << 24) + // Overflow
  this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + this[++offset];
  return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * Math.pow(2, 24) + this[++offset] * Math.pow(2, 16) + this[++offset] * Math.pow(2, 8) + last);
});

Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return ieee754.read(this, offset, true, 23, 4);
};

Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 4, this.length);
  return ieee754.read(this, offset, false, 23, 4);
};

Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 8, this.length);
  return ieee754.read(this, offset, true, 52, 8);
};

Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
  offset = offset >>> 0;
  if (!noAssert) checkOffset(offset, 8, this.length);
  return ieee754.read(this, offset, false, 52, 8);
};

function checkInt(buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
  if (offset + ext > buf.length) throw new RangeError('Index out of range');
}

Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;

  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
    checkInt(this, value, offset, byteLength, maxBytes, 0);
  }

  var mul = 1;
  var i = 0;
  this[offset] = value & 0xFF;

  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = value / mul & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset >>> 0;
  byteLength = byteLength >>> 0;

  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1;
    checkInt(this, value, offset, byteLength, maxBytes, 0);
  }

  var i = byteLength - 1;
  var mul = 1;
  this[offset + i] = value & 0xFF;

  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = value / mul & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
  this[offset] = value & 0xff;
  return offset + 1;
};

Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
  this[offset] = value & 0xff;
  this[offset + 1] = value >>> 8;
  return offset + 2;
};

Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
  this[offset] = value >>> 8;
  this[offset + 1] = value & 0xff;
  return offset + 2;
};

Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
  this[offset + 3] = value >>> 24;
  this[offset + 2] = value >>> 16;
  this[offset + 1] = value >>> 8;
  this[offset] = value & 0xff;
  return offset + 4;
};

Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
  this[offset] = value >>> 24;
  this[offset + 1] = value >>> 16;
  this[offset + 2] = value >>> 8;
  this[offset + 3] = value & 0xff;
  return offset + 4;
};

function wrtBigUInt64LE(buf, value, offset, min, max) {
  checkIntBI(value, min, max, buf, offset, 7);
  var lo = Number(value & BigInt(0xffffffff));
  buf[offset++] = lo;
  lo = lo >> 8;
  buf[offset++] = lo;
  lo = lo >> 8;
  buf[offset++] = lo;
  lo = lo >> 8;
  buf[offset++] = lo;
  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));
  buf[offset++] = hi;
  hi = hi >> 8;
  buf[offset++] = hi;
  hi = hi >> 8;
  buf[offset++] = hi;
  hi = hi >> 8;
  buf[offset++] = hi;
  return offset;
}

function wrtBigUInt64BE(buf, value, offset, min, max) {
  checkIntBI(value, min, max, buf, offset, 7);
  var lo = Number(value & BigInt(0xffffffff));
  buf[offset + 7] = lo;
  lo = lo >> 8;
  buf[offset + 6] = lo;
  lo = lo >> 8;
  buf[offset + 5] = lo;
  lo = lo >> 8;
  buf[offset + 4] = lo;
  var hi = Number(value >> BigInt(32) & BigInt(0xffffffff));
  buf[offset + 3] = hi;
  hi = hi >> 8;
  buf[offset + 2] = hi;
  hi = hi >> 8;
  buf[offset + 1] = hi;
  hi = hi >> 8;
  buf[offset] = hi;
  return offset + 8;
}

Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));
});
Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'));
});

Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset >>> 0;

  if (!noAssert) {
    var limit = Math.pow(2, 8 * byteLength - 1);
    checkInt(this, value, offset, byteLength, limit - 1, -limit);
  }

  var i = 0;
  var mul = 1;
  var sub = 0;
  this[offset] = value & 0xFF;

  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1;
    }

    this[offset + i] = (value / mul >> 0) - sub & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
  value = +value;
  offset = offset >>> 0;

  if (!noAssert) {
    var limit = Math.pow(2, 8 * byteLength - 1);
    checkInt(this, value, offset, byteLength, limit - 1, -limit);
  }

  var i = byteLength - 1;
  var mul = 1;
  var sub = 0;
  this[offset + i] = value & 0xFF;

  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1;
    }

    this[offset + i] = (value / mul >> 0) - sub & 0xFF;
  }

  return offset + byteLength;
};

Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
  if (value < 0) value = 0xff + value + 1;
  this[offset] = value & 0xff;
  return offset + 1;
};

Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
  this[offset] = value & 0xff;
  this[offset + 1] = value >>> 8;
  return offset + 2;
};

Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
  this[offset] = value >>> 8;
  this[offset + 1] = value & 0xff;
  return offset + 2;
};

Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
  this[offset] = value & 0xff;
  this[offset + 1] = value >>> 8;
  this[offset + 2] = value >>> 16;
  this[offset + 3] = value >>> 24;
  return offset + 4;
};

Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
  value = +value;
  offset = offset >>> 0;
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
  if (value < 0) value = 0xffffffff + value + 1;
  this[offset] = value >>> 24;
  this[offset + 1] = value >>> 16;
  this[offset + 2] = value >>> 8;
  this[offset + 3] = value & 0xff;
  return offset + 4;
};

Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));
});
Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'));
});

function checkIEEE754(buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range');
  if (offset < 0) throw new RangeError('Index out of range');
}

function writeFloat(buf, value, offset, littleEndian, noAssert) {
  value = +value;
  offset = offset >>> 0;

  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
  }

  ieee754.write(buf, value, offset, littleEndian, 23, 4);
  return offset + 4;
}

Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert);
};

Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert);
};

function writeDouble(buf, value, offset, littleEndian, noAssert) {
  value = +value;
  offset = offset >>> 0;

  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
  }

  ieee754.write(buf, value, offset, littleEndian, 52, 8);
  return offset + 8;
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert);
};

Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert);
}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)


Buffer.prototype.copy = function copy(target, targetStart, start, end) {
  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer');
  if (!start) start = 0;
  if (!end && end !== 0) end = this.length;
  if (targetStart >= target.length) targetStart = target.length;
  if (!targetStart) targetStart = 0;
  if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done

  if (end === start) return 0;
  if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions

  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds');
  }

  if (start < 0 || start >= this.length) throw new RangeError('Index out of range');
  if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?

  if (end > this.length) end = this.length;

  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start;
  }

  var len = end - start;

  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
    // Use built-in when available, missing from IE11
    this.copyWithin(targetStart, start, end);
  } else {
    Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);
  }

  return len;
}; // Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])


Buffer.prototype.fill = function fill(val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start;
      start = 0;
      end = this.length;
    } else if (typeof end === 'string') {
      encoding = end;
      end = this.length;
    }

    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string');
    }

    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding);
    }

    if (val.length === 1) {
      var code = val.charCodeAt(0);

      if (encoding === 'utf8' && code < 128 || encoding === 'latin1') {
        // Fast path: If `val` fits into a single byte, use that numeric value.
        val = code;
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255;
  } else if (typeof val === 'boolean') {
    val = Number(val);
  } // Invalid ranges are not set to a default, so can range check early.


  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index');
  }

  if (end <= start) {
    return this;
  }

  start = start >>> 0;
  end = end === undefined ? this.length : end >>> 0;
  if (!val) val = 0;
  var i;

  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val;
    }
  } else {
    var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);
    var len = bytes.length;

    if (len === 0) {
      throw new TypeError('The value "' + val + '" is invalid for argument "value"');
    }

    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len];
    }
  }

  return this;
}; // CUSTOM ERRORS
// =============
// Simplified versions from Node, changed for Buffer-only usage


var errors = {};

function E(sym, getMessage, Base) {
  errors[sym] = /*#__PURE__*/function (_Base) {
    _inherits(NodeError, _Base);

    var _super = _createSuper(NodeError);

    function NodeError() {
      var _this;

      _classCallCheck(this, NodeError);

      _this = _super.call(this);
      Object.defineProperty(_assertThisInitialized(_this), 'message', {
        value: getMessage.apply(_assertThisInitialized(_this), arguments),
        writable: true,
        configurable: true
      }); // Add the error code to the name to include it in the stack trace.

      _this.name = "".concat(_this.name, " [").concat(sym, "]"); // Access the stack to generate the error message including the error code
      // from the name.

      _this.stack; // eslint-disable-line no-unused-expressions
      // Reset the name to the actual name.

      delete _this.name;
      return _this;
    }

    _createClass(NodeError, [{
      key: "code",
      get: function get() {
        return sym;
      },
      set: function set(value) {
        Object.defineProperty(this, 'code', {
          configurable: true,
          enumerable: true,
          value: value,
          writable: true
        });
      }
    }, {
      key: "toString",
      value: function toString() {
        return "".concat(this.name, " [").concat(sym, "]: ").concat(this.message);
      }
    }]);

    return NodeError;
  }(Base);
}

E('ERR_BUFFER_OUT_OF_BOUNDS', function (name) {
  if (name) {
    return "".concat(name, " is outside of buffer bounds");
  }

  return 'Attempt to access memory outside buffer bounds';
}, RangeError);
E('ERR_INVALID_ARG_TYPE', function (name, actual) {
  return "The \"".concat(name, "\" argument must be of type number. Received type ").concat(_typeof(actual));
}, TypeError);
E('ERR_OUT_OF_RANGE', function (str, range, input) {
  var msg = "The value of \"".concat(str, "\" is out of range.");
  var received = input;

  if (Number.isInteger(input) && Math.abs(input) > Math.pow(2, 32)) {
    received = addNumericalSeparator(String(input));
  } else if (typeof input === 'bigint') {
    received = String(input);

    if (input > Math.pow(BigInt(2), BigInt(32)) || input < -Math.pow(BigInt(2), BigInt(32))) {
      received = addNumericalSeparator(received);
    }

    received += 'n';
  }

  msg += " It must be ".concat(range, ". Received ").concat(received);
  return msg;
}, RangeError);

function addNumericalSeparator(val) {
  var res = '';
  var i = val.length;
  var start = val[0] === '-' ? 1 : 0;

  for (; i >= start + 4; i -= 3) {
    res = "_".concat(val.slice(i - 3, i)).concat(res);
  }

  return "".concat(val.slice(0, i)).concat(res);
} // CHECK FUNCTIONS
// ===============


function checkBounds(buf, offset, byteLength) {
  validateNumber(offset, 'offset');

  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {
    boundsError(offset, buf.length - (byteLength + 1));
  }
}

function checkIntBI(value, min, max, buf, offset, byteLength) {
  if (value > max || value < min) {
    var n = typeof min === 'bigint' ? 'n' : '';
    var range;

    if (byteLength > 3) {
      if (min === 0 || min === BigInt(0)) {
        range = ">= 0".concat(n, " and < 2").concat(n, " ** ").concat((byteLength + 1) * 8).concat(n);
      } else {
        range = ">= -(2".concat(n, " ** ").concat((byteLength + 1) * 8 - 1).concat(n, ") and < 2 ** ") + "".concat((byteLength + 1) * 8 - 1).concat(n);
      }
    } else {
      range = ">= ".concat(min).concat(n, " and <= ").concat(max).concat(n);
    }

    throw new errors.ERR_OUT_OF_RANGE('value', range, value);
  }

  checkBounds(buf, offset, byteLength);
}

function validateNumber(value, name) {
  if (typeof value !== 'number') {
    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value);
  }
}

function boundsError(value, length, type) {
  if (Math.floor(value) !== value) {
    validateNumber(value, type);
    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value);
  }

  if (length < 0) {
    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();
  }

  throw new errors.ERR_OUT_OF_RANGE(type || 'offset', ">= ".concat(type ? 1 : 0, " and <= ").concat(length), value);
} // HELPER FUNCTIONS
// ================


var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;

function base64clean(str) {
  // Node takes equal signs as end of the Base64 encoding
  str = str.split('=')[0]; // Node strips out invalid characters like \n and \t from the string, base64-js does not

  str = str.trim().replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''

  if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not

  while (str.length % 4 !== 0) {
    str = str + '=';
  }

  return str;
}

function utf8ToBytes(string, units) {
  units = units || Infinity;
  var codePoint;
  var length = string.length;
  var leadSurrogate = null;
  var bytes = [];

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i); // is surrogate component

    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
          continue;
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
          continue;
        } // valid lead


        leadSurrogate = codePoint;
        continue;
      } // 2 leads in a row


      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
        leadSurrogate = codePoint;
        continue;
      } // valid surrogate pair


      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
    }

    leadSurrogate = null; // encode utf8

    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break;
      bytes.push(codePoint);
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break;
      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break;
      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break;
      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
    } else {
      throw new Error('Invalid code point');
    }
  }

  return bytes;
}

function asciiToBytes(str) {
  var byteArray = [];

  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF);
  }

  return byteArray;
}

function utf16leToBytes(str, units) {
  var c, hi, lo;
  var byteArray = [];

  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break;
    c = str.charCodeAt(i);
    hi = c >> 8;
    lo = c % 256;
    byteArray.push(lo);
    byteArray.push(hi);
  }

  return byteArray;
}

function base64ToBytes(str) {
  return base64.toByteArray(base64clean(str));
}

function blitBuffer(src, dst, offset, length) {
  var i;

  for (i = 0; i < length; ++i) {
    if (i + offset >= dst.length || i >= src.length) break;
    dst[i + offset] = src[i];
  }

  return i;
} // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166


function isInstance(obj, type) {
  return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;
}

function numberIsNaN(obj) {
  // For IE11 support
  return obj !== obj; // eslint-disable-line no-self-compare
} // Create lookup table for `toString('hex')`
// See: https://github.com/feross/buffer/issues/219


var hexSliceLookupTable = function () {
  var alphabet = '0123456789abcdef';
  var table = new Array(256);

  for (var i = 0; i < 16; ++i) {
    var i16 = i * 16;

    for (var j = 0; j < 16; ++j) {
      table[i16 + j] = alphabet[i] + alphabet[j];
    }
  }

  return table;
}(); // Return not function with Error if BigInt not supported


function defineBigIntMethod(fn) {
  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn;
}

function BufferBigIntNotDefined() {
  throw new Error('BigInt not supported');
}

/***/ }),

/***/ 5788:
/***/ ((module) => {

"use strict";

/*
  MIT License http://www.opensource.org/licenses/mit-license.php
  Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader

module.exports = function (useSourceMap) {
  var list = []; // return the list of modules as css string

  list.toString = function toString() {
    return this.map(function (item) {
      var content = cssWithMappingToString(item, useSourceMap);

      if (item[2]) {
        return '@media ' + item[2] + '{' + content + '}';
      } else {
        return content;
      }
    }).join('');
  }; // import a list of modules into the list


  list.i = function (modules, mediaQuery) {
    if (typeof modules === 'string') {
      modules = [[null, modules, '']];
    }

    var alreadyImportedModules = {};

    for (var i = 0; i < this.length; i++) {
      var id = this[i][0];

      if (id != null) {
        alreadyImportedModules[id] = true;
      }
    }

    for (i = 0; i < modules.length; i++) {
      var item = modules[i]; // skip already imported module
      // this implementation is not 100% perfect for weird media query combinations
      // when a module is imported multiple times with different media queries.
      // I hope this will never occur (Hey this way we have smaller bundles)

      if (item[0] == null || !alreadyImportedModules[item[0]]) {
        if (mediaQuery && !item[2]) {
          item[2] = mediaQuery;
        } else if (mediaQuery) {
          item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';
        }

        list.push(item);
      }
    }
  };

  return list;
};

function cssWithMappingToString(item, useSourceMap) {
  var content = item[1] || '';
  var cssMapping = item[3];

  if (!cssMapping) {
    return content;
  }

  if (useSourceMap && typeof btoa === 'function') {
    var sourceMapping = toComment(cssMapping);
    var sourceURLs = cssMapping.sources.map(function (source) {
      return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';
    });
    return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
  }

  return [content].join('\n');
} // Adapted from convert-source-map (MIT)


function toComment(sourceMap) {
  // eslint-disable-next-line no-undef
  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
  var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
  return '/*# ' + data + ' */';
}

/***/ }),

/***/ 2786:
/***/ ((module) => {

var GKIOLiteral = {};

GKIOLiteral.Int32 = function (value) {
  if (!(this instanceof GKIOLiteral.Int32)) return new GKIOLiteral.Int32(value);
  this.value = parseInt(value) || 0;
};

GKIOLiteral.Int32.prototype.toBuffer = function () {
  var res = Buffer.alloc(4);
  res.writeInt32LE(this.value, 0);
  return res;
};

GKIOLiteral.Int32.size = 4;

GKIOLiteral.Int32.fromBuffer = function (buffer, offset) {
  offset = offset || 0;
  return new GKIOLiteral.Int32(buffer.readInt32LE(offset));
};

GKIOLiteral.Int64 = function (value) {
  if (!(this instanceof GKIOLiteral.Int64)) return new GKIOLiteral.Int64(value);
  this.value = parseInt(value) || 0;
};

GKIOLiteral.Int64.prototype.toBuffer = function () {
  var res = Buffer.alloc(8);
  res.writeIntLE(this.value, 0, 8);
  return res;
};

GKIOLiteral.Int64.size = 8;

GKIOLiteral.Int64.fromBuffer = function (buffer, offset) {
  offset = offset || 0;
  return new GKIOLiteral.Int64(buffer.readIntLE(offset, 8));
};

GKIOLiteral.CString = function (size) {
  size = size || 256;

  GKIOLiteral.CString['' + size] = function (value) {
    if (!(this instanceof GKIOLiteral.CString['' + size])) return new GKIOLiteral.CString['' + size](value);
    this.value = value;
  };

  GKIOLiteral.CString['' + size].size = size;

  GKIOLiteral.CString['' + size].prototype.toBuffer = function () {
    return Buffer.from(this._value + '\0');
  };

  GKIOLiteral.CString['' + size].fromBuffer = function (buffer, offset) {
    offset = offset || 0;
    var newBuffer = buffer.slice(offset, size);
    var i = 0;

    while (newBuffer[i] != 0) {
      ++i;
    }

    newBuffer = newBuffer.slice(0, i);
    var s = newBuffer.toString();
    return new GKIOLiteral.CString['' + size](s);
  };

  Object.defineProperty(GKIOLiteral.CString['' + size].prototype, 'value', {
    set: function set(value) {
      this._value = value + '' || '';

      while (this._value.length < size) {
        this._value += '\0';
      }
    },
    get: function get() {
      return this._value.replace(/[\0]+/, '');
    }
  });
  return GKIOLiteral.CString['' + size];
};

module.exports = GKIOLiteral;

/***/ }),

/***/ 5541:
/***/ ((module) => {

function GKIOStruct() {
  if (!(this instanceof GKIOStruct)) return new GKIOStruct();
  this.properties = [];
}

GKIOStruct.prototype.property = function (type, key) {
  this.properties.push({
    type: type,
    key: key
  });
  return this;
};

GKIOStruct.prototype.declare = function () {
  var properties = this.properties;

  var res = function res(params) {
    var _this = this;

    if (!(this instanceof res)) return new res(params);
    params = params || {};
    properties.forEach(function (prop) {
      _this[prop.key] = params[prop.key];
    });
  };

  properties.forEach(function (prop) {
    Object.defineProperty(res.prototype, prop.key, {
      set: function set(value) {
        if (!value) this['__' + prop.key] = new prop.type();else {
          if (value instanceof prop.type) {
            this['__' + prop.key] = value;
          } else this['__' + prop.key] = new prop.type(value);
        }
      },
      get: function get() {
        return this['__' + prop.key];
      }
    });
  });

  res.prototype.toBuffer = function () {
    var _this2 = this;

    return Buffer.concat(properties.map(function (prop) {
      return _this2['__' + prop.key].toBuffer();
    }));
  };

  res.fromBuffer = function (buffer, offset) {
    offset = offset || 0;
    var params = properties.reduce(function (ac, prop) {
      ac[prop.key] = prop.type.fromBuffer(buffer, offset);
      offset += prop.type.size;
      return ac;
    }, {});
    return new res(params);
  };

  res.size = properties.reduce(function (ac, prop) {
    return ac + prop.type.size;
  }, 0);
  return res;
};

module.exports = GKIOStruct;

/***/ }),

/***/ 8405:
/***/ ((__unused_webpack_module, exports) => {

/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m;
  var eLen = nBytes * 8 - mLen - 1;
  var eMax = (1 << eLen) - 1;
  var eBias = eMax >> 1;
  var nBits = -7;
  var i = isLE ? nBytes - 1 : 0;
  var d = isLE ? -1 : 1;
  var s = buffer[offset + i];
  i += d;
  e = s & (1 << -nBits) - 1;
  s >>= -nBits;
  nBits += eLen;

  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & (1 << -nBits) - 1;
  e >>= -nBits;
  nBits += mLen;

  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias;
  } else if (e === eMax) {
    return m ? NaN : (s ? -1 : 1) * Infinity;
  } else {
    m = m + Math.pow(2, mLen);
    e = e - eBias;
  }

  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
};

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c;
  var eLen = nBytes * 8 - mLen - 1;
  var eMax = (1 << eLen) - 1;
  var eBias = eMax >> 1;
  var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
  var i = isLE ? 0 : nBytes - 1;
  var d = isLE ? 1 : -1;
  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
  value = Math.abs(value);

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0;
    e = eMax;
  } else {
    e = Math.floor(Math.log(value) / Math.LN2);

    if (value * (c = Math.pow(2, -e)) < 1) {
      e--;
      c *= 2;
    }

    if (e + eBias >= 1) {
      value += rt / c;
    } else {
      value += rt * Math.pow(2, 1 - eBias);
    }

    if (value * c >= 2) {
      e++;
      c /= 2;
    }

    if (e + eBias >= eMax) {
      m = 0;
      e = eMax;
    } else if (e + eBias >= 1) {
      m = (value * c - 1) * Math.pow(2, mLen);
      e = e + eBias;
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
      e = 0;
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = e << mLen | m;
  eLen += mLen;

  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128;
};

/***/ }),

/***/ 7008:
/***/ ((module) => {

/**
 * When source maps are enabled, `style-loader` uses a link element with a data-uri to
 * embed the css on the page. This breaks all relative urls because now they are relative to a
 * bundle instead of the current page.
 *
 * One solution is to only use full urls, but that may be impossible.
 *
 * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
 *
 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
 *
 */
module.exports = function (css) {
  // get current location
  var location = typeof window !== "undefined" && window.location;

  if (!location) {
    throw new Error("fixUrls requires window.location");
  } // blank or null?


  if (!css || typeof css !== "string") {
    return css;
  }

  var baseUrl = location.protocol + "//" + location.host;
  var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/"); // convert each url(...)

  /*
  This regular expression is just a way to recursively match brackets within
  a string.
  	 /url\s*\(  = Match on the word "url" with any whitespace after it and then a parens
     (  = Start a capturing group
       (?:  = Start a non-capturing group
           [^)(]  = Match anything that isn't a parentheses
           |  = OR
           \(  = Match a start parentheses
               (?:  = Start another non-capturing groups
                   [^)(]+  = Match anything that isn't a parentheses
                   |  = OR
                   \(  = Match a start parentheses
                       [^)(]*  = Match anything that isn't a parentheses
                   \)  = Match a end parentheses
               )  = End Group
               *\) = Match anything and then a close parens
           )  = Close non-capturing group
           *  = Match anything
        )  = Close capturing group
   \)  = Match a close parens
  	 /gi  = Get all matches, not the first.  Be case insensitive.
   */

  var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function (fullMatch, origUrl) {
    // strip quotes (if they exist)
    var unquotedOrigUrl = origUrl.trim().replace(/^"(.*)"$/, function (o, $1) {
      return $1;
    }).replace(/^'(.*)'$/, function (o, $1) {
      return $1;
    }); // already a full url? no change

    if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(unquotedOrigUrl)) {
      return fullMatch;
    } // convert the url to a full url


    var newUrl;

    if (unquotedOrigUrl.indexOf("//") === 0) {
      //TODO: should we add protocol?
      newUrl = unquotedOrigUrl;
    } else if (unquotedOrigUrl.indexOf("/") === 0) {
      // path should be relative to the base url
      newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
    } else {
      // path should be relative to current directory
      newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
    } // send back the fixed url(...)


    return "url(" + JSON.stringify(newUrl) + ")";
  }); // send back the fixed css

  return fixedCss;
};

/***/ }),

/***/ 7119:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".r64-app {\n    padding: 10px;\n    box-sizing: border-box;\n    display: flex;\n    flex-direction: column;\n}\n\n.r8-grid-ctn {\n    border: 1px solid #ccc;\n    flex-grow: 1;\n    text-align: center;\n    padding: 10px;\n}\n\n.r64-header {\n    padding: 5px 0;\n}\n.r64-header > *{\n    margin-bottom: 10px;\n}\n\n.r64-header > *,\n.r64-header-group > * {\n    display: inline-block;\n    vertical-align: middle;\n    margin-right: 10px;\n}\n\n.r64-header-group {\n    white-space: nowrap;\n}\n\n\n.r64-header .r64-device {\n    width: 150px;\n}\n\n.r64-header > .as-flexicon-button {\n    height: 30px;\n}\n\n\n.r8-grid {\n    position: relative;\n    touch-action: none;\n    display: inline-block;\n    user-select: none;\n\n}\n\n.r8-led {\n    position: absolute;\n    width: calc(12.5% - 10px);\n    height: calc(100% - 10px);\n    box-sizing: border-box;\n    background-color: black;\n    pointer-events: none;\n}\n\n.r8-led::before {\n    content: \"\";\n    display: block;\n    background-color: currentColor;\n    width: 100%;\n    height: 100%;\n    border: 1px solid gray;\n    pointer-events: none;\n}\n", ""]);



/***/ }),

/***/ 8042:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-autocomplete-input {\n    display: inline-block;\n    position: relative;\n    box-sizing: border-box;\n    border: solid 1px #d6d6d6;\n}\n\n.absol-autocomplete-input.absol-disabled {\n    pointer-events: none;\n    color: rgb(84, 84, 84);\n    background-color: rgb(235, 235, 228);\n}\n\n.absol-autocomplete-input>input {\n    min-width: 100%;\n    min-height: 100%;\n    box-sizing: border-box;\n    background-color: transparent;\n    border: none;\n}\n\n\n.absol-autocomplete-input-dropdown {\n    position: absolute;\n    left: 0;\n    top: 100%;\n    min-width: 100%;\n    z-index: 1005;\n    border: solid 1px rgb(169, 169, 169);\n    box-sizing: border-box;\n    background-color: white;\n}\n\n.absol-autocomplete-input-dropdown .as-bscroller{\n    overflow-y: auto;\n}\n\n.absol-autocomplete-input-dropdown.top {\n    top: auto;\n    bottom: 100%;\n}\n\n.absol-autocomplete-input-item {\n    height: 30px;\n}\n\n.absol-autocomplete-input-item:hover {\n    background-color: rgba(169, 169, 169, 0.18605);\n    cursor: pointer;\n}\n\n.absol-autocomplete-input-item.active,\n.absol-autocomplete-input-item.active:hover {\n    background-color: rgba(169, 169, 169, 0.37209);\n}\n\n.absol-autocomplete-input-item-text {\n    line-height: 30px;\n    margin-left: 5px;\n    margin-right: 5px;\n}", ""]);



/***/ }),

/***/ 3608:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-has-board-table-drag,\n.as-has-board-table-drag * {\n    cursor: grabbing;\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    -ms-user-select: none !important;\n    user-select: none !important;\n}\n\n\n\n.as-board-table {\n    overflow: visible;\n    position: relative;\n\n}\n\n.as-board-drag-zone {\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    -ms-user-select: none !important;\n    user-select: none !important;\n}\n\n\n.as-board {\n    white-space: normal;\n    box-sizing: border-box;\n    position: relative;\n    vertical-align: middle;\n}\n\n/**\nBug note: don't put fixed position element to a element which has transform\n */\n.as-board-moving {\n    transform-origin: 30% 55%;\n    transform: rotate(5deg);\n    transition: transform 0.05s;\n    user-select: none;\n    pointer-events: none;\n    position: fixed !important;\n    z-index: 2000;\n}\n\n\n.as-board-place-holder {\n    opacity: 0.3;\n}\n\n.as-board-table-prevent-context {\n    position: fixed;\n    --x: -10000px;\n    --y: -10000px;\n    left: calc(var(--x) - 100px);\n    top: calc(var(--y) - 100px);\n    opacity: 0;\n    z-index: 100000000;\n    width: 200px;\n    height: 200px;\n    cursor: default;\n    -webkit-user-select: none;\n    -webkit-touch-callout: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    -o-user-select: none;\n}", ""]);



/***/ }),

/***/ 9001:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/* OLD module */\n\n.absol-bscroller {\n    scrollbar-width: thin;\n    scrollbar-color: rgba(151, 151, 151, 0.4) rgba(220, 220, 220, 0.4);\n    overflow: auto;\n}\n\n\n.absol-bscroller::-webkit-scrollbar {\n    width: 6px;\n    height: 6px;\n}\n\n.absol-bscroller::-webkit-scrollbar-track {\n    background: rgba(220, 220, 220, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb {\n    background: rgba(182, 182, 182, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb:hover {\n    background: rgba(32, 32, 32, 0.4);\n}\n\n.absol-bscroller::-webkit-scrollbar-thumb:active {\n    background: rgba(13, 13, 13, 0.6);\n}\n\n.absol-bscroller.dark,\n.dark .absol-bscroller {\n    scrollbar-color: rgba(104, 104, 104, 0.4) rgba(35, 35, 35, 0.4);\n}\n\n\n.absol-bscroller.dark::-webkit-scrollbar-track,\n.dark .absol-bscroller::-webkit-scrollbar-track {\n    background: rgba(35, 35, 35, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb,\n.dark .absol-bscroller::-webkit-scrollbar-thumb {\n    background: rgba(73, 73, 73, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb:hover,\n.dark .absol-bscroller::-webkit-scrollbar-thumb:hover {\n    background: rgba(223, 223, 223, 0.4);\n}\n\n.absol-bscroller.dark::-webkit-scrollbar-thumb:active,\n.dark .absol-bscroller::-webkit-scrollbar-thumb:active {\n    background: rgba(242, 242, 242, 0.6);\n}\n\n/*******************************************/\n.as-bscroller {\n    scrollbar-width: thin;\n    scrollbar-color: rgba(151, 151, 151, 0.4) rgba(220, 220, 220, 0.4);\n}\n\n\n.as-bscroller::-webkit-scrollbar {\n    width: 6px;\n    height: 6px;\n}\n\n.as-bscroller::-webkit-scrollbar-track {\n    background: rgba(220, 220, 220, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb {\n    background: rgba(182, 182, 182, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb:hover {\n    background: rgba(32, 32, 32, 0.4);\n}\n\n.as-bscroller::-webkit-scrollbar-thumb:active {\n    background: rgba(13, 13, 13, 0.6);\n}\n\n.as-bscroller.dark,\n.dark .as-bscroller,\n.as-dark .as-bscroller,\n.as-dark.as-bscroller\n{\n    scrollbar-color: rgba(104, 104, 104, 0.4) rgba(150, 150, 150, 0.4);\n}\n\n\n.as-bscroller.dark::-webkit-scrollbar-track,\n.dark .as-bscroller::-webkit-scrollbar-track,\n.as-dark .as-bscroller::-webkit-scrollbar-track,\n.as-dark.as-bscroller::-webkit-scrollbar-track\n{\n    background: rgba(150, 150, 150, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb,\n.dark .as-bscroller::-webkit-scrollbar-thumb,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb\n{\n    background: rgba(104, 104, 104, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb:hover,\n.dark .as-bscroller::-webkit-scrollbar-thumb:hover,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb:hover,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb:hover\n{\n    background: rgba(223, 223, 223, 0.4);\n}\n\n.as-bscroller.dark::-webkit-scrollbar-thumb:active,\n.dark .as-bscroller::-webkit-scrollbar-thumb:active,\n.as-dark .as-bscroller::-webkit-scrollbar-thumb:active,\n.as-dark.as-bscroller::-webkit-scrollbar-thumb:active\n{\n    background: rgba(242, 242, 242, 0.6);\n}", ""]);



/***/ }),

/***/ 1682:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-button-array {\n    font-size: 14px;\n    border: 1px solid #006ce5;\n    display: inline-block;\n    border-radius: 0.2em;\n    overflow: hidden;\n}\n\n.as-button-array-item {\n    text-align: center;\n    font-size: inherit;\n    height: 2em;\n    border: none;\n    box-sizing: border-box;\n    padding-left: 0.35714em;\n    padding-right: 0.35714em;\n    outline: none;\n    color: #006ce5;\n    background-color: white;\n    border-radius: 0;\n    transition: background-color 0.1s, color 0.1s;\n    margin: 0;\n}\n\n.as-button-array-item:not(:first-child) {\n    border-left: 1px solid #006ce5;\n    border-right: none;\n}\n\n\n.as-button-array-item.as-active {\n    color: white;\n    background-color: #006ce5;\n}", ""]);



/***/ }),

/***/ 1843:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-button-range-wrapper {\n    border-top: 1px solid rgb(209, 209, 213);\n    border-bottom: 1px solid rgb(209, 209, 213);\n}\n\n.as-button-range {\n    position: relative;\n    overflow-y: hidden;\n    height: var(--height);\n    box-sizing: border-box;\n    font-family: Arial, Helvetica, sans-serif;\n    --underline-left: 0;\n    --underline-width: 0;\n    --height: 2em;\n}\n\n.as-button-range-scroller {\n    font-size: inherit;\n    height: calc(var(--height) + 17px);\n    box-sizing: border-box;\n    overflow-x: scroll;\n    position: absolute;\n    top: 0;\n    left: 0.5em;\n    right: 0.5em;\n    white-space: nowrap;\n}\n\n.as-button-range-scroller::after {\n    content: \"\";\n    position: absolute;\n    left: var(--underline-left);\n    width: var(--underline-width);\n    height: 0.2em;\n    top: calc(var(--height) - 0.2em);\n    background-color: rgb(0, 106, 255);\n    transition: left 0.2s, width 0.2s;\n}\n\n.as-button-range-left-ctn,\n.as-button-range-right-ctn {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n}\n\n.as-button-range-right-ctn::after,\n.as-button-range-left-ctn::before {\n    content: \"\";\n    height: 100%;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-button-range-left-ctn {\n    left: 0;\n}\n\n.as-button-range-right-ctn {\n    right: 0;\n}\n\n.as-button-range-right-btn,\n.as-button-range-left-btn {\n    font-size: inherit;\n    padding: 0;\n    margin: 0;\n    display: inline-block;\n    vertical-align: middle;\n    border: none;\n    outline: none;\n    color: rgb(0, 106, 266);\n    background-color: rgba(255, 255, 255, 0.5);\n    border-radius: 0.5em;\n    overflow: hidden;\n}\n\n.as-button-range-left-btn {\n    -webkit-box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n    -moz-box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n    box-shadow: 1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n}\n\n.as-button-range-right-btn {\n    -webkit-box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n    -moz-box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n    box-shadow: -1em 2px 1.5em -1em rgba(255, 255, 255, 0.62);\n}\n\n.as-button-range-right-btn polygon,\n.as-button-range-left-btn polygon {\n    fill: #2488FF;\n}\n\n.as-button-range-right-btn:disabled,\n.as-button-range-left-btn:disabled {\n    display: none;\n}\n\n.as-button-range-left-btn > svg,\n.as-button-range-right-btn > svg {\n    width: 1.25em;\n    height: 1.25em;\n    margin-left: -0.25em;\n    margin-right: -0.25em;\n    vertical-align: middle;\n}\n\n\n.as-button-range-item {\n    outline: none;\n    font-size: inherit;\n    padding: 0 0.5em;\n    margin: 0;\n    height: var(--height);\n    border: none;\n    background-color: transparent;\n    color: black;\n}\n\n.as-button-range-item.as-active {\n    color: rgb(87, 157, 255);\n}", ""]);



/***/ }),

/***/ 6106:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-calendar-input {\n    font-size: 14px;\n    width: 7em;\n    height: 2em;\n    box-sizing: content-box;\n    display: inline-block;\n    vertical-align: middle;\n    border: solid 1px #d6d6d6;\n    border-radius: 0.2em;\n}\n\n.absol-calendar-input>input {\n    text-align: center;\n    width: 100%;\n    height: 100%;\n    outline: none;\n    cursor: pointer;\n    border: none;\n    background: transparent;\n    padding: 0;\n}\n\n.absol-calendar-input>input:hover,\n.absol-calendar-input>input:focus {\n    color: red;\n}\n\n.absol-calendar-input.absol-disabled {\n    pointer-events: none;\n}\n\n.absol-calendar-input.absol-disabled input {\n    color: rgb(169, 169, 171);\n}", ""]);



/***/ }),

/***/ 3368:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/** align middle in table cell **/\ntd > .absol-checkbox:first-child:last-child,\ntd > .absol-checkbox.as-no-label:first-child:last-child .as-checkbox-input{\n    display: block;\n    margin: auto;\n}\n\n.absol-checkbox {\n    display: inline-block;\n    vertical-align: middle;\n    cursor: pointer;\n    user-select: none;\n    line-height: 16px;\n}\n\n.absol-checkbox.right > .absol-checkbox-label.as-right {\n    display: none;\n}\n\n\n.absol-checkbox:not(.right) > .absol-checkbox-label.as-left {\n    display: none;\n}\n\n.absol-checkbox-label {\n    vertical-align: middle;\n    display: inline-block;\n}\n\n\n.absol-checkbox-label.as-left {\n    padding-right: 0.3em;\n}\n\n\n.absol-checkbox-label.as-right {\n    padding-left: 0.3em;\n}\n\n.absol-checkbox.as-no-label {\n    width: calc(1em + 2px);\n    height: calc(1em + 2px);\n}\n\n\n.absol-checkbox.as-no-label .absol-checkbox-label {\n    display: none;\n}\n\n.absol-checkbox.as-no-label .as-checkbox-input {\n    display: block;\n}\n\n.absol-checkbox.as-disabled .absol-checkbox-label {\n    color: #777;\n}\n", ""]);



/***/ }),

/***/ 2943:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-checkbox-button{\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-checkbox-button .absol-checkbox-icon{\n    display: block;\n}", ""]);



/***/ }),

/***/ 6241:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --candy-border-color: #929292;\n    --candy-hover-background-color: #eeeee9;\n    --candy-disabled-background-color: #ebebe4;\n}\n\nlabel.as-checkbox-input {\n    display: inline-block;\n    position: relative;\n    width: calc(1em + 2px);\n    height: calc(1em + 2px);\n    cursor: pointer;\n    font-size: inherit;\n    box-sizing: border-box;\n    vertical-align: middle;\n    border-radius: 0.25em;\n    padding: 0;\n    margin: 0; /*fix boostrap override*/\n}\n\nlabel.as-checkbox-input:hover .bound,\n.absol-checkbox:hover .bound {\n    fill: var(--candy-hover-background-color);\n}\n\n.as-checkbox-input .tick,\n.as-checkbox-input .minus {\n    fill: #606060;\n}\n\n\n.as-checkbox-input input.as-checkbox-input-value {\n    font-size: inherit;\n    position: absolute;\n    right: 100%;\n    top: 0;\n    opacity: 0.0;\n    z-index: -100000000000;\n}\n\ninput.as-checkbox-input-value:not(:checked) ~ svg .tick {\n    opacity: 0;\n}\n\n.as-checkbox-input.as-has-minus .minus {\n    opacity: 1;\n}\n\n.as-checkbox-input .minus,\ninput.as-checkbox-input-value:checked ~ svg .minus {\n    opacity: 0;\n}\n\n\nlabel.as-checkbox-input .bound {\n    stroke: var(--candy-border-color);\n    fill: white;\n}\n\nlabel.as-checkbox-input .tick {\n    opacity: 1;\n    transition: opacity 0.1s;\n}\n\nlabel.as-checkbox-input .minus {\n    transition: opacity 0.1s;\n}\n\nlabel.as-checkbox-input.as-disabled > svg .bound,\nlabel.as-checkbox-input.as-disabled:hover > svg .bound {\n    stroke: #929292;\n    fill: #ebebe4;\n}\n\n\n.as-checkbox-input > svg {\n    width: 100%;\n    height: 100%;\n}\n\n", ""]);



/***/ }),

/***/ 6172:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-check-list-box.as-select-list-box {\n    width: calc(var(--select-list-estimate-width) + 2px + 5px + 23px + 7px);\n}\n\n.as-check-list-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n    max-height: calc(var(--max-height) - 38px - 29px);\n}\n\n.as-check-list-box.as-select-list-box .as-select-list-box-scroller {\n    max-height: calc(var(--max-height) - 29px);\n}\n\n\n.as-select-list-box-footer {\n    height: 29px;\n    border-top: 1px solid #dddddd;\n    box-sizing: border-box;\n    padding-left: 0.35em;\n    white-space: nowrap;\n    position: relative;\n}\n\n.as-select-list-box-footer > *,\n.as-select-list-box-footer::before,\n.as-select-list-box-footer-right::before,\n.as-select-list-box-footer-right > * {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-select-list-box-footer-right::before,\n.as-select-list-box-footer::before {\n    content: \"\";\n    height: 100%;\n}\n\n.as-select-list-box-footer > *:not(:last-child) {\n    margin-right: 30px;\n}\n\n.as-select-list-box-footer .absol-checkbox-label.as-right {\n    padding-left: 0.35em;\n}\n\n.as-select-list-box-footer-right {\n    position: absolute;\n    right: 5px;\n    top: 0;\n    height: 100%;\n}\n\n.as-select-list-box-footer a {\n    cursor: pointer;\n}\n\n.as-select-list-box-footer a:hover {\n    color: #1da1ff;\n}", ""]);



/***/ }),

/***/ 2254:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-check-list-item {\n    padding-left: 0.35em;\n    height: 25px;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.as-check-list-item-checkbox {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-selectlist-item.as-check-list-item > span {\n    display: inline-block;\n    vertical-align: middle;\n    line-height: 25px;\n}\n\n.absol-selectlist-item.as-check-list-item .absol-selectlist-item-desc {\n    line-height: 25px;\n}", ""]);



/***/ }),

/***/ 5021:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-select-list-box-page > .as-check-tree-item {\n    width: 100%;\n}\n\n\n.as-check-tree-box.as-no-transition label.as-checkbox-input .minus ,\n.as-check-tree-box.as-no-transition label.as-checkbox-input .tick{\n    transition: none;\n}\n\n\n.as-check-tree-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n    max-height: calc(var(--max-height) - 38px - 29px);\n}\n\n.as-check-tree-box.as-select-list-box .as-select-list-box-scroller {\n    max-height: calc(var(--max-height) - 29px);\n}\n", ""]);



/***/ }),

/***/ 4334:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-check-tree-item {\n    font-size: 14px;\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    height: 28px;\n}\n\n.as-check-tree-item:focus {\n    background-color: unset;\n}\n\n.as-check-tree-item:hover:focus {\n    background-color: rgba(169, 169, 172, 0.1);\n}\n\n.as-check-tree-item .as-checkbox-input {\n    margin-right: 0.35em;\n}", ""]);



/***/ }),

/***/ 3909:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-chrome-calendar {\n    display: inline-block;\n    font-family: Arial;\n    font-size: 14px;\n    padding: 0.6em;\n    border: solid 1px rgb(191, 191, 191);\n    box-shadow: 1px 1px 2px rgb(240, 240, 240);\n    z-index: 100;\n    touch-action: manipulation;\n    user-select: none;\n    background-color: rgb(255, 255, 255);\n    white-space: initial;\n}\n\n\n.absol-chrome-calendar-header {\n    white-space: nowrap;\n    position: relative;\n}\n\n\n.absol-chrome-calendar-title {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-chrome-calendar-header-buttons {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n}\n\n.absol-chrome-calendar-header-buttons > button {\n    font-size: 1em;\n    width: 1.5em;\n    height: 1.5em;\n    padding: 0;\n    border-radius: 0.2em;\n    border: solid 1px rgb(167, 167, 167);\n    background: linear-gradient(rgb(240, 240, 240), rgb(233, 233, 233), rgb(223, 223, 223));\n    cursor: pointer;\n    outline: none;\n    box-shadow: 1px 1px 2px #aaa;\n    color: rgb(110, 110, 110);\n}\n\n.absol-chrome-calendar-header-buttons > button:nth-child(2) {\n    margin-left: 0.2em;\n    margin-right: 0.2em;\n}\n\n\n.absol-chrome-calendar-header-buttons > button:active {\n    box-shadow: 0px 0px 2px #aaa;\n\n}\n\n.absol-chrome-calendar:not(.view-era)  .absol-chrome-calendar-title {\n    cursor: pointer;\n}\n\n.absol-chrome-calendar.as-level-day  .absol-chrome-calendar-title::after{\n    content: \"\\25BC\";\n}\n\n\n.absol-chrome-calendar-title > span {\n    line-height: 1.5em;\n}\n\n.absol-chrome-calendar-instance {\n    margin-top: 1em;\n    border: solid 1px rgb(190, 190, 190);\n    width: 14em;\n    position: relative;\n    height: calc(8.4em + 3px);\n    overflow: hidden;\n    /*border*/\n}\n\n.absol-chrome-calendar-dayofweek {\n    background-color: rgb(241, 241, 241);\n    height: 1.2em;\n    white-space: nowrap;\n    position: absolute;\n    left: 0;\n    right: 0;\n    z-index: 10;\n}\n\n.absol-chrome-calendar-dayofweek > div {\n    text-align: center;\n    line-height: 1.2;\n    display: inline-block;\n    width: 14.2857142857%;\n    border-bottom: solid 1px rgb(191, 191, 191);\n    box-sizing: border-box;\n}\n\n.absol-chrome-calendar-month-animation-container {\n    position: absolute;\n    transition: top 0.2s;\n}\n\n.absol-chrome-calendar-month-animation-container.old {\n    z-index: 7;\n    /* background: red; */\n}\n\n.absol-chrome-calendar-month-animation-container.new {\n    z-index: 8;\n    /* background: blue; */\n}\n\n.absol-chrome-calendar-month-animation-container > .absol-chrome-calendar-month {\n    width: 100%;\n    height: 100%;\n    margin-top: -1px;\n}\n\n\n.absol-chrome-calendar-month {\n    display: table;\n    width: 100%;\n    margin-top: 1.2em;\n    background-color: white;\n    /*for header*/\n}\n\n.absol-chrome-calendar-week-in-mounth {\n    display: table-row;\n    height: 1.2em;\n}\n\n.absol-chrome-calendar-week-in-mounth > div {\n    display: table-cell;\n    text-align: right;\n    padding-right: 0.4em;\n    cursor: pointer;\n}\n\n.absol-chrome-calendar-week-in-mounth > div:hover {\n    background-color: rgb(224, 245, 256);\n}\n\n\n.absol-chrome-calendar-not-in-month {\n    color: rgb(190, 190, 190);\n}\n\n.absol-chrome-calendar-today {\n    border: inset 1px rgb(191, 191, 191);\n    box-sizing: border-box;\n}\n\n.absol-chrome-calendar-selected {\n    background-color: rgb(188, 205, 236);\n}\n\n.absol-chrome-calendar-years {\n    width: 100%;\n    height: 100%;\n}\n\n\n.absol-chrome-calendar:not(.view-year) .absol-chrome-calendar-years {\n    /* display: none; */\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -10000;\n    opacity: 0;\n    visibility: hidden;\n}\n\n.absol-chrome-calendar.view-year .absol-chrome-calendar-instance {\n    border-color: rgb(77, 114, 254)\n}\n\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-month,\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-dayofweek,\n.absol-chrome-calendar:not(.view-era) .absol-chrome-calendar-era {\n    display: none;\n}\n\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-title {\n    color: rgb(191, 191, 191);\n}\n\n\n.absol-chrome-calendar-year {\n    overflow: hidden;\n}\n\n\n.absol-chrome-calendar-year-head {\n    background-color: rgb(241, 241, 241);\n    border-bottom: solid 1px rgb(191, 191, 191);\n    height: 1.5em;\n    text-align: center;\n    line-height: 1.5em;\n}\n\n\n.absol-chrome-calendar-year:last-child .absol-chrome-calendar-year-head {\n    border-bottom: solid 1px rgb(191, 191, 191);\n}\n\n.absol-chrome-calendar-year.start-opening .absol-chrome-calendar-year-mounths,\n.absol-chrome-calendar-year.closing .absol-chrome-calendar-year-mounths {\n    margin-bottom: -6em;\n    transition: margin-bottom linear 0.1s;\n}\n\n.absol-chrome-calendar-year.opening .absol-chrome-calendar-year-mounths,\n.absol-chrome-calendar-year.start-closing .absol-chrome-calendar-year-mounths {\n    margin-bottom: 0;\n    transition: margin-bottom linear 0.1s;\n\n}\n\n.absol-chrome-calendar-year-mounths {\n    width: 100%;\n    display: table;\n    height: 6em;\n    border-bottom: solid 1px rgb(191, 191, 191);\n}\n\n.absol-chrome-calendar-year-row-months {\n    display: table-row;\n}\n\n.absol-chrome-calendar-year-month {\n    text-align: center;\n    display: table-cell;\n    vertical-align: middle;\n}\n\n.absol-chrome-calendar-year-month:hover,\n.absol-chrome-calendar-era-year:hover {\n    background-color: rgb(224, 245, 256);\n}\n\n\n.absol-chrome-calendar-years:hover .absol-scrollbar {\n    opacity: 1;\n\n}\n\n.absol-chrome-calendar-years .absol-scrollbar {\n    background-color: rgba(169, 169, 172, 0.2);\n    opacity: 0;\n    transition: opacity 0.2s;\n}\n\n.absol-chrome-calendar-date-disabled,\n.absol-chrome-calendar-era-year.absol-chrome-calendar-date-disabled{\n    color: rgb(240, 230, 230);\n    pointer-events: none;\n    cursor: not-allowed;\n}\n\nbutton.absol-chrome-calendar-button-disabled,\n.absol-chrome-calendar button:disabled {\n    color: rgb(220, 210, 210);\n    pointer-events: none;\n    box-shadow: none;\n    cursor: not-allowed;\n}\n\n.absol-chrome-calendar-era {\n    position: absolute;\n    left: 0;\n    top: 0;\n    z-index: 1000000;\n    /*width: 100%;*/\n    /*height: 100%; */\n    width: calc(196px + 17px);\n    box-sizing: border-box;\n    height: 100%;\n    background-color: white;\n    box-shadow: 0px 0px 1px 0 black;\n    overflow-y: scroll;\n    font-size: inherit;\n}\n\n.absol-chrome-calendar-era-row {\n    width: 14em;\n    height: 25%;\n    white-space: nowrap;\n    font-size: inherit;\n}\n\n.absol-chrome-calendar-era-year {\n    display: inline-block;\n    vertical-align: top;\n    height: 100%;\n    width: 25%;\n    text-align: center;\n    line-height: 2.1em;\n    font-size: inherit;\n    color: rgb(190, 190, 190);\n}\n\n\n.absol-chrome-calendar-in-decade:not(.absol-chrome-calendar-date-disabled) {\n    color: black;\n}\n\n/*.absol-chrome-calendar-era*/", ""]);



/***/ }),

/***/ 4142:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".ac-time-input.as-time-24-input {\n    width: 13em;\n}\n\n\n.as-chrome-time-24-picker .as-chrome-time-picker-h24 {\n    width: 120px;\n}\n\n.as-chrome-time-24-picker-tomorrow-text {\n    display: none;\n}\n\n.as-in-tomorrow.as-chrome-time-picker-btn .as-chrome-time-24-picker-tomorrow-text {\n    display: initial;\n}\n\n.as-chrome-time-24-picker .as-chrome-time-picker-btn:disabled {\n    pointer-events: none;\n}", ""]);



/***/ }),

/***/ 5009:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-chrome-time-picker {\n    box-sizing: border-box;\n    vertical-align: top;\n    display: inline-block;\n    font-family: Arial;\n    font-size: 14px;\n    padding: 0.6em;\n    border: solid 1px rgb(191, 191, 191);\n    box-shadow: 1px 1px 2px rgb(240, 240, 240);\n    z-index: 100;\n    touch-action: manipulation;\n    user-select: none;\n    background-color: rgb(255, 255, 255);\n    /*width: calc(160px + 1.2em);*/\n    height: 176px;\n    white-space: nowrap;\n}\n\n.as-chrome-time-picker.as-24h-clock .as-chrome-time-picker-scroller-h12,\n.as-chrome-time-picker:not(.as-24h-clock) .as-chrome-time-picker-scroller-h24,\n.as-chrome-time-picker.as-24h-clock .as-chrome-time-picker-period {\n    display: none;\n}\n\n.as-chrome-time-picker-period {\n    padding-top: 20px;\n    padding-bottom: 20px;\n}\n\n\n.as-chrome-time-picker > div:not(:first-child) {\n    margin-left: 5px;\n}\n\n\n.as-chrome-time-picker-scroller {\n    position: relative;\n    padding-top: 20px;\n    padding-bottom: 20px;\n    display: inline-block;\n    vertical-align: top;\n    height: 100%;\n    box-sizing: border-box;\n}\n\n.as-chrome-time-picker-scroller-up,\n.as-chrome-time-picker-scroller-down {\n    position: absolute;\n    left: 0;\n    width: 100%;\n    height: 20px;\n    padding: 0;\n    box-sizing: border-box;\n    background-color: transparent;\n    border-radius: 3px;\n    border: none;\n    font-size: 1.5em;\n}\n\n.as-chrome-time-picker-scroller-up:hover,\n.as-chrome-time-picker-scroller-down:hover {\n    background-color: rgba(169, 169, 169, 0.2);\n}\n\n.as-chrome-time-picker-scroller-up {\n    top: -5px;\n}\n\n.as-chrome-time-picker-scroller-down {\n    bottom: -5px;\n}\n\n\n.as-chrome-time-picker-viewport {\n    width: 50px;\n    height: 100%;\n    overflow: hidden;\n    white-space: normal;\n    display: inline-block;\n    vertical-align: top;\n}\n\n\n.as-chrome-time-picker-list {\n    height: 100%;\n    overflow-y: scroll;\n    width: calc(100% + 18px);\n}\n\n.as-chrome-time-picker-btn {\n    font-size: inherit;\n    height: 28px;\n    width: 100%;\n    padding: 0;\n    border: none;\n    background-color: transparent;\n}\n\n.as-chrome-time-picker-btn:hover {\n    background-color: rgb(224, 245, 256);\n}\n\n.as-chrome-time-picker-btn.as-selected {\n    background-color: rgb(188, 205, 236);\n    border-radius: 3px;\n}\n\n.as-chrome-time-picker-btn > span {\n    font-size: 16px;\n}\n\n\n\n", ""]);



/***/ }),

/***/ 9680:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-circle-section-label {\n    position: relative;\n    -webkit-print-color-adjust: exact;\n    /*friendly print*/\n}\n\n.as-circle-section-label-text {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    font-size: 1em;\n    padding-right: 2.5em;\n    color: white;\n    font-weight: bold;\n    z-index: 2;\n}\n\n\n.as-circle-section-label-index {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n    color: rgb(30, 162, 245);\n    font-weight: 900;\n    z-index: 2;\n}\n\n\n@media print {\n    .as-circle-section-label-text {\n        color: white !important;\n    }\n\n    .as-circle-section-label-index {\n        color: rgb(30, 162, 245) !important;\n    }\n}\n\n\n.as-circle-section-label-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    z-index: 1;\n}\n\n.as-circle-section-label-background>svg {\n    display: block;\n}\n\n.as-circle-section-label-index-box {\n    stroke: rgb(129, 211, 246);\n    fill: white;\n    stroke-width: 2.5;\n}\n\n.as-circle-section-label-arrow {\n    stroke: rgb(30, 162, 245);\n    fill: none;\n    stroke-linecap: round;\n}\n\n.as-circle-section-label-text-box {\n    fill: rgb(30, 162, 245);\n    stroke: none;\n}\n\n.as-circle-section-label-arrow-marker-path {\n    fill: rgb(30, 162, 245);\n    stroke: none;\n}", ""]);



/***/ }),

/***/ 4273:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-context-menu-hook {\n    position: absolute;\n    z-index: -100000;\n    width: 14px;\n    height: 14px;\n    top: 0;\n    opacity: 0;\n    resize: none;\n    cursor: default;\n}\n\n.absol-context-hinge-fixed-container {\n    position: fixed;\n    left: 0;\n    top: 0;\n    z-index: 1000000001;\n}\n\n.absol-context-hinge {\n    position: relative;\n    width: 0;\n    height: 0;\n}\n\n.absol-context-hinge > .absol-context-menu {\n    position: absolute;\n    top: -10000px;\n    left: -10000px;\n    visibility: hidden;\n    z-index: 55;\n    display: inline-block;\n}\n\n.absol-context-hinge .absol-vmenu,\n.absol-context-hinge .absol-hmenu {\n    padding-top: 0.4em;\n    padding-bottom: 0.4em;\n    /* background-color: rgb(37, 37, 38);\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(7, 7, 7, 1);\n    -moz-box-shadow: 2px 2px 9px 0px rgb(7, 7, 7, 1);\n    box-shadow: 2px 2px 9px 0px rgba(7, 7, 7, 1); */\n    color: black;\n    background-color: rgb(252, 252, 255);\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n.absol-context-menu-anchor.dark .absol-hmenu,\n.absol-context-menu-anchor.dark .absol-vmenu,\n.dark .absol-context-menu-anchor .absol-hmenu,\n.dark .absol-context-menu-anchor .absol-vmenu {\n    background-color: rgb(37, 37, 38);\n}\n\n\n.absol-context-menu-anchor {\n    position: fixed;\n    z-index: -1000;\n    left: 0;\n    top: 0;\n    display: block;\n    opacity: 0;\n    visibility: hidden;\n    font-size: inherit;\n}\n\n.absol-context-menu-anchor > textarea {\n    width: 160px;\n    height: 160px;\n    margin: 0;\n    resize: none;\n    border: none;\n    opacity: 0;\n    cursor: default;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.absol-context-menu-anchor.absol-active {\n    z-index: 100000000;\n    opacity: 1;\n    visibility: visible;\n}\n\n\n.absol-context-menu-anchor .absol-vmenu,\n.absol-context-menu-anchor .absol-hmenu {\n    padding-top: 0.4em;\n    padding-bottom: 0.4em;\n    color: black;\n    background-color: rgb(252, 252, 255);\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n\n.as-system-context-menu {\n    /** nothing here, to define use system context menu**/\n}\n\n.as-context-menu-ctn{\n    font-size: var(--as-context-menu-font-size);\n    font-family: var(--as-input-font-family);\n}\n\n.as-context-menu-ctn.as-anchor-modal {\n    position: fixed;\n    z-index: 8000000;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    box-sizing: border-box;\n    text-align: center;\n    background-color: rgba(155, 155, 155, 0.3);\n}\n\n.as-context-menu-ctn.as-anchor-modal::before,\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu {\n    display: inline-block;\n    vertical-align: middle;\n    white-space: nowrap;\n}\n\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu {\n    text-align: left;\n}\n\n\n.as-context-menu-ctn.as-anchor-modal::before {\n    content: \"\";\n    height: 100%;\n}\n\n.as-context-menu-ctn.as-anchor-modal > .absol-vmenu {\n    min-width: 70%;\n    max-width: calc(100% - 10px);\n    max-height: calc(100% - 10px);\n}", ""]);



/***/ }),

/***/ 6048:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-countdown-clock {\n    width: 7em;\n    height: 7em;\n    border-radius: 50%;\n    position: relative;\n    display:inline-block;\n    font-family: Consolas;\n}\n\n.as-countdown-clock-border-wrapper{\n    pointer-events:none;\n    position: absolute;\n    box-sizing: border-box;\n    left: 0.2em;\n    right: 0.2em;\n    top: 0.2em;\n    bottom: 0.2em;\n    filter: drop-shadow(0 0px 1px rgb(100, 200, 255));\n}\n\n.as-countdown-clock-border {\n    width: 100%;\n    height: 100%;\n    border: solid 0.2em rgb(100, 200, 255);\n    border-radius: 50%;\n    object-fit: cover;\n}\n\n.as-countdown-clock-text {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    transform:translate(-50%, -50%);\n    font-size: 2em;\n}\n\n.as-countdown-clock div,\n.as-countdown-clock span\n{\n    font-family: inherit;\n}", ""]);



/***/ }),

/***/ 1242:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-cpu-viewer{\n    position: fixed;\n    bottom: 5px;\n    right: 5px;\n    box-sizing: border-box;\n    z-index: 1000000000;\n    border: 1px solid black;\n    display: inline-block;\n}\n\n.as-cpu-viewer canvas{\n    display: block;\n}", ""]);



/***/ }),

/***/ 3397:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-date-input {\n    border: 1px solid #ddd;\n    border-radius: 3px;\n    height: 30px;\n    width: calc(6em + 50px);\n    box-sizing: border-box;\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    background-color: white;\n    font: inherit;\n}\n\n.as-date-input-text {\n    outline: none;\n    width: calc(100% - 29px);\n    height: 100%;\n    border: none;\n    background-color: transparent;\n    display: block;\n    padding: 0 0 0 var(--as-input-horizontal-padding);\n    font: inherit;\n    box-sizing: border-box;\n\n}\n\n.as-date-input-icon-ctn {\n    border-left: 1px solid #ddd;\n    text-align: center;\n    position: absolute;\n    right: 0;\n    width: 29px;\n    box-sizing: border-box;\n    top: 0;\n    height: 28px;\n    background-color: rgba(169, 169, 169, 0.1);\n    cursor: pointer;\n}\n\n\n.as-date-input-icon-ctn:hover {\n    background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-date-input-icon-ctn:active {\n    background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-date-input-icon-ctn > span {\n    line-height: 28px;\n    font-size: 16px;\n}\n\n.as-date-input.as-disabled {\n    color: var(--as-disabled-text-color);\n    pointer-events: none;\n}\n\n.as-date-input.as-disabled input {\n    background-color: var(--as-disabled-background-color);\n}\n\n.as-date-input.as-value-null .as-date-input-clear-btn,\n.as-date-input.as-must-not-null .as-date-input-clear-btn {\n    display: none;\n}\n\n.as-date-input-clear-btn {\n    font-size: inherit;\n    position: absolute;\n    right: 30px;\n    height: 30px;\n    top: calc(50% - 15px);\n    box-sizing: border-box;\n    background-color: transparent;\n    border: none;\n    color: #bbb;\n    visibility: hidden;\n}\n\n.as-date-input-clear-btn:hover {\n    color: rgb(132, 132, 132)\n}\n\n.as-date-input-clear-btn:active {\n    color: #525555;\n}\n\n.as-date-input-text:focus + .as-date-input-clear-btn,\n.as-date-input:hover .as-date-input-clear-btn {\n    visibility: visible;\n}\n", ""]);



/***/ }),

/***/ 7437:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-date-time-input {\n    border: 1px solid #ddd;\n    border-radius: 3px;\n    height: 30px;\n    width: calc(12em + 30px);\n    box-sizing: border-box;\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    background-color: white;\n    overflow: hidden;\n}\n\n.as-date-time-input.as-disabled {\n    color: var(--as-disabled-text-color);\n    pointer-events: none;\n}\n\n\n.as-date-time-input input {\n    outline: none;\n    width: calc(100% - 29px);\n    height: 100%;\n    border: none;\n    display: block;\n    padding: 0 0 0 var(--as-input-horizontal-padding);\n    -webkit-user-select: auto;\n    user-select: auto;\n    -webkit-user-drag: none;\n    color: inherit;\n    box-sizing: border-box;\n}\n\n.as-date-time-input.as-disabled input {\n    background-color: var(--as-disabled-background-color);\n}\n\n.as-date-time-input-icon-btn {\n    border-right: none;\n    border-top: none;\n    border-bottom: none;\n    border-left: 1px solid #ddd;\n    position: absolute;\n    right: 0;\n    width: 29px;\n    box-sizing: border-box;\n    top: 0;\n    bottom: 0;\n    background-color: rgba(169, 169, 169, 0.1);\n    cursor: pointer;\n    border-radius: 0;\n    color: inherit;\n}\n\n.as-date-time-input-icon-btn > span {\n    font-size: 16px;\n}\n\n\n.as-date-time-input-icon-btn:hover {\n    background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-date-time-input-icon-btn:active {\n    background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-date-time-input-icon-btn.as-disabled {\n    color: rgb(102, 102, 102);\n    pointer-events: none;\n}\n\n.as-date-time-input-follower {\n    box-sizing: border-box;\n    background-color: white;\n    border: 1px solid #ddd;\n    padding: 5px;\n}\n\n.as-date-time-input-date-picker {\n    border: none;\n    box-shadow: none;\n}\n\n.as-date-time-input-picker-header {\n    text-align: right;\n    padding-bottom: 5px;\n}\n\n.as-date-time-input-picker-footer {\n    text-align: center;\n}\n\n.as-date-time-input-picker-footer > button {\n    margin: 0 10px;\n}\n\n.as-date-time-input-picker-btn {\n    height: 20px;\n    min-width: 25px;\n    padding: 0 5px;\n    box-sizing: border-box;\n    font-size: inherit;\n    border: 1px solid rgb(47, 82, 143);\n    background-color: rgb(68, 144, 196);\n    color: white;\n    border-radius: 0;\n}\n\n.as-date-time-input-picker-btn:active {\n    background-color: rgb(50, 122, 169);\n}\n\n\n.as-chrome-time-picker.as-date-time-input-time-picker {\n    height: 166px;\n    box-sizing: border-box;\n}\n\n.as-date-time-input-picker-ctn {\n    white-space: nowrap;\n}\n\n.as-date-time-input-picker-ctn > div {\n    display: inline-block;\n    white-space: initial;\n    vertical-align: top;\n}\n\n.as-date-time-input-follower > div {\n    border-color: white;\n}\n\n.as-date-time-input:hover .as-time-input-clear-btn {\n    visibility: visible;\n}", ""]);



/***/ }),

/***/ 4100:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-debug-task {\n    position: fixed;\n    right: 10px;\n    bottom: 10px;\n    z-index: 999999;\n    border-radius: 4px;\n    background: rgba(169, 169, 171, 0.3);\n    border: solid 1px rgba(21, 21, 214, 0.5);\n    min-width: 45px;\n    min-height: 30px;\n    font-size: 12px;\n    padding: 5px;\n    pointer-events: none;\n}\n\n.absol-debug-task-name{\n    color: darkcyan;\n}\n\n.absol-debug-task-value{\n    color: rgb(159, 8, 197);\n}", ""]);



/***/ }),

/***/ 6478:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --as-input-height: 30px;\n    --as-input-font-size: 14px;\n    --as-input-font-family: Arial, Helvetica, sans-serif;\n    --as-input-vertical-padding: 0.3571em;\n    --as-input-horizontal-padding: 0.5em;\n    --as-context-menu-font-size: 14px;\n    --as-context-font-family: Arial, Helvetica, sans-serif;\n    --as-disabled-background-color: #ebebe4;\n    --as-disabled-text-color: rgb(102, 102, 102);\n}\n\n", ""]);



/***/ }),

/***/ 1908:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-draggable-stack {\n    position: relative;\n}\n\n.absol-draggable-stack .drag-zone {\n    touch-action: none;\n}\n\n.absol-draggable-stack > .as-dragging {\n    opacity: 0.2 !important;\n}\n\n.absol-draggable-stack-child-container.as-dragging {\n    opacity: 0.2 !important;\n}\n\n.absol-draggable-stack-clone-container {\n    position: fixed;\n    left: 0;\n    top: 0;\n    z-index: 100000;\n    user-select: none;\n    -moz-user-select: none;\n    -webkit-user-select: none;\n    -ms-user-select: none;\n    pointer-events: all;\n    opacity: 0.5;\n    background: white;\n}\n\n.absol-draggable-vstack > .absol-draggable-stack-clone-container {\n    left: 0;\n    right: 0;\n\n}\n\n.absol-draggable-stack-clone-container * {\n    pointer-events: none !important;\n}\n\n.absol-draggable-stack-clone-container > * {\n    width: 100% !important;\n    height: 100% !important;\n    box-sizing: border-box;\n}\n\n\n.absol-draggable-stack-clone-container.home-going {\n    transition: top 0.2s;\n}\n\n.absol-draggable-stack-dest-line {\n    position: absolute;\n    z-index: 99;\n    box-sizing: content-box;\n}\n\n.absol-draggable-vstack > .absol-draggable-stack-dest-line {\n    transition: top 0.1s;\n    left: 0;\n    right: 0;\n    border-top: solid 3px rgb(74, 174, 233);\n    border-bottom: solid 3px rgb(74, 174, 233);\n}\n\n\n.absol-draggable-hstack {\n    --dest-x: 0px;\n}\n\n.absol-draggable-hstack.as-has-dragging::after {\n    content: \"\";\n    position: absolute;\n    transition: left 0.1s;\n    top: 0;\n    bottom: 0;\n    left: calc(var(--dest-x) - 3px);\n    border-left: solid 3px rgb(74, 174, 233);\n    border-right: solid 3px rgb(74, 174, 233);\n}\n\n.absol-draggable-hstack.as-no-change::after {\n    visibility: hidden;\n}\n\n\n.absol-draggable-hstack > * {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.absol-draggable-vstack {\n    --dest-y: unset;\n}\n\n/**.as-state-drag*/\n.absol-draggable-vstack.as-state-drag::after {\n    content: \"\";\n    display: block;\n    position: absolute;\n    top: calc(var(--dest-y) - 3px);\n    left: 0;\n    right: 0;\n    transition: top 0.1s;\n    border-top: solid 3px rgb(74, 174, 233);\n    border-bottom: solid 3px rgb(74, 174, 233);\n    z-index: 999;\n}\n\n\n.absol-draggable-vstack.as-state-no-change::after {\n    visibility: hidden;\n}", ""]);



/***/ }),

/***/ 6485:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-drop-panel-head {\n    height: 2.75em;\n    line-height: 2.75em;\n    -webkit-box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n    -moz-box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n    box-shadow: 0px 3px 4px -3px rgba(0, 0, 0, 0.75);\n    background-color: rgba(240, 240, 242);\n    color: black;\n}\n\n.absol-drop-panel-head .toggler-ico path {\n    fill: rgb(104, 104, 104);\n}\n\n\n.dark .absol-drop-panel-head {\n    background-color: rgba(54, 54, 56);\n    color: rgb(204, 204, 204);\n}\n\n.absol-drop-panel.show .absol-drop-panel-body {\n    height:auto;\n}\n\n.absol-drop-panel-body {\n    transition: height 0.2s;\n    height: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n\n\n.absol-drop-panel.show>.absol-drop-panel-head  .toggle-close{\n    display: none;\n}\n\n.absol-drop-panel:not(.show)>.absol-drop-panel-head  .toggle-open{\n    display: none;\n}\n\n", ""]);



/***/ }),

/***/ 468:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-drop-zone {\n}", ""]);



/***/ }),

/***/ 8367:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-dv-exp-tree {\n\n}\n\n.as-dv-exp-tree > .absol-exp-node > .absol-exp-node-level {\n}\n\n.as-dv-exp-tree > .absol-exp-node > .absol-radio-button {\n    vertical-align: middle;\n    display: inline-block;\n    margin-right: 5px;\n    /*margin-left: 5px;*/\n}\n\n\n.as-dv-exp-tree:not(.as-has-radio) > .absol-exp-node > .absol-radio-button {\n    /*visibility: hidden;*/\n    display: none;\n}\n\n\n.as-dv-exp-tree > .absol-exp-node > .as-dv-exp-tree-index {\n    box-sizing: border-box;\n    padding: 0 0 0 0.5em;\n    margin-left: 0.5em;\n    outline: none;\n    height: 1.2em;\n    min-width: 3em;\n    box-shadow: 0 0  0 1px #dddddd;\n    display: inline-block;\n    vertical-align: middle;\n    background-color: white;\n}\n\n.as-dv-exp-tree > .absol-exp-node > .as-dv-exp-tree-index:hover{\n    box-shadow: 0 0  0 1px #aaaaaa;\n}\n\n.as-dv-exp-tree:not(.as-has-index-input) > .absol-exp-node > .as-dv-exp-tree-index {\n    display: none;\n}\n\n/*.as-dv-exp-tree>.absol-exp-node:not(.status-open):not(.status-close)>.toggler-ico{*/\n/*    display: none;*/\n/*}*/\n\n/*.as-dv-exp-tree .absol-exp-node-ext-icon{*/\n/*    display: none;*/\n/*}*/", ""]);



/***/ }),

/***/ 4854:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\n.absol-editabe-text {\n    display: inline;\n}\n\n.absol-editabe-text span {\n    font-style: inherit;\n    font-size: inherit;\n    white-space: pre;\n}\n\n.absol-editabe-text-higne {\n    display: inline-block;\n    position: relative;\n    width: 0px;\n    height: 0ox;\n}\n\n.absol-editabe-text-higne input {\n    position: absolute;\n    display: none;\n    border: none;\n    top: -2;\n    left: -2;\n    padding-top: 0px;\n    padding-left: 2px;\n    padding-bottom: 4px;\n    margin: 0;\n    background: transparent;\n    outline: none;\n    font-style: inherit;\n    font-size: inherit;\n}\n\n.absol-editabe-text.editing .absol-editabe-text-higne input {\n    display: block;\n}\n\n.absol-editabe-text.editing span {\n    visibility: hidden;\n}\n\n.absol-editabe-text.editing {\n    -webkit-box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n    -moz-box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n    box-shadow: 0px 0px 2px 0px rgba(33, 77, 255, 1);\n    border-radius: 0.17em;\n}\n", ""]);



/***/ }),

/***/ 5593:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-emoji-counter {\n    display: inline-block;\n    vertical-align: middle;\n    color: rgb(38, 141, 145);\n    box-sizing: border-box;\n    box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2);\n    height: 30px;\n    text-align: center;\n    min-height: 30px;\n    padding: 0 8px;\n    border-radius: 15px;\n    font-size: 14px;\n    background-color: white;\n    outline: none;\n}\n\n.as-emoji-counter::before {\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n}\n\n.as-emoji-counter-sprite {\n    display: inline-block;\n    vertical-align: middle;\n    width: 18px;\n    height: 18px;\n}\n\n.as-emoji-counter-num {\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    margin-left: 0.2em;\n    display: inline-block;\n    vertical-align: middle;\n    font-size: inherit;\n    color: inherit;\n    cursor: default;\n}\n\n.as-emoji-counter-num:empty {\n    display: none;\n}\n\n.as-emoji-counter.as-zero {\n    background-color: rgba(220, 220, 220);\n}\n\n.as-emoji-counter + .as-emoji-counter {\n    margin-left: 0.3em;\n}", ""]);



/***/ }),

/***/ 5543:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-emoji-picker {\n    font-size: 12px;\n    border: 1px solid #dddddd;\n    box-sizing: border-box;\n    font-family: Arial, Helvetica, sans-serif;\n}\n\n.as-emoji-picker-preview {\n    display: inline-block;\n    vertical-align: top;\n    width: 80px;\n    height: 110px;\n    border-right: 1px solid #dddddd;\n    text-align: center;\n\n}\n\n\n.as-emoji-picker-preview-anim {\n    width: 60px;\n    height: 60px;\n    margin-top: 5px;\n}\n\n.as-emoji-picker-preview-desc {\n    font-size: 12px;\n    font-weight: bold;\n    color: black;\n}\n\n.as-emoji-picker-preview-shortcut {\n    font-size: 12px;\n    color: rgb(70, 70, 70);\n}\n\n\n.as-emoji-picker-list {\n    display: inline-block;\n    vertical-align: top;\n    overflow-y: auto;\n    width: calc(100% - 81px);\n    height: 110px;\n    padding: 5px;\n    box-sizing: border-box;\n}\n\n\n.as-emoji-picker-item {\n    display: inline-block;\n    padding: 5px;\n    width: 30px;\n    height: 30px;\n    box-sizing: border-box;\n    border-radius: 6px;\n}\n\n.as-emoji-picker-item:hover {\n    background-color: rgba(169, 169, 170, 0.3);\n}\n\n.as-emoji-picker-item:active {\n    background-color: rgba(169, 169, 170, 0.7);\n}", ""]);



/***/ }),

/***/ 7110:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-emoji-picker-tooltip {\n    --tool-tip-background-color: white;\n    filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.5));\n}\n\n.as-emoji-picker-tooltip .absol-tooltip-content {\n    display: block;\n    padding: 0;\n    box-sizing: border-box;\n    position: relative;\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n.as-emoji-picker-tooltip-left-btn,\n.as-emoji-picker-tooltip-right-btn {\n    display: inline-block;\n    vertical-align: middle;\n    height: 60px;\n    width: 40px;\n    font-size: 25px;\n    padding: 0;\n    background-color: transparent;\n    border: none;\n    color: rgb(155, 155, 175);\n    outline: none;\n}\n\n.as-emoji-picker-tooltip-left-btn:hover,\n.as-emoji-picker-tooltip-right-btn:hover {\n    background-color: rgba(156, 156, 156, 0.15);\n}\n\n.as-emoji-picker-tooltip-left-btn:active,\n.as-emoji-picker-tooltip-right-btn:active {\n    background-color: rgba(0, 0, 0, 0.15);\n}\n\n.as-emoji-picker-tooltip-left-btn:disabled,\n.as-emoji-picker-tooltip-right-btn:disabled {\n    pointer-events: none;\n    color: rgb(230, 230, 235);\n}\n\n.as-emoji-picker-tooltip-scroller {\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    width: 360px;\n    height: 60px;\n    overflow: hidden;\n}\n\n.as-emoji-picker-tooltip-icon-list {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    white-space: nowrap;\n}\n\n\n.as-emoji-picker-tooltip:not(.as-scrolling) .as-emoji-picker-tooltip-icon-list {\n    transition: left 0.5s;\n}\n\n.as-emoji-picker-tooltip-icon-btn {\n    display: inline-block;\n    vertical-align: middle;\n    height: 60px;\n    width: 60px;\n    padding: 0;\n    border: none;\n    outline: none;\n    background-color: transparent;\n}\n\n\n.as-emoji-picker-tooltip-icon {\n    transition: width 0.3s, height 0.3s;\n    width: 35px;\n    height: 35px;\n}\n\n.as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n    width: 45px;\n    height: 45px;\n}\n\n.as-emoji-picker-tooltip-remove-btn {\n    display: inline-block;\n    vertical-align: middle;\n    height: 60px;\n    width: 60px;\n    padding: 0;\n    border: none;\n    outline: none;\n    background-color: transparent;\n    font-size: 40px;\n    color: rgb(185, 185, 185);\n}\n\n.as-emoji-picker-tooltip-remove-btn:hover {\n    color: rgb(255, 30, 30);\n}\n\n\n.as-emoji-picker-tooltip:not(.as-mobile) .as-emoji-picker-tooltip-page-indicator {\n    display: none;\n}\n\n.as-emoji-picker-tooltip.as-mobile .as-emoji-picker-tooltip-right-btn,\n.as-emoji-picker-tooltip.as-mobile .as-emoji-picker-tooltip-left-btn {\n    display: none;\n}\n\n\n@media (max-width: 410px) and (min-width: 310px) {\n    .as-emoji-picker-tooltip-left-btn,\n    .as-emoji-picker-tooltip-right-btn {\n        height: 36px;\n        width: 24px;\n        font-size: 15px;\n    }\n\n    .as-emoji-picker-tooltip-scroller {\n        width: 216px;\n        height: 36px;\n    }\n\n    .as-emoji-picker-tooltip-icon-btn {\n        height: 36px;\n        width: 36px;\n    }\n\n\n    .as-emoji-picker-tooltip-icon {\n        width: 21px;\n        height: 21px;\n    }\n\n    .as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n        width: 27px;\n        height: 27px;\n    }\n\n    .as-emoji-picker-tooltip-remove-btn {\n        height: 36px;\n        width: 36px;\n        font-size: 24px;\n    }\n}\n\n@media (max-width: 510px) and (min-width: 410px) {\n    .as-emoji-picker-tooltip-left-btn,\n    .as-emoji-picker-tooltip-right-btn {\n        height: 48px;\n        width: 32px;\n        font-size: 20px;\n    }\n\n\n    .as-emoji-picker-tooltip-scroller {\n        width: 288px;\n        height: 48px;\n    }\n\n\n    .as-emoji-picker-tooltip-icon-btn {\n        height: 48px;\n        width: 48px;\n    }\n\n\n    .as-emoji-picker-tooltip-icon {\n        width: 28px;\n        height: 28px;\n    }\n\n    .as-emoji-picker-tooltip-icon-btn:hover .as-emoji-picker-tooltip-icon {\n        width: 36px;\n        height: 36px;\n    }\n\n    .as-emoji-picker-tooltip-remove-btn {\n        height: 48px;\n        width: 48px;\n        font-size: 32px;\n    }\n}", ""]);



/***/ }),

/***/ 7691:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-emoji-user-list-tooltip {\n    --tool-tip-background-color: white;\n    filter: drop-shadow(2px 2px 4px rgba(0, 0, 0, 0.5));\n    text-align: left;\n}\n\n\n.as-emoji-user-list-tooltip-emoji {\n    position: absolute;\n    width: 60px;\n    height: 60px;\n    top: -30px;\n    left: calc(50% - 30px);\n    z-index: 2;\n\n}\n\n.as-emoji-user-list-tooltip .absol-tooltip-content {\n    min-height: 60px;\n    min-width: 120px;\n    padding-top: 25px;\n}\n\n.as-emoji-user-list-tooltip-user{\n    padding: 3px  10px 3px 0 ;\n}\n\n.as-emoji-user-list-tooltip-user.as-clickable{\n    cursor: pointer;\n}\n\n.as-emoji-user-list-tooltip-avatar {\n    width: 30px;\n    height: 30px;\n    border-radius: 50%;\n    background-size: cover;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-emoji-user-list-tooltip-name {\n    display: inline-block;\n    vertical-align: middle;\n    margin-left: 10px;\n    color: rgb(70, 70, 72);\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}", ""]);



/***/ }),

/***/ 2375:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-exp-node {\n    height: 2em;\n    text-align: left;\n    background-color: transparent;\n    border: none;\n    outline: none;\n    white-space: nowrap;\n    font-size: inherit;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    position: relative;\n    color: rgb(33, 33, 34);\n}\n\n.absol-exp-node .toggler-ico {\n    width: 0.7em;\n    height: 0.7em;\n    margin-right: 0.35em;\n}\n\n.absol-exp-node .toggler-ico path {\n    fill: rgb(104, 104, 104);\n}\n\n.absol-exp-node.status-removable .toggler-ico,\n.absol-exp-node.status-modified .toggler-ico {\n    display: none;\n}\n\n.absol-exp-node:not(.status-open) .toggle-open {\n    display: none;\n}\n\n.absol-exp-node:not(.status-close) .toggle-close {\n    display: none;\n}\n\n\n\n.absol-exp-node:hover .remove-ico {\n    visibility: visible;\n}\n\n\n\n.absol-exp-node.status-removable .remove-ico,\n.absol-exp-node.status-modified .remove-ico {\n    display: inline-block;\n}\n\n.absol-exp-node.status-removable .remove-ico .modified {\n    visibility: hidden;\n}\n\n.absol-exp-node.status-modified .remove-ico .close {\n    visibility: hidden;\n}\n\n.absol-exp-node.status-modified .remove-ico:hover .close {\n    visibility: visible;\n}\n\n.absol-exp-node.status-modified .remove-ico:hover .modified {\n    visibility: hidden;\n}\n\n\n.absol-exp-node .remove-ico {\n    width: 0.9em;\n    height: 0.9em;\n    display: none;\n    visibility: hidden;\n    margin-left: -0.3em;\n    margin-right: 0.45em;\n}\n\n.absol-exp-node .remove-ico .close,\n.absol-exp-node .remove-ico .modified {\n    fill: rgb(169, 169, 169);\n    stroke: none;\n}\n\n\n.absol-exp-node.has-status {\n    padding-right: 2.5em;\n}\n\n.absol-exp-node>div,\n.absol-exp-node>svg {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.absol-exp-node .editing input {\n    color: khaki;\n    padding-top: 2px;\n    padding-bottom: 2px;\n}\n\n.absol-exp-node:hover {\n    background-color: rgba(169, 169, 172, 0.1);\n}\n\n.absol-exp-node:focus,\n.absol-exp-node.as-active:focus {\n    background-color: rgba(20, 185, 235, 0.3);\n}\n\n.absol-exp-node.as-active {\n    background-color: rgba(169, 169, 172, 0.2);\n}\n\n\n\n.absol-exp-node-name {\n    /* -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none; */\n    user-select: none;\n    vertical-align: middle;\n    color: black;\n    margin-left: 0.5em;\n}\n\n.absol-exp-node-desc {\n    color: rgb(104, 104, 104);\n    margin-left: 0.5em;\n    font-size: 0.85em;\n}\n\n.absol-exp-node-desc:empty {\n    margin-left: 0;\n}\n\n\n.absol-exp-node-expand-icon {\n    display: inline-block;\n    vertical-align: middle;\n    margin-right: 0.2em;\n    height: 0.5em;\n    width: 0.5em;\n}\n\nimg.absol-exp-node-ext-icon {\n    display: none;\n}\n\n.absol-exp-node-ext-icon,\n.absol-exp-node-ext-icon>img {\n    display: inline-block;\n    vertical-align: middle;\n    width: 1.5em;\n    height: 1.5em;\n}\n\ndiv.absol-exp-node-ext-icon:empty {\n    display: none;\n}\n\ndiv.absol-exp-node-ext-icon {\n    text-align: center;\n}\n\n.absol-exp-node-ext-icon>.mdi,\n.absol-exp-node-ext-icon>span .absol-exp-node-ext-icon>svg {\n    line-height: 1em;\n    font-size: 1.5em;\n}\n\nimg.absol-exp-node-ext-icon[src] {\n    display: inline-block;\n}\n\n\n.absol-exp-tree>.absol-exp-node {\n    width: 100%;\n    display: block;\n}\n\n.absol-exp-tree.hide-children>.absol-exp-items {\n    display: none;\n}\n\n\n.dark .toggler-ico path {\n    fill: rgb(169, 169, 169);\n}\n\n\n.dark .absol-exp-node-name {\n    color: rgb(204, 204, 204);\n}\n\n.dark .absol-exp-node-desc {\n    color: rgb(169, 169, 170);\n}\n\n.dark .absol-exp-node {\n    color: rgb(169, 169, 170);\n}", ""]);



/***/ }),

/***/ 5225:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-flexicon-button {\n    box-sizing: border-box;\n    border: solid 1px #bfbfbf;\n    background-color: #ebebeb;\n    border-radius: 0.2em;\n    outline: none;\n    padding: 0;\n    overflow: hidden;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-flexicon-button:disabled {\n    pointer-events: none;\n    background-color: #c7c7c7 !important;\n}\n\n\n.as-flexicon-button div,\n.as-flexicon-button span {\n    font-weight: inherit;\n    font-size: inherit;\n}\n\n\n.as-icon-button-table-box {\n    display: table;\n    width: 100%;\n    height: 100%;\n}\n\n.as-flexicon-button:hover .as-flexicon-button-content {\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.as-flexicon-button:active {\n    -webkit-box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n    box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\n}\n\n\n.as-flexicon-button-content {\n    display: table-row;\n}\n\n\n.as-flexicon-button-icon-container,\n.as-flexicon-button-text-container {\n    display: table-cell;\n    box-sizing: content-box;\n    vertical-align: middle;\n    text-align: center;\n}\n\n.as-flexicon-button-icon-container:empty,\n.as-flexicon-button-text-container:empty {\n    display: none;\n}\n\n.as-flexicon-button-icon-container {\n    width: 2em;\n    background-color: rgba(0, 0, 0, 0.0893617021);\n    color: rgb(146, 146, 146);\n}\n\n\n.as-flexicon-button-icon-container > span,\n.as-flexicon-button-icon-container > i,\n.as-flexicon-button-icon-container > svg,\n.as-flexicon-button-icon-container > img {\n    font-size: 1em;\n}\n\n.as-flexicon-button-text-container {\n    padding-left: 0.357em;\n    padding-right: 0.357em;\n    box-sizing: border-box;\n    min-width: 2em;\n}\n\n\n.as-flexicon-button-icon-container + .as-flexicon-button-text-container {\n    border-left: solid 1px #bfbfbf;\n}\n\n.as-flexicon-button-icon-container:empty + .as-flexicon-button-text-container {\n    border-left: none;\n    padding-left: 0.714em;\n    padding-right: 0.714em;\n}\n\n/*** theme  ***/\n\n.as-flexicon-button.primary {\n    border-color: #005bbd;\n    background-color: #007bff;\n    color: white;\n}\n\n.as-flexicon-button.primary .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.primary .as-flexicon-button-text-container {\n    border-color: #005bbd;\n}\n\n\n.as-flexicon-button.secondary {\n    border-color: #4e555a;\n    background-color: #6d767e;\n    color: white;\n}\n\n.as-flexicon-button.secondary .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.secondary .as-flexicon-button-text-container {\n    border-left-color: #4e555a;\n}\n\n\n.as-flexicon-button.success {\n    border-color: #1e7b34;\n    background-color: #29a847;\n    color: white;\n}\n\n.as-flexicon-button.success .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.success .as-flexicon-button-text-container {\n    border-left-color: #1e7b34;\n}\n\n\n.as-flexicon-button.danger {\n    border-color: #b21f2e;\n    background-color: #dc3848;\n    color: white;\n}\n\n.as-flexicon-button.danger .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.danger .as-flexicon-button-text-container {\n    border-left-color: #b21f2e;\n}\n\n.as-flexicon-button.warning {\n    border-color: #9e7700;\n    background-color: #e0a800;\n    color: black;\n}\n\n.as-flexicon-button.warning .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.warning .as-flexicon-button-text-container {\n    border-left-color: #9e7700;\n}\n\n.as-flexicon-button.info {\n    border-color: #117888;\n    background-color: #17a2b8;\n    color: white;\n}\n\n.as-flexicon-button.info .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.info .as-flexicon-button-text-container {\n    border-left-color: #117888;\n}\n\n.as-flexicon-button.light {\n    border-color: #c9d1d9;\n    background-color: #f8f9fa;\n    color: #212529;\n}\n\n.as-flexicon-button.light .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.light .as-flexicon-button-text-container {\n    border-left-color: #c9d1d9;\n}\n\n.as-flexicon-button.dark {\n    border-color: #171a1c;\n    background-color: #343a40;\n    color: white;\n}\n\n.as-flexicon-button.dark .as-flexicon-button-icon-container {\n    color: white;\n}\n\n.as-flexicon-button.dark .as-flexicon-button-text-container {\n    border-left-color: #171a1c;\n}\n\n.as-flexicon-button.link {\n    border-color: transparent;\n    background-color: transparent;\n    color: #007bff;\n}\n\n.as-flexicon-button.link .as-flexicon-button-icon-container {\n    color: #007bff;\n    background: transparent;\n}\n\n.as-flexicon-button.link .as-flexicon-button-text-container {\n    border-left-color: transparent;\n}\n\n.as-flexicon-button.link:hover .as-flexicon-button-text-container {\n    text-decoration: underline;\n}", ""]);



/***/ }),

/***/ 6240:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-flexicon-input-icon-ctn > span,\n.as-flexicon-input-icon-ctn > i,\n.as-flexicon-input-icon-ctn > svg,\n.as-flexicon-input-icon-ctn > img {\n    font-size: 1em;\n    line-height: 1;\n}\n\n.as-flexicon-input {\n    position: relative;\n    border: 1px solid #dddddd;\n    display: inline-block;\n    vertical-align: middle;\n    height: 2em;\n    font-size: 14px;\n    box-sizing: border-box;\n    border-radius: 3px;\n    text-align: left;\n    white-space: nowrap;\n}\n\n.as-flexicon-input::before {\n    content: \"\";\n    width: 0;\n    height: 100%;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.as-flexicon-input-icon-ctn:empty {\n    display: none;\n}\n\n\n.as-flexicon-input:not(.as-flexicon-input-has-icon) input{\n    padding-left: 0.3em;\n}\n\n.as-flexicon-input-icon-ctn {\n    display: inline-block;\n    vertical-align: middle;\n    /*text-align: center;*/\n    font-size: 1.2em;\n    width: 1.25em;\n    text-align: center;\n}\n\n.as-flexicon-input-unit-ctn {\n    width: 1.5em;\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n}\n\n.as-flexicon-input-unit-ctn:empty {\n    display: none;\n}\n\n\n.as-flexicon-input input {\n    border: none;\n    font-size: 1em;\n    outline: none;\n    height: 100%;\n    background-color: transparent;\n    box-sizing: border-box;\n    width: 100%;\n    font-family: inherit;\n    padding-left: 0;\n    padding-right: 0;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.as-flexicon-input.as-flexicon-input-has-icon input,\n.as-flexicon-input.as-flexicon-input-has-unit input {\n    width: calc(100% - 1.5em);\n}\n\n.as-flexicon-input.as-flexicon-input-has-unit input{\n    text-align: right;\n}\n\n\n.as-flexicon-input.as-flexicon-input-has-icon.as-flexicon-input-has-unit input {\n    width: calc(100% - 3em);\n}", ""]);



/***/ }),

/***/ 729:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-follower {\n    position: fixed;\n    z-index: 100;\n}\n\n.absol-follower-hidden{\n    z-index: -1000 !important;\n    opacity: 0;\n    visibility: hidden;\n}", ""]);



/***/ }),

/***/ 8278:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-frame{\n    \n}", ""]);



/***/ }),

/***/ 58:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-frame-view {\n    position: relative;\n}\n\n\n.absol-frame-view-frame-container {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}\n\n\n.absol-frame-view-frame-container:not(.absol-active) {\n    z-index: -100;\n    visibility: hidden;\n    opacity: 0;\n}\n\n.absol-frame-view-frame-container:not(.absol-active) *,\n.absol-frame-view-frame-container:not(.absol-active) {\n    pointer-events: none;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n\n.absol-frame-view-frame-container > div {\n    width: 100%;\n    height: 100%;\n}", ""]);



/***/ }),

/***/ 4713:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-has-hanger-drag,\n.as-has-hanger-drag * {\n    touch-action: none;\n    -webkit-user-select: none !important;\n    -moz-user-select: none !important;\n    -ms-user-select: none !important;\n    user-select: none !important;\n}", ""]);



/***/ }),

/***/ 7726:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-hexa-section-label {\n    position: relative;\n    -webkit-print-color-adjust: exact;\n    /*friendly print*/\n}\n\n.as-hexa-section-label-text {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    font-size: 1em;\n    padding-right: 2.5em;\n    color: white;\n    font-weight: bold;\n    z-index: 2;\n}\n\n@media print {\n    .as-hexa-section-label-text {\n        color: white !important;\n    }\n\n    .as-hexa-section-label-index {\n        color: rgb(237, 147, 54) !important;\n    }\n}\n\n\n.as-hexa-section-label-index {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n    color: rgb(237, 147, 54);\n    font-weight: 900;\n    z-index: 2;\n}\n\n.as-hexa-section-label-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    z-index: 1;\n}\n\n.as-hexa-section-label-background>svg {\n    display: block;\n}\n\n.as-hexa-section-label-index-box {\n    stroke: rgb(251, 186, 130);\n    fill: white;\n    stroke-width: 2.5;\n}\n\n.as-hexa-section-label-text-box {\n    fill: rgb(237, 147, 54);\n    stroke: none;\n}", ""]);



/***/ }),

/***/ 9847:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/*margin for border size*/\n.as-hruler {\n    position: relative;\n    height: 1.5em;\n    border: solid 1px black;\n    overflow: hidden;\n    font-family: courier, \"courier new\", monospace;\n    box-sizing: border-box;\n}\n\n\n.as-hruler-line {\n    position: absolute;\n    bottom: 0;\n    height: 25%;\n    border-left: solid 1px rgb(17, 48, 43);\n    box-sizing: border-box;\n}\n\n.as-hruler-line.major {\n    height: 50%;\n    border-left: solid 1px rgb(5, 20, 18);\n}\n\n.as-hruler-major-number{\n    position: absolute;\n    text-align: center;\n    width: 5em;\n    pointer-events: none;\n    font-size: 0.7em;\n    bottom: 50%;\n} ", ""]);



/***/ }),

/***/ 2761:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-linear-color-bar {\n    position: relative;\n    height: 2em;\n}\n\n.as-linear-color-background {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    display: block;\n}\n\n.as-linear-color-value-text {\n    position: absolute;\n    top: 0;\n    font-weight: 900;\n    white-space: nowrap;\n}\n\n.as-linear-color-min-value-text,\n.as-linear-color-max-value-text {\n    position: absolute;\n    bottom: 0;\n    white-space: nowrap;\n    font-weight: bold;\n}\n\n\n\n.as-linear-color-min-value-text {\n    left: 0;\n}\n\n.as-linear-color-rect {\n    stroke: none;\n}\n\n\n.as-linear-color-value-arrow {\n    fill: rgb(244, 124, 32);\n    stroke: rgb(244, 124, 32);\n}\n\n.as-linear-color-split-line {\n    stroke: white;\n}", ""]);



/***/ }),

/***/ 91:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".vmedia-no-show {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 1;\n    height: 1;\n    z-index: -100000;\n    opacity: 0;\n}\n\n.vmedia-no-select,\n.vmedia-no-select * {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\ncoccocgrammar {\n    display: none;\n}\n\n.vmedia-media-input {\n    box-sizing: border-box;\n    border: solid 1px rgba(0, 0, 0, 0.1)\n}\n\n\n.vmedia-media-input-text-container {\n    position: relative;\n    min-height: 2.5em;\n}\n\n.vmedia-media-input-text-container-editor:focus {\n    outline: none;\n}\n\n.vmedia-media-input-text-container-editor img {\n    display: none;\n}\n\n.vmedia-media-input-text-container-editor * {\n    font-family: inherit;\n    font-size: inherit;\n    font-weight: inherit;\n    text-decoration: inherit;\n    color: inherit;\n    background: none;\n    padding: 0;\n    margin: 0;\n    white-space: pre;\n}\n\n.vmedia-media-input-text-container-editor {\n    min-height: 2em;\n    padding-left: 0.5em;\n    padding-top: 0.25em;\n    padding-bottom: 0.25em;\n    margin-right: 0.5em;\n    box-sizing: border-box;\n    max-height: 6.66666666em;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n\n.vmedia-media-input-imagepreview-container {\n    white-space: normal;\n}\n\n.vmedia-media-input:not(.dragover) .vmedia-media-input-dropover {\n    display: none;\n}\n\n.vmedia-media-input-dropover {\n    display: inline-block;\n    width: 7em;\n    height: 7em;\n}\n\n.vmedia-media-input-dropover>svg {\n    width: 7em;\n    height: 7em;\n}\n\n.vmedia-media-input-imagepreview-container .vmedia-media-input-filepreview,\n.vmedia-media-input-imagepreview-container .vmedia-media-input-imagepreview {\n    margin: 0.3em;\n    vertical-align: middle;\n}\n\n.vmedia-media-input-filepreview,\n.vmedia-media-input-imagepreview {\n    position: relative;\n    display: inline-block;\n}\n\n.vmedia-media-input-imagepreview img {\n    height: 2.5em;\n    width: auto;\n}\n\n.vmedia-media-input-filepreview svg.attachment {\n    height: 2em;\n    width: 2em;\n}\n\n.vmedia-media-input-filepreview svg.times,\n.vmedia-media-input-imagepreview svg.times {\n    position: absolute;\n    top: 0.1em;\n    right: 0.1em;\n    width: 1em;\n    height: 1em;\n    fill: rgba(69, 69, 69, 0.6);\n}\n\n.vmedia-media-input-filepreview svg.times:hover,\n.vmedia-media-input-imagepreview svg.times:hover {\n    fill: rgba(144, 144, 144, 0.6);\n}\n\n.vmedia-media-input-filepreview svg.times:active,\n.vmedia-media-input-imagepreview svg.times:active {\n    fill: rgba(220, 220, 240, 0.6);\n}\n\n.vmedia-media-input-plug-button-container {\n    position: absolute;\n    left: 0.25em;\n    bottom: 0.25em;\n    top: 0.25em;\n}\n\n.vmedia-media-input-plug-button-container svg {\n    height: 1.5em;\n    width: 1.5em;\n    vertical-align: middle;\n    transition: transform .22s cubic-bezier(.5, 0, .4, 1);\n}\n\n\n.vmedia-media-input-plug-button-container svg path {\n    fill: rgba(66, 133, 244, 0.7);\n    transition: fill .22s cubic-bezier(.5, 0, .4, 1);\n}\n\n.vmedia-media-input.show-plugin .vmedia-media-input-plug-button svg path {\n    fill: rgba(134, 142, 153, 0.75);\n}\n\n\n\n.vmedia-media-input-plug-button {\n    padding: 0;\n    height: 100%;\n    width: 2em;\n    border: none;\n    background: transparent;\n    outline: none;\n\n}\n\n\n.vmedia-media-input-plugin-content-container {\n    position: absolute;\n    bottom: calc(1px + 100%);\n    opacity: 1;\n    transition: opacity .22s cubic-bezier(.5, 0, .4, 1);\n    background-color: white;\n    box-sizing: border-box;\n    border: solid 1px rgba(0, 0, 0, 0.1);\n    z-index: 20;\n    background: white;\n}\n\n.vmedia-media-input-plugin-content-container:empty{\n    display: none;\n}\n\n\n\n.vmedia-media-input-tool-container {\n    position: relative;\n    display: block;\n    height: 1.5em;\n    /* background: red;     */\n}\n\n\n\n.vmedia-media-input-tool-container-left {\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: 0;\n}\n\n.vmedia-media-input-tool-container-right {\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}\n\n.vmedia-media-input-tool-container button {\n    width: 2.5em;\n    height: 100%;\n    font-size: 1em;\n    margin-left: 0.1em;\n    margin-right: 0.1em;\n    border: none;\n    background-color: transparent;\n    border-radius: 0.4em;\n}\n\n.vmedia-media-input-text-container-editor {\n    scrollbar-width: thin;\n}\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar {\n    width: 7px;\n}\n\n\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar-track {\n    background: rgb(240, 240, 240);\n}\n\n.vmedia-media-input-text-container-editor::-webkit-scrollbar-thumb {\n    background: rgb(205, 205, 205);\n}\n\n.vmedia-media-input-tool-container button svg {\n    height: 1.25em;\n    width: 1.25em;\n}\n\n.vmedia-media-input-tool-container button:hover {\n    background-color: rgba(91, 192, 222, 0.1);\n}\n\n.vmedia-media-input-tool-container button:active {\n    background-color: rgba(91, 192, 222, 0.4);\n}\n\n.vmedia-media-input-tool-container button svg.send {\n    fill: rgba(66, 133, 244, 0.7);\n}\n\n.vmedia-media-input-tool-container button svg.add-file,\n.vmedia-media-input-tool-container button svg.add-image {\n    fill: rgba(66, 66, 66, 0.5);\n}\n\n.vmedia-media-input-tool-container button .mdi{\n    font-size:1.2em; \n}\n\n.vmedia-media-input-tool-container button:focus {\n    outline: none;\n}\n\n.vmedia-media-input-tool-container button{\n    vertical-align: middle;\n}\n\n.vmedia-media-input-plugin-content-container.blur{\n    visibility: hidden;\n}", ""]);



/***/ }),

/***/ 5848:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-ico {\n    width: 1em;\n    height: 1em;\n}\n\n.absol-button {\n    white-space: normal;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.absol-dropdown {\n    position: relative;\n}\n\n.absol-dropdown-content {\n    z-index: 1;\n    position: fixed;\n    left: 0;\n    top: 0;\n    overflow: auto;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.absol-dropdown.top > .absol-dropdown-content {\n    top: auto;\n    bottom: 100%;\n}\n\n.absol-dropdown.overlap-left > .absol-dropdown-content {\n    left: auto;\n    right: 0;\n}\n\n.absol-dropright {\n    position: relative;\n}\n\n.absol-dropright-content {\n    z-index: 1;\n    position: fixed;\n    left: 0;\n    top: 0;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    overflow: auto;\n}\n\n.absol-dropright.overlap-top > .absol-dropright-content {\n    top: unset;\n    bottom: 0;\n}\n\n.absol-drop-hidden > .absol-dropdown-content,\n.absol-drop-hidden > .absol-dropright-content {\n    visibility: hidden;\n    top: 0 !important;\n    left: 0 !important;\n    max-height: 99vh !important;\n    opacity: 0;\n    pointer-events: none;\n}\n\n.absol-drop-hidden > .absol-dropright-content *,\n.absol-drop-hidden > .absol-dropdown-content *{\n    visibility: hidden;\n}\n\n.absol-hmenu {\n    display: inline-block;\n    background-color: rgb(252, 252, 255);\n    /* background-color: rgb(33, 33, 33); */\n\n}\n\n.absol-hmenu > .absol-dropdown {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-hmenu-button:hover,\n.absol-hmenu .absol-hmenu-button-hover {\n\n    background-color: rgb(175, 175, 175);\n}\n\n.absol-hmenu-button {\n    padding-left: 1em;\n    padding-right: 1em;\n}\n\n.absol-hmenu-button:focus {\n    outline: none;\n}\n\n.absol-hmenu-button,\n.absol-vmenu-button {\n    color: rgb(55, 55, 55);\n    height: 100%;\n    background-color: transparent;\n    font-size: 1em;\n    border: none;\n    padding: 0;\n    margin: 0;\n    outline: none;\n}\n\n.absol-hmenu-button {\n    padding-left: 1em;\n    padding-right: 1em;\n}\n\n.absol-vmenu {\n\n}\n\n.absol-hmenu .absol-dropdown-content,\n.absol-hmenu .absol-dropright-content,\n.as-v-root-menu .absol-dropright-content {\n    padding-top: 0.4em;\n    padding-bottom: 0.4em;\n    background-color: rgb(252, 252, 255);\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\n}\n\n.absol-vmenu-button {\n    text-align: left;\n    padding-left: 0.5em;\n    padding-right: 2em;\n    height: 1.8em;\n    white-space: nowrap;\n    position: relative;\n}\n\nimg.absol-vmenu-button-icon {\n    opacity: 0;\n    display: none;\n}\n\nimg.absol-vmenu-button-icon[src] {\n    display: block;\n}\n\n.absol-vmenu-button-ext-icon-container {\n    display: inline-block;\n    width: 1.2em;\n    height: 1.2em;\n    vertical-align: middle;\n    margin-right: 0.5em;\n}\n\n.absol-vmenu-button-ext-icon-container > span,\n.absol-vmenu-button-ext-icon-container > i {\n    font-size: 1.2em;\n    line-height: 1;\n    display: block;\n}\n\n\n.absol-vmenu-button-ext-icon-container > svg,\n.absol-vmenu-button-ext-icon-container > img {\n    height: 1.2em;\n    width: 1.2em;\n    display: block;\n}\n\n\n.absol-vmenu-button-text,\n.absol-vmenu-button-key {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-vmenu-button-key {\n    font-style: italic;\n    text-align: right;\n    margin-left: 1em;\n}\n\n.absol-vmenu-arrow-container {\n    position: absolute;\n    right: 0.2em;\n    top: 0.3em;\n    bottom: 0.3em;\n}\n\n\n.absol-vmenu-arrow-container::after {\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n}\n\n\n.absol-vmenu-arrow {\n    display: inline-block;\n    font-size: inherit;\n    vertical-align: middle;\n}\n\n.absol-menu-item-disable .absol-vmenu-arrow {\n    display: none;\n}\n\n.absol-vmenu-button:hover,\n.absol-vmenu .absol-vmenu-button-hover {\n    background-color: rgb(214, 214, 217);\n}\n\n.absol-menu-item-disable .absol-vmenu-button:hover,\n.absol-menu-item-disable .absol-vmenu .absol-vmenu-button-hover,\n.absol-menu-item-disable .absol-hmenu-button:hover,\n.absol-menu-item-disable .absol-hmenu .absol-hmenu-button-hover {\n    background-color: transparent;\n}\n\n.absol-vmenu-line {\n    text-align: center;\n    padding: 0.2em 1em;\n}\n\n.absol-vmenu-line > div {\n    height: 1px;\n    background-color: rgb(97, 97, 97);\n}\n\n.absol-menu-item-disable {\n}\n\n.absol-menu-item-disable button {\n    color: rgb(155, 155, 159);\n}\n\n.dark .absol-menu-item-disable button {\n    color: rgb(100, 100, 100);\n}\n\n.dark .absol-vmenu-button:hover,\n.dark .absol-vmenu .absol-vmenu-button-hover {\n    background-color: rgb(9, 71, 113);\n}\n\n\n.dark .absol-hmenu .absol-dropdown-content,\n.dark .absol-hmenu .absol-dropright-content {\n    background-color: rgb(37, 37, 38);\n}\n\n\n.dark .absol-hmenu-button,\n.dark .absol-vmenu-button {\n    color: rgb(200, 200, 200);\n\n}\n\n\n.dark .absol-hmenu-button:hover,\n.dark .absol-hmenu .absol-hmenu-button-hover {\n    background-color: rgb(80, 80, 80);\n}\n\n\n.dark .absol-hmenu {\n    background-color: rgb(33, 33, 33);\n}\n\n/*standard-alone*/\n.absol-vmenu-button.standard-alone {\n    height: 2em;\n    border-radius: 0.3em;\n    border: solid rgb(169, 169, 170) 1px;\n    outline: none;\n}\n\n.as-v-root-menu {\n    display: inline-block;\n    box-sizing: border-box;\n    /*overflow-y: auto;*/\n    /*overflow-x: hidden;*/\n}", ""]);



/***/ }),

/***/ 8904:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-conversation-box {\n    display: flex;\n    flex-direction: column;\n}\n\n.as-conversation-box-message-ctn {\n    flex-grow: 1;\n}\n\n.as-conversation-box-input-ctn {\n    /** empty**/\n}\n\n.as-message-input {\n    position: relative;\n    box-sizing: border-box;\n    padding-top: 5px;\n    padding-bottom: 5px;\n    padding-left: 5px;\n    overflow: visible;\n    --plugin-buttons-width: 0px;\n    font-size: var(--as-input-font-size);\n    font-family: var(--as-input-font-family);\n}\n\n.as-message-input * {\n    font: inherit;\n}\n\n\n.as-message-input-plugin-btn {\n    width: 40px;\n    height: 40px;\n    padding: 0;\n    border: none;\n    color: rgb(122, 122, 122);\n    background-color: rgb(241, 241, 241);\n    outline: none;\n    border-radius: 50%;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.as-message-input-plugin-btn:active {\n    background-color: rgb(212, 212, 212);\n}\n\n.as-message-input-plugin-btn:hover {\n    background-color: rgb(235, 235, 235);\n\n}\n\n\n.as-message-input-plugin-btn span {\n    font-size: 24px;\n}\n\n\n.as-message-input-right {\n    position: absolute;\n    bottom: 10px;\n    right: 5px;\n    z-index: 0;\n    white-space: nowrap;\n}\n\n.as-message-input-right .as-message-input-plugin-btn {\n    margin-left: 10px;\n}\n\n\n.as-message-input-emoji-btn-ctn {\n    position: absolute;\n    left: 5px;\n    bottom: 5px;\n}\n\n\n.as-message-input-pre-ctn {\n    position: relative;\n    width: calc(100% - 55px - var(--plugin-buttons-width));\n    border-radius: 25px;\n    box-sizing: border-box;\n    transition: width 0.1s;\n    padding: 10px 20px 10px 50px;\n    background-color: rgb(241, 241, 244);\n}\n\n\n.as-message-input-pre-ctn::after {\n    display: inline-block;\n    content: \"\";\n    height: 30px;\n    vertical-align: middle;\n}\n\n\n.as-message-input.as-has-text .as-message-input-pre-ctn,\n.as-message-input.as-has-quote .as-message-input-pre-ctn,\n.as-message-input.as-has-attachment .as-message-input-pre-ctn {\n    width: calc(100% - 55px);\n}\n\n\n.as-message-input-pre {\n    display: inline-block;\n    width: calc(100% - 2px);\n    max-height: 6.5em;\n    box-sizing: border-box;\n    font-family: inherit;\n    font-size: inherit;\n    outline: none;\n    vertical-align: middle;\n    margin: 0;\n    white-space: pre-wrap;\n    overflow-x: hidden;\n    overflow-y: auto;\n    line-height: 1.5;\n    border: none;\n}\n\n.as-message-input-pre:before {\n    content: \"\";\n    line-height: 30px;\n    display: inline;\n    vertical-align: middle;\n}\n\n.as-message-input-camera-caller,\n.as-message-input-camera-microphone {\n    display: none;\n}\n\n.as-message-input-emoji-picker-ctn {\n    position: absolute;\n    bottom: 100%;\n    left: 0;\n    right: 0;\n    user-select: none;\n    -webkit-user-select: none;\n    background-color: white;\n}\n\n\n.as-message-input-plugin-btn.as-message-input-plugin-send {\n    color: white;\n    background: linear-gradient(135deg, rgb(0, 120, 212), rgb(0, 188, 242));\n    transform: scale(1);\n    transition: scale 0.1s;\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send span {\n    font-size: 20px;\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send:hover {\n    background: linear-gradient(135deg, rgb(0, 140, 212), rgb(0, 208, 252));\n}\n\n.as-message-input-plugin-btn.as-message-input-plugin-send:active {\n    transform: scale(0.9);\n}\n\n\n.as-message-input:not(.as-text-changed):not(.as-has-attachment):not(.as-has-quote) .as-message-input-plugin-send,\n.as-message-input:not(.as-has-text):not(.as-has-attachment):not(.as-has-quote) .as-message-input-plugin-send,\n.as-message-input:not(.as-mode-edit) .as-message-input-plugin-cancel,\n.as-message-input.as-mode-edit.as-text-changed.as-has-text .as-message-input-plugin-cancel,\n.as-message-input:not(.as-has-attachment):not(.as-drag-hover) .as-message-input-attachment-ctn,\n.as-message-input.as-auto-send .as-message-input-attachment-ctn,\n.as-message-input.as-mode-edit .as-message-input-plugin-file,\n.as-message-input.as-has-text .as-message-input-plugin-file,\n.as-message-input.as-has-quote .as-message-input-plugin-file,\n.as-message-input:not(.as-has-quote) .as-message-quote-box {\n    display: none;\n}\n\n.as-message-input .as-message-quote-box {\n    border-bottom: 1px solid #ddd;\n}\n\n.as-message-quote-box {\n    position: relative;\n\n}\n\n.as-message-input.as-has-attachment .as-message-quote-box {\n    margin-bottom: 5px;\n}\n\n.as-message-quote-remove-btn {\n    position: absolute;\n    color: rgb(43, 44, 51);\n    right: -7px;\n    top: 5px;\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    background: transparent;\n    border: none;\n    border-radius: 50%;\n    font-size: 16px;\n    outline: none;\n}\n\n.as-message-quote-remove-btn:hover {\n    color: rgb(143, 144, 151);\n}\n\n.as-message-quote-box {\n    user-select: none;\n    -webkit-user-select: none;\n}\n\n.as-message-quote-box:not(.as-removable) .as-message-quote-remove-btn {\n    display: none;\n}\n\n\n.as-message-quote-box > div {\n    display: inline-block;\n    vertical-align: top;\n}\n\n.as-message-quote-box:not(.as-has-img):not(.as-has-file) .as-message-quote-img {\n    display: none;\n}\n\n.as-message-quote-img {\n    width: 40px;\n    height: 40px;\n    padding: 5px;\n    box-sizing: border-box;\n    background-size: cover;\n    background-origin: border-box;\n    background-position: center;\n    background-repeat: no-repeat;\n}\n\n.as-message-quote-sym {\n    width: 25px;\n}\n\n.as-message-quote-sym > span {\n    font-size: 25px;\n    color: rgb(169, 169, 172);\n}\n\n.as-message-quote-content {\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    width: calc(100% - 26px);\n    box-sizing: border-box;\n    padding-left: 20px;\n}\n\n.as-message-quote-box.as-has-img .as-message-quote-content,\n.as-message-quote-box.as-has-file .as-message-quote-content {\n    width: calc(100% - 66px);\n    padding-left: 5px;\n}\n\n.as-message-quote-box.as-has-file .as-message-quote-img {\n    background-origin: padding-box;\n    background-size: contain;\n}\n\n.as-message-quote-text {\n    font-size: 1.14em;\n    line-height: 1.75;\n    font-style: italic;\n    color: rgb(43, 44, 51);\n    max-width: 100%;\n    word-break: break-word;\n    white-space: pre-wrap;\n}\n\n.as-message-quote-box.as-shorten-text .as-message-quote-text {\n    word-break: normal;\n\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.as-message-quote-text .as-emoji {\n    width: 20px;\n    height: 20px;\n}\n\n.as-message-quote-desc {\n    font-size: 0.85em;\n    color: rgb(80, 80, 88);\n}\n\n.as-message-input-attachment-ctn {\n    border-bottom: 1px solid #ddd;\n    max-height: 170px;\n    overflow-y: auto;\n}\n\n\n.as-message-input-attach-preview {\n    display: inline-block;\n    position: relative;\n    width: 135px;\n    height: 135px;\n    vertical-align: middle;\n    margin-right: 5px;\n    margin-bottom: 5px;\n    border-radius: 10px;\n    background-color: white;\n    overflow: hidden;\n}\n\n.as-message-input-attach-preview-image {\n    min-width: 20px;\n    image-orientation: from-image;\n    width: 100%;\n    height: 100%;\n    background-size: cover;\n    background-position: center center;\n    background-repeat: no-repeat;\n}\n\n\n.as-message-input-attach-preview-file {\n    max-width: 50%;\n    max-height: 50%;\n    margin-left: 10px;\n    margin-top: 10px;\n}\n\n.as-message-input-attach-preview-close-btn {\n    position: absolute;\n    right: 10px;\n    top: 10px;\n    width: 18px;\n    height: 18px;\n    border-radius: 50%;\n    text-align: center;\n    border: 1px solid white;\n    outline: none;\n    padding: 0;\n    color: white;\n    -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n    -moz-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n    box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.64);\n    background-color: rgba(100, 100, 100, 0.5);\n}\n\n.as-message-input-attach-preview-close-btn span {\n    font-size: 14px;\n}\n\n.as-message-input-attach-preview-close-btn:hover {\n    background-color: rgba(255, 255, 255, 0.5);\n    color: rgb(200, 200, 200);\n}\n\n.as-message-input-attach-preview-close-btn:active {\n    background-color: rgba(255, 255, 255, 0.7);\n    color: rgb(255, 255, 255);\n}\n\n\n.as-message-input:not(.as-drag-hover) .as-message-input-attachment-add-btn-drop,\n.as-message-input.as-drag-hover .as-message-input-attachment-add-btn-plus {\n    display: none;\n}\n\n\n.as-message-input-attach-preview-info {\n    position: absolute;\n    left: 10px;\n    bottom: 10px;\n    right: 10px;\n    max-height: calc(100% - 20px);\n    text-shadow: 0px 1px 3px white;\n    color: black;\n    font-size: 14px;\n    font-family: Arial, Helvetica, sans-serif;\n}\n\n.as-message-input-attach-preview-name {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.as-message-input-attach-preview-size {\n    color: #42494c;\n}\n\n.as-message-input-attachment-add-btn {\n    display: inline-block;\n    vertical-align: middle;\n    height: 135px;\n    width: 60px;\n    border: none;\n    border-radius: 10px;\n    padding: 0;\n    background-color: rgb(196, 196, 200);\n    color: white;\n    font-size: 50px;\n    outline: none;\n    margin-bottom: 10px;\n}\n\n.as-message-input-attachment-add-btn:hover {\n    background-color: rgb(169, 169, 169)\n\n}\n\n.as-message-input-attachment-add-btn:active {\n    background-color: rgb(138, 141, 145)\n}\n\n.as-message-input-external-tools-popup {\n    position: absolute;\n    left: 0;\n    max-width: 100%;\n    bottom: 100%;\n    background-color: white;\n}\n\nimg.as-emoji {\n    vertical-align: bottom;\n}\n\nspan.as-emoji-text {\n    position: absolute;\n    color: transparent;\n    width: 20px;\n    opacity: 0;\n}", ""]);



/***/ }),

/***/ 918:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-modal {\n    position: fixed;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    z-index: 1000;\n    white-space: nowrap;\n}\n\n.as-modal.as-hidden{\n    z-index: -1000;\n    visibility: hidden;\n    opacity: 0;\n}\n\n.as-modal.as-center {\n    text-align: center;\n}\n\n\n.as-modal.as-middle::before {\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n    width: 0;\n}\n\n.as-modal > .as-modal-content {\n    display: inline-block;\n    text-align: initial;\n    white-space: initial;\n}\n\n/*for content*/\n.as-modal.as-middle > .as-modal-content {\n    vertical-align: middle;\n}\n", ""]);



/***/ }),

/***/ 8257:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --multi-select-menu-max-height: 90px;\n}\n\n.as-multi-select-menu {\n    --list-min-width: 40px;\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    min-height: var(--select-box-min-height);\n    min-width: var(--list-min-width);\n    border: solid 1px #d6d6d6;\n    border-radius: 3px;\n    box-sizing: border-box;\n    outline: none;\n    background-color: white;\n    padding-right: 45px;\n}\n\n.as-multi-select-menu-item-ctn {\n    display: block;\n    max-height: var(--multi-select-menu-max-height);\n    overflow-y: auto;\n}\n\n\n.as-multi-select-menu-toggle-btn {\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    width: 30px;\n    pointer-events: none;\n    border: none;\n    background-color: transparent;\n}\n\n.as-multi-select-menu-toggle-btn svg.dropdown {\n    width: 10px;\n    height: 10px;\n    fill: #929292;\n}\n\n.as-multi-select-menu:hover svg.dropdown {\n    fill: black;\n}\n\n.as-multi-select-menu.as-disable-click-to-focus .as-multi-select-menu-toggle-btn{\n    display: none;\n}\n\n.as-multi-select-menu .absol-selectbox-item {\n    margin: calc((var(--select-box-min-height) - 2px - var(--select-box-item-height)) / 2) 2px;\n}\n\n\n.as-multi-select-menu.as-item-focusable .absol-selectbox-item.as-active{\n    background-color: var(--select-box-focus-item-color);\n}\n\n.as-multi-select-menu.as-disabled {\n    pointer-events: none;\n    background-color: #ebebe4;\n}", ""]);



/***/ }),

/***/ 3448:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-number-input {\n    text-align: right;\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    min-width: calc(1em + 2px);\n    height: calc(2em + 2px);\n    border: solid 1px #d6d6d6;\n    font-size: 14px;\n    box-sizing: border-box;\n    width: 4em;\n}\n\n.absol-number-input-button-up-container {\n    top: 0;\n}\n\n.absol-number-input-button-down-container {\n    bottom: 0;\n}\n\n.absol-number-input-button-up-container,\n.absol-number-input-button-down-container {\n    right: 0;\n    position: absolute;\n    height: 1em;\n    width: 1em;\n    max-height: 50%;\n}\n\n.absol-number-input-button-up-container > button,\n.absol-number-input-button-down-container > button {\n    width: 100%;\n    height: 100%;\n    line-height: 1;\n    padding: 0;\n    border: none;\n    box-sizing: border-box;\n    outline: none;\n    color: rgb(101, 101, 101);\n    background-color: transparent;\n}\n\n.absol-number-input-button-up-container > button:active,\n.absol-number-input-button-down-container > button:active {\n    color: black;\n    background-color: rgba(101, 101, 101, 0.3);\n}\n\n.absol-number-input-text-container {\n    left: 0em;\n    right: 1.2em;\n    top: 0;\n    bottom: 0;\n    position: absolute;\n}\n\n\n.absol-number-input-text-container > input[type=\"text\"] {\n    border: none;\n    outline: none;\n    width: 100%;\n    height: 100%;\n    text-align: right;\n    padding: 0 0.2em;\n    box-sizing: border-box;\n}\n\n.absol-number-input.absol-disabled {\n    pointer-events: none;\n    color: var(--as-disabled-text-color);\n}\n\n.absol-number-input.absol-disabled input {\n    background-color: var(--as-disabled-background-color);\n}\n\n.absol-number-input.absol-disabled .absol-number-input-button-up-container,\n.absol-number-input.absol-disabled .absol-number-input-button-down-container {\n    opacity: 0.3;\n}", ""]);



/***/ }),

/***/ 7557:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-onscreen-widget {\n    --client-width: 0px;\n    --client-height: 0px;\n    --cx: 0.9;\n    --cy: 0.9;\n    position: fixed;\n    z-index: 1000000;\n    left: calc((100vw - var(--client-width) - 4px) * var(--cx) + 2px);\n    top: calc((100vh - var(--client-height) - 4px) * var(--cy) + 2px);\n    touch-action: none;\n    user-select: none;\n}\n\n", ""]);



/***/ }),

/***/ 1154:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-onscreen-window {\n    z-index: 1002;\n    position: fixed;\n    left: 10px;\n    top: 10px;\n    width: 12em;\n    height: 5em;\n    /*default size*/\n    /* min-width: 12em;\n    min-height: 1.4em; */\n}\n\n.absol-onscreen-window-content {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    background: white;\n    -webkit-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n    -moz-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n    box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n}\n\n.absol-onscreen-window-head-bar {\n    height: 1.4em;\n    position: relative;\n    background-color: rgba(169, 169, 169, 0.15);\n    padding: 0.2em;\n    box-sizing: border-box;\n}\n\n.absol-onscreen-window-head-bar-icon{\n    margin-right: 0.2em;\n    font-size: inherit;\n}\n\nspan.absol-onscreen-window-head-bar-icon {\n    line-height: 1.2em;\n}\n\nsvg.absol-onscreen-window-head-bar-icon{\n    width: 1.2em;\n    height: 1.2em;\n}\n\nspan.absol-onscreen-window-head-bar-title {\n    line-height: 1.2em;\n    font-size: 1em;\n    color: rgb(33, 33, 34);\n}\n\n.absol-onscreen-window-head-bar-buttons {\n    position: absolute;\n    right: 0.1em;\n    top: 0.1em;\n    bottom: 0.1em;\n}\n\n.absol-onscreen-window-head-bar-buttons>button {\n    height: 100%;\n    width: 1em;\n    font-size: 1em;\n    padding: 0;\n    margin: 0 0 0 0.1em;\n    border: none;\n    color: rgb(169, 169, 169);\n    outline: none;\n}\n\n.absol-onscreen-window-head-bar-buttons>button:hover {\n    color: rgb(103, 103, 103);\n}\n\n.absol-onscreen-window-head-bar-buttons>button:active {\n    color: rgb(33, 33, 34);\n}\n\n.absol-onscreen-window-head-bar-buttons>button:hover>.mdi-close {\n    color: rgb(255, 59, 59);\n}\n\n.absol-onscreen-window-head-bar-buttons>button>span {\n    vertical-align: middle;\n}\n\n.absol-onscreen-window-body-container {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 1.4em;\n    bottom: 0;\n}\n\n\n.absol-onscreen-window-moving-modal {\n    position: fixed;\n    left: 1px;\n    right: 1px;\n    top: 1px;\n    bottom: 1px;\n    z-index: 100006;\n}\n\n.absol-onscreen-window-resizer {\n    position: absolute;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom {\n    bottom: -3px;\n    height: 6px;\n    left: 3px;\n    right: 3px;\n    z-index: 3;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top {\n    top: -3px;\n    height: 6px;\n    left: 3px;\n    right: 3px;\n    z-index: 3;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-left {\n    left: -3px;\n    top: 3px;\n    bottom: 3px;\n    width: 6px;\n    cursor: ew-resize;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-right {\n    right: -3px;\n    top: 3px;\n    bottom: 3px;\n    width: 6px;\n    cursor: ew-resize;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right {\n    width: 6px;\n    height: 6px;\n    right: -3px;\n    bottom: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left {\n    width: 6px;\n    height: 6px;\n    left: -3px;\n    bottom: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left {\n    width: 6px;\n    height: 6px;\n    left: -3px;\n    top: -3px;\n}\n\n.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right {\n    width: 6px;\n    height: 6px;\n    right: -3px;\n    top: -3px;\n}\n\n\n.absol-onscreen-window-resize-top,\n.absol-onscreen-window-resize-bottom {\n    cursor: ns-resize;\n\n}\n\n.absol-onscreen-window-resize-left,\n.absol-onscreen-window-resize-right {\n    cursor: ew-resize;\n\n}\n\n\n.absol-onscreen-window-resize-bottom-right {\n    cursor: se-resize;\n}\n\n.absol-onscreen-window-resize-bottom-left {\n    cursor: sw-resize;\n}\n\n.absol-onscreen-window-resize-top-left {\n    cursor: nw-resize;\n}\n\n.absol-onscreen-window-resize-top-right {\n    cursor: ne-resize;\n}", ""]);



/***/ }),

/***/ 8351:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-page-indicator {\n    text-align: center;\n    white-space: nowrap;\n}\n\n.as-page-indicator::before{\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n}\n\n.as-page-indicator-item {\n    display: inline-block;\n    vertical-align: middle;\n    text-align: center;\n    font-size: inherit;\n    width: 1.5em;\n    padding: 0;\n    border: 0;\n    background-color: transparent;\n}\n\n\n\n.as-page-indicator-item::before {\n    content: \"\";\n    display: inline-block;\n    height: 0.5em;\n    width: 0.5em;\n    transition: width 0.25s, height 0.25s, color 0.25s;\n    border-radius: 50%;\n    background-color: rgb(196, 196, 196);\n    font-size: inherit;\n    vertical-align: middle;\n}\n\n.as-page-indicator-item.as-active::before{\n    width: 0.75em;\n    height: 0.75em;\n    background-color: var(--variant-color-primary);\n\n}", ""]);



/***/ }),

/***/ 6993:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-page-selector{\n    white-space: normal;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.absol-page-selector > ul{\n    margin-bottom: 0px;\n    margin-top: 0;\n}\n\n.absol-page-number-buttons{\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-page-number-input > label{\n    font-weight: 100;\n}\n\n.absol-page-number-buttons > li.page-previous, \n.absol-page-number-buttons > li.page-next,\n.absol-page-number-buttons > li.page-first,\n.absol-page-number-buttons > li.page-last\n{\n    display: inline-block;\n    height: 30px;\n    padding-left: 10px;\n    padding-right: 10px;\n    text-align: center;\n    transition: all .3s linear;\n    background-color: transparent;\n    cursor: pointer;\n}\n\n.absol-page-number-buttons > li.absol-page-number{\n    display: inline-block;\n    height: 30px;\n    width: 40px;\n    text-align: center;\n    transition: all .3s linear;\n    background-color: transparent;\n    cursor: pointer;\n}\n\n\n.absol-page-number-buttons > li.absol-page-number.active{\n    box-shadow:  0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);\n    background-color: #4285f4;\n    border-radius:2px; \n    \n}\n\n.absol-page-number-buttons > li.absol-page-number.active > a{\n\tcolor: white;\n    \n}\n\n.absol-page-number-buttons > li> a{\n    line-height: 30px;\n    text-decoration:none;\n    outline: none;\n}\n\n.absol-page-number-buttons > li:not(.active):hover{\n    background-color: #eee;\n\n}\n\n.absol-page-selector .absol-page-number-input{\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.absol-page-selector .absol-page-number-input  input[type=\"text\"]{\n    width: 3em;\n    margin-left: 5px; \n    margin-right: 10px;\n    text-align: center;\n    height: 26px;\n    border: none;\n    border: solid 1px #ccc; \n    border-radius: 2px;\n\n}\n\n.absol-page-link {\n    color: #147af6;\n    cursor: pointer;\n    text-decoration: underline;\n}\n\n.absol-page-number {\n    color: #147af6;\n    cursor: pointer;\n}", ""]);



/***/ }),

/***/ 6155:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-preinput {\n    margin: 0;\n    padding: 0;\n    white-space: pre-wrap;\n    -moz-user-modify: read-write;\n    -webkit-user-modify: read-write;\n    word-break: normal;\n}\npre.as-preinput{\n    word-break: normal;\n}\n\n\n.as-preinput img {\n    display: none;\n}", ""]);



/***/ }),

/***/ 3899:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-progress-bar {\n    height: 1em;\n    background-color: #e9ecef;\n    border-radius: .25em;\n    box-sizing: border-box;\n    overflow: hidden;\n}\n\n\n.as-progress-bar-value {\n    height: 100%;\n    width: 0;\n    color: #fff;\n    text-align: center;\n    white-space: nowrap;\n    background-color: #007bff;\n    transition: width .6s ease;\n}\n\n.as-progress-bar.as-variant-success .as-progress-bar-value {\n    background-color: #28a745;\n}\n\n.as-progress-bar.as-variant-info .as-progress-bar-value {\n    background-color: #17a2b8;\n}\n\n.as-progress-bar.as-variant-warning .as-progress-bar-value {\n    background-color: #ffc107;\n}\n\n.as-progress-bar.as-variant-danger .as-progress-bar-value {\n    background-color: #dc3545;\n}\n\n\n.as-progress-bar.as-striped .as-progress-bar-value,\n.as-progress-bar.as-animated .as-progress-bar-value {\n    background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent);\n    background-size: 1.33333em 1.33333em;\n}\n\n@keyframes as-progress-bar-stripes {\n    0% {\n        background-position: 1.33333em 0\n    }\n\n    to {\n        background-position: 0 0\n    }\n}\n\n.as-progress-bar.as-animated .as-progress-bar-value {\n    animation: as-progress-bar-stripes 1s linear infinite;\n}", ""]);



/***/ }),

/***/ 780:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-quick-list-button {\n    box-sizing: border-box;\n    height: calc(2em + 2px);\n    font-size: 14px;\n}\n\n.as-quick-list-button .as-flexicon-button-text-container {\n    border-right: solid 1px #bfbfbf;\n}\n\n\n.as-quick-list-button-follower .absol-selectlist {\n    max-height: calc(100vh - 20px);\n    overflow-y: auto;\n    border: solid 1px rgb(100, 100, 255);\n    box-sizing: border-box;\n    background-color: white;\n    display: inline-block;\n    vertical-align: top;\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n}", ""]);



/***/ }),

/***/ 2453:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-quick-path {\n    position: relative;\n    box-sizing: border-box;\n    user-select: none;\n    -webkit-user-select: none;\n    -ms-user-select: none;\n    -moz-user-select: none;\n    min-height: 1.5em;\n}\n\n.absol-quick-path button {\n    outline: none;\n    color: rgb(69, 69, 69);\n    height: 1.5em;\n}\n\n.absol-quick-path button:hover {\n    color: black;\n}\n\n.absol-quick-path .toggler-ico path {\n    fill: rgb(104, 104, 104);\n}\n\n.dark .absol-quick-path button {\n    color: rgb(200, 200, 200);\n}\n\n\n.dark .absol-quick-path button:hover {\n    color: white;\n}\n\n.dark .absol-quick-path .toggler-ico path {\n    fill: rgb(169, 169, 169);\n}\n\n\n\n.absol-quick-path-btn:focus span {\n    text-decoration: underline;\n}\n\n/* \n.absol-quick-path-btn .toggler-ico path {\n    fill: rgb(104, 104, 104);\n} */\n", ""]);



/***/ }),

/***/ 1142:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-radio {\n    display: inline;\n    cursor: pointer;\n    white-space: nowrap;\n}\n\n.absol-radio input {\n    display: none;\n}\n\n.absol-radio > span {\n    white-space: pre;\n    cursor: inherit;\n    vertical-align: middle;\n    margin: 0;\n    font-size: inherit;\n}\n\n.absol-radio > span:empty {\n    display: none;\n}\n\n.absol-radio > svg {\n    display: inline-block;\n    vertical-align: middle;\n    width: calc(1em + 4px);\n    height: calc(1em + 4px);\n}\n\n.absol-radio > svg .bound {\n    stroke: #929292;\n    fill: white;\n}\n\n.absol-radio:hover > svg .bound {\n    fill: #d6d6d6;\n    stroke: black;\n}\n\n/* \n.absol-radio>svg .bound {\n    fill: none;\n} */\n\n.absol-radio-icon .border {\n}\n\n.absol-radio .dot {\n    transition: opacity 0.07s;\n    opacity: 0;\n    fill: #606060;\n}\n\n.absol-radio:hover .dot {\n    transition: opacity 0.07s;\n    opacity: 0;\n    fill: black;\n}\n\n.absol-radio.checked .dot {\n    opacity: 1;\n    transition: opacity 0.1s;\n}\n\n.absol-radio:not(.right) > span.absol-radio-left-label {\n    display: none;\n}\n\n.absol-radio.right > span.absol-radio-right-label {\n    display: none;\n}\n\nspan.absol-radio-left-label {\n    padding-right: 0.3em;\n}\n\nspan.absol-radio-right-label {\n    padding-left: 0.3em;\n}\n\n\n\n\n.absol-radio.disabled {\n    cursor: default;\n}\n\n.absol-radio.disabled{\n    color: #777;\n}\n\n.absol-radio.disabled:hover .dot,\n.absol-radio.disabled .dot {\n    fill: #929292;\n}\n\n.absol-radio.disabled .bound,\n.absol-radio.disabled:hover .bound {\n    stroke: #929292;\n    fill: #ebebe4;\n}\n\n\n.absol-radio .standar-alone {\n    display: inline-block;\n}\n\ninput:checked ~ .absol-radio-icon .dot {\n    opacity: 1;\n}", ""]);



/***/ }),

/***/ 3586:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-radio-button {\n    display: inline;\n    cursor: pointer;\n    white-space: nowrap;\n}\n\n.absol-radio-button input {\n    display: none;\n}\n\n\n.absol-radio-button > svg {\n    display: inline-block;\n    vertical-align: middle;\n    width: calc(1em + 4px);\n    height: calc(1em + 4px);\n}\n\n.absol-radio-button > svg .bound {\n    stroke: #929292;\n    fill: white;\n}\n\n.absol-radio-button:hover > svg .bound {\n    fill: #d6d6d6;\n    stroke: black;\n}\n\n.absol-radio-icon .border {\n}\n\n.absol-radio-button .dot {\n    transition: opacity 0.07s;\n    opacity: 0;\n    fill: #606060;\n}\n\n.absol-radio-button:hover .dot {\n    transition: opacity 0.07s;\n    opacity: 0;\n    fill: black;\n}\n\n.absol-radio-button.checked .dot {\n    opacity: 1;\n    transition: opacity 0.1s;\n}\n\n\n\n.absol-radio-button > span:last-child {\n    display: none;\n}\n\n\n.absol-radio-button.disabled {\n    cursor: default;\n}\n\n.absol-radio-button.disabled:hover .dot,\n.absol-radio-button.disabled .dot {\n    fill: #929292;\n}\n\n.absol-radio-button.disabled .bound,\n.absol-radio-button.disabled:hover .bound {\n    stroke: #929292;\n    fill: #ebebe4;\n}\n\n\n.absol-radio .standar-alone {\n    display: inline-block;\n}\n\n.absol-radio > span:not(:last-child) {\n    padding-right: 0.3em;\n}\n\n.absol-radio span:last-child {\n    padding-left: 0.3em;\n}\n\ninput:checked ~ .absol-radio-icon .dot {\n    opacity: 1;\n}", ""]);



/***/ }),

/***/ 8239:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "label.as-radio-input {\n    display: inline-block;\n    position: relative;\n    width: calc(1em + 2px);\n    height: calc(1em + 2px);\n    cursor: pointer;\n    font-size: inherit;\n    box-sizing: border-box;\n    overflow: hidden;\n    vertical-align: middle;\n    border-radius: 50%;\n    border: 1px solid var(--candy-border-color);\n    text-align: center;\n    background-color: white;\n    text-align: center;\n    white-space: nowrap;\n}\n\nlabel.as-radio-input:hover {\n    background-color: var(--candy-hover-background-color);\n}\n\nlabel.as-radio-input::after{\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n}\n\n.as-radio-input .as-radio-input-check-mark {\n    display: inline-block;\n    vertical-align: middle;\n    width: 0.5em;\n    height: 0.5em;\n    background-color: #606060;\n    font-size: inherit;\n    border-radius: 50%;\n}\n\n.as-radio-input input.as-radio-input-value {\n    font-size: inherit;\n    position: absolute;\n    right: 100%;\n    top: 0;\n    opacity: 0.0;\n}\n\ninput.as-radio-input-value:not(:checked) ~ .as-radio-input-check-mark {\n    display: none;\n}\n\n\nlabel.as-radio-input.as-disabled,\nlabel.as-radio-input.as-disabled:hover {\n    border-color: #929292;\n    background-color: #ebebe4;\n}", ""]);



/***/ }),

/***/ 1209:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-resize-box {\n    position: absolute;\n    /*or fixed*/\n    z-index: 1;\n    box-sizing: border-box;\n    opacity: 0.5;\n    pointer-events: none;\n}\n\n.as-resize-box-body {\n    margin: -1px;\n    width: calc(100% + 2px);\n    height: calc(100% + 2px);\n    position: relative;\n    box-sizing: border-box;\n    border: solid 2px rgb(32, 150, 218);\n}\n\n.as-resize-box.as-can-move .as-resize-box-body {\n    cursor: move;\n    pointer-events: all;\n}\n\n.as-resize-box.as-can-click .as-resize-box-body {\n    pointer-events: all;\n}\n\n.as-resize-box.as-can-move .as-resize-box-dot,\n.as-resize-box.as-can-resize .as-resize-box-dot.right,\n.as-resize-box.as-can-resize .as-resize-box-dot.bottom,\n.as-resize-box.as-can-resize .as-resize-box-dot.right-bottom {\n    display: unset;\n\n}\n\n.as-resize-box-dot {\n    position: absolute;\n    width: 0.6em;\n    height: 0.6em;\n    background: rgb(32, 150, 218);\n    display: none;\n    pointer-events: all;\n}\n\n.as-resize-box-dot.left-top {\n    top: calc(-0.3em - 1px);\n    left: calc(-0.3em - 1px);\n    cursor: nw-resize;\n}\n\n.as-resize-box-dot.left-bottom {\n    bottom: calc(-0.3em - 1px);\n    left: calc(-0.3em - 1px);\n    cursor: sw-resize;\n}\n\n.as-resize-box-dot.left {\n    top: calc(50% - 0.3em);\n    left: calc(-0.3em - 1px);\n    cursor: w-resize;\n}\n\n.as-resize-box-dot.top {\n    top: calc(-0.3em - 1px);\n    left: calc(50% - 0.3em);\n    cursor: n-resize;\n}\n\n.as-resize-box-dot.bottom {\n    bottom: calc(-0.3em - 1px);\n    left: calc(50% - 0.3em);\n    cursor: s-resize;\n}\n\n.as-resize-box-dot.right-top {\n    top: calc(-0.3em - 1px);\n    right: calc(-0.3em - 1px);\n    cursor: ne-resize;\n}\n\n.as-resize-box-dot.right-bottom {\n    bottom: calc(-0.3em - 1px);\n    right: calc(-0.3em - 1px);\n    cursor: se-resize;\n}\n\n\n.as-resize-box-dot.right {\n    top: calc(50% - 0.3em);\n    right: calc(-0.3em - 1px);\n    cursor: e-resize;\n}\n\n.as-resize-box-overiding .as-resize-box-dot,\n.as-resize-box-overiding .as-resize-box-body {\n    cursor: unset;\n}\n\n.as-resize-box-overiding.body {\n    cursor: move !important;\n}\n\n\n.as-resize-box-overiding.left-top {\n    cursor: nw-resize !important;\n}\n\n.as-resize-box-overiding.left-bottom {\n    cursor: sw-resize !important;\n}\n\n.as-resize-box-overiding.left {\n    cursor: w-resize !important;\n}\n\n.as-resize-box-overiding.top {\n    cursor: n-resize !important;\n}\n\n.as-resize-box-overiding.bottom {\n    cursor: s-resize !important;\n}\n\n.as-resize-box-overiding.right-top {\n    cursor: ne-resize !important;\n}\n\n.as-resize-box-overiding.right-bottom {\n    cursor: se-resize !important;\n}\n\n\n.as-resize-box-overiding.right {\n    cursor: e-resize !important;\n}", ""]);



/***/ }),

/***/ 4559:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-ribbon-button {\n    display: inline-block;\n    vertical-align: middle;\n    height: 30px;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n\n    font-family: Arial, Helvetica, sans-serif;\n    box-sizing: border-box;\n    border-radius: 0;\n    outline: none;\n    border-style: solid;\n    border-color: transparent;\n    border-width: 1px 1px 1px 1px;\n    background-color: transparent;\n}\n\n.as-ribbon-button div,\n.as-ribbon-button span {\n    font-weight: inherit;\n    font-size: inherit;\n}\n\n.as-ribbon-button:hover {\n    background-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-button:active {\n    background-color: rgba(169, 168, 169, 0.3);\n}\n\n\n\n.as-ribbon-split-button:active:hover .as-ribbon-split-button-content > button,\n.as-ribbon-split-button:active .as-ribbon-split-button-content > button {\n    border-color: rgba(169, 168, 169, 0.3);\n}\n\n.as-ribbon-split-button:hover .as-ribbon-split-button-content > button {\n    border-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-button-icon {\n    font-size: 1.2em;\n    margin-right: 0.5em;\n    display: inline-block;\n    vertical-align: middle;\n}\n\nimg.as-ribbon-button-icon,\nsvg.as-ribbon-button-icon {\n    width: 1.2em;\n    height: 1.2em;\n}\n\n.as-ribbon-button-text {\n    display: inline-block;\n    vertical-align: middle;\n    font-size: inherit;\n}\n\n.as-ribbon-button.as-no-dropdown .mdi.mdi-chevron-down {\n    display: none;\n}", ""]);



/***/ }),

/***/ 8551:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-ribbon-split-button {\n    display: inline-block;\n    vertical-align: middle;\n    height: 30px;\n    font-family: Arial, Helvetica, sans-serif;\n    box-sizing: border-box;\n}\n\n.as-ribbon-split-button div,\n.as-ribbon-split-button span,\n.as-ribbon-split-button button {\n    font-weight: inherit;\n    font-size: inherit;\n}\n\n\n.as-ribbon-split-button-content {\n    height: 100%;\n}\n\n.as-ribbon-split-button-content > button {\n    font-family: inherit;\n    border-radius: 0;\n    background-color: transparent;\n    height: 100%;\n    margin-right: 0;\n    outline: none;\n    box-sizing: border-box;\n    border-style: solid;\n    border-color: transparent;\n    vertical-align: middle;\n}\n\n\n.as-ribbon-split-button-content > button:hover {\n    background-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-split-button-content > button:active {\n    background-color: rgba(169, 168, 169, 0.3);\n}\n\n\n.as-ribbon-split-button-primary {\n    font-size: inherit;\n    padding-left: 0.5em;\n    padding-right: 0;\n    border-width: 1px 0px 1px 1px;\n}\n\n.as-ribbon-split-button-extend {\n    color: rgb(37, 36, 35);\n    width: 16px;\n    padding: 0;\n    text-align: center;\n    font-size: 20px;\n    border-width: 1px 1px 1px 0px;\n}\n\n.as-ribbon-split-button-extend span:before {\n    margin-left: -3px;\n}\n\n\n.as-ribbon-split-button:active:hover .as-ribbon-split-button-content > button,\n.as-ribbon-split-button:active .as-ribbon-split-button-content > button {\n    border-color: rgba(169, 168, 169, 0.3);\n}\n\n.as-ribbon-split-button:hover .as-ribbon-split-button-content > button {\n    border-color: rgba(169, 168, 169, 0.15);\n}\n\n.as-ribbon-split-button-icon {\n    font-size: 1.2em;\n    margin-right: 0.5em;\n    display: inline-block;\n    vertical-align: middle;\n}\n\nimg.as-ribbon-split-button-icon,\nsvg.as-ribbon-split-button-icon {\n    width: 1.2em;\n    height: 1.2em;\n}\n\n.as-ribbon-split-button-text {\n    vertical-align: middle;\n    font-size: inherit;\n}\n\n.as-ribbon-split-button.as-no-dropdown .as-ribbon-split-button-extend {\n    display: none;\n}\n\n.as-ribbon-split-button.as-no-dropdown .as-ribbon-split-button-primary {\n    padding-right: 5px;\n    border-width: 1px 1px 1px 1px;\n}", ""]);



/***/ }),

/***/ 3478:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-rotated-text {\n\n}\n\n.as-rotated-text::after {\n    content: \"o\";\n    color: transparent;\n    display: inline;\n}\n\n.as-rotated-text-content {\n    transform: rotate(0deg);\n    transform-origin: 0.3em 50%;\n    display: block;\n    zoom: 1.001;\n}\n\n\n.as-rotated-text-anchor{\n    position: fixed;\n    z-index: 1000;\n}\n\n.as-rotated-text,.as-rotated-text-anchor,  .as-rotated-text-content{\n    font: inherit;\n}", ""]);



/***/ }),

/***/ 9355:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-vscroller {\n    position: relative;\n    overflow-x: hidden;\n}\n\n\n.absol-vscroller.disabled>.absol-vscroller-viewport {\n    overflow-y: visible;\n    margin-right: 0px;\n    min-width: 100%;\n}\n\n.absol-vscroller.disabled {\n    overflow: visible;\n    overflow-x: visible;\n\n}\n\n\n.absol-vscroller-viewport {\n    overflow-y: scroll;\n    box-sizing: content-box;\n\n}\n\n.absol-vscroller>.absol-vscroller-viewport {\n    max-height: 100%;\n}\n\n.absol-vscroller.limited-height>.absol-vscroller-viewport {\n    max-height: inherit;\n}\n\n\n/************  hscroller  ***********/\n.absol-hscroller {\n    position: relative;\n    overflow-y: hidden;\n}\n\n.absol-hscroller.disabled {\n    overflow: visible;\n    overflow-y: visible;\n}\n\n.absol-hscroller-viewport {\n    overflow-x: scroll;\n    box-sizing: content-box;\n    min-height: calc(100% + 17px);\n}\n\n.absol-hscroller.disabled>.absol-hscroller-viewport {\n    overflow-x: visible;\n    margin-bottom: 0px;\n}\n\n\n.absol-hscroller>.absol-hscroller-viewport {\n    max-width: 100%;\n}\n\n\n/********** scroll bar *********************/\n.absol-scrollbar-force-modal {\n    position: fixed;\n    top: 5px;\n    left: 5px;\n    right: 5px;\n    bottom: 5px;\n    z-index: 1000000;\n}\n\n.absol-scrollbar-container {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    z-index: 10;\n}\n\n.absol-scrollbar-container.vertical {\n    top: 0;\n    width: 7px;\n}\n\n.absol-scrollbar-container.horizontal {\n    height: 7px;\n    left: 0;\n}\n\n.absol-scrollbar-container>.absol-scrollbar {\n    width: 100%;\n    height: 100%;\n}\n\n\n\n\n\n.absol-scrollbar-container.vertical>.absol-scrollbar>.absol-scrollbar-button {\n    left: 1px;\n    right: 1px;\n    top: 0;\n}\n\n.absol-scrollbar-container.horizontal>.absol-scrollbar>.absol-scrollbar-button {\n    top: 1px;\n    bottom: 1px;\n    left: 0;\n}\n\n.absol-scrollbar {\n    position: relative;\n    background: transparent;\n}\n\n.absol-scrollbar-button {\n    position: absolute;\n    background-color: rgba(0, 0, 0, 0.25);\n    border-radius: 2px;\n}\n\n\n.absol-scrollbar.absol-hidden {\n    visibility: hidden;\n}", ""]);



/***/ }),

/***/ 3542:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-search-text-input {\n    position: relative;\n    height: 2em;\n    border-radius: 0.3em;\n    border: solid 1px #a9a9a9;\n    font-size: 14px;\n    background-color: white;\n}\n\n.absol-search-text-input.focus {\n    outline: solid 1px rgba(30, 30, 255, 0.4);\n}\n\n.absol-search-text-input-container {\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: 0;\n    right: 2em;\n}\n\n.absol-search-text-button-container {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 2em;\n    bottom: 0em;\n}\n\n.absol-search-text-button-container button {\n    width: 100%;\n    height: 100%;\n    outline: none;\n    border: none;\n    background: transparent;\n    padding: 0;\n    font-size: 1em;\n}\n\n.absol-search-text-button-container button>svg {\n    height: 1.14285714286em;\n    width: 1.14285714286em;\n    fill: rgb(132, 132, 132);\n}\n\n.absol-search-text-input-container input {\n    width: 100%;\n    height: 100%;\n    font-size: 1em;\n    box-sizing: border-box;\n    outline: none;\n    border: none;\n    background-color: transparent;\n    padding-left: 0.6em;\n}\n\n.absol-search-text-input:not(.searching) svg.times{\n    display: none;\n}\n\n.absol-search-text-input.searching svg.find{\n    display: none;\n}\n\n.absol-search-text-input-container input::-webkit-search-cancel-button{\n    display: none;\n}", ""]);



/***/ }),

/***/ 182:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --select-box-item-height: 20px;\n    --select-box-item-font-size: 14px;\n    --select-box-item-border-radius: 9px;\n    --select-box-item-close-opacity: 0;\n    --select-box-min-height: 30px;\n    --select-box-focus-item-color: rgb(208, 145, 239);\n}\n\n.absol-selectbox {\n    --list-min-width: 40px;\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    min-height: var(--select-box-min-height);\n    min-width: var(--list-min-width);\n    border: solid 1px #d6d6d6;\n    border-radius: 3px;\n    box-sizing: border-box;\n    padding-right: 20px;\n    overflow-y: auto;\n    outline: none;\n    background-color: white;\n}\n\n.absol-selectbox:not(.as-disable-click-to-focus) {\n    cursor: copy;\n}\n\n.absol-selectbox.as-disabled {\n    pointer-events: none;\n    background-color: var(--as-disabled-background-color);\n}\n\n.absol-selectbox.as-disabled .absol-selectbox-item {\n    opacity: 0.7;\n}\n\n.absol-selectbox {\n    white-space: normal;\n}\n\n.absol-selectbox .absol-selectbox-item {\n    margin: calc((var(--select-box-min-height) - 2px - var(--select-box-item-height)) / 2) 2px;\n}\n\n.absol-selectbox-item {\n    font-family: Arial, Helvetica, sans-serif;\n    display: inline-block;\n    position: relative;\n    font-size: var(--select-box-item-font-size);\n    height: var(--select-box-item-height);\n    box-sizing: border-box;\n    border-radius: var(--select-box-item-border-radius);\n    overflow: hidden;\n    background-color: #5bc0de;\n    border-color: #46b8da;\n    vertical-align: top;\n    white-space: normal;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    color: black;\n    cursor: pointer;\n}\n\n\n.absol-selectbox-item.as-theme-confirmed {\n    background-color: rgb(145, 228, 251);\n}\n\n.absol-selectbox-item.as-theme-declined {\n    background-color: rgb(255, 138, 138)\n}\n\n.absol-selectbox-item.as-theme-waiting {\n    background-color: rgb(255, 227, 174);\n    color: black;\n}\n\n.absol-selectbox-item-text {\n    height: var(--select-box-item-height);\n    padding-right: calc(var(--select-box-item-height) + 5px);\n    padding-left: 5px;\n    font-size: inherit;\n    white-space: nowrap;\n}\n\n.absol-selectbox-item-text:hover {\n    background-color: rgba(0, 0, 0, 0.0893617021);\n}\n\n.absol-selectbox-item-text span {\n    display: inline-block;\n    vertical-align: middle;\n    white-space: nowrap;\n}\n\n.absol-selectbox-item-close {\n    position: absolute;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    width: var(--select-box-item-height);\n    text-align: center;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    background-color: rgba(0, 0, 0, var(--select-box-item-close-opacity));\n    white-space: nowrap;\n}\n\n.absol-selectbox-item-close::after,\n.absol-selectbox-item-text::before {\n    content: \"\";\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n}\n\n.absol-selectbox-item-close span {\n    font-size: 1.25em;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.absol-selectbox.as-item-focusable .absol-selectbox-item.as-active {\n    background-color: var(--select-box-focus-item-color);\n}", ""]);



/***/ }),

/***/ 4994:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-selectlist {\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n}\n\n.absol-selectlist * {\n    box-sizing: border-box;\n}\n\n.absol-selectlist .absol-selectlist-item:hover {\n    background-color: #efefef;\n}\n\n.absol-selectlist .absol-selectlist-item {\n    height: 20px;\n    font-size: 14px;\n    cursor: pointer;\n}\n\n.absol-selectlist-item.as-selected {\n    background-color: #dfdfdf;\n}\n\n\n.absol-selectlist:not(.as-searching)>.absol-selectlist-item.as-last-in-group:not(:last-child) {\n    border-bottom: 1px solid #dddddd;\n}\n\n.absol-selectlist-item>span {\n    line-height: 20px;\n    white-space: pre;\n    padding-left: var(--as-input-horizontal-padding);\n    padding-right: var(--as-input-horizontal-padding);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.absol-selectlist-item {\n    position: relative;\n    box-sizing: border-box;\n}\n\n.absol-selectlist-item-desc-container {\n    position: absolute;\n    right: 0.3em;\n    top: 0;\n    bottom: 0;\n}\n\n.absol-selectlist-item-desc {\n    font-style: italic;\n    line-height: 20px;\n    white-space: nowrap;\n    color: rgb(37, 37, 37);\n}\n\n.absol-selectlist-item-desc:empty {\n    display: none;\n}\n\n\n", ""]);



/***/ }),

/***/ 7289:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-select-list-box {\n    --select-list-estimate-width: 0;\n    --max-height: calc(100vh - 80px);\n    position: fixed;\n    top: 10px;\n    left: 10px;\n    width: calc(var(--select-list-estimate-width) + 2px + 5px + 7px);\n    font-size: 14px;\n    font-family: Arial, Helvetica, sans-serif;\n    border: solid 1px rgb(100, 100, 255);\n    box-sizing: border-box;\n    background-color: white;\n    display: inline-block;\n    vertical-align: top;\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    outline: none;\n}\n\n.absol-follower.as-select-list-box {\n    z-index: 1000000;\n}\n\n.as-select-list-box .as-select-list-box {\n    min-width: 100%;\n}\n\n.as-select-list-box-search-ctn {\n    position: absolute;\n    left: 0;\n    right: 0;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-6 .as-select-list-box-search-ctn,\n.as-select-list-box.as-enable-search.as-anchor-5 .as-select-list-box-search-ctn {\n    bottom: 0;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-6,\n.as-select-list-box.as-enable-search.as-anchor-5 {\n    padding-bottom: 38px;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-1,\n.as-select-list-box.as-enable-search.as-anchor-2 {\n    padding-top: 38px;\n}\n\n.as-select-list-box.as-enable-search.as-anchor-1 .as-select-list-box-search-ctn,\n.as-select-list-box.as-enable-search.as-anchor-2 .as-select-list-box-search-ctn {\n    top: 0;\n}\n\n.as-select-list-box-scroller {\n    overflow-y: auto;\n    overflow-x: visible;\n}\n\n.as-select-list-box .as-select-list-box-scroller {\n    max-height: var(--max-height);\n}\n\n.as-select-list-box.as-enable-search .as-select-list-box-scroller {\n    max-height: calc(var(--max-height) - 38px);\n}\n\n.as-select-list-box-content {\n    position: relative;\n}\n\n.as-select-list-box-page {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n}\n\n.as-select-list-box .absol-selectlist-item {\n    cursor: default;\n}\n\n.as-select-list-box-search-ctn {\n    display: none;\n    padding: 5px;\n}\n\n\n.as-select-list-box.as-enable-search .as-select-list-box-search-ctn {\n    display: block;\n}\n\n.as-select-list-box:not(.as-searching) .as-last-in-group {\n    border-bottom: 1px solid #dddddd;\n}\n\n.as-select-list-box .as-last-in-group span {\n    line-height: 19px;\n}\n\n\n.as-select-list-box .absol-selectlist-item:hover {\n    background-color: #efefef;\n}\n\n.as-select-list-box.as-value-hidden .absol-selectlist-item.as-selected {\n    color: #aaaaaa;\n}\n\n.as-select-list-box.as-value-hidden .absol-selectlist-item.as-selected.as-is-leaft {\n    display: none;\n}", ""]);



/***/ }),

/***/ 2183:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-selectmenu-anchor-container {\n    /* position: fixed; */\n\n    /* top: 0; */\n    /* left: 0; */\n    width: 0;\n    height: 0;\n    overflow: visible;\n}\n\n.absol-selectmenu-anchor {\n    position: relative;\n}\n\n.absol-selectmenu-anchor-content-container {\n    position: absolute;\n    z-index: 1002;\n    top: 0;\n    left: 0;\n}\n\n.absol-selectmenu-anchor-content-container .absol-bscroller {\n    max-height: calc(100vh - 50px);\n}\n\n\n.absol-selectmenu-anchor.absol-disabled .absol-selectmenu-anchor-content-container {\n    visibility: hidden;\n    top: -100000px;\n    left: -10000px;\n    z-index: -1000;\n    opacity: 0;\n}\n\n\n.absol-selectmenu-dropdown-box {\n    border: solid 1px rgb(100, 100, 255);\n    box-sizing: border-box;\n    background-color: white;\n    display: inline-block;\n    vertical-align: top;\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\n}\n\n.absol-selectmenu-dropdown-box > .as-bscroller {\n    overflow-y: auto;\n}\n\n.absol-selectmenu-dropdown-box .absol-search-text-input {\n    margin: 0.2em;\n}\n\n\n.absol-selectmenu.absol-hidden {\n    display: none !important;\n}\n\n.absol-selectmenu-render-space {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: -1000;\n    visibility: hidden;\n    font-size: 14px;\n}\n\n.absol-selectmenu-render-space > div {\n    display: inline-block;\n}\n\n\n.absol-selectmenu.as-disabled,\n.as-select-menu.as-disabled\n{\n    pointer-events: none;\n    background-color: var(--as-disabled-background-color);\n    color: var(--as-disabled-text-color);\n}\n\n.absol-selectmenu {\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    height: 30px;\n    min-width: 30px;\n    border: solid 1px #d6d6d6;\n    border-radius: 2px;\n    box-sizing: border-box;\n    cursor: pointer;\n    font-size: 14px;\n    outline: none;\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    background-color: white;\n}\n\n/* .absol-selectmenu:hover {\n    border: solid 1px black;\n} */\n\n.absol-selectmenu-btn {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    width: 30px;\n    border: none;\n    background: transparent;\n    z-index: 2;\n    pointer-events: none;\n}\n\n.absol-selectmenu-btn:focus {\n    outline: none;\n}\n\n.absol-selectmenu-btn svg.dropdown {\n    width: 10px;\n    height: 10px;\n    fill: #929292;\n}\n\n.absol-selectmenu:hover svg.dropdown {\n    width: 10px;\n    height: 10px;\n    fill: black;\n}\n\n.absol-selectmenu-holder-item {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    /*1px for border*/\n    white-space: nowrap;\n}\n\n.absol-selectmenu-holder-item::before{\n    content: \"\";\n    height: 100%;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n\n.absol-selectmenu-holder-item>.absol-selectlist-item{\n    display: inline-block;\n    width: 100%;\n    vertical-align: middle;\n}\n\n.absol-selectmenu .absol-selectlist-item span {\n    padding-right: 28px;\n}\n\n.absol-selectmenu .absol-scroll-button {\n    background-color: rgba(0, 0, 0, 0.1);\n    border-radius: 3px;\n}\n\n.absol-selectmenu .absol-scroll-button:hover {\n    background-color: rgba(0, 0, 0, 0.2);\n}\n\n.absol-scroll-bar-v-container {\n    width: 10px;\n}\n\n.absol-selectmenu .absol-search-text-input {\n    margin: 4px;\n}\n\n.absol-selectmenu-render-space .absol-selectlist-item span {\n    padding-right: 0;\n}\n\n\n.absol-selectmenu .absol-selectlist-item-desc-container {\n    right: 30px;\n}\n\n\n.absol-selectmenu-dropdown-box .absol-bscroller {\n    overflow-y: auto;\n}\n\n\n.as-select-anchor {\n    position: fixed;\n    z-index: 1000001;\n}\n\n\n.as-select-anchor.as-hidden {\n    left: 0;\n    top: 0;\n    z-index: -1000;\n    visibility: hidden;\n    opacity: 0;\n}\n\n\n.as-select-menu {\n    --select-list-estimate-width: 0;\n    --select-list-desc-width: 0;\n    width: calc(var( --select-list-estimate-width) + 32px);\n    min-width: calc(var( --select-list-estimate-width) + 32px);\n}", ""]);



/***/ }),

/***/ 4894:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-select-table-render-space {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: -1000;\n    visibility: hidden;\n    font-size: 14px;\n}\n\n.absol-select-table {\n    border: solid 1px #a9a9a9;\n    min-width: 26em;\n    overflow: hidden;\n}\n\n.absol-select-table-header {\n    display: block;\n    position: relative;\n    box-sizing: content-box;\n    height: 2.2857142857em;\n}\n\n.absol-select-table-searchtextinput-container {\n    position: absolute;\n    left: 0.14285714285em;\n    top: 0.14285714285em;\n    height: 2em;\n    right: 10em;\n    /* background-color: cyan; */\n}\n\n.absol-select-table.disable-move-all .absol-select-table-buttons-container {\n    display: none;\n}\n\n.absol-select-table.disable-move-all .absol-select-table-searchtextinput-container {\n    right: 0.14285714285em !important;\n}\n\n.absol-select-table-buttons-container {\n    position: absolute;\n    right: 0.14285714285em;\n    top: 0.14285714285em;\n    width: 10.7142857143em;\n    height: 2em;\n    white-space: nowrap;\n}\n\n.absol-select-table-buttons-container>button {\n    height: 2em;\n    font-size: 1em;\n    background-color: transparent;\n    border: none;\n    padding: 0 0.5em;\n    margin: 0;\n    text-decoration: underline;\n    cursor: pointer;\n}\n\n.absol-select-table-buttons-container>button:focus {\n    outline: none;\n}\n\n.absol-select-table-buttons-container>button:hover {\n    color: #a9a9a9;\n}\n\n.absol-select-table-buttons-container>button:active {\n    color: #a9a9ff;\n}\n\n.absol-select-table-body {\n    margin: 0.14285714285em;\n    white-space: nowrap;\n}\n\n.absol-select-table-items-scroller {\n    width: 50%;\n    display: inline-block;\n    box-sizing: border-box;\n    vertical-align: top;\n    overflow-y: auto;\n}\n\n.absol-select-table-items-scroller .absol-scroll-button {\n    background-color: rgba(1, 1, 30, 0.1);\n}\n\n.absol-select-table-items-scroller .absol-scroll-bar-v-container {\n    width: 0.69em;\n}\n\n.absol-select-table-selected-search-items-container,\n.absol-select-table-nonselected-search-items-container,\n.absol-select-table.searching .absol-select-table-selected-items-container,\n.absol-select-table.searching .absol-select-table-nonselected-items-container {\n    display: none;\n}\n\n.absol-select-table.searching .absol-select-table-selected-search-items-container,\n.absol-select-table.searching .absol-select-table-nonselected-search-items-container {\n    display: block;\n    padding-right: 0.7em;\n}\n\n.absol-select-table-nonselected-items-container,\n.absol-select-table-selected-items-container {\n    padding-right: 0.7em;\n}\n\n.absol-select-table-nonselected-items-container>.absol-select-table-item,\n.absol-select-table-selected-items-container>.absol-select-table-item,\n.absol-select-table-nonselected-search-items-container>.absol-select-table-item,\n.absol-select-table-selected-search-items-container>.absol-select-table-item {\n    margin: 0.14285714285em;\n}\n\n.absol-select-table-item {\n    display: block;\n    line-height: 2em;\n    min-height: 2em;\n    position: relative;\n    background-color: rgba(169, 169, 169, 0.05);\n    border: solid 1px rgb(235, 235, 235);\n    border-radius: 0.2em;\n    overflow: hidden;\n    -webkit-user-select: none;\n    /* Safari 3.1+ */\n    -moz-user-select: none;\n    /* Firefox 2+ */\n    -ms-user-select: none;\n    /* IE 10+ */\n    user-select: none;\n    /* Standard syntax */\n    padding-left: 0.69em;\n    padding-right: 1.8em;\n    box-sizing: border-box;\n}\n\n.absol-select-table-item:hover {\n    background-color: rgba(169, 169, 169, 0.1);\n}\n\n.absol-select-table-item-right-container {\n    right: 0.3em;\n    bottom: 0.3em;\n    top: 0.3em;\n    padding: 0.2em;\n    width: 1.4em;\n    position: absolute;\n    border-radius: 0.2em;\n    box-sizing: border-box;\n ;\n}\n\n.absol-select-table-item-right-container:hover {\n    background-color: rgba(169, 169, 169, 0.3);\n}\n\nspan.absol-select-table-item-text {\n    white-space: normal;\n    \n}\n\n.absol-select-table-item-right-container-table{\n    display: table;\n    width: 100%;\n    height: 100%;\n}\n.absol-select-table-item-right-container-cell{\n    display: table-cell;\n    vertical-align: middle;\n}\n\n.absol-select-table-item-right-container svg {\n    width: 1em;\n    height: 1em;\n    display: none;\n}\n\n/* clearfix\n.absol-select-table-none-nonselected-items-container::after,\n.absol-select-table-none-selected-items-container::after {\n    content: \"\";\n    display:table;\n    clear: both;\n} */\n\n.absol-select-table-selected-items-container .absol-select-table-item-right-container svg.sub-icon,\n.absol-select-table-selected-search-items-container .absol-select-table-item-right-container svg.sub-icon {\n    display: block;\n    stroke: rgb(243, 61, 61);\n    fill: rgb(226, 100, 100);\n}\n\n.absol-select-table-nonselected-items-container .absol-select-table-item-right-container svg.add-icon,\n.absol-select-table-nonselected-search-items-container .absol-select-table-item-right-container svg.add-icon {\n    display: block;\n    fill: rgb(100, 226, 167);\n    stroke: rgb(61, 185, 243);\n}\n\n.absol-select-table.portrait {}", ""]);



/***/ }),

/***/ 2206:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-selecttreemenu  .absol-tree-list-item-desc-container{\n    right: 30px;\n}\n\n\n.absol-selectmenu-holder-item .absol-tree-list-item-parent:hover {\n    background-color: transparent;\n}", ""]);



/***/ }),

/***/ 9423:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-single-page {\n    position: relative;\n}\n\n\n.absol-single-page-header {\n    box-sizing: border-box;\n    z-index: 2;\n    display: block;\n}\n\n.absol-single-page-footer {\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    box-sizing: border-box;\n}\n\n\n.absol-single-page-scroller-viewport {\n    min-height: 100%;\n    display: block;\n    position: relative;\n    box-sizing: border-box;\n}\n\n.absol-single-page-scroller {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    overflow-y: auto;\n}\n\n.absol-single-page.as-viewport-full > .absol-single-page-scroller > .absol-single-page-scroller-viewport {\n    height: 100%;\n    width: 100%;\n    overflow: hidden;\n}\n\n.absol-single-page.as-no-scroll > .absol-single-page-scroller {\n    overflow: hidden;\n}", ""]);



/***/ }),

/***/ 7111:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-snackbar {\n    visibility: hidden;\n    min-width: 250px;\n    margin-left: -125px;\n    background-color: #333;\n    color: #fff;\n    text-align: center;\n    border-radius: 2px;\n    padding: 16px;\n    position: fixed;\n    z-index: 1;\n    left: 50%;\n    bottom: 0;\n    font-size: 17px;\n    opacity: 0;\n    transition: opacity 0.25s ease-in, bottom 0.25s ease-in;\n\n}\n\n.as-snackbar.as-show {\n    visibility: visible;\n    bottom: 30px;\n    opacity: 1;\n}\n\n.as-snackbar.as-hiding{\n    transition: opacity 0.5s ease-out, bottom 0.5s ease-out;\n    visibility: visible;\n    bottom: 0;\n    opacity: 0;\n}\n\n", ""]);



/***/ }),

/***/ 4476:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-span-input {\n    white-space: pre;\n}\n\n.absol-span-input:focus {\n    outline-color: rgba(30, 150, 255, 0.3);\n    outline-width: 1px;\n}\n\n.absol-span-input:empty::before {\n    content: \" \";\n    display: inline;\n    white-space: pre;\n}\n\n.absol-span-input.absol-span-input-empty-minus:empty::before {\n    content: \"-\";\n}", ""]);



/***/ }),

/***/ 5199:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-static-tabbar {\n    position: relative;\n}\n\n.absol-static-tabbar-button {\n    height: 2em;\n    background-color: transparent;\n    border: none;\n    font-size: 1em;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    color: rgb(104, 104, 104);\n}\n\n.absol-static-tabbar-button:hover {\n    color: rgb(30, 30, 55);\n}\n\n.absol-static-tabbar-button.active {\n    color: black;\n}\n\n.absol-static-tabbar-button:focus {\n    outline: none;\n}\n\n.absol-static-tabbar-button>span {\n    font-size: 0.7em;\n}\n\n.absol-static-tabbar-hline {\n    border-bottom: solid 1px rgb(127, 127, 128);\n    height: 100%;\n}\n\n.absol-static-tabbar-active-box {\n    position: absolute;\n    bottom: 0;\n    top: 0;\n    left: 0;\n    width: 0;\n    transition: left 0.15s, width 0.15s;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    box-sizing: border-box;\n    /* z-index: 1; */\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-hline{\n    border-bottom-color: white;\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-button.active{\n    color: white;\n}\n\n.absol-static-tabbar.dark .absol-static-tabbar-button {\n    color: rgb(204, 204, 204);\n}", ""]);



/***/ }),

/***/ 670:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-switch {\n    position: relative;\n    display: inline-block;\n    width: 2.2em;\n    height: 1.2em;\n    vertical-align: middle;\n}\n\n.absol-switch input {\n    opacity: 0;\n    width: 0;\n    height: 0;\n}\n\n.absol-switch-slider {\n    position: absolute;\n    cursor: pointer;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: #ccc;\n    -webkit-transition: .4s;\n    transition: .4s;\n    border-radius: 0.6em;\n}\n\n.absol-switch-slider:before {\n    position: absolute;\n    content: \"\";\n    height: 1em;\n    width: 1em;\n    left: 0.1em;\n    bottom: 0.1em;\n    background-color: white;\n    -webkit-transition: .4s;\n    transition: .4s;\n    border-radius: 0.5em;\n}\n\ninput:checked+.absol-switch-slider {\n    background-color: #2196F3;\n}\n\ninput:focus+.absol-switch-slider {\n    box-shadow: 0 0 1px #2196F3;\n}\n\ninput:checked+.absol-switch-slider:before {\n    -webkit-transform: translateX(1em);\n    -ms-transform: translateX(1em);\n    transform: translateX(1em);\n}\n\n/* Rounded absol-switch-sliders */\n.absol-switch.square .absol-switch-slider {\n    border-radius: 0;\n}\n\n.absol-switch.square .absol-switch-slider:before {\n    border-radius: 0;\n}\n\n.absol-switch.disabled {\n    pointer-events: none;\n}\n\n.absol-switch.disabled .absol-switch-slider:before{\n    background-color: rgb(234, 234, 234);\n}\n\n.absol-switch.disabled input:checked+.absol-switch-slider {\n    background-color: rgb(141, 188, 226);\n}\n\n.absol-switch.disabled .absol-switch-slider {\n    background-color: rgb(171, 171, 171);\n}\n\n", ""]);



/***/ }),

/***/ 2296:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-table-scroller {\n    position: relative;\n    overflow: hidden;\n}\n\n.absol-table-scroller-render-space {\n    position: fixed;\n    overflow: scroll;\n    left: 0;\n    top: 0;\n    max-width: calc(99vw - 30px);\n    max-height: calc(99vh - 30px);\n    opacity: 0;\n    z-index: -1000;\n    visibility: hidden;\n}\n\n\n.absol-table-scroller-viewport {\n    box-sizing: border-box;\n    overflow: scroll;\n    width: calc(100% + 17px);\n    height: calc(100% + 17px);\n}\n\n.absol-table-scroller-fixed-viewport {\n    position: absolute;\n    left: 0;\n    top: 0;\n    z-index: 10;\n    overflow: hidden;\n    /*pointer-events: none;*/\n}\n\n.absol-table-scroller-fixed-viewport>table>thead,\n.absol-table-scroller-fixed-viewport>table {\n    border-top-color: transparent !important;\n}\n\n.absol-table-scroller-fixed-hidden {\n    visibility: hidden !important;\n    opacity: 0 !important;\n    border-color: transparent !important;\n\n}\n\n.absol-table-scroller-header-hscroller {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    z-index: 9;\n    overflow: hidden;\n    /*pointer-events: none;*/\n}\n\n.absol-table-scroller-header-hscroller-viewport {\n    max-width: 100%;\n    overflow-x: scroll;\n    margin-bottom: -17px;/*default*/\n}\n\n.absol-table-scroller-header-hscroller-viewport table {\n    table-layout: fixed;\n}\n\n\n.absol-table-scroller-left-vscroller {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    z-index: 7;\n    /* width: 200px; */\n    overflow-x: hidden;\n    /*pointer-events: none;*/\n}\n\n.absol-table-scroller-left-vscroller-viewport {\n    max-height: 100%;\n    overflow-y: scroll;\n    min-width: calc(100% + 19px);\n    overflow-x: hidden;\n}\n\n\n.absol-table-scroller-head-line,\n.absol-table-scroller-left-line {\n    z-index: 30;\n    /*pointer-events: none;*/\n    position: absolute;\n}\n\n.absol-table-scroller-head-line {\n    left: 0;\n    width: calc(100% - 6px);\n    border-bottom: solid 2px rgb(169, 169, 170);\n    width: 100%;\n}\n\n.absol-table-scroller-left-line {\n    top: 0;\n    border-right: solid 2px rgb(169, 169, 170);\n    height: calc(100% - 6px);\n    height: 100%;\n}\n\n\n.absol-table-scroller.scroll-v .absol-table-scroller-head-line {\n    width: 100%;\n}\n\n.absol-table-scroller.scroll-h .absol-table-scroller-left-line {\n    height: 100%;\n}\n\n\n.absol-table-scroller:not(.scroll-v) .absol-table-scroller-head-line {\n    display: none;\n}\n\n.absol-table-scroller:not(.scroll-h) .absol-table-scroller-left-line {\n    display: none;\n}\n\n\n\n.absol-table-scroller-vscrollbar-container {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 8px;\n    bottom: 0;\n    z-index: 31;\n}\n\n.absol-table-scroller-vscrollbar-container .absol-scrollbar-button {\n    left: 1px;\n    right: 1px;\n}\n\n\n.absol-table-scroller-vscrollbar-container>div,\n.absol-table-scroller-hscrollbar-container>div {\n    width: 100%;\n    height: 100%;\n}\n\n.absol-table-scroller-hscrollbar-container {\n    position: absolute;\n    left: 0;\n    right: 0;\n    height: 12px;\n    bottom: 0;\n    z-index: 31;\n}\n\n\n.absol-table-scroller-hscrollbar-container .absol-scrollbar-button {\n    top: 1px;\n    bottom: 1px;\n}\n\n\n.absol-table-scroller:not(.scroll-v) .absol-table-scroller-vscrollbar-container {\n    display: none;\n}\n\n.absol-table-scroller:not(.scroll-h) .absol-table-scroller-hscrollbar-container {\n    display: none;\n}\n\n\n.absol-table-scroller.scroll-h .absol-table-scroller-vscrollbar-container {\n    bottom: 12px;\n}\n\n.absol-table-scroller.scroll-v .absol-table-scroller-hscrollbar-container {\n    right: 8px;\n}\n\n.absol-table-scroller-fixed-table{\n    table-layout: fixed;\n    box-sizing: border-box;\n\n}\n\n.absol-table-scroller-fixed-table *,\n.absol-table-scroller-header-hscroller *{\n    box-sizing: border-box;\n}", ""]);



/***/ }),

/***/ 4439:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-table-vscroller {\n    position: relative;\n}\n\n.absol-table-vscroller-head {\n    position: absolute;\n    z-index: 2;\n    width: 300px;\n    height: 20px;\n    top: 0;\n    left: 0;\n}\n\n.absol-table-vscroller-head-line{\n    position: absolute;\n    left: 0;\n    z-index: 3;\n    pointer-events: none;\n    border-bottom:solid 2px rgb(169, 169, 170); \n    width: 100%;\n}\n\n.absol-table-vscroller.scroll-v .absol-table-vscroller-head-line{\n    width: calc(100% - 7px);\n}\n\n.absol-table-vscroller-viewport {\n    max-height: 100%;\n    padding-bottom: 1px;\n    padding-top: 1px;\n    overflow-y: auto;\n}\n\n.absol-table-vscroller-viewport > table{\n    box-sizing: border-box;\n    width: 100%;\n}", ""]);



/***/ }),

/***/ 9127:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-tabbar {\n    white-space: normal;\n    height: 2em;\n    white-space: nowrap;\n}\n\n\n.absol-tabbar .absol-hscroller-viewport {\n    overflow-y: hidden;\n}\n\n.absol-tabbar .absol-tabbar-button {\n    height: 100%;\n}\n\n/* .absol-tabbar .absol-scrollbar-container {\n    height: 5px;\n} */\n\n.absol-tabbar .absol-scrollbar-container.horizontal {\n    bottom: -2px;\n}\n\n.absol-tabbar .absol-scrollbar-container {\n    opacity: 0;\n    transition: opacity 0.2s;\n    background: rgba(169, 169, 169, 0.1);\n}\n\n.absol-tabbar:hover .absol-scrollbar-container,\n.absol-tabbar:active .absol-scrollbar-container {\n    opacity: 1;\n}\n\n.absol-tabbar .absol-scrollbar-button {\n    background-color: rgba(33, 33, 40, 0.1);\n}\n\n.absol-tabbar .absol-scrollbar-button:hover {\n    background-color: rgba(33, 33, 40, 0.3);\n}\n\n\n.absol-tabbar .absol-scrollbar-button:active,\n.absol-tabbar .absol-hscrollbar.absol-active .absol-scrollbar-button {\n    background-color: rgba(47, 47, 55, 0.4);\n\n}\n\n\n.absol-tabbar-button {\n    padding-left: 1em;\n    padding-right: 1em;\n    background-color: rgb(45, 45, 45);\n    color: rgb(200, 200, 200);\n    margin-right: 1px;\n    border: none;\n    outline: none;\n    font-size: 1em;\n}\n\n.absol-tabbar .absol-tabbar-button-active {\n    background-color: rgb(30, 30, 30);\n    color: rgb(250, 250, 252);\n}\n\n.absol-tabbar-button-text,\n.absol-tabbar-button-icon-container > span {\n    display: inline;\n    vertical-align: middle;\n    font-size: 1em;\n}\n\n.absol-tabbar-button .absol-tabbar-button-close,\n.absol-tabbar-button .absol-tabbar-button-close-circle\n{\n    visibility: hidden;\n    color: rgb(190, 190, 190);\n}\n\n.absol-tabbar-button-icon-container {\n    display: inline-block;\n    vertical-align: middle;\n    margin-left: 0.5em;\n}\n\n\n\n\n.absol-tabbar-button:hover .absol-tabbar-button-close,\n.absol-tabbar-button-active .absol-tabbar-button-close,\n.absol-tabbar-button:hover .absol-tabbar-button-close-circle,\n.absol-tabbar-button-active .absol-tabbar-button-close-circle\n{\n    visibility: visible;\n    color: red;\n}\n\n.absol-tabbar-button-active .absol-tabbar-button-modified-flag {\n    color: lightblue;\n}\n\n.absol-tabbar-button-modified-flag {\n    color: mediumaquamarine;\n}\n\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-modified-flag,\n.absol-tabbar-button.absol-tabbar-button-modified:not(.active) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-modified-flag,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close,\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close-circle,\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-close,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-close-circle,\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close\n{\n    display: none;\n}\n\n\n.absol-button-range {\n}\n\n\n.absol-tabview {\n    position: relative;\n}\n\n\n.absol-tabview-container {\n    position: absolute;\n    top: 2em;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    overflow: auto;\n}\n\n\n.absol-tabview-container.absol-tabview-container-hidden {\n    z-index: -9999;\n    visibility: hidden;\n    opacity: 0;\n\n}\n\n.absol-tabview-container.absol-tabview-container-hidden *,\n.absol-tabview-container.absol-tabview-container-hidden {\n    pointer-events: none;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n\n.absol-tabview-container > div,\n.absol-tabview-container > pre {\n    width: 100%;\n    height: 100%;\n    box-sizing: border-box;\n}\n\n.absol-tabview-container > pre {\n    margin: 0;\n}\n\n.absol-tabview .absol-tabbar-button {\n    border-radius: 10px 10px 0 0;\n    height: 2em;\n    box-sizing: border-box;\n    border: solid 1px #ccc;\n    background-color: white;\n    color: black;\n    padding-left: 1em;\n    padding-right: 0.357em;\n    margin-right: 0.357em;\n}\n\n.absol-tabview .absol-tabbar {\n    height: 2em;\n    overflow-y: hidden;\n    border-bottom: 1px solid #ccc;\n    box-sizing: border-box;\n}\n\n.absol-tabview .absol-tabbar-button-active {\n    background-color: #5bc0de;\n    border-color: #46b8da;\n    color: white;\n}\n\n/* .absol-tabview .absol-tabbar-button-close {\n    color: rgb(170, 170, 170);\n    line-height: 1.5em;\n    margin-left: 1em;\n    font-size: 1.3em;\n} */\n\n.absol-tabview .absol-tabbar-button-close:hover {\n    color: red;\n}\n\n\n/************** Mini version - like window form ***********************/\n\n.absol-tabview.xp-tiny .absol-tabbar {\n    height: 22px;\n    border-bottom: none;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button {\n    height: 20px;\n    padding-left: 5px;\n    padding-right: 5px;\n    border-radius: 0;\n    margin: 0;\n    vertical-align: bottom;\n    margin-top: 2px;\n    background-color: rgb(242, 242, 242);\n    color: black;\n    position: relative;\n}\n\n.absol-tabview.xp-tiny::before {\n    content: \"\";\n    position: absolute;\n    top: 18px;\n    z-index: 0;\n    left: 0;\n    right: 0;\n    height: 4px;\n    border-bottom: solid 1px #ccc;\n    box-sizing: border-box;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button.absol-tabbar-button-active {\n    height: 22px;\n    margin-top: 0;\n    background-color: white;\n    border-top-color: #ccc;\n    border-left-color: #ccc;\n    border-right-color: #ccc;\n    border-bottom-color: white;\n}\n\n\n.absol-hscroller.absol-tabbar.disabled .absol-scrollbar-container {\n    visibility: hidden;\n}\n\n.absol-tabview.absol-tabview.xp-tiny .absol-tabbar-button-close {\n    line-height: 18px;\n}\n\n.absol-tabview.xp-tiny .absol-tabbar-button-icon-container\n{\n    display: none;\n}\n\n.absol-tabview.xp-tiny .absol-tabview-container {\n    top: 22px;\n}\n\n.absol-tabview.xp-tiny .absol-tab-absol {\n    border-left: solid 1px #ccc;\n    border-right: solid 1px #ccc;\n    border-bottom: solid 1px #ccc;\n    box-sizing: border-box;\n}\n\n\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button .absol-tabbar-button-icon-container {\n    display: none;\n}\n\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button {\n    padding-right: 1em;\n}\n\n/************************ Like Metro theme *********************/\n\n.absol-tabview.metro-flat > .absol-tabbar .absol-tabbar-button {\n    border-radius: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border-left: none;\n    border-top: none;\n    border-bottom: none;\n    border-right: solid 1px rgba(169, 169, 169, 0.3);\n    font-size: 1em;\n}\n\n.absol-tabview.metro-flat > .absol-tabbar {\n    box-shadow: 0px -1px 0px 0px #ccc;\n}\n", ""]);



/***/ }),

/***/ 6085:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-textarea2{\n    overflow: hidden;\n    resize: none;\n    box-sizing: border-box;\n    height: 1.425em;\n} ", ""]);



/***/ }),

/***/ 4315:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-text-clipboard {\n    opacity: 0;\n    font-size: 1px;\n    height: 1px;\n    width: 1px;\n}", ""]);



/***/ }),

/***/ 4015:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".ac-time-input {\n    box-sizing: border-box;\n    height: calc(2em + 2px);\n    width: 9em;\n    border: solid 1px #d6d6d6;\n    border-radius: 2px;\n    font-size: 14px;\n    outline: none;\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    display: inline-block;\n    vertical-align: middle;\n    background-color: white;\n    position: relative;\n}\n\n.ac-time-input.as-disabled {\n    color: rgb(102, 102, 102);\n    pointer-events: none;\n}\n\n.ac-time-input.as-must-not-null .as-time-input-clear-btn {\n    display: none;\n}\n\n.ac-time-input input {\n    font: inherit;\n    outline: none;\n    width: calc(100% - 30px);\n    height: 100%;\n    border: none;\n    display: block;\n    padding: 0 0 0 var(--as-input-horizontal-padding);\n    -webkit-user-select: auto;\n    user-select: auto;\n    -webkit-user-drag: none;\n    color: inherit;\n}\n\n.as-time-input-icon-btn {\n    border-right: none;\n    border-top: none;\n    border-bottom: none;\n    border-left: 1px solid #ddd;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    width: calc(2em + 1px);\n    box-sizing: border-box;\n    background-color: rgba(169, 169, 169, 0.1);\n    cursor: pointer;\n    border-radius: 0;\n    font-size: inherit;\n    color: inherit;\n}\n\n\n.as-time-input-icon-btn > span {\n    font-size: 1.14em;\n}\n\n\n.as-time-input-icon-btn:hover {\n    background-color: rgba(169, 169, 169, 0.25);\n}\n\n.as-time-input-icon-btn:active {\n    background-color: rgba(169, 169, 169, 0.5);\n}\n\n\n.as-time-input-icon-btn.as-disabled {\n    color: rgb(102, 102, 102);\n    pointer-events: none;\n}\n\n\n.as-time-input-clear-btn {\n    font-size: inherit;\n    position: absolute;\n    right: calc(2em + 2px);\n    height: 2em;\n    top: calc(50% - 1em);\n    box-sizing: border-box;\n    background-color: transparent;\n    border: none;\n    color: #bbb;\n    visibility: hidden;\n}\n\n\n.ac-time-input.as-value-null .as-time-input-clear-btn {\n    display: none;\n}\n\n.as-time-input-clear-btn:hover {\n    color: rgb(132, 132, 132);\n}\n\n.as-time-input-clear-btn:active {\n    color: #525555;\n}\n\ninput:focus + .as-time-input-clear-btn,\n.ac-time-input .as-time-input-clear-btn {\n    visibility: visible;\n}\n\n\n/*.ac-time-input-picker-ctn {*/\n/*    position: fixed;*/\n/*}*/\n\n/*.ac-time-input > span {*/\n/*    font-size: 1em;*/\n/*    line-height: 2em;*/\n/*}*/\n\n/*.ac-time-input-picker-ctn-hidden {*/\n/*    z-index: -1000;*/\n/*    opacity: 0;*/\n/*    visibility: hidden;*/\n/*}*/\n\n/*.ac-time-input-picker-ctn-hidden:not(.absol-follower) {*/\n/*    transition: all 0.1s;*/\n/*}*/\n\n/*.ac-time-input.as-disabled {*/\n/*    color: rgb(102, 102, 102);*/\n/*    pointer-events: none;*/\n/*}*/", ""]);



/***/ }),

/***/ 8875:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".ac-time-picker {\n    /*like chrome-calender*/\n    display: inline-block;\n    font-family: Arial;\n    font-size: 14px;\n    padding: 0.6em;\n    border: solid 1px rgb(191, 191, 191);\n    box-shadow: 1px 1px 2px rgb(240, 240, 240);\n    z-index: 100;\n    touch-action: manipulation;\n    user-select: none;\n    background-color: rgb(255, 255, 255);\n    white-space: initial;\n}\n\n\n@media screen and (orientation: portrait) {\n    .ac-time-picker.ac-time-picker-touch {\n        font-size: 5vw;\n    }\n}\n\n@media screen and (orientation: landscape) {\n    .ac-time-picker.ac-time-picker-touch {\n        font-size: 4vh;\n    }\n}\n\n\n.ac-time-picker:not(.ac-time-picker-clock-mode) .ac-time-picker-set-clock,\n.ac-time-picker:not(.ac-time-picker-clock-mode) .ac-time-picker-keyboard-btn,\n.ac-time-picker:not(.ac-time-picker-touch) .ac-time-picker-keyboard-btn,\n.ac-time-picker:not(.ac-time-picker-time-mode) .ac-time-picker-set-time,\n.ac-time-picker:not(.ac-time-picker-time-mode) .ac-time-picker-clock-btn {\n    display: none;\n}\n\n.ac-time-picker-set-clock-header {\n    font-size: 2.8em;\n    text-align: center;\n    min-width: 4.28571428571em;\n    font-weight: bold;\n\n}\n\n.ac-time-picker-set-clock-header > span {\n    font-size: inherit;\n}\n\n.ac-time-picker-clock {\n    width: 12em;\n    height: 12em;\n}\n\n.ac-time-picker-clock-hour-pm {\n    fill: rgb(20, 20, 20);\n    font-size: 0.7em;\n}\n\n\n.ac-time-picker-clock-hour-am {\n    fill: black;\n    font-size: 0.8em;\n}\n\n.ac-time-picker-clock-minute {\n    fill: black;\n    font-size: 0.8em;\n}\n\n\n.ac-time-picker-clock-center,\n.ac-time-picker-clock-select-circle {\n    fill: rgb(115, 166, 248);\n}\n\n.ac-time-picker-clock-select-center {\n    fill: white;\n}\n\n.ac-time-picker-clock-select-line {\n    stroke-width: 1;\n    stroke: rgb(115, 166, 248);\n}\n\n\n.ac-time-picker-hour,\n.ac-time-picker-minute {\n    outline: none;\n}\n\n.ac-time-picker-edit-hour .ac-time-picker-hour,\n.ac-time-picker-edit-minute .ac-time-picker-minute {\n    color: rgb(62, 125, 189);\n}\n\n.ac-time-picker:not(.ac-time-picker-edit-hour) .ac-time-picker-clock-hour-ctn,\n.ac-time-picker:not(.ac-time-picker-edit-minute) .ac-time-picker-clock-minute-ctn {\n    visibility: hidden;\n}\n\n.ac-time-picker:not(.ac-time-picker-edit-hour):not(.ac-time-picker-edit-minute) .ac-time-picker-clock {\n    display: none;\n}\n\n.ac-time-picker-hour:empty::before,\n.ac-time-picker-minute:empty::before {\n    content: \"0\";\n    display: inline;\n}\n\n.ac-time-picker-footer {\n    display: block;\n    position: relative;\n    min-height: 1.5em;\n    min-width: 12em;\n}\n\n.ac-time-picker-footer-right {\n    position: absolute;\n    right: 0;\n    top: 0;\n}\n\n.ac-time-picker-footer button {\n    font-size: 1em;\n    height: 1.5em;\n    padding-top: 0;\n    padding-bottom: 0;\n    border: none;\n    background-color: transparent;\n    outline: none;\n    padding-left: 0.3em;\n    padding-right: 0.3em;\n}\n\n.ac-time-picker-footer button:hover,\n.ac-time-picker-footer button:focus {\n    background-color: rgba(170, 170, 170, 0.3);\n}\n\n.ac-time-picker-footer > button {\n    margin-right: 1em;\n}\n\n.ac-time-picker-footer-right > button {\n    margin-left: 1em;\n}\n\n\n.ac-time-picker-footer button .mdi {\n    font-size: 1.3em;\n}\n\n\n/* .ac-time-picker:not(.ac-time-picker-touch) .ac-time-picker-keyboard-btn {\n    display: none;\n} */\n\n/* keyboard-outline */\n\n.ac-time-picker-set-time-header {\n    font-size: 1.4em;\n    font-weight: bold;\n    margin-bottom: 1em;\n}\n\n.ac-time-picker-set-time-label {\n    font-size: 1em;\n    font-weight: bold;\n    margin-bottom: 0.3em;\n}\n\n.ac-time-picker-set-time-input-group {\n    margin-bottom: 0.3em;\n    font-size: 1em;\n    white-space: nowrap;\n}\n\n.ac-time-picker-set-time-input-hm > input {\n    height: 1.2em;\n    line-height: 1.2em;\n    width: 2em;\n    text-align: center;\n    font-size: 1em;\n    border-top: none;\n    border-left: none;\n    border-right: none;\n    border-bottom: 1px solid rgb(70, 70, 72);\n    outline: none;\n}\n\n.ac-time-picker-set-time-input-label-hm {\n    font-size: 1em;\n    white-space: nowrap;\n\n}\n\n.ac-time-picker-set-time-input-label-hm span {\n    display: inline-block;\n    vertical-align: middle;\n    font-size: 1em;\n\n}\n\n\n.ac-time-picker-set-time-input-label-hm > span:first-child {\n    width: 2em;\n}", ""]);



/***/ }),

/***/ 2652:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-time-range-24-input {\n    white-space: nowrap;\n    display: inline-block;\n    min-width: 318px;\n}\n\n.as-time-range-24-input > div:first-child {\n    margin-right: 10px;\n}\n", ""]);



/***/ }),

/***/ 475:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-time-select-input {\n    display: inline-block;\n    position: relative;\n    height: 30px;\n    border: solid 1px #d6d6d6;\n    border-radius: 2px;\n    box-sizing: border-box;\n    cursor: pointer;\n    font-size: 14px;\n    outline: none;\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    white-space: nowrap;\n    padding-right: 30px;\n    --list-min-width: unset;\n    width: calc(var(--list-min-width) + 30px);\n    min-width: calc(var(--list-min-width) + 30px);\n}\n\n.as-time-select-input.as-disabled {\n    pointer-events: none;\n    background-color: #ebebe4;\n}\n\n.as-time-select-input-text {\n    display: inline-block;\n    vertical-align: middle;\n    height: 100%;\n    width: 100%;\n    outline: none;\n    border: none;\n    box-sizing: border-box;\n    padding-left: 10px;\n    padding-right: 0;\n    background-color: transparent;\n}", ""]);



/***/ }),

/***/ 1449:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-toast-list {\n    position: fixed;\n    z-index: 1100000000;\n    width: 355px;\n    max-height: calc(100vh - 20px);\n    overflow-y: auto;\n}\n\n.as-toast-list > .as-toast {\n    box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.35);\n}\n\n\n.as-toast-list.as-se {\n    bottom: 10px;\n    right: 10px;\n}\n\n.as-toast-list.as-sw {\n    bottom: 10px;\n    left: 10px;\n}\n\n.as-toast-list.as-ne {\n    top: 10px;\n    right: 10px;\n}\n\n.as-toast-list.as-nw {\n    top: 10px;\n    left: 10px;\n}\n\n\n.as-toast-list:empty {\n    visibility: hidden;\n}\n\n.as-toast-list.as-ne > .as-toast,\n.as-toast-list.as-nw > .as-toast {\n    margin-bottom: 5px;\n}\n\n.as-toast-list.as-se > .as-toast,\n.as-toast-list.as-sw > .as-toast {\n    margin-top: 5px;\n}\n\n\n.as-toast {\n    display: block;\n    max-width: 350px;\n    overflow: hidden;\n    background-color: white;\n    background-clip: padding-box;\n    border: 1px solid rgba(0, 0, 0, 0.1);\n    font-family: Roboto, sans-serif;\n    font-size: 14px;\n}\n\n.as-toast-header {\n    display: flex;\n    display: -ms-flex;\n    -ms-flex-align: center;\n    align-items: center;\n    padding: 0.25em 0.75em;\n    color: #6c757d;\n    background-clip: padding-box;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.as-toast-header strong {\n    text-align: left;\n    margin-right: auto;\n}\n\n.as-toast-variant-color {\n    margin-right: 0.5em;\n    display: inline-block;\n    vertical-align: middle;\n    background-color: var(--variant-color-primary);\n    width: 1.25em;\n    height: 1.25em;\n}\n\n\n.as-toast-close-btn {\n    padding: 0;\n    background-color: transparent;\n    border: none;\n    outline: none;\n    color: inherit;\n    margin-left: 0.25em;\n    margin-bottom: 0.25em;\n}\n\n.as-toast-close-btn:hover {\n    color: black;\n}\n\n.as-toast-close-btn span {\n    font-size: 1.5em;\n    text-shadow: 0 1px 0 currentColor;\n}\n\n.as-toast-body {\n\n}\n\n.as-toast-message {\n    padding: 0.75em;\n}\n\n\n.as-toast.as-not-appeared {\n    opacity: 0;\n    transition: opacity 0.2s;\n}\n\n.as-toast.as-not-appeared.as-appearing {\n    opacity: 1;\n}\n\n.as-toast.as-appeared {\n    transition: opacity 0.5s;\n    opacity: 1;\n}\n\n.as-toast.as-disappearing {\n    opacity: 0;\n}\n\n.as-toast.as-variant-sticky-note {\n    background-color: #ffff88;\n}\n\n\n.as-toast.as-variant-sticky-note .as-toast-variant-color,\n.as-toast.as-variant-background .as-toast-variant-color {\n    display: none;\n}\n\n.as-toast.as-variant-sticky-note .as-toast-title {\n    color: #1e1ec8;\n}", ""]);



/***/ }),

/***/ 3519:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-token-field {\n    font-size: 14px;\n    border: 1px solid #dddddd;\n}\n\n.as-token-field-input-text {\n    font: inherit;\n    padding: 0;\n    box-sizing: border-box;\n    min-width: 60px;\n    border: none;\n    outline: none;\n    height: var(--select-box-item-height);\n    line-height: var(--select-box-item-height);\n    vertical-align: top;\n    margin-top: 2px;\n}\n\n.absol-selectbox-item.as-token-field-item {\n    font: inherit;\n    margin: 2px;\n    outline: none;\n}\n\n.as-token-field-item:focus {\n    background-color: var(--select-box-focus-item-color);\n}\n", ""]);



/***/ }),

/***/ 95:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --tool-tip-arrow-pos: 50%;\n    --tool-tip-background-color: gray;\n    --tool-tip-text-color: white;\n}\n\n.absol-tooltip {\n    margin: 0;\n    position: relative;\n    box-sizing: border-box;\n    display: inline-block;\n    color: var(--tool-tip-text-color);\n}\n\n.absol-tooltip-content {\n    display: block;\n    border-radius: 0.25em;\n    background-color: var(--tool-tip-background-color);\n    padding: 0.25em 0.5em;\n    font-size: inherit;\n}\n\n\n.absol-tooltip-arrow {\n    width: 0;\n    height: 0;\n    position: absolute;\n    box-sizing: content-box;\n    font-size: inherit;\n}\n\n.absol-tooltip.top .absol-tooltip-arrow {\n    border-left: 0.4em solid transparent;\n    border-right: 0.3em solid transparent;\n\n    border-top: 0.3em solid var(--tool-tip-background-color);\n    bottom: 0;\n    left: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n\n.absol-tooltip.top {\n    padding-bottom: 0.3em;\n}\n\n\n.absol-tooltip.bottom .absol-tooltip-arrow {\n    border-left: 0.3em solid transparent;\n    border-right: 0.4em solid transparent;\n    border-bottom: 0.3em solid var(--tool-tip-background-color);\n\n    top: 0;\n    left: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.bottom {\n    padding-top: 0.3em;\n}\n\n\n.absol-tooltip.left .absol-tooltip-arrow {\n    border-top: 0.3em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-left: 0.4em solid var(--tool-tip-background-color);\n\n    right: 0;\n    top: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.left {\n    padding-right: 0.4em;\n}\n\n\n.absol-tooltip.right .absol-tooltip-arrow {\n    border-top: 0.4em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-right: 0.4em solid var(--tool-tip-background-color);\n\n    left: 0;\n    top: calc(var(--tool-tip-arrow-pos) - 0.3em);\n}\n\n.absol-tooltip.ne .absol-tooltip-arrow {\n    border-top: 0.3em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-left: 0.4em solid var(--tool-tip-background-color);\n    bottom: -0.3em;\n    left: 0;\n}\n\n.absol-tooltip.nw .absol-tooltip-arrow {\n    border-top: 0.3em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-right: 0.4em solid var(--tool-tip-background-color);\n    bottom: -0.3em;\n    right: 0;\n}\n\n.absol-tooltip.se .absol-tooltip-arrow {\n    border-top: 0.3em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-left: 0.4em solid var(--tool-tip-background-color);\n    top: -0.3em;\n    left: 0;\n}\n\n.absol-tooltip.sw .absol-tooltip-arrow {\n    border-top: 0.3em solid transparent;\n    border-bottom: 0.4em solid transparent;\n    border-right: 0.4em solid var(--tool-tip-background-color);\n    top: -0.25em;\n    right: 0;\n}\n\n.absol-tooltip.right {\n    padding-left: 0.4em;\n}\n\n\n.absol-tooltip-root {\n    position: relative;\n    width: 0;\n    height: 0;\n}\n\n.absol-tooltip-root-holder {\n    position: fixed;\n    z-index: 100000000;\n    left: 0;\n    top: 0;\n}", ""]);



/***/ }),

/***/ 1048:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-trackbar {\n    height: 1.2em;\n    min-width: 7em;\n    display: inline-block;\n    vertical-align: middle;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    padding: 0 0.6em;\n    box-sizing: border-box;\n}\n\n.absol-trackbar-line {\n    display: block;\n    position: relative;\n    margin-top: 0.4em;\n    height: 0.4em;\n    background-color: rgb(200, 200, 200);\n    -webkit-box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n    -moz-box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n    box-shadow: 0 0 0.2em 0.1em rgb(160, 160, 160) inset;\n    border-radius: 0.15em;\n    cursor: pointer;\n}\n\n.absol-trackbar-button {\n    position: absolute;\n    z-index: 1;\n    top: -0.4em;\n    /* bottom: -0.4em; */\n    height: 1.2em;\n    left: 0;\n    margin-left: -0.6em;\n    width: 1.2em;\n    background: rgb(245, 245, 245);\n    cursor: pointer;\n    border-radius: 50%;\n    border: solid 1px rgb(139, 139, 139);\n}\n\n.absol-trackbar.as-disabled {\n    pointer-events: none;\n}\n\n.absol-trackbar.as-disabled .absol-trackbar-button {\n    background: rgb(225, 225, 225);\n    border: solid 1px rgb(200, 200, 200);\n}\n\n.absol-trackbar.as-disabled .absol-trackbar-line {\n    background-color: rgb(220, 220, 220);\n    -webkit-box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n    -moz-box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n    box-shadow: 0 0 0.2em 0.1em rgb(200, 200, 200) inset;\n}", ""]);



/***/ }),

/***/ 4178:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-trackbar-input {\n    box-sizing: border-box;\n    display: inline-block;\n    white-space: nowrap;\n    position: relative;\n    min-width: 13.5em;\n    height: 2em;\n    --input-width: 4em;\n}\n\n.absol-trackbar-input::after {\n    content: \"\";\n    vertical-align: middle;\n    height: 100%;\n}\n\n.absol-trackbar-input > .absol-trackbar {\n    display: inline-block;\n    vertical-align: middle;\n    width: calc(100% - var(--input-width) - 5px);\n}\n\n\n.absol-trackbar-input > .as-flexicon-input {\n    width: var(--input-width);\n    vertical-align: middle;\n    height: 2em;\n    box-sizing: border-box;\n    margin-left: 5px;\n}\n\n.absol-trackbar-input.as-disabled {\n    pointer-events: none;\n    color: #777777;\n\n}\n\n.absol-trackbar-input input {\n    color: inherit;\n}\n", ""]);



/***/ }),

/***/ 619:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-tree-list {}\n\n.absol-tree-list-item {}\n\n.absol-tree-list-item-parent:hover {\n    background: #efefef;\n    cursor: pointer;\n}\n\n.absol-tree-list-item-parent {\n    padding-left: 0.3em;\n    padding-right: 0.6em;\n    position: relative;\n}\n\n.absol-tree-list-item.active>.absol-tree-list-item-parent {\n    background: #dfdfdf;\n}\n\n.absol-tree-list-item-parent>span {\n    line-height: 20px;\n    white-space: nowrap;\n}\n\n.absol-tree-list-item-child {}\n\n.absol-tree-list-item>.absol-tree-list-item-child:empty {\n    display: none;\n}\n\n.absol-tree-list-item-desc-container {\n    right: 0.3em;\n    top: 0;\n    bottom: 0;\n    position: absolute;\n}\n\n.absol-tree-list-item-desc {\n    font-style: italic;\n    line-height: 20px;\n    white-space: nowrap;\n    margin-left: 1em;\n    color: rgb(37, 37, 37);\n}\n\n.absol-tree-list-item-desc:empty {\n    display: none;\n}", ""]);



/***/ }),

/***/ 9581:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\n    --variant-color-primary: #007bff;\n    --variant-color-secondary: #6c757d;\n    --variant-color-success: #28a745;\n    --variant-color-warning: #ffc107;\n    --variant-color-danger: #dc3545;\n    --variant-color-info: #17a2b8;\n    --variant-color-light: #f8f9fa;\n    --variant-color-dark: #343a40;\n    --variant-color-error: #ff4052;\n    --variant-color-link: #007bff;\n    --variant-color-note: #ffff88;\n\n\n    --variant-medium-contract-color-primary: #e2edd5;\n    --variant-medium-contract-color-secondary: #fca75b;\n    --variant-medium-contract-color-success: #fce8e8;\n    --variant-medium-contract-color-info: #fcf5e8;\n    --variant-medium-contract-color-warning: #5e5a75;\n    --variant-medium-contract-color-error:#e0dfce;\n    --variant-medium-contract-color-danger: #e5e8d5;\n    --variant-medium-contract-color-light: #7a5b3c;\n    --variant-medium-contract-color-dark: #bf7d3b;\n    --variant-medium-contract-color-link: #dde8c9;\n    --variant-medium-contract-color-note: #1e1ec8;\n}", ""]);



/***/ }),

/***/ 3034:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-vertical-tree-diagram {\n    --node-name-max-width: 200px;\n}\n\n\n.as-vertical-tree-diagram-node {\n\n}\n\n.template-ctn {\n    display: none;\n}\n\n.as-vertical-tree-diagram-node, .as-vertical-tree-diagram-node * {\n    box-sizing: border-box;\n}\n\n.as-vertical-tree-diagram-node {\n    display: inline-block;\n    vertical-align: top;\n    position: relative;\n    background: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:not(:first-child) {\n    margin-left: 10px;\n}\n\n.as-vertical-tree-diagram-node-name-ctn {\n    text-align: center;\n    padding-bottom: 9px;\n}\n\n.as-vertical-tree-diagram-node-name {\n    display: inline-block;\n    padding: 5px;\n    border: 1px solid #333;\n    position: relative;\n    white-space: normal;\n    max-width: var(--node-name-max-width);\n}\n\n.as-vertical-tree-diagram-node.as-has-child > .as-vertical-tree-diagram-node-name-ctn .as-vertical-tree-diagram-node-name::before {\n    content: \"\";\n    position: absolute;\n    height: 10px;\n    left: 50%;\n    top: 100%;\n    border-left: 1px solid #333;\n}\n\n.as-vertical-tree-diagram-node.as-has-child.as-has-1-child > .as-vertical-tree-diagram-node-name-ctn .as-vertical-tree-diagram-node-name::before {\n    height: 20px;\n}\n\n.as-vertical-tree-diagram-child-ctn {\n    padding-top: 10px;\n\n}\n\n.as-vertical-tree-diagram-node:not(.as-has-1-child) > .as-vertical-tree-diagram-child-ctn {\n    border-top: 1px solid #333;\n}\n\n.as-vertical-tree-diagram-node:not(.as-has-child) > .as-vertical-tree-diagram-child-ctn {\n    display: none;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::before {\n    content: \"\";\n    position: absolute;\n    z-index: 1;\n    left: 50%;\n    bottom: 100%;\n    height: 10px;\n    border-left: 1px solid black;\n}\n\n.as-vertical-tree-diagram-node.as-has-1-child > .as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::before,\n.as-vertical-tree-diagram-node.as-has-1-child > .as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node::after {\n    display: none;\n}\n\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:last-child::before {\n    left: unset;\n    right: 50%;\n}\n\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:first-child::after {\n    content: \"\";\n    position: absolute;\n    z-index: 2;\n    right: 50%;\n    left: 0;\n    bottom: 100%;\n    height: 11px;\n    background-color: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:last-child::after {\n    content: \"\";\n    position: absolute;\n    z-index: 2;\n    left: 50%;\n    right: 0;\n    bottom: 100%;\n    height: 11px;\n    background-color: white;\n}\n\n.as-vertical-tree-diagram-child-ctn > .as-vertical-tree-diagram-node:first-child:last-child::after {\n    display: none;\n}", ""]);



/***/ }),

/***/ 3122:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/*margin for border size*/\n.as-vruler {\n    position: relative;\n    width: 1.5em;\n    border: solid 1px black;\n    overflow: hidden;\n    font-family: courier, \"courier new\", monospace;\n    box-sizing: border-box;\n}\n\n\n.as-vruler-line {\n    position: absolute;\n    right: 0;\n    width: 25%;\n    border-top: solid 1px rgb(17, 48, 43);\n    box-sizing: border-box;\n\n}\n\n.as-vruler-line.major {\n    width: 50%;\n    border-top: solid 1px rgb(5, 20, 18);\n}\n\n.as-vruler-major-number {\n    position: absolute;\n    text-align: center;\n    width:  5em;\n    pointer-events: none;\n    font-size: 0.7em;\n    right: calc(52% - 2em);\n    height: 1em;\n    transform-origin: center;\n    \n    -webkit-transform:rotate(90deg);\n    -moz-transform:rotate(90deg);\n    -o-transform: rotate(90deg);\n    -ms-transform:rotate(90deg);\n    transform: rotate(-90deg);\n}", ""]);



/***/ }),

/***/ 2839:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-width-height-resizer {\n    position: relative;\n    box-sizing: border-box;\n}\n\n.absol-width-height-resizer-anchor-bot-right {\n    cursor: nwse-resize;\n    position: absolute;\n    z-index: 1;\n    right: 0;\n    bottom: 0;\n    height: 13px;\n    width: 13px;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAQUlEQVQoz2NgIBGkpaX9Z2IgA9BWU1pa2n+S/UGSZnRFBDVhU4BXEy4bcGrC5ySsmgj5AUMTMZ4mOehhmhjJ0QkA9TYwPsqIBKMAAAAASUVORK5CYII=');\n}\n\n.absol-width-height-resizer-anchor-bot-left {\n    cursor: nesw-resize;\n    position: absolute;\n    z-index: 1;\n    left: 0;\n    bottom: 0;\n    height: 13px;\n    width: 13px;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABCSURBVChTY0hLS/vPQCJggtIkAco0keRMZMVEa0RXSJRGbIoIaoQpIMlGZEmiNRJSiFUjNkGCGrGaRAAwkq6JgQEAnaEwPtyU/MEAAAAASUVORK5CYII=');\n}\n\n.absol-width-height-resizer-anchor-top-right {\n    cursor: nesw-resize;\n    position: absolute;\n    z-index: 1;\n    right: 0;\n    top: 0;\n    height: 13px;\n    width: 13px;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABMSURBVChTY0xLS/vPQGsAsoQJygYDdFuJdgUhjTgNwqcQpyYQwKURryYQwKaAoCYQwGUjQYCskGhNIABTTJImGABpQolcYgEZmhgYAEPpMD56IPESAAAAAElFTkSuQmCC')\n}\n\n.absol-width-height-resizer-anchor-top-left {\n    cursor: nwse-resize;\n    position: absolute;\n    z-index: 1;\n    top: 0;\n    left: 0;\n    height: 13px;\n    width: 13px;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABNSURBVChTnZFbCgAgCAStw3r/GxQLClaSj/kJckcFBzMvqtKRprwHd6OncRRwN7GfKQFoIS0Ar/gVQGmCYkMpAWgwLYBSWHCPG9GQiDbsRTA+Srvt5gAAAABJRU5ErkJggg==');\n}\n\n.absol-width-height-resizer-content {\n    width: 100%;\n    height: 100%;\n    overflow: auto;\n}\n\n/* .absol-width-height-resizer */", ""]);



/***/ }),

/***/ 2331:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-color-picker {\n    user-select: none;\n    height: 19em;\n    width: 20em;\n    position: relative;\n    background-color: white;\n    /* background-color: rgb(45, 45, 49); */\n    color: rgb(26, 26, 46);\n    border-radius: 0.4em;\n    padding: 0.7em;\n    display: inline-block;\n    border: solid 1px rgba(139, 139, 169, 0.733);\n    font-family: Arial, Helvetica, sans-serif;\n    -webkit-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n    -moz-box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n    box-shadow: 2px 2px 17px -1px rgba(0, 0, 0, 0.54);\n}\n\n.absol-color-picker.with-alpha {\n    width: 23em;\n}\n\n.absol-color-picker.with-alpha .absol-color-picker-color,\n.absol-color-picker.with-alpha .absol-color-picker-input {\n    right: 8em;\n}\n\n\n.absol-color-picker,\n.absol-color-picker * {\n    box-sizing: border-box;\n}\n\n.absol-color-picker-color {\n    z-index: 1;\n    position: absolute;\n    left: 1em;\n    right: 5em;\n    top: 1em;\n    bottom: 4em;\n    padding: 0;\n    border: solid 1px rgb(220, 220, 220);\n    border-bottom-width: 2px;\n    box-sizing: content-box;\n}\n\n.absol-color-picker-sat {\n    box-sizing: content-box;\n    width: 100%;\n    height: 100%;\n    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)\";\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');\n}\n\n.absol-color-picker-val {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    box-sizing: content-box;\n    background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)\";\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');\n}\n\n.absol-color-dragger {\n    border: solid 1px rgb(160, 160, 160);\n    box-shadow: inset 0px 0px 0.4em 0.1em rgba(255, 255, 255, 0.7);\n}\n\n.absol-color-picker-val .absol-color-dragger {\n    position: absolute;\n    z-index: 10;\n    width: 1em;\n    height: 1em;\n    border: solid 1px rgb(160, 160, 160);\n    bottom: 0;\n    left: 0;\n    margin-top: -0.5em;\n    margin-bottom: -0.5em;\n    margin-left: -0.5em;\n    margin-right: -0.5em;\n    border-radius: 50%;\n    box-shadow: inset 0px 0px 0.4em 0.1em rgba(255, 255, 255, 0.7);\n}\n\n.absol-color-picker-hue-range {\n    position: absolute;\n    top: 1em;\n    right: 1.5em;\n    bottom: 4em;\n    width: 1.7em;\n}\n\n.absol-color-picker-hue {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    border: inset 1px rgba(220, 220, 225);\n    background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n}\n\n.absol-color-picker-hue .absol-color-dragger,\n.absol-color-picker-alpha .absol-color-dragger {\n    position: absolute;\n    height: 0.6em;\n    left: -0.3em;\n    right: -0.3em;\n    top: 0%;\n    margin-top: -0.3em;\n    margin-bottom: -0.3em;\n    border-width: 0.1em;\n}\n\n.absol-color-picker-alpha {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    background-image: linear-gradient(to top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 1));\n}\n\n.absol-color-picker-alpha-range,\n.absol-color-picker-input {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n    background-size: 1.5em;\n    image-rendering: optimizeSpeed;\n    /* STOP SMOOTHING, GIVE ME SPEED  */\n    image-rendering: -moz-crisp-edges;\n    /* Firefox                        */\n    image-rendering: -o-crisp-edges;\n    /* Opera                          */\n    image-rendering: -webkit-optimize-contrast;\n    /* Chrome (and eventually Safari) */\n    image-rendering: pixelated;\n    /* Chrome */\n    image-rendering: optimize-contrast;\n    /* CSS3 Proposed                  */\n    -ms-interpolation-mode: nearest-neighbor;\n    /* IE8+                           */\n}\n\n.absol-color-picker-alpha-range {\n    position: absolute;\n    right: 4.5em;\n    top: 1em;\n    bottom: 4em;\n    width: 1.7em;\n}\n\n.absol-color-picker:not(.with-alpha) .absol-color-picker-alpha-range {\n    display: none;\n}\n\n.absol-color-picker-input {\n    position: absolute;\n    left: 1em;\n    bottom: 1em;\n    right: 5em;\n    height: 2em;\n}\n\n.absol-color-picker-text-container {\n    background-color: transparent;\n    outline: none;\n    border: none;\n    width: 100%;\n    height: 100%;\n    color: rgb(230, 230, 235);\n    text-align: center;\n    font-size: 1em;\n    background-color: #000;\n}\n\n.absol-color-picker-text-container> span,\n.absol-color-picker-text-container> div{\n    line-height: 2.5;\n    font-size: 0.8em;\n}\n\n.absol-color-picker-mode {\n    position: absolute;\n    right: 1em;\n    bottom: 1em;\n    height: 2em;\n    width: 3em;\n    box-sizing: border-box;\n    font-size: 1em;\n    border: none;\n    outline: none;\n    background-color: rgb(243, 243, 243);\n    color: rgb(21, 21, 34);\n}\n\n.absol-color-picker.with-alpha .absol-color-picker-mode {\n    right: 2.5em;\n    width: 3.7em;\n}", ""]);



/***/ }),

/***/ 8459:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-color-picker-button {\n    width: 45px;\n    height: 30px;\n    border-radius: 3px;\n    border: 1px solid #d6d6d6;\n    background-color: transparent;\n    padding: 5px;\n    outline: none;\n}\n\n.as-color-picker-button-inner {\n    height: 100%;\n    width: 100%;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n    background-size: 1.5em;\n    image-rendering: optimizeSpeed;\n    /* STOP SMOOTHING, GIVE ME SPEED  */\n    image-rendering: -moz-crisp-edges;\n    /* Firefox                        */\n    image-rendering: -o-crisp-edges;\n    /* Opera                          */\n    image-rendering: -webkit-optimize-contrast;\n    /* Chrome (and eventually Safari) */\n    image-rendering: pixelated;\n    /* Chrome */\n    image-rendering: optimize-contrast;\n    /* CSS3 Proposed                  */\n    -ms-interpolation-mode: nearest-neighbor;\n    /* IE8+                           */\n}\n\n.as-color-picker-button-inner-value {\n    width: 100%;\n    height: 100%;\n}\n\n.as-color-picker-button-fol{\n    z-index: 1000;\n}", ""]);



/***/ }),

/***/ 6599:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-solid-color-picker:not(.as-solid-color-picker-mode-swatches) .as-solid-color-picker-swatches-select-ctn,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-swatches) .as-solid-color-picker-swatches-ctn,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-spectrum,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-hue,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-alpha,\n.as-solid-color-picker:not(.as-solid-color-picker-mode-picker) .as-solid-color-picker-near {\n    display: none;\n}\n\n.as-solid-color-picker .as-hanger{\n    user-select: none;\n    touch-action: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\n.as-solid-color-picker {\n    display: inline-block;\n    border: 1px solid black;\n    font-size: 12px;\n    font-family: Arial, Helvetica, sans-serif;\n    outline: none;\n    background-color: white;\n}\n\n.as-solid-color-picker-body {\n    padding-bottom: 10px;\n    padding-left: 10px;\n    padding-right: 10px;\n    box-sizing: border-box;\n    border-bottom: 1px solid #dddddd;\n}\n\n.as-solid-color-picker-header {\n    padding: 10px;\n}\n\n.as-solid-color-picker-mode {\n    font-size: 0.9em;\n}\n\n.as-solid-color-picker-mode button {\n    height: 1.5em;\n    min-width: 7em;\n}\n\n.as-solid-color-picker-swatches-name {\n    color: #006ce5;\n    text-decoration: underline;\n    cursor: pointer;\n}\n\n.as-solid-color-picker-swatches-select-ctn {\n    line-height: 2em;\n}\n\n.as-solid-color-picker-swatches-ctn {\n    overflow-y: auto;\n    width: 20em;\n    height: 20em;\n    box-sizing: content-box;\n}\n\n.as-solid-color-picker-swatches-ctn .as-swatches-table {\n    width: 100%;\n}\n\n.as-solid-color-picker-swatches-ctn .as-swatches-table-row,\n.as-solid-color-picker-recent-swatches-ctn .as-swatches-table-row {\n    height: 2em;\n}\n\n.as-solid-color-picker-recent-swatches-ctn .as-swatches-table-cell {\n    width: 1.6666666em;\n}\n\n\n.as-solid-color-picker-recent-title {\n    line-height: 1.5em;\n    margin-top: 0.5em;\n    font-weight: bold;\n}\n\n.as-solid-color-picker-recent-swatches-ctn {\n    overflow-y: auto;\n    width: 20em;\n    height: 4em;\n    box-sizing: content-box;\n}\n\n.as-solid-color-picker-footer {\n    padding: 10px;\n}\n\n.as-solid-color-picker-footer .as-flexicon-button {\n    font-size: inherit;\n    height: 2em;\n    box-sizing: border-box;\n    vertical-align: middle;\n}\n\n.as-solid-color-picker-selected-ctn {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n    background-size: 1.5em;\n    image-rendering: optimizeSpeed;\n    image-rendering: -moz-crisp-edges;\n    image-rendering: -o-crisp-edges;\n    image-rendering: -webkit-optimize-contrast;\n    image-rendering: pixelated;\n    image-rendering: optimize-contrast;\n    -ms-interpolation-mode: nearest-neighbor;\n\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.as-solid-color-picker-selected {\n    height: 2em;\n    width: 5em;\n    border: 1px solid #ddd;\n    box-sizing: border-box;\n}\n\n.as-solid-color-picker-color-hex,\n.as-solid-color-picker-color-opacity {\n    font-size: inherit;\n    width: 6em;\n}\n\n.as-flexicon-input.as-solid-color-picker-color-opacity.as-flexicon-input-has-icon.as-flexicon-input-has-unit input{\n    width: calc(100% - 4em);\n}\n\n\n/*.as-solid-color-picker-color-hex input {*/\n/*    padding-left: 0;*/\n/*    padding-right: 0;*/\n/*}*/\n\n.as-solid-color-picker-color-opacity input {\n    padding-left: 0;\n    padding-right: 0;\n}\n\n.as-solid-color-picker-footer *:not(:first-child) {\n    margin-left: 0.5em;\n}\n\n.as-swatches-table-cell .as-solid-color-picker-selected-dot {\n    left: calc(50% - 0.5em);\n    top: calc(50% - 0.5em);\n}\n\n.as-solid-color-picker-selected-dot {\n    position: absolute;\n    width: 1em;\n    height: 1em;\n    box-shadow: inset 0px 0px 0.3em 0.125em rgba(255, 255, 255, 0.7);\n    z-index: 1;\n    border-radius: 50%;\n}\n\n\n.as-solid-color-picker-spectrum {\n    width: 20em;\n    height: 13.3em;\n    background-color: red;\n    position: relative;\n}\n\n.as-solid-color-picker-spectrum-dot {\n    width: 1em;\n    height: 1em;\n    box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n    z-index: 1;\n    border-radius: 50%;\n    position: absolute;\n    bottom: calc(100% - 0.5em);\n    left: calc(100% - 0.5em);\n}\n\n\n.as-solid-color-picker-hue {\n    width: 20em;\n    height: 2em;\n    background: linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    position: relative;\n}\n\n.as-solid-color-picker-hue-dot {\n    width: 1em;\n    height: 1em;\n    box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n    z-index: 1;\n    border-radius: 50%;\n    position: absolute;\n    top: calc(50% - 0.5em);\n    left: calc(0% - 0.5em);\n}\n\n\n\n.as-solid-color-picker-alpha {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n    background-size: 1.5em;\n    image-rendering: optimizeSpeed;\n    image-rendering: -moz-crisp-edges;\n    image-rendering: -o-crisp-edges;\n    image-rendering: -webkit-optimize-contrast;\n    image-rendering: pixelated;\n    image-rendering: optimize-contrast;\n    -ms-interpolation-mode: nearest-neighbor;\n\n    width: 20em;\n    height: 2em;\n    position: relative;\n}\n\n.as-solid-color-picker-alpha-color {\n    background: linear-gradient(to right, rgba(255, 0, 0, 0.0) 0%, rgba(255, 0, 0, 1) 100%);\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}\n\n.as-solid-color-picker-alpha-dot {\n    width: 1em;\n    height: 1em;\n    box-shadow: inset 0px 0px 0.3em 0.125em rgba(0, 0, 0, 0.7);\n    z-index: 1;\n    border-radius: 50%;\n    position: absolute;\n    top: calc(50% - 0.5em);\n    left: calc(100% - 0.5em);\n}\n\n\n\n.as-solid-color-picker-near {\n    margin-top: 0.5em;\n    width: 20em;\n    height: 4.2em;\n}\n\n.as-solid-color-picker-near .as-swatches-table-cell-color {\n    transition: transform 0.1s;\n}\n\n\n.as-solid-color-picker-near .as-swatches-table-cell-color:hover {\n    transform: scale(1.2);\n    z-index: 2;\n}", ""]);



/***/ }),

/***/ 7902:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-spectrum-color {\n    position: relative;\n    touch-action: none;\n    user-select: none;\n    -moz-user-select: none;\n    -webkit-user-select: none;\n}\n\n.as-spectrum-color-sat {\n    width: 100%;\n    height: 100%;\n    box-sizing: content-box;\n    background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)\";\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');\n}\n\n\n.as-spectrum-color-val {\n    width: 100%;\n    height: 100%;\n    box-sizing: content-box;\n    background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)\";\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');\n}", ""]);



/***/ }),

/***/ 6559:
/***/ ((module, exports, __webpack_require__) => {

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-swatches-table {\n    display: table;\n    table-layout: fixed;\n}\n\n.as-swatches-table-row {\n    display: table-row;\n}\n\n\n.as-swatches-table-cell {\n    position: relative;\n    display: table-cell;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\n    background-size: 1.5em;\n    image-rendering: optimizeSpeed;\n    /* STOP SMOOTHING, GIVE ME SPEED  */\n    image-rendering: -moz-crisp-edges;\n    /* Firefox                        */\n    image-rendering: -o-crisp-edges;\n    /* Opera                          */\n    image-rendering: -webkit-optimize-contrast;\n    /* Chrome (and eventually Safari) */\n    image-rendering: pixelated;\n    /* Chrome */\n    image-rendering: optimize-contrast;\n    /* CSS3 Proposed                  */\n    -ms-interpolation-mode: nearest-neighbor;\n    /* IE8+                           */\n}\n\n.as-swatches-table-cell-color {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}", ""]);



/***/ }),

/***/ 9758:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7119);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3824:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8042);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8521:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3608);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 931:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9001);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9607:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1682);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1839:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1843);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 350:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6106);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9338:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3368);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9409:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2943);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 963:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6241);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5969:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6172);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5416:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2254);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7779:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5021);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 127:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4334);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9479:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3909);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3573:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4142);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7442:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5009);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6995:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9680);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5843:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4273);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 466:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6048);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4980:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1242);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6163:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3397);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 2863:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7437);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9858:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4100);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7425:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6478);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1984:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1908);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1784:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6485);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6727:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(468);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7612:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8367);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3755:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4854);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9047:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5593);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8395:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5543);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1922:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7110);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6974:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7691);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8687:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2375);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8913:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5225);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6177:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6240);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3138:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(729);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4892:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8278);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 215:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(58);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6026:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4713);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8829:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7726);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9619:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9847);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6090:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2761);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9725:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(91);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6538:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5848);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4647:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8904);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 603:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(918);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5033:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8257);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3081:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3448);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6032:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7557);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3576:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1154);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3386:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8351);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5461:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6993);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 441:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6155);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 487:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3899);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7775:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(780);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3293:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2453);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8316:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1142);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9429:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3586);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 2800:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8239);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4388:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1209);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5507:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4559);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1391:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8551);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9083:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3478);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9874:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9355);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 880:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3542);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5370:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(182);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1540:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4994);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5929:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7289);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 571:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2183);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4920:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4894);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5997:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2206);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5289:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9423);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7058:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7111);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7439:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4476);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4378:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(5199);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8434:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(670);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8994:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2296);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 7818:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4439);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5255:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9127);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9218:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6085);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3367:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4315);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 2870:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4015);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 2053:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8875);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1554:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2652);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 8093:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(475);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5172:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1449);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 2194:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3519);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 9613:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(95);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5092:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(1048);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4231:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(4178);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 4266:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(619);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3972:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(9581);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3378:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3034);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 81:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(3122);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 5756:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2839);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 829:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(2331);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 1721:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(8459);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3934:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6599);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 501:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(7902);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 3370:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {


var content = __webpack_require__(6559);

if(typeof content === 'string') content = [[module.id, content, '']];

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

var update = __webpack_require__(6723)(content, options);

if(content.locals) module.exports = content.locals;

if(false) {}

/***/ }),

/***/ 6723:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/

var stylesInDom = {};

var	memoize = function (fn) {
	var memo;

	return function () {
		if (typeof memo === "undefined") memo = fn.apply(this, arguments);
		return memo;
	};
};

var isOldIE = memoize(function () {
	// Test for IE <= 9 as proposed by Browserhacks
	// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
	// Tests for existence of standard globals is to allow style-loader
	// to operate correctly into non-standard environments
	// @see https://github.com/webpack-contrib/style-loader/issues/177
	return window && document && document.all && !window.atob;
});

var getTarget = function (target, parent) {
  if (parent){
    return parent.querySelector(target);
  }
  return document.querySelector(target);
};

var getElement = (function (fn) {
	var memo = {};

	return function(target, parent) {
                // If passing function in options, then use it for resolve "head" element.
                // Useful for Shadow Root style i.e
                // {
                //   insertInto: function () { return document.querySelector("#foo").shadowRoot }
                // }
                if (typeof target === 'function') {
                        return target();
                }
                if (typeof memo[target] === "undefined") {
			var styleTarget = getTarget.call(this, target, parent);
			// Special case to return head of iframe instead of iframe itself
			if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
				try {
					// This will throw an exception if access to iframe is blocked
					// due to cross-origin restrictions
					styleTarget = styleTarget.contentDocument.head;
				} catch(e) {
					styleTarget = null;
				}
			}
			memo[target] = styleTarget;
		}
		return memo[target]
	};
})();

var singleton = null;
var	singletonCounter = 0;
var	stylesInsertedAtTop = [];

var	fixUrls = __webpack_require__(7008);

module.exports = function(list, options) {
	if (typeof DEBUG !== "undefined" && DEBUG) {
		if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
	}

	options = options || {};

	options.attrs = typeof options.attrs === "object" ? options.attrs : {};

	// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
	// tags it will allow on a page
	if (!options.singleton && typeof options.singleton !== "boolean") options.singleton = isOldIE();

	// By default, add <style> tags to the <head> element
        if (!options.insertInto) options.insertInto = "head";

	// By default, add <style> tags to the bottom of the target
	if (!options.insertAt) options.insertAt = "bottom";

	var styles = listToStyles(list, options);

	addStylesToDom(styles, options);

	return function update (newList) {
		var mayRemove = [];

		for (var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];

			domStyle.refs--;
			mayRemove.push(domStyle);
		}

		if(newList) {
			var newStyles = listToStyles(newList, options);
			addStylesToDom(newStyles, options);
		}

		for (var i = 0; i < mayRemove.length; i++) {
			var domStyle = mayRemove[i];

			if(domStyle.refs === 0) {
				for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();

				delete stylesInDom[domStyle.id];
			}
		}
	};
};

function addStylesToDom (styles, options) {
	for (var i = 0; i < styles.length; i++) {
		var item = styles[i];
		var domStyle = stylesInDom[item.id];

		if(domStyle) {
			domStyle.refs++;

			for(var j = 0; j < domStyle.parts.length; j++) {
				domStyle.parts[j](item.parts[j]);
			}

			for(; j < item.parts.length; j++) {
				domStyle.parts.push(addStyle(item.parts[j], options));
			}
		} else {
			var parts = [];

			for(var j = 0; j < item.parts.length; j++) {
				parts.push(addStyle(item.parts[j], options));
			}

			stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
		}
	}
}

function listToStyles (list, options) {
	var styles = [];
	var newStyles = {};

	for (var i = 0; i < list.length; i++) {
		var item = list[i];
		var id = options.base ? item[0] + options.base : item[0];
		var css = item[1];
		var media = item[2];
		var sourceMap = item[3];
		var part = {css: css, media: media, sourceMap: sourceMap};

		if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
		else newStyles[id].parts.push(part);
	}

	return styles;
}

function insertStyleElement (options, style) {
	var target = getElement(options.insertInto)

	if (!target) {
		throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
	}

	var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];

	if (options.insertAt === "top") {
		if (!lastStyleElementInsertedAtTop) {
			target.insertBefore(style, target.firstChild);
		} else if (lastStyleElementInsertedAtTop.nextSibling) {
			target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
		} else {
			target.appendChild(style);
		}
		stylesInsertedAtTop.push(style);
	} else if (options.insertAt === "bottom") {
		target.appendChild(style);
	} else if (typeof options.insertAt === "object" && options.insertAt.before) {
		var nextSibling = getElement(options.insertAt.before, target);
		target.insertBefore(style, nextSibling);
	} else {
		throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");
	}
}

function removeStyleElement (style) {
	if (style.parentNode === null) return false;
	style.parentNode.removeChild(style);

	var idx = stylesInsertedAtTop.indexOf(style);
	if(idx >= 0) {
		stylesInsertedAtTop.splice(idx, 1);
	}
}

function createStyleElement (options) {
	var style = document.createElement("style");

	if(options.attrs.type === undefined) {
		options.attrs.type = "text/css";
	}

	if(options.attrs.nonce === undefined) {
		var nonce = getNonce();
		if (nonce) {
			options.attrs.nonce = nonce;
		}
	}

	addAttrs(style, options.attrs);
	insertStyleElement(options, style);

	return style;
}

function createLinkElement (options) {
	var link = document.createElement("link");

	if(options.attrs.type === undefined) {
		options.attrs.type = "text/css";
	}
	options.attrs.rel = "stylesheet";

	addAttrs(link, options.attrs);
	insertStyleElement(options, link);

	return link;
}

function addAttrs (el, attrs) {
	Object.keys(attrs).forEach(function (key) {
		el.setAttribute(key, attrs[key]);
	});
}

function getNonce() {
	if (false) {}

	return __webpack_require__.nc;
}

function addStyle (obj, options) {
	var style, update, remove, result;

	// If a transform function was defined, run it on the css
	if (options.transform && obj.css) {
	    result = typeof options.transform === 'function'
		 ? options.transform(obj.css) 
		 : options.transform.default(obj.css);

	    if (result) {
	    	// If transform returns a value, use that instead of the original css.
	    	// This allows running runtime transformations on the css.
	    	obj.css = result;
	    } else {
	    	// If the transform function returns a falsy value, don't add this css.
	    	// This allows conditional loading of css
	    	return function() {
	    		// noop
	    	};
	    }
	}

	if (options.singleton) {
		var styleIndex = singletonCounter++;

		style = singleton || (singleton = createStyleElement(options));

		update = applyToSingletonTag.bind(null, style, styleIndex, false);
		remove = applyToSingletonTag.bind(null, style, styleIndex, true);

	} else if (
		obj.sourceMap &&
		typeof URL === "function" &&
		typeof URL.createObjectURL === "function" &&
		typeof URL.revokeObjectURL === "function" &&
		typeof Blob === "function" &&
		typeof btoa === "function"
	) {
		style = createLinkElement(options);
		update = updateLink.bind(null, style, options);
		remove = function () {
			removeStyleElement(style);

			if(style.href) URL.revokeObjectURL(style.href);
		};
	} else {
		style = createStyleElement(options);
		update = applyToTag.bind(null, style);
		remove = function () {
			removeStyleElement(style);
		};
	}

	update(obj);

	return function updateStyle (newObj) {
		if (newObj) {
			if (
				newObj.css === obj.css &&
				newObj.media === obj.media &&
				newObj.sourceMap === obj.sourceMap
			) {
				return;
			}

			update(obj = newObj);
		} else {
			remove();
		}
	};
}

var replaceText = (function () {
	var textStore = [];

	return function (index, replacement) {
		textStore[index] = replacement;

		return textStore.filter(Boolean).join('\n');
	};
})();

function applyToSingletonTag (style, index, remove, obj) {
	var css = remove ? "" : obj.css;

	if (style.styleSheet) {
		style.styleSheet.cssText = replaceText(index, css);
	} else {
		var cssNode = document.createTextNode(css);
		var childNodes = style.childNodes;

		if (childNodes[index]) style.removeChild(childNodes[index]);

		if (childNodes.length) {
			style.insertBefore(cssNode, childNodes[index]);
		} else {
			style.appendChild(cssNode);
		}
	}
}

function applyToTag (style, obj) {
	var css = obj.css;
	var media = obj.media;

	if(media) {
		style.setAttribute("media", media)
	}

	if(style.styleSheet) {
		style.styleSheet.cssText = css;
	} else {
		while(style.firstChild) {
			style.removeChild(style.firstChild);
		}

		style.appendChild(document.createTextNode(css));
	}
}

function updateLink (link, options, obj) {
	var css = obj.css;
	var sourceMap = obj.sourceMap;

	/*
		If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
		and there is no publicPath defined then lets turn convertToAbsoluteUrls
		on by default.  Otherwise default to the convertToAbsoluteUrls option
		directly
	*/
	var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;

	if (options.convertToAbsoluteUrls || autoFixUrls) {
		css = fixUrls(css);
	}

	if (sourceMap) {
		// http://stackoverflow.com/a/26603875
		css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
	}

	var blob = new Blob([css], { type: "text/css" });

	var oldSrc = link.href;

	link.href = URL.createObjectURL(blob);

	if(oldSrc) URL.revokeObjectURL(oldSrc);
}


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/amd options */
/******/ 	(() => {
/******/ 		__webpack_require__.amdO = {};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	(() => {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	(() => {
/******/ 		__webpack_require__.nmd = (module) => {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";

// NAMESPACE OBJECT: ./node_modules/absol/src/JSX/attribute.js
var attribute_namespaceObject = {};
__webpack_require__.r(attribute_namespaceObject);
__webpack_require__.d(attribute_namespaceObject, {
  "parseClassAttr": () => (parseClassAttr),
  "parseStyleAttr": () => (parseStyleAttr)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate_namespaceObject = {};
__webpack_require__.r(stringGenerate_namespaceObject);
__webpack_require__.d(stringGenerate_namespaceObject, {
  "identCharacters": () => (identCharacters),
  "ipsumLoremWord": () => (ipsumLoremWord),
  "parallelMatch": () => (parallelMatch),
  "randomIdent": () => (randomIdent),
  "randomParagraph": () => (randomParagraph),
  "randomPhrase": () => (randomPhrase),
  "randomSentence": () => (randomSentence),
  "randomWord": () => (randomWord)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/HTML5/Text.js
var Text_namespaceObject = {};
__webpack_require__.r(Text_namespaceObject);
__webpack_require__.d(Text_namespaceObject, {
  "getCaretPosition": () => (Text_getCaretPosition),
  "getTextIn": () => (getTextIn),
  "getTextNodesIn": () => (getTextNodesIn),
  "measureText": () => (Text_measureText),
  "setCaretPosition": () => (setCaretPosition),
  "setSelectionRange": () => (setSelectionRange),
  "setSelectionRangeEnd": () => (setSelectionRangeEnd),
  "setSelectionRangeStart": () => (setSelectionRangeStart),
  "textToNodes": () => (textToNodes)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Converter/file.js
var file_namespaceObject = {};
__webpack_require__.r(file_namespaceObject);
__webpack_require__.d(file_namespaceObject, {
  "blobToArrayBuffer": () => (blobToArrayBuffer),
  "blobToFile": () => (blobToFile),
  "dataURItoBlob": () => (dataURItoBlob),
  "stringToBlob": () => (stringToBlob)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Converter/base64.js
var base64_namespaceObject = {};
__webpack_require__.r(base64_namespaceObject);
__webpack_require__.d(base64_namespaceObject, {
  "UnicodeBase64Converter": () => (UnicodeBase64Converter),
  "base64DecodeUnicode": () => (base64DecodeUnicode),
  "base64EncodeUnicode": () => (base64EncodeUnicode)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/String/stringFormat.js
var stringFormat_namespaceObject = {};
__webpack_require__.r(stringFormat_namespaceObject);
__webpack_require__.d(stringFormat_namespaceObject, {
  "camelCaseToKebabCase": () => (camelCaseToKebabCase),
  "camelCaseToPascalCase": () => (camelCaseToPascalCase),
  "camelCaseToUnderScore": () => (camelCaseToUnderScore),
  "camelCaseToUpperUnderScore": () => (camelCaseToUpperUnderScore),
  "kebabCaseToCamelCase": () => (kebabCaseToCamelCase),
  "kebabCaseToPascalCase": () => (kebabCaseToPascalCase),
  "kebabCaseToUnderScore": () => (kebabCaseToUnderScore),
  "kebabCaseToUpperUnderScore": () => (kebabCaseToUpperUnderScore),
  "nonAccentVietnamese": () => (nonAccentVietnamese),
  "pascalCaseToCamelCase": () => (pascalCaseToCamelCase),
  "pascalCaseToKebabCase": () => (pascalCaseToKebabCase),
  "pascalCaseToUnderScore": () => (pascalCaseToUnderScore),
  "pascalCaseToUpperUnderScore": () => (pascalCaseToUpperUnderScore),
  "underScoreToCamelCase": () => (underScoreToCamelCase),
  "underScoreToKebabCase": () => (underScoreToKebabCase),
  "underScoreToPascalCase": () => (underScoreToPascalCase),
  "wrapToLines": () => (wrapToLines)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/JSX/dom.js
var dom_namespaceObject = {};
__webpack_require__.r(dom_namespaceObject);
__webpack_require__.d(dom_namespaceObject, {
  "domVisitor": () => (domVisitor),
  "parseDom": () => (parseDom)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Math/int.js
var int_namespaceObject = {};
__webpack_require__.r(int_namespaceObject);
__webpack_require__.d(int_namespaceObject, {
  "distance": () => (distance),
  "harmonicMean": () => (harmonicMean),
  "integerZeroPadding": () => (integerZeroPadding),
  "map": () => (map),
  "numberAutoFixed": () => (numberAutoFixed),
  "numberToString": () => (numberToString),
  "radianInRange": () => (radianInRange),
  "sumArr": () => (sumArr)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/HTML5/Clipboard.js
var Clipboard_namespaceObject = {};
__webpack_require__.r(Clipboard_namespaceObject);
__webpack_require__.d(Clipboard_namespaceObject, {
  "copyImage": () => (copyImage),
  "copyText": () => (copyText),
  "pasteText": () => (pasteText)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Time/datetime.js
var datetime_namespaceObject = {};
__webpack_require__.r(datetime_namespaceObject);
__webpack_require__.d(datetime_namespaceObject, {
  "DATE_TIME_TOKEN_RGX": () => (DATE_TIME_TOKEN_RGX),
  "LOCAL_DATE_FORMAT": () => (LOCAL_DATE_FORMAT),
  "LOCAL_DATE_TIME_FORMAT": () => (LOCAL_DATE_TIME_FORMAT),
  "MILLIS_PER_DAY": () => (MILLIS_PER_DAY),
  "MILLIS_PER_HOUR": () => (MILLIS_PER_HOUR),
  "MILLIS_PER_MINUTE": () => (MILLIS_PER_MINUTE),
  "beginOfDay": () => (beginOfDay),
  "beginOfHour": () => (beginOfHour),
  "beginOfMonth": () => (datetime_beginOfMonth),
  "beginOfWeek": () => (beginOfWeek),
  "beginOfYear": () => (beginOfYear),
  "compareDate": () => (compareDate),
  "compareMonth": () => (compareMonth),
  "compareYear": () => (compareYear),
  "dateFormat2LocationList": () => (dateFormat2LocationList),
  "dateFormatList": () => (dateFormatList),
  "dayNames": () => (dayNames),
  "daysInMonth": () => (daysInMonth),
  "ddmmyyyy": () => (ddmmyyyy),
  "formartDateString": () => (formartDateString),
  "formatDateString": () => (formatDateString),
  "formatDateTime": () => (formatDateTime),
  "formatTokenRegex": () => (formatTokenRegex),
  "language2LocalDateFormat": () => (language2LocalDateFormat),
  "monthNames": () => (monthNames),
  "nextDate": () => (nextDate),
  "nextMonth": () => (nextMonth),
  "parseDateString": () => (parseDateString),
  "parseDateTime": () => (parseDateTime),
  "prevDate": () => (prevDate),
  "prevMonth": () => (prevMonth),
  "shortDayNames": () => (shortDayNames),
  "shortMonthNames": () => (shortMonthNames),
  "yyymmdd": () => (yyymmdd)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Network/FileSaver.js
var FileSaver_namespaceObject = {};
__webpack_require__.r(FileSaver_namespaceObject);
__webpack_require__.d(FileSaver_namespaceObject, {
  "fileExist": () => (fileExist),
  "saveAs": () => (saveAs),
  "saveTextAs": () => (saveTextAs)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/String/stringMatching.js
var stringMatching_namespaceObject = {};
__webpack_require__.r(stringMatching_namespaceObject);
__webpack_require__.d(stringMatching_namespaceObject, {
  "phraseLike": () => (phraseLike),
  "phraseMatch": () => (phraseMatch),
  "wordLike": () => (wordLike),
  "wordsMatch": () => (wordsMatch)
});

// EXTERNAL MODULE: ./node_modules/atob/browser-atob.js
var browser_atob = __webpack_require__(9733);
var browser_atob_default = /*#__PURE__*/__webpack_require__.n(browser_atob);
// EXTERNAL MODULE: ./node_modules/btoa/index.js
var node_modules_btoa = __webpack_require__(6835);
var btoa_default = /*#__PURE__*/__webpack_require__.n(node_modules_btoa);
;// CONCATENATED MODULE: ./node_modules/absol/src/Polyfill/polyfill.js
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }




if (!('atob' in window)) {
  window.atob = (browser_atob_default());
}

if (!('btoa' in window)) {
  window.btoa = (btoa_default());
}

!function (e, n) {
  "object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) && "undefined" != "object" ? n() : "function" == typeof define && __webpack_require__.amdO ? define(n) : n();
}(0, function () {
  "use strict";

  function e(e) {
    var n = this.constructor;
    return this.then(function (t) {
      return n.resolve(e()).then(function () {
        return t;
      });
    }, function (t) {
      return n.resolve(e()).then(function () {
        return n.reject(t);
      });
    });
  }

  function n() {}

  function t(e) {
    if (!(this instanceof t)) throw new TypeError("Promises must be constructed via new");
    if ("function" != typeof e) throw new TypeError("not a function");
    this._state = 0, this._handled = !1, this._value = undefined, this._deferreds = [], u(e, this);
  }

  function o(e, n) {
    for (; 3 === e._state;) {
      e = e._value;
    }

    0 !== e._state ? (e._handled = !0, t._immediateFn(function () {
      var t = 1 === e._state ? n.onFulfilled : n.onRejected;

      if (null !== t) {
        var o;

        try {
          o = t(e._value);
        } catch (f) {
          return void i(n.promise, f);
        }

        r(n.promise, o);
      } else (1 === e._state ? r : i)(n.promise, e._value);
    })) : e._deferreds.push(n);
  }

  function r(e, n) {
    try {
      if (n === e) throw new TypeError("A promise cannot be resolved with itself.");

      if (n && ("object" == _typeof(n) || "function" == typeof n)) {
        var o = n.then;
        if (n instanceof t) return e._state = 3, e._value = n, void f(e);
        if ("function" == typeof o) return void u(function (e, n) {
          return function () {
            e.apply(n, arguments);
          };
        }(o, n), e);
      }

      e._state = 1, e._value = n, f(e);
    } catch (r) {
      i(e, r);
    }
  }

  function i(e, n) {
    e._state = 2, e._value = n, f(e);
  }

  function f(e) {
    2 === e._state && 0 === e._deferreds.length && t._immediateFn(function () {
      e._handled || t._unhandledRejectionFn(e._value);
    });

    for (var n = 0, r = e._deferreds.length; r > n; n++) {
      o(e, e._deferreds[n]);
    }

    e._deferreds = null;
  }

  function u(e, n) {
    var t = !1;

    try {
      e(function (e) {
        t || (t = !0, r(n, e));
      }, function (e) {
        t || (t = !0, i(n, e));
      });
    } catch (o) {
      if (t) return;
      t = !0, i(n, o);
    }
  }

  var c = setTimeout;
  t.prototype["catch"] = function (e) {
    return this.then(null, e);
  }, t.prototype.then = function (e, t) {
    var r = new this.constructor(n);
    return o(this, new function (e, n, t) {
      this.onFulfilled = "function" == typeof e ? e : null, this.onRejected = "function" == typeof n ? n : null, this.promise = t;
    }(e, t, r)), r;
  }, t.prototype["finally"] = e, t.all = function (e) {
    return new t(function (n, t) {
      function o(e, f) {
        try {
          if (f && ("object" == _typeof(f) || "function" == typeof f)) {
            var u = f.then;
            if ("function" == typeof u) return void u.call(f, function (n) {
              o(e, n);
            }, t);
          }

          r[e] = f, 0 == --i && n(r);
        } catch (c) {
          t(c);
        }
      }

      if (!e || "undefined" == typeof e.length) throw new TypeError("Promise.all accepts an array");
      var r = Array.prototype.slice.call(e);
      if (0 === r.length) return n([]);

      for (var i = r.length, f = 0; r.length > f; f++) {
        o(f, r[f]);
      }
    });
  }, t.resolve = function (e) {
    return e && "object" == _typeof(e) && e.constructor === t ? e : new t(function (n) {
      n(e);
    });
  }, t.reject = function (e) {
    return new t(function (n, t) {
      t(e);
    });
  }, t.race = function (e) {
    return new t(function (n, t) {
      for (var o = 0, r = e.length; r > o; o++) {
        e[o].then(n, t);
      }
    });
  }, t._immediateFn = "function" == typeof setImmediate && function (e) {
    setImmediate(e);
  } || function (e) {
    c(e, 0);
  }, t._unhandledRejectionFn = function (e) {
    void 0 !== console && console && console.warn("Possible Unhandled Promise Rejection:", e);
  };

  var l = function () {
    if ("undefined" != typeof self) return self;
    if ("undefined" != typeof window) return window;
    if ("undefined" != typeof __webpack_require__.g) return __webpack_require__.g;
    throw Error("unable to locate global object");
  }();

  "Promise" in l ? l.Promise.prototype["finally"] || (l.Promise.prototype["finally"] = e) : l.Promise = t;
});
!function () {
  var vendors = ['ms', 'moz', 'webkit', 'o'];

  for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
    window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
  }

  if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {
    var id = window.setTimeout(function () {
      callback(element);
    }, 1000 / 60);
    return id;
  };
  if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {
    clearTimeout(id);
  };
}(); //Object

(function () {
  'use strict';

  var ObjectProto = Object.prototype,
      defineGetter = ObjectProto.__defineGetter__,
      defineSetter = ObjectProto.__defineSetter__,
      lookupGetter = ObjectProto.__lookupGetter__,
      lookupSetter = ObjectProto.__lookupSetter__,
      hasOwnProp = ObjectProto.hasOwnProperty;
  var supportDom = true;

  try {
    if (Object.defineProperty) {
      Object.defineProperty(document.createElement('div'), 'theRandomName', {
        set: function set() {},
        get: function get() {}
      });
    }
  } catch (error) {
    supportDom = false;
  }

  if ((!supportDom || !Object.defineProperty) && defineGetter && defineSetter && lookupGetter && lookupSetter) {
    var originObjetDefineProperty = Object.defineProperty;

    Object.defineProperty = function (obj, prop, descriptor) {
      if (!originObjetDefineProperty || typeof obj.nodeType === "number" && typeof obj.nodeName === "string") {
        if (arguments.length < 3) {
          // all arguments required
          throw new TypeError("Arguments not optional");
        }

        prop += ""; // convert prop to string

        if (hasOwnProp.call(descriptor, "value")) {
          if (!lookupGetter.call(obj, prop) && !lookupSetter.call(obj, prop)) {
            // data property defined and no pre-existing accessors
            obj[prop] = descriptor.value;
          }

          if (hasOwnProp.call(descriptor, "get") || hasOwnProp.call(descriptor, "set")) {
            // descriptor has a value prop but accessor already exists
            throw new TypeError("Cannot specify an accessor and a value");
          }
        }

        if (descriptor.get) {
          defineGetter.call(obj, prop, descriptor.get);
        }

        if (descriptor.set) {
          defineSetter.call(obj, prop, descriptor.set);
        }

        return obj;
      } else {
        return originObjetDefineProperty.call(this, obj, prop, descriptor);
      }
    };

    var originObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

    Object.getOwnPropertyDescriptor = function (obj, prop) {
      if (!originObjectGetOwnPropertyDescriptor || typeof obj.nodeType === "number" && typeof obj.nodeName === "string") {
        if (arguments.length < 2) {
          // all arguments required
          throw new TypeError("Arguments not optional.");
        }

        prop += ""; // convert prop to string

        var descriptor = {
          configurable: true,
          enumerable: true,
          writable: true
        },
            getter = lookupGetter.call(obj, prop),
            setter = lookupSetter.call(obj, prop);

        if (!hasOwnProp.call(obj, prop)) {
          // property doesn't exist or is inherited
          return descriptor;
        }

        if (!getter && !setter) {
          // not an accessor so return prop
          descriptor.value = obj[prop];
          return descriptor;
        } // there is an accessor, remove descriptor.writable;
        // populate descriptor.get and descriptor.set (IE's behavior)


        delete descriptor.writable;
        descriptor.get = descriptor.set = undefined;

        if (getter) {
          descriptor.get = getter;
        }

        if (setter) {
          descriptor.set = setter;
        }

        return descriptor;
      } else {
        return originObjectGetOwnPropertyDescriptor(obj, prop);
      }
    };
  }

  if (!supportDom || !Object.getOwnPropertyDescriptors) {
    Object.getOwnPropertyDescriptors = function (o) {
      var res = {};

      for (var key in o) {
        res[key] = Object.getOwnPropertyDescriptor(o, key);
      }

      return res;
    };
  }

  if (!supportDom || !Object.defineProperties) {
    Object.defineProperties = function (obj, props) {
      var prop;

      for (prop in props) {
        if (hasOwnProp.call(props, prop)) {
          Object.defineProperty(obj, prop, props[prop]);
        }
      }
    };
  }

  if (typeof Object.assign != 'function') {
    Object.assign = function (target, varArgs) {
      'use strict';

      if (target == null) {
        throw new TypeError('Cannot convert undefined or null to object');
      }

      var to = Object(target);

      for (var index = 1; index < arguments.length; index++) {
        var nextSource = arguments[index];

        if (nextSource != null) {
          for (var nextKey in nextSource) {
            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
              to[nextKey] = nextSource[nextKey];
            }
          }
        }
      }

      return to;
    };
  }
})(); //string


!function () {
  if (!String.prototype.startsWith) {
    String.prototype.startsWith = function (searchString, position) {
      position = position || 0;
      return this.indexOf(searchString, position) === position;
    };
  }

  if (!String.prototype.replaceAll) {
    String.prototype.replaceAll = function () {
      var find = arguments[0];
      if (!find) return this;

      if (typeof find == "string") {
        return this.split(find).join(arguments[1]);
      } else if (find instanceof RegExp) {
        return this.replace(new RegExp(find.source, 'g'), arguments[1]);
      }
    };
  }
}(); //array

!function () {
  if (!Array.prototype.fill) {
    Object.defineProperty(Array.prototype, 'fill', {
      value: function value(_value) {
        // Steps 1-2.
        if (this == null) {
          throw new TypeError('this is null or not defined');
        }

        var O = Object(this); // Steps 3-5.

        var len = O.length >>> 0; // Steps 6-7.

        var start = arguments[1];
        var relativeStart = start >> 0; // Step 8.

        var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); // Steps 9-10.

        var end = arguments[2];
        var relativeEnd = end === undefined ? len : end >> 0; // Step 11.

        var _final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len); // Step 12.


        while (k < _final) {
          O[k] = _value;
          k++;
        } // Step 13.


        return O;
      }
    });
  }

  if (!Array.prototype.some) {
    Array.prototype.some = function (fun
    /*, thisp */
    ) {
      "use strict";

      if (this == null) throw new TypeError();
      var t = Object(this),
          len = t.length >>> 0;
      if (typeof fun != "function") throw new TypeError();
      var thisp = arguments[1];

      for (var i = 0; i < len; i++) {
        if (i in t && fun.call(thisp, t[i], i, t)) return true;
      }

      return false;
    };
  }
}(); //function

!function () {
  if (!Function.prototype.bind) {
    var ArrayPrototypeSlice = Array.prototype.slice;

    Function.prototype.bind = function (otherThis) {
      if (typeof this !== 'function') {
        // closest thing possible to the ECMAScript 5
        // internal IsCallable function
        throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
      }

      var baseArgs = ArrayPrototypeSlice.call(arguments, 1),
          baseArgsLength = baseArgs.length,
          fToBind = this,
          fNOP = function fNOP() {},
          fBound = function fBound() {
        baseArgs.length = baseArgsLength; // reset to default base arguments

        baseArgs.push.apply(baseArgs, arguments);
        return fToBind.apply(fNOP.prototype.isPrototypeOf(this) ? this : otherThis, baseArgs);
      };

      if (this.prototype) {
        // Function.prototype doesn't have a prototype property
        fNOP.prototype = this.prototype;
      }

      fBound.prototype = new fNOP();
      return fBound;
    };
  }
}();
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
function EventEmitter_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { EventEmitter_typeof = function _typeof(obj) { return typeof obj; }; } else { EventEmitter_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return EventEmitter_typeof(obj); }

function EventEmitter() {
  if (!this._azar_extendEvents) {
    Object.defineProperty(this, '_azar_extendEvents', {
      enumerable: false,
      value: this._azar_extendEvents || {
        supported: {},
        prioritize: {},
        nonprioritize: {}
      }
    });
    Object.defineProperty(this, '__azar_force', {
      value: !((typeof Node === "undefined" ? "undefined" : EventEmitter_typeof(Node)) === "object" ? this instanceof Node : this && EventEmitter_typeof(this) === "object" && typeof this.nodeType === "number" && typeof this.nodeName === "string"),
      enumerable: false
    });
  }
}

EventEmitter.prototype.defineEvent = function (name) {
  if (name instanceof Array) {
    for (var i = 0; i < name.length; ++i) {
      this._azar_extendEvents.supported[name[i]] = true;
    }
  } else this._azar_extendEvents.supported[name] = true;

  return this;
};

EventEmitter.prototype.isSupportedEvent = function (name) {
  return this.__azar_force || !!this._azar_extendEvents.supported[name];
};

EventEmitter.prototype.emit = function (eventName, data) {
  this.fire.apply(this, arguments);
};

EventEmitter.prototype.fire = function (eventName, data) {
  var others = Array.prototype.slice.call(arguments, 1);

  if (this.isSupportedEvent(eventName)) {
    var listenerList;
    var i;

    if (this._azar_extendEvents.prioritize[eventName]) {
      listenerList = this._azar_extendEvents.prioritize[eventName].slice();

      for (i = 0; i < listenerList.length; ++i) {
        try {
          listenerList[i].wrappedCallback.apply(this, others);
        } catch (e) {
          console.error(e);
        }
      }
    }

    if (this._azar_extendEvents.nonprioritize[eventName]) {
      listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();

      for (i = 0; i < listenerList.length; ++i) {
        try {
          listenerList[i].wrappedCallback.apply(this, others);
        } catch (e) {
          console.error(e);
        }
      }
    }
  } else {
    if (this.dispatchEvent) {
      var event = new Event(eventName);
      data && Object.assign(event, data);
      this.dispatchEvent(event);
    } else throw new Error("Not support event " + eventName);
  }

  return this;
};

EventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {
  if (EventEmitter_typeof(arg0) == 'object') {
    for (var key in arg0) {
      this.eventEmittorOnWithTime(isOnce, key, arg0[key]);
    }

    return this;
  } else {
    if (EventEmitter_typeof(arg1) == 'object') {
      return this.eventEmittorOnWithTime(isOnce, arg0, arg1.callback, arg1.cap);
    } else {
      var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];
      var eventIndex = -1;

      for (var i = 0; i < eventArr.length; ++i) {
        if (eventArr[i].wrappedCallback == arg1) {
          eventIndex = i;
          break;
        }
      }

      if (eventIndex < 0) {
        var event = {
          isOnce: isOnce,
          eventName: arg0,
          callback: arg1,
          cap: !!arg2
        }; //wrappedCallback will be call

        if (isOnce) {
          event.wrappedCallback = function () {
            event.callback.apply(this, arguments);
            this.off(event.eventName, event.wrappedCallback, event.cap);
          };
        } else {
          event.wrappedCallback = event.callback;
        }

        if (!this.isSupportedEvent(arg0)) {
          if (this.addEventListener) {
            this.addEventListener(arg0, event.wrappedCallback, !!arg2);
          } else {
            this.attachEvent('on' + arg0, arg1, !!arg2);
          }
        }

        eventArr.push(event);
        this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr;
      } else {
        console.warn("dupplicate event");
      }
    }

    return this;
  }
};

EventEmitter.prototype.on = function (arg0, arg1, arg2) {
  this.eventEmittorOnWithTime(false, arg0, arg1, arg2);
  return this;
};

EventEmitter.prototype.once = function (arg0, arg1, arg2) {
  this.eventEmittorOnWithTime(true, arg0, arg1, arg2);
  return this;
};

EventEmitter.prototype.off = function (arg0, arg1, arg2) {
  if (EventEmitter_typeof(arg0) == 'object') {
    for (var key in arg0) {
      this.off(key, arg0[key]);
    }

    return this;
  } else {
    if (EventEmitter_typeof(arg1) == 'object') {
      return this.off(arg0, arg1.callback, arg1.cap);
    } else {
      var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];
      var newEventArray = [];

      for (var i = 0; i < eventArr.length; ++i) {
        var event = eventArr[i];

        if (event.wrappedCallback == arg1) {
          //Dont add to newEventArray
          if (this.isSupportedEvent(arg0)) {} else {
            if (this.removeEventListener) {
              this.removeEventListener(event.eventName, event.wrappedCallback, !!event.cap);
            } else {
              this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.cap);
            }
          }
        } else {
          newEventArray.push(event);
        }
      }

      this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray;
      return this;
    }
  }
};

var eventProperties = ["altKey", "bubbles", "button", "buttons", "cancelBubble", "cancelable", "clientX", "clientY", "composed", "ctrlKey", "currentTarget", "defaultPrevented", "deltaMode", "deltaX", "deltaY", "deltaZ", "detail", "eventPhase", "explicitOriginalTarget", "isTrusted", "layerX", "layerY", "metaKey", "movementX", "movementY", "mozInputSource", "mozPressure", "offsetX", "offsetY", "originalTarget", "pageX", "pageY", "rangeOffset", "rangeParent", "region", "relatedTarget", "returnValue", "screenX", "screenY", "shiftKey", "srcElement", "target", "timeStamp", "type", "deltaMode", "deltaX", "deltaY", "deltaZ", 'preventDefault'];
var touchProperties = ['clientX', 'clientY', 'force', 'identifier', 'pageX', 'pageY', 'rotationAngle', 'screenX', 'screenY', 'target'];
function isMouseRight(event) {
  var isRightMB = false;
  if ("which" in event) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
    isRightMB = event.which == 3;else if ("button" in event) // IE, Opera
    isRightMB = event.button == 2;
  return isRightMB;
}
function isMouseLeft(event) {
  var isLeftMB = false;
  if ("which" in event) // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
    isLeftMB = event.which == 1;else if ("button" in event) // IE, Opera
    isLeftMB = event.button == 1;
  return isLeftMB;
}
function hitElement(element, event) {
  var current = event.target;

  while (current) {
    if (current == element) return true;
    current = current.parentElement;
  }

  return false;
}
function copyEvent(event, props) {
  var result = {};
  var key, value; //copy native property

  for (var i = 0; i < eventProperties.length; ++i) {
    key = eventProperties[i];
    value = event[key];

    if (value !== undefined) {
      if (typeof value == "function") {
        result[key] = event[key].bind(event);
      } else {
        result[key] = event[key];
      }
    }
  }

  Object.assign(result, event);
  if (props) Object.assign(result, props);

  if (event.changedTouches) {
    result.changedTouches = Array.prototype.map.call(event.changedTouches, function (touch) {
      return copyTouch(touch);
    });
  }

  if (event.touches) {
    result.touches = Array.prototype.map.call(event.touches, function (touch) {
      return copyTouch(touch);
    });
  }

  return result;
}
function copyTouch(touch, props) {
  var result = {};
  var key, value; //copy native property

  for (var i = 0; i < touchProperties.length; ++i) {
    key = touchProperties[i];
    value = touch[key];

    if (value !== undefined) {
      if (typeof value == "function") {
        result[key] = touch[key].bind(touch);
      } else {
        result[key] = touch[key];
      }
    }
  }

  Object.assign(result, touch);
  if (props) Object.assign(result, props);
  return result;
}
/***
 *
 * @param {TouchEvent} event
 * @return {Touch | null}
 */

function findChangedTouchByIdent(event, identifier) {
  if (event.changedTouches) {
    for (var i = 0; i < event.changedTouches.length; ++i) {
      if (event.changedTouches[i].identifier === identifier) {
        return event.changedTouches[i];
      }
    }
  }

  return null;
}
/***
 *
 * @param event
 * @param identifier
 * @return {Touch|null}
 */

function findTouchByIdent(event, identifier) {
  if (event.touches) {
    for (var i = 0; i < event.touches.length; ++i) {
      if (event.touches[i].identifier === identifier) {
        return event.touches[i];
      }
    }
  }

  return null;
}
EventEmitter.isMouseRight = isMouseRight;
EventEmitter.isMouseLeft = isMouseLeft;
EventEmitter.hitElement = hitElement;
EventEmitter.copyEvent = copyEvent;
EventEmitter.eventProperties = eventProperties;
/* harmony default export */ const HTML5_EventEmitter = (EventEmitter);
// EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserRules.js
var BrowserRules = __webpack_require__(885);
var BrowserRules_default = /*#__PURE__*/__webpack_require__.n(BrowserRules);
;// CONCATENATED MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js

/**
 *
 * @param {BrowserRules} rulesheet
 */

function BrowserDetector(rulesheet) {
  this.au = __webpack_require__.g.navigator ? navigator.userAgent || '' : '';
  this.rulesheet = rulesheet;
  this.os = this.detectByRules(this.rulesheet.os);
  this.device = this.detectByRules(this.rulesheet.device);
  this.engine = this.detectByRules(this.rulesheet.engine);
  this.browser = this.detectByRules(this.rulesheet.browser);
  this.isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
  this.isCococ = navigator.userAgent.toLowerCase().indexOf('coc_coc_browser') >= 1;
  this.isSafari = !this.isCococ && navigator.userAgent.toLowerCase().indexOf('safari') > -1 && navigator.userAgent.toLowerCase().indexOf('win') < 0 && navigator.userAgent.toLowerCase().indexOf('android') < 0; // this.isSafari = /constructor/i.test(window.HTMLElement) || window.safari;

  this.isMobile = navigator.userAgent.indexOf('KFFOWI') > -1 || navigator.userAgent.toLowerCase().indexOf('mobile') > -1;
  this.isMacOSWebView = /Macintosh/.test(this.au) && /AppWebkit/.test(this.au) && !/Safari/.test(this.au);
  this.isChromeIOS = /CriOS\/[\d]+/.test(this.au);
  this.hasTouch = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;
  this.isTouchDevice = this.isMobile && this.hasTouch;

  this.supportPassiveEvent = function () {
    var supportsPassiveOption = false;

    try {
      var opts = Object.defineProperty({}, 'passive', {
        get: function get() {
          supportsPassiveOption = true;
        }
      });
      window.addEventListener('test', null, opts);
      window.removeEventListener('test', null, opts);
    } catch (e) {}

    return supportsPassiveOption;
  }();
}

BrowserDetector.prototype.detectByRules = function (rules) {
  var result = {};

  for (var i = 0; i < rules.length; ++i) {
    var rule = rules[i];
    var type = rule[0];
    var rgx = rule[1];

    if (typeof rgx == 'function') {
      rgx = rgx(this.au.toLowerCase());
    }

    if (Object.prototype.toString.call(rgx).indexOf('RegExp') >= 0) {
      var matched = this.au.toLowerCase().match(rgx);

      if (matched) {
        result.type = type;

        if (matched[1]) {
          result.version = matched[1];
        }

        break;
      }
    } else if (typeof rgx == 'string') {
      if (this.au.toLowerCase().indexOf(rgx) >= 0) {
        result.type = type;
      }
    }
  }

  return result;
};

/* harmony default export */ const Detector_BrowserDetector = (new BrowserDetector((BrowserRules_default())));
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/JSPath.js
function JSPath(props) {
  this.path = props.path;
}
/**
 *
 * @param {Element} element
 * @returns {Boolean}
 */


JSPath.prototype.match = function (element, query) {
  if (query.id) {
    if (!element.getAttribute || element.getAttribute('id') != query.id) return false;
  }

  if (query.tagName) {
    var matchTag = false;
    if (element._azar_extendTags && element._azar_extendTags[query.tagName]) matchTag = true;
    matchTag = matchTag || (element.tagName || '').toUpperCase() == query.tagName.toUpperCase();
    if (!matchTag) return false;
  }

  if (query.classList) for (var i = 0; i < query.classList.length; ++i) {
    if (!element.classList || !element.classList.contains(query.classList[i])) return false;
  }

  if (query.attributes) {
    for (var key in query.attributes) {
      var value;

      if (element.attr) {
        value = element.attr(key);
        if (value != query.attributes[key]) return false;
      } else if (element.getAttribute) {
        value = element.getAttribute(key);
        if (value != query.attributes[key]) return false;
      }
    }
  }

  return true;
};
/**
 * Warning : still fail in some testcase
 */


JSPath.prototype.findFirst = function (root, onFound) {
  var queue = [{
    e: root,
    i: 0
  }];
  var current;

  while (queue.length > 0) {
    current = queue.shift();
    var isMathed = false;
    var currentElt = current.e;
    var currentI = current.i;

    if (this.match(currentElt, this.path[currentI])) {
      if (this.path[currentI].childCombinate) {
        var trackI = currentI;
        var trackElement = currentElt;
        var isTrackMatch = true;

        while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) {
          if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) {
            isTrackMatch = false;
          } else {
            trackElement = trackElement.parentNode;
            trackI--;
          }
        }

        if (isTrackMatch) isMathed = true;
      } else {
        isMathed = true;
      }
    }

    if (isMathed && currentI + 1 == this.path.length) {
      if (!onFound || onFound && onFound(currentElt)) return currentElt;
    }

    if (currentElt.childNodes) {
      var l = currentElt.childNodes.length;

      for (var i = 0; i < l; ++i) {
        if (currentElt.childNodes[i].tagName) queue.push({
          e: currentElt.childNodes[i],
          i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0)
        });
      }
    }
  }

  return undefined;
};

JSPath.prototype.findAll = function (root, onFound) {
  var res = [];
  var queue = [{
    e: root,
    i: 0
  }];
  var current;

  while (queue.length > 0) {
    current = queue.shift();
    var isMathed = false;
    var currentElt = current.e;
    var currentI = current.i;

    if (this.match(currentElt, this.path[currentI])) {
      if (this.path[currentI].childCombinate) {
        var trackI = currentI;
        var trackElement = currentElt;
        var isTrackMatch = true;

        while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) {
          if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) {
            isTrackMatch = false;
          } else {
            trackElement = trackElement.parentNode;
            trackI--;
          }
        }

        if (isTrackMatch) isMathed = true;
      } else {
        isMathed = true;
      }
    }

    if (isMathed && currentI + 1 == this.path.length) {
      if (!onFound || onFound && onFound(currentElt)) res.push(currentElt);
    }

    if (currentElt.childNodes) {
      var l = currentElt.childNodes.length;

      for (var i = 0; i < l; ++i) {
        if (currentElt.childNodes[i].tagName) queue.push({
          e: currentElt.childNodes[i],
          i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0)
        });
      }
    }
  }

  return res;
};

var identRegex = /[a-zA-Z0-9\-_]+/;
var stringRegex = /"(([^"\\]*|(\\.))*)"/;
var classRegex = new RegExp('\\.' + identRegex.source);
var idRegex = new RegExp('#' + identRegex.source);
var booleanRegex = /true|false/;
var valueRegex = new RegExp(stringRegex.source + '|' + booleanRegex.source);
var attributeRegex = new RegExp('\\[\\s*(' + identRegex.source + ')\\s*(=\\s*(' + valueRegex.source + '))\\]');
var queryRegex = new RegExp(['(', identRegex.source, '|', attributeRegex.source, '|', classRegex.source, '|', idRegex.source, ')+'].join(''));
JSPath.__tagRegex = new RegExp(queryRegex.source + '|\\>', 'g');
JSPath.__tagNameRegex = new RegExp('^' + identRegex.source, 'i');
JSPath.__classRegex = new RegExp(classRegex.source, 'g');
JSPath.__idRegex = new RegExp(idRegex.source, 'i');
JSPath.__attrRegex = new RegExp(attributeRegex.source, 'g');

JSPath.parseQuery = function (s) {
  var tag = {};
  s = s.replace(JSPath.__attrRegex, function (full, name, assign, jsonTextValue) {
    tag.attributes = tag.attributes || {};

    if (assign) {
      tag.attributes[name] = JSON.parse(jsonTextValue);
    } else tag.attributes[name] = true;

    return '';
  });
  var classList = s.match(this.__classRegex);
  var idList = s.match(this.__idRegex);
  var tagList = s.match(this.__tagNameRegex);

  if (idList && idList.length > 0) {
    tag.id = idList[0].substring(1);
  }

  if (tagList && tagList.length > 0) {
    tag.tagName = tagList[0].trim();
  }

  if (classList && classList.length > 0) {
    tag.classList = classList.map(function (s) {
      return s.substring(1);
    });
  }

  return tag;
};
/**
 * @param {String} text
 * @returns {JSPath}
 */


JSPath.compileJSPath = function (text) {
  var tagTexts = text.match(this.__tagRegex) || [''];
  var path = [];
  var childCombinate = false;

  for (var i = 0; i < tagTexts.length; ++i) {
    var s = tagTexts[i];

    if (s == '>') {
      childCombinate = true;
    } else {
      var tag = this.parseQuery(s);
      tag.childCombinate = childCombinate;
      path.push(tag);
      childCombinate = false;
    }
  }

  return new JSPath({
    path: path
  });
};

/* harmony default export */ const HTML5_JSPath = (JSPath);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/TemplateString.js
function TemplateString(props) {
  this.parts = props.parts;
}

TemplateString.prototype.toJSCode = function () {
  return this.parts.map(function (e) {
    if (e.type == TemplateString.TYPE_EXPRESSION) {
      return '(' + e.data + ')';
    } else {
      return JSON.stringify(e.data);
    }
  }).join('+');
};

TemplateString.__partRegex = /(\{\{(([^\}]|(\}[^\}]))*)\}\})|(([^\{]|(\{[^\{]))+)/g;
/**
 *  @param  {String} text 
 */

TemplateString.__matchExpression = function (text) {
  if (text[0] == '{' && text[1] == '{' && text[text.length - 1] == '}' && text[text.length - 2] == '}') {
    return [text, text.substr(2, text.length - 4).trim()];
  } else {
    return false;
  }
};

TemplateString.TYPE_STRING = 0;
TemplateString.TYPE_EXPRESSION = 1;

TemplateString.parse = function (text) {
  text = text + '';
  var matchedParts = text.match(this.__partRegex);

  if (matchedParts) {
    var parts = matchedParts.map(function (e) {
      var matchedExp = this.__matchExpression(e);

      if (matchedExp) {
        return {
          type: this.TYPE_EXPRESSION,
          data: matchedExp[1]
        };
      } else {
        return {
          type: this.TYPE_STRING,
          data: e
        };
      }
    }.bind(this));
    return new TemplateString({
      parts: parts
    });
  } else {
    return undefined;
  }
};

/* harmony default export */ const JSMaker_TemplateString = (TemplateString);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLConstant.js
var XMLConstant = {
  TYPE_ELEMENT: 1,
  TYPE_TEXT: 3,
  TYPE_COMMENT: 8,
  TYPE_DECLARATION: 16
};
/* harmony default export */ const XML_XMLConstant = (XMLConstant);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLDeclarationNode.js


function XMLDeclaretionNode() {
  this.nodeType = XML_XMLConstant.TYPE_DECLARATION;
  this.parentNode;
  /**
   * @type {String}
   */

  this.tagName = '';
  /**
  * @type {XMLElement}
  */

  this.parentNode;
  this.attributes = {};
}
/**
 * @param {String} name attribute name
 */


XMLDeclaretionNode.prototype.getAttribute = function (name) {
  return this.attributes[name];
};
/**
 * @param {String} name attribute name
 * @param {String} value 
 */


XMLDeclaretionNode.prototype.setAttribute = function (name, value) {
  this.attributes[name] = value;
};
/**
 * @param {String} name attribute name
 */


XMLDeclaretionNode.prototype.removeAttribute = function (name) {
  delete this.attributes[name];
};

XMLDeclaretionNode.prototype.remove = function () {
  if (this.parentNode) {
    this.parentNode.removeChild(this);
  }
};

XMLDeclaretionNode.prototype.toObject = function () {
  return {
    nodeType: this.nodeType,
    tagName: this.tagName,
    attributes: Object.assign({}, this.attributes)
  };
};

/* harmony default export */ const XMLDeclarationNode = (XMLDeclaretionNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLClassList.js
/**
 * 
 * @param {XMLElement} xmlNode 
 */
function XMLClassList(xmlNode) {
  this.xmlNode = xmlNode;
}
/**
 * @param {String} name
 * @returns {Boolean}
 */


XMLClassList.prototype.contains = function (name) {
  var className = this.xmlNode.getAttribute('class');

  if (className) {
    var classes = className.trim().split(/\s+/);

    for (var i = 0; i < classes.length; ++i) {
      if (classes[i] == name) return true;
    }

    return false;
  } else return false;
};
/**
 * @param {Number} index
 * @returns {String}
 */


XMLClassList.prototype.item = function (index) {
  var className = this.xmlNode.getAttribute('class');

  if (className) {
    var classes = className.trim().split(/\s+/);
    return classes[index];
  } else return undefined;
};
/**
 * @param {Array<String>} arguments
 */


XMLClassList.prototype.remove = function () {
  var dict = Array.prototype.reduce.call(arguments, function (ac, name) {
    ac[name] = true;
    return ac;
  }, {});
  var className = this.xmlNode.getAttribute('class');

  if (className) {
    var classes = className.trim().split(/\s+/);
    var newClasses = classes.filter(function (name) {
      dict[name];
    });
    this.xmlNode.setAttribute(newClasses.join(' '));
  }
};
/**
 * @param {Array<String>} arguments
 */


XMLClassList.prototype.add = function () {
  var className = this.xmlNode.getAttribute('class') || '';
  var classes = className.trim().split(/\s+/);
  var dict = classes.reduce(function (ac, name) {
    ac[name] = true;
    return ac;
  }, {});

  for (var i = 0; i < arguments.length; ++i) {
    var newClass = arguments[i].trim();
    if (newClass.length == 0) return;

    if (!dict[newClass]) {
      classes.push(newClass);
      dict[newClass] = true;
    }
  }

  this.xmlNode.setAttribute('class', classes.join(' '));
};

/* harmony default export */ const XML_XMLClassList = (XMLClassList);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLElement.js



function XMLElement() {
  this.nodeType = XML_XMLConstant.TYPE_ELEMENT;
  /**
   * @type {String}
   */

  this.tagName = '';
  /**
   * @type {XMLElement}
   */

  this.parentNode;
  this.attributes = {};
  /**
   * @type {Array} Array of  XMLElement or XMLText
   */

  this.childNodes = [];
  Object.defineProperty(this, 'classList', {
    value: new XML_XMLClassList(this),
    writable: false
  });
}
/**
 * @param {String} name attribute name
 */


XMLElement.prototype.getAttribute = function (name) {
  return this.attributes[name];
};
/**
 * @param {String} name attribute name
 * @param {String} value 
 */


XMLElement.prototype.setAttribute = function (name, value) {
  this.attributes[name] = value;
};
/**
 * @param {String} name attribute name
 */


XMLElement.prototype.removeAttribute = function (name) {
  delete this.attributes[name];
};

XMLElement.prototype.appendChild = function (node) {
  node.remove();
  this.childNodes.push(node);
  node.parentNode = this;
  return node;
};
/**
 * @param {XMLElement} child
 * @returns {XMLElement} removed node
 */


XMLElement.prototype.removeChild = function (child) {
  var result;

  if (this == child.parentNode) {
    var j = 0;

    for (var i = 0; i < this.childNodes.length; ++i) {
      if (child != this.childNodes[i]) {
        this.childNodes[j] = this.childNodes[i];
        ++j;
      } else {
        child.parentNode = undefined;
        result = child;
      }
    }

    while (j > this.childNodes.length) {
      this.childNodes.pop();
    }
  }

  return result;
};
/**
 * @param {XMLElement|XMLText|XMLDeclaretionNode} node
 */


XMLElement.prototype.inserBefore = function (node, child) {
  if (node == child) return;
  var childIndex = -1;

  for (var i = 0; i < this.childNodes.length; ++i) {
    if (this.childNodes[i] == child) {
      childIndex = i;
      break;
    }
  }

  if (childIndex < 0) return;
  node.remove();
  node.parentNode = this;
  this.childNodes.push(null);
  var cIndex = this.childNodes.length - 2;

  while (cIndex >= 0) {
    if (this.childNodes[cIndex] == child) {
      this.childNodes[cIndex + 1] = node;
    } else this.childNodes[cIndex + 1] = this.childNodes[cIndex];
  }
};

XMLElement.prototype.remove = function () {
  if (this.parentNode) {
    this.parentNode.removeChild(this);
  }
};

XMLElement.prototype.toObject = function () {
  return {
    nodeType: this.nodeType,
    tagName: this.tagName,
    attributes: Object.assign({}, this.attributes),
    childNodes: this.childNodes.map(function (child) {
      return child.toObject();
    })
  };
};

/* harmony default export */ const XML_XMLElement = (XMLElement);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLTextNode.js


function XMLTextNode(data) {
  this.nodeType = XML_XMLConstant.TYPE_TEXT;
  /**
   * @type {XMLNode}
   */

  this.parentNode;
  /**
   * @type {String}
   */

  this.data = data || '';
}

XMLTextNode.prototype.remove = function () {
  if (this.parentNode) {
    this.parentNode.removeChild(this);
  }
};

XMLTextNode.prototype.toObject = function () {
  return {
    nodeType: this.nodeType,
    data: this.data
  };
};

/* harmony default export */ const XML_XMLTextNode = (XMLTextNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLCommentNode.js


function XMLCommentNode(data) {
  this.nodeType = XML_XMLConstant.TYPE_COMMENT;
  /**
   * @type {XMLNode}
   */

  this.parentNode;
  /**
   * @type {String}
   */

  this.data = data || '';
}

XMLCommentNode.prototype.remove = function () {
  if (this.parentNode) {
    this.parentNode.removeChild(this);
  }
};

XMLCommentNode.prototype.toObject = function () {
  return {
    nodeType: this.nodeType,
    data: this.data
  };
};

/* harmony default export */ const XML_XMLCommentNode = (XMLCommentNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XML.js





/**
 * 
 * @param {RegExp} regex 
 */

function getRegexBody(regex) {
  return regex.toString().match(/^\/(.+)\/([gimuy]*)$/)[1];
}

var BEGIN_TAG = 1;
var END_TAG = 2;
var CDATA = 3;
var DECLARATION = 4;
var COMMENT = 5;
var TEXT = 6;
var identRgx = /[^\s\"\r\n\'\!\/=\>\<\]\[\?\+\.]+/;
var spaceRgx = /[\s\r\n]+/;
var stringRgx = /\"(([^\"\\]*|(\\.))*)\"/;
var textRgx = /[^\<\-]+/;
var doctypeOpenRgx = /\<\!DOCTYPE/;
var commentOpenRgx = /\<!\-\-/;
var commentCloseRgx = /\-\-\>/;
var cdataOpenRgx = /\<\!\[CDATA\[/;
var cdataCloseRgx = /\]\]\>/;
var openRgx = /\</;
var openEndTagRgx = /\<\//;
var closeRgx = /\>/;
var shortCloseRgx = /\/\>/;
var declarationOpenRgx = /\<\?/;
var declarationCloseRgx = /\?\>/;
var assignOpRgx = /=/;
var tokenRgxBody = '(' + [spaceRgx, doctypeOpenRgx, declarationOpenRgx, cdataOpenRgx, commentOpenRgx, openEndTagRgx, openRgx, assignOpRgx, stringRgx, commentCloseRgx, identRgx, declarationCloseRgx, shortCloseRgx, closeRgx, cdataCloseRgx, textRgx].map(function (e) {
  return getRegexBody(e);
}).join(')|(') + ')';
var tokenType = {
  space: spaceRgx,
  doctypeOpen: doctypeOpenRgx,
  declarationOpen: declarationOpenRgx,
  cdataOpen: cdataOpenRgx,
  commentOpen: commentOpenRgx,
  openEndTag: openEndTagRgx,
  open: openRgx,
  ident: identRgx,
  assignOp: assignOpRgx,
  string: stringRgx,
  commentClose: commentCloseRgx,
  declarationClose: declarationCloseRgx,
  shortClose: shortCloseRgx,
  close: closeRgx,
  cdataClose: cdataCloseRgx,
  text: textRgx
};
var tokenRgx = new RegExp(tokenRgxBody);
/**
 * 
 * @typedef {Object} Token
 * @property {String} text
 * @property {*} matched
 */

/**
 * 
 * @param {String} text 
 * @returns {Array<Token>}
 */

function xmlTokenize(text) {
  var texts = text.match(new RegExp(tokenRgxBody, 'g'));
  return text.match(new RegExp(tokenRgxBody, 'g')).map(function (tokenText, i) {
    var result = {
      text: tokenText,
      matched: {}
    };

    for (var tType in tokenType) {
      var matched = tokenText.match(tokenType[tType]);

      if (matched) {
        if (matched[0] == tokenText) result.matched[tType] = matched;
      }
    }

    return result;
  });
}
/**
 * @typedef {Object} XMLPaseInfo
 * @property {Array<Token>} tokens
 * @property {Number} type
 * @property {Number} start
 * @property {Number} end
 * @property {Error} error
 * @property {Boolean} closed
 * 
 * 
 * 
 * @typedef {Object} XMLParseNode 
 * @property {XMLPaseInfo} __xml__
 * @property {String} tagName
 * @property {*} attributes
 * @property {String} text
 */

/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchAssign(tokens, i) {
  var result = {
    __xml__: {
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['ident']) {
      result.key = cToken.text;
      ++i;

      if (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['space']) {
          ++i;
        }

        if (i < tokens.length) {
          cToken = tokens[i];

          if (cToken.matched['assignOp']) {
            ++i;

            if (i < tokens.length) {
              cToken = tokens[i];

              if (cToken.matched['space']) {
                ++i;
              }

              if (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['string']) {
                  result.value = cToken.matched.string[1];
                  ++i;
                } else {
                  result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected string');
                }
              } else {
                result.__xml__.error = new Error('End of data found, expected ident');
              }
            } else {
              result.__xml__.error = new Error('End of data found, expected ident');
            }
          } else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected =');
          }
        } else {
          result.__xml__.error = new Error('End of data found, expected =');
        }
      } else {
        result.__xml__.error = new Error('End of data found, expected =');
      }
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected ident');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected ident');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchBeginTag(tokens, i) {
  var result = {
    __xml__: {
      type: BEGIN_TAG,
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['open']) {
      ++i;

      if (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['ident']) {
          result.tagName = cToken.text;
          ++i;

          if (i < tokens.length) {
            var finished = false; //when find the close symbol

            while (i < tokens.length) {
              cToken = tokens[i];

              if (cToken.matched['space']) {
                ++i;
              } //skip space between attributes


              if (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['shortClose']) {
                  result.__xml__.closed = true;
                  ++i;
                  finished = true;
                  break;
                } else if (cToken.matched['close']) {
                  result.__xml__.closed = false;
                  ++i;
                  finished = true;
                  break;
                } else if (tokens[i - 1].matched['space']) {
                  var assign = matchAssign(tokens, i);

                  if (!assign.__xml__.error) {
                    result.attributes = result.attributes || {};
                    result.attributes[assign.key] = assign.value;
                    i = assign.__xml__.end;
                  } else if (cToken.matched['ident']) {
                    result.attributes = result.attributes || {};
                    result.attributes[cToken.text] = true; // a flag

                    ++i;
                  } else {
                    //TODO: we can ignore some error here, the same with order Match* function
                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                    break;
                  }
                } else {
                  //TODO: we can ignore some error here
                  result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                  break;
                }
              } else {
                result.__xml__.error = new Error('End of data found, expected /> or >');
                break;
              }
            }

            if (!finished && !result.__xml__.error) {
              result.__xml__.error = new Error('End of data found, expected /> or >');
            }
          } else {
            result.__xml__.error = new Error('End of data found, expected /> or >');
          }
        } else {
          result.__xml__.error = new Error('Expected indent');
        }
      } else {
        result.__xml__.error = new Error('End of data found, expected indent');
      }

      result.__xml__.end = i;
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected <');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchEndTag(tokens, i) {
  var result = {
    __xml__: {
      type: END_TAG,
      closed: true,
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['openEndTag']) {
      ++i;

      if (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['ident']) {
          result.tagName = cToken.text;
          ++i;

          if (i < tokens.length) {
            var finished = false; //when find the close symbol

            while (i < tokens.length) {
              cToken = tokens[i];

              if (cToken.matched['space']) {
                ++i;
              } //skip space between attributes


              if (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['close']) {
                  ++i;
                  finished = true;
                  break;
                } else if (tokens[i - 1].matched['space']) {
                  var assign = matchAssign(tokens, i);

                  if (!assign.__xml__.error) {
                    result.attributes = result.attributes || {};
                    result.attributes[assign.key] = assign.value;
                    i = assign.__xml__.end;
                  } else if (cToken.matched['ident']) {
                    result.attributes = result.attributes || {};
                    result.attributes[cToken.text] = true; // a flag

                    ++i;
                  } else {
                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                  }
                } else {
                  result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                }
              } else {
                result.__xml__.error = new Error('End of data found, expected /> or >');
              }
            }

            if (!finished && !result.__xml__.error) {
              result.__xml__.error = new Error('End of data found, expected /> or >');
            }
          } else {
            result.__xml__.error = new Error('End of data found, expected /> or >');
          }
        } else {
          result.__xml__.error = new Error('Expected indent');
        }
      } else {
        result.__xml__.error = new Error('End of data found, expected indent');
      }

      result.__xml__.end = i;
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected <');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchDeclaration(tokens, i) {
  var result = {
    __xml__: {
      type: DECLARATION,
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['declarationOpen']) {
      ++i;

      if (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['ident']) {
          result.tagName = cToken.text;
          ++i;

          if (i < tokens.length) {
            var finished = false; //when find the close symbol

            while (i < tokens.length) {
              cToken = tokens[i];

              if (cToken.matched['space']) {
                ++i;
              } //skip space between attributes


              if (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['declarationClose']) {
                  result.__xml__.closed = false;
                  ++i;
                  finished = true;
                  break;
                } else if (tokens[i - 1].matched['space']) {
                  var assign = matchAssign(tokens, i);

                  if (!assign.__xml__.error) {
                    result.attributes = result.attributes || {};
                    result.attributes[assign.key] = assign.value;
                    i = assign.__xml__.end;
                  } else if (cToken.matched['ident']) {
                    result.attributes = result.attributes || {};
                    result.attributes[cToken.text] = true; // a flag

                    ++i;
                  } else {
                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                  }
                } else {
                  result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                }
              } else {
                result.__xml__.error = new Error('End of data found, expected /> or >');
              }
            }

            if (!finished && !result.__xml__.error) {
              result.__xml__.error = new Error('End of data found, expected /> or >');
            }
          } else {
            result.__xml__.error = new Error('End of data found, expected /> or >');
          }
        } else {
          result.__xml__.error = new Error('Expected indent');
        }
      } else {
        result.__xml__.error = new Error('End of data found, expected indent');
      }

      result.__xml__.end = i;
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected <');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchCData(tokens, i) {
  var result = {
    __xml__: {
      type: CDATA,
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['cdataOpen']) {
      ++i;
      result.text = '';
      var finished = false;

      while (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['cdataClose']) {
          finished = true;
          ++i;
          break;
        } else {
          result.text += cToken.text;
          ++i;
        }
      }

      if (!finished) {
        result.__xml__.error = new Error('End of data found, expected ]]>');
      }
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <![CDATA[');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected <![CDATA[');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */


function matchComment(tokens, i) {
  var result = {
    __xml__: {
      type: COMMENT,
      start: i
    }
  };
  var cToken;

  if (i < tokens.length) {
    cToken = tokens[i];

    if (cToken.matched['commentOpen']) {
      ++i;
      result.text = '';
      var finished = false;

      while (i < tokens.length) {
        cToken = tokens[i];

        if (cToken.matched['commentClose']) {
          finished = true;
          ++i;
          break;
        } else {
          result.text += cToken.text;
          ++i;
        }
      }

      if (!finished) {
        result.__xml__.error = new Error('End of data found, expected -->');
      }
    } else {
      result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <!--');
    }
  } else {
    result.__xml__.error = new Error('End of data found, expected <!--');
  }

  result.__xml__.end = i;
  return result;
}
/**
 * 
 * @param {Token} tokens 
 */


function parseXMLTab(tokens) {
  var tabs = [];
  var i = 0;

  while (i < tokens.length) {
    var comment = matchComment(tokens, i);

    if (!comment.__xml__.error) {
      tabs.push(comment);
      i = comment.__xml__.end;
    } else {
      var declaration = matchDeclaration(tokens, i);

      if (!declaration.__xml__.error) {
        tabs.push(declaration);
        i = declaration.__xml__.end;
      } else {
        var begin = matchBeginTag(tokens, i);

        if (!begin.__xml__.error) {
          tabs.push(begin);
          i = begin.__xml__.end;
        } else {
          var end = matchEndTag(tokens, i);

          if (!end.__xml__.error) {
            tabs.push(end);
            i = end.__xml__.end;
          } else {
            var cdata = matchCData(tokens, i);

            if (!cdata.__xml__.error) {
              tabs.push(cdata);
              i = cdata.__xml__.end;
            } else {
              ++i; //skip
            }
          }
        }
      }
    }
  }

  return tabs;
}
/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Array<XMLParseNode>} tabs 
 * @returns {Array<XMLParseNode>}
 */


function parseXMLText(tokens, tabs) {
  var texts = [];
  var ofs = 0;
  var text;
  var tab;

  for (var i = 0; i < tabs.length; ++i) {
    tab = tabs[i];

    if (tab.__xml__.start > ofs) {
      text = tokens.slice(ofs, tab.__xml__.start).map(function (token) {
        return token.text;
      }).join('').trim();
      if (text.length > 0) texts.push({
        __xml__: {
          type: TEXT,
          tokens: tokens,
          start: ofs,
          end: tab.__xml__.start
        },
        text: text
      });
    }

    ofs = tab.__xml__.end;
  }

  if (ofs < tokens.length) {
    text = tokens.slice(ofs).map(function (token) {
      return token.text;
    }).join('').trim();
    if (text.length > 0) texts.push({
      __xml__: {
        type: TEXT,
        tokens: tokens,
        start: ofs,
        end: tab.__xml__.start
      },
      text: text
    });
  }

  return texts;
}
/**
 * 
 * @param {Array<XMLParseNode>} tabs 
 * @param {Array<XMLParseNode>} texts 
 * @return {Array<XMLParseNode>}  
 */


function mergeNodes(tabs, texts) {
  var nodes = [];
  var choose;
  var iTabs = 0,
      iTexts = 0;
  var diTabs, diTexts;
  var minStart;

  do {
    choose = undefined;
    diTabs = 0, diTexts = 0;
    minStart = 100000000;

    if (iTabs < tabs.length) {
      choose = tabs[iTabs];
      minStart = choose.__xml__.start;
      diTabs = 1;
    }

    if (iTexts < texts.length && texts[iTexts].__xml__.start < minStart) {
      choose = texts[iTexts];
      minStart = choose.__xml__.start;
      diTabs = 0;
      diTexts = 1;
    }

    if (choose) {
      iTexts += diTexts;
      iTabs += diTabs;
      nodes.push(choose);
    }
  } while (choose);

  return nodes;
}
/**
 * 
 * @param {String} text 
 * @return {Array<XMLParseNode>} 
 */


function parseXMLTextToXMLParseNode(text) {
  text = text.trim();
  var tokens = xmlTokenize(text.trim());
  var tabs = parseXMLTab(tokens);
  var texts = parseXMLText(tokens, tabs);
  return mergeNodes(tabs, texts);
}
/**
 * 
 * @param {Array<XMLParseNode>} nodes
 * @returns {Array}
 */


function paresNodesToXMLs(nodes) {
  var node;
  var parentXMLElement = new XML_XMLElement();
  parentXMLElement.tagName = "FAKE_DOCUMENT";

  var assignAttributes = function assignAttributes(node, attributes) {
    Object.keys(attributes).forEach(function (key) {
      node.setAttribute(key, attributes[key]);
    });
  };

  var newXMLNode;

  for (var i = 0; i < nodes.length; ++i) {
    node = nodes[i];
    newXMLNode = undefined;

    switch (node.__xml__.type) {
      case DECLARATION:
        newXMLNode = new XMLDeclarationNode();
        newXMLNode.tagName = node.tagName;
        if (node.attributes) assignAttributes(newXMLNode, node.attributes);
        parentXMLElement.appendChild(newXMLNode);
        break;

      case BEGIN_TAG:
        newXMLNode = new XML_XMLElement();
        newXMLNode.tagName = node.tagName;
        if (node.attributes) assignAttributes(newXMLNode, node.attributes);
        parentXMLElement.appendChild(newXMLNode);
        if (!node.__xml__.closed) parentXMLElement = newXMLNode;
        break;

      case END_TAG:
        if (parentXMLElement && node.tagName == parentXMLElement.tagName) {
          parentXMLElement = parentXMLElement.parentNode;
        } else if (parentXMLElement && (parentXMLElement.tagName == 'img' || parentXMLElement.tagName == 'input')) {
          // image can be not close
          while (parentXMLElement.tagName == 'img' || parentXMLElement.tagName == 'input') {
            parentXMLElement = parentXMLElement.parentNode;
          }

          parentXMLElement = parentXMLElement.parentNode;
        } else {
          throw new Error("Unknown close of tagName " + node.tagName + ', but ' + (parentXMLElement ? parentXMLElement.tagName : "EOF") + ' expected');
        }

        break;

      case TEXT:
        newXMLNode = new XML_XMLTextNode(node.text);
        parentXMLElement.appendChild(newXMLNode);
        break;

      case COMMENT:
        newXMLNode = new XML_XMLCommentNode(node.text);
        parentXMLElement.appendChild(newXMLNode);
        break;
    }
  }

  return parentXMLElement.childNodes.slice().map(function (e) {
    e.remove();
    return e;
  });
}
/**
 * 
 * @param {XMLElement} node 
 */


function makeOpenXMLElementTab(node) {
  var res = '<' + node.tagName;
  var attributesText = Object.keys(node.attributes).map(function (key) {
    var value = node.attributes[key];

    if (value === null) {
      return key;
    } else {
      return key + '=' + '"' + value + '"';
    }
  }).join(' ');

  if (attributesText.length > 0) {
    res += ' ' + attributesText;
  }

  res += '>';
  return res;
}
/**
 * 
 * @param {XMLDeclaretionNode} node 
 */


function makeXMLDeclaretionTab(node) {
  var res = '<?' + node.tagName;
  var attributesText = Object.keys(node.attributes).map(function (key) {
    var value = node.attributes[key];

    if (value === null) {
      return key;
    } else {
      return key + '=' + '"' + value + '"';
    }
  }).join(' ');

  if (attributesText.length > 0) {
    res += ' ' + attributesText;
  }

  res += '?>';
  return res;
}
/**
 * 
 * @param {XMLDeclaretionNode} node 
 */


function makeXMLCommentTab(node) {
  var res = '<!--' + node.data + '-->';
  return res;
}

var XML = {};
/**
 * @param {String} code
 * @returns {Array<XMLElement>}
 */

XML.parseLikeHTML = function (code) {
  var nodes = parseXMLTextToXMLParseNode(code); // console.log('nodes', nodes);

  var xmls = paresNodesToXMLs(nodes);
  return xmls;
};
/**
 * @param {String} code
 * @returns {XMLElement}
 */


XML.parse = function (code) {
  var xmls = this.parseLikeHTML(code);
  if (xmls.length == 0) return undefined;
  var obj = xmls[xmls.length - 1].toObject();
  return obj;
};

XML.DFNodeVisit = function (node, handlers, accumulator) {
  if (!node.childNodes || node.childNodes.length == 0) {
    if (handlers.leaf) handlers.leaf(accumulator, node);
  } else {
    if (handlers.open) handlers.open(accumulator, node);

    for (var i = 0; i < node.childNodes.length; ++i) {
      this.DFNodeVisit(node.childNodes[i], handlers, accumulator);
    }

    if (handlers.close) handlers.close(accumulator, node);
    return accumulator;
  }
};
/**
 * @typedef {Object} XMLBeautifyOption
 * @property {String} indent
 * @property {Number} initDepth 
 */

/**
 * @param {Array<XMLElement>} o 
 * @param {XMLBeautifyOption} beautifyOption 
 * 
 * 
 */


XML.stringify = function (o, beautifyOption) {
  var texts = [];
  var indent = '';
  var lineBreak = '';
  var depth = 0;

  if (beautifyOption) {
    lineBreak = '\n';
    indent = typeof beautifyOption.indent == 'string' ? beautifyOption.indent : '    ';
    depth = beautifyOption.initDepth || 0;
  }

  if (!(o instanceof Array)) {
    o = [o];
  }

  var visitor = {
    open: function open(ac, node) {
      var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];
      var openTabText = makeOpenXMLElementTab(node);
      ac.texts.push(currentLineIndent + openTabText);
      ac.lineIndentStack.push(currentLineIndent + ac.indent);
    },
    close: function close(ac, node) {
      ac.lineIndentStack.pop();
      var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];
      var endTab = '</' + node.tagName + '>';

      if (node.childNodes.length == 1 && node.childNodes[0].nodeType == XML_XMLConstant.TYPE_TEXT) {
        ac.texts[ac.texts.length - 1] += endTab;
      } else {
        ac.texts.push(currentLineIndent + endTab);
      }
    },
    leaf: function leaf(ac, node) {
      var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];
      var tab;

      if (node.nodeType == XML_XMLConstant.TYPE_TEXT) {
        if (node.parentNode && node.parentNode.childNodes.length == 1) {
          ac.texts[ac.texts.length - 1] += node.data;
        } else {
          ac.texts.push(currentLineIndent + node.data);
        }
      } else if (node.nodeType == XML_XMLConstant.TYPE_ELEMENT) {
        var openTabText = makeOpenXMLElementTab(node);
        var endTab = '</' + node.tagName + '>';
        ac.texts.push(currentLineIndent + openTabText + endTab);
      } else if (node.nodeType == XML_XMLConstant.TYPE_DECLARATION) {
        tab = makeXMLDeclaretionTab(node);
        ac.texts.push(currentLineIndent + tab);
      } else if (node.nodeType == XML_XMLConstant.TYPE_COMMENT) {
        tab = makeXMLCommentTab(node);
        ac.texts.push(currentLineIndent + tab);
      }
    }
  };

  for (var i = 0; i < o.length; ++i) {
    this.DFNodeVisit(o[i], visitor, {
      depth: 0,
      texts: texts,
      lineIndentStack: [''],
      indent: indent
    });
  }

  return texts.join(lineBreak);
};

/* harmony default export */ const XML_XML = (XML);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/TemplateXML.js




function TemplateXML(props) {
  this.xml = props.xml;
}

TemplateXML.prototype._xmlNodeToJSCode = function (node) {
  var body = [];

  if (node.nodeType == XML_XMLConstant.TYPE_ELEMENT) {
    body.push('tag:' + JSON.stringify(node.tagName));
    var attributeKeys = Object.keys(node.attributes).filter(function (x) {
      return x != 'class' && x != 'style' && !x.startsWith('az-');
    });

    if (attributeKeys && attributeKeys.length > 0) {
      body.push('attr: {' + attributeKeys.map(function (key) {
        return JSON.stringify(key) + ': ' + JSMaker_TemplateString.parse(node.attributes[key]).toJSCode();
      }).join(', ') + '}');
    }

    if (node.attributes['az-props']) {
      body.push('props: ' + JSMaker_TemplateString.parse(node.attributes['az-props']).toJSCode());
    }

    if (node.attributes['az-data']) {
      body.push('data: ' + JSMaker_TemplateString.parse(node.attributes['az-data']).toJSCode());
    }

    if (node.attributes.style) {
      var styleSheet = node.attributes.style.split(';').map(function (s) {
        var t = s.split(':').map(function (text) {
          return text.trim();
        });

        if (t.length == 2) {
          return JSON.stringify(t[0]) + ': ' + JSON.stringify(t[1]);
        } else return false;
      }).filter(function (e) {
        return !!e;
      });

      if (styleSheet.length > 0) {
        body.push('style:{' + styleSheet.join(',') + '}');
      }
    }

    if (node.attributes["class"]) {
      var classList = node.attributes["class"].trim().split(/\s+/);
      if (classList.length > 0) body.push('class:' + JSON.stringify(classList));
    }

    if (node.childNodes && node.childNodes.length > 0) {
      var childList = '[' + node.childNodes.filter(function (e) {
        return e.nodeType == XML_XMLConstant.TYPE_ELEMENT || e.nodeType == XML_XMLConstant.TYPE_TEXT;
      }).map(function (e) {
        return this._xmlNodeToJSCode(e);
      }.bind(this)).filter(function (e) {
        return !!e;
      }).join(', ') + ']';
      if (childList && childList.length > 0) body.push('child: ' + childList);
    }
  } else if (node.nodeType == XML_XMLConstant.TYPE_TEXT) {
    body.push('text: ' + JSMaker_TemplateString.parse(node.data).toJSCode());
  } else return undefined;

  var res = '{' + body.join(', ') + '}';
  return res;
};

TemplateXML.prototype.toJSCode = function () {
  var res = this._xmlNodeToJSCode(this.xml);

  return res;
};
/**
 * 
 * @param  {...any} args 
 * @returns {Function}
 */


TemplateXML.compileToFunction = function () {
  var innerCode = 'return ' + this.parse(arguments[arguments.length - 1]).toJSCode() + ';';
  var fParam = Array.prototype.slice.call(arguments, 0, arguments.length - 1);
  fParam.push(innerCode);
  return Function.apply(null, fParam);
};

TemplateXML.parse = function (text) {
  var xml = XML_XML.parse(text);

  if (xml) {
    return new TemplateXML({
      xml: xml
    });
  } else return undefined;
};

/* harmony default export */ const JSMaker_TemplateXML = (TemplateXML);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = {};
/**
 * @param {Object} object
 * @param {String} key
 * @param {Function} method
 */

OOP.overrideMethod = function (object, key, method) {
  if (object[key] === undefined) object[key] = method;else {
    var _superMethod = object[key];

    object[key] = function (_superMethod, method) {
      return function () {
        var _super = this["super"];
        this["super"] = _superMethod;
        var result = method.apply(this, arguments);
        this["super"] = _super;
        return result;
      };
    }(_superMethod, method);
  }
};

OOP["extends"] = function (object, prototype) {
  // do not use setter, getter
  for (var key in prototype) {
    if (key !== 'constructor' && key !== '__proto__') {
      if (typeof prototype[key] == 'function') {
        OOP.overrideMethod(object, key, prototype[key]);
      } else if (prototype[key] !== undefined && prototype[key] !== null) {
        object[key] = prototype[key]; //just copy
      }
    }
  }
};

OOP.inherit = function (child, parent) {
  // do not use setter, getter
  Object.keys(parent).forEach(function (key) {
    if (key !== 'constructor' && typeof parent[key] == 'function') {
      var superMethod = parent[key];
      var currentMethod = child[key];
      if (!currentMethod) child[key] = superMethod;else {
        child[key] = function () {
          var _super = this["super"];
          this["super"] = superMethod;
          var result = currentMethod.apply(this, arguments);
          this["super"] = _super;
          return result;
        };
      }
    }
  });
};

OOP.drillProperty = function (topObject, botObject, keyTop, keyBot) {
  if (typeof keyTop == 'string') {
    keyBot = keyBot || keyTop;
    Object.defineProperty(topObject, keyTop, {
      set: function set(value) {
        botObject[keyBot] = value;
      },
      get: function get() {
        return botObject[keyBot];
      }
    });
  } else {
    if (keyTop instanceof Array) {
      for (var i = 0; i < keyTop.length; ++i) {
        OOP.drillProperty(topObject, botObject, keyTop[i], keyTop[i]);
      }
    } else {
      for (var key in keyTop) {
        OOP.drillProperty(topObject, botObject, key, keyTop[key]);
      }
    }
  }
};

OOP.bindFunctions = function (_this, handlers) {
  var res = {};

  for (var key in handlers) {
    res[key] = handlers[key].bind(_this);
  }

  return res;
};

OOP.inheritCreator = function (parent, child) {
  var i;

  if (child.property) {
    if (parent.property) {
      for (i in parent.property) {
        if (!child.property[i]) child.property[i] = parent.property[i];
      }
    }
  }

  for (i in parent.prototype) {
    if (!child.prototype[i]) {
      child.prototype[i] = parent.prototype[i];
    } else {
      child.prototype[i] = function (superFunction, childFunction) {
        return function () {
          var _super = this["super"];
          this["super"] = superFunction;
          var result = childFunction.apply(this, arguments);
          this["super"] = _super;
          return result;
        };
      }(parent.prototype[i], child.prototype[i]);
    }
  }
};
/***
 *
 * @param {Function} constructor
 */


OOP.mixClass = function (constructor) {
  var descriptors = {};

  for (var i = 1; i < arguments.length; ++i) {
    Object.assign(descriptors, Object.getOwnPropertyDescriptors(arguments[i].prototype));
  }

  Object.defineProperties(constructor.prototype, descriptors);
  constructor.prototype.constructor = constructor;
};

/* harmony default export */ const HTML5_OOP = (OOP);
;// CONCATENATED MODULE: ./node_modules/absol/src/String/getFunctionName.js
/**
 * 
 * @param {Function} func 
 */
function getFunctionName(func) {
  var ret = func.toString();
  ret = ret.substr('function '.length);
  ret = ret.substr(0, ret.indexOf('('));
  return ret;
}
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/AElement.js



/***
 * @augments Node
 * @augments ChildNode
 * @augments ParentNode
 * @augments Element
 * @augments HTMLElement
 * @augments EventEmitter
 * @augments ElementCSSInlineStyle
 * @constructor
 */

function AElement() {
  HTML5_EventEmitter.call(this);
  this._azar_extendAttributes = this._azar_extendAttributes || {};
  this._azar_extendTags = {};
  this.eventHandler = {};
}

HTML5_OOP.mixClass(AElement, HTML5_EventEmitter);

AElement.prototype.init = function (props) {
  Object.assign(this, props || {});
};

AElement.prototype.eventHandler = {};
/***
 * run super-class method
 */

AElement.prototype["super"] = function () {
  /* nope */
};
/**
 * @typedef {Object} AttributeDefiner
 * @property {Function} set
 * @property {Function} get
 * @property {Function} remove
 *
 * @param {String} key
 * @param {AttributeDefiner} def
 */


AElement.prototype.defineAttribute = function (key, def) {
  this._azar_extendAttributes[key] = def;
};

AElement.prototype.defineAttributes = function (defs) {
  for (var key in defs) {
    this.defineAttribute(key, defs[key]);
  }
};

AElement.prototype.attr = function () {
  if (arguments.length === 1) {
    if (typeof arguments[0] == 'string') {
      if (this._azar_extendAttributes[arguments[0]]) {
        return this._azar_extendAttributes[arguments[0]].get.call(this);
      } else return this.getAttribute(arguments[0]);
    } else {
      for (var key in arguments[0]) {
        this.attr(key, arguments[0][key]);
      }
    }
  } else {
    if (arguments.length == 2) {
      if (arguments[1] === null || arguments[1] === undefined) {
        if (this._azar_extendAttributes[arguments[0]]) {
          this._azar_extendAttributes[arguments[0]].remove.call(this, arguments[1]);
        } else this.removeAttribute(arguments[0]);
      } else {
        if (this._azar_extendAttributes[arguments[0]]) {
          this._azar_extendAttributes[arguments[0]].set.call(this, arguments[1]);
        } else {
          this.setAttribute(arguments[0], arguments[1]);
        }
      }
    }
  }

  return this;
};
/***
 * add style
 * @param {CSSStyleDeclaration|string|{}} arg0
 * @param {string} arg1
 * @returns {AElement}
 */

/**
 * add style
 * @param {CSSStyleDeclaration|string|{}} arg0
 * @param {string|[]=} arg1
 * @returns {AElement}
 */


AElement.prototype.addStyle = function (arg0, arg1) {
  if (typeof arg0 == 'string') {
    if (arg0.indexOf('-') >= 0) {
      if (arg1 && arg1.forEach) {
        this.style.setProperty.apply(this.style, [arg0].concat(arg1));
      } else {
        this.style.setProperty(arg0, arg1);
      }
    } else {
      this.style[arg0] = arg1;
    }
  } else {
    for (var key in arg0) {
      this.addStyle(key, arg0[key]);
    }
  }
  return this;
};
/***
 *
 * @param {string|string[]|CSSStyleDeclaration} arg0
 * @returns {AElement}
 */


AElement.prototype.removeStyle = function (arg0) {
  var key;

  if (arg0.charAt) {
    if (arg0.indexOf('-') >= 0) {
      this.style.removeProperty(arg0);
    } else {
      this.style[arg0] = null;
      delete this.style[arg0];
    }
  } else {
    if (arg0.map && arg0.forEach) {
      for (var i = 0; i < arg0.length; ++i) {
        this.removeStyle(arg0[i]);
      }
    } else {
      for (key in arg0) {
        this.removeStyle(key);
      }
    }
  }

  return this;
};

AElement.prototype.addChild = function (child) {
  if (child.indexOf && child.map && child.forEach) {
    for (var i = 0; i < child.length; ++i) {
      this.appendChild(child[i]);
    }
  } else this.appendChild(child);

  return this;
};

AElement.prototype.addTo = function (parent) {
  if (parent && parent.appendChild) {
    if (parent.addChild) parent.addChild(this);else parent.appendChild(this);
  } else throw Error("Can not append to " + parent + "!");

  return this;
};

AElement.prototype.selfRemove = function () {
  if (this.parentElement) this.parentElement.removeChild(this);
  return this;
};

AElement.prototype.selfReplace = function (newNode) {
  if (this.parentElement) this.parentElement.replaceChild(newNode, this);
  return this;
};

AElement.prototype.clearChild = function () {
  while (this.firstChild) {
    this.removeChild(this.firstChild);
  }

  return this;
};
/**
 *
 * @param {string|Array} className
 * @returns {Boolean}
 */


AElement.prototype.containsClass = function (className) {
  if (className.forEach && className.map) {
    for (var i = 0; i < className.length; ++i) {
      if (!this.classList.containsClass(className[i])) return false;
    }

    return true;
  } else return this.classList.contains(className);
};
/**
 *
 * @param {string|Array} className
 * @returns {AElement}
 */


AElement.prototype.addClass = function (className) {
  if (className && className.forEach && className.map) {
    for (var i = 0; i < className.length; ++i) {
      this.classList.add(className[i]);
    }
  } else this.classList.add(className);

  return this;
};
/**
 *
 * @param {string|Array} className
 * @returns {AElement}
 */


AElement.prototype.removeClass = function (className) {
  if (className && className.forEach && className.map) {
    for (var i = 0; i < className.length; ++i) {
      this.classList.remove(className[i]);
    }
  } else this.classList.remove(className);

  return this;
};

AElement.prototype.getComputedStyleValue = function (key) {
  return window.getComputedStyle(this).getPropertyValue(key);
};

AElement.prototype.getFontSize = function () {
  return parseFloat(this.getComputedStyleValue('font-size').replace('px', ''));
};

AElement.prototype.findChildAfter = function (obj) {
  var r = 0;

  for (var i = 0; i < this.childNodes.length; ++i) {
    if (obj == this.childNodes[i]) {
      r = i + 1;
      break;
    }
  }

  if (this.childNodes[r]) return this.childNodes[r];
  return undefined;
};

AElement.prototype.findChildBefore = function (obj) {
  var r = 0;

  for (var i = 0; i < this.childNodes.length; ++i) {
    if (obj == this.childNodes[i]) {
      r = i - 1;
      break;
    }
  }

  if (this.childNodes[r]) return this.childNodes[r];
  return undefined;
};

AElement.prototype.addChildBefore = function (newItem, bf) {
  this.insertBefore(newItem, bf);
  return this;
};

AElement.prototype.addChildAfter = function (newItem, at) {
  var bf = this.findChildAfter(at);
  if (bf) return this.addChildBefore(newItem, bf);
  return this.addChild(newItem);
};
/**
 * @returns {DOMRect}
 */


AElement.prototype.getBoundingRecursiveRect = function (depth) {
  if (depth === undefined) depth = 10000;
  var current, next;
  var oo = 1000000;
  var ac = {
    left: oo,
    right: -oo,
    top: oo,
    bottom: -oo,
    width: 0,
    height: 0
  };
  var stacks = [{
    e: this,
    d: 0
  }];

  while (stacks.length > 0) {
    current = stacks.pop();

    if (current.e.getBoundingClientRect) {
      var cRect = current.e.getBoundingClientRect();
      if (!cRect || !(cRect.width || cRect.height || cRect.left || cRect.right)) continue;
      ac.left = Math.min(ac.left, cRect.left);
      ac.top = Math.min(ac.top, cRect.top);
      ac.bottom = Math.max(ac.bottom, cRect.bottom);
      ac.right = Math.max(ac.right, cRect.right);
      ac.height = ac.bottom - ac.top;
      ac.width = ac.right - ac.left;
      var childNodes = current.e.childNodes;

      if (childNodes && childNodes.length > 0 && current.d < depth) {
        for (var i = 0; i < childNodes.length; ++i) {
          next = {
            e: childNodes[i],
            d: current.d + 1
          };
          stacks.push(next);
        }
      }
    }
  }

  return ac;
};
/***
 *
 * @param parent
 * @returns {boolean}
 */


AElement.prototype.isDescendantOf = function (parent) {
  var child = this;

  while (child) {
    if (child === parent) return true;
    child = child.parentNode;
  }

  return false;
};
/*************************** **********************/


AElement.prototype.getCSSRules = function () {
  var sheets = document.styleSheets;
  var ret = [];
  this.matches = this.matches || this.webkitMatchesSelector || this.mozMatchesSelector || this.msMatchesSelector || this.oMatchesSelector;

  for (var i in sheets) {
    if (sheets[i].href) continue; //because can not access, you must clone link node instead

    var rules = sheets[i].rules || sheets[i].cssRules;

    for (var r in rules) {
      if (this.matches(rules[r].selectorText)) {
        ret.push(rules[r]);
      }
    }
  }

  return ret;
};
/***
 * @returns {Promise}
 */

/***
 * WARNING: this function may be unsafe
 */


AElement.prototype.afterDisplayed = function (requestTimesOut) {
  if (!requestTimesOut) requestTimesOut = 24 * 3600 * 33; // var tracer = new Error();

  var current = this;
  return new Promise(function (resolve, reject) {
    function trace() {
      if (requestTimesOut < 0) {// reject(tracer);
        // if (absol.BUILD && absol.BUILD.version == "DEBUG")
        //     console.warn("Element not displayed", trace);
      } else {
        requestTimesOut--;
        var bound = current.getBoundingClientRect();

        if (bound.width > 0 || bound.height > 0) {
          resolve();
        } else {
          setTimeout(trace, 33);
          return;
        }
      }
    }

    trace();
  });
};

!function () {
  var origin = AElement.prototype.on;

  if (Detector_BrowserDetector.isSafari && !Detector_BrowserDetector.isMobile) {
    AElement.prototype.on = function () {
      if (!this.isSupportedEvent('mouseleave') && arguments[0] == 'mouseleave') {
        this.defineEvent('mouseleave');

        var mouseLeaveEventHandler = function mouseLeaveEventHandler(event) {
          var bound = this.getBoundingClientRect();
          var ok = false;
          ok |= event.clientX < bound.left + 1;
          ok |= event.clientX >= bound.right - 1;
          ok |= event.clientY < bound.top + 1;
          ok |= event.clientY >= bound.bottom - 1;
          if (ok) this.emit('mouseleave', event);
        };

        this.addEventListener('mouseleave', mouseLeaveEventHandler, true);
      }

      origin.apply(this, arguments);
      return this;
    };
  }

  if (Detector_BrowserDetector.isFirefox) {
    AElement.prototype.on = function () {
      if (!this.isSupportedEvent('wheel') && arguments[0] == 'wheel') {
        this.defineEvent('wheel');

        var wheelEventHandler = function wheelEventHandler(oldEvent) {
          //clone event to avoid some lib fix it
          var event = oldEvent.absolEvent;

          if (!event) {
            event = Object.assign({}, oldEvent);

            for (var i = 0; i < AElement.eventProperties.length; ++i) {
              var key = AElement.eventProperties[i];

              if (typeof event[key] == 'function') {
                event[key] = event[key].bind(oldEvent);
              }
            }

            event.preventDefault = function () {
              oldEvent.preventDefault();
            };

            if (!event.mozFixWheelScale) {
              event.mozDeltaY = oldEvent.deltaY;
              event.mozFixWheelScale = true;
              Object.defineProperty(event, 'deltaY', {
                get: function get() {
                  return this.mozDeltaY * 100 / 3;
                }
              });
            }

            oldEvent.absolEvent = event;
          }

          this.emit('wheel', event);
        };

        this.addEventListener('wheel', wheelEventHandler);
      }

      origin.apply(this, arguments);
      return this;
    };
  }
}();
AElement.eventProperties = ["altKey", "bubbles", "button", "buttons", "cancelBubble", "cancelable", "clientX", "clientY", "composed", "ctrlKey", "currentTarget", "defaultPrevented", "deltaMode", "deltaX", "deltaY", "deltaZ", "detail", "eventPhase", "explicitOriginalTarget", "isTrusted", "layerX", "layerY", "metaKey", "movementX", "movementY", "mozInputSource", "mozPressure", "offsetX", "offsetY", "originalTarget", "pageX", "pageY", "rangeOffset", "rangeParent", "region", "relatedTarget", "returnValue", "screenX", "screenY", "shiftKey", "srcElement", "target", "timeStamp", "type", "deltaMode", "deltaX", "deltaY", "deltaZ"];
/* harmony default export */ const HTML5_AElement = (AElement);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/AElementNS.js


/***
 * @augments AElement
 * @augments SVGGraphicsElement
 * @constructor
 */

function AElementNS() {
  HTML5_AElement.call(this);
}

HTML5_AElement.prototype.afterAttached = function () {
  if (this.isDescendantOf(document.body)) return Promise.resolve();
  var attachHookElt = this.$attachhook || this.querySelector('.absol-attachhook');

  if (!attachHookElt) {
    var constructor;

    if (this.tagName.toLowerCase() === 'svg' || this.getBBox) {
      attachHookElt = document.createElementNS('http://www.w3.org/2000/svg', 'image');
      attachHookElt.setAttributeNS(null, 'href', '');
      constructor = AElementNS;
    } else {
      attachHookElt = document.createElement('img');
      attachHookElt.src = '';
      constructor = AElementNS;
    }

    attachHookElt.classList.add('absol-attachhook');
    Object.assign(attachHookElt, constructor.prototype);
    constructor.call(attachHookElt);
    attachHookElt.defineEvent('attached');
    this.$attachhook = attachHookElt;
    this.$attachhook.on('error', function (event) {
      if (this.isDescendantOf(document.body)) this.emit('attached', event, this);
    });
    this.appendChild(attachHookElt);
  }

  return new Promise(function (rs) {
    attachHookElt.once('attached', rs);
  });
};

HTML5_OOP.mixClass(AElementNS, HTML5_AElement);

AElementNS.prototype.attr = function () {
  if (arguments.length == 1) {
    if (typeof arguments[0] == 'string') {
      if (this._azar_extendAttributes[arguments[0]]) {
        return this._azar_extendAttributes[arguments[0]].get.call(this);
      } else return this.getAttributeNS(null, arguments[0]);
    } else {
      for (var key in arguments[0]) {
        this.attr(key, arguments[0][key]);
      }
    }
  } else {
    if (arguments.length == 2) {
      if (arguments[1] === null || arguments[1] === undefined) {
        if (this._azar_extendAttributes[arguments[0]]) {
          this._azar_extendAttributes[arguments[0]].remove.call(this, arguments[1]);
        } else this.removeAttributeNS(null, arguments[0]);
      } else {
        if (this._azar_extendAttributes[arguments[0]]) {
          this._azar_extendAttributes[arguments[0]].set.call(this, arguments[1]);
        } else {
          this.setAttributeNS(null, arguments[0], arguments[1]);
        }
      }
    }
  }

  return this;
};

/* harmony default export */ const HTML5_AElementNS = (AElementNS);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/ElementNS.js

/* harmony default export */ const ElementNS = (HTML5_AElementNS);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js


/**
 *
 * @constructor
 */

function ResizeSystem() {
  this.elts = [];
  this.cache = [];
  this.cacheOf = null;
  this.lastResizeTime = 0;
  window.addEventListener('resize', this.update.bind(this));
  this['goDown' + 'AndCache'] = this.goDownAndCache.bind(this);
  this['notify' + 'ToElt'] = this.notifyToElt.bind(this);
}
/***
 *
 * @param {AElement | AElementNS} elt
 */


ResizeSystem.prototype.goDownAndCache = function (elt) {
  if (this.notifyToElt(elt)) this.cache.push(elt);

  if (elt.childNodes) {
    Array.prototype.forEach.call(elt.childNodes, this.goDownAndCache);
  }
};

ResizeSystem.prototype.notifyToElt = function (elt) {
  if (typeof elt.requestUpdateSize == 'function') {
    elt.requestUpdateSize();
    return true;
  } else if (typeof elt.updateSize == 'function') {
    elt.updateSize();
    return true;
  } else if (typeof elt.onresize == 'function') {
    elt.onresize();
    return true;
  }
};

ResizeSystem.prototype.update = function () {
  var now = new Date().getTime();

  if (now - 100 > this.lastResizeTime) {
    this.removeTrash();
    this.cache = undefined;
  }

  this.lastResizeTime = now;

  if (this.cacheOf !== null) {
    this.cache = undefined;
    this.cacheOf = null;
  }

  if (this.cache === undefined) {
    this.cache = [];
    this.elts.forEach(this.goDownAndCache);
  } else {
    this.cache.forEach(this.notifyToElt);
  }
};

ResizeSystem.prototype.removeTrash = function () {
  this.elts = this.elts.filter(function (element) {
    return HTML5_AElement.prototype.isDescendantOf.call(element, document.body);
  });
};
/***
 *
 * @param  {AElement| AElementNS | Node} fromElt
 * @returns {boolean}
 */


ResizeSystem.prototype.updateUp = function (fromElt) {
  while (fromElt) {
    if (typeof fromElt.requestUpdateSize == 'function') {
      fromElt.requestUpdateSize();
      return true;
    } else if (typeof fromElt.updateSize == 'function') {
      fromElt.updateSize();
      return true;
    } else if (typeof fromElt.onresize == 'function') {
      fromElt.onresize();
      return true;
    }

    fromElt = fromElt.parentElement;
  }
};
/***
 *
 * @param  {AElement| AElementNS | Node} fromElt
 * @returns {boolean}
 */


ResizeSystem.prototype.updateDown = function (fromElt) {
  var now = new Date().getTime();

  if (now - 100 > this.lastResizeTime) {
    this.cache = undefined;
  }

  this.lastResizeTime = now;

  if (this.cacheOf !== fromElt) {
    this.cache = undefined;
    this.cacheOf = fromElt;
  }

  if (this.cache === undefined) {
    this.cache = [];
    this.goDownAndCache(fromElt);
  } else {
    this.cache.forEach(this.notifyToElt);
  }
};
/***
 *
 * @param {AElement| AElementNS | Node} elt
 * @return {boolean}
 */


ResizeSystem.prototype.add = function (elt) {
  for (var i = 0; i < this.elts.length; ++i) {
    if (HTML5_AElement.prototype.isDescendantOf.call(elt, this.elts[i])) {
      return false;
    }
  }

  this.elts = this.elts.filter(function (e) {
    return !HTML5_AElement.prototype.isDescendantOf.call(e, elt);
  });
  this.elts.push(elt);
  return true;
};

/* harmony default export */ const HTML5_ResizeSystem = (new ResizeSystem());
;// CONCATENATED MODULE: ./node_modules/absol/src/JSX/attribute.js
/**
 * 
 * @param {String} text 
 *  @returns {Object}
 */
function parseStyleAttr(text) {
  return text.split(';').map(function (line) {
    var parts = line.split(':');
    if (parts.length < 2) return null;
    var key = parts.shift().trim();
    var value = parts.join(':').trim();
    if (key.length == 0 || value.length == 0) return null;
    return [key, value];
  }).filter(function (it) {
    return it != null;
  }).reduce(function (ac, cr) {
    ac[cr[0]] = cr[1];
    return ac;
  }, {});
}
/**
 * 
 * @param {String} text 
 *  @returns {Array<String>}
 */

function parseClassAttr(text) {
  return text.trim().split(/\s+/);
}
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Dom.js
function Dom_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Dom_typeof = function _typeof(obj) { return typeof obj; }; } else { Dom_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Dom_typeof(obj); }








/***
 * @typedef {{"accept-charset":string, "http-equiv": string, accept : string, accesskey : string, action : string, align : string, allow : string, alt : string, async : string, autocapitalize : string, autocomplete : string, autofocus : string, autoplay : string, background : string, bgcolor : string, border : string, buffered : string, capture : string, challenge : string, charset : string, checked : string, cite : string, class : string, code : string, codebase : string, color : string, cols : string, colspan : string, content : string, contenteditable : string, contextmenu : string, controls : string, coords : string, crossorigin : string, csp : string, data : string, "data-*" : string, datetime : string, decoding : string, default : string, defer : string, dir : string, dirname : string, disabled : string, download : string, draggable : string, dropzone : string, enctype : string, enterkeyhint : string, for : string,     form : string, formaction : string, formenctype : string, formmethod : string, formnovalidate : string, formtarget : string, headers : string, height : string, hidden : string, high : string, href : string, hreflang : string, icon : string, id : string, importance : string, integrity : string, intrinsicsize : string, inputmode : string, ismap : string, itemprop : string, keytype : string, kind : string, label : string, lang : string, language : string, loading : string, list : string, loop : string, low : string, manifest : string, max : string, maxlength : string, minlength : string, media : string, method : string, min : string, multiple : string, muted : string, name : string, novalidate : string, open : string, optimum : string, pattern : string, ping : string, placeholder : string, poster : string, preload : string, radiogroup : string, readonly : string, referrerpolicy : string, rel : string, required : string, reversed : string, rows : string, rowspan : string, sandbox : string, scope : string, scoped : string, selected : string, shape : string, size : string, sizes : string, slot : string, span : string, spellcheck : string, src : string, srcdoc : string, srclang : string, srcset : string, start : string, step : string, style : string, summary : string, tabindex : string, target : string, title : string, translate : string, type : string, usemap : string, value : string, width : string, wrap : string, }} AElementAttributeDescriptor
 */

/**
 * @typedef {{"arabic-form":string,"baseline-shift": string, "accent-height": string,  "alignment-baseline": string,  "cap-height": string,  "clip-path": string,  "clip-rule": string,  "color-dinterpolation": string,  "color-interpolation-filters": string,  "color-profile": string,  "color-rendering": string,  "dominant-baseline": string,  "enable-background": string,  "fill-opacity": string,  "fill-rule": string,  "flood-color": string,  "flood-opacity": string,  "font-family": string,  "font-size": string,  "font-size-adjust": string,  "font-stretch": string,  "font-style": string,  "font-variant": string,  "font-weight": string,  "glyph-name": string,  "glyph-orientation-horizontal": string,  "glyph-orientation-vertical": string,  "horiz-adv-x": string,  "horiz-origin-x": string,  "image-rendering": string,  "letter-spacing": string,  "lighting-color": string,  "marker-end": string,  "marker-mid": string,  "marker-start": string,  "overline-position": string,  "overline-thickness": string,  "panose-1": string,  "paint-order": string,  "pointer-events": string,  "rendering-intent": string,  "shape-rendering": string,  "stop-color": string,  "stop-opacity": string,  "strikethrough-position": string,  "strikethrough-thickness": string,  "stroke-dasharray": string,  "stroke-dashoffset": string,  "stroke-linecap": string,  "stroke-linejoin": string,  "stroke-miterlimit": string,  "stroke-opacity": string,  "stroke-width": string,  "text-anchor": string,  "text-decoration": string,  "text-rendering": string,  "transform-origin": string,  "underline-position": string,  "underline-thickness": string,  "unicode-bidi": string,  "unicode-range": string,  "units-per-em": string,  "v-alphabetic": string,  "v-hanging": string,  "v-ideographic": string,  "v-mathematical": string,  "vector-effect": string,  "vert-adv-y": string,  "vert-origin-x": string,  "vert-origin-y": string,  "word-spacing": string,  "writing-mode": string,  "x-height": string,  "xlink:actuate": string,  "xlink:arcrole": string,  "xlink:href": string,  "xlink:role": string,  "xlink:show": string,  "xlink:title": string,  "xlink:type": string,  "xml:base": string,  "xml:lang": string,  "xml:space": string, accumulate:string, additive:string, allowReorder:string, alphabetic:string, amplitude:string, ascent:string, attributeName:string, attributeType:string, autoReverse:string, azimuth:string, baseFrequency:string, baseProfile:string, bbox:string, begin:string, bias:string, by:string, calcMode:string, class:string, clip:string, clipPathUnits:string, color:string, contentScriptType:string, contentStyleType:string, cursor:string, cx:string, cy:string, d:string, decelerate:string, descent:string, diffuseConstant:string, direction:string, display:string, divisor:string, dur:string, dx:string, dy:string, edgeMode:string, elevation:string, end:string, exponent:string, externalResourcesRequired:string, fill:NamedColor|Color|string, filter:string, filterRes:string, filterUnits:string, format:string, from:string, fr:string, fx:string, fy:string, g1:string, g2:string, glyphRef:string, gradientTransform:string, gradientUnits:string, hanging:string, height:string, href:string, hreflang:string, id:string, ideographic:string, in:string, in2:string, intercept:string, k:string, k1:string, k2:string, k3:string, k4:string, kernelMatrix:string, kernelUnitLength:string, kerning:string, keyPoints:string, keySplines:string, keyTimes:string, lang:string, lengthAdjust:string, limitingConeAngle:string, local:string, markerHeight:string, markerUnits:string, markerWidth:string, mask:string, maskContentUnits:string, maskUnits:string, mathematical:string, max:string, media:string, method:string, min:string, mode:string, name:string, numOctaves:string, offset:string, opacity:string, operator:string, order:string, orient:string, orientation:string, origin:string, overflow:string, path:string, pathLength:string, patternContentUnits:string, patternTransform:string, patternUnits:string, ping:string, points:string, pointsAtX:string, pointsAtY:string, pointsAtZ:string, preserveAlpha:string, preserveAspectRatio:string, primitiveUnits:string, r:string, radius:string, referrerPolicy:string, refX:string, refY:string, rel:string, repeatCount:string, repeatDur:string, requiredExtensions:string, requiredFeatures:string, restart:string, result:string, rotate:string, rx:string, ry:string, scale:string, seed:string, slope:string, spacing:string, specularConstant:string, specularExponent:string, speed:string, spreadMethod:string, startOffset:string, stdDeviation:string, stemh:string, stemv:string, stitchTiles:string, string:string, stroke:string, style:string, surfaceScale:string, systemLanguage:string, tabindex:string, tableValues:string, target:string, targetX:string, targetY:string, textLength:string, to:string, transform:string, type:string, u1:string, u2:string, unicode:string, values:string, version:string, viewBox:string, viewTarget:string, visibility:string, width:string, widths:string, x:string, x1:string, x2:string, xChannelSelector:string, y:string, y1:string, y2:string, yChannelSelector:string, z:string, zoomAndPan:string, }}  AElementNSAttributeDescriptor
 */

/***
 * @typedef {{abort:function(event:(UiEvent|Event)):void,afterprint:function(event:Event):void,animationend:function(event:AnimationEvent):void,animationiteration:function(event:AnimationEvent):void,animationstart:function(event:AnimationEvent):void,beforeprint:function(event:Event):void,beforeunload:function(event:(UiEvent|Event)):void,blur:function(event:FocusEvent):void,canplay:function(event:Event):void,canplaythrough:function(event:Event):void,change:function(event:Event):void,click:function(event:MouseEvent):void,contextmenu:function(event:MouseEvent):void,copy:function(event:ClipboardEvent):void,cut:function(event:ClipboardEvent):void,dblclick:function(event:MouseEvent):void,drag:function(event:DragEvent):void,dragend:function(event:DragEvent):void,dragenter:function(event:DragEvent):void,dragleave:function(event:DragEvent):void,dragover:function(event:DragEvent):void,dragstart:function(event:DragEvent):void,drop:function(event:DragEvent):void,durationchange:function(event:Event):void,ended:function(event:Event):void,error:function(event:(ProgressEvent|UiEvent|Event)):void,focus:function(event:FocusEvent):void,focusin:function(event:FocusEvent):void,focusout:function(event:FocusEvent):void,fullscreenchange:function(event:Event):void,fullscreenerror:function(event:Event):void,hashchange:function(event:HashChangeEvent):void,input:function(event:(InputEvent|Event)):void,invalid:function(event:Event):void,keydown:function(event:KeyboardEvent):void,keypress:function(event:KeyboardEvent):void,keyup:function(event:KeyboardEvent):void,load:function(event:(UiEvent|Event)):void,loadeddata:function(event:Event):void,loadedmetadata:function(event:Event):void,loadstart:function(event:ProgressEvent):void,message:function(event:Event):void,mousedown:function(event:MouseEvent):void,mouseenter:function(event:MouseEvent):void,mouseleave:function(event:MouseEvent):void,mousemove:function(event:MouseEvent):void,mouseover:function(event:MouseEvent):void,mouseout:function(event:MouseEvent):void,mouseup:function(event:MouseEvent):void,mousewheel:function(event:WheelEvent):void,offline:function(event:Event):void,online:function(event:Event):void,open:function(event:Event):void,pagehide:function(event:PageTransitionEvent):void,pageshow:function(event:PageTransitionEvent):void,paste:function(event:ClipboardEvent):void,pause:function(event:Event):void,play:function(event:Event):void,playing:function(event:Event):void,popstate:function(event:PopStateEvent):void,progress:function(event:Event):void,ratechange:function(event:Event):void,resize:function(event:(UiEvent|Event)):void,reset:function(event:Event):void,scroll:function(event:(UiEvent|Event)):void,search:function(event:Event):void,seeked:function(event:Event):void,seeking:function(event:Event):void,select:function(event:(UiEvent|Event)):void,show:function(event:Event):void,stalled:function(event:Event):void,storage:function(event:StorageEvent):void,submit:function(event:Event):void,suspend:function(event:Event):void,timeupdate:function(event:Event):void,toggle:function(event:Event):void,touchcancel:function(event:TouchEvent):void,touchend:function(event:TouchEvent):void,touchmove:function(event:TouchEvent):void,touchstart:function(event:TouchEvent):void,transitionend:function(event:TransitionEvent):void,unload:function(event:(UiEvent|Event)):void,volumechange:function(event:Event):void,waiting:function(event:Event):void,wheel:function(event:WheelEvent):void}} AElementEventDescriptor
 */

/***
 * @typedef AbsolConstructDescriptor
 * @property {string | function |null} tag
 * @property {CSSStyleDeclaration} style
 * @property {Array | string} extendEvent
 * @property {Array | string} class
 * @property {AElementAttributeDescriptor|AElementNSAttributeDescriptor} attr
 * @property {string|AElement | AElementNS | AbsolConstructDescriptor | string[] |AElement[] | AElementNS[] | AbsolConstructDescriptor[]} child
 * @property {string} text to create a TextNode, not Element
 * @property {AElement} elt
 * @property {AElementEventDescriptor|{}} on
 * @property {Object} props
 *
 */

/****
 *
 * @returns {AElement}
 */

var attachhookCreator = function attachhookCreator() {
  var res = Dom.ShareInstance._({
    tag: 'img',
    "class": 'absol-attachhook',
    extendEvent: ['attached'],
    style: {
      display: 'none'
    },
    attr: {
      src: ''
    },
    on: {
      error: function error(event) {
        if (!this._attached && this.isDescendantOf(document.body)) {
          this._attached = true;
          this.emit('attached', event, this);
        }
      }
    }
  });

  res._attached = false;
  Object.defineProperty(res, 'attached', {
    get: function get() {
      return this._attached;
    }
  });

  res.resetState = function () {
    this._attached = false;
    this.src = '';
  };

  return res;
};

var svgCreator = function svgCreator() {
  var temp = document.createElement('div');
  temp.innerHTML = '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>';
  var element = temp.childNodes[0];
  var prototypes = Object.getOwnPropertyDescriptors(HTML5_AElement.prototype);
  Object.defineProperties(element, prototypes);
  HTML5_AElement.call(element);
  return element;
};
/***
 *
 * @param {*=} option
 * @constructor
 */


function Dom(option) {
  this.defaultTag = 'div';
  option = option || {};
  this.creator = option.creator || {};
  Object.defineProperties(this.creator, {
    svg: {
      set: function set() {//do nothing
      },
      get: function get() {
        return svgCreator;
      }
    },
    attachhook: {
      set: function set() {//do nothing
      },
      get: function get() {
        return attachhookCreator;
      }
    }
  });
  this['$ '.trim()] = this.$.bind(this);
  this['_ '.trim()] = this._.bind(this);
  this['$' + '$'] = this.$$.bind(this);
  this.buildDom = this._;
}

Dom.prototype.fromCode = function (code) {
  code = code.trim().replace(/>\s+</gm, '><');
  var temTag = 'div';
  if (code.startsWith('<td') || code.startsWith('<th') && !code.startsWith('<thead')) temTag = 'tr';else if (code.startsWith('<tr')) temTag = 'tbody';else if (code.startsWith('<thead') || code.startsWith('<tbody')) temTag = 'table';
  var tempDiv = document.createElement(temTag);
  tempDiv.innerHTML = code;
  var element = tempDiv.childNodes[0];
  var prototypes = Object.getOwnPropertyDescriptors(HTML5_AElement.prototype);
  Object.defineProperties(element, prototypes);
  HTML5_AElement.call(element);
  return element;
};
/**
 * DFS
 * @param {string | AElement} query
 * @param {AElement} root
 * @param {function} onFound - return true to stop find
 * @returns {AElement | AElementNS}
 */


Dom.prototype.$ = function (query, root, onFound) {
  var res;
  if (Dom.isDomNode(query)) res = query;else res = this.select(query, root, onFound);
  if (res) this.attach(res);
  return res;
};
/***
 *
 * @type {function(string, AElement, Function): AElement}
 */


Dom.prototype.selectAttacth = Dom.prototype.$;
/**
 * DFS
 * @param {string} query
 * @param {AElement} root
 * @param {function} onFound - return true to stop find
 */

Dom.prototype.select = function (query, root, onFound) {
  root = root || document.documentElement;
  var matcher = HTML5_JSPath.compileJSPath(query);
  return matcher.findFirst(root, onFound);
};

var FeatureClass = {
  AElementNS: {
    constructor: ElementNS,
    prototypeKeys: Object.keys(ElementNS.prototype)
  },
  AElement: {
    constructor: HTML5_AElement,
    prototypeKeys: Object.keys(HTML5_AElement.prototype)
  }
};
/**
 *
 * @param {AElement | AElementNS } element
 */

Dom.prototype.attach = function (element) {
  if (element.attr) return;
  var feature = element.getBBox && element.tagName !== 'svg' ? FeatureClass.AElementNS : FeatureClass.AElement;
  var elementConstructor = feature.constructor;
  var proto = elementConstructor.prototype;
  var prototypeKeys = feature.prototypeKeys;
  var n = prototypeKeys.length;
  var key;

  for (var i = 0; i < n; ++i) {
    key = prototypeKeys[i];
    element[key] = proto[key];
  }

  Object.assign(element, elementConstructor.prototype);
  elementConstructor.call(element);
};

Dom.prototype.makeNewElement = function (tagName) {
  return document.createElement(tagName);
};

Dom.prototype.makeNewTextNode = function (data) {
  return document.createTextNode(data);
};
/**
 *
 * @param {AbsolConstructDescriptor | string | {} } option
 * @returns {AElementNS| AElement | Text}
 */


Dom.prototype._ = function (option, isInherited) {
  var res;
  var creator;

  if (Dom.isDomNode(option)) {
    res = option;
    option = {};
    /** fix reinit component */

    isInherited = true;
  } else {
    if (option.charAt) {
      option = option.trim();

      if (option[0] == '<') {
        res = this.fromCode(option);
        option = {};
      } else {
        var queryObj = HTML5_JSPath.parseQuery(option);
        option = {};
        option.tag = queryObj.tagName || this.defaultTag;
        if (queryObj.classList && queryObj.classList.length > 0) option["class"] = queryObj.classList;
        if (queryObj.id) option.id = queryObj.id;
        if (queryObj.attributes) option.attr = queryObj.attributes;
      }
    }
  }

  if (option.text || option.text === '') {
    //is textNode
    return this.makeNewTextNode(option.text);
  }

  option.tag = option.tag || this.defaultTag;
  creator = option.tag.prototype ? option.tag : this.creator[option.tag];
  if (option.tag.prototype) option.tag = option.tag.tag;

  if (option.elt) {
    res = option.elt;
  } else {
    if (!res) {
      if (creator) {
        if (creator.render) {
          res = creator.render(option.data);
        } else {
          res = creator(option.data);
        }
      } else {
        res = this.makeNewElement(option.tag);
        Object.assign(res, option.data);
      }
    }
  }

  this.attach(res);

  if (creator) {
    res._azar_extendTags = res._azar_extendTags || {};
    res._azar_extendTags[option.tag] = creator;
    creator.property && Object.defineProperties(res, creator.property);
    creator.prototype && HTML5_OOP["extends"](res, creator.prototype);
    creator.attribute && res.defineAttributes(creator.attribute);

    if (creator.render) {
      if (creator.eventHandler) {
        res.eventHandler = res.eventHandler || {};
        var eventHandler = HTML5_OOP.bindFunctions(res, creator.eventHandler || creator.prototype.eventHandler);

        for (var eventHandlerKey in eventHandler) {
          if (res.eventHandler[eventHandlerKey]) {
            throw new Error("Same name of eventHandler[" + eventHandlerKey + "]");
          } else {
            res.eventHandler[eventHandlerKey] = eventHandler[eventHandlerKey];
          }
        }
      }

      creator.call(res);
    }
  }

  option.extendEvent && res.defineEvent(option.extendEvent);
  option.attr && res.attr(option.attr);
  option.on && res.on(option.on);
  option.once && res.once(option.once);
  option["class"] && res.addClass(option["class"]);
  option.style && res.addStyle(option.style);
  option.id && res.attr('id', option.id);
  if (!isInherited) res.init(option.props);

  if (option.child) {
    option.child = option.child instanceof Array ? option.child : [option.child];

    for (var i = 0; i < option.child.length; ++i) {
      res.addChild(this._(option.child[i], false, true));
    }
  }

  return res;
};
/***
 *
 * @type {function(Object, boolean): AElement}
 */


Dom.prototype.create = Dom.prototype._;
/***
 *
 * @param query
 * @param root
 * @returns {Array<AElement|AElementNS>}
 */

Dom.prototype.$$ = function (query, root) {
  var thisD = this;
  var res = [];
  this.selectAttacth(query, root, function (elt) {
    thisD.attach(elt);
    res.push(elt);
  });
  return res;
};

Dom.prototype.install = function (arg0, arg1) {
  var _this = this;

  if (arguments.length == 1) {
    if (arg0.creator && arg0.create && arg0.select) {
      // is a dom core
      var creator = arg0.creator;
      Object.keys(creator).forEach(function (key) {
        if (key.startsWith('_') || key.startsWith('$')) return;
        var func = creator[key];
        if (typeof func == 'function') if (_this.creator[key] != func) _this.creator[key] = func;
      });
    } else if (typeof arg0 == 'function') {
      var name = arg0.tag || getFunctionName(arg0) || arg0.name;

      if (name) {
        this.creator[name.toLowerCase()] = arg0;
      } else {
        console.error('No ident name of creator function', arg0);
      }
    } else if (arg0 instanceof Array) {
      arg0.forEach(function (func) {
        var name = func.tag || getFunctionName(func) || func.name;

        if (name) {
          _this.creator[name.toLowerCase()] = func;
        }
      });
    } else if (Dom_typeof(arg0) == 'object') {
      Object.keys(arg0).forEach(function (key) {
        if (key.startsWith('_') || key.startsWith('$')) return;
        var func = arg0[key];
        if (typeof func == 'function') if (_this.creator[key] != func) _this.creator[key] = func;
      });
    } else {
      console.error('Unknown data', arg0);
    }
  } else if (arguments.length == 2) {
    if (arg0 instanceof Array) {
      if (arg1.creator) arg1 = arg1.creator;
      arg0.forEach(function (key) {
        var func = arg1[key];
        if (typeof func == 'function') if (_this.creator[key] != func) _this.creator[key] = func;
      });
    } else if (arg0 instanceof RegExp) {
      if (arg1.creator) arg1 = arg1.creator;
      Object.keys(arg1).forEach(function (key) {
        if (key.match(arg0)) {
          var func = arg1[key];
          if (typeof func == 'function') if (_this.creator[key] != func) _this.creator[key] = func;
        }
      });
    } else if (typeof arg0 == 'string' && arg0.length > 0) {
      if (typeof arg1 == 'function') {
        this.creator[arg0] = arg1;
      } else {
        console.error('arg1 is not a function');
      }
    }
  } else {
    console.error('Invalid param');
  }

  return this;
};
/***
 *
 * @param {String | null} tagName
 */


Dom.prototype.require = function (tagName) {
  return this.creator[tagName] || null;
};
/**
 *
 * @param {*} o
 * @returns {Boolean}
 */


function isDomNode(o) {
  return (typeof Node === "undefined" ? "undefined" : Dom_typeof(Node)) === "object" ? o instanceof Node : o && Dom_typeof(o) === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string";
}
Dom.isDomNode = isDomNode;
/**
 * @param {AElement|Node|HTMLElement} element
 */

function activeFullScreen(element) {
  if (element.requestFullscreen) {
    element.requestFullscreen();
  } else if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if (element.webkitRequestFullscreen) {
    element.webkitRequestFullscreen(HTML5_AElement.ALLOW_KEYBOARD_INPUT);
  } else if (element.msRequestFullscreen) {
    element.msRequestFullscreen();
  }
}
Dom.activeFullScreen = activeFullScreen;
function deactiveFullScreen() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  }
}
Dom.deactiveFullScreen = deactiveFullScreen;
function isFullScreen() {
  var fullScreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
  return !!fullScreenElement;
}
Dom.isFullScreen = isFullScreen;
/**
 * @param {AElement|Node|HTMLElement} current
 * @returns {ClientRect}
 */

function traceOutBoundingClientRect(current) {
  var screenSize = Dom.getScreenSize();
  var left = 0;
  var right = screenSize.width;
  var top = 0;
  var bottom = screenSize.height;

  while (current) {
    var ox = HTML5_AElement.prototype.getComputedStyleValue.call(current, 'overflow-x') !== "visible";
    var oy = HTML5_AElement.prototype.getComputedStyleValue.call(current, 'overflow-y') !== "visible";
    var isHtml = current.tagName.toLowerCase() === 'html';

    if (ox || oy || isHtml) {
      var bound = current.getBoundingClientRect();

      if (ox || isHtml) {
        left = Math.max(left, bound.left);
        right = Math.min(right, bound.right);
      }

      if (oy || isHtml) {
        top = Math.max(top, bound.top);
        bottom = Math.min(bottom, bound.bottom);
      }
    }

    if (isHtml) break;
    current = current.parentElement;
  }

  return {
    left: left,
    right: right,
    top: top,
    bottom: bottom,
    width: right - left,
    height: bottom - top
  };
}
Dom.traceOutBoundingClientRect = traceOutBoundingClientRect;
/***
 *
 * @param {string} fontFace
 * @param {number} timeout
 * @returns {Promise<boolean>}
 */

function fontFaceIsLoaded(fontFace, timeout) {
  timeout = timeout || 0;

  var element = this.ShareInstance._({
    tag: 'span',
    style: {
      visibility: 'hidden',
      position: 'fixed',
      top: '-9999px',
      left: '-9999px',
      'font-size': '256px'
    },
    props: {
      innerHTML: "Test string long long long"
    }
  });

  element.addTo(document.body);
  return element.afterAttached().then(function () {
    var lastOffsetWidth = element.getBoundingClientRect().width;
    element.addStyle('font-family', fontFace);
    return new Promise(function (resolve, reject) {
      function check(remainTime) {
        if (remainTime < 0) {
          resolve(false);
          element.selfRemove();
        } else requestAnimationFrame(function () {
          var currentOffsetWidth = element.getBoundingClientRect().width;

          if (currentOffsetWidth != lastOffsetWidth) {
            resolve(true);
            element.selfRemove();
          } else check(remainTime - 10);
        });
      }

      check(timeout);
    });
  });
}
Dom.fontFaceIsLoaded = fontFaceIsLoaded;
/***
 *
 * @returns {{width: number, WIDTH: number, HEIGHT: number, height: number}}
 */

function getScreenSize() {
  var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
  var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
  return {
    WIDTH: width,
    HEIGHT: height,
    width: width,
    height: height
  };
}
Dom.getScreenSize = getScreenSize;
/***
 *
 * @param {HTMLImageElement} img
 * @param {number=} timeout
 * @returns {Promise<void>}
 */

function waitImageLoaded(img, timeout) {
  var isLoaded = true;

  if (!img.complete) {
    isLoaded = false;
  }

  if (img.naturalWidth === 0) {
    isLoaded = false;
  }

  if (isLoaded) return Promise.resolve();
  return new Promise(function (rs) {
    if (img.addEventListener) {
      img.addEventListener('load', rs, false);
    } else {
      img.attachEvent('onload', rs, false);
    }

    setTimeout(rs, timeout || 5000);
  }); // No other way of checking: assume it’s ok.
}
Dom.waitImageLoaded = waitImageLoaded;
/***
 *
 * @param {HTMLIFrameElement| Worker} iframe
 * @returns {Promise}
 */

function waitIFrameLoaded(iframe) {
  return new Promise(function (rs, rj) {
    if (document.all) {
      iframe.onreadystatechange = function () {
        if (iframe.readyState === "complete" || iframe.readyState === "loaded") rs();
      };
    } else {
      iframe.onload = rs;
    }

    setTimeout(rs, 5000);
  });
}
Dom.waitIFrameLoaded = waitIFrameLoaded;
/***
 *
 * @param {Image} element
 * @returns {Promise<HTMLCanvasElement>}
 */

function imageToCanvas(element) {
  if (typeof element == 'string') {
    element = Dom.ShareInstance.$(element);
  }

  if (element.tagName.toLowerCase() === 'img') {
    var preRender = Dom.ShareInstance._('div');

    preRender.addStyle({
      position: 'fixed',
      top: '0',
      left: '0',
      zIndex: '-10000',
      opacity: '0'
    }).addTo(document.body);
    var canvas = document.createElement("canvas");
    preRender.addChild(canvas);
    return Dom.waitImageLoaded(element).then(function () {
      canvas.width = element.width;
      canvas.height = element.height;
      var context = canvas.getContext("2d");
      context.drawImage(element, 0, 0);
      preRender.selfRemove();
      return canvas;
    });
  } else {
    throw new Error("AElement must be image");
  }
}
Dom.imageToCanvas = imageToCanvas;
Dom.ShareInstance = new Dom();
Dom.scrollWidthPromise;
Dom.documentReady = new Promise(function (resolve) {
  if (document.body) {
    resolve();
  } else {
    window.addEventListener("load", resolve);
  }
});
function getScrollSize() {
  if (!Dom.scrollWidthPromise) Dom.scrollWidthPromise = new Promise(function (resolve) {
    function prerender() {
      var parent = Dom.ShareInstance._({
        style: {
          'z-index': '-100',
          opacity: '0',
          width: '100px',
          height: '100px',
          overflow: 'scroll',
          top: '0',
          left: '0',
          'box-sizing': 'content-box',
          position: 'fixed'
        }
      }).addTo(document.body);

      var child = Dom.ShareInstance._({
        style: {
          width: '100%',
          height: '100%'
        }
      }).addTo(parent);

      requestAnimationFrame(function () {
        var parentBound = parent.getBoundingClientRect();
        var childBound = child.getBoundingClientRect();
        resolve({
          width: parentBound.width - childBound.width,
          height: parentBound.height - childBound.height
        });
        parent.selfRemove();
      });
    }

    Dom.documentReady.then(prerender);
  });
  return Dom.scrollWidthPromise;
}
Dom.getScrollSize = getScrollSize;
/***
 *
 * @param {(AElement|AElementNS|Node)} originElt
 * @param {function(originElt: (AElement|AElementNS|Node), originElt: (AElement|AElementNS|Node)):void } afterCloneCb
 * @return {AElement|AElementNS|Node}
 */

function depthClone(originElt, afterCloneCb) {
  /***
   *
   * @type {AElement|AElementNS|Node}
   */
  var newElt = originElt.cloneNode(); //no deep

  if (originElt.childNodes) {
    /***
     *
     * @type {(AElement|AElementNS)[]}
     */
    var children = Array.prototype.map.call(originElt.childNodes, function (child) {
      return depthClone(child, afterCloneCb);
    });

    for (var i = 0; i < children.length; ++i) {
      newElt.appendChild(children[i]);
    }
  }

  return afterCloneCb && afterCloneCb(originElt, newElt) || newElt;
}
/***
 *
 * @param originElt
 * @returns {AElement|HTMLElement|Node}
 */

function depthCloneWithStyle(originElt, afterCloneCb) {
  return depthClone(originElt, function (originElt, newElt) {
    if (!originElt.getAttribute && !originElt.getAttributeNS) return;
    copyStyleRule(originElt, newElt);
    afterCloneCb && afterCloneCb(originElt, newElt);
  });
}
Dom.depthClone = depthClone;
Dom.depthCloneWithStyle = depthCloneWithStyle;
/***
 *
 * @param  {AElement|HTMLElement|Node}sourceElt
 * @param  {AElement|HTMLElement|Node} destElt
 * @returns  {AElement|HTMLElement|Node}
 */

function copyStyleRule(sourceElt, destElt) {
  if (!sourceElt.getAttribute && !sourceElt.getAttributeNS) return destElt; //is text node

  if (!destElt.getAttribute && !destElt.getAttributeNS) return destElt; //is text node, nothing to copy

  var cssRules = HTML5_AElement.prototype.getCSSRules.call(sourceElt);
  var cssKey = cssRules.reduce(function (ac, rule) {
    for (var i = 0; i < rule.style.length; ++i) {
      ac[rule.style[i]] = true;
    }

    return ac;
  }, {});

  for (var key in cssKey) {
    destElt.style[key] = HTML5_AElement.prototype.getComputedStyleValue.call(sourceElt, key);
  }

  return destElt;
}
Dom.copyStyleRule = copyStyleRule;
/***
 * get absol construct descriptor for HTML element only
 * @param {AElement | Text} elt
 * @returns {AbsolConstructDescriptor}
 */

function getConstructDescriptor(elt) {
  var obj = {};
  obj.tag = elt.tagName.toLowerCase();
  var classAttr = elt.getAttribute('class');
  var classList;
  if (classAttr) classList = parseClassAttr(classAttr);
  if (classList && classList.length > 0) obj["class"] = classList;
  var styleAttr = elt.getAttribute('style');
  var style;
  if (styleAttr) style = parseStyleAttr(styleAttr);
  var attributes = elt.attributes;
  var attNode;
  var attrName;
  var attrValue;
  var attr = {};
  var on = {};
  var props = {};
  var eventMatch, eventName;
  var propMatch, propName;

  for (var i = 0; i < attributes.length; ++i) {
    attNode = attributes[i];
    attrName = attNode.nodeName;
    attrValue = attNode.nodeValue;
    if (attrName == 'style' || attrName == 'class') continue;
    eventMatch = attrName.match(/^on(.+)/);

    if (eventMatch) {
      eventName = eventMatch[1];
      on[eventName] = new Function('event', 'sender', attrValue);
      continue;
    }

    propMatch = attrName.match(/^prop-(.+)/);

    if (propMatch) {
      propName = propMatch[1];
      props[propName] = attrValue;
      continue;
    }

    attr[attrName] = attrValue;
  }

  var key;

  for (key in style) {
    //style is not empty
    obj.style = style;
    break;
  }

  for (key in attr) {
    obj.attr = attr;
    break;
  }

  for (key in on) {
    obj.on = on;
    break;
  }

  for (key in props) {
    obj.props = props;
    break;
  }

  return obj;
}
Dom.getConstructDescriptor = getConstructDescriptor;

Dom.addToResizeSystem = function (element) {
  HTML5_ResizeSystem.add(element);
};

Dom.updateResizeSystem = function () {
  HTML5_ResizeSystem.update();
};

Dom.updateSizeUp = function (fromElt) {
  HTML5_ResizeSystem.updateUp(fromElt);
};

/* harmony default export */ const HTML5_Dom = (Dom);
;// CONCATENATED MODULE: ./node_modules/absol/src/Color/Color.js


function Color(rgba) {
  this.rgba = rgba.slice();
}

Color.prototype.toHex6 = function () {
  return this.rgba.slice(0, 3).map(function (b) {
    b = b * 255 >> 0;
    return (b < 16 ? '0' : '') + b.toString(16);
  }).join('');
};

Color.prototype.toHex8 = function () {
  return this.rgba.map(function (b) {
    b = b * 255 >> 0;
    return (b < 16 ? '0' : '') + b.toString(16);
  }).join('');
};

Color.prototype.toHex3 = function () {
  return this.rgba.slice(0, 3).map(function (b) {
    b = b * 255 / 17 >> 0;
    return b.toString(16);
  }).join('');
};

Color.prototype.toHex4 = function () {
  return this.rgba.map(function (b) {
    b = b * 255 / 17 >> 0;
    return b.toString(16);
  }).join('');
};

Color.prototype.toHSLA = function () {
  return Color.rgbaToHSLA(this.rgba);
};

Color.prototype.toHSBA = function () {
  return Color.rgbaToHSBA(this.rgba);
};

Color.prototype.toHWBA = function () {
  return Color.rgbaToHWBA(this.rgba);
};

Color.prototype.getHightContrastColor = function () {
  var hsba = this.toHSBA();
  var h, s, b;
  h = hsba[0] > 0.5 ? hsba[0] - 0.5 : hsba[0] + 0.5;
  s = hsba[1] > 0.5 ? hsba[1] - 0.5 : hsba[1] + 0.5;
  b = hsba[2] > 0.5 ? hsba[2] - 0.5 : hsba[2] + 0.5;
  return Color.fromHSB(h, s, b);
};

Color.prototype.getContrastYIQ = function () {
  var r = this.rgba[0] * 255;
  var g = this.rgba[1] * 255;
  var b = this.rgba[2] * 255;
  var yiq = (r * 299 + g * 587 + b * 114) / 1000;
  return yiq >= 128 ? new Color([0, 0, 0, 1]) : new Color([1, 1, 1, 1]);
};

Color.prototype.clone = function () {
  return new Color(this.rgba.slice());
};

Color.prototype.toString = function (mode) {
  mode = mode || 'rgba';
  mode = mode.toLocaleLowerCase();
  return Color.templates[mode](this);
};
/***
 *
 */


Color.prototype.nearestNamedColor = function (notStandard, hsbWeight) {
  hsbWeight = hsbWeight || [5, 3, 1];
  var hsba = this.toHSBA();
  var bestMatch = null;
  var dist = 1000;
  Object.keys(Color.namedColors).concat(notStandard ? Object.keys(Color.nonStandarNamedColors) : []).forEach(function (name) {
    var c = Color.parse(Color.namedColors[name] || Color.nonStandarNamedColors[name]);
    var cHSBA = c.toHSBA();
    var cDist = Math.abs(hsba[0] - cHSBA[0]) * hsbWeight[0] + Math.abs(hsba[1] - cHSBA[1]) * hsbWeight[1] + Math.abs(hsba[2] - cHSBA[2]) * hsbWeight[2];

    if (cDist < dist) {
      dist = cDist;
      bestMatch = name;
    }
  });
  return bestMatch;
};

Color.templates = [['rgba', 'rgba', 'rgba({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}}, {{x[3]}})'], ['rgb', 'rgba', 'rgb({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}})'], ['hsl', 'toHSLA()', 'hsl({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hsla', 'toHSLA()', 'hsla({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], ['hsb', 'toHSBA()', 'hsb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hsba', 'toHSBA()', 'hsba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'], ['hex3', 'toHex3()', '#{{x}}'], ['hex4', 'toHex4()', '#{{x}}'], ['hex6', 'toHex6()', '#{{x}}'], ['hex8', 'toHex8()', '#{{x}}'], ['hwb', 'toHWBA()', 'hwb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'], ['hwba', 'toHWBA()', 'hwba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})']].reduce(function (ac, cr) {
  ac[cr[0]] = new Function('color', ['var x = color.' + cr[1] + ';', 'return ' + JSMaker_TemplateString.parse(cr[2]).toJSCode() + ';'].join('\n'));
  return ac;
}, {});
Color.regexes = {
  whiteSpace: /\s*/,
  // Match zero or more whitespace characters.
  integer: /(\d{1,3})/,
  // Match integers: 79, 255, etc.
  decimal: /((?:\d+(?:\.\d+)?)|(?:\.\d+))/,
  // Match 129.6, 79, .9, etc.
  percent: /((?:\d+(?:\.\d+)?)|(?:\.\d+))%/,
  // Match 12.9%, 79%, .9%, etc.
  hex3: /^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,
  // Match colors in format #XXXX, e.g. #5123.
  hex4: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,
  // Match colors in format #XXXXXX, e.g. #b4d455.
  hex6: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,
  // Match colors in format #XXXXXXXX, e.g. #b4d45535.
  hex8: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i
};
Color.regexes.percent = new RegExp(Color.regexes.decimal.source + '%');
Color.regexes.rgb = new RegExp(['^rgb\\(', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.integer.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i');
Color.regexes.rgbPercent = new RegExp(['^rgb\\(', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25).

Color.regexes.rgba = new RegExp(['^rgba\\(', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.integer.source, ',', Color.regexes.decimal.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format rgb(R%, G%, B%, A), e.g. rgb(100%, 0%, 28.9%, 0.5).

Color.regexes.rgbaPercent = new RegExp(['^rgba\\(', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsla(H, S%, L%), e.g. hsl(100, 40%, 28.9%).

Color.regexes.hsl = new RegExp(['^hsl\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsla(H, S%, L%, A), e.g. hsla(100, 40%, 28.9%, 0.5).

Color.regexes.hsla = new RegExp(['^hsla\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsb(H, S%, B%), e.g. hsb(100, 40%, 28.9%).

Color.regexes.hsb = new RegExp(['^hsb\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5).

Color.regexes.hsba = new RegExp(['^hsba\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i');
Color.regexes.hwb = new RegExp(['^hwb\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5).

Color.regexes.hwba = new RegExp(['^hwba\\(', Color.regexes.integer.source, '[deg]*', ',', Color.regexes.percent.source, ',', Color.regexes.percent.source, ',', Color.regexes.decimal.source, '\\)$'].join(Color.regexes.whiteSpace.source), 'i');

Color.fromInt = function (code, bits) {
  var r, g, b, a;

  if (bits == 32) {
    b = (code & 0xff) / 255;
    g = ((code & 0xff00) >> 8) / 255;
    r = ((code & 0xff0000) >> 16) / 255;
    a = (code >> 24) / 255;
  } else if (bits == 24) {
    b = (code & 0xff) / 255;
    g = ((code & 0xff00) >> 8) / 255;
    r = ((code & 0xff0000) >> 16) / 255;
    a = 1;
  } else if (bits == 16) {
    b = (code & 0x1f) / 0x1f;
    g = ((code & 0x7e0) >> 5) / 0x3f;
    b = (code >> 10) / 0x1f;
    a = 1;
  } else if (bits == 8) {
    //gray-scale
    b = (code & 0x3) / 0x3;
    g = ((code & 0x1c) >> 2) / 0x7;
    b = (code >> 5) / 0x7;
    a = 1;
  }

  return new Color([r, g, b, a]);
};

Color.fromRGB = function (r, g, b) {
  return new Color([r, g, b, 1]);
};

Color.fromRGBA = function (r, g, b, a) {
  return new Color([r, g, b, a]);
};

Color.fromHSL = function (h, s, l) {
  var rgba = this.hslaToRGBA([h, s, l, 1]);
  return new Color(rgba);
};

Color.fromHSLA = function (h, s, l, a) {
  var rgba = this.hslaToRGBA([h, s, l, a]);
  return new Color(rgba);
};

Color.fromHSB = function (h, s, b) {
  var rgba = this.hsbaToRGBA([h, s, b, 1]);
  return new Color(rgba);
};

Color.fromHSBA = function (h, s, b, a) {
  var rgba = this.hsbaToRGBA([h, s, b, a]);
  return new Color(rgba);
};

Color.fromHWB = function (h, s, b) {
  var rgba = this.hwbaToRGBA([h, s, b, 1]);
  return new Color(rgba);
};

Color.fromHWBA = function (h, s, b, a) {
  var rgba = this.hwbaToRGBA([h, s, b, a]);
  return new Color(rgba);
};
/**
 * @param {String} text
 * @returns {Color}
 */


Color.parse = function (text) {
  if (this.namedColors[text]) text = this.namedColors[text];
  if (this.nonStandarNamedColors[text]) text = this.nonStandarNamedColors[text];

  if (this.regexes.hex8.test(text)) {
    return this.fromRGBA.apply(this, this.regexes.hex8.exec(text).slice(1).map(function (v) {
      return parseInt(v, 16) / 255;
    }));
  } else if (this.regexes.hex6.test(text)) {
    return this.fromRGB.apply(this, this.regexes.hex6.exec(text).slice(1).map(function (v) {
      return parseInt(v, 16) / 255;
    }));
  } else if (this.regexes.hex4.test(text)) {
    return this.fromRGBA.apply(this, this.regexes.hex4.exec(text).slice(1).map(function (v) {
      return parseInt(v + v, 16) / 255;
    }));
  } else if (this.regexes.hex3.test(text)) {
    return this.fromRGB.apply(this, this.regexes.hex3.exec(text).slice(1).map(function (v) {
      return parseInt(v + v, 16) / 255;
    }));
  } else if (this.regexes.rgba.test(text)) {
    return this.fromRGBA.apply(this, this.regexes.rgba.exec(text).slice(1).map(function (v, i) {
      return i < 3 ? parseFloat(v, 10) / 255 : parseFloat(v, 10);
    }));
  } else if (this.regexes.rgb.test(text)) {
    return this.fromRGB.apply(this, this.regexes.rgb.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / 255;
    }));
  } else if (this.regexes.rgbPercent.test(text)) {
    return this.fromRGB.apply(this, this.regexes.rgbPercent.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / 100;
    }));
  } else if (this.regexes.rgbaPercent.test(text)) {
    return this.fromRGBA.apply(this, this.regexes.rgbaPercent.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i < 3 ? 100 : 1);
    }));
  } else if (this.regexes.hsl.test(text)) {
    return this.fromHSL.apply(this, this.regexes.hsl.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : 100);
    }));
  } else if (this.regexes.hsla.test(text)) {
    return this.fromHSLA.apply(this, this.regexes.hsla.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
    }));
  } else if (this.regexes.hsb.test(text)) {
    return this.fromHSB.apply(this, this.regexes.hsb.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : 100);
    }));
  } else if (this.regexes.hsba.test(text)) {
    return this.fromHSBA.apply(this, this.regexes.hsba.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
    }));
  } else if (this.regexes.hwb.test(text)) {
    return this.fromHWB.apply(this, this.regexes.hwb.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : 100);
    }));
  } else if (this.regexes.hwba.test(text)) {
    return this.fromHWBA.apply(this, this.regexes.hwba.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
    }));
  } else {
    throw new Error("Fail to parse " + text);
  }
};
/***
 * @typedef {"aliceblue"|"antiquewhite"|"aqua"|"aquamarine"|"azure"|"beige"|"bisque"|"black"|"blanchedalmond"|"blue"|"blueviolet"|"brown"|"burlywood"|"cadetblue"|"chartreuse"|"chocolate"|"coral"|"cornflowerblue"|"cornsilk"|"crimson"|"cyan"|"darkblue"|"darkcyan"|"darkgoldenrod"|"darkgray"|"darkgreen"|"darkgrey"|"darkkhaki"|"darkmagenta"|"darkolivegreen"|"darkorange"|"darkorchid"|"darkred"|"darksalmon"|"darkseagreen"|"darkslateblue"|"darkslategray"|"darkslategrey"|"darkturquoise"|"darkviolet"|"deeppink"|"deepskyblue"|"dimgray"|"dimgrey"|"dodgerblue"|"firebrick"|"floralwhite"|"forestgreen"|"fuchsia"|"gainsboro"|"ghostwhite"|"gold"|"goldenrod"|"gray"|"green"|"greenyellow"|"grey"|"honeydew"|"hotpink"|"indianred"|"indigo"|"ivory"|"khaki"|"lavender"|"lavenderblush"|"lawngreen"|"lemonchiffon"|"lightblue"|"lightcoral"|"lightcyan"|"lightgoldenrodyellow"|"lightgray"|"lightgreen"|"lightgrey"|"lightpink"|"lightsalmon"|"lightseagreen"|"lightskyblue"|"lightslategray"|"lightslategrey"|"lightsteelblue"|"lightyellow"|"lime"|"limegreen"|"linen"|"magenta"|"maroon"|"mediumaquamarine"|"mediumblue"|"mediumorchid"|"mediumpurple"|"mediumseagreen"|"mediumslateblue"|"mediumspringgreen"|"mediumturquoise"|"mediumvioletred"|"midnightblue"|"mintcream"|"mistyrose"|"moccasin"|"navajowhite"|"navy"|"oldlace"|"olive"|"olivedrab"|"orange"|"orangered"|"orchid"|"palegoldenrod"|"palegreen"|"paleturquoise"|"palevioletred"|"papayawhip"|"peachpuff"|"peru"|"pink"|"plum"|"powderblue"|"purple"|"red"|"rosybrown"|"royalblue"|"saddlebrown"|"salmon"|"sandybrown"|"seagreen"|"seashell"|"sienna"|"silver"|"skyblue"|"slateblue"|"slategray"|"slategrey"|"snow"|"springgreen"|"steelblue"|"tan"|"teal"|"thistle"|"tomato"|"turquoise"|"violet"|"wheat"|"white"|"whitesmoke"|"yellow"|"yellowgreen"|"transparent"} NamedColor
 */


Color.namedColors = {
  aliceblue: '#f0f8ff',
  antiquewhite: '#faebd7',
  aqua: '#00ffff',
  aquamarine: '#7fffd4',
  azure: '#f0ffff',
  beige: '#f5f5dc',
  bisque: '#ffe4c4',
  black: '#000000',
  blanchedalmond: '#ffebcd',
  blue: '#0000ff',
  blueviolet: '#8a2be2',
  brown: '#a52a2a',
  burlywood: '#deb887',
  cadetblue: '#5f9ea0',
  chartreuse: '#7fff00',
  chocolate: '#d2691e',
  coral: '#ff7f50',
  cornflowerblue: '#6495ed',
  cornsilk: '#fff8dc',
  crimson: '#dc143c',
  cyan: '#00ffff',
  darkblue: '#00008b',
  darkcyan: '#008b8b',
  darkgoldenrod: '#b8860b',
  darkgray: '#a9a9a9',
  darkgreen: '#006400',
  darkgrey: '#a9a9a9',
  darkkhaki: '#bdb76b',
  darkmagenta: '#8b008b',
  darkolivegreen: '#556b2f',
  darkorange: '#ff8c00',
  darkorchid: '#9932cc',
  darkred: '#8b0000',
  darksalmon: '#e9967a',
  darkseagreen: '#8fbc8f',
  darkslateblue: '#483d8b',
  darkslategray: '#2f4f4f',
  darkslategrey: '#2f4f4f',
  darkturquoise: '#00ced1',
  darkviolet: '#9400d3',
  deeppink: '#ff1493',
  deepskyblue: '#00bfff',
  dimgray: '#696969',
  dimgrey: '#696969',
  dodgerblue: '#1e90ff',
  firebrick: '#b22222',
  floralwhite: '#fffaf0',
  forestgreen: '#228b22',
  fuchsia: '#ff00ff',
  gainsboro: '#dcdcdc',
  ghostwhite: '#f8f8ff',
  gold: '#ffd700',
  goldenrod: '#daa520',
  gray: '#808080',
  green: '#008000',
  greenyellow: '#adff2f',
  grey: '#808080',
  honeydew: '#f0fff0',
  hotpink: '#ff69b4',
  indianred: '#cd5c5c',
  indigo: '#4b0082',
  ivory: '#fffff0',
  khaki: '#f0e68c',
  lavender: '#e6e6fa',
  lavenderblush: '#fff0f5',
  lawngreen: '#7cfc00',
  lemonchiffon: '#fffacd',
  lightblue: '#add8e6',
  lightcoral: '#f08080',
  lightcyan: '#e0ffff',
  lightgoldenrodyellow: '#fafad2',
  lightgray: '#d3d3d3',
  lightgreen: '#90ee90',
  lightgrey: '#d3d3d3',
  lightpink: '#ffb6c1',
  lightsalmon: '#ffa07a',
  lightseagreen: '#20b2aa',
  lightskyblue: '#87cefa',
  lightslategray: '#778899',
  lightslategrey: '#778899',
  lightsteelblue: '#b0c4de',
  lightyellow: '#ffffe0',
  lime: '#00ff00',
  limegreen: '#32cd32',
  linen: '#faf0e6',
  magenta: '#ff00ff',
  maroon: '#800000',
  mediumaquamarine: '#66cdaa',
  mediumblue: '#0000cd',
  mediumorchid: '#ba55d3',
  mediumpurple: '#9370db',
  mediumseagreen: '#3cb371',
  mediumslateblue: '#7b68ee',
  mediumspringgreen: '#00fa9a',
  mediumturquoise: '#48d1cc',
  mediumvioletred: '#c71585',
  midnightblue: '#191970',
  mintcream: '#f5fffa',
  mistyrose: '#ffe4e1',
  moccasin: '#ffe4b5',
  navajowhite: '#ffdead',
  navy: '#000080',
  oldlace: '#fdf5e6',
  olive: '#808000',
  olivedrab: '#6b8e23',
  orange: '#ffa500',
  orangered: '#ff4500',
  orchid: '#da70d6',
  palegoldenrod: '#eee8aa',
  palegreen: '#98fb98',
  paleturquoise: '#afeeee',
  palevioletred: '#db7093',
  papayawhip: '#ffefd5',
  peachpuff: '#ffdab9',
  peru: '#cd853f',
  pink: '#ffc0cb',
  plum: '#dda0dd',
  powderblue: '#b0e0e6',
  purple: '#800080',
  red: '#ff0000',
  rosybrown: '#bc8f8f',
  royalblue: '#4169e1',
  saddlebrown: '#8b4513',
  salmon: '#fa8072',
  sandybrown: '#f4a460',
  seagreen: '#2e8b57',
  seashell: '#fff5ee',
  sienna: '#a0522d',
  silver: '#c0c0c0',
  skyblue: '#87ceeb',
  slateblue: '#6a5acd',
  slategray: '#708090',
  slategrey: '#708090',
  snow: '#fffafa',
  springgreen: '#00ff7f',
  steelblue: '#4682b4',
  tan: '#d2b48c',
  teal: '#008080',
  thistle: '#d8bfd8',
  tomato: '#ff6347',
  turquoise: '#40e0d0',
  violet: '#ee82ee',
  wheat: '#f5deb3',
  white: '#ffffff',
  whitesmoke: '#f5f5f5',
  yellow: '#ffff00',
  yellowgreen: '#9acd32',
  transparent: '#00000000'
};
Color.nonStandarNamedColors = {
  night: '#0C090A',
  gunmetal: '#2C3539',
  midnight: '#2B1B17',
  charcoal: '#34282C',
  oil: '#3B3131',
  blackcat: '#413839',
  iridium: '#3D3C3A',
  blackeel: '#463E3F',
  blackcow: '#4C4646',
  graywolf: '#504A4B',
  vampiregray: '#565051',
  graydolphin: '#5C5858',
  carbongray: '#625D5D',
  ashgray: '#666362',
  cloudygray: '#6D6968',
  smokeygray: '#726E6D',
  granite: '#837E7C',
  battleshipgray: '#848482',
  graycloud: '#B6B6B4',
  graygoose: '#D1D0CE',
  platinum: '#E5E4E2',
  metallicsilver: '#BCC6CC',
  bluegray: '#98AFC7',
  raven: '#657383',
  jetgray: '#616D7E',
  mistblue: '#646D7E',
  marbleblue: '#566D7E',
  shipcove: '#737CA1',
  mariner: '#4863A0',
  bluejay: '#2B547E',
  biscay: '#2B3856',
  navyblue: '#000080',
  bluewhale: '#342D7E',
  lapisblue: '#15317E',
  denimdarkblue: '#151B8D',
  earthblue: '#0000A0',
  cobaltblue: '#0020C2',
  blueberryblue: '#0041C2',
  sapphireblue: '#2554C7',
  blueeyes: '#1569C7',
  blueorchid: '#1F45FC',
  bluelotus: '#6960EC',
  lightslateblue: '#736AFF',
  windowsblue: '#357EC7',
  glacialblueice: '#368BC1',
  silkblue: '#488AC7',
  blueivy: '#3090C7',
  bluekoi: '#659EC7',
  columbiablue: '#87AFC7',
  babyblue: '#95B9C7',
  oceanblue: '#2B65EC',
  blueribbon: '#306EFF',
  bluedress: '#157DEC',
  butterflyblue: '#38ACEC',
  iceberg: '#56A5EC',
  crystalblue: '#5CB3FF',
  denimblue: '#79BAEC',
  dayskyblue: '#82CAFF',
  jeansblue: '#A0CFEC',
  blueangel: '#B7CEEC',
  pastelblue: '#B4CFEC',
  seablue: '#C2DFFF',
  coralblue: '#AFDCEC',
  robineggblue: '#BDEDFF',
  palebluelily: '#CFECEC',
  water: '#EBF4FA',
  lightslate: '#CCFFFF',
  lightaquamarine: '#93FFE8',
  electricblue: '#9AFEFF',
  cyanoraqua: '#00FFFF',
  tronblue: '#7DFDFE',
  bluezircon: '#57FEFF',
  bluelagoon: '#8EEBEC',
  celeste: '#50EBEC',
  bluediamond: '#4EE2EC',
  tiffanyblue: '#81D8D0',
  cyanopaque: '#92C7C7',
  bluehosta: '#77BFC7',
  northernlightsblue: '#78C7C7',
  jellyfish: '#46C7C7',
  bluegreen: '#7BCCB5',
  macawbluegreen: '#43BFC7',
  seaturtlegreen: '#438D80',
  greenishblue: '#307D7E',
  grayishturquoise: '#5E7D7E',
  beetlegreen: '#4C787E',
  camouflagegreen: '#78866B',
  sagegreen: '#848b79',
  hazelgreen: '#617C58',
  venomgreen: '#728C00',
  ferngreen: '#667C26',
  darkforestgreen: '#254117',
  mediumforestgreen: '#347235',
  seaweedgreen: '#437C17',
  pinegreen: '#387C44',
  junglegreen: '#347C2C',
  shamrockgreen: '#347C17',
  greenonion: '#6AA121',
  clovergreen: '#3EA055',
  greensnake: '#6CBB3C',
  aliengreen: '#6CC417',
  greenapple: '#4CC417',
  kellygreen: '#4CC552',
  zombiegreen: '#54C571',
  froggreen: '#99C68E',
  greenpeas: '#89C35C',
  dollarbillgreen: '#85BB65',
  iguanagreen: '#9CB071',
  avocadogreen: '#B2C248',
  pistachiogreen: '#9DC209',
  saladgreen: '#A1C935',
  hummingbirdgreen: '#7FE817',
  nebulagreen: '#59E817',
  stoplightgogreen: '#57E964',
  algaegreen: '#64E986',
  jadegreen: '#5EFB6E',
  emeraldgreen: '#5FFB17',
  dragongreen: '#6AFB92',
  mintgreen: '#98FF98',
  greenthumb: '#B5EAAA',
  lightjade: '#C3FDB8',
  teagreen: '#CCFB5D',
  slimegreen: '#BCE954',
  harvestgold: '#EDE275',
  sunyellow: '#FFE87C',
  cornyellow: '#FFF380',
  parchment: '#FFFFC2',
  cream: '#FFFFCC',
  blonde: '#FBF6D9',
  champagne: '#F7E7CE',
  vanilla: '#F3E5AB',
  tanbrown: '#ECE5B6',
  peach: '#FFE5B4',
  mustard: '#FFDB58',
  rubberduckyyellow: '#FFD801',
  brightgold: '#FDD017',
  goldenbrown: '#EAC117',
  macaroniandcheese: '#F2BB66',
  saffron: '#FBB917',
  beer: '#FBB117',
  cantaloupe: '#FFA62F',
  beeyellow: '#E9AB17',
  brownsugar: '#E2A76F',
  deeppeach: '#FFCBA4',
  gingerbrown: '#C9BE62',
  schoolbusyellow: '#E8A317',
  fallleafbrown: '#C8B560',
  orangegold: '#D4A017',
  sand: '#C2B280',
  cookiebrown: '#C7A317',
  caramel: '#C68E17',
  brass: '#B5A642',
  camelbrown: '#C19A6B',
  bronze: '#CD7F32',
  tigerorange: '#C88141',
  cinnamon: '#C58917',
  bulletshell: '#AF9B60',
  copper: '#B87333',
  wood: '#966F33',
  oakbrown: '#806517',
  armybrown: '#827B60',
  sandstone: '#786D5F',
  mocha: '#493D26',
  taupe: '#483C32',
  coffee: '#6F4E37',
  brownbear: '#835C3B',
  reddirt: '#7F5217',
  sepia: '#7F462C',
  orangesalmon: '#C47451',
  rust: '#C36241',
  redfox: '#C35817',
  sedona: '#CC6600',
  papayaorange: '#E56717',
  halloweenorange: '#E66C2C',
  pumpkinorange: '#F87217',
  constructionconeorange: '#F87431',
  sunriseorange: '#E67451',
  mangoorange: '#FF8040',
  basketballorange: '#F88158',
  tangerine: '#E78A61',
  beanred: '#F75D59',
  valentinered: '#E55451',
  shockingorange: '#E55B3C',
  scarlet: '#FF2400',
  rubyred: '#F62217',
  ferrarired: '#F70D1A',
  fireenginered: '#F62817',
  lavared: '#E42217',
  lovered: '#E41B17',
  grapefruit: '#DC381F',
  chestnutred: '#C34A2C',
  cherryred: '#C24641',
  mahogany: '#C04000',
  chillipepper: '#C11B17',
  cranberry: '#9F000F',
  redwine: '#990012',
  burgundy: '#8C001A',
  chestnut: '#954535',
  bloodred: '#7E3517',
  sangria: '#7E3817',
  plumpie: '#7D0541',
  velvetmaroon: '#7E354D',
  plumvelvet: '#7D0552',
  rosyfinch: '#7F4E52',
  puce: '#7F5A58',
  dullpurple: '#7F525D',
  khakirose: '#C5908E',
  pinkbow: '#C48189',
  lipstickpink: '#C48793',
  rose: '#E8ADAA',
  rosegold: '#ECC5C0',
  desertsand: '#EDC9AF',
  pigpink: '#FDD7E4',
  cottoncandy: '#FCDFFF',
  pinkbubblegum: '#FFDFDD',
  flamingopink: '#F9A7B0',
  pinkrose: '#E7A1B0',
  pinkdaisy: '#E799A3',
  cadillacpink: '#E38AAE',
  carnationpink: '#F778A1',
  blushred: '#E56E94',
  watermelonpink: '#FC6C85',
  violetred: '#F6358A',
  pinkcupcake: '#E45E9D',
  pinklemonade: '#E4287C',
  neonpink: '#F535AA',
  dimorphothecamagenta: '#E3319D',
  brightneonpink: '#F433FF',
  tulippink: '#C25A7C',
  roguepink: '#C12869',
  burntpink: '#C12267',
  bashfulpink: '#C25283',
  darkcarnationpink: '#C12283',
  violapurple: '#7E587E',
  purpleiris: '#571B7E',
  plumpurple: '#583759',
  purplemonster: '#461B7E',
  purplehaze: '#4E387E',
  eggplant: '#614051',
  grape: '#5E5A80',
  purplejam: '#6A287E',
  purpleflower: '#A74AC7',
  purpleamethyst: '#6C2DC7',
  purplesagebush: '#7A5DC7',
  lovelypurple: '#7F38EC',
  aztechpurple: '#893BFF',
  jasminepurple: '#A23BEC',
  purpledaffodil: '#B041FF',
  tyrianpurple: '#C45AEC',
  crocuspurple: '#9172EC',
  purplemimosa: '#9E7BFF',
  heliotropepurple: '#D462FF',
  purpledragon: '#C38EC7',
  lilac: '#C8A2C8',
  blushpink: '#E6A9EC',
  mauve: '#E0B0FF',
  wisteriapurple: '#C6AEC7',
  blossompink: '#F9B7FF',
  periwinkle: '#E9CFEC',
  lavenderpinocchio: '#EBDDE2',
  lavenderblue: '#E3E4FA',
  pearl: '#FDEEF4',
  milkwhite: '#FEFCFF'
};
/********************** COLOR CONVERTER *******************/

Color.rgbToHex = function (rgb) {
  return '#' + rgb.slice(0, 3).map(function (c) {
    var res = (c * 255 >> 0).toString(16);
    if (res < 10) res = '0' + res;
    return res.toUpperCase();
  }).join('');
};

Color.rgbaToHex = function (rgb) {
  return '#' + rgb.map(function (c) {
    var res = (c * 255 >> 0).toString(16);
    if (res < 10) res = '0' + res;
    return res.toUpperCase();
  }).join('');
};

Color.hsbaToText = function (hsba) {
  return 'hsba(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%, ' + hsba[3].toFixed(3) + ')';
};

Color.hslaToText = function (hsla) {
  return 'hsla(' + (hsla[0] * 360 >> 0) + 'deg, ' + (hsla[1] * 100 >> 0) + '%, ' + (hsla[2] * 100 >> 0) + '%, ' + hsla[3].toFixed(3) + ')';
};

Color.rgbaToText = function (rgba) {
  return 'rgba(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ', ' + rgba[3].toFixed(3) + ')';
};

Color.hsbToText = function (hsba) {
  return 'hsb(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%)';
};

Color.hslToText = function (hsl) {
  return 'hsl(' + (hsl[0] * 360 >> 0) + 'deg, ' + (hsl[1] * 100 >> 0) + '%, ' + (hsl[2] * 100 >> 0) + '%)';
};

Color.rgbToText = function (rgba) {
  return 'rgb(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ')';
};

Color.hsbaToHSLA = function (hsba) {
  var hue = hsba[0];
  var sat = hsba[1];
  var val = hsba[2]; // Calculate lightness.

  var li = (2 - sat) * val / 2; // Convert saturation.

  if (li !== 0) {
    if (li === 1) {
      sat = 0;
    } else if (li < 0.5) {
      sat = sat / (2 - sat);
    } else {
      sat = sat * val / (2 - li * 2);
    }
  } // Hue and alpha stay the same.


  return [hue, sat, li, hsba[3]];
};

Color.hsbaToRGBA = function (hsba) {
  var hue = hsba[0] * 6; // We will split hue into 6 sectors.

  var sat = hsba[1];
  var val = hsba[2];
  var RGBA = [];

  if (sat === 0) {
    RGBA = [val, val, val, hsba[3]]; // Return early if grayscale.
  } else {
    var sector = Math.floor(hue);
    var tint1 = val * (1 - sat);
    var tint2 = val * (1 - sat * (hue - sector));
    var tint3 = val * (1 - sat * (1 + sector - hue));
    var red, green, blue;

    if (sector === 1) {
      // Yellow to green.
      red = tint2;
      green = val;
      blue = tint1;
    } else if (sector === 2) {
      // Green to cyan.
      red = tint1;
      green = val;
      blue = tint3;
    } else if (sector === 3) {
      // Cyan to blue.
      red = tint1;
      green = tint2;
      blue = val;
    } else if (sector === 4) {
      // Blue to magenta.
      red = tint3;
      green = tint1;
      blue = val;
    } else if (sector === 5) {
      // Magenta to red.
      red = val;
      green = tint1;
      blue = tint2;
    } else {
      // Red to yellow (sector could be 0 or 6).
      red = val;
      green = tint3;
      blue = tint1;
    }

    RGBA = [red, green, blue, hsba[3]];
  }

  return RGBA;
};

Color.hslaToHSBA = function (hsla) {
  var hue = hsla[0];
  var sat = hsla[1];
  var li = hsla[2]; // Calculate brightness.

  var val;

  if (li < 0.5) {
    val = (1 + sat) * li;
  } else {
    val = li + sat - li * sat;
  } // Convert saturation.


  sat = 2 * (val - li) / val; // Hue and alpha stay the same.

  return [hue, sat, val, hsla[3]];
};

Color.hslaToRGBA = function (hsla) {
  var hue = hsla[0] * 6; // We will split hue into 6 sectors.

  var sat = hsla[1];
  var li = hsla[2];
  var RGBA = [];

  if (sat === 0) {
    RGBA = [li, li, li, hsla[3]]; // Return early if grayscale.
  } else {
    // Calculate brightness.
    var val;

    if (li < 0.5) {
      val = (1 + sat) * li;
    } else {
      val = li + sat - li * sat;
    } // Define zest.


    var zest = 2 * li - val; // Implement projection (project onto green by default).

    var hzvToRGB = function hzvToRGB(hue, zest, val) {
      if (hue < 0) {
        // Hue must wrap to allow projection onto red and blue.
        hue += 6;
      } else if (hue >= 6) {
        hue -= 6;
      }

      if (hue < 1) {
        // Red to yellow (increasing green).
        return zest + (val - zest) * hue;
      } else if (hue < 3) {
        // Yellow to cyan (greatest green).
        return val;
      } else if (hue < 4) {
        // Cyan to blue (decreasing green).
        return zest + (val - zest) * (4 - hue);
      } else {
        // Blue to red (least green).
        return zest;
      }
    }; // Perform projections, offsetting hue as necessary.


    RGBA = [hzvToRGB(hue + 2, zest, val), hzvToRGB(hue, zest, val), hzvToRGB(hue - 2, zest, val), hsla[3]];
  }

  return RGBA;
};

Color.rgbaToHSBA = function (rgba) {
  var red = rgba[0];
  var green = rgba[1];
  var blue = rgba[2];
  var val = Math.max(red, green, blue);
  var chroma = val - Math.min(red, green, blue);
  var hue, sat;

  if (chroma === 0) {
    // Return early if grayscale.
    hue = 0;
    sat = 0;
  } else {
    sat = chroma / val;

    if (red === val) {
      // Magenta to yellow.
      hue = (green - blue) / chroma;
    } else if (green === val) {
      // Yellow to cyan.
      hue = 2 + (blue - red) / chroma;
    } else if (blue === val) {
      // Cyan to magenta.
      hue = 4 + (red - green) / chroma;
    }

    if (hue < 0) {
      // Confine hue to the interval [0, 1).
      hue += 6;
    } else if (hue >= 6) {
      hue -= 6;
    }
  }

  return [hue / 6, sat, val, rgba[3]];
};

Color.rgbaToHSLA = function (rgba) {
  var red = rgba[0];
  var green = rgba[1];
  var blue = rgba[2];
  var val = Math.max(red, green, blue);
  var min = Math.min(red, green, blue);
  var li = val + min; // We will halve this later.

  var chroma = val - min;
  var hue, sat;

  if (chroma === 0) {
    // Return early if grayscale.
    hue = 0;
    sat = 0;
  } else {
    if (li < 1) {
      sat = chroma / li;
    } else {
      sat = chroma / (2 - li);
    }

    if (red === val) {
      // Magenta to yellow.
      hue = (green - blue) / chroma;
    } else if (green === val) {
      // Yellow to cyan.
      hue = 2 + (blue - red) / chroma;
    } else if (blue === val) {
      // Cyan to magenta.
      hue = 4 + (red - green) / chroma;
    }

    if (hue < 0) {
      // Confine hue to the interval [0, 1).
      hue += 6;
    } else if (hue >= 6) {
      hue -= 6;
    }
  }

  return [hue / 6, sat, li / 2, rgba[3]];
};

Color.hwbaToHSBA = function (hwba) {
  return [hwba[0], 1 - hwba[1] / (1 - hwba[2]), 1 - hwba[2], hwba[3]];
};

Color.hsbaToHWBA = function (hsla) {
  return [hsla[0], (1 - hsla[1]) * hsla[2], 1 - hsla[2], hsla[3]];
};

Color.rgbaToHWBA = function (rgba) {
  return this.hsbaToHWBA(this.rgbaToHSBA(rgba));
};

Color.hwbaToRGBA = function (hwba) {
  return this.hsbaToRGBA(this.hwbaToHSBA(hwba));
};

/* harmony default export */ const Color_Color = (Color);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Svg.js





var sattachhookCreator = function sattachhookCreator() {
  var res = Svg.ShareInstance._('<image  class="absol-attachhook" style="display:none"  href=""/>');

  res.defineEvent('attached');
  res.on('error', function (event) {
    if (!this._attached && this.isDescendantOf(document.body)) {
      this._attached = true;
      this.emit('attached', event, this);
    }
  });
  res._attached = false;
  Object.defineProperty(res, 'attached', {
    get: function get() {
      return this._attached;
    }
  });

  res.resetState = function () {
    this._attached = false;
    this.src = '';
  };

  return res;
};
/***
 * @extends Dom
 * @param option
 * @constructor
 */


function Svg(option) {
  HTML5_Dom.call(this, option);
  this.defaultTag = 'g';
  this.svgNS = "http://www.w3.org/2000/svg";
  Object.defineProperties(this.creator, {
    sattachhook: {
      set: function set() {//do nothing
      },
      get: function get() {
        return sattachhookCreator;
      }
    }
  });
  delete this.buidDom;
  this.buildSvg = this.create.bind(this);
}

Object.defineProperties(Svg.prototype, Object.getOwnPropertyDescriptors(HTML5_Dom.prototype));

Svg.prototype.fromCode = function (code) {
  code = code.trim();
  var receptacle = document.createElement('div');
  var element;
  var prototypes;

  if (code.startsWith('<svg')) {
    receptacle.innerHTML = code;
    element = receptacle.childNodes[0];
    prototypes = Object.getOwnPropertyDescriptors(HTML5_AElement.prototype);
    Object.defineProperties(element, prototypes);
    HTML5_AElement.call(element);
  } else {
    var svgfragment = '<svg  version="1.1" xmlns="http://www.w3.org/2000/svg">' + code + '</svg>';
    receptacle.innerHTML = '' + svgfragment;
    element = receptacle.childNodes[0].childNodes[0];
    prototypes = Object.getOwnPropertyDescriptors(ElementNS.prototype);
    Object.defineProperties(element, prototypes);
    ElementNS.call(element);
  }

  return element;
};

Svg.prototype.makeNewElement = function (tagName) {
  return document.createElementNS(this.svgNS, tagName);
};

Svg.ShareInstance = new Svg();

Svg.svgToCanvas = function (element) {
  if (typeof element == 'string') {
    element = HTML5_Dom.ShareInstance.$(element);
  }

  if (element && element.tagName == 'svg') {
    var cssTexts = {};

    var depthClone = function depthClone(originElt) {
      var newElt = originElt.cloneNode(); //no deep

      if (!originElt.getAttributeNS) return newElt; //is text node

      var cssRules = HTML5_AElement.prototype.getCSSRules.call(originElt);
      var cssKey = cssRules.reduce(function (ac, rule) {
        for (var i = 0; i < rule.style.length; ++i) {
          ac[rule.style[i]] = true;
        }

        return ac;
      }, {});

      for (var key in cssKey) {
        newElt.style[key] = HTML5_AElement.prototype.getComputedStyleValue.call(originElt, key);
      }

      var children = Array.prototype.map.call(originElt.childNodes, depthClone);

      for (var i = 0; i < children.length; ++i) {
        newElt.appendChild(children[i]);
      }

      return newElt;
    };

    var cloneElement = depthClone(element);

    var renderSpace = HTML5_Dom.ShareInstance._({
      style: {
        // opacity:0,
        zIndex: -1000,
        position: 'fixed',
        top: 0,
        bottom: 0
      }
    }).addTo(document.body);

    renderSpace.addChild(cloneElement);
    var svgCode = renderSpace.innerHTML;
    renderSpace.clearChild();
    var mBlob = new Blob([svgCode], {
      type: "image/svg+xml;charset=utf-8"
    });
    var src = (URL || webkitURL).createObjectURL(mBlob);

    var image = HTML5_Dom.ShareInstance._('img');

    image.attr('src', src).addTo(renderSpace);
    var canvas = document.createElement("canvas");
    renderSpace.addChild(canvas);
    return HTML5_Dom.waitImageLoaded(image).then(function () {
      canvas.width = image.width;
      canvas.height = image.height;
      var context = canvas.getContext("2d");
      context.drawImage(image, 0, 0);
      renderSpace.selfRemove();
      return canvas;
    });
  } else {
    throw new Error('Element must be svg');
  }
};

function svgToRasterImageUrl(element) {
  return Svg.svgToCanvas(element).then(function (canvas) {
    return canvas.toDataURL();
  });
}
Svg.svgToRasterImageUrl = svgToRasterImageUrl;
function svgToExportedString(element) {
  if (typeof element == 'string') {
    element = HTML5_Dom.ShareInstance.$(element);
  }

  if (element && element.tagName == 'svg') {
    var depthClone = function depthClone(originElt) {
      var newElt = originElt.cloneNode(); //no deep

      if (!originElt.getAttributeNS) return newElt; //is text node

      var cssRules = HTML5_AElement.prototype.getCSSRules.call(originElt);
      var cssKey = cssRules.reduce(function (ac, rule) {
        for (var i = 0; i < rule.style.length; ++i) {
          ac[rule.style[i]] = true;
        }

        return ac;
      }, {});

      for (var key in cssKey) {
        newElt.style[key] = HTML5_AElement.prototype.getComputedStyleValue.call(originElt, key);
      }

      var children = Array.prototype.map.call(originElt.childNodes, depthClone);

      for (var i = 0; i < children.length; ++i) {
        newElt.appendChild(children[i]);
      }

      return newElt;
    };

    var cloneElement = depthClone(element);

    var renderSpace = HTML5_Dom.ShareInstance._({
      style: {
        // opacity:0,
        zIndex: -1000,
        position: 'fixed',
        top: 0,
        bottom: 0
      }
    }).addTo(document.body);

    renderSpace.addChild(cloneElement);
    var svgCode = renderSpace.innerHTML;
    renderSpace.selfRemove();
    return svgCode;
  } else {
    throw new Error('Element must be svg');
  }
}
;
Svg.svgToExportedString = svgToExportedString;

function svgToSvgUrl(element) {
  var svg = svgToExportedString(element);
  svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' + svg;
  var blob = new Blob([svg], {
    type: 'image/svg+xml'
  });
  var url = URL.createObjectURL(blob);
  return url;
}

Svg.svgToSvgUrl = svgToSvgUrl;
/***
 *
 * @param {AElement|String | {computeStyle?: boolean, elt: AElement, keepBackgroundColor?:boolean,convertSVG?:boolean}} option
 * @return {Promise<unknown>}
 */

HTML5_Dom.printElement = function (option) {
  var _ = HTML5_Dom.ShareInstance._;
  var $ = HTML5_Dom.ShareInstance.$;
  option = option || {};

  if (typeof option == 'string') {
    option = {
      elt: HTML5_Dom.ShareInstance.$(option)
    };
  } else if (typeof option.elt == 'string') {
    option.elt = $(option.elt);
  } else if (HTML5_Dom.isDomNode(option)) {
    option = {
      elt: option
    };
  }

  option = Object.assign({
    keepBackgroundColor: true,
    convertSVG: false,
    computeStyle: false
  }, option);

  if (HTML5_Dom.isDomNode(option.elt)) {
    var afterCloneCb = function afterCloneCb(originElt, newElt) {
      if (!newElt.tagName) return;
      var tagName = newElt.tagName.toLowerCase();
      if (newElt.getBBox && tagName !== 'svg') return;
      var url, img;
      var needCopyStyle = option.computeStyle;
      var needKeepBackgroundColor = option.keepBackgroundColor;
      if (!newElt.tagName) console.log(newElt.nodeType, newElt);

      if (tagName === 'canvas' || tagName === 'svg' && option.convertSVG) {
        if (tagName === "canvas") {
          url = originElt.toDataURL();
        } else {
          url = svgToSvgUrl(originElt);
        }

        img = _({
          tag: 'img',
          props: {
            src: url
          }
        });
        $(newElt).selfReplace(img);
        newElt = img;
        needCopyStyle = true;
      } else if (tagName === 'script') {
        newElt.remove();
      } else if (tagName === 'img') {
        newElt.setAttribute('src', originElt.src);
      }

      if (needCopyStyle) {
        copyStyleRule(originElt, newElt);
      }

      if (needKeepBackgroundColor) {
        try {
          var bgColor = HTML5_AElement.prototype.getComputedStyleValue.call(originElt, 'background-color');

          if (bgColor) {
            bgColor = Color_Color.parse(bgColor);

            if (bgColor.rgba[3] > 0) {
              newElt.style.setProperty('background-color', bgColor.toString('hex8'), 'important');
            }
          }
        } catch (e) {}
      }

      return newElt;
    };

    var newElt = depthClone(option.elt, afterCloneCb);

    var renderSpace = _({
      style: {
        position: 'fixed',
        top: '0',
        left: '0',
        right: '0',
        bottom: '0',
        overflow: 'auto',
        zIndex: '10',
        opacity: '0',
        visibility: 'hidden'
      }
    });

    $('link', document.head, function (elt) {
      var temp = elt.cloneNode(false); //copy absolute url

      temp.setAttribute('href', elt.href);
      renderSpace.addChild(temp);
    });

    if (!option.computeStyle) {
      $('style', document.head, function (elt) {
        if (elt == HTML5_Dom.$printStyle) return;
        renderSpace.addChild(elt.cloneNode(true));
      });
    }

    renderSpace.addChild(newElt);
    var eltCode = renderSpace.innerHTML;
    renderSpace.clearChild();
    option.title = option.title || ($('title', document.head) || {
      innerHTML: 'absol.js'
    }).innerHTML;
    var htmlCode = ['<ht' + 'ml>', ' <h' + 'ead><title>' + option.title + '</title><meta charset="UTF-8">', '<style>', option.overideStyle ? 'html, body{width:initial !important; height:initial !important; overflow: initial !important; overflow-x: initial !important;overflow-y: initial !important;  }' : '', '@media print {', //still not work
    '    body{', '      -webkit-print-color-adjust: exact;', '       color-adjust: exact;', '    } ', '    div, tr, td, table{', '    }', '  }', 'div, table, tr, td{', '    page-break-inside: initial;', '    page-break-before: avoid;', '    page-break-after: avoid;', '}', option.extendCss || '', '</style>', '</he' + 'ad>', '<bod' + 'y>', eltCode, '<scr' + 'ipt>' + (option.extendScript || '') + '</scri' + 'pt>', //browser parse  script tag fail
    '<scr' + 'ipt>setTimeout(function(){ window.print();},1000);</scri' + 'pt>', //browser parse  script tag fail
    '</bod' + 'y>', '</ht' + 'ml>'].join('\n');
    var blob = new Blob([htmlCode], {
      type: 'text/html; charset=UTF-8'
    });
    renderSpace.addTo(document.body);

    var iframe = _('iframe').attr('src', URL.createObjectURL(blob)).addStyle({
      width: '100%',
      height: '100%'
    }).addTo(renderSpace);

    return new Promise(function (rs, rj) {
      function waitLoad() {
        if (iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.body) {
          if (typeof option.onLoad == 'function') option.onLoad();
          iframe.contentWindow.focus();
          setTimeout(function () {
            function waitFocusBack() {
              if (!document.hasFocus || document.hasFocus()) {
                renderSpace.remove();
                if (typeof option.onFinish == 'function') option.onFinish();
                rs();
              } else {
                setTimeout(waitFocusBack, 300);
              }
            }

            waitFocusBack();
          }, 4000);
        } else setTimeout(waitLoad, 1000);
      }

      waitLoad();
    });
  } else {
    throw new Error('Invalid param!');
  }
};

/* harmony default export */ const HTML5_Svg = (Svg);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/random.js
/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function randomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}
/**
 * Returns a random integer between min (inclusive) and max (inclusive)
 * Using Math.round() will give you a non-uniform distribution!
 */

function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
function randomPick(arr) {
  var id = randomInt(0, arr.length - 1);
  return arr[id];
}
;// CONCATENATED MODULE: ./node_modules/absol/src/String/stringGenerate.js

var identCharacters = function () {
  var chars = 'qwertyuiopasdfghjklzxcvbnm';
  chars = chars + chars.toUpperCase();
  var num = '0123456789';
  var spect = '_';
  return (chars + spect + num).split('');
}();
function randomIdent(length) {
  if (!(length > 0)) length = 4;
  var factor = identCharacters;
  return [factor[Math.random() * (factor.length - 10) >> 0]].concat(Array(length - 1).fill('').map(function () {
    return factor[Math.random() * factor.length >> 0];
  })).join('');
}
function parallelMatch(a, b) {
  var l = Math.min(a.length, b.length);
  var res = 0;

  for (var i = 0; i < l; ++i) {
    if (a[i] == b[i]) ++res;
  }

  return res;
}
var ipsumLoremWord = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo', 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate', 'velit', 'esse', 'cillum', 'eu', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident', 'sunt', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum', 'perspiciatis', 'unde', 'omnis', 'iste', 'natus', 'error', 'voluptatem', 'accusantium', 'doloremque', 'laudantium', 'totam', 'rem', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', 'illo', 'inventore', 'veritatis', 'quasi', 'architecto', 'beatae', 'vitae', 'dicta', 'explicabo', 'nemo', 'ipsam', 'quia', 'voluptas', 'aspernatur', 'aut', 'odit', 'fugit', 'consequuntur', 'magni', 'dolores', 'eos', 'ratione', 'sequi', 'nesciunt', 'neque', 'porro', 'quisquam', 'dolorem', 'adipisci', 'numquam', 'eius', 'modi', 'tempora', 'incidunt', 'magnam', 'aliquam', 'quaerat', 'minima', 'nostrum', 'exercitationem', 'ullam', 'corporis', 'suscipit', 'laboriosam', 'aliquid', 'commodi', 'consequatur', 'autem', 'vel', 'eum', 'iure', 'quam', 'nihil', 'molestiae', 'illum', 'quo', 'at', 'vero', 'accusamus', 'iusto', 'odio', 'dignissimos', 'ducimus', 'blanditiis', 'praesentium', 'voluptatum', 'deleniti', 'atque', 'corrupti', 'quos', 'quas', 'molestias', 'excepturi', 'occaecati', 'cupiditate', 'provident', 'similique', 'mollitia', 'animi', 'dolorum', 'fuga', 'harum', 'quidem', 'rerum', 'facilis', 'expedita', 'distinctio', 'nam', 'libero', 'tempore', 'sum', 'soluta', 'nobis', 'eligendi', 'optio', 'cumque', 'impedit', 'minus', 'quod', 'maxime', 'placeat', 'facere', 'possimus', 'assumenda', 'repellendus', 'temporibus', 'quibusdam', 'officiis', 'debitis', 'necessitatibus', 'saepe', 'eveniet', 'voluptates', 'repudiandae', 'recusandae', 'itaque', 'earum', 'hic', 'tenetur', 'a', 'sapiente', 'delectus', 'reiciendis', 'voluptatibus', 'maiores', 'alias', 'perferendis', 'doloribus', 'asperiores', 'repellat', 'integer', 'nec', 'praesent', 'cursus', 'ante', 'dapibus', 'diam', 'sem', 'nibh', 'elementum', 'imperdiet', 'sagittis', 'mauris', 'fusce', 'tellus', 'augue', 'semper', 'porta', 'massa', 'vestibulum', 'lacinia', 'arcu', 'eget', 'class', 'aptent', 'taciti', 'sociosqu', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos', 'himenaeos', 'curabitur', 'sodales', 'ligula', 'dignissim', 'nunc', 'tortor', 'pellentesque', 'aenean', 'scelerisque', 'maecenas', 'mattis', 'convallis', 'tristique', 'proin', 'egestas', 'porttitor', 'morbi', 'lectus', 'risus', 'iaculis', 'luctus', 'ac', 'turpis', 'aliquet', 'metus', 'ullamcorper', 'tincidunt', 'euismod', 'quisque', 'volutpat', 'condimentum', 'urna', 'facilisi', 'fringilla', 'suspendisse', 'potenti', 'feugiat', 'mi', 'sapien', 'etiam', 'ultrices', 'justo', 'lacus', 'pharetra', 'auctor', 'interdum', 'primis', 'faucibus', 'orci', 'posuere', 'cubilia', 'curae', 'molestie', 'dui', 'blandit', 'congue', 'pede', 'facilisis', 'laoreet', 'donec', 'viverra', 'malesuada', 'pulvinar', 'sollicitudin', 'cras', 'nisl', 'felis', 'venenatis', 'ultricies', 'accumsan', 'pretium', 'fermentum', 'nullam', 'purus', 'mollis', 'vivamus', 'consectetuer'];
function randomWord() {
  var arr = ipsumLoremWord;
  var idx = randomInt(0, arr.length - 1);
  return arr[idx];
}
function randomPhrase(limitLenght) {
  if (!limitLenght) limitLenght = 50;
  var length = Math.ceil(Math.random() * limitLenght / 7);
  return new Array(length).fill(null).map(randomWord).reduce(function (ac, cr) {
    if (ac.length + cr.length < limitLenght) {
      ac.parts.push(cr);
    }

    return ac;
  }, {
    parts: [],
    length: 0
  }).parts.join(' ');
}
function randomSentence(limitLenght) {
  if (!limitLenght) limitLenght = 300;
  var length = Math.ceil(Math.random() * limitLenght / 70);
  var res = new Array(length).fill(null).map(randomPhrase).reduce(function (ac, cr) {
    if (ac.length + cr.length < limitLenght) {
      ac.parts.push(cr);
    }

    return ac;
  }, {
    parts: [],
    length: 0
  }).parts.join(', ');

  if (Math.random() < 0.03) {
    res = res.replace(/\,/i, ':');
  }

  res = res.replace(/^./, function (x) {
    return x.toUpperCase();
  });
  res += '.';
  return res;
}
function randomParagraph(limitLenght) {
  if (!limitLenght) limitLenght = 1000;
  var length = Math.ceil(Math.random() * limitLenght / 200);
  return new Array(length).fill(null).map(randomSentence).reduce(function (ac, cr) {
    if (ac.length + cr.length < limitLenght) {
      ac.parts.push(cr);
    }

    return ac;
  }, {
    parts: [],
    length: 0
  }).parts.join(' ');
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/IFrameBridge.js


/**
 *
 * @param {Worker} host
 */

function IFrameBridge(host, origin) {
  HTML5_EventEmitter.call(this);
  this.detach();
  this.origin = origin;
  if (host) this.attach(host);
  this.__azarResolveCallbacks = {};
  this.__azarRejectCallbacks = {};
}

IFrameBridge.prototype.attach = function (host) {
  this.host = host;

  if (this.host.addEventListener) {
    this.host.addEventListener("message", this.__azarMessageListener.bind(this), false);
  } else if (this.host.attachEvent) {
    this.host.attachEvent("onmessage", this.__azarMessageListener.bind(this));
  } else {
    this.host.onmessage = this.__azarMessageListener.bind(this);
  }

  this.__IFrameBridge_resolve();
};

IFrameBridge.prototype.detach = function () {
  this.sync = new Promise(function (resolve) {
    this.__IFrameBridge_resolve = resolve;
  }.bind(this));
};

IFrameBridge.fromIFrame = function (iframe) {
  var host = iframe.contentWindow || iframe.contentDocument;
  var src = iframe.src;
  var rootOrigin = location.origin;
  var iframeOrigin = src.match(/^(http|https):\/\/[^/]+/);

  if (iframeOrigin) {
    iframeOrigin = iframeOrigin[0];
  } else {
    iframeOrigin = rootOrigin;
  }

  if (host) return new IFrameBridge(host, iframeOrigin);else {
    var result = new IFrameBridge(undefined, iframeOrigin);

    var attachedHost = function attachedHost() {
      var host = iframe.contentWindow || iframe.contentDocument;
      result.attach(host);
    };

    if (iframe.addEventListener) {
      iframe.addEventListener("load", attachedHost);
    } else {
      iframe.attachEvent("onload", attachedHost);
    }

    return result;
  }
};

IFrameBridge.getInstance = function () {
  if (!IFrameBridge.shareInstance) {
    var origin = location.origin;
    var rootOrigin = IFrameBridge.getParentUrl().match(/^(http|https):\/\/[^/]+/);

    if (rootOrigin) {
      rootOrigin = rootOrigin[0];
    } else {
      rootOrigin = origin;
    } // IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin == origin? undefined: "*" || rootOrigin );


    IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin);
  }

  return IFrameBridge.shareInstance;
};

Object.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(HTML5_EventEmitter.prototype));
IFrameBridge.prototype.constructor = IFrameBridge;

IFrameBridge.isInIFrame = function () {
  return top !== self;
};

IFrameBridge.getParentUrl = function () {
  var parentUrl = window.location != window.parent.location ? document.referrer : document.location.href;
  return parentUrl;
};

IFrameBridge.prototype.__azarMessageListener = function (event) {
  this.__azarHandleData(event.data);
};

IFrameBridge.prototype.__azarHandleData = function (data) {
  if (data.type) {
    if (data.type == "INVOKE") {
      try {
        var result = this.__azarSelfInvoke(data.name, data.params);

        if (result && typeof result.then == 'function') {
          result.then(function (result) {
            this.__azarResolve(data.taskId, result);
          }.bind(this))["catch"](function (err) {
            console.error(err);

            this.__azarResolve(data.taskId, null, err);
          }.bind(this));
        } else {
          this.__azarResolve(data.taskId, result);
        }
      } catch (err) {
        console.error(err);

        this.__azarResolve(data.taskId, null, err);
      }
    } else if (data.type == "INVOKE_RESULT") {
      if (this.__azarResolveCallbacks[data.taskId]) {
        if (data.error) {
          this.__azarRejectCallbacks[data.taskId](data.error);
        } else {
          this.__azarResolveCallbacks[data.taskId](data.result);
        }

        delete this.__azarResolveCallbacks[data.taskId];
        delete this.__azarRejectCallbacks[data.taskId];
      }
    } else if (data.type == "EMIT") {
      this.fire.apply(this, data.params);
    } else this.fire('message', data, this);
  }
};

IFrameBridge.prototype.__azarResolve = function (taskId, result, error) {
  var data = {
    type: "INVOKE_RESULT",
    taskId: taskId,
    result: result,
    error: error
  };

  if (this.origin) {
    this.host.postMessage(data, this.origin);
  } else {
    this.host.postMessage(data);
  }
};

IFrameBridge.prototype.__azarSelfInvoke = function (name, params) {
  if (typeof this[name] == 'function') {
    return this[name].apply(this, params);
  } else {
    return this[name];
  }
};

IFrameBridge.prototype.emit = function () {
  var params = [];
  params.push.apply(params, arguments);
  this.sync.then(function () {
    var data = {
      type: "EMIT",
      params: params
    };

    if (this.origin) {
      this.host.postMessage(data, this.origin);
    } else {
      this.host.postMessage(data);
    }
  }.bind(this));
  return this;
};

IFrameBridge.prototype.invoke = function (name) {
  var params = [];
  params.push.apply(params, arguments);
  params.shift();
  return this.sync.then(function () {
    var indent = randomIdent(32);
    var data = {
      type: 'INVOKE',
      params: params,
      taskId: indent,
      name: name
    };

    if (this.origin) {
      this.host.postMessage(data, this.origin);
    } else {
      this.host.postMessage(data);
    }

    return new Promise(function (resolve, reject) {
      this.__azarResolveCallbacks[indent] = resolve;
      this.__azarRejectCallbacks[indent] = reject;
    }.bind(this));
  }.bind(this));
};

IFrameBridge.prototype.importScriptURLs = function () {
  return this.invoke.apply(this, ['_receiveScriptURLs'].concat(Array.prototype.slice.call(arguments)));
};

IFrameBridge.prototype.importScript = function (code) {
  var blob = new Blob([code], {
    type: 'application/javascript'
  });
  var url = URL.createObjectURL(blob);
  return this.importScriptURLs(url);
};

IFrameBridge.prototype.createMethod = function (name, fx) {
  this[name] = function () {
    return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments)));
  };

  return this.invoke.apply(this, ['_receiveMethod', name, fx.toString()]);
};

IFrameBridge.prototype._receiveScriptURLs = function () {
  if (self.importScripts) {
    self.importScripts.apply(self, arguments);
  }
};

IFrameBridge.prototype._receiveMethod = function (name, code) {
  this[name] = new Function('return ' + code)();
};

/* harmony default export */ const Network_IFrameBridge = (IFrameBridge);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/document.tpl
/* harmony default export */ const templates_document = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:document\n  xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"\n  xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"\n  xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n  xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"\n  xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n  xmlns:ns6=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\"\n  xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"\n  xmlns:ns8=\"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing\"\n  xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\"\n  xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"\n  xmlns:ns11=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\"\n  xmlns:dsp=\"http://schemas.microsoft.com/office/drawing/2008/diagram\"\n  xmlns:ns13=\"urn:schemas-microsoft-com:office:excel\"\n  xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n  xmlns:v=\"urn:schemas-microsoft-com:vml\"\n  xmlns:w10=\"urn:schemas-microsoft-com:office:word\"\n  xmlns:ns17=\"urn:schemas-microsoft-com:office:powerpoint\"\n  xmlns:odx=\"http://opendope.org/xpaths\"\n  xmlns:odc=\"http://opendope.org/conditions\"\n  xmlns:odq=\"http://opendope.org/questions\"\n  xmlns:odi=\"http://opendope.org/components\"\n  xmlns:odgm=\"http://opendope.org/SmartArt/DataHierarchy\"\n  xmlns:ns24=\"http://schemas.openxmlformats.org/officeDocument/2006/bibliography\"\n  xmlns:ns25=\"http://schemas.openxmlformats.org/drawingml/2006/compatibility\"\n  xmlns:ns26=\"http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas\">\n  <w:body>\n    <w:altChunk r:id=\"htmlChunk\" />\n    <w:sectPr>\n      <w:pgSz w:w=\"{{ pageSetting.width }}\" w:h=\"{{ pageSetting.height }}\" w:orient=\"{{ pageSetting.orient }}\" />\n      <w:pgMar w:top=\"{{ pageSetting.margins.top }}\"\n               w:right=\"{{ pageSetting.margins.right }}\"\n               w:bottom=\"{{ pageSetting.margins.bottom }}\"\n               w:left=\"{{ pageSetting.margins.left }}\"\n               w:header=\"{{ pageSetting.margins.header }}\"\n               w:footer=\"{{ pageSetting.margins.footer }}\"\n               w:gutter=\"{{ pageSetting.margins.gutter }}\"/>\n    </w:sectPr>\n  </w:body>\n</w:document>\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/mht_document.tpl
/* harmony default export */ const mht_document = ("MIME-Version: 1.0\nContent-Type: multipart/related;\n    type=\"text/html\";\n    boundary=\"----=mhtDocumentPart\"\n\n\n------=mhtDocumentPart\nContent-Type: text/html;\n    charset=\"utf-8\"\nContent-Transfer-Encoding: quoted-printable\nContent-Location: file:///C:/fake/document.html\n\n{{ htmlSource }}\n\n{{ contentParts }}\n\n------=mhtDocumentPart--\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/mht_part.tpl
/* harmony default export */ const mht_part = ("------=mhtDocumentPart\nContent-Type: {{ contentType }}\nContent-Transfer-Encoding: {{ contentEncoding }}\nContent-Location: {{ contentLocation }}\n\n{{ encodedContent }}\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/DocxTpl.js




/* harmony default export */ const DocxTpl = ({
  document: new Function('pageSetting', 'return ' + JSMaker_TemplateString.parse(templates_document).toJSCode()),
  mht_document: new Function('htmlSource', 'contentParts', 'return ' + JSMaker_TemplateString.parse(mht_document).toJSCode()),
  mht_part: new Function('contentType', 'contentEncoding', 'contentLocation', 'encodedContent', 'return ' + JSMaker_TemplateString.parse(mht_part).toJSCode())
});
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/content_types.xml
/* harmony default export */ const content_types = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n  <Default Extension=\"rels\" ContentType=\n    \"application/vnd.openxmlformats-package.relationships+xml\" />\n  <Override PartName=\"/word/document.xml\" ContentType=\n    \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/>\n  <Override PartName=\"/word/afchunk.mht\" ContentType=\"message/rfc822\"/>\n</Types>\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/rels.xml
/* harmony default export */ const rels = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n  <Relationship\n      Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\"\n      Target=\"/word/document.xml\" Id=\"R09c83fafc067488e\" />\n</Relationships>\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/document.xml.rels
/* harmony default export */ const document_xml = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\"\n    Target=\"/word/afchunk.mht\" Id=\"htmlChunk\" />\n</Relationships>\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/JSDocx.js






var JSZip = window.JSZip;

function JSDocx(props) {
  if (props.blob) this.blob = props.blob;
  if (props.blob) this.buffer = props.buffer;
}

JSDocx.prototype.saveAs = function (fileName) {
  var src;

  if (this.blob) {
    src = (URL || webkitURL).createObjectURL(this.blob);
  } else if (this.buffer) {
    src = "data:application/octet-stream," + encodeURIComponent(this.buffer);
  }

  var element = document.createElement('a');
  element.setAttribute('href', src);
  element.setAttribute('download', fileName);
  element.style.display = 'none';
  document.body.appendChild(element);
  element.click();
  document.body.removeChild(element);
};

JSDocx._prepareImageParts = function (htmlSource) {
  var imageContentParts = [];
  var inlinedSrcPattern = /\"data:(\w+\/\w+);(\w+),(\S+)\"/g;

  var inlinedReplacer = function inlinedReplacer(match, contentType, contentEncoding, encodedContent) {
    var index = imageContentParts.length;
    var extension = contentType.split('/')[1];
    var contentLocation = "file:///C:/fake/image" + index + "." + extension; // mht_part: new Function('contentType', 'contentEncoding', 'contentLocation', 'encodedContent', 'return ' + TemplateString.parse(mht_pathTpl).toJSCode())

    imageContentParts.push(DocxTpl.mht_part(contentType, contentEncoding, contentLocation, encodedContent));
    return "\"" + contentLocation + "\"";
  };

  if (typeof htmlSource === 'string') {
    if (!/<img/g.test(htmlSource)) {
      return {
        htmlSource: htmlSource,
        imageContentParts: imageContentParts
      };
    }

    htmlSource = htmlSource.replace(inlinedSrcPattern, inlinedReplacer);
    return {
      htmlSource: htmlSource,
      imageContentParts: imageContentParts
    };
  } else {
    throw new Error("Not a valid source provided!");
  }
};

JSDocx._getMHTdocument = function (htmlSource) {
  var imageContentParts, _ref;

  _ref = this._prepareImageParts(htmlSource), htmlSource = _ref.htmlSource, imageContentParts = _ref.imageContentParts;
  htmlSource = htmlSource.replace(/\=/g, '=3D');
  return DocxTpl.mht_document(htmlSource, imageContentParts.join('\n'));
};
/**
 * @param {JSZip} zip
 */


JSDocx._generateDocument = function (zip) {
  return zip.generateAsync({
    type: 'arraybuffer'
  }).then(function (buffer) {
    var props = {};
    if (__webpack_require__.g.Blob) props.blob = new Blob([buffer], {
      type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    });else if (__webpack_require__.g.Buffer) props.buffer = new Buffer(new Uint8Array(buffer));else throw new Error("Neither Blob nor Buffer are accessible in this environment. " + "Consider adding Blob.js shim");
    return new JSDocx(props);
  });
};

JSDocx._renderDocumentFile = function (pageSetting) {
  return DocxTpl.document(pageSetting);
};

JSDocx._createPageSetting = function (documentOptions) {
  documentOptions = documentOptions || {};
  var pageSetting = {
    margins: {
      top: 1440,
      right: 1440,
      bottom: 1440,
      left: 1440,
      header: 720,
      footer: 720,
      gutter: 0
    }
  };

  if (documentOptions.orientation == 'landscape') {
    Object.assign(pageSetting, {
      height: 12240,
      width: 15840,
      orient: 'landscape'
    });
  } else {
    Object.assign(pageSetting, {
      width: 12240,
      height: 15840,
      orient: 'portrait'
    });
  }

  if (documentOptions.margins) {
    Object.assign(pageSetting, documentOptions.margins);
  }

  return pageSetting;
};

JSDocx._addFiles = function (zip, htmlSource, pageSetting) {
  zip.file('[Content_Types].xml', content_types);
  zip.folder('_rels').file('.rels', rels);
  zip.folder('word').file('document.xml', DocxTpl.document(pageSetting));
  zip.folder('word').file('document.xml', JSDocx._renderDocumentFile(pageSetting)).file('afchunk.mht', JSDocx._getMHTdocument(htmlSource)).folder('_rels').file('document.xml.rels', document_xml);
  return zip;
};

JSDocx.fromHTMLCode = function (html, options) {
  var zip = new JSZip();

  JSDocx._addFiles(zip, html, JSDocx._createPageSetting(options));

  return JSDocx._generateDocument(zip);
};

JSDocx.fromHTMLElement = function (element, options, getOuter, isWorkingElement) {
  if (typeof element == 'string') {
    element = HTML5_Dom.ShareInstance.$(element);
  }

  if (!element) throw new Error('@param element must be HTMLElement');
  var preRender;

  if (!isWorkingElement) {
    preRender = HTML5_Dom.ShareInstance._('div');
    preRender.addStyle({
      position: 'fixed',
      top: '0',
      left: '0',
      zIndex: '-10000',
      opacity: '0'
    }).addTo(document.body);
    Array.prototype.forEach.call(element.childNodes, function (e) {
      if (e.tagName != 'script') preRender.addChild(e.cloneNode(true));
    });
  } else {
    preRender = element;
  }

  HTML5_Dom.ShareInstance.$('script', preRender, function (e) {
    e.parentElement.removeChild(e);
    return false;
  });
  var imageTask = [];
  HTML5_Dom.ShareInstance.$('img', preRender, function (e) {
    if (e.src && !e.src.match(/data:/)) {
      var task = HTML5_Dom.imageToCanvas(e).then(function (canvas) {
        var newSrc = canvas.toDataURL();
        e.src = newSrc;
      });
      imageTask.push(task);
    }

    return false;
  });
  HTML5_Dom.ShareInstance.$('svg', preRender, function (e) {
    var task = HTML5_Svg.svgToCanvas(e).then(function (canvas) {
      var newSrc = canvas.toDataURL();

      var image = HTML5_Dom.ShareInstance._('img');

      image.src = newSrc;
      HTML5_Dom.ShareInstance.$(e).selfReplace(image);
    });
    imageTask.push(task);
    return false;
  });
  return Promise.all(imageTask).then(function () {
    var code;

    if (getOuter) {
      code = preRender.outerHTML;

      if (!code) {
        var temp = document.createElement('div');
        temp.addChild(preRender);
        code = temp.innerHTML;
      }
    } else {
      code = preRender.innerHTML;
    }

    return JSDocx.fromHTMLCode(code, options);
  });
};

/* harmony default export */ const JSDocx_JSDocx = (JSDocx);
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/Broadcast.js

 // it can be replace BroadcastChanel

function Broadcast(channel, id) {
  HTML5_EventEmitter.call(this);
  this.channel = channel;
  this.id = id;
  this._ev_message = this._ev_message.bind(this);
  this._ev_storage = this._ev_storage.bind(this);

  this._init();
}

Object.defineProperties(Broadcast.prototype, Object.getOwnPropertyDescriptors(HTML5_EventEmitter.prototype));
Broadcast.prototype.constructor = Broadcast;

Broadcast.prototype._init = function () {
  if ('BroadcastChannel' in window) {
    this.nativeBroadcastChannel = new BroadcastChannel(this.channel);
    this.nativeBroadcastChannel.onmessage = this._ev_message;
  } else if ('localStorage' in window) {
    if (!('onstorage' in window)) console.warn("Your browser may not support onstorage event.");

    if (window.addEventListener) {
      window.addEventListener('storage', this._ev_storage);
    } else {
      window.attachEvent('onstorage', this._ev_storage);
    }

    this.storageKey = '_broadcast_' + this.channel;
  } else {
    throw new Error("Your browser can not support broadcast!");
  }
};

Broadcast.prototype._ev_storage = function (event) {
  if (event.key == this.storageKey) {
    var data = JSON.parse(event.newValue);
    if (data.sourceId != this.id) this.handleMessData(data.message);
  }
};

Broadcast.prototype._ev_message = function (event) {
  var data = event.data;
  this.handleMessData(data);
};

Broadcast.prototype.handleMessData = function (data) {
  if (data.type == "EMIT") this.fire.apply(this, data.params);
  if (typeof this.onmessage == 'function') this.onmessage(event);
};
/**
 * @param {Array<*>}
 */


Broadcast.prototype.emit = function () {
  var params = Array.prototype.slice.call(arguments);
  this.postMessage({
    type: "EMIT",
    params: params,
    sourceId: this.id
  });
};
/**
 * @param {*} message
 */


Broadcast.prototype.postMessage = function (message) {
  if (this.nativeBroadcastChannel) {
    this.nativeBroadcastChannel.postMessage(message);
  } else {
    localStorage.setItem(this.storageKey, JSON.stringify({
      message: message,
      sourceId: this.id
    }));
  }
};

Broadcast.prototype.onmessage = null;

Broadcast.prototype.close = function () {
  if (this.nativeBroadcastChannel) this.nativeBroadcastChannel.close();
};

/* harmony default export */ const Network_Broadcast = (Broadcast);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Text.js

function getTextNodesIn(node) {
  var textNodes = [];

  if (node.nodeType == 3) {
    textNodes.push(node);
  } else {
    var children = node.childNodes;

    for (var i = 0, len = children.length; i < len; ++i) {
      textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
    }
  }

  return textNodes;
}
/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} start 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */

function setSelectionRangeStart(el, range, start) {
  if (start > 0) {
    if (el.nodeType == Node.TEXT_NODE) {
      var text = el.data;

      if (start <= text.length) {
        range.setStart(el, start);
        return -1;
      } else return text.length;
    }

    if (el.tagName.toLowerCase() == 'br') {
      return 0;
    } else {
      var delta = 0;
      var i = 0;
      var textLength = 0;
      var newLine = false;

      while (delta >= 0 && i < el.childNodes.length) {
        var childElt = el.childNodes[i];

        if (newLine) {
          newLine = false;
          ++textLength;
        }

        delta = setSelectionRangeStart(childElt, range, start - textLength);
        if (delta >= 0) textLength += delta;

        if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) {
          newLine = true;
        }

        ++i;
      }

      if (delta >= 0) return textLength;
      return -1;
    }
  } else {
    range.setStart(el, 0);
    return -1;
  }
}
/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} end 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */

function setSelectionRangeEnd(el, range, end) {
  if (end > 0) {
    if (el.nodeType == Node.TEXT_NODE) {
      var text = el.data;

      if (end <= text.length) {
        range.setEnd(el, end);
        return -1;
      } else return text.length;
    }

    if (el.tagName.toLowerCase() == 'br') {
      return 0;
    } else {
      var delta = 0;
      var i = 0;
      var textLength = 0;
      var newLine = false;

      while (delta >= 0 && i < el.childNodes.length) {
        var childElt = el.childNodes[i];

        if (newLine) {
          newLine = false;
          ++textLength;
        }

        delta = setSelectionRangeEnd(childElt, range, end - textLength);
        if (delta >= 0) textLength += delta;

        if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) {
          newLine = true;
        }

        ++i;
      }

      if (delta >= 0) return textLength;
      return -1;
    }
  } else {
    range.setEnd(el, 0);
    return -1;
  }
}
function setSelectionRange(el, start, end) {
  if (document.createRange && window.getSelection) {
    var range = document.createRange();
    range.selectNodeContents(el);
    var delta;

    if (start >= 0) {
      delta = setSelectionRangeStart(el, range, start);
      if (delta >= 0) range.setStart(el, el.childNodes.length);
    } else {
      start = 0;
      range.setStart(el, 0);
    }

    if (end >= start) {
      delta = setSelectionRangeEnd(el, range, end);
      if (delta >= 0) range.setEnd(el, el.childNodes.length);
    }

    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
  } else if (document.selection && document.body.createTextRange) {
    var textRange = document.body.createTextRange();
    textRange.moveToElementText(el);
    textRange.collapse(true);
    textRange.moveEnd("character", end);
    textRange.moveStart("character", start);
    textRange.select();
  }
}
function getTextIn(e) {
  if (e.nodeType == Node.TEXT_NODE) {
    return e.data;
  }

  if (e.tagName && e.tagName.toLowerCase() == 'br') return '';
  var texts = [];
  var newLine = false;

  for (var i = 0; i < e.childNodes.length; ++i) {
    if (newLine) {
      newLine = false;
      texts.push('\n');
    }

    var childElt = e.childNodes[i];
    texts.push(getTextIn(childElt));

    if (childElt.nodeType != Node.TEXT_NODE && (window.getComputedStyle(childElt).display == 'block' || childElt.tagName.toLowerCase() == 'br')) {
      newLine = true;
    }
  }

  return texts.join('');
}
function textToNodes(text) {
  var lines = text.split(/\r?\n/);
  return lines.map(function (text) {
    if (text.length == 0) {
      return HTML5_Dom.ShareInstance._({
        child: {
          tag: 'br'
        }
      });
    } else {
      return HTML5_Dom.ShareInstance._({
        child: {
          text: text
        }
      });
    }
  });
}
/*
** Returns the caret (cursor) position of the specified text field (oField).
** Return value range is 0-oField.value.length.
*/

function Text_getCaretPosition(oField) {
  // Initialize
  var iCaretPos = 0; // IE Support

  if (document.selection) {
    // Set focus on the element
    oField.focus(); // To get cursor position, get empty selection range

    var oSel = document.selection.createRange(); // Move selection start to 0 position

    oSel.moveStart('character', -oField.value.length); // The caret position is selection length

    iCaretPos = oSel.text.length;
  } // Firefox support
  else if (oField.selectionStart || oField.selectionStart == '0') iCaretPos = oField.selectionDirection == 'backward' ? oField.selectionStart : oField.selectionEnd; // Return results


  return iCaretPos;
}
function setCaretPosition(oField, caretPos) {
  if (oField.createTextRange) {
    var range = oField.createTextRange();
    range.move('character', caretPos);
    range.select();
  } else {
    if (oField.selectionStart) {
      oField.focus();
      oField.setSelectionRange(caretPos, caretPos);
    } else oField.focus();
  }
}
function Text_measureText(text, font) {
  // re-use canvas object for better performance
  var canvas = Text_measureText.canvas || (Text_measureText.canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  if (font) context.font = font;
  var metrics = context.measureText(text);
  return metrics;
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Converter/file.js
function blobToFile(theBlob, fileName) {
  return new File([theBlob], fileName);
}
function dataURItoBlob(dataURI) {
  var byteString = atob(dataURI.split(',')[1]);
  var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
  var ab = new ArrayBuffer(byteString.length);
  var ia = new Uint8Array(ab);

  for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }

  var blob = new Blob([ab], {
    type: mimeString
  });
  return blob;
}
function blobToArrayBuffer(blob) {
  var fileReader = new FileReader();
  return new Promise(function (rs) {
    fileReader.onload = function (event) {
      var arrayBuffer = event.target.result;
      rs(arrayBuffer);
    };

    fileReader.readAsArrayBuffer(blob);
  });
}
function stringToBlob(text, type) {
  return new Blob([text], {
    type: type || 'text/plain'
  });
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Converter/base64.js
function base64EncodeUnicode(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) {
    return String.fromCharCode('0x' + p1);
  }));
}
;
function base64DecodeUnicode(str) {
  return decodeURIComponent(atob(str).split('').map(function (c) {
    return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  }).join(''));
}
var UnicodeBase64Converter = {
  encode: base64EncodeUnicode,
  decode: base64DecodeUnicode
};
;// CONCATENATED MODULE: ./node_modules/absol/src/Time/Alarm.js
/**
 * 
 * @param {Date| Number} time 
 * @param {Function} callback 
 */
function Alarm(time, callback) {
  this.LIMIT_TIMEOUT = 2147483647;
  this.callback = callback;
  this.state = "STAND_BY";
  this.timeout = -1;
  if (typeof time == 'number') this.time = time;else this.time = time.getTime();
  this.args = Array.prototype.slice.call(arguments, 2);
  this.tick = this.tick.bind(this);
  if (this.time >= new Date().getTime()) this.start();else this.kill();
}

Alarm.prototype.start = function () {
  if (this.state == 'STAND_BY' || this.state == "PAUSE") {
    this.state = "RUNNING";
    this.tick();
    return true;
  }

  return false;
};

Alarm.prototype.pause = function () {
  if (this.state == "RUNNING") {
    clearTimeout(this.timeout);
    this.timeout = -1;
    this.state = 'PAUSE';
  }
};

Alarm.prototype.tick = function () {
  var now = new Date().getTime();

  if (now >= this.time) {
    this.callback && this.callback.apply(null, this.args);
    this.start = 'FINISH';
  } else {
    var deltaTime = Math.min(this.LIMIT_TIMEOUT, this.time - now);
    this.timeout = setTimeout(this.tick, deltaTime);
    this.state = "RUNNING";
  }
};

Alarm.prototype.kill = function () {
  if (this.state != "FINISH" && this.state != "DEAD") {
    if (this.timeout >= 0) clearTimeout(this.timeout);
    this.state = 'DEAD';
    return true;
  }

  return false;
};

/* harmony default export */ const Time_Alarm = (Alarm);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Ref.js
/***
 *
 * @param {T} value
 * @constructor
 * @template T
 */
function Ref(value) {
  this.set(value);
}

Ref.prototype.toString = function () {
  return this.value + '';
};
/***
 *
 * @return {T}
 */


Ref.prototype.valueOf = function () {
  return this.value;
};
/***
 *
 * @param {T}value
 */


Ref.prototype.set = function (value) {
  this.value = value;
};
/**
 *
 * @return {T}
 */


Ref.prototype.get = function () {
  return this.value;
};

/* harmony default export */ const AppPattern_Ref = (Ref);
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/XHR.js
function XHR_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { XHR_typeof = function _typeof(obj) { return typeof obj; }; } else { XHR_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return XHR_typeof(obj); }

var XHR = {};

XHR.makeHttpObject = function () {
  try {
    return new XMLHttpRequest();
  } catch (error) {}

  try {
    return new ActiveXObject("Msxml2.XMLHTTP");
  } catch (error) {}

  try {
    return new ActiveXObject("Microsoft.XMLHTTP");
  } catch (error) {}

  throw new Error("Could not create HTTP request object.");
};
/***
 * 
 * @param {String} url
 * @param {String} body
 * @param {String} responseType
 * @param {Function} success
 * @param {Function} failure
 * @returns {Promise}
 */


XHR.getRequest = function (url, props, success, failure) {
  return new Promise(function (rs, rj) {
    var request = XHR.makeHttpObject();
    request.open("GET", url, true);
    if (typeof props == 'string') request.responseType = props || '';else if (props && XHR_typeof(props) == 'object') {
      Object.assign(request, props);
    }
    request.send(null);

    request.onreadystatechange = function () {
      if (request.readyState == 4) {
        if (request.status == 200) {
          var response = request.response;
          success && success(response);
          rs(response);
        } else {
          failure && failure(request.status, request.statusText);
          rj(request.status);
        }
      }
    };

    request.onerror = function () {
      failure && failure(request.status, request.statusText);
      rj(new Error(request.status + request.statusText));
    };
  });
};

XHR.postRepquest = function (url, payload, props, headers, success, failure) {
  return new Promise(function (rs, rj) {
    var method = "POST";
    var shouldBeAsync = true;
    var request = XHR.makeHttpObject();

    request.onreadystatechange = function () {
      if (request.readyState == 4) {
        if (request.status == 200) {
          success && success(request.response);
          rs(request.response);
        } else if (failure) {
          failure && failure(request.status, request.statusText);
          rj({
            status: request.status,
            statusText: request.statusText
          });
        }
      }
    };

    request.onerror = function () {
      failure && failure(request.status, request.statusText);
      rj(new Error(request.status + request.statusText));
    };

    request.open(method, url, shouldBeAsync);
    if (typeof props == 'string') request.responseType = props || '';else if (props && XHR_typeof(props) == 'object') {
      Object.assign(request, props);
    }
    headers = headers || {};
    headers["Content-Type"] = headers["Content-Type"] || "application/json;charset=UTF-8";
    Object.keys(headers).forEach(function (key) {
      request.setRequestHeader(key, headers[key]);
    });
    request.send(payload);
  });
};

XHR.request = function (method, url, props, headers, body, successCallback, failureCallback) {
  return new Promise(function (rs, rj) {
    var shouldBeAsync = true;
    var request = new XMLHttpRequest();

    request.onreadystatechange = function () {
      if (request.readyState == 4) {
        if (request.status == 200) {
          successCallback && successCallback(request.response);
          rs(request.response);
        } else {
          failureCallback && failureCallback(request.status, request.statusText);
          rj({
            status: request.status,
            statusText: request.statusText
          });
        }
      }
    };

    request.onerror = function () {
      var error = new Error("Network Error!");
      if (failureCallback) failureCallback(error);
      rj(error);
    };

    request.open(method, url, shouldBeAsync);
    if (typeof props == 'string') request.responseType = props || '';else if (props && XHR_typeof(props) == 'object') {
      Object.assign(request, props);
    }
    headers = headers || {};
    headers["Content-Type"] = headers["Content-Type"] || "application/json;charset=UTF-8";
    Object.keys(headers).forEach(function (key) {
      request.setRequestHeader(key, headers[key]);
    });
    request.send(body);
  });
};

/* harmony default export */ const Network_XHR = (XHR);
;// CONCATENATED MODULE: ./node_modules/absol/src/String/stringFormat.js
/**
 * 
 * @param {String} s 
 * @param {Number} maxLength 
 */
function wrapToLines(s, maxLength) {
  var res = [];
  var currentWord = '';
  var currentLine = '';

  for (var i = 0; i < s.length; ++i) {
    if (s[i].match(/\s/)) {
      if (currentWord.length + currentLine.length >= maxLength) {
        if (currentLine.length > 0) {
          res.push(currentLine.trim());
          currentLine = '';
          currentWord = currentWord.trimLeft() + s[i];
        } else {
          currentLine = currentLine + currentWord;
          res.push(currentLine.trim());
          currentLine = '';
          currentWord = '';
        }
      } else {
        currentLine = currentLine + currentWord;
        currentWord = s[i];
      }
    } else {
      currentWord = currentWord + s[i];
    }
  }

  currentLine = (currentLine + currentWord).trim();
  if (currentLine.length > 0) res.push(currentLine);
  return res;
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function nonAccentVietnamese(s) {
  return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a").replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A").replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e").replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E").replace(/ì|í|ị|ỉ|ĩ/g, "i").replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I").replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o").replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O").replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u").replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U").replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y").replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y").replace(/đ/g, "d").replace(/Đ/g, "D").replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "").replace(/\u02C6|\u0306|\u031B/g, "");
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function pascalCaseToCamelCase(s) {
  return s.substr(0, 1).toLowerCase() + s.substr(1);
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function kebabCaseToCamelCase(s) {
  return s.replace(/-+([^-])/g, function (full, c) {
    return c.toUpperCase();
  });
}
/**
 * 
 * @param {String} s 
 * @returns {String} 
 */

function underScoreToCamelCase(s) {
  return s.replace(/(_+)?([^_]+)/g, function (full, underscore, word) {
    if (underscore) {
      if (word) {
        return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
      } else return '';
    } else {
      return word.toLowerCase();
    }

    ;
  });
}
/**
 * 
 * @param {String} s 
 * @returns {String} 
 */

function camelCaseToPascalCase(s) {
  return s.substr(0, 1).toUpperCase() + s.substr(1);
}
/**
 * 
 * @param {String} s 
 * @returns {String} 
 */

function underScoreToPascalCase(s) {
  return s.replace(/(_+|^)?([^_]+)/g, function (full, underscore, word) {
    return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function kebabCaseToPascalCase(s) {
  return s.replace(/(-+|^)([^-])/g, function (full, u, c) {
    return c.toUpperCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function pascalCaseToKebabCase(s) {
  return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toLowerCase();
    return '-' + full.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function camelCaseToKebabCase(s) {
  return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toLowerCase();
    return '-' + full.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function underScoreToKebabCase(s) {
  return s.replace(/(^|_+)([^_]+)/g, function (full, score, word, index) {
    if (index == 0) return word.toLowerCase();
    return '-' + word.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function pascalCaseToUnderScore(s) {
  return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toLowerCase();
    return '_' + full.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function pascalCaseToUpperUnderScore(s) {
  return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toUpperCase();
    return '_' + full.toUpperCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function camelCaseToUnderScore(s) {
  return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toLowerCase();
    return '_' + full.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function camelCaseToUpperUnderScore(s) {
  return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
    if (index == 0) return full.toUpperCase();
    return '_' + full.toUpperCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function kebabCaseToUnderScore(s) {
  return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
    if (index == 0) return word.toLowerCase();
    return '_' + word.toLowerCase();
  });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */

function kebabCaseToUpperUnderScore(s) {
  return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
    if (index == 0) return word.toUpperCase();
    return '_' + word.toUpperCase();
  });
}
String.nonAccentVietnamese = nonAccentVietnamese;

String.prototype.nonAccentVietnamese = function () {
  return String.nonAccentVietnamese(this);
};
;// CONCATENATED MODULE: ./node_modules/absol/src/JSX/dom.js

function domVisitor(jsxCode) {
  var visitor = {
    File: function File(node, ac) {
      return acept(node.program, ac);
    },
    Program: function Program(node, ac) {
      ac.child = node.body.map(function (cNode) {
        return acept(cNode, {});
      });
      return ac;
    },
    ExpressionStatement: function ExpressionStatement(node, ac) {
      return acept(node.expression, ac);
    },
    JSXElement: function JSXElement(node, ac) {
      acept(node.openingElement, ac);

      if (node.children && node.children.length > 0) {
        ac.child = node.children.map(function (cNode) {
          return acept(cNode, {});
        });
      }

      return ac;
    },
    JSXOpeningElement: function JSXOpeningElement(node, ac) {
      var name = {};
      acept(node.name, name);
      ac.tag = name.value;

      if (node.attributes && node.attributes.length > 0) {
        node.attributes.forEach(function (aNode) {
          var attribute = {};
          acept(aNode, attribute);

          if (attribute.key) {
            if (attribute.key.startsWith('data-')) {
              ac.data = ac.data || {};
              ac.data[attribute.key.replace('data-', '')] = attribute.value;
            } else if (attribute.key.startsWith('prop-')) {
              ac.props = ac.props || {};
              ac.props[attribute.key.replace('prop-', '')] = attribute.value;
            } else if (attribute.key.startsWith('on-')) {
              ac.on = ac.props || {};
              ac.on[attribute.key.replace('on-', '')] = attribute.value;
            } else if (attribute.key == 'style') {
              ac.style = parseStyleAttr(attribute.value);
            } else if (attribute.key == 'class') {
              var classList = parseClassAttr(attribute.value);
              if (classList.length > 0) ac["class"] = classList;
            } else {
              ac.attr = ac.attr || {};
              ac.attr[attribute.key] = attribute.value;
            }
          }
        }, {});
      }

      return ac;
    },
    JSXIdentifier: function JSXIdentifier(node, ac) {
      ac.value = node.name;
    },
    JSXAttribute: function JSXAttribute(node, ac) {
      var key = {};
      acept(node.name, key);
      ac.key = key.value;
      var value = {};
      acept(node.value, value);
      ac.value = value.value;
      return ac;
    },
    StringLiteral: function StringLiteral(node, ac) {
      ac.value = node.value;
    },
    JSXExpressionContainer: function JSXExpressionContainer(node, ac) {
      ac.value = {
        expression: jsxCode.substring(node.expression.start, node.expression.end)
      };
      return ac;
    },
    JSXText: function JSXText(node, ac) {
      ac.text = node.value;
      return ac;
    }
  };

  function acept(node, ac) {
    return node && visitor[node.type] && visitor[node.type](node, ac);
  }

  return {
    acept: acept,
    visitor: visitor
  };
}
/***
 * @param {String} jsxCode
 */

function parseDom(jsxCode) {
  jsxCode = jsxCode.trim().replace(/>\s+</gm, '><').replace(/<(\/?)(img|input|link|br|meta)([^>]*)>/g, function (sub, end, tag, content) {
    if (end == '/') return '';
    return '<' + tag + content + '/>';
  });
  var ast = babel.parse(jsxCode, {
    plugins: [babel.pluginSyntaxJsx]
  });
  var xmlData = {};
  domVisitor(jsxCode).acept(ast, xmlData);
  if (xmlData.child.length > 1) return xmlData.child;
  return xmlData.child[0];
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Code/noop.js
function noop() {}
;
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Context.js


function Context() {
  this.state = "CREATE";
  /**
   * @type {Context}
   */

  this.parent = null;
  /***
   *
   * @type {null|ContextManager}
   */

  this.ctxMng = null;
}
/**
 * @returns {*}
 */


Context.prototype.getContext = function (key) {
  var ctx = this;
  var res;

  while (ctx && !res) {
    if (ctx.ctxMng) {
      res = ctx.ctxMng.get(key);
    }

    ctx = ctx.parent;
  }

  return res;
};
/**
 * @param {string} key
 * @param {*} value
 * @returns {*}
 */


Context.prototype.setContext = function (key, value) {
  return this.getContextManager().set(key, value);
};
/**
 * @returns {ContextManager}
 */


Context.prototype.getContextManager = function () {
  var ctx = this;
  var res;

  while (ctx && !res) {
    if (ctx.ctxMng) {
      res = ctx.ctxMng;
    }

    ctx = ctx.parent;
  }

  return res;
};
/**
 * @param {Context} parent
 */


Context.prototype.attach = function (parent) {
  //stop before attach to new context
  this.stop();
  /**
   * @type {Application}
   */

  this.parent = parent;
  this.onAttached && this.onAttached();
};

Context.prototype.detach = function () {
  this.stop();
  this.onDetached && this.onDetached();
  this.parent = null;
};

Context.prototype.pause = function () {
  if (this.state.match(/RUNNING|PAUSE/)) {
    if (this.state === "RUNNING") {
      this.state = "PAUSE";
      this.onPause && this.onPause();
    }
  } else {
    console.warn(this, "NOT RUNNING");
  }
};

Context.prototype.resume = function () {
  if (!this.state.match(/STANDBY|PAUSE|RUNNING/)) {
    console.error(this, 'NOT READY!', this.state);
    return;
  }

  if (this.state === "RUNNING") return;
  this.state = "RUNNING";
  this.onResume && this.onResume();
};

Context.prototype.start = function () {
  if (this.state.match(/DIE/)) {
    console.error(this, 'DIED!');
    return;
  }

  if (this.state.match(/RUNNING/)) return;

  if (this.state.match(/STOP|CREATE/)) {
    this.state = "STANDBY";
    this.onStart && this.onStart();
  }

  if (this.state.match(/STANDBY|PAUSE/)) {
    this.resume();
  }
};

Context.prototype.stop = function () {
  if (this.state.match(/STOP|DIE|CREATE/)) return;
  if (this.state.match(/RUNNING/)) this.pause();
  this.state = "STOP";
  this.onStop && this.onStop();
};

Context.prototype.destroy = function () {
  if (this.state.match(/DIE/)) return;
  if (this.state.match(/RUNNING|PAUSE/)) this.stop();
  this.state = "DIE";
  this.onDestroy && this.onDestroy();
};

Context.prototype.onDestroy = noop;
Context.prototype.onStop = noop;
Context.prototype.onStart = noop;
Context.prototype.onResume = noop;
Context.prototype.onPause = noop;
Context.prototype.onDetached = noop;
Context.prototype.onAttached = noop;
/* harmony default export */ const AppPattern_Context = (Context);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Activity.js
 //NOTE: !impotant : don't make setter, getter for activity, just code like JAVA

/** 
 * @class
 */

function Activity() {
  AppPattern_Context.call(this);
}

Object.defineProperties(Activity.prototype, Object.getOwnPropertyDescriptors(AppPattern_Context.prototype));
Activity.prototype.constructor = Activity;

Activity.prototype.startActivity = function (activity) {
  if (this.parent) {
    this.parent.startActivity(activity);
  } else {}
};

Activity.prototype.finish = function () {
  if (this.parent) {
    this.parent.stopActivity(this);
  } else {}
};

/* harmony default export */ const AppPattern_Activity = (Activity);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ContextManager.js
function ContextManager() {
  this.__contextData__ = {};
}
/**
 * @param {String} key
 * @returns {*}
 */


ContextManager.prototype.get = function (key) {
  return this.__contextData__[key];
};
/**
 * @param {String} key
 * @param {*} value
 * @returns {Context}
 */


ContextManager.prototype.set = function (key, value) {
  this.__contextData__[key] = value;
  return this;
};

ContextManager.prototype.assign = function (obj) {
  Object.assign(this.__contextData__, obj);
  return this;
};

ContextManager.prototype.remove = function (key) {
  delete this.__contextData__[key];
  return this;
};

ContextManager.prototype.contains = function (key) {
  return key in this.__contextData__;
};

/* harmony default export */ const AppPattern_ContextManager = (ContextManager);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Application.js


/**
 * @class
 */

function Application() {
  AppPattern_Context.call(this);
  this.activityStack = [];
  /** @type {Activity} */

  this.currentActivity = null;
}

Object.defineProperties(Application.prototype, Object.getOwnPropertyDescriptors(AppPattern_Context.prototype));
Application.prototype.constructor = Application;
/**
 * @param {Activity} activity
 */

Application.prototype.startActivity = function (activity) {
  if (this.currentActivity != null) {
    this.currentActivity.pause();
    this.activityStack.push(this.currentActivity);
  }

  this.currentActivity = activity;
  this.appendChild(activity);
  activity.attach(this);
  this.setContentView(activity.getView(), true);
  activity.start();
};
/**
 * @param {Activity} activity
 */


Application.prototype.stopActivity = function (activity) {
  if (this.currentActivity == activity) {
    if (this.activityStack.length == 0) {//todo
    } else {
      activity.detach();
      this.removeChild(this.currentActivity);
      this.currentActivity = this.activityStack.pop();
      this.setContentView(this.currentActivity.getView());
      this.currentActivity.resume();
    }
  } else {
    console.error("NOT ON TOP ACTIVITY");
  }
};
/**
 * @param {HTMLElement} view
 */


Application.prototype.setContentView = function (view, overlay) {
  throw new Error("Not Implement!");
};

Application.prototype.backToTopActivity = function () {
  while (this.activityStack.length > 0) {
    this.currentActivity.stop();
    this.currentActivity = this.activityStack.pop();
  }

  this.setContentView(this.currentActivity.getView());
  this.currentActivity.resume();
};

/* harmony default export */ const AppPattern_Application = (Application);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/VarScope.js
function VarScope(parent) {
  this.parent = parent;
  this.data = {};
}

VarScope.prototype.declare = function (name, initValue) {
  if (name in this.data) throw new Error(name + ' is already delared in this scope!');
  this.data[name] = initValue;
};

VarScope.prototype.get = function (name) {
  var scope = this.findScope(name);
  if (!scope) throw new Error(name + ' is not declared!');
  return scope.data[name];
};

VarScope.prototype.set = function (name, value) {
  var scope = this.findScope(name);
  if (!scope) throw new Error(name + ' is not declared!');
  scope.data[name] = value;
};

VarScope.prototype.findScope = function (name) {
  var currentScope = this;

  while (currentScope) {
    if (name in currentScope.data) break;
    currentScope = currentScope.parent;
  }

  return currentScope;
};

/* harmony default export */ const AppPattern_VarScope = (VarScope);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/GrandContext.js



/***
 * @extends Context
 * @constructor
 */

function GrandContext() {
  AppPattern_Context.call(this);
  this.ctxMng = new AppPattern_ContextManager();
}

HTML5_OOP.mixClass(GrandContext, AppPattern_Context);
/* harmony default export */ const AppPattern_GrandContext = (GrandContext);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Fragment.js




/***
 * @extends GrandContext
 * @constructor
 */

function Fragment() {
  AppPattern_GrandContext.call(this);
}

HTML5_OOP.mixClass(Fragment, AppPattern_GrandContext);

Fragment.prototype.createView = function () {
  throw new Error("Not implement!");
};

Fragment.prototype.getView = function () {
  if (this.$view) return this.$view;
  this.$view = this.createView() || this.$view;
  if (!this.$view) throw new Error("this.$view must be not null!");
  if (this.onCreated) this.onCreated();
  return this.$view;
};

Fragment.prototype.onCreated = noop;
/* harmony default export */ const AppPattern_Fragment = (Fragment);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Vec2.js
/***
 *
 * @param  {Number} x
 * @param {Number} y
 * @constructor
 */
function Vec2(x, y) {
  this.x = x;
  this.y = y;
}
/***
 *
 * @returns {Vec2}
 */


Vec2.prototype.copy = function () {
  return new Vec2(this.x, this.y);
};
/***
 *
 * @returns {string}
 */


Vec2.prototype.toString = function () {
  return "(" + this.x + ", " + this.y + ")";
};
/***
 *
 * @returns {number}
 */


Vec2.prototype.abs = function () {
  return Math.sqrt(this.x * this.x + this.y * this.y);
};
/***
 *
 * @returns {Vec2}
 */


Vec2.prototype.normalized = function () {
  var l = this.abs();
  if (l == 0) l = 1;
  return this.div(l);
};
/***
 *
 * @param {number} h
 * @returns {Vec2}
 */


Vec2.prototype.mult = function (h) {
  return new Vec2(this.x * h, this.y * h);
};
/***
 *
 * @param {number} h
 * @returns {Vec2}
 */


Vec2.prototype.div = function (h) {
  return new Vec2(this.x / h, this.y / h);
};
/***
 *
 * @param v
 * @returns {number}
 */


Vec2.prototype.dist = function (v) {
  var dx = v.x - this.x;
  var dy = v.y - this.y;
  return Math.sqrt(dx * dx + dy * dy);
};
/***
 *
 * @param {Vec2} v
 * @returns {Vec2}
 */


Vec2.prototype.sub = function (v) {
  return new Vec2(this.x - v.x, this.y - v.y);
};
/***
 *
 * @param {Vec2} v
 * @returns {Vec2}
 */


Vec2.prototype.add = function (v) {
  return new Vec2(this.x + v.x, this.y + v.y);
};
/***
 *
 * @returns {Vec2}
 */


Vec2.prototype.inv = function () {
  return new Vec2(-this.x, -this.y);
};
/***
 *
 * @param {Vec2} v
 * @param {number} h
 * @returns {Vec2}
 */


Vec2.prototype.linear = function (v, h) {
  return new Vec2(this.x * (1 - h) + v.x * h, this.y * (1 - h) + v.y * h);
};
/***
 *
 * @param {Vec2} v1
 * @returns {number}
 */


Vec2.prototype.dot = function (v1) {
  return this.x * v1.x + this.y * v1.y;
};
/***
 *
 * @returns {number}
 */


Vec2.prototype.direction = function () {
  return Math.atan2(this.y, this.x);
};
/***
 *
 * @param {Number} dx
 * @param {Number} dy
 */


Vec2.prototype.translate = function (dx, dy) {
  return this.add(new Vec2(dx, dy));
};
/****
 *
 * @param {Number} angle - radian
 * @returns {Vec2}
 */


Vec2.prototype.rotate = function (angle) {
  var sinA = Math.sin(angle);
  var cosA = Math.cos(angle);
  var x = this.x * cosA - this.y * sinA;
  var y = this.x * sinA + this.y * cosA;
  return new Vec2(x, y);
};
/***
 *
 * @returns {Vec2}
 */


Vec2.prototype.rotate90 = function () {
  return new Vec2(-this.y, this.x);
};
/***
 *
 * @param {number} angle
 * @returns {Vec2}
 */


Vec2.fromDirection = function (angle) {
  return new Vec2(Math.cos(angle), Math.sin(angle));
};
/***
 *
 * @param x
 * @param y
 * @returns {Vec2}
 */


Vec2.make = function (x, y) {
  if (x instanceof Array) {
    return new Vec2(x[0], x[1]);
  } else if (x instanceof Vec2) {
    return x.copy();
  } else return new Vec2(x, y);
};

/* harmony default export */ const Math_Vec2 = (Vec2);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Rectangle.js

/**
 *
 * @param {Number} x
 * @param {Number} y
 * @param {Number} width
 * @param {Number} height
 */

function Rectangle(x, y, width, height) {
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
}
/**
 *
 * @return {Vec2}
 * @constructor
 */


Rectangle.prototype.A = function () {
  return new Math_Vec2(this.x, this.y);
};
/***
 *
 * @return {Vec2}
 * @constructor
 */


Rectangle.prototype.B = function () {
  return new Math_Vec2(this.x + this.width, this.y);
};
/***
 *
 * @return {Vec2}
 * @constructor
 */


Rectangle.prototype.C = function () {
  return new Math_Vec2(this.x + this.width, this.y + this.height);
};
/***
 *
 * @return {Vec2}
 * @constructor
 */


Rectangle.prototype.D = function () {
  return new Math_Vec2(this.x, this.y + this.height);
};
/***
 *
 * @return {number}
 */


Rectangle.prototype.square = function () {
  return this.width * this.height;
};

Rectangle.prototype.nearestPoint = function (arg0, arg1) {
  if (arg1) arg0 = Math_Vec2.make(arg0, arg1);
  var res = this.A();
  var mind = res.dist(arg0);
  var d = this.B().dist(arg0);

  if (d < mind) {
    mind = d;
    res = this.B();
  }

  d = this.C().dist(arg0);

  if (d < mind) {
    mind = d;
    res = this.C();
  }

  d = this.D().dist(arg0);

  if (d < mind) {
    mind = d;
    res = this.D();
  }

  return res;
};

Rectangle.prototype.centerPoint = function () {
  return new Math_Vec2(this.x + this.width / 2, this.y + this.height / 2);
};
/***
 *
 * @param {Rectangle} r
 * @param {boolean} margin
 * @return {boolean}
 */


Rectangle.prototype.isCollapse = function (r, margin) {
  if (!margin) margin = 0;
  if (this.x >= r.x + r.width + margin) return false;
  if (this.y >= r.y + r.height + margin) return false;
  if (r.x >= this.x + this.width + margin) return false;
  if (r.y >= this.y + this.height + margin) return false;
  return true;
};
/***
 *
 * @param {Rectangle} r
 * @return {number}
 */


Rectangle.prototype.collapsedSquare = function (r) {
  var collapseRect = this.collapsedRect(r);

  if (collapseRect) {
    return collapseRect.square();
  } else {
    return 0;
  }
};
/***
 *
 * @param {Rectangle} r
 * @return {Rectangle}
 */


Rectangle.prototype.collapsedRect = function (r) {
  var maxX, minX, maxY, minY, width, height;
  minX = Math.max(this.x, r.x);
  minY = Math.max(this.y, r.y);
  maxX = Math.min(this.x + this.width, r.x + r.width);
  maxY = Math.min(this.y + this.height, r.y + r.height);
  width = maxX - minX;
  height = maxY - minY;

  if (width >= 0 && height >= 0) {
    return new Rectangle(minX, minY, width, height);
  }

  return null;
};
/**
 * @param {Rectangle} r
 * @returns {Boolean}
 */


Rectangle.prototype.contains = function (r) {
  return this.x <= r.x && this.y <= r.y && this.x + this.width >= r.x + r.width && this.y + this.height >= r.y + r.height;
};
/**
 * @param {Vec2} p
 * @returns {Boolean}
 */


Rectangle.prototype.containsPoint = function (p) {
  return this.x <= p.x && this.y <= p.y && this.x + this.width >= p.x && this.y + this.height >= p.y;
};
/**
 * @param {Rectangle} other
 * @returns {Rectangle}
 */


Rectangle.prototype.merge = function (other) {
  var left = Math.min(this.x, other.x);
  var top = Math.min(this.y, other.y);
  var right = Math.max(this.x + this.width, other.x + other.width);
  var bottom = Math.max(this.y + this.height, other.y + other.height);
  return new Rectangle(left, top, right - left, bottom - top);
};
/**
 * @returns {Rectangle}
 */


Rectangle.prototype.clone = function () {
  return new Rectangle(this.x, this.y, this.width, this.height);
};
/***
 *
 * @param {Rectangle} r
 */


Rectangle.prototype.equals = function (r) {
  return this.x == r.x && this.y == r.y && this.height == r.height && this.width == r.width;
};
/**
 * @param {Number} x
 * @param {Number} y
 * @param {Number} width
 * @param {Number} height
 * @returns {Rectangle}
 */


Rectangle.make = function (x, y, width, height) {
  return new Rectangle(x, y, width, height);
};
/**
 * @param {Number} x
 * @param {Number} y
 * @param {Number} width
 * @param {Number} height
 * @returns {Rectangle}
 */


Rectangle.makeCenter = function (x, y, width, height) {
  return new Rectangle(x - width / 2, y - height / 2, width, height);
};
/**
 * @param {ClientRect|DOMRect} clientRect
 * @returns {Rectangle}
 */


Rectangle.fromClientRect = function (clientRect) {
  return new Rectangle(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
};

/* harmony default export */ const Math_Rectangle = (Rectangle);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/int.js
/**
 *
 * @param {number} x
 * @param {number} l
 * @param {number} h
 * @param {number} L
 * @param {number} H
 * @returns {number}
 */
function map(x, l, h, L, H) {
  return (x - l) / (h - l) * (H - L) + L;
}
function sumArr(arr) {
  var res = 0;

  for (var i = 0; i < arr.length; ++i) {
    res += arr[i];
  }

  return res;
}
function radianInRange(x, start, end) {
  if (start > end) return radianInRange(x, end, start);
  if (x < start) x += Math.PI * 2 * Math.ceil((start - x) / 2 / Math.PI);
  if (x > end) x -= Math.PI * 2 * Math.ceil((x - end) / 2 / Math.PI);
  return x >= start && x <= end;
}
function distance(x0, y0, x1, y1) {
  var dx = x0 - x1;
  var dy = y0 - y1;
  return Math.sqrt(dx * dx + dy * dy);
}
/**
 *
 * @param {Number} numb
 * @param {Number} floatFixed
 * @param {"."|","} decimalSeparator
 * @param {","|"."} thousandsSeparator
 * @param {Number} decimalPadding
 */

function numberToString(numb, floatFixed, decimalSeparator, thousandsSeparator, decimalPadding) {
  if (floatFixed === undefined || floatFixed === null || typeof floatFixed != "number" || isNaN(floatFixed) || floatFixed < -1) floatFixed = -1;
  if (decimalSeparator === undefined || decimalSeparator === null || decimalSeparator != '.' && decimalSeparator != ',') decimalSeparator = '.';
  if (thousandsSeparator === undefined || thousandsSeparator === null || floatFixed >= 0 && thousandsSeparator == decimalSeparator) thousandsSeparator = undefined;
  if (thousandsSeparator != ',' && thousandsSeparator != '.') thousandsSeparator = undefined;
  if (decimalPadding === undefined || decimalPadding === null || typeof decimalPadding != "number" || isNaN(decimalPadding) || decimalPadding < 0) decimalPadding = 0;
  var text = numb.toString();
  var matched = text.match(/[+-]?([0-9]*)(\.([0-9]*))?(e([+-]?[0-9]+))?/);
  var dec = matched[1] || '';
  var real = matched[3] || '';
  var floatPoint = parseInt(matched[5] || '0');
  var decDigits = dec.split('').map(function (d) {
    return parseInt(d);
  });
  var realDigits = real.split('').map(function (d) {
    return parseInt(d);
  });

  while (floatPoint < 0) {
    if (decDigits.length > 0) {
      realDigits.unshift(decDigits.pop());
    } else {
      realDigits.unshift(0);
    }

    floatPoint++;
  }

  while (floatPoint > 0) {
    if (realDigits.length > 0) {
      decDigits.push(realDigits.unshift());
    } else {
      decDigits.push(0);
    }

    floatPoint++;
  }

  var mem = 0,
      i,
      cValue;

  if (floatFixed > realDigits.length) {
    while (realDigits.length < floatFixed) {
      realDigits.push(0);
    }
  } else if (floatFixed < realDigits.length && floatFixed >= 0) {
    i = floatFixed;
    mem = realDigits[i] >= 5 ? 1 : 0;
    realDigits.splice(floatFixed);
    --i;

    while (mem > 0) {
      if (i >= 0) {
        cValue = realDigits[i] + mem;
        realDigits[i] = cValue % 10;
        mem = Math.floor(cValue / 10);
      } else {
        if (decDigits.length + i < 0) decDigits.unshift(0);
        cValue = decDigits[decDigits.length + i] + mem;
        decDigits[decDigits.length + i] = cValue % 10;
        mem = Math.floor(cValue / 10);
      }

      --i;
    }
  }

  while (decDigits.length < decimalPadding) {
    decDigits.unshift(0);
  }

  var decText = numb < 0 ? '-' : '';
  var breadMod = (decDigits.length + 2) % 3;

  if (thousandsSeparator) {
    for (i = 0; i < decDigits.length; ++i) {
      decText += decDigits[i];

      if (i % 3 == breadMod && i + 1 < decDigits.length) {
        decText += thousandsSeparator;
      }
    }
  } else {
    decText += decDigits.join('');
  }

  var realText = realDigits.length == 0 ? '' : decimalSeparator + realDigits.join('');
  return decText + realText;
}
function numberAutoFixed(x, eDelta) {
  eDelta = eDelta || 10;
  eDelta = Math.round(eDelta);
  var e = parseFloat('1e+' + eDelta);
  return Math.round(x * e) / e;
}
/***
 *
 * @param {number} number
 * @param {number} length
 * @returns {string}
 */

function integerZeroPadding(number, length) {
  var res = number + '';

  while (res.length < length) {
    res = '0' + res;
  }

  return res;
}
function harmonicMean(a, b) {
  return 2 / (1 / a + 1 / b);
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Arc.js



function Arc(x, y, r, start, end) {
  this.x = x;
  this.y = y;
  this.r = r;
  this.start = start;
  this.end = end;
}

Arc.prototype.isPointInBound = function (p) {
  if (distance(this.x, this.y, p.x, p.y) > r) return false;
  return radianInRange(Math.atan2(p.y - this.y, p.x - this.x), start, end);
};

Arc.prototype.isRectInBound = function (rect) {
  return this.isPointInBound(rect.A()) && this.isPointInBound(rect.B()) && this.isPointInBound(rect.C()) && this.isPointInBound(rect.D());
};

Arc.prototype.isRectOutBound = function (rect) {
  return !this.isPointInBound(rect.A()) && !this.isPointInBound(rect.B()) && !this.isPointInBound(rect.C()) && !this.isPointInBound(rect.D());
};

Arc.prototype.isRectCollapse = function (rect) {
  return this.isPointInBound(rect.A()) || this.isPointInBound(rect.B()) || this.isPointInBound(rect.C()) || this.isPointInBound(rect.D());
};

Arc.prototype.centerPoint = function () {
  var mid = (this.start + this.end) / 2;
  var x = this.x + Math.cos(mid) * this.r * 2 / 3;
  var y = this.y + Math.sin(mid) * this.r * 2 / 3;
  return new Math_Vec2(x, y);
};

Arc.prototype.centerRoundPoint = function () {
  var mid = (this.start + this.end) / 2;
  var x = this.x + Math.cos(mid) * this.r;
  var y = this.y + Math.sin(mid) * this.r;
  return new Math_Vec2(x, y);
};

Arc.make = function (x, y, r, start, end) {
  return new Arc(x, y, r, start, end);
};

/* harmony default export */ const Math_Arc = (Arc);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/NumRange.js
/**
 * 
 * @param {Number} start 
 */
function NumRange(start, length) {
  if (arguments.length == 1) length = 0;else if (arguments.length == 0) {
    length = 0;
    start = 0;
  }
  this.start = start;
  this.length = length;
}
/**
 * @param {Number} num 
 */


NumRange.prototype.contains = function (num) {
  return num >= this.start && num <= this.start + this.length;
};
/**
 * @param {NumRange} other
 * @returns {NumRange}
 */


NumRange.prototype.merge = function (other) {
  var start = Math.min(this.start, other.start);
  var end = Math.max(this.start + this.length, other.start + other.length);
  return new NumRange(start, end - start);
};

NumRange.prototype.centerValue = function () {
  return this.start + this.length / 2;
};
/**
 * @param {NumRange} other
 * @returns {Boolean}
 */


NumRange.prototype.isCollapse = function (other) {
  var start = Math.max(this.start, other.start);
  var end = Math.min(this.start + this.length, other.start + other.length);
  return start <= end;
};
/**
 * @param {NumRange} other
 * @returns {Boolean}
 */


NumRange.prototype.collapsedNumRange = function (other) {
  var start = Math.max(this.start, other.start);
  var end = Math.min(this.start + this.length, other.start + other.length);
  if (start <= end) return new NumRange(start, end - start);
  return null;
};

NumRange.prototype.clone = function () {
  return new NumRange(this.start, this.length);
};

/* harmony default export */ const Math_NumRange = (NumRange);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Clipboard.js
function copyImage(src) {
  var ranges, sel;

  if (window.getSelection) {
    sel = window.getSelection(); //backup

    ranges = [];

    for (var i = 0; i < sel.rangeCount; ++i) {
      ranges.push(sel.getRangeAt(i));
    } //copy


    var contentdiv = document.createElement('div');
    var image = document.createElement('img');
    contentdiv.appendChild(image);
    image.src = src;
    contentdiv.contentEditable = true; // contentdiv.style.display = 'none';

    document.body.appendChild(contentdiv);
    var range = document.createRange();
    range.selectNodeContents(image);
    sel.removeAllRanges();
    sel.addRange(range);
    document.execCommand('copy'); // contentdiv.remove();
    //recover

    sel.removeAllRanges();

    for (var i = 0; i < sel.rangeCount; ++i) {
      sel.addRange(ranges[i]);
    }
  } else {
    console.error("Not support copy!"); //not support IE
  }
}

function fallbackCopyTextToClipboard(text) {
  return new Promise(function (resolve, reject) {
    var textArea = document.createElement("textarea");
    textArea.value = text; // Avoid scrolling to bottom

    textArea.style.top = "0";
    textArea.style.left = "0";
    textArea.style.position = "fixed";
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
      var successful = document.execCommand('copy');

      if (successful) {
        resolve();
      } else {
        reject();
      }
    } catch (err) {
      reject(err);
    }

    document.body.removeChild(textArea);
  });
}

function copyText(text) {
  if (!navigator.clipboard) {
    return fallbackCopyTextToClipboard(text);
  }

  return navigator.clipboard.writeText(text);
}

function fallbackReadTextFromClipboard() {
  return new Promise(function (resolve, reject) {
    var textArea = document.createElement("textarea"); // Avoid scrolling to bottom

    textArea.style.top = "0";
    textArea.style.left = "0";
    textArea.style.position = "fixed";
    document.body.appendChild(textArea);
    textArea.focus();

    try {
      var successful = document.execCommand('paste');

      if (successful) {
        resolve(textArea.value);
      } else {
        reject();
      }
    } catch (err) {
      reject(err);
    }

    document.body.removeChild(textArea);
  });
}

function pasteText() {
  if (navigator.clipboard) {
    return navigator.clipboard.readText();
  } else {
    return fallbackReadTextFromClipboard();
  }
}
;// CONCATENATED MODULE: ./node_modules/absol/src/DataStructure/Heap.js
function defaultCmp(x, y) {
  if (x < y) {
    return -1;
  }

  if (x > y) {
    return 1;
  }

  return 0;
}
;
/**
 * 
 * @param {Array} arr 
 * @param {Number} pos 
 * @param {Function} cmp 
 */

function heapDown(arr, pos, cmp) {
  if (!cmp) cmp = defaultCmp;
  var item = arr[pos];
  var endPos = arr.length;
  var childPos = pos << 1 | 1;
  var childRightPos;

  while (childPos < endPos) {
    childRightPos = childPos + 1;

    if (childPos + 1 < endPos && cmp(arr[childPos], arr[childRightPos]) > 0) {
      childPos = childRightPos;
    }

    if (cmp(arr[childPos], item) < 0) {
      arr[pos] = arr[childPos];
      arr[childPos] = item;
      pos = childPos;
      childPos = pos << 1 | 1;
    } else break;
  }
}
/**
 * 
 * @param {Array} arr 
 * @param {Number} pos 
 * @param {Function} cmp 
 */

function heapUp(arr, pos, cmp) {
  if (!cmp) cmp = defaultCmp;
  var item = arr[pos];
  var parPos;

  while (pos > 0) {
    parPos = pos - 1 >> 1;

    if (cmp(arr[parPos], item) > 0) {
      arr[pos] = arr[parPos];
      arr[parPos] = item;
      pos = parPos;
    } else break;
  }
}
/**
 *
 * @param {Array} arr
 * @param {Function} cmp
 */

function heapify(arr, cmp) {
  if (!cmp) cmp = defaultCmp;
  var endPos = arr.length;

  for (var i = 0; i < endPos; ++i) {
    heapUp(arr, i, cmp);
  }
}
/**
 * 
 * @param {Array} arr 
 * @param {Function} cmp 
 */

function heapPop(arr, cmp) {
  if (!cmp) cmp = defaultCmp;
  var item = arr[0];
  var lastItem = arr.pop();

  if (arr.length > 0) {
    arr[0] = lastItem;
    heapDown(arr, 0, cmp);
  }

  return item;
}
/**
 * 
 * @param {Array} arr 
 * @param {*} item
 * @param {Function} cmp 
 */

function heapPush(arr, item, cmp) {
  if (!cmp) cmp = defaultCmp;
  arr.push(item);
  heapUp(arr, arr.length - 1, cmp);
}

function Heap(cmd) {
  this.cmp = cmd || defaultCmp;
  this.arr = [];
}
/**
 * @param {Array} arr
 * @param {Function} cmp
 * @returns {Heap}
 */


Heap.fromArray = function (arr, cmp) {
  var heap = new Heap(cmp);
  heapify(arr);
  heap.arr = arr;
  return heap;
};

Heap.prototype.push = function (x) {
  heapPush(this.arr, x, this.cmp);
  return this;
};

Heap.prototype.pop = function () {
  return heapPop(this.arr, this.cmp);
};

Heap.prototype.peek = function () {
  return this.arr[0];
};

Heap.prototype.contains = function (x) {
  return this.arr.indexOf(x) !== -1;
};

Heap.prototype.clear = function () {
  this.arr.splice(0, this.arr.length);
  return this;
};

Heap.prototype.empty = function () {
  return this.arr.length === 0;
};

Heap.prototype.size = function () {
  return this.arr.length;
};

Heap.prototype.clone = function () {
  var heap;
  heap = new Heap(this.cmp);
  heap.arr = this.arr.slice(0);
  return heap;
};

Heap.prototype.toArray = function () {
  return this.arr.slice(0);
};

Heap.prototype.toSortedArray = function () {
  var res = [];
  var heap = this.clone();

  while (!heap.empty()) {
    res.push(heap.pop());
  }

  return res;
};

Heap.prototype.insert = Heap.prototype.push;
Heap.prototype.top = Heap.prototype.peek;
Heap.prototype.front = Heap.prototype.peek;
Heap.prototype.has = Heap.prototype.contains;
Heap.prototype.copy = Heap.prototype.clone;
/* harmony default export */ const DataStructure_Heap = (Heap);
;// CONCATENATED MODULE: ./node_modules/absol/src/Time/datetime.js


var MILLIS_PER_DAY = 24 * 3600000;
var MILLIS_PER_HOUR = 3600000;
var MILLIS_PER_MINUTE = 60000;
/**
 *
 * @param {Date} date
 * @returns {String}
 */

function ddmmyyyy(date) {
  var mm = date.getMonth() + 1; // getMonth() is zero-based

  var dd = date.getDate();
  return [(dd > 9 ? '' : '0') + dd, (mm > 9 ? '' : '0') + mm, date.getFullYear()].join('/');
}
;
var language2LocalDateFormat = {
  "af-ZA": "yyyy/mm/dd",
  "am-ET": "d/m/yyyy",
  "ar-AE": "dd/mm/yyyy",
  "ar-BH": "dd/mm/yyyy",
  "ar-DZ": "dd-mm-yyyy",
  "ar-EG": "dd/mm/yyyy",
  "ar-IQ": "dd/mm/yyyy",
  "ar-JO": "dd/mm/yyyy",
  "ar-KW": "dd/mm/yyyy",
  "ar-LB": "dd/mm/yyyy",
  "ar-LY": "dd/mm/yyyy",
  "ar-MA": "dd-mm-yyyy",
  "ar-OM": "dd/mm/yyyy",
  "ar-QA": "dd/mm/yyyy",
  "ar-SA": "dd/mm/yy",
  "ar-SY": "dd/mm/yyyy",
  "ar-TN": "dd-mm-yyyy",
  "ar-YE": "dd/mm/yyyy",
  "arn-CL": "dd-mm-yyyy",
  "as-IN": "dd-mm-yyyy",
  "az-Cyrl-AZ": "dd.mm.yyyy",
  "az-Latn-AZ": "dd.mm.yyyy",
  "ba-RU": "dd.mm.yy",
  "be-BY": "dd.mm.yyyy",
  "bg-BG": "dd.m.yyyy",
  "bn-BD": "dd-mm-yy",
  "bn-IN": "dd-mm-yy",
  "bo-CN": "yyyy/m/d",
  "br-FR": "dd/mm/yyyy",
  "bs-Cyrl-BA": "d.m.yyyy",
  "bs-Latn-BA": "d.m.yyyy",
  "ca-ES": "dd/mm/yyyy",
  "co-FR": "dd/mm/yyyy",
  "cs-CZ": "d.m.yyyy",
  "cy-GB": "dd/mm/yyyy",
  "da-DK": "dd-mm-yyyy",
  "de-AT": "dd.mm.yyyy",
  "de-CH": "dd.mm.yyyy",
  "de-DE": "dd.mm.yyyy",
  "de-LI": "dd.mm.yyyy",
  "de-LU": "dd.mm.yyyy",
  "dsb-DE": "d. m. yyyy",
  "dv-MV": "dd/mm/yy",
  "el-GR": "d/m/yyyy",
  "en-029": "mm/dd/yyyy",
  "en-AU": "d/mm/yyyy",
  "en-BZ": "dd/mm/yyyy",
  "en-CA": "dd/mm/yyyy",
  "en-GB": "dd/mm/yyyy",
  "en-IE": "dd/mm/yyyy",
  "en-IN": "dd-mm-yyyy",
  "en-JM": "dd/mm/yyyy",
  "en-MY": "d/m/yyyy",
  "en-NZ": "d/mm/yyyy",
  "en-PH": "m/d/yyyy",
  "en-SG": "d/m/yyyy",
  "en-TT": "dd/mm/yyyy",
  "en-US": "m/d/yyyy",
  "en-ZA": "yyyy/mm/dd",
  "en-ZW": "m/d/yyyy",
  "es-AR": "dd/mm/yyyy",
  "es-BO": "dd/mm/yyyy",
  "es-CL": "dd-mm-yyyy",
  "es-CO": "dd/mm/yyyy",
  "es-CR": "dd/mm/yyyy",
  "es-DO": "dd/mm/yyyy",
  "es-EC": "dd/mm/yyyy",
  "es-ES": "dd/mm/yyyy",
  "es-GT": "dd/mm/yyyy",
  "es-HN": "dd/mm/yyyy",
  "es-MX": "dd/mm/yyyy",
  "es-NI": "dd/mm/yyyy",
  "es-PA": "mm/dd/yyyy",
  "es-PE": "dd/mm/yyyy",
  "es-PR": "dd/mm/yyyy",
  "es-PY": "dd/mm/yyyy",
  "es-SV": "dd/mm/yyyy",
  "es-US": "m/d/yyyy",
  "es-UY": "dd/mm/yyyy",
  "es-VE": "dd/mm/yyyy",
  "et-EE": "d.mm.yyyy",
  "eu-ES": "yyyy/mm/dd",
  "fa-IR": "mm/dd/yyyy",
  "fi-FI": "d.m.yyyy",
  "fil-PH": "m/d/yyyy",
  "fo-FO": "dd-mm-yyyy",
  "fr-BE": "d/mm/yyyy",
  "fr-CA": "yyyy-mm-dd",
  "fr-CH": "dd.mm.yyyy",
  "fr-FR": "dd/mm/yyyy",
  "fr-LU": "dd/mm/yyyy",
  "fr-MC": "dd/mm/yyyy",
  "fy-NL": "d-m-yyyy",
  "ga-IE": "dd/mm/yyyy",
  "gd-GB": "dd/mm/yyyy",
  "gl-ES": "dd/mm/yy",
  "gsw-FR": "dd/mm/yyyy",
  "gu-IN": "dd-mm-yy",
  "ha-Latn-NG": "d/m/yyyy",
  "he-IL": "dd/mm/yyyy",
  "hi-IN": "dd-mm-yyyy",
  "hr-BA": "d.m.yyyy.",
  "hr-HR": "d.m.yyyy",
  "hsb-DE": "d. m. yyyy",
  "hu-HU": "yyyy. mm. dd.",
  "hy-AM": "dd.mm.yyyy",
  "id-ID": "dd/mm/yyyy",
  "ig-NG": "d/m/yyyy",
  "ii-CN": "yyyy/m/d",
  "is-IS": "d.m.yyyy",
  "it-CH": "dd.mm.yyyy",
  "it-IT": "dd/mm/yyyy",
  "iu-Cans-CA": "d/m/yyyy",
  "iu-Latn-CA": "d/mm/yyyy",
  "ja-JP": "yyyy/mm/dd",
  "ka-GE": "dd.mm.yyyy",
  "kk-KZ": "dd.mm.yyyy",
  "kl-GL": "dd-mm-yyyy",
  "km-KH": "yyyy-mm-dd",
  "kn-IN": "dd-mm-yy",
  "ko-KR": "yyyy-mm-dd",
  "kok-IN": "dd-mm-yyyy",
  "ky-KG": "dd.mm.yy",
  "lb-LU": "dd/mm/yyyy",
  "lo-LA": "dd/mm/yyyy",
  "lt-LT": "yyyy.mm.dd",
  "lv-LV": "yyyy.mm.dd.",
  "mi-NZ": "dd/mm/yyyy",
  "mk-MK": "dd.mm.yyyy",
  "ml-IN": "dd-mm-yy",
  "mn-MN": "yy.mm.dd",
  "mn-Mong-CN": "yyyy/m/d",
  "moh-CA": "m/d/yyyy",
  "mr-IN": "dd-mm-yyyy",
  "ms-BN": "dd/mm/yyyy",
  "ms-MY": "dd/mm/yyyy",
  "mt-MT": "dd/mm/yyyy",
  "nb-NO": "dd.mm.yyyy",
  "ne-NP": "m/d/yyyy",
  "nl-BE": "d/mm/yyyy",
  "nl-NL": "d-m-yyyy",
  "nn-NO": "dd.mm.yyyy",
  "nso-ZA": "yyyy/mm/dd",
  "oc-FR": "dd/mm/yyyy",
  "or-IN": "dd-mm-yy",
  "pa-IN": "dd-mm-yy",
  "pl-PL": "yyyy-mm-dd",
  "prs-AF": "dd/mm/yy",
  "ps-AF": "dd/mm/yy",
  "pt-BR": "d/m/yyyy",
  "pt-PT": "dd-mm-yyyy",
  "qut-GT": "dd/mm/yyyy",
  "quz-BO": "dd/mm/yyyy",
  "quz-EC": "dd/mm/yyyy",
  "quz-PE": "dd/mm/yyyy",
  "rm-CH": "dd/mm/yyyy",
  "ro-RO": "dd.mm.yyyy",
  "ru-RU": "dd.mm.yyyy",
  "rw-RW": "m/d/yyyy",
  "sa-IN": "dd-mm-yyyy",
  "sah-RU": "mm.dd.yyyy",
  "se-FI": "d.m.yyyy",
  "se-NO": "dd.mm.yyyy",
  "se-SE": "yyyy-mm-dd",
  "si-LK": "yyyy-mm-dd",
  "sk-SK": "d. m. yyyy",
  "sl-SI": "d.m.yyyy",
  "sma-NO": "dd.mm.yyyy",
  "sma-SE": "yyyy-mm-dd",
  "smj-NO": "dd.mm.yyyy",
  "smj-SE": "yyyy-mm-dd",
  "smn-FI": "d.m.yyyy",
  "sms-FI": "d.m.yyyy",
  "sq-AL": "yyyy-mm-dd",
  "sr-Cyrl-BA": "d.m.yyyy",
  "sr-Cyrl-CS": "d.m.yyyy",
  "sr-Cyrl-ME": "d.m.yyyy",
  "sr-Cyrl-RS": "d.m.yyyy",
  "sr-Latn-BA": "d.m.yyyy",
  "sr-Latn-CS": "d.m.yyyy",
  "sr-Latn-ME": "d.m.yyyy",
  "sr-Latn-RS": "d.m.yyyy",
  "sv-FI": "d.m.yyyy",
  "sv-SE": "yyyy-mm-dd",
  "sw-KE": "m/d/yyyy",
  "syr-SY": "dd/mm/yyyy",
  "ta-IN": "dd-mm-yyyy",
  "te-IN": "dd-mm-yy",
  "tg-Cyrl-TJ": "dd.mm.yy",
  "th-TH": "d/m/yyyy",
  "tk-TM": "dd.mm.yy",
  "tn-ZA": "yyyy/mm/dd",
  "tr-TR": "dd.mm.yyyy",
  "tt-RU": "dd.mm.yyyy",
  "tzm-Latn-DZ": "dd-mm-yyyy",
  "ug-CN": "yyyy-m-d",
  "uk-UA": "dd.mm.yyyy",
  "ur-PK": "dd/mm/yyyy",
  "uz-Cyrl-UZ": "dd.mm.yyyy",
  "uz-Latn-UZ": "dd/mm yyyy",
  "vi-VN": "dd/mm/yyyy",
  "wo-SN": "dd/mm/yyyy",
  "xh-ZA": "yyyy/mm/dd",
  "yo-NG": "d/m/yyyy",
  "zh-CN": "yyyy/m/d",
  "zh-HK": "d/m/yyyy",
  "zh-MO": "d/m/yyyy",
  "zh-SG": "d/m/yyyy",
  "zh-TW": "yyyy/m/d",
  "zu-ZA": "yyyy/mm/dd"
};
var dateFormat2LocationList = Object.keys(language2LocalDateFormat).reduce(function (ac, cr) {
  ac[language2LocalDateFormat[cr]] = ac[language2LocalDateFormat[cr]] || [];
  ac[language2LocalDateFormat[cr]].push(cr);
  return ac;
}, {});
var dateFormatList = Object.keys(dateFormat2LocationList);
/**
 *
 * @param {Date} date
 * @returns {String}
 */

function yyymmdd(date) {
  var mm = date.getMonth() + 1; // getMonth() is zero-based

  var dd = date.getDate();
  return [date.getFullYear(), (mm > 9 ? '' : '0') + mm, (dd > 9 ? '' : '0') + dd].join('/');
}
;
var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var shortDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var shortMonthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var formatTokenRegex = /([,.\-\/])|([a-zA-Z0-9]+)/g; //more

var DATE_TIME_TOKEN_RGX = /([^\s.\/:\-,]+)|([.\/:\-,]+)/i;
/**
 *
 * @param {Date} date
 * @param {String=} format
 * @returns {String}
 */

function formatDateString(date, format) {
  format = format || 'dd/mm/yyyy';
  var dt = date.getDate();
  var day = date.getDay();
  var month = date.getMonth();
  var year = date.getFullYear();
  return format.replace(formatTokenRegex, function (x) {
    switch (x) {
      case "dddd":
        return dayNames[day];

      case "ddd":
        return shortDayNames[day];

      case "dd":
        return dt < 10 ? '0' + dt : '' + dt;

      case "d":
        return '' + dt;

      case "mmmm":
        return monthNames[month];

      case "mmm":
        return shortMonthNames[month];

      case "mm":
        return month + 1 < 10 ? '0' + (month + 1) : '' + (month + 1);

      case "m":
        return '' + (month + 1);

      case 'yy':
        return (year + '').match(/..$/)[0];

      case 'yyyy':
        return year + '';

      default:
        return x;
    }
  });
}
var LOCAL_DATE_FORMAT = function () {
  var d = new Date(2021, 4, 4);
  var s = d.toLocaleDateString();
  var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) {
    switch (token) {
      case '2021':
        return 'yyyy';

      case '5':
        return 'M';

      case '05':
        return 'MM';

      case '4':
        return 'd';

      case '04':
        return 'dd';

      default:
        return token;
    }
  });
  return fm;
}();
var LOCAL_DATE_TIME_FORMAT = function () {
  var d = new Date(2021, 4, 4, 6, 7, 3);
  var s = d.toLocaleString();
  var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) {
    switch (token) {
      case '2021':
        return 'yyyy';

      case '5':
        return 'M';

      case '05':
        return 'MM';

      case '4':
        return 'd';

      case '04':
        return 'dd';

      case '06':
        if (new Date(2021, 4, 4, 18, 7, 3).toLocaleString().indexOf(18) >= 0) return 'HH';
        return 'hh';

      case '6':
        return 'h';

      case '07':
        return 'mm';

      case '7':
        return 'm';

      case '03':
        return 'ss';

      case '3':
        return 's';

      case 'AM':
        return 'a';

      default:
        return token;
    }
  });
  return fm;
}();
function formartDateString() {
  window.ALogger.warn("spelled incorrectly: formartDateString");
  return formatDateString.apply(null, arguments);
}
/**
 *
 * @param {String} text
 * @param {String} format
 * @returns {Date}
 */

function parseDateString(text, format) {
  text = nonAccentVietnamese(text).toLowerCase();
  format = nonAccentVietnamese(format).toLowerCase();
  var textTokens = text.match(formatTokenRegex) || [];
  var formatTokens = format.match(formatTokenRegex) || [];
  var year = new Date().getFullYear();
  var month = 0;
  var day = 1;
  var n = Math.min(textTokens.length, formatTokens.length);
  var textToken;
  var formatToken;

  for (var i = 0; i < n; ++i) {
    textToken = textTokens[i];
    formatToken = formatTokens[i];

    switch (formatToken) {
      case "dd":
        day = parseInt(textToken);
        break;

      case "d":
        day = parseInt(textToken);
        break;

      case "mmmm":
        month = monthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase());
        break;

      case "mmm":
        month = shortMonthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase());
        break;

      case "mm":
        month = parseInt(textToken) - 1;
        break;

      case "m":
        month = parseInt(textToken) - 1;
        break;

      case 'yy':
        year = Math.floor(new Date().getFullYear() / 100) * 100 + parseInt(textToken);
        break;

      case 'yyyy':
        year = parseInt(textToken);
        break;

      default:
        if (textToken !== formatToken) throw new Error('Unexpected token ' + textToken);
    }
  }

  if (isNaN(year)) throw new Error('Invalid year');

  if (isNaN(month) && month !== -1) {
    throw new Error('Invalid month');
  } else {
    month = Math.max(0, Math.min(11, month));
  }

  if (!isNaN(day)) {
    day = Math.max(1, Math.min(31, day));

    if (!isNaN(month)) {
      day = Math.min(daysInMonth(2000, month), day);
      if (!isNaN(year)) day = Math.min(daysInMonth(year, month), day);
    }
  } else {
    throw new Error('Invalid day');
  }

  return new Date(year, month, day);
}
/**
 * @param {Date} date
 * @return {Date}
 */

function prevDate(date) {
  return new Date(date.getTime() - MILLIS_PER_DAY);
}
/**
 * @param {Date} date
 * @return {Date}
 */

function nextDate(date) {
  return new Date(date.getTime() + MILLIS_PER_DAY);
}
/**
 * @param {Date} date
 * @return {Date} date at 00:00
 */

function beginOfHour(date) {
  var res = new Date(date.getTime());
  res.setMilliseconds(0);
  res.setSeconds(0);
  res.setMinutes(0);
  return res;
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00
 */

function beginOfDay(date, gmt) {
  var res = new Date(date.getTime());
  res.setMilliseconds(0);
  res.setSeconds(0);
  res.setMinutes(0);
  if (gmt) res.setUTCHours(0);else res.setHours(0);
  return res;
}
;
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @param {number=} begin default:0
 * @return {Date} date at 00:00
 */

function beginOfWeek(date, gmt, begin) {
  begin = begin || 0;
  var res = beginOfDay(date, gmt);

  while ((gmt ? res.getUTCDay() : res.getDay()) !== begin) {
    res = prevDate(res);
  }

  return res;
}
;
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function datetime_beginOfMonth(date, gmt) {
  gmt = !!gmt;
  var d = gmt ? date.getUTCDate() : date.getDate();
  var m = gmt ? date.getUTCMonth() : date.getMonth();
  var y = gmt ? date.getUTCFullYear() : date.getFullYear();
  var res = new Date();
  if (gmt) res.setUTCFullYear(y, m, 1);else res.setFullYear(y, m, 1);
  return beginOfDay(res, gmt);
}
;
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function beginOfYear(date, gmt) {
  gmt = !!gmt;
  var d = gmt ? date.getUTCDate() : date.getDate();
  var m = gmt ? date.getUTCMonth() : date.getMonth();
  var y = gmt ? date.getUTCFullYear() : date.getFullYear();
  var res = new Date();
  if (gmt) res.setUTCFullYear(y, 0, 1);else res.setFullYear(y, 0, 1);
  return beginOfDay(res, gmt);
}
;
/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean=} gmt default:false
 * @return {number}
 */

function compareDate(date0, date1, gmt) {
  var date0 = beginOfDay(date0, !!gmt);
  var date1 = beginOfDay(date1, !!gmt);
  return (date0.getTime() - date1.getTime()) / 86400000;
}
/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean=} gmt default:false
 * @return {number}
 */

function compareMonth(date0, date1, gmt) {
  gmt = !!gmt;
  var m0 = gmt ? date0.getUTCMonth() : date0.getMonth();
  var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear();
  var m1 = gmt ? date1.getUTCMonth() : date1.getMonth();
  var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear();
  return (y0 - y1) * 12 + (m0 - m1);
}
/***
 *
 * @param {Date} date0
 * @param {Date} date1
 * @param {boolean=}gmt
 * @returns {number}
 */

function compareYear(date0, date1, gmt) {
  gmt = !!gmt;
  var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear();
  var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear();
  return y0 - y1;
}
/**
 *
 * @param {Date} date
 * @returns {Date}
 */

function nextMonth(date) {
  var m = date.getMonth();
  var y = date.getFullYear();

  if (m == 11) {
    return new Date(y + 1, 0, 1, 0, 0, 0, 0);
  } else {
    return new Date(y, m + 1, 1, 0, 0, 0, 0);
  }
}
/**
 *
 * @param {Date} date
 * @returns {Date}
 */

function prevMonth(date) {
  var m = date.getMonth();
  var y = date.getFullYear();

  if (m == 0) {
    return new Date(y - 1, 11, 1, 0, 0, 0, 0);
  } else {
    return new Date(y, m - 1, 1, 0, 0, 0, 0);
  }
}
/**
 *
 * @param {Number} year
 * @param {Number} month
 * @returns {Number}
 */

function daysInMonth(year, month) {
  var start = new Date(year, month, 1);
  var end = nextMonth(start);
  return compareDate(end, start);
}
/****
 *
 * @param text
 * @param format support d, M, Y, Q
 * @returns {Date}
 */

function parseDateTime(text, format) {
  var tokenMap = {};
  var txtRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g');
  var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g');
  var tkMatched, fmMatched;
  tkMatched = txtRgx.exec(text);
  fmMatched = fmRgx.exec(format);
  var tkText, fmText;

  while (tkMatched && fmMatched) {
    tkText = tkMatched[0];
    fmText = fmMatched[0];

    switch (fmText) {
      case 'd':
      case 'dd':
        tokenMap.day = parseInt(tkText, 10);
        break;

      case 'M':
      case 'MM':
        tokenMap.month = parseInt(tkText, 10) - 1;
        break;

      case 'y':
      case 'yyyy':
        tokenMap.year = parseInt(tkText, 10);
        break;

      case 'h':
      case 'hh':
      case 'H':
      case 'HH':
        tokenMap.hour = parseInt(tkText, 10);
        break;

      case 'm':
      case 'mm':
        tokenMap.minute = parseInt(tkText, 10);
        break;

      case 'a':
        if (tkText === 'AM' || tkText === 'PM') tokenMap.period = tkText;else throw new Error('Invalid period(a):' + tkText);
        break;

      case 'Q':
      case 'QQ':
        tokenMap.month = (parseInt(tkText, 10) - 1) * 3;
        break;

      default:
        if (tkText !== fmText) {
          throw new Error('Unexpected token ' + JSON.stringify(tkText) + ' at ' + tkMatched.index + ', expected ' + fmText);
        }

    }

    tkMatched = txtRgx.exec(text);
    fmMatched = fmRgx.exec(format);
  }

  if (tokenMap.period) {
    if (tokenMap.period === 'AM' && tokenMap.hour === 12) tokenMap.hour = 0;else if (tokenMap.period === "PM" && tokenMap.hour < 12) tokenMap.hour += 12;
  }

  var paramNames = ['year', 'month', 'day', 'hour', 'minute', 'second'];
  var paramShortNames = ['y', 'M', 'd', 'h', 'm', 's'];
  var paramDefaultValues = [new Date().getFullYear(), 0, 1, 0, 0, 0];
  var resParam = paramDefaultValues.slice();
  var paramList = paramNames.reduce(function (ac, cr, i) {
    var sN = paramShortNames[i];

    if (cr in tokenMap) {
      ac += sN;
    }

    return ac;
  }, '');
  var paramName;

  for (var i = 0; i < paramNames.length; ++i) {
    paramName = paramNames[i];
    resParam[i] = tokenMap[paramName] === undefined ? paramDefaultValues[i] : tokenMap[paramName];
  }

  switch (paramList) {
    case 'hm':
      resParam.splice(1, 2, new Date().getMonth(), new Date().getDate());
      break;
  }

  return new Date(resParam[0], resParam[1], resParam[2], resParam[3], resParam[4], resParam[5]);
}
function formatDateTime(date, format) {
  var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g');
  return format.replace(fmRgx, function (s) {
    var res = s;

    switch (s) {
      case 'd':
      case 'dd':
        res = integerZeroPadding(date.getDate(), s.length);
        break;

      case 'M':
      case 'MM':
        res = integerZeroPadding(date.getMonth() + 1, s.length);
        break;

      case 'MMM':
        res = shortMonthNames[date.getMonth()];
        break;

      case 'MMMM':
        res = monthNames[date.getMonth()];
        break;

      case 'y':
      case 'yyyy':
        res = integerZeroPadding(date.getFullYear(), s.length);
        break;

      case 'yy':
        res = integerZeroPadding(date.getFullYear() % 100, s.length);
        break;

      case 'a':
        res = date.getHours() < 12 ? "AM" : "PM";
        break;

      case "H":
      case 'HH':
        res = integerZeroPadding(date.getHours(), s.length);
        break;

      case 'h':
      case 'hh':
        res = integerZeroPadding(1 + (date.getHours() - 1) % 12, s.length);
        break;

      case 'm':
      case 'mm':
        res = integerZeroPadding(date.getMinutes(), s.length);
        break;

      case 'Q':
      case 'QQ':
        res = integerZeroPadding(Math.floor(date.getMonth() / 3) + 1, s.length);
        break;
    }

    return res;
  });
}

function test() {
  var y = new Date().getFullYear();
  var M = new Date().getMonth();
  var d = new Date().getDate();
  [['22/12/2021', 'dd/MM/yyyy', new Date(2021, 11, 22)], ['12:55 AM', 'hh:mm a', new Date(y, M, d, 0, 55)], ['12:55 PM', 'hh:mm a', new Date(y, M, d, 12, 55)], ['22-12', 'dd-MM', new Date(y, 11, 22, 0, 0)], ['2020-11', 'yyyy-MM', new Date(2020, 10, 1, 0, 0)], ['11-2020', 'MM-yyyy', new Date(2020, 10, 1, 0, 0)], ['quarter 04, 2020', 'quarter QQ, yyyy', new Date(2020, 9, 1, 0, 0)]].forEach(function (pr) {
    var d = parseDateTime(pr[0], pr[1]);

    if ((d && d.getTime()) === pr[2].getTime()) {
      console.info("Pass ", pr);
    } else {
      console.error("Text fail with ", pr.slice(0, 2), ', expect ', pr[2], ', return ' + d);
    }
  });
  console.log(formatDateTime(new Date(), "Mùa QQ, năm y, H giờ m phút"));
} // setTimeout(test, 100);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/CMDRunner.js
function CMDRunner(_this, commands) {
  this._this = _this;
  this.commands = {};
  this.assign(commands);
}

CMDRunner.prototype.has = function (cmdName) {
  return !!this.commands[cmdName];
};

CMDRunner.prototype.add = function (cmdName, handler) {
  this.commands[cmdName] = handler;
  return this;
};

CMDRunner.prototype.remove = function (cmdName) {
  delete this.commands[cmdName];
  return this;
};

CMDRunner.prototype.assign = function (obj) {
  for (var cmdName in obj) {
    if (typeof obj[cmdName] == 'function') {
      this.add(cmdName, obj[cmdName]);
    }
  }
};

CMDRunner.prototype.invoke = function () {
  if (this.commands[arguments[0]]) {
    var args = Array.prototype.slice.call(arguments, 1);
    return this.commands[arguments[0]].apply(this._this, args);
  } else {
    throw new Error('No command: ' + arguments[0]);
  }
};

/* harmony default export */ const AppPattern_CMDRunner = (CMDRunner);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Element.js

/* harmony default export */ const Element = (HTML5_AElement);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/DomSignal.js



/***
 *
 * @extends EventEmitter
 * @param {AElement} attachHookElt
 * @constructor
 */

function DomSignal(attachHookElt) {
  HTML5_EventEmitter.call(this);
  this.signals = {};
  this.ev_attached = this.ev_attached.bind(this);
  this.$attachhook = attachHookElt || HTML5_Dom.ShareInstance._('attachhook');
  this.$attachhookParent = attachHookElt && attachHookElt.parentElement || null;
  this.$attachhook.on('attached', this.ev_attached);
}

Object.defineProperties(DomSignal.prototype, Object.getOwnPropertyDescriptors(HTML5_EventEmitter.prototype));
DomSignal.prototype.constructor = DomSignal;

DomSignal.prototype.execSignal = function () {
  var signals = this.signals;

  if (this.$attachhook) {
    this.$attachhook.remove();
    this.$attachhook.resetState();
  }

  this.signals = {};

  for (var name in signals) {
    this.fire.apply(this, [name].concat(signals[name]));
  }
};

DomSignal.prototype.emit = function (name) {
  this.signals[name] = Array.prototype.slice.call(arguments, 1);

  if (!this.$attachhookParent) {
    this.$attachhookParent = document.body;
  }

  if (!this.$attachhook.parentElement) {
    this.$attachhookParent.appendChild(this.$attachhook);
  }
};

DomSignal.prototype.ev_attached = function () {
  this.execSignal();
};

/* harmony default export */ const HTML5_DomSignal = (DomSignal);
;// CONCATENATED MODULE: ./node_modules/absol/src/Cookie/CookieStore.js


function CookieStore(converter) {
  this.converter = converter || UnicodeBase64Converter;
}

CookieStore.prototype.isEnabled = function () {
  var cookieEnabled = !!navigator.cookieEnabled; //if not IE4+ nor NS6+

  if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
    document.cookie = "testcookie_enabled";
    cookieEnabled = document.cookie.indexOf("testcookie_enabled") != -1;
  }

  return cookieEnabled;
};

CookieStore.prototype.secure = function () {
  document.cookie = "secure";
};

CookieStore.prototype.get = function (key) {
  var bkey = this.converter.encode(key).replace(/=/g, '_');
  var pairs = document.cookie.split(';').map(function (text) {
    return text.split('=');
  }).filter(function (pair) {
    return pair[0].trim() == bkey;
  });

  if (pairs.length > 0) {
    if (pairs[0].length > 1) {
      var bvalue = pairs[0][1];
      return this.converter.decode(bvalue.replace(/_/g, '=').trim());
    } else {
      return true;
    }
  } else return undefined;
};

CookieStore.prototype.set = function (key, value) {
  var bkey = this.converter.encode(key);
  var bvalue = this.converter.encode(value);
  document.cookie = bkey.replace(/=/g, '_') + "=" + bvalue.replace(/=/g, '_');
};

/* harmony default export */ const Cookie_CookieStore = (new CookieStore());
;// CONCATENATED MODULE: ./node_modules/absol/src/Cookie/parseCookieString.js
/***
 *
 * @param {string} text
 * @return {{}}
 */
function parseCookieString(text) {
  return text.split(/\s*;\s*/).reduce(function (ac, item) {
    var tokens = item.split('=');
    var name = (tokens.shift() || '').trim();
    if (!name) return ac;
    var value = (tokens.shift() || '').trim();
    if (!value) value = true;
    ac[name] = value;
    return ac;
  }, {});
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Mat3.js


function Mat3(data) {
  this.data = data || Array(6).fill(0);
}

Mat3.identity = function () {
  return new Mat3([1, 0, 0, 0, 1, 0, 0, 0, 1]);
};
/**
 *
 * @returns {Mat3|null}
 */


Mat3.prototype.invert = function () {
  var a = this.data;
  var out = Array(9);
  var a00 = a[0],
      a01 = a[1],
      a02 = a[2];
  var a10 = a[3],
      a11 = a[4],
      a12 = a[5];
  var a20 = a[6],
      a21 = a[7],
      a22 = a[8];
  var b01 = a22 * a11 - a12 * a21;
  var b11 = -a22 * a10 + a12 * a20;
  var b21 = a21 * a10 - a11 * a20; // Calculate the determinant

  var det = a00 * b01 + a01 * b11 + a02 * b21;
  if (!det) return null;
  det = 1.0 / det;
  out[0] = b01 * det;
  out[1] = (-a22 * a01 + a02 * a21) * det;
  out[2] = (a12 * a01 - a02 * a11) * det;
  out[3] = b11 * det;
  out[4] = (a22 * a00 - a02 * a20) * det;
  out[5] = (-a12 * a00 + a02 * a10) * det;
  out[6] = b21 * det;
  out[7] = (-a21 * a00 + a01 * a20) * det;
  out[8] = (a11 * a00 - a01 * a10) * det;
  return new Mat3(out);
};
/**
 *
 * @param {Vec2} v
 * @return {Mat3}
 */


Mat3.prototype.translate = function (v) {
  var out = Array(9);
  var a = this.data;
  var a00 = a[0],
      a01 = a[1],
      a02 = a[2];
  var a10 = a[3],
      a11 = a[4],
      a12 = a[5];
  var a20 = a[6],
      a21 = a[7],
      a22 = a[8];
  var x = v.x,
      y = v.y;
  out[0] = a00;
  out[1] = a01;
  out[2] = a02;
  out[3] = a10;
  out[4] = a11;
  out[5] = a12;
  out[6] = x * a00 + y * a10 + a20;
  out[7] = x * a01 + y * a11 + a21;
  out[8] = x * a02 + y * a12 + a22;
  return new Mat3(out);
};
/**
 *
 * @param {Mat3} mat
 * @returns {Mat3}
 */


Mat3.prototype.multiply = function (mat) {
  var a = this.data;
  var b = mat.data;
  var a00 = a[0],
      a01 = a[1],
      a02 = a[2];
  var a10 = a[3],
      a11 = a[4],
      a12 = a[5];
  var a20 = a[6],
      a21 = a[7],
      a22 = a[8];
  var b00 = b[0],
      b01 = b[1],
      b02 = b[2];
  var b10 = b[3],
      b11 = b[4],
      b12 = b[5];
  var b20 = b[6],
      b21 = b[7],
      b22 = b[8];
  var out = Array(9);
  out[0] = b00 * a00 + b01 * a10 + b02 * a20;
  out[1] = b00 * a01 + b01 * a11 + b02 * a21;
  out[2] = b00 * a02 + b01 * a12 + b02 * a22;
  out[3] = b10 * a00 + b11 * a10 + b12 * a20;
  out[4] = b10 * a01 + b11 * a11 + b12 * a21;
  out[5] = b10 * a02 + b11 * a12 + b12 * a22;
  out[6] = b20 * a00 + b21 * a10 + b22 * a20;
  out[7] = b20 * a01 + b21 * a11 + b22 * a21;
  out[8] = b20 * a02 + b21 * a12 + b22 * a22;
  return new Mat3(out);
};
/***
 *
 * @param {Number} rad
 * @return {Mat3}
 */


Mat3.prototype.rotate = function (rad) {
  var a = this.data;
  var a00 = a[0],
      a01 = a[1],
      a02 = a[2];
  var a10 = a[3],
      a11 = a[4],
      a12 = a[5];
  var a20 = a[6],
      a21 = a[7],
      a22 = a[8];
  var s = Math.sin(rad);
  var c = Math.cos(rad);
  var out = Array(9);
  out[0] = c * a00 + s * a10;
  out[1] = c * a01 + s * a11;
  out[2] = c * a02 + s * a12;
  out[3] = c * a10 - s * a00;
  out[4] = c * a11 - s * a01;
  out[5] = c * a12 - s * a02;
  out[6] = a20;
  out[7] = a21;
  out[8] = a22;
  return new Mat3(out);
};
/***
 *
 * @param {Vec2} v
 * @returns {Mat3}
 */


Mat3.prototype.scale = function (v) {
  var x = v.x;
  var y = v.y;
  var out = Array(9);
  out[0] = x * a[0];
  out[1] = x * a[1];
  out[2] = x * a[2];
  out[3] = y * a[3];
  out[4] = y * a[4];
  out[5] = y * a[5];
  out[6] = a[6];
  out[7] = a[7];
  out[8] = a[8];
  return new Mat3(out);
};
/***
 *
 * @return {Mat3}
 */


Mat3.prototype.transpose = function () {
  var a = this.data;
  var out = Array(9);
  out[0] = a[0];
  out[1] = a[3];
  out[2] = a[6];
  out[3] = a[1];
  out[4] = a[4];
  out[5] = a[7];
  out[6] = a[2];
  out[7] = a[5];
  out[8] = a[8];
  return new Mat3(out);
};
/**
 *
 * @param {Vec2}v
 */


Mat3.prototype.apply2DTransform = function (v) {
  var a = this.data;
  var x0 = v.x;
  var y0 = v.y;
  var x = x0 * a[0] + y0 * a[3] + a[6];
  var y = x0 * a[1] + y0 * a[4] + a[7];
  return new Math_Vec2(x, y);
};

/* harmony default export */ const Math_Mat3 = (Mat3);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/LanguageSystem.js

/***
 * @typedef LanguageSystemExtension
 * @property {function(key: string, code?: string): (string | null)} getText
 */

/****
 *
 * @constructor
 */

function LanguageSystem() {
  this.data = {};
  this.code = navigator.language || navigator.userLanguage;
  /***
   *
   * @type {LanguageSystemExtension[]}
   * @private
   */

  this._extensions = [];
}

LanguageSystem.prototype.notifyLanguageChange = function () {
  var sizeChange = false;

  function visit(elt) {
    if (elt.onlanguagechange) {
      try {
        elt.onlanguagechange();
        sizeChange = true;
      } catch (err) {
        console.error(err);
      }

      if (elt.childNodes && elt.childNodes.length > 0) {
        Array.prototype.forEach.call(elt.childNodes, visit);
      }
    }
  }

  visit(document.body);
  if (sizeChange) HTML5_ResizeSystem.update();
};
/***
 *
 * @param {ChildNode | Text | HTMLElement | Element} node
 */


LanguageSystem.prototype.bind = function (node, key) {
  if (node.nodeType === 1) {
    this.bindTextNode(node, key);
  } else if (node.nodeType === 3) {
    this.bindElement(node, key);
  }
};
/***
 *
 * @param {Text | {__as_language_key: string}} node
 * @param {string} key
 */


LanguageSystem.prototype.bindTextNode = function (node, key) {
  node.__as_language_key = key;
  node.onlanguagechange = textNodeLanguageChangeHandler;
};
/***
 *
 * @param {ChildNode | HTMLElement | Element | {__as_language_key: string}} node
 * @param {string} key
 */


LanguageSystem.prototype.bindElement = function (node, key) {
  node.__as_language_key = key;
  node.onlanguagechange = elementLanguageChangeHandler;
};
/***
 *
 * @param {string} key
 * @param {string} [code]
 */


LanguageSystem.prototype.getText = function (key, code) {
  var code = code || this.code;
  var res;
  var ex;

  for (var i = this._extensions.length - 1; i >= 0; --i) {
    ex = this._extensions[i];
    res = ex.getText && ex.getText.apply(ex, arguments);
    if (res) break;
  }

  if (!res) {
    res = this.data[code] && this.data[code][key];
  }

  return res || null;
};
/***
 *
 * @param {LanguageSystemExtension} ex
 */


LanguageSystem.prototype.addExtension = function (ex) {
  this._extensions.push(ex);
};

var LangSys = new LanguageSystem();
function textNodeLanguageChangeHandler() {
  if (this.__as_language_key) {
    var newText = LangSys.getText(this.__as_language_key);

    if (newText && newText.trim) {
      this.data = newText;
    }
  }
}
function elementLanguageChangeHandler() {
  if (this.__as_language_key) {
    var newText = LangSys.getText(this.__as_language_key);

    if (newText && newText.trim) {
      var textNode;

      for (var i = 0; i < this.childNodes.length; ++i) {
        if (this.childNodes[i].nodeType === 1) {
          textNode = this.childNodes[i];
          break;
        }
      }

      if (!textNode) {
        textNode = document.createTextNode('');
      }

      textNode.data = newText;
    }
  }
}
/* harmony default export */ const HTML5_LanguageSystem = (LangSys);
;// CONCATENATED MODULE: ./node_modules/absol/src/Code/FlagManager.js


/***
 * @extends EventEmitter
 * @constructor
 */

function FlagManager() {
  HTML5_EventEmitter.call(this);
  this.flag = {};
  this.readSetting();
}

HTML5_OOP.mixClass(FlagManager, HTML5_EventEmitter);
FlagManager.prototype.STORE_KEY = "ABSOL_FLAG";

FlagManager.prototype.readSetting = function () {
  var flagText = localStorage.getItem(this.STORE_KEY) || '{}';
  var newFlag = {};

  try {
    newFlag = JSON.parse(flagText);
  } catch (err) {}

  this.applyFlag(newFlag);
};

FlagManager.prototype.applyFlag = function (newFlag, save) {
  var changed = [];
  Object.keys(Object.assign({}, this.flag, newFlag)).forEach(function (key) {
    if (key in window) {
      if (key in newFlag) {
        if (window[key] !== newFlag[key]) {
          window[key] = newFlag[key];
          changed.push(key);
        }
      } else {
        changed.push(key);
        delete window[key];
      }
    } else {
      if (key in newFlag) {
        if (window[key] !== newFlag[key]) {
          window[key] = newFlag[key];
          changed.push(key);
        }
      }
    }
  });
  this.flag = newFlag;
  if (save) this.saveSetting();

  if (changed.length > 0) {
    this.emit('change', {
      type: 'change',
      target: this,
      keys: changed
    });
  }
};

FlagManager.prototype.saveSetting = function () {
  localStorage.setItem(this.STORE_KEY, JSON.stringify(this.flag));
};
/***
 *
 * @param {string} key
 * @param {boolean=} value
 */


FlagManager.prototype.add = function (key, value) {
  if (!key || typeof key != 'string') return;
  if (key in this.flag) return;

  if (typeof value != "boolean") {
    value = !!window[key];
  }

  this.flag[key] = value;
  window[key] = value;
  this.saveSetting();
  this.emit('change', {
    type: 'change',
    target: this,
    keys: [key]
  });
};

FlagManager.prototype.set = function (key, value) {
  if (!key || typeof key != 'string') return;

  if (typeof value != "boolean") {
    value = !!window[key];
  }

  var changed = false;
  this.flag[key] = value;

  if (window[key] !== value) {
    changed = true;
  }

  this.saveSetting();

  if (changed) {
    this.emit('change', {
      type: 'change',
      target: this,
      keys: [key]
    });
  }
};

FlagManager.prototype.remove = function (key) {
  if (key in this.flag) {
    delete window[key];
    delete this.flag[key];
    this.emit('change', {
      type: 'change',
      target: this,
      keys: [key]
    });
  }
};

/* harmony default export */ const Code_FlagManager = (new FlagManager());
;// CONCATENATED MODULE: ./node_modules/absol/src/Code/ALogger.js



Code_FlagManager.add('ABSOL_DEBUG', false);

function ALogger() {
  Code_FlagManager.on('change', this._updateProto.bind(this));

  this._updateProto();
}

ALogger.prototype._updateProto = function () {
  ['log', 'table', 'table', 'error', 'warn'].forEach(function (name) {
    var cFunction = window['ABSOL_DEBUG'] ? console[name] && console[name].bind(console) : noop;
    this[name] = cFunction || noop;
  }.bind(this));
};

ALogger.prototype.log = noop;
ALogger.prototype.table = noop;
ALogger.prototype.error = noop;
ALogger.prototype.warn = noop;
(window || __webpack_require__.g).ALogger = new ALogger();
/* harmony default export */ const Code_ALogger = (ALogger);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ObservableArray.js

/***
 * @augments EventEmitter
 * @extends Array
 * @constructor
 */

function ObservableArray(array) {
  HTML5_EventEmitter.call(this);
  Object.defineProperty(this, '_array', {
    configurable: false,
    enumerable: false,
    value: array
  });

  this._makeArrIndex(0, array.length);
}

Object.defineProperty(ObservableArray.prototype, 'unshift', {
  enumerable: false,
  value: function value() {
    var newItems = Array.prototype.slice.call(arguments);
    var cN = this._array.length;

    this._makeArrIndex(cN, this._array.length + newItems.length);

    this._array.unshift.apply(this._array, newItems);

    this.emit("additem", {
      target: this,
      items: newItems,
      type: 'additem',
      offset: 0,
      action: 'unshift'
    }, this);
  }
});
Object.defineProperty(ObservableArray.prototype, 'shift', {
  enumerable: false,
  value: function value() {
    var res = undefined;

    if (this._array.length > 0) {
      res = this._array.shift();

      this._removeIndex(this._array.length);

      this.emit("removeitem", {
        target: this,
        type: 'additem',
        offset: 0,
        action: 'shift',
        items: [res],
        item: res
      }, this);
    }

    return res;
  }
});
Object.defineProperty(ObservableArray.prototype, 'push', {
  enumerable: false,
  value: function value() {
    var newItems = Array.prototype.slice.call(arguments);
    var cN = this._array.length;

    this._makeArrIndex(this._array.length, this._array.length + newItems.length);

    this._array.push.apply(this._array, newItems);

    this.emit("additem", {
      target: this,
      items: newItems,
      type: 'additem',
      offset: cN,
      action: 'push'
    }, this);
  }
});
Object.defineProperty(ObservableArray.prototype, 'pop', {
  enumerable: false,
  value: function value() {
    var res = undefined;

    if (this._array.length > 0) {
      res = this._array.pop();

      this._removeIndex(this._array.length);

      this.emit("removeitem", {
        target: this,
        type: 'additem',
        offset: this._array.length,
        action: 'shift',
        items: [res],
        item: res
      }, this);
    }

    return res;
  }
});
Object.defineProperty(ObservableArray.prototype, 'replace', {
  enumerable: false,
  value: function value(offset, items) {
    for (var i = 0; i < items.length && offset < this._array.length; ++i, ++offset) {
      this._array[offset] = items[i];
    }
  }
});
Object.defineProperty(ObservableArray.prototype, 'toJSON', {
  enumerable: false,
  value: function value() {
    return this._array;
  }
});
Object.defineProperty(ObservableArray.prototype, 'valueOf', {
  enumerable: false,
  value: function value() {
    return this._array;
  }
});
Object.defineProperty(ObservableArray.prototype, '_makeArrIndex', {
  enumerable: false,
  value: function value(cN, nN) {
    var i;

    if (nN > cN) {
      for (i = cN; i < nN; ++i) {
        this._defineIndex(i);
      }
    } else {
      for (i = cN - 1; i >= nN; --i) {
        this._removeIndex(i);
      }
    }
  }
});
/***
 *
 * @param {number} idx
 * @private
 */

Object.defineProperty(ObservableArray.prototype, '_defineIndex', {
  enumerable: false,
  value: function value(idx) {
    if (!(idx in this)) {
      Object.defineProperty(this, idx, {
        set: function set(value) {
          var oldValue = this._array[idx];
          this._array[idx] = value;
          this.emit('setitem', {
            type: 'setitem',
            target: this,
            oldValue: oldValue,
            vale: value,
            offset: idx
          }, this);
        },
        get: function get() {
          return this._array[idx];
        },
        configurable: true,
        enumerable: true
      });
    }
  }
});
Object.defineProperty(ObservableArray.prototype, '_removeIndex', {
  enumerable: false,
  value: function value(idx) {
    delete this[idx];
  }
});
Object.defineProperty(ObservableArray.prototype, 'splice', {
  enumerable: false,
  value: function value(index, howMany) {
    var res = [];
    var newItems = Array.prototype.slice.call(arguments, 2);
    index = index == null ? 0 : index < 0 ? this._array.length + index : index;
    howMany = howMany == null ? this._array.length - index : howMany > 0 ? howMany : 0;

    if (howMany > 0) {
      this._makeArrIndex(this._array.length, this._array.length - howMany);

      res = this._array.splice(index, howMany);

      if (newItems.length > 0) {
        if (res.length > 0) {
          this.emit('replaceitem', {
            type: 'replaceitem',
            offset: index,
            oldItems: res,
            newItems: newItems,
            target: this,
            action: 'splice'
          }, this);
        } else {
          this.emit('additem', {
            type: 'additem',
            offset: index,
            items: newItems,
            target: this
          }, this);
        }
      } else {
        if (res.length > 0) {
          this.emit('removeitem', {
            target: this,
            type: 'additem',
            offset: 0,
            action: 'splice',
            items: res
          }, this);
        }
      }
    }

    return res;
  }
});
Object.defineProperty(ObservableArray.prototype, 'length', {
  set: function set(value) {
    var n = Number(value);
    var length = this._array.length;

    if (n % 1 === 0 && n >= 0) {
      if (n < length) {
        this.splice(n);
      } else if (n > length) {
        this.push.apply(this, new Array(n - length));
      }
    } else {
      throw new RangeError("Invalid array length");
    }

    this._array.length = n;
  },
  get: function get() {
    return this._array.length;
  }
});
Object.getOwnPropertyNames(Array.prototype).forEach(function (name) {
  if (!(name in ObservableArray.prototype)) {
    Object.defineProperty(ObservableArray.prototype, name, {
      configurable: false,
      enumerable: false,
      writable: false,
      value: Array.prototype[name]
    });
  }
});
Object.getOwnPropertyNames(HTML5_EventEmitter.prototype).forEach(function (name) {
  if (!(name in ObservableArray.prototype)) {
    Object.defineProperty(ObservableArray.prototype, name, {
      configurable: false,
      enumerable: false,
      writable: false,
      value: HTML5_EventEmitter.prototype[name]
    });
  }
});
/* harmony default export */ const AppPattern_ObservableArray = (ObservableArray);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ObservableStruct.js

/***
 * @extends EventEmitter
 * @param {Object} o
 * @constructor
 */

function ObservableStruct(o) {
  HTML5_EventEmitter.call(this);
  Object.defineProperty(this, '__o__', {
    configurable: false,
    enumerable: false,
    value: o
  });

  for (var key in o) {
    this.defineProperty(key);
  }
}

Object.defineProperty(ObservableStruct.prototype, 'defineProperty', {
  configurable: false,
  enumerable: false,
  writable: false,

  /***
   *
   * @param {string} name
   * @param {*=} value
   */
  value: function value(name, _value) {
    if (!(name in this)) {
      Object.defineProperty(this, name, {
        set: function set(value) {
          var oldValue = this.__o__[name];
          this.__o__[name] = value;
          this.emit('setproperty', {
            type: 'setproperty',
            target: this,
            oldValue: oldValue,
            vale: value,
            name: name
          }, this);
        },
        get: function get() {
          return this.__o__[name];
        },
        configurable: true,
        enumerable: true
      });
    }
  }
});
Object.getOwnPropertyNames(HTML5_EventEmitter.prototype).forEach(function (name) {
  if (!(name in ObservableStruct.prototype)) {
    Object.defineProperty(ObservableStruct.prototype, name, {
      configurable: false,
      enumerable: false,
      writable: false,
      value: HTML5_EventEmitter.prototype[name]
    });
  }
});
/* harmony default export */ const AppPattern_ObservableStruct = (ObservableStruct);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/circuit/CCBlock.js

/***
 *
 * @param {{id?:string}=} opt
 * @constructor
 */

function CCBlock(opt) {
  opt = opt || {};
  this.id = opt.id || randomIdent(16);
  Object.defineProperty(this, '__cc_listener__', {
    enumerable: false,
    configurable: true,
    writable: false,
    value: {}
  });
  Object.defineProperty(this, '__cc_line_list_by_id__', {
    enumerable: false,
    configurable: true,
    writable: false,
    value: {}
  });
}
/***
 *
 * @param {string} pinName
 * @param {function} listener
 * @return {CCBlock}
 */


CCBlock.prototype.pinOn = function (pinName, listener) {
  var cbList;

  if (this.__cc_listener__[pinName]) {
    cbList = this.__cc_listener__[pinName];
  } else {
    cbList = [];
    this.__cc_listener__[pinName] = cbList;
  }

  if (cbList.indexOf(listener) < 0) {
    cbList.push(listener);
  } else {
    console.warn("Duplicate pin listener!");
  }

  return this;
};

CCBlock.prototype.pinOff = function (pinName, listener) {
  if (!this.__cc_listener__[pinName]) return this;
  var cbList = this.__cc_listener__[pinName];
  var cbIdx = cbList.indexOf(listener);

  if (cbIdx >= 0) {
    cbList.splice(cbIdx);
  }

  return this;
};

CCBlock.prototype.pinFire = function (pinName) {
  if (!this.__cc_listener__[pinName]) return this;

  var cbList = this.__cc_listener__[pinName].slice();

  var args = Array.prototype.slice.call(arguments, 1);
  if (args.length === 0 && this.pinHandlers[pinName] && this.pinHandlers[pinName].get) args.push(this.pinGetValue(pinName));

  for (var i = 0; i < cbList.length; ++i) {
    try {
      cbList[i].apply(this, args);
    } catch (e) {
      console.error(e);
    }
  }
};

CCBlock.prototype.pinFireAll = function () {
  var pinNames = Object.keys(this.pinHandlers);
  var pinName;

  for (var i = 0; i < pinNames.length; ++i) {
    pinName = pinNames[i];
    if (this.pinHandlers[pinName] && this.pinHandlers[pinName].get) this.pinFire(pinName);
  }
};

CCBlock.prototype.pinReceives = function (pinName) {
  var args = Array.prototype.slice.call(arguments, 1);

  if (this.pinHandlers[pinName] && this.pinHandlers[pinName].receives) {
    this.pinHandlers[pinName].receives.apply(this, args);
  }
};

CCBlock.prototype.pinGetValue = function (pinName) {
  var args = Array.prototype.slice.call(arguments, 1);

  if (this.pinHandlers[pinName] && this.pinHandlers[pinName].get) {
    return this.pinHandlers[pinName].get.apply(this, args);
  }

  return undefined;
};

CCBlock.prototype.pinGetDescriptor = function (pinName) {
  var args = Array.prototype.slice.call(arguments, 1);
  var descriptor = this.pinHandlers[pinName] && this.pinHandlers[pinName].descriptor;

  if (descriptor) {
    if (typeof descriptor === "function") return this.pinHandlers[pinName].get.apply(this, args);
    return descriptor;
  }

  return undefined;
};

Object.defineProperty(CCBlock.prototype, 'pinLines', {
  get: function get() {
    var lineList = this.__cc_line_list_by_id__;
    return Object.keys(lineList).map(function (id) {
      return lineList[id];
    });
  }
});
CCBlock.prototype.pinHandlers = {};
/* harmony default export */ const circuit_CCBlock = (CCBlock);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/circuit/CCLine.js

/***
 *
 * @param {CCBlock} u
 * @param {string} uPinName
 * @param {CCBlock} v
 * @param {string} vPinName
 * @param {boolean=} twoWay
 * @param {{id?:string}=} opt
 * @constructor
 */

function CCLine(u, uPinName, v, vPinName, twoWay, opt) {
  opt = opt || {};
  twoWay = !!twoWay;
  Object.defineProperty(this, 'id', {
    enumerable: true,
    writable: false,
    value: opt.id || randomIdent(32)
  });
  Object.defineProperty(this, 'u', {
    enumerable: true,
    writable: false,
    value: u
  });
  Object.defineProperty(this, 'v', {
    enumerable: true,
    writable: false,
    value: v
  });
  Object.defineProperty(this, 'uPinName', {
    enumerable: true,
    writable: false,
    value: uPinName
  });
  Object.defineProperty(this, 'vPinName', {
    enumerable: true,
    writable: false,
    value: vPinName
  });
  Object.defineProperty(this, 'twoWay', {
    enumerable: true,
    writable: false,
    value: twoWay
  });
  this.vToU = this.vToU.bind(this);
  this.uToV = this.uToV.bind(this);
  this.u.pinOn(this.uPinName, this.uToV);
  if (this.twoWay) this.v.pinOn(this.vPinName, this.vToU);
  this.u.__cc_line_list_by_id__[this.id] = this;
  this.v.__cc_line_list_by_id__[this.id] = this;
}

CCLine.prototype.remove = function () {
  this.u.pinOff(this.uPinName, this.uToV);
  if (this.twoWay) this.v.pinOff(this.vPinName, this.vToU);
  delete this.u.__cc_line_list_by_id__[this.id];
  delete this.v.__cc_line_list_by_id__[this.id];
};

CCLine.prototype.uToV = function () {
  var args = [this.vPinName].concat(Array.prototype.slice.call(arguments));
  this.v.pinReceives.apply(this.v, args);
};

CCLine.prototype.vToU = function () {
  var args = [this.uPinName].concat(Array.prototype.slice.call(arguments));
  this.u.pinReceives.apply(this.u, args);
};

/* harmony default export */ const circuit_CCLine = (CCLine);
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/FileSaver.js
function FileSaver_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FileSaver_typeof = function _typeof(obj) { return typeof obj; }; } else { FileSaver_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FileSaver_typeof(obj); }

/***
 * @typedef {{revokeTimeout?: number, autoBom?:boolean }} FileSaverOpts
 *
 */

function fileExist(url) {
  var xhr = new XMLHttpRequest();
  xhr.open('HEAD', url, true);
  return new Promise(function (resolve) {
    xhr.onreadystatechange = function () {
      if (this.readyState === 4) {
        resolve(xhr.status === 200);
      }
    };

    xhr.onerror = function (err) {};

    xhr.send();
  });
}
/***
 *
 * @param url
 * @param name
 * @param {FileSaverOpts} opts
 */

function download(url, name, opts) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', url);
  xhr.responseType = 'blob';

  xhr.onload = function () {
    saveAs(xhr.response, name, opts);
  };

  xhr.onerror = function () {
    console.error('Could not download: ' + url);
  };

  xhr.send(null);
}

function bom(blob, opts) {
  if (FileSaver_typeof(opts) === undefined) opts = {
    autoBom: false
  };else if (FileSaver_typeof(opts) !== 'object') opts = {
    autoBom: !opts
  };

  if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
    return new Blob([String.fromCharCode(0xFEFF), blob], {
      type: blob.type
    });
  }

  return blob;
}

function corsEnabled(url) {
  var xhr = new XMLHttpRequest();
  xhr.open('HEAD', url, false);

  try {
    xhr.send();
  } catch (e) {}

  return xhr.status >= 200 && xhr.status < 299;
}

function click(node) {
  try {
    node.dispatchEvent(new MouseEvent('click'));
  } catch (e) {
    var evt = document.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
    node.dispatchEvent(evt);
  }
}

function normalSaveAs(blob, name, opts) {
  var URL = window.URL || window.webkitURL;
  var a = document.createElement('a');
  name = name || blob.name || 'download';
  a.download = name;
  a.rel = 'noopener';

  if (typeof blob === 'string') {
    a.href = blob;

    if (a.origin !== location.origin) {
      if (corsEnabled(a.href)) {
        download(blob, name, opts);
      } else {
        a.target = '_blank';
        click(a);
      }
    } else {
      click(a);
    }
  } else {
    a.href = URL.createObjectURL(blob);
    setTimeout(function () {}, opts && opts.revokeTimeout || 4E4);
    setTimeout(function () {
      click(a);
    }, 0);
  }
}

function msSaveAs(blob, name, opts) {
  name = name || blob.name || 'download';

  if (typeof blob === 'string') {
    if (corsEnabled(blob)) {
      download(blob, name, opts);
    } else {
      var a = document.createElement('a');
      a.href = blob;
      a.target = '_blank';
      setTimeout(function () {
        click(a);
      });
    }
  } else {
    navigator.msSaveOrOpenBlob(bom(blob, opts), name);
  }
}

function popupSaveAs(blob, name, opts, popup) {
  if (typeof blob === 'string') {
    download(blob, name, opts);
    return;
  }

  popup = popup || open('', '_blank');

  if (popup) {
    popup.document.title = name || 'download';
    popup.document.body.innerText = "downloading...";
  }

  name = name || blob.name || 'download';
  blob.name = name;
  var force = blob.type === 'application/octet-stream';
  var isSafari = Detector_BrowserDetector.isSafari;
  var isChromeIOS = Detector_BrowserDetector.isChromeIOS;
  var isMacOSWebView = Detector_BrowserDetector.isMacOSWebView;
  var isSafariUnder13 = Detector_BrowserDetector.browser.type === 'safari' && parseFloat(Detector_BrowserDetector.browser.version) < 13;

  if ((!isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined' & !isSafariUnder13) {
    var reader = new FileReader();

    reader.onloadend = function () {
      var url = reader.result;
      url = isChromeIOS ? url : url.replace(/^data:[^;]*/, 'data:attachment/file');
      if (popup) popup.location.href = url;else location = url;
      popup = null;
    };

    reader.readAsDataURL(blob);
  } else {
    var URL = window.URL || window.webkitURL;
    var url = URL.createObjectURL(blob);
    if (popup) popup.location.href = url;else location.href = url;
    popup = null;
    setTimeout(function () {
      URL.revokeObjectURL(blob);
    }, opts && opts.revokeTimeout || 4E4);
  }
}
/***
 *
 * @param {string  | File | Blob}blob
 * @param {string=} name
 * @param {Object=} opts
 * @param {Object=} popup
 */


function saveAs(blob, name, opts, popup) {
  if ((typeof window === "undefined" ? "undefined" : FileSaver_typeof(window)) !== "object" || window !== self) {
    console.error("FileSaver is not support!");
  } else if ('download' in HTMLAnchorElement.prototype && !Detector_BrowserDetector.isMacOSWebView) {
    normalSaveAs(blob, name, opts);
  } else if ('msSaveOrOpenBlob' in navigator) {
    msSaveAs(blob, name, opts);
  } else {
    setTimeout(function () {
      popupSaveAs(blob, name, opts, popup);
    }, 100);
  }
}
function saveTextAs(text, name, opts) {
  var blob = new Blob([text], {
    type: 'text/plain'
  });
  saveAs(blob, name, opts);
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/RemoteThread.tpl
/* harmony default export */ const RemoteThread = ("function EventEmitter() {\n    if (!this._azar_extendEvents) {\n        Object.defineProperty(this, '_azar_extendEvents', {\n            enumerable: false,\n            value: this._azar_extendEvents || { supported: {}, prioritize: {}, nonprioritize: {} }\n        });\n        Object.defineProperty(this, '__azar_force', {\n            value: true,\n            enumerable: false\n        });\n    }\n}\n\n\nEventEmitter.prototype.defineEvent = function (name) {\n    if (name instanceof Array) {\n        for (var i = 0; i < name.length; ++i)\n            this._azar_extendEvents.supported[name[i]] = true;\n    }\n    else\n        this._azar_extendEvents.supported[name] = true;\n    return this;\n};\n\nEventEmitter.prototype.isSupportedEvent = function (name) {\n    return true;\n};\n\n\nEventEmitter.prototype.emit = function (eventName, data) {\n    this.fire.apply(this, arguments);\n};\n\nEventEmitter.prototype.fire = function (eventName, data) {\n    var others = Array.prototype.slice.call(arguments, 1);\n    if (this.isSupportedEvent(eventName)) {\n        var listenerList;\n        var i;\n        if (this._azar_extendEvents.prioritize[eventName]) {\n            listenerList = this._azar_extendEvents.prioritize[eventName].slice();\n            for (i = 0; i < listenerList.length; ++i) {\n                try {\n                    listenerList[i].wrappedCallback.apply(this, others);\n                } catch (e) {\n                    console.error(e);\n                }\n            }\n        }\n\n        if (this._azar_extendEvents.nonprioritize[eventName]) {\n            listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();\n            for (i = 0; i < listenerList.length; ++i) {\n                try {\n                    listenerList[i].wrappedCallback.apply(this, others);\n                } catch (e) {\n                    console.error(e);\n                }\n            }\n        }\n    }\n    else {\n        if (this.dispatchEvent) {\n            var event = new Event(eventName);\n            data && Object.assign(event, data);\n            this.dispatchEvent(event);\n        }\n        else\n            throw new Error(\"Not support event \" + eventName);\n    }\n    return this;\n};\n\n\nEventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {\n    if (typeof arg0 == 'object') {\n        for (var key in arg0) {\n            this.eventEmittorOnWithTime(isOnce, key, arg0[key]);\n        }\n        return this;\n    }\n    else {\n        if (typeof arg1 == 'object') {\n            return this.eventEmittorOnWithTime(isOnce, arg0, arg1.callback, arg1.cap);\n        }\n        else {\n            var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\n            var eventIndex = -1;\n            for (var i = 0; i < eventArr.length; ++i) {\n                if (eventArr[i].wrappedCallback == arg1) {\n                    eventIndex = i;\n                    break;\n                }\n            }\n            if (eventIndex < 0) {\n                var event = { isOnce: isOnce, eventName: arg0, callback: arg1, cap: !!arg2 };\n                //wrappedCallback will be call\n                if (isOnce) {\n                    event.wrappedCallback = function () {\n                        event.callback.apply(this, arguments);\n                        this.off(event.eventName, event.wrappedCallback, event.cap);\n                    };\n                }\n                else {\n                    event.wrappedCallback = event.callback;\n                }\n\n                if (!this.isSupportedEvent(arg0)) {\n                    if (this.addEventListener) {\n                        this.addEventListener(arg0, event.wrappedCallback, !!arg2);\n                    }\n                    else {\n                        this.attachEvent('on' + arg0, arg1, !!arg2);\n                    }\n                }\n\n                eventArr.push(event);\n                this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr;\n            }\n            else {\n                console.warn(\"dupplicate event\");\n            }\n\n        }\n        return this;\n    }\n};\n\n\nEventEmitter.prototype.on = function (arg0, arg1, arg2) {\n    this.eventEmittorOnWithTime(false, arg0, arg1, arg2);\n    return this;\n};\n\n\nEventEmitter.prototype.once = function (arg0, arg1, arg2) {\n    this.eventEmittorOnWithTime(true, arg0, arg1, arg2);\n    return this;\n};\n\nEventEmitter.prototype.off = function (arg0, arg1, arg2) {\n    if (typeof arg0 == 'object') {\n        for (var key in arg0) {\n            this.off(key, arg0[key]);\n        }\n        return this;\n    }\n    else {\n        if (typeof arg1 == 'object') {\n            return this.off(arg0, arg1.callback, arg1.cap);\n        }\n        else {\n            var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\n            var newEventArray = [];\n            for (var i = 0; i < eventArr.length; ++i) {\n                var event = eventArr[i];\n                if (event.wrappedCallback == arg1) {\n                    //Dont add to newEventArray\n                    if (this.isSupportedEvent(arg0)) {\n                    }\n                    else {\n                        if (this.removeEventListener) {\n                            this.removeEventListener(event.eventName, event.wrappedCallback, !!event.cap);\n                        }\n                        else {\n                            this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.cap);\n                        }\n                    }\n                }\n                else {\n                    newEventArray.push(event);\n                }\n            }\n            this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray;\n            return this;\n        }\n    }\n\n};\n\n\n/**\n *\n * @param {Worker} host\n */\nfunction IFrameBridge(host, origin) {\n    EventEmitter.call(this);\n    this.detach();\n    this.origin = origin;\n    if (host) this.attach(host);\n    this.__azarResolveCallbacks = {};\n}\n\nIFrameBridge.prototype.attach = function (host) {\n    this.host = host;\n    if (this.host.addEventListener) {\n        this.host.addEventListener(\"message\", this.__azarMessageListener.bind(this), false);\n    }\n    else if (this.host.attachEvent) {\n        this.host.attachEvent(\"onmessage\", this.__azarMessageListener.bind(this));\n    }\n    else {\n        this.host.onmessage = this.__azarMessageListener.bind(this);\n    }\n    this.__IFrameBridge_resolve();\n};\n\nIFrameBridge.prototype.detach = function () {\n    this.sync = new Promise(function (resolve) {\n        this.__IFrameBridge_resolve = resolve;\n    }.bind(this));\n};\n\nObject.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(EventEmitter.prototype));\nIFrameBridge.prototype.constructor = IFrameBridge;\n\nIFrameBridge.prototype.__azarMessageListener = function (event) {\n    this.__azarHandleData(event.data);\n};\n\n\nIFrameBridge.prototype.__azarHandleData = function (data) {\n    if (data.type) {\n        if (data.type == \"INVOKE\") {\n            try {\n                var result = this.__azarSelfInvoke(data.name, data.params);\n                if (result && typeof result.then == 'function') {\n                    result.then(function (result) {\n                        this.__azarResolve(data.taskId, result);\n                    }.bind(this))\n                        .catch(function (err) {\n                            console.error(err);\n                            this.__azarResolve(data.taskId, null, { message: err.message, stack: err.stack });\n                        }.bind(this));\n                }\n                else {\n                    this.__azarResolve(data.taskId, result);\n                }\n            } catch (err) {\n                console.error(err);\n                this.__azarResolve(data.taskId, null, { message: err.message, stack: err.stack });\n            }\n\n\n        }\n        else if (data.type == \"INVOKE_RESULT\") {\n            if (this.__azarResolveCallbacks[data.taskId]) {\n                if (data.error) {\n                    this.__azarRejectCallbacks[data.taskId](data.error);\n                }\n                else {\n                    this.__azarResolveCallbacks[data.taskId](data.result);\n                }\n                delete this.__azarResolveCallbacks[data.taskId];\n                delete this.__azarRejectCallbacks[data.taskId];\n            }\n        }\n        else if (data.type == \"EMIT\") {\n            this.fire.apply(this, data.params);\n        }\n        else this.fire('message', data, this);\n    }\n};\n\n\nIFrameBridge.prototype.__azarResolve = function (taskId, result, error) {\n    var data = {\n        type: \"INVOKE_RESULT\",\n        taskId: taskId,\n        result: result,\n        error: error\n    };\n\n    if (this.origin) {\n        this.host.postMessage(data, this.origin);\n    }\n    else {\n        this.host.postMessage(data);\n    }\n};\n\n\nIFrameBridge.prototype.__azarSelfInvoke = function (name, params) {\n    if (typeof this[name] == 'function') {\n        return this[name].apply(this, params);\n    }\n    else {\n        return this[name];\n    }\n};\n\n\nIFrameBridge.prototype.emit = function () {\n    var params = [];\n    params.push.apply(params, arguments);\n    this.sync.then(function () {\n        var data = {\n            type: \"EMIT\",\n            params: params\n        };\n        if (this.origin) {\n            this.host.postMessage(data, this.origin);\n        }\n        else {\n            this.host.postMessage(data);\n        }\n    }.bind(this));\n    return this;\n};\n\n\nIFrameBridge.prototype.invoke = function (name) {\n    var params = [];\n    params.push.apply(params, arguments);\n    params.shift();\n    return this.sync.then(function () {\n        var indent = randomIdent(32);\n        var data = {\n            type: 'INVOKE',\n            params: params,\n            taskId: indent,\n            name: name\n        };\n        if (this.origin) {\n            this.host.postMessage(data, this.origin);\n        }\n        else {\n            this.host.postMessage(data);\n        }\n        return new Promise(function (resolve) {\n            this.__azarResolveCallbacks[indent] = resolve;\n        }.bind(this));\n    }.bind(this));\n};\n\nIFrameBridge.prototype.importScriptURLs = function () {\n    return this.invoke.apply(this, ['_receiveScriptURLs'].concat(Array.prototype.slice.call(arguments)));\n};\n\nIFrameBridge.prototype._receiveScriptURLs = function () {\n    if (self.importScripts) {\n        self.importScripts.apply(self, arguments);\n    }\n};\n\n\nIFrameBridge.prototype._receiveMethod = function (name, code) {\n    this[name] = (new Function('return ' + code))();\n};\n\nObject.defineProperties(self, Object.getOwnPropertyDescriptors(IFrameBridge.prototype));\nIFrameBridge.call(self, self);");
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/Thread.js



/***
 *
 * @param {{methods?:Object, extendCode: string}} opt
 * @constructor
 */

function Thread(opt) {
  this.worker = new Worker(this._makeCodeUrl(opt));
  Network_IFrameBridge.call(this, this.worker);

  this._attachClientMethods(opt.methods);
}

Thread.prototype._makeCodeUrl = function (opt) {
  var code = [this._makeLibCode(opt.libs), RemoteThread, this._makeMethodCode(opt.methods), this._makePropCode(opt.props), opt.extendCode || ''].join('\n\n');
  var blob = new Blob([code], {
    type: 'application/javascript'
  });
  var url = URL.createObjectURL(blob);
  return url;
};

Thread.prototype._makePropCode = function (props) {
  if (!props) return '';
  return 'Object.assign(self, ' + JSON.stringify(props) + ');';
};

Thread.prototype._makeLibCode = function (libs) {
  if (!libs) return '';
  return libs.map(function (lib) {
    return 'self.importScripts(' + JSON.stringify(lib) + ');';
  }).join('\n');
};

Thread.prototype._makeMethodCode = function (methods) {
  if (!methods) return '';
  return Object.keys(methods).map(function (key) {
    var fx = methods[key];

    if (typeof fx === "function") {
      fx = fx.toString();
      return 'self[' + JSON.stringify(key) + '] = ' + fx;
    }
  }).join('\n\n');
};

Thread.prototype._attachClientMethods = function (methods) {
  if (!methods) return '';
  Object.keys(methods).reduce(function (ac, name) {
    ac[name] = function () {
      return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments)));
    };

    return ac;
  }, this);
};

HTML5_OOP.mixClass(Thread, Network_IFrameBridge);
/* harmony default export */ const Network_Thread = (Thread);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/generator.js
function generator_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { generator_typeof = function _typeof(obj) { return typeof obj; }; } else { generator_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return generator_typeof(obj); }

function generateJSVariable(obj, indent) {
  indent = indent || '';
  var childIndent = indent + '    ';

  if (obj === null) {
    return 'null';
  } else if (obj instanceof Array) {
    if (obj.length === 0) return '[]';
    return '[\n' + obj.map(function (it) {
      return childIndent + generateJSVariable(it, childIndent);
    }).join(',\n') + '\n' + indent + ']';
  } else if (generator_typeof(obj) === 'object') {
    var keys = Object.keys(obj);
    if (keys.length === 0) return '{}';
    return '{\n' + keys.map(function (key) {
      var value = obj[key];
      if (!key.match(/^[a-zA-Z_$]([a-zA-Z_0-9$]*)$/)) key = JSON.stringify(key);
      return childIndent + key + ': ' + generateJSVariable(value, childIndent);
    }).join(',\n') + '\n' + indent + '}';
  } else if (obj === undefined) {
    return 'undefined';
  } else {
    return JSON.stringify(obj);
  }
}
;// CONCATENATED MODULE: ./node_modules/absol/src/index.js
























































var src_absol = {
  "int": int_namespaceObject,
  Rectangle: Math_Rectangle,
  ResizeSystem: HTML5_ResizeSystem,
  Arc: Math_Arc,
  NumRange: Math_NumRange,
  CookieStore: Cookie_CookieStore,
  parseCookieString: parseCookieString,
  CMDRunner: AppPattern_CMDRunner,
  ContextManager: AppPattern_ContextManager,
  Application: AppPattern_Application,
  Fragment: AppPattern_Fragment,
  VarScope: AppPattern_VarScope,
  Context: AppPattern_Context,
  Activity: AppPattern_Activity,
  Element: Element,
  ElementNS: HTML5_AElementNS,
  AElement: Element,
  AElementNS: HTML5_AElementNS,
  DomSignal: HTML5_DomSignal,
  JSPath: HTML5_JSPath,
  TemplateString: JSMaker_TemplateString,
  TemplateXML: JSMaker_TemplateXML,
  Dom: HTML5_Dom,
  Svg: HTML5_Svg,
  BrowserDetector: Detector_BrowserDetector,
  OOP: HTML5_OOP,
  XML: XML_XML,
  Color: Color_Color,
  EventEmitter: HTML5_EventEmitter,
  JSZip: window.JSZip,
  IFrameBridge: Network_IFrameBridge,
  JSDocx: JSDocx_JSDocx,
  Broadcast: Network_Broadcast,
  text: Text_namespaceObject,
  file: file_namespaceObject,
  base64: base64_namespaceObject,
  Alarm: Time_Alarm,
  coreDom: HTML5_Dom.ShareInstance,
  coreSvg: HTML5_Svg.ShareInstance,
  require: function require(tagName) {
    return this.coreDom.require(tagName) || this.coreSvg.require(tagName);
  },
  domCreator: HTML5_Dom.ShareInstance.creator,
  svgCreator: HTML5_Dom.ShareInstance.creator,
  _: HTML5_Dom.ShareInstance._,
  $: HTML5_Dom.ShareInstance.$,
  $$: HTML5_Dom.ShareInstance.$$,
  _svg: HTML5_Svg.ShareInstance._,
  $svg: HTML5_Svg.ShareInstance.$,
  Ref: AppPattern_Ref,
  XHR: Network_XHR,
  string: Object.assign({}, stringFormat_namespaceObject, stringGenerate_namespaceObject),
  jsx: {
    dom: dom_namespaceObject,
    attribute: attribute_namespaceObject
  },
  clipboard: Clipboard_namespaceObject,
  dataStructure: {
    Heap: DataStructure_Heap
  },
  datetime: datetime_namespaceObject,
  Vec2: Math_Vec2,
  Mat3: Math_Mat3,
  LanguageSystem: HTML5_LanguageSystem,
  ALogger: Code_ALogger,
  FlagManager: Code_FlagManager,
  ObservableArray: AppPattern_ObservableArray,
  ObservableStruct: AppPattern_ObservableStruct,
  circuit: {
    CCBlock: circuit_CCBlock,
    CCLine: circuit_CCLine
  },
  FileSaver: FileSaver_namespaceObject,
  Thread: Network_Thread,
  generateJSVariable: generateJSVariable
};
/* harmony default export */ const src = (src_absol);
;// CONCATENATED MODULE: ./node_modules/absol/src/absol.js
 //for old plugin

src['HTML' + 'El' + 'ement'.toLowerCase()] = src.Element;
src.dom = src.Dom;
src.event = src.EventEmitter;
src.Event = src.EventEmitter;
src.color = src.Color;
src.documentReady = src.Dom.documentReady;
window.AComp = src.AComp;
window.PhotoSwipeViewer = src.PhotoSwipeViewer;
window.IFrameBridge = src.IFrameBridge;
window.absol = src;
var mapKeys = {
  ShareDom: 'coreDom',
  ShareDomCreator: 'domCreator',
  ShareSvgC: 'coreSvgCreator',
  ShareSvgCreator: 'svgCreator',
  ShareCreator: 'domCreator'
};
src.logData = [];

src.log = function () {
  src.logData.push([new Error('TraceError')].concat(Array.prototype.slice.call(arguments)));
};

Object.keys(mapKeys).forEach(function (key) {
  var valueKey = mapKeys[key];
  Object.defineProperty(src, key, {
    get: function get() {
      if (!this['__warn' + key + '__']) {
        this['__warn' + key + '__'] = true;
        src.log("use " + valueKey + ' instead of ' + key);
      }

      return this[valueKey];
    }
  });
});
;// CONCATENATED MODULE: ./node_modules/absol/src/polyfill.js

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/default.css
var css_default = __webpack_require__(7425);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/ACore.js


var ACore = new HTML5_Dom({
  creator: Object.assign({}, HTML5_Dom.ShareInstance.creator)
});
var ACore_ = ACore._;
var $ = ACore.$;
var $$ = ACore.$$;
/* harmony default export */ const absol_acomp_ACore = (ACore);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/MaterialDesignIconsAdapter.js
/***
 * Old name to new name
 */


var MaterialDesignIconsNameMap = {
  'settings-outline': 'cog-outline',
  'contact-mail': 'card-account-mail'
};
var MaterialDesignIconsCode = {};
HTML5_Dom.documentReady.then(function () {
  var _ = absol_acomp_ACore._;

  var a = _({
    tag: 'span',
    "class": ['mdi'],
    style: {
      display: 'none'
    }
  }).addTo(document.body);

  var content;
  var cssCodeLines = [];

  for (var oldName in MaterialDesignIconsNameMap) {
    a.addClass('mdi-' + MaterialDesignIconsNameMap[oldName]);
    content = getComputedStyle(a, '::before').content;
    MaterialDesignIconsCode[oldName] = content;
    cssCodeLines.push('.mdi-' + oldName + '::before{content:' + content + '}');
    a.removeClass('mdi-' + MaterialDesignIconsNameMap[oldName]);
  }

  a.remove();

  var styleElt = _({
    tag: 'style',
    props: {
      innerHTML: cssCodeLines.join('\n')
    }
  }).addTo(document.head);
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DebugTask.js


var DebugTask_ = absol_acomp_ACore._;
var DebugTask_$ = absol_acomp_ACore.$;
var originSetTimeout = setTimeout;
var originClearTimeout = clearTimeout;
var originSetInterval = setInterval;
var originClearInterval = clearInterval;
var pendingTimeout = 0;
var pendingInterval = 0;
var timeoutDict = {};
var intervalDict = {};

function DebugTask() {
  var res = DebugTask_({
    "class": 'absol-debug-task',
    child: [{
      child: [{
        tag: 'span',
        "class": 'absol-debug-task-name',
        child: {
          text: 'settimeout '
        }
      }, {
        tag: 'span',
        "class": ['absol-debug-task-value', 'settimeout'],
        child: {
          text: '0'
        }
      }]
    }, {
      child: [{
        tag: 'span',
        "class": 'absol-debug-task-name',
        child: {
          text: 'setintervel '
        }
      }, {
        tag: 'span',
        "class": ['absol-debug-task-value', 'setinterval'],
        child: {
          text: '0'
        }
      }]
    }, {
      child: [{
        tag: 'span',
        "class": 'absol-debug-task-name',
        child: {
          text: 'Work '
        }
      }, {
        tag: 'span',
        "class": ['absol-debug-task-value', 'work'],
        child: {
          text: '0%'
        }
      }]
    }]
  });

  res._timeout = 0;
  res._interval = 0;
  res._work = 0;
  res.$setTimeOutValue = DebugTask_$('.absol-debug-task-value.settimeout', res);
  res.$setIntervalValue = DebugTask_$('.absol-debug-task-value.setinterval', res);
  res.$setWorkValue = DebugTask_$('.absol-debug-task-value.work', res);
  return res;
}

DebugTask.property = {};
DebugTask.property.timeout = {
  set: function set(value) {
    this._timeout = value;
    this.$setTimeOutValue.innerHTML = value + '';
  },
  get: function get() {
    return this._timeout;
  }
};
DebugTask.property.interval = {
  set: function set(value) {
    this._interval = value;
    this.$setIntervalValue.innerHTML = value + '';
  },
  get: function get() {
    return this._interval;
  }
};
DebugTask.property.work = {
  set: function set(value) {
    this._work = value;
    value = (value * 100).toFixed(1);
    this.$setWorkValue.innerHTML = value + '%';
  },
  get: function get() {
    return this._work;
  }
};

DebugTask.start = function () {
  if (DebugTask.started) return;

  if (!DebugTask.$view) {
    DebugTask.$view = DebugTask_('debugtask');
  }

  var times = [];
  originSetInterval(function () {
    var now = performance.now();

    while (times.length > 0 && times[0].end < now - 2000) {
      times.shift();
    }

    if (times.length == 0) DebugTask.$view.work = 0;
  }, 3000);

  __webpack_require__.g.setTimeout = function () {
    var args = Array.prototype.map.call(arguments, function (x) {
      return x;
    });
    var originCallback = arguments[0];
    if (typeof originCallback == 'undefined') return;

    if (typeof originCallback == 'string') {
      originCallback = new Function(originCallback);
    }

    args[0] = function () {
      var ret;

      try {
        var now = performance.now();

        while (times.length > 0 && times[0].end < now - 1000) {
          times.shift();
        }

        ret = originCallback.apply(null, arguments);
        var now1 = performance.now();

        var _long = now1 - now;

        times.push({
          "long": _long,
          start: now,
          end: now1
        });
        var sTime = 0;

        for (var i = 0; i < times.length; ++i) {
          sTime += times[i]["long"];
        }

        DebugTask.$view.work = sTime / Math.max(now1 - times[0].start, 1000);
      } catch (e) {
        console.error(e);
      }

      if (timeoutDict[timeoutId]) {
        pendingTimeout--;
        delete timeoutDict[timeoutId];
        DebugTask.$view.timeout = pendingTimeout;
      }

      return ret;
    };

    var timeoutId = originSetTimeout.apply(__webpack_require__.g, args);
    pendingTimeout++;
    timeoutDict[timeoutId] = true;
    DebugTask.$view.timeout = pendingTimeout;
    return timeoutId;
  };

  __webpack_require__.g.clearTimeout = function (timeoutId) {
    if (timeoutDict[timeoutId]) {
      pendingTimeout--;
      delete timeoutDict[timeoutId];
      DebugTask.$view.timeout = pendingTimeout;
    }

    return originClearTimeout.apply(__webpack_require__.g, arguments);
  };

  __webpack_require__.g.setInterval = function () {
    var args = Array.prototype.map.call(arguments, function (x) {
      return x;
    });
    var originCallback = arguments[0];
    if (typeof originCallback == 'undefined') return;

    if (typeof originCallback == 'string') {
      originCallback = new Function(originCallback);
    }

    args[0] = function () {
      var ret;

      try {
        var now = performance.now();

        while (times.length > 0 && times[0].end < now - 1000) {
          times.shift();
        }

        ret = originCallback.apply(null, arguments);
        var now1 = performance.now();

        var _long2 = now1 - now;

        times.push({
          "long": _long2,
          start: now,
          end: now1
        });
        var sTime = 0;

        for (var i = 0; i < times.length; ++i) {
          sTime += times[i]["long"];
        }

        DebugTask.$view.work = sTime / Math.max(now1 - times[0].start, 1000);
      } catch (e) {
        console.error(e);
      }

      return ret;
    };

    var intervalId = originSetInterval.apply(__webpack_require__.g, args);
    pendingInterval++;
    intervalDict[intervalId] = true;
    DebugTask.$view.interval = pendingInterval;
    return intervalId;
  };

  __webpack_require__.g.clearInterval = function (intervalId) {
    var args = Array.prototype.map.call(arguments, function (x) {
      return x;
    });

    if (intervalDict[intervalId]) {
      pendingInterval--;
      delete intervalDict[intervalId];
      DebugTask.$view.interval = pendingInterval;
    }

    return originClearInterval.apply(__webpack_require__.g, args);
  };

  HTML5_Dom.documentReady.then(function () {
    DebugTask.$view.addTo(document.body);
  });
};

absol_acomp_ACore.install('debugtask', DebugTask);
/* harmony default export */ const js_DebugTask = (DebugTask);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/debugtask.css
var debugtask = __webpack_require__(9858);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Draggable.js


function Draggable(element) {
  if (!element) element = absol_acomp_ACore._('div');else absol_acomp_ACore.$(element);
  element.defineEvent(['predrag', 'drag', 'begindrag', 'enddrag']);
  var body = absol_acomp_ACore.$('body');
  var isMoving = false;
  var firstMove = false;
  var offsetX;
  var offsetY;
  var fontSize;
  var left0em, top0em, left0, top0;

  var finishMoving = function finishMoving(event) {
    if (isMoving) {
      isMoving = false;
      body.off('mousemove', mouseMoveEventHandler);
      event.moveDX = event.clientX - offsetX;
      event.moveDY = event.clientY - offsetY;
      event.moveDXem = event.moveDX / fontSize;
      event.moveDYem = event.moveDY / fontSize;
      event.moveToX = left0 + event.moveDX;
      event.moveToY = top0 + event.moveDY;
      element.emit('enddrag', event);
    }
  };

  var mouseUpEventHandler = function mouseUpEventHandler(event) {
    finishMoving(event);
  };

  var mouseMoveEventHandler = function mouseMoveEventHandler(event) {
    event.preventDefault();
    event.moveDX = event.clientX - offsetX;
    event.moveDY = event.clientY - offsetY;
    event.moveDXem = event.moveDX / fontSize;
    event.moveDYem = event.moveDY / fontSize;
    event.moveToX = left0 + event.moveDX;
    event.moveToY = top0 + event.moveDY;
    event.moveToXem = left0em + event.moveDXem;
    event.moveToYem = top0em + event.moveDYem;

    if (firstMove) {
      firstMove = false;
      element.emit('begindrag', event);
    }

    element.emit('drag', event);
  };

  var mouseOutEventHandler = function mouseOutEventHandler(event) {
    finishMoving(event);
  };

  var mouseDownEventHandler = function mouseDownEventHandler(event) {
    isMoving = true;
    firstMove = true;
    body.on('mousemove', mouseMoveEventHandler);
    body.once('mouseleave', mouseOutEventHandler);
    body.once('mouseup', mouseUpEventHandler);
    fontSize = this.getFontSize();
    offsetX = event.clientX;
    offsetY = event.clientY;
    left0 = parseFloat(element.getComputedStyleValue('left').replace('px', ''));
    top0 = parseFloat(element.getComputedStyleValue('top').replace('px', ''));
    left0em = left0 / fontSize;
    top0em = top0 / fontSize;
    event.x0 = left0;
    event.y0 = top0;
    event.y0em = left0em;
    event.y0em = top0em;
    element.emit('predrag', event);
  };

  element.on('mousedown', mouseDownEventHandler);
  return element;
}

;
/* harmony default export */ const js_Draggable = (Draggable);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiChars.js
var EmojiChars = [["Smileys & Emotion", [["face-smiling", [[["U+1F600"], "😀", "grinning face"], [["U+1F603"], "😃", "grinning face with big eyes"], [["U+1F604"], "😄", "grinning face with smiling eyes"], [["U+1F601"], "😁", "beaming face with smiling eyes"], [["U+1F606"], "😆", "grinning squinting face"], [["U+1F605"], "😅", "grinning face with sweat"], [["U+1F923"], "🤣", "rolling on the floor laughing"], [["U+1F602"], "😂", "face with tears of joy"], [["U+1F642"], "🙂", "slightly smiling face"], [["U+1F643"], "🙃", "upside-down face"], [["U+1F609"], "😉", "winking face"], [["U+1F60A"], "😊", "smiling face with smiling eyes"], [["U+1F607"], "😇", "smiling face with halo"]]], ["face-affection", [[["U+1F970"], "🥰", "smiling face with hearts"], [["U+1F60D"], "😍", "smiling face with heart-eyes"], [["U+1F929"], "🤩", "star-struck"], [["U+1F618"], "😘", "face blowing a kiss"], [["U+1F617"], "😗", "kissing face"], [["U+263A"], "☺", "smiling face"], [["U+1F61A"], "😚", "kissing face with closed eyes"], [["U+1F619"], "😙", "kissing face with smiling eyes"], [["U+1F972"], "🥲", "⊛ smiling face with tear"]]], ["face-tongue", [[["U+1F60B"], "😋", "face savoring food"], [["U+1F61B"], "😛", "face with tongue"], [["U+1F61C"], "😜", "winking face with tongue"], [["U+1F92A"], "🤪", "zany face"], [["U+1F61D"], "😝", "squinting face with tongue"], [["U+1F911"], "🤑", "money-mouth face"]]], ["face-hand", [[["U+1F917"], "🤗", "hugging face"], [["U+1F92D"], "🤭", "face with hand over mouth"], [["U+1F92B"], "🤫", "shushing face"], [["U+1F914"], "🤔", "thinking face"]]], ["face-neutral-skeptical", [[["U+1F910"], "🤐", "zipper-mouth face"], [["U+1F928"], "🤨", "face with raised eyebrow"], [["U+1F610"], "😐", "neutral face"], [["U+1F611"], "😑", "expressionless face"], [["U+1F636"], "😶", "face without mouth"], [["U+1F60F"], "😏", "smirking face"], [["U+1F612"], "😒", "unamused face"], [["U+1F644"], "🙄", "face with rolling eyes"], [["U+1F62C"], "😬", "grimacing face"], [["U+1F925"], "🤥", "lying face"]]], ["face-sleepy", [[["U+1F60C"], "😌", "relieved face"], [["U+1F614"], "😔", "pensive face"], [["U+1F62A"], "😪", "sleepy face"], [["U+1F924"], "🤤", "drooling face"], [["U+1F634"], "😴", "sleeping face"]]], ["face-unwell", [[["U+1F637"], "😷", "face with medical mask"], [["U+1F912"], "🤒", "face with thermometer"], [["U+1F915"], "🤕", "face with head-bandage"], [["U+1F922"], "🤢", "nauseated face"], [["U+1F92E"], "🤮", "face vomiting"], [["U+1F927"], "🤧", "sneezing face"], [["U+1F975"], "🥵", "hot face"], [["U+1F976"], "🥶", "cold face"], [["U+1F974"], "🥴", "woozy face"], [["U+1F635"], "😵", "dizzy face"], [["U+1F92F"], "🤯", "exploding head"]]], ["face-hat", [[["U+1F920"], "🤠", "cowboy hat face"], [["U+1F973"], "🥳", "partying face"], [["U+1F978"], "🥸", "⊛ disguised face"]]], ["face-glasses", [[["U+1F60E"], "😎", "smiling face with sunglasses"], [["U+1F913"], "🤓", "nerd face"], [["U+1F9D0"], "🧐", "face with monocle"]]], ["face-concerned", [[["U+1F615"], "😕", "confused face"], [["U+1F61F"], "😟", "worried face"], [["U+1F641"], "🙁", "slightly frowning face"], [["U+2639"], "☹", "frowning face"], [["U+1F62E"], "😮", "face with open mouth"], [["U+1F62F"], "😯", "hushed face"], [["U+1F632"], "😲", "astonished face"], [["U+1F633"], "😳", "flushed face"], [["U+1F97A"], "🥺", "pleading face"], [["U+1F626"], "😦", "frowning face with open mouth"], [["U+1F627"], "😧", "anguished face"], [["U+1F628"], "😨", "fearful face"], [["U+1F630"], "😰", "anxious face with sweat"], [["U+1F625"], "😥", "sad but relieved face"], [["U+1F622"], "😢", "crying face"], [["U+1F62D"], "😭", "loudly crying face"], [["U+1F631"], "😱", "face screaming in fear"], [["U+1F616"], "😖", "confounded face"], [["U+1F623"], "😣", "persevering face"], [["U+1F61E"], "😞", "disappointed face"], [["U+1F613"], "😓", "downcast face with sweat"], [["U+1F629"], "😩", "weary face"], [["U+1F62B"], "😫", "tired face"], [["U+1F971"], "🥱", "yawning face"]]], ["face-negative", [[["U+1F624"], "😤", "face with steam from nose"], [["U+1F621"], "😡", "pouting face"], [["U+1F620"], "😠", "angry face"], [["U+1F92C"], "🤬", "face with symbols on mouth"], [["U+1F608"], "😈", "smiling face with horns"], [["U+1F47F"], "👿", "angry face with horns"], [["U+1F480"], "💀", "skull"], [["U+2620"], "☠", "skull and crossbones"]]], ["face-costume", [[["U+1F4A9"], "💩", "pile of poo"], [["U+1F921"], "🤡", "clown face"], [["U+1F479"], "👹", "ogre"], [["U+1F47A"], "👺", "goblin"], [["U+1F47B"], "👻", "ghost"], [["U+1F47D"], "👽", "alien"], [["U+1F47E"], "👾", "alien monster"], [["U+1F916"], "🤖", "robot"]]], ["cat-face", [[["U+1F63A"], "😺", "grinning cat"], [["U+1F638"], "😸", "grinning cat with smiling eyes"], [["U+1F639"], "😹", "cat with tears of joy"], [["U+1F63B"], "😻", "smiling cat with heart-eyes"], [["U+1F63C"], "😼", "cat with wry smile"], [["U+1F63D"], "😽", "kissing cat"], [["U+1F640"], "🙀", "weary cat"], [["U+1F63F"], "😿", "crying cat"], [["U+1F63E"], "😾", "pouting cat"]]], ["monkey-face", [[["U+1F648"], "🙈", "see-no-evil monkey"], [["U+1F649"], "🙉", "hear-no-evil monkey"], [["U+1F64A"], "🙊", "speak-no-evil monkey"]]], ["emotion", [[["U+1F48B"], "💋", "kiss mark"], [["U+1F48C"], "💌", "love letter"], [["U+1F498"], "💘", "heart with arrow"], [["U+1F49D"], "💝", "heart with ribbon"], [["U+1F496"], "💖", "sparkling heart"], [["U+1F497"], "💗", "growing heart"], [["U+1F493"], "💓", "beating heart"], [["U+1F49E"], "💞", "revolving hearts"], [["U+1F495"], "💕", "two hearts"], [["U+1F49F"], "💟", "heart decoration"], [["U+2763"], "❣", "heart exclamation"], [["U+1F494"], "💔", "broken heart"], [["U+2764"], "❤", "red heart"], [["U+1F9E1"], "🧡", "orange heart"], [["U+1F49B"], "💛", "yellow heart"], [["U+1F49A"], "💚", "green heart"], [["U+1F499"], "💙", "blue heart"], [["U+1F49C"], "💜", "purple heart"], [["U+1F90E"], "🤎", "brown heart"], [["U+1F5A4"], "🖤", "black heart"], [["U+1F90D"], "🤍", "white heart"], [["U+1F4AF"], "💯", "hundred points"], [["U+1F4A2"], "💢", "anger symbol"], [["U+1F4A5"], "💥", "collision"], [["U+1F4AB"], "💫", "dizzy"], [["U+1F4A6"], "💦", "sweat droplets"], [["U+1F4A8"], "💨", "dashing away"], [["U+1F573"], "🕳", "hole"], [["U+1F4A3"], "💣", "bomb"], [["U+1F4AC"], "💬", "speech balloon"], [["U+1F441", "U+FE0F", "U+200D", "U+1F5E8", "U+FE0F"], "👁️‍🗨️", "eye in speech bubble"], [["U+1F5E8"], "🗨", "left speech bubble"], [["U+1F5EF"], "🗯", "right anger bubble"], [["U+1F4AD"], "💭", "thought balloon"], [["U+1F4A4"], "💤", "zzz"]]]]], ["People & Body", [["hand-fingers-open", [[["U+1F44B"], "👋", "waving hand"], [["U+1F91A"], "🤚", "raised back of hand"], [["U+1F590"], "🖐", "hand with fingers splayed"], [["U+270B"], "✋", "raised hand"], [["U+1F596"], "🖖", "vulcan salute"]]], ["hand-fingers-partial", [[["U+1F44C"], "👌", "OK hand"], [["U+1F90C"], "🤌", "⊛ pinched fingers"], [["U+1F90F"], "🤏", "pinching hand"], [["U+270C"], "✌", "victory hand"], [["U+1F91E"], "🤞", "crossed fingers"], [["U+1F91F"], "🤟", "love-you gesture"], [["U+1F918"], "🤘", "sign of the horns"], [["U+1F919"], "🤙", "call me hand"]]], ["hand-single-finger", [[["U+1F448"], "👈", "backhand index pointing left"], [["U+1F449"], "👉", "backhand index pointing right"], [["U+1F446"], "👆", "backhand index pointing up"], [["U+1F595"], "🖕", "middle finger"], [["U+1F447"], "👇", "backhand index pointing down"], [["U+261D"], "☝", "index pointing up"]]], ["hand-fingers-closed", [[["U+1F44D"], "👍", "thumbs up"], [["U+1F44E"], "👎", "thumbs down"], [["U+270A"], "✊", "raised fist"], [["U+1F44A"], "👊", "oncoming fist"], [["U+1F91B"], "🤛", "left-facing fist"], [["U+1F91C"], "🤜", "right-facing fist"]]], ["hands", [[["U+1F44F"], "👏", "clapping hands"], [["U+1F64C"], "🙌", "raising hands"], [["U+1F450"], "👐", "open hands"], [["U+1F932"], "🤲", "palms up together"], [["U+1F91D"], "🤝", "handshake"], [["U+1F64F"], "🙏", "folded hands"]]], ["hand-prop", [[["U+270D"], "✍", "writing hand"], [["U+1F485"], "💅", "nail polish"], [["U+1F933"], "🤳", "selfie"]]], ["body-parts", [[["U+1F4AA"], "💪", "flexed biceps"], [["U+1F9BE"], "🦾", "mechanical arm"], [["U+1F9BF"], "🦿", "mechanical leg"], [["U+1F9B5"], "🦵", "leg"], [["U+1F9B6"], "🦶", "foot"], [["U+1F442"], "👂", "ear"], [["U+1F9BB"], "🦻", "ear with hearing aid"], [["U+1F443"], "👃", "nose"], [["U+1F9E0"], "🧠", "brain"], [["U+1F9B7"], "🦷", "tooth"], [["U+1F9B4"], "🦴", "bone"], [["U+1F440"], "👀", "eyes"], [["U+1F441"], "👁", "eye"], [["U+1F445"], "👅", "tongue"], [["U+1F444"], "👄", "mouth"]]], ["person", [[["U+1F476"], "👶", "baby"], [["U+1F9D2"], "🧒", "child"], [["U+1F466"], "👦", "boy"], [["U+1F467"], "👧", "girl"], [["U+1F9D1"], "🧑", "person"], [["U+1F471"], "👱", "person: blond hair"], [["U+1F468"], "👨", "man"], [["U+1F9D4"], "🧔", "man: beard"], [["U+1F468", "U+200D", "U+1F9B0"], "👨‍🦰", "man: red hair"], [["U+1F468", "U+200D", "U+1F9B1"], "👨‍🦱", "man: curly hair"], [["U+1F468", "U+200D", "U+1F9B3"], "👨‍🦳", "man: white hair"], [["U+1F468", "U+200D", "U+1F9B2"], "👨‍🦲", "man: bald"], [["U+1F469"], "👩", "woman"], [["U+1F469", "U+200D", "U+1F9B0"], "👩‍🦰", "woman: red hair"], [["U+1F9D1", "U+200D", "U+1F9B0"], "🧑‍🦰", "person: red hair"], [["U+1F469", "U+200D", "U+1F9B1"], "👩‍🦱", "woman: curly hair"], [["U+1F9D1", "U+200D", "U+1F9B1"], "🧑‍🦱", "person: curly hair"], [["U+1F469", "U+200D", "U+1F9B3"], "👩‍🦳", "woman: white hair"], [["U+1F9D1", "U+200D", "U+1F9B3"], "🧑‍🦳", "person: white hair"], [["U+1F469", "U+200D", "U+1F9B2"], "👩‍🦲", "woman: bald"], [["U+1F9D1", "U+200D", "U+1F9B2"], "🧑‍🦲", "person: bald"], [["U+1F471", "U+200D", "U+2640", "U+FE0F"], "👱‍♀️", "woman: blond hair"], [["U+1F471", "U+200D", "U+2642", "U+FE0F"], "👱‍♂️", "man: blond hair"], [["U+1F9D3"], "🧓", "older person"], [["U+1F474"], "👴", "old man"], [["U+1F475"], "👵", "old woman"]]], ["person-gesture", [[["U+1F64D"], "🙍", "person frowning"], [["U+1F64D", "U+200D", "U+2642", "U+FE0F"], "🙍‍♂️", "man frowning"], [["U+1F64D", "U+200D", "U+2640", "U+FE0F"], "🙍‍♀️", "woman frowning"], [["U+1F64E"], "🙎", "person pouting"], [["U+1F64E", "U+200D", "U+2642", "U+FE0F"], "🙎‍♂️", "man pouting"], [["U+1F64E", "U+200D", "U+2640", "U+FE0F"], "🙎‍♀️", "woman pouting"], [["U+1F645"], "🙅", "person gesturing NO"], [["U+1F645", "U+200D", "U+2642", "U+FE0F"], "🙅‍♂️", "man gesturing NO"], [["U+1F645", "U+200D", "U+2640", "U+FE0F"], "🙅‍♀️", "woman gesturing NO"], [["U+1F646"], "🙆", "person gesturing OK"], [["U+1F646", "U+200D", "U+2642", "U+FE0F"], "🙆‍♂️", "man gesturing OK"], [["U+1F646", "U+200D", "U+2640", "U+FE0F"], "🙆‍♀️", "woman gesturing OK"], [["U+1F481"], "💁", "person tipping hand"], [["U+1F481", "U+200D", "U+2642", "U+FE0F"], "💁‍♂️", "man tipping hand"], [["U+1F481", "U+200D", "U+2640", "U+FE0F"], "💁‍♀️", "woman tipping hand"], [["U+1F64B"], "🙋", "person raising hand"], [["U+1F64B", "U+200D", "U+2642", "U+FE0F"], "🙋‍♂️", "man raising hand"], [["U+1F64B", "U+200D", "U+2640", "U+FE0F"], "🙋‍♀️", "woman raising hand"], [["U+1F9CF"], "🧏", "deaf person"], [["U+1F9CF", "U+200D", "U+2642", "U+FE0F"], "🧏‍♂️", "deaf man"], [["U+1F9CF", "U+200D", "U+2640", "U+FE0F"], "🧏‍♀️", "deaf woman"], [["U+1F647"], "🙇", "person bowing"], [["U+1F647", "U+200D", "U+2642", "U+FE0F"], "🙇‍♂️", "man bowing"], [["U+1F647", "U+200D", "U+2640", "U+FE0F"], "🙇‍♀️", "woman bowing"], [["U+1F926"], "🤦", "person facepalming"], [["U+1F926", "U+200D", "U+2642", "U+FE0F"], "🤦‍♂️", "man facepalming"], [["U+1F926", "U+200D", "U+2640", "U+FE0F"], "🤦‍♀️", "woman facepalming"], [["U+1F937"], "🤷", "person shrugging"], [["U+1F937", "U+200D", "U+2642", "U+FE0F"], "🤷‍♂️", "man shrugging"], [["U+1F937", "U+200D", "U+2640", "U+FE0F"], "🤷‍♀️", "woman shrugging"]]], ["person-role", [[["U+1F9D1", "U+200D", "U+2695", "U+FE0F"], "🧑‍⚕️", "health worker"], [["U+1F468", "U+200D", "U+2695", "U+FE0F"], "👨‍⚕️", "man health worker"], [["U+1F469", "U+200D", "U+2695", "U+FE0F"], "👩‍⚕️", "woman health worker"], [["U+1F9D1", "U+200D", "U+1F393"], "🧑‍🎓", "student"], [["U+1F468", "U+200D", "U+1F393"], "👨‍🎓", "man student"], [["U+1F469", "U+200D", "U+1F393"], "👩‍🎓", "woman student"], [["U+1F9D1", "U+200D", "U+1F3EB"], "🧑‍🏫", "teacher"], [["U+1F468", "U+200D", "U+1F3EB"], "👨‍🏫", "man teacher"], [["U+1F469", "U+200D", "U+1F3EB"], "👩‍🏫", "woman teacher"], [["U+1F9D1", "U+200D", "U+2696", "U+FE0F"], "🧑‍⚖️", "judge"], [["U+1F468", "U+200D", "U+2696", "U+FE0F"], "👨‍⚖️", "man judge"], [["U+1F469", "U+200D", "U+2696", "U+FE0F"], "👩‍⚖️", "woman judge"], [["U+1F9D1", "U+200D", "U+1F33E"], "🧑‍🌾", "farmer"], [["U+1F468", "U+200D", "U+1F33E"], "👨‍🌾", "man farmer"], [["U+1F469", "U+200D", "U+1F33E"], "👩‍🌾", "woman farmer"], [["U+1F9D1", "U+200D", "U+1F373"], "🧑‍🍳", "cook"], [["U+1F468", "U+200D", "U+1F373"], "👨‍🍳", "man cook"], [["U+1F469", "U+200D", "U+1F373"], "👩‍🍳", "woman cook"], [["U+1F9D1", "U+200D", "U+1F527"], "🧑‍🔧", "mechanic"], [["U+1F468", "U+200D", "U+1F527"], "👨‍🔧", "man mechanic"], [["U+1F469", "U+200D", "U+1F527"], "👩‍🔧", "woman mechanic"], [["U+1F9D1", "U+200D", "U+1F3ED"], "🧑‍🏭", "factory worker"], [["U+1F468", "U+200D", "U+1F3ED"], "👨‍🏭", "man factory worker"], [["U+1F469", "U+200D", "U+1F3ED"], "👩‍🏭", "woman factory worker"], [["U+1F9D1", "U+200D", "U+1F4BC"], "🧑‍💼", "office worker"], [["U+1F468", "U+200D", "U+1F4BC"], "👨‍💼", "man office worker"], [["U+1F469", "U+200D", "U+1F4BC"], "👩‍💼", "woman office worker"], [["U+1F9D1", "U+200D", "U+1F52C"], "🧑‍🔬", "scientist"], [["U+1F468", "U+200D", "U+1F52C"], "👨‍🔬", "man scientist"], [["U+1F469", "U+200D", "U+1F52C"], "👩‍🔬", "woman scientist"], [["U+1F9D1", "U+200D", "U+1F4BB"], "🧑‍💻", "technologist"], [["U+1F468", "U+200D", "U+1F4BB"], "👨‍💻", "man technologist"], [["U+1F469", "U+200D", "U+1F4BB"], "👩‍💻", "woman technologist"], [["U+1F9D1", "U+200D", "U+1F3A4"], "🧑‍🎤", "singer"], [["U+1F468", "U+200D", "U+1F3A4"], "👨‍🎤", "man singer"], [["U+1F469", "U+200D", "U+1F3A4"], "👩‍🎤", "woman singer"], [["U+1F9D1", "U+200D", "U+1F3A8"], "🧑‍🎨", "artist"], [["U+1F468", "U+200D", "U+1F3A8"], "👨‍🎨", "man artist"], [["U+1F469", "U+200D", "U+1F3A8"], "👩‍🎨", "woman artist"], [["U+1F9D1", "U+200D", "U+2708", "U+FE0F"], "🧑‍✈️", "pilot"], [["U+1F468", "U+200D", "U+2708", "U+FE0F"], "👨‍✈️", "man pilot"], [["U+1F469", "U+200D", "U+2708", "U+FE0F"], "👩‍✈️", "woman pilot"], [["U+1F9D1", "U+200D", "U+1F680"], "🧑‍🚀", "astronaut"], [["U+1F468", "U+200D", "U+1F680"], "👨‍🚀", "man astronaut"], [["U+1F469", "U+200D", "U+1F680"], "👩‍🚀", "woman astronaut"], [["U+1F9D1", "U+200D", "U+1F692"], "🧑‍🚒", "firefighter"], [["U+1F468", "U+200D", "U+1F692"], "👨‍🚒", "man firefighter"], [["U+1F469", "U+200D", "U+1F692"], "👩‍🚒", "woman firefighter"], [["U+1F46E"], "👮", "police officer"], [["U+1F46E", "U+200D", "U+2642", "U+FE0F"], "👮‍♂️", "man police officer"], [["U+1F46E", "U+200D", "U+2640", "U+FE0F"], "👮‍♀️", "woman police officer"], [["U+1F575"], "🕵", "detective"], [["U+1F575", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🕵️‍♂️", "man detective"], [["U+1F575", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🕵️‍♀️", "woman detective"], [["U+1F482"], "💂", "guard"], [["U+1F482", "U+200D", "U+2642", "U+FE0F"], "💂‍♂️", "man guard"], [["U+1F482", "U+200D", "U+2640", "U+FE0F"], "💂‍♀️", "woman guard"], [["U+1F977"], "🥷", "⊛ ninja"], [["U+1F477"], "👷", "construction worker"], [["U+1F477", "U+200D", "U+2642", "U+FE0F"], "👷‍♂️", "man construction worker"], [["U+1F477", "U+200D", "U+2640", "U+FE0F"], "👷‍♀️", "woman construction worker"], [["U+1F934"], "🤴", "prince"], [["U+1F478"], "👸", "princess"], [["U+1F473"], "👳", "person wearing turban"], [["U+1F473", "U+200D", "U+2642", "U+FE0F"], "👳‍♂️", "man wearing turban"], [["U+1F473", "U+200D", "U+2640", "U+FE0F"], "👳‍♀️", "woman wearing turban"], [["U+1F472"], "👲", "person with skullcap"], [["U+1F9D5"], "🧕", "woman with headscarf"], [["U+1F935"], "🤵", "person in tuxedo"], [["U+1F935", "U+200D", "U+2642", "U+FE0F"], "🤵‍♂️", "⊛ man in tuxedo"], [["U+1F935", "U+200D", "U+2640", "U+FE0F"], "🤵‍♀️", "⊛ woman in tuxedo"], [["U+1F470"], "👰", "person with veil"], [["U+1F930"], "🤰", "pregnant woman"], [["U+1F931"], "🤱", "breast-feeding"]]], ["person-fantasy", [[["U+1F47C"], "👼", "baby angel"], [["U+1F385"], "🎅", "Santa Claus"], [["U+1F936"], "🤶", "Mrs. Claus"], [["U+1F9B8"], "🦸", "superhero"], [["U+1F9B8", "U+200D", "U+2642", "U+FE0F"], "🦸‍♂️", "man superhero"], [["U+1F9B8", "U+200D", "U+2640", "U+FE0F"], "🦸‍♀️", "woman superhero"], [["U+1F9B9"], "🦹", "supervillain"], [["U+1F9B9", "U+200D", "U+2642", "U+FE0F"], "🦹‍♂️", "man supervillain"], [["U+1F9B9", "U+200D", "U+2640", "U+FE0F"], "🦹‍♀️", "woman supervillain"], [["U+1F9D9"], "🧙", "mage"], [["U+1F9D9", "U+200D", "U+2642", "U+FE0F"], "🧙‍♂️", "man mage"], [["U+1F9D9", "U+200D", "U+2640", "U+FE0F"], "🧙‍♀️", "woman mage"], [["U+1F9DA"], "🧚", "fairy"], [["U+1F9DA", "U+200D", "U+2642", "U+FE0F"], "🧚‍♂️", "man fairy"], [["U+1F9DA", "U+200D", "U+2640", "U+FE0F"], "🧚‍♀️", "woman fairy"], [["U+1F9DB"], "🧛", "vampire"], [["U+1F9DB", "U+200D", "U+2642", "U+FE0F"], "🧛‍♂️", "man vampire"], [["U+1F9DB", "U+200D", "U+2640", "U+FE0F"], "🧛‍♀️", "woman vampire"], [["U+1F9DC"], "🧜", "merperson"], [["U+1F9DC", "U+200D", "U+2642", "U+FE0F"], "🧜‍♂️", "merman"], [["U+1F9DC", "U+200D", "U+2640", "U+FE0F"], "🧜‍♀️", "mermaid"], [["U+1F9DD"], "🧝", "elf"], [["U+1F9DD", "U+200D", "U+2642", "U+FE0F"], "🧝‍♂️", "man elf"], [["U+1F9DD", "U+200D", "U+2640", "U+FE0F"], "🧝‍♀️", "woman elf"], [["U+1F9DE"], "🧞", "genie"], [["U+1F9DE", "U+200D", "U+2642", "U+FE0F"], "🧞‍♂️", "man genie"], [["U+1F9DE", "U+200D", "U+2640", "U+FE0F"], "🧞‍♀️", "woman genie"], [["U+1F9DF"], "🧟", "zombie"], [["U+1F9DF", "U+200D", "U+2642", "U+FE0F"], "🧟‍♂️", "man zombie"], [["U+1F9DF", "U+200D", "U+2640", "U+FE0F"], "🧟‍♀️", "woman zombie"]]], ["person-activity", [[["U+1F486"], "💆", "person getting massage"], [["U+1F486", "U+200D", "U+2642", "U+FE0F"], "💆‍♂️", "man getting massage"], [["U+1F486", "U+200D", "U+2640", "U+FE0F"], "💆‍♀️", "woman getting massage"], [["U+1F487"], "💇", "person getting haircut"], [["U+1F487", "U+200D", "U+2642", "U+FE0F"], "💇‍♂️", "man getting haircut"], [["U+1F487", "U+200D", "U+2640", "U+FE0F"], "💇‍♀️", "woman getting haircut"], [["U+1F6B6"], "🚶", "person walking"], [["U+1F6B6", "U+200D", "U+2642", "U+FE0F"], "🚶‍♂️", "man walking"], [["U+1F6B6", "U+200D", "U+2640", "U+FE0F"], "🚶‍♀️", "woman walking"], [["U+1F9CD"], "🧍", "person standing"], [["U+1F9CD", "U+200D", "U+2642", "U+FE0F"], "🧍‍♂️", "man standing"], [["U+1F9CD", "U+200D", "U+2640", "U+FE0F"], "🧍‍♀️", "woman standing"], [["U+1F9CE"], "🧎", "person kneeling"], [["U+1F9CE", "U+200D", "U+2642", "U+FE0F"], "🧎‍♂️", "man kneeling"], [["U+1F9CE", "U+200D", "U+2640", "U+FE0F"], "🧎‍♀️", "woman kneeling"], [["U+1F9D1", "U+200D", "U+1F9AF"], "🧑‍🦯", "person with white cane"], [["U+1F468", "U+200D", "U+1F9AF"], "👨‍🦯", "man with white cane"], [["U+1F469", "U+200D", "U+1F9AF"], "👩‍🦯", "woman with white cane"], [["U+1F9D1", "U+200D", "U+1F9BC"], "🧑‍🦼", "person in motorized wheelchair"], [["U+1F468", "U+200D", "U+1F9BC"], "👨‍🦼", "man in motorized wheelchair"], [["U+1F469", "U+200D", "U+1F9BC"], "👩‍🦼", "woman in motorized wheelchair"], [["U+1F9D1", "U+200D", "U+1F9BD"], "🧑‍🦽", "person in manual wheelchair"], [["U+1F468", "U+200D", "U+1F9BD"], "👨‍🦽", "man in manual wheelchair"], [["U+1F469", "U+200D", "U+1F9BD"], "👩‍🦽", "woman in manual wheelchair"], [["U+1F3C3"], "🏃", "person running"], [["U+1F3C3", "U+200D", "U+2642", "U+FE0F"], "🏃‍♂️", "man running"], [["U+1F3C3", "U+200D", "U+2640", "U+FE0F"], "🏃‍♀️", "woman running"], [["U+1F483"], "💃", "woman dancing"], [["U+1F57A"], "🕺", "man dancing"], [["U+1F574"], "🕴", "person in suit levitating"], [["U+1F46F"], "👯", "people with bunny ears"], [["U+1F46F", "U+200D", "U+2642", "U+FE0F"], "👯‍♂️", "men with bunny ears"], [["U+1F46F", "U+200D", "U+2640", "U+FE0F"], "👯‍♀️", "women with bunny ears"], [["U+1F9D6"], "🧖", "person in steamy room"], [["U+1F9D6", "U+200D", "U+2642", "U+FE0F"], "🧖‍♂️", "man in steamy room"], [["U+1F9D6", "U+200D", "U+2640", "U+FE0F"], "🧖‍♀️", "woman in steamy room"], [["U+1F9D7"], "🧗", "person climbing"], [["U+1F9D7", "U+200D", "U+2642", "U+FE0F"], "🧗‍♂️", "man climbing"], [["U+1F9D7", "U+200D", "U+2640", "U+FE0F"], "🧗‍♀️", "woman climbing"]]], ["person-sport", [[["U+1F93A"], "🤺", "person fencing"], [["U+1F3C7"], "🏇", "horse racing"], [["U+26F7"], "⛷", "skier"], [["U+1F3C2"], "🏂", "snowboarder"], [["U+1F3CC"], "🏌", "person golfing"], [["U+1F3CC", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🏌️‍♂️", "man golfing"], [["U+1F3CC", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🏌️‍♀️", "woman golfing"], [["U+1F3C4"], "🏄", "person surfing"], [["U+1F3C4", "U+200D", "U+2642", "U+FE0F"], "🏄‍♂️", "man surfing"], [["U+1F3C4", "U+200D", "U+2640", "U+FE0F"], "🏄‍♀️", "woman surfing"], [["U+1F6A3"], "🚣", "person rowing boat"], [["U+1F6A3", "U+200D", "U+2642", "U+FE0F"], "🚣‍♂️", "man rowing boat"], [["U+1F6A3", "U+200D", "U+2640", "U+FE0F"], "🚣‍♀️", "woman rowing boat"], [["U+1F3CA"], "🏊", "person swimming"], [["U+1F3CA", "U+200D", "U+2642", "U+FE0F"], "🏊‍♂️", "man swimming"], [["U+1F3CA", "U+200D", "U+2640", "U+FE0F"], "🏊‍♀️", "woman swimming"], [["U+26F9"], "⛹", "person bouncing ball"], [["U+26F9", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "⛹️‍♂️", "man bouncing ball"], [["U+26F9", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "⛹️‍♀️", "woman bouncing ball"], [["U+1F3CB"], "🏋", "person lifting weights"], [["U+1F3CB", "U+FE0F", "U+200D", "U+2642", "U+FE0F"], "🏋️‍♂️", "man lifting weights"], [["U+1F3CB", "U+FE0F", "U+200D", "U+2640", "U+FE0F"], "🏋️‍♀️", "woman lifting weights"], [["U+1F6B4"], "🚴", "person biking"], [["U+1F6B4", "U+200D", "U+2642", "U+FE0F"], "🚴‍♂️", "man biking"], [["U+1F6B4", "U+200D", "U+2640", "U+FE0F"], "🚴‍♀️", "woman biking"], [["U+1F6B5"], "🚵", "person mountain biking"], [["U+1F6B5", "U+200D", "U+2642", "U+FE0F"], "🚵‍♂️", "man mountain biking"], [["U+1F6B5", "U+200D", "U+2640", "U+FE0F"], "🚵‍♀️", "woman mountain biking"], [["U+1F938"], "🤸", "person cartwheeling"], [["U+1F938", "U+200D", "U+2642", "U+FE0F"], "🤸‍♂️", "man cartwheeling"], [["U+1F938", "U+200D", "U+2640", "U+FE0F"], "🤸‍♀️", "woman cartwheeling"], [["U+1F93C"], "🤼", "people wrestling"], [["U+1F93C", "U+200D", "U+2642", "U+FE0F"], "🤼‍♂️", "men wrestling"], [["U+1F93C", "U+200D", "U+2640", "U+FE0F"], "🤼‍♀️", "women wrestling"], [["U+1F93D"], "🤽", "person playing water polo"], [["U+1F93D", "U+200D", "U+2642", "U+FE0F"], "🤽‍♂️", "man playing water polo"], [["U+1F93D", "U+200D", "U+2640", "U+FE0F"], "🤽‍♀️", "woman playing water polo"], [["U+1F93E"], "🤾", "person playing handball"], [["U+1F93E", "U+200D", "U+2642", "U+FE0F"], "🤾‍♂️", "man playing handball"], [["U+1F93E", "U+200D", "U+2640", "U+FE0F"], "🤾‍♀️", "woman playing handball"], [["U+1F939"], "🤹", "person juggling"], [["U+1F939", "U+200D", "U+2642", "U+FE0F"], "🤹‍♂️", "man juggling"], [["U+1F939", "U+200D", "U+2640", "U+FE0F"], "🤹‍♀️", "woman juggling"]]], ["person-resting", [[["U+1F9D8"], "🧘", "person in lotus position"], [["U+1F9D8", "U+200D", "U+2642", "U+FE0F"], "🧘‍♂️", "man in lotus position"], [["U+1F9D8", "U+200D", "U+2640", "U+FE0F"], "🧘‍♀️", "woman in lotus position"], [["U+1F6C0"], "🛀", "person taking bath"], [["U+1F6CC"], "🛌", "person in bed"]]], ["family", [[["U+1F9D1", "U+200D", "U+1F91D", "U+200D", "U+1F9D1"], "🧑‍🤝‍🧑", "people holding hands"], [["U+1F46D"], "👭", "women holding hands"], [["U+1F46B"], "👫", "woman and man holding hands"], [["U+1F46C"], "👬", "men holding hands"], [["U+1F48F"], "💏", "kiss"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F468"], "👩‍❤️‍💋‍👨", "kiss: woman, man"], [["U+1F468", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F468"], "👨‍❤️‍💋‍👨", "kiss: man, man"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F48B", "U+200D", "U+1F469"], "👩‍❤️‍💋‍👩", "kiss: woman, woman"], [["U+1F491"], "💑", "couple with heart"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F468"], "👩‍❤️‍👨", "couple with heart: woman, man"], [["U+1F468", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F468"], "👨‍❤️‍👨", "couple with heart: man, man"], [["U+1F469", "U+200D", "U+2764", "U+FE0F", "U+200D", "U+1F469"], "👩‍❤️‍👩", "couple with heart: woman, woman"], [["U+1F46A"], "👪", "family"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F466"], "👨‍👩‍👦", "family: man, woman, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467"], "👨‍👩‍👧", "family: man, woman, girl"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨‍👩‍👧‍👦", "family: man, woman, girl, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨‍👩‍👦‍👦", "family: man, woman, boy, boy"], [["U+1F468", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨‍👩‍👧‍👧", "family: man, woman, girl, girl"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F466"], "👨‍👨‍👦", "family: man, man, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467"], "👨‍👨‍👧", "family: man, man, girl"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨‍👨‍👧‍👦", "family: man, man, girl, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨‍👨‍👦‍👦", "family: man, man, boy, boy"], [["U+1F468", "U+200D", "U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨‍👨‍👧‍👧", "family: man, man, girl, girl"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F466"], "👩‍👩‍👦", "family: woman, woman, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467"], "👩‍👩‍👧", "family: woman, woman, girl"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👩‍👩‍👧‍👦", "family: woman, woman, girl, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👩‍👩‍👦‍👦", "family: woman, woman, boy, boy"], [["U+1F469", "U+200D", "U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👩‍👩‍👧‍👧", "family: woman, woman, girl, girl"], [["U+1F468", "U+200D", "U+1F466"], "👨‍👦", "family: man, boy"], [["U+1F468", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👨‍👦‍👦", "family: man, boy, boy"], [["U+1F468", "U+200D", "U+1F467"], "👨‍👧", "family: man, girl"], [["U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👨‍👧‍👦", "family: man, girl, boy"], [["U+1F468", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👨‍👧‍👧", "family: man, girl, girl"], [["U+1F469", "U+200D", "U+1F466"], "👩‍👦", "family: woman, boy"], [["U+1F469", "U+200D", "U+1F466", "U+200D", "U+1F466"], "👩‍👦‍👦", "family: woman, boy, boy"], [["U+1F469", "U+200D", "U+1F467"], "👩‍👧", "family: woman, girl"], [["U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F466"], "👩‍👧‍👦", "family: woman, girl, boy"], [["U+1F469", "U+200D", "U+1F467", "U+200D", "U+1F467"], "👩‍👧‍👧", "family: woman, girl, girl"]]], ["person-symbol", [[["U+1F5E3"], "🗣", "speaking head"], [["U+1F464"], "👤", "bust in silhouette"], [["U+1F465"], "👥", "busts in silhouette"], [["U+1FAC2"], "🫂", "⊛ people hugging"], [["U+1F463"], "👣", "footprints"]]]]], ["Component", [["hair-style", [[["U+1F9B0"], "🦰", "red hair"], [["U+1F9B1"], "🦱", "curly hair"], [["U+1F9B3"], "🦳", "white hair"], [["U+1F9B2"], "🦲", "bald"]]]]], ["Animals & Nature", [["animal-mammal", [[["U+1F435"], "🐵", "monkey face"], [["U+1F412"], "🐒", "monkey"], [["U+1F98D"], "🦍", "gorilla"], [["U+1F9A7"], "🦧", "orangutan"], [["U+1F436"], "🐶", "dog face"], [["U+1F415"], "🐕", "dog"], [["U+1F9AE"], "🦮", "guide dog"], [["U+1F415", "U+200D", "U+1F9BA"], "🐕‍🦺", "service dog"], [["U+1F429"], "🐩", "poodle"], [["U+1F43A"], "🐺", "wolf"], [["U+1F98A"], "🦊", "fox"], [["U+1F99D"], "🦝", "raccoon"], [["U+1F431"], "🐱", "cat face"], [["U+1F408"], "🐈", "cat"], [["U+1F981"], "🦁", "lion"], [["U+1F42F"], "🐯", "tiger face"], [["U+1F405"], "🐅", "tiger"], [["U+1F406"], "🐆", "leopard"], [["U+1F434"], "🐴", "horse face"], [["U+1F40E"], "🐎", "horse"], [["U+1F984"], "🦄", "unicorn"], [["U+1F993"], "🦓", "zebra"], [["U+1F98C"], "🦌", "deer"], [["U+1F42E"], "🐮", "cow face"], [["U+1F402"], "🐂", "ox"], [["U+1F403"], "🐃", "water buffalo"], [["U+1F404"], "🐄", "cow"], [["U+1F437"], "🐷", "pig face"], [["U+1F416"], "🐖", "pig"], [["U+1F417"], "🐗", "boar"], [["U+1F43D"], "🐽", "pig nose"], [["U+1F40F"], "🐏", "ram"], [["U+1F411"], "🐑", "ewe"], [["U+1F410"], "🐐", "goat"], [["U+1F42A"], "🐪", "camel"], [["U+1F42B"], "🐫", "two-hump camel"], [["U+1F999"], "🦙", "llama"], [["U+1F992"], "🦒", "giraffe"], [["U+1F418"], "🐘", "elephant"], [["U+1F98F"], "🦏", "rhinoceros"], [["U+1F99B"], "🦛", "hippopotamus"], [["U+1F42D"], "🐭", "mouse face"], [["U+1F401"], "🐁", "mouse"], [["U+1F400"], "🐀", "rat"], [["U+1F439"], "🐹", "hamster"], [["U+1F430"], "🐰", "rabbit face"], [["U+1F407"], "🐇", "rabbit"], [["U+1F43F"], "🐿", "chipmunk"], [["U+1F994"], "🦔", "hedgehog"], [["U+1F987"], "🦇", "bat"], [["U+1F43B"], "🐻", "bear"], [["U+1F43B", "U+200D", "U+2744", "U+FE0F"], "🐻‍❄️", "⊛ polar bear"], [["U+1F428"], "🐨", "koala"], [["U+1F43C"], "🐼", "panda"], [["U+1F9A5"], "🦥", "sloth"], [["U+1F9A6"], "🦦", "otter"], [["U+1F9A8"], "🦨", "skunk"], [["U+1F998"], "🦘", "kangaroo"], [["U+1F9A1"], "🦡", "badger"], [["U+1F43E"], "🐾", "paw prints"]]], ["animal-bird", [[["U+1F983"], "🦃", "turkey"], [["U+1F414"], "🐔", "chicken"], [["U+1F413"], "🐓", "rooster"], [["U+1F423"], "🐣", "hatching chick"], [["U+1F424"], "🐤", "baby chick"], [["U+1F425"], "🐥", "front-facing baby chick"], [["U+1F426"], "🐦", "bird"], [["U+1F427"], "🐧", "penguin"], [["U+1F54A"], "🕊", "dove"], [["U+1F985"], "🦅", "eagle"], [["U+1F986"], "🦆", "duck"], [["U+1F9A2"], "🦢", "swan"], [["U+1F989"], "🦉", "owl"], [["U+1FAB6"], "🪶", "⊛ feather"], [["U+1F9A9"], "🦩", "flamingo"], [["U+1F99A"], "🦚", "peacock"], [["U+1F99C"], "🦜", "parrot"]]], ["animal-amphibian", [[["U+1F438"], "🐸", "frog"]]], ["animal-reptile", [[["U+1F40A"], "🐊", "crocodile"], [["U+1F422"], "🐢", "turtle"], [["U+1F98E"], "🦎", "lizard"], [["U+1F40D"], "🐍", "snake"], [["U+1F432"], "🐲", "dragon face"], [["U+1F409"], "🐉", "dragon"], [["U+1F995"], "🦕", "sauropod"], [["U+1F996"], "🦖", "T-Rex"]]], ["animal-marine", [[["U+1F433"], "🐳", "spouting whale"], [["U+1F40B"], "🐋", "whale"], [["U+1F42C"], "🐬", "dolphin"], [["U+1F41F"], "🐟", "fish"], [["U+1F420"], "🐠", "tropical fish"], [["U+1F421"], "🐡", "blowfish"], [["U+1F988"], "🦈", "shark"], [["U+1F419"], "🐙", "octopus"], [["U+1F41A"], "🐚", "spiral shell"]]], ["animal-bug", [[["U+1F40C"], "🐌", "snail"], [["U+1F98B"], "🦋", "butterfly"], [["U+1F41B"], "🐛", "bug"], [["U+1F41C"], "🐜", "ant"], [["U+1F41D"], "🐝", "honeybee"], [["U+1F41E"], "🐞", "lady beetle"], [["U+1F997"], "🦗", "cricket"], [["U+1F577"], "🕷", "spider"], [["U+1F578"], "🕸", "spider web"], [["U+1F982"], "🦂", "scorpion"], [["U+1F99F"], "🦟", "mosquito"], [["U+1F9A0"], "🦠", "microbe"]]], ["plant-flower", [[["U+1F490"], "💐", "bouquet"], [["U+1F338"], "🌸", "cherry blossom"], [["U+1F4AE"], "💮", "white flower"], [["U+1F3F5"], "🏵", "rosette"], [["U+1F339"], "🌹", "rose"], [["U+1F940"], "🥀", "wilted flower"], [["U+1F33A"], "🌺", "hibiscus"], [["U+1F33B"], "🌻", "sunflower"], [["U+1F33C"], "🌼", "blossom"], [["U+1F337"], "🌷", "tulip"]]], ["plant-other", [[["U+1F331"], "🌱", "seedling"], [["U+1FAB4"], "🪴", "⊛ potted plant"], [["U+1F332"], "🌲", "evergreen tree"], [["U+1F333"], "🌳", "deciduous tree"], [["U+1F334"], "🌴", "palm tree"], [["U+1F335"], "🌵", "cactus"], [["U+1F33E"], "🌾", "sheaf of rice"], [["U+1F33F"], "🌿", "herb"], [["U+2618"], "☘", "shamrock"], [["U+1F340"], "🍀", "four leaf clover"], [["U+1F341"], "🍁", "maple leaf"], [["U+1F342"], "🍂", "fallen leaf"], [["U+1F343"], "🍃", "leaf fluttering in wind"]]]]], ["Food & Drink", [["food-fruit", [[["U+1F347"], "🍇", "grapes"], [["U+1F348"], "🍈", "melon"], [["U+1F349"], "🍉", "watermelon"], [["U+1F34A"], "🍊", "tangerine"], [["U+1F34B"], "🍋", "lemon"], [["U+1F34C"], "🍌", "banana"], [["U+1F34D"], "🍍", "pineapple"], [["U+1F96D"], "🥭", "mango"], [["U+1F34E"], "🍎", "red apple"], [["U+1F34F"], "🍏", "green apple"], [["U+1F350"], "🍐", "pear"], [["U+1F351"], "🍑", "peach"], [["U+1F352"], "🍒", "cherries"], [["U+1F353"], "🍓", "strawberry"], [["U+1FAD0"], "🫐", "⊛ blueberries"], [["U+1F95D"], "🥝", "kiwi fruit"], [["U+1F345"], "🍅", "tomato"], [["U+1FAD2"], "🫒", "⊛ olive"], [["U+1F965"], "🥥", "coconut"]]], ["food-vegetable", [[["U+1F951"], "🥑", "avocado"], [["U+1F346"], "🍆", "eggplant"], [["U+1F954"], "🥔", "potato"], [["U+1F955"], "🥕", "carrot"], [["U+1F33D"], "🌽", "ear of corn"], [["U+1F336"], "🌶", "hot pepper"], [["U+1F952"], "🥒", "cucumber"], [["U+1F96C"], "🥬", "leafy green"], [["U+1F966"], "🥦", "broccoli"], [["U+1F9C4"], "🧄", "garlic"], [["U+1F9C5"], "🧅", "onion"], [["U+1F344"], "🍄", "mushroom"], [["U+1F95C"], "🥜", "peanuts"], [["U+1F330"], "🌰", "chestnut"]]], ["food-prepared", [[["U+1F35E"], "🍞", "bread"], [["U+1F950"], "🥐", "croissant"], [["U+1F956"], "🥖", "baguette bread"], [["U+1FAD3"], "🫓", "⊛ flatbread"], [["U+1F968"], "🥨", "pretzel"], [["U+1F96F"], "🥯", "bagel"], [["U+1F95E"], "🥞", "pancakes"], [["U+1F9C7"], "🧇", "waffle"], [["U+1F9C0"], "🧀", "cheese wedge"], [["U+1F356"], "🍖", "meat on bone"], [["U+1F357"], "🍗", "poultry leg"], [["U+1F969"], "🥩", "cut of meat"], [["U+1F953"], "🥓", "bacon"], [["U+1F354"], "🍔", "hamburger"], [["U+1F35F"], "🍟", "french fries"], [["U+1F355"], "🍕", "pizza"], [["U+1F32D"], "🌭", "hot dog"], [["U+1F96A"], "🥪", "sandwich"], [["U+1F32E"], "🌮", "taco"], [["U+1F32F"], "🌯", "burrito"], [["U+1FAD4"], "🫔", "⊛ tamale"], [["U+1F959"], "🥙", "stuffed flatbread"], [["U+1F9C6"], "🧆", "falafel"], [["U+1F95A"], "🥚", "egg"], [["U+1F373"], "🍳", "cooking"], [["U+1F958"], "🥘", "shallow pan of food"], [["U+1F372"], "🍲", "pot of food"], [["U+1FAD5"], "🫕", "⊛ fondue"], [["U+1F963"], "🥣", "bowl with spoon"], [["U+1F957"], "🥗", "green salad"], [["U+1F37F"], "🍿", "popcorn"], [["U+1F9C8"], "🧈", "butter"], [["U+1F9C2"], "🧂", "salt"], [["U+1F96B"], "🥫", "canned food"]]], ["food-asian", [[["U+1F371"], "🍱", "bento box"], [["U+1F358"], "🍘", "rice cracker"], [["U+1F359"], "🍙", "rice ball"], [["U+1F35A"], "🍚", "cooked rice"], [["U+1F35B"], "🍛", "curry rice"], [["U+1F35C"], "🍜", "steaming bowl"], [["U+1F35D"], "🍝", "spaghetti"], [["U+1F360"], "🍠", "roasted sweet potato"], [["U+1F362"], "🍢", "oden"], [["U+1F363"], "🍣", "sushi"], [["U+1F364"], "🍤", "fried shrimp"], [["U+1F365"], "🍥", "fish cake with swirl"], [["U+1F96E"], "🥮", "moon cake"], [["U+1F361"], "🍡", "dango"], [["U+1F95F"], "🥟", "dumpling"], [["U+1F960"], "🥠", "fortune cookie"], [["U+1F961"], "🥡", "takeout box"]]], ["food-marine", [[["U+1F980"], "🦀", "crab"], [["U+1F99E"], "🦞", "lobster"], [["U+1F990"], "🦐", "shrimp"], [["U+1F991"], "🦑", "squid"], [["U+1F9AA"], "🦪", "oyster"]]], ["food-sweet", [[["U+1F366"], "🍦", "soft ice cream"], [["U+1F367"], "🍧", "shaved ice"], [["U+1F368"], "🍨", "ice cream"], [["U+1F369"], "🍩", "doughnut"], [["U+1F36A"], "🍪", "cookie"], [["U+1F382"], "🎂", "birthday cake"], [["U+1F370"], "🍰", "shortcake"], [["U+1F9C1"], "🧁", "cupcake"], [["U+1F967"], "🥧", "pie"], [["U+1F36B"], "🍫", "chocolate bar"], [["U+1F36C"], "🍬", "candy"], [["U+1F36D"], "🍭", "lollipop"], [["U+1F36E"], "🍮", "custard"], [["U+1F36F"], "🍯", "honey pot"]]], ["drink", [[["U+1F37C"], "🍼", "baby bottle"], [["U+1F95B"], "🥛", "glass of milk"], [["U+2615"], "☕", "hot beverage"], [["U+1F375"], "🍵", "teacup without handle"], [["U+1F376"], "🍶", "sake"], [["U+1F37E"], "🍾", "bottle with popping cork"], [["U+1F377"], "🍷", "wine glass"], [["U+1F378"], "🍸", "cocktail glass"], [["U+1F379"], "🍹", "tropical drink"], [["U+1F37A"], "🍺", "beer mug"], [["U+1F37B"], "🍻", "clinking beer mugs"], [["U+1F942"], "🥂", "clinking glasses"], [["U+1F943"], "🥃", "tumbler glass"], [["U+1F964"], "🥤", "cup with straw"], [["U+1F9CB"], "🧋", "⊛ bubble tea"], [["U+1F9C3"], "🧃", "beverage box"], [["U+1F9C9"], "🧉", "mate"], [["U+1F9CA"], "🧊", "ice"]]], ["dishware", [[["U+1F962"], "🥢", "chopsticks"], [["U+1F37D"], "🍽", "fork and knife with plate"], [["U+1F374"], "🍴", "fork and knife"], [["U+1F944"], "🥄", "spoon"], [["U+1F52A"], "🔪", "kitchen knife"], [["U+1F3FA"], "🏺", "amphora"]]]]], ["Travel & Places", [["place-map", [[["U+1F30D"], "🌍", "globe showing Europe-Africa"], [["U+1F30E"], "🌎", "globe showing Americas"], [["U+1F30F"], "🌏", "globe showing Asia-Australia"], [["U+1F310"], "🌐", "globe with meridians"], [["U+1F5FA"], "🗺", "world map"], [["U+1F5FE"], "🗾", "map of Japan"], [["U+1F9ED"], "🧭", "compass"]]], ["place-geographic", [[["U+1F3D4"], "🏔", "snow-capped mountain"], [["U+26F0"], "⛰", "mountain"], [["U+1F30B"], "🌋", "volcano"], [["U+1F5FB"], "🗻", "mount fuji"], [["U+1F3D5"], "🏕", "camping"], [["U+1F3D6"], "🏖", "beach with umbrella"], [["U+1F3DC"], "🏜", "desert"], [["U+1F3DD"], "🏝", "desert island"], [["U+1F3DE"], "🏞", "national park"]]], ["place-building", [[["U+1F3DF"], "🏟", "stadium"], [["U+1F3DB"], "🏛", "classical building"], [["U+1F3D7"], "🏗", "building construction"], [["U+1F9F1"], "🧱", "brick"], [["U+1FAA8"], "🪨", "⊛ rock"], [["U+1FAB5"], "🪵", "⊛ wood"], [["U+1F3D8"], "🏘", "houses"], [["U+1F3DA"], "🏚", "derelict house"], [["U+1F3E0"], "🏠", "house"], [["U+1F3E1"], "🏡", "house with garden"], [["U+1F3E2"], "🏢", "office building"], [["U+1F3E3"], "🏣", "Japanese post office"], [["U+1F3E4"], "🏤", "post office"], [["U+1F3E5"], "🏥", "hospital"], [["U+1F3E6"], "🏦", "bank"], [["U+1F3E8"], "🏨", "hotel"], [["U+1F3E9"], "🏩", "love hotel"], [["U+1F3EA"], "🏪", "convenience store"], [["U+1F3EB"], "🏫", "school"], [["U+1F3EC"], "🏬", "department store"], [["U+1F3ED"], "🏭", "factory"], [["U+1F3EF"], "🏯", "Japanese castle"], [["U+1F3F0"], "🏰", "castle"], [["U+1F492"], "💒", "wedding"], [["U+1F5FC"], "🗼", "Tokyo tower"], [["U+1F5FD"], "🗽", "Statue of Liberty"]]], ["place-religious", [[["U+26EA"], "⛪", "church"], [["U+1F54C"], "🕌", "mosque"], [["U+1F6D5"], "🛕", "hindu temple"], [["U+1F54D"], "🕍", "synagogue"], [["U+26E9"], "⛩", "shinto shrine"], [["U+1F54B"], "🕋", "kaaba"]]], ["place-other", [[["U+26F2"], "⛲", "fountain"], [["U+26FA"], "⛺", "tent"], [["U+1F301"], "🌁", "foggy"], [["U+1F303"], "🌃", "night with stars"], [["U+1F3D9"], "🏙", "cityscape"], [["U+1F304"], "🌄", "sunrise over mountains"], [["U+1F305"], "🌅", "sunrise"], [["U+1F306"], "🌆", "cityscape at dusk"], [["U+1F307"], "🌇", "sunset"], [["U+1F309"], "🌉", "bridge at night"], [["U+2668"], "♨", "hot springs"], [["U+1F3A0"], "🎠", "carousel horse"], [["U+1F3A1"], "🎡", "ferris wheel"], [["U+1F3A2"], "🎢", "roller coaster"], [["U+1F488"], "💈", "barber pole"], [["U+1F3AA"], "🎪", "circus tent"]]], ["transport-ground", [[["U+1F682"], "🚂", "locomotive"], [["U+1F683"], "🚃", "railway car"], [["U+1F684"], "🚄", "high-speed train"], [["U+1F685"], "🚅", "bullet train"], [["U+1F686"], "🚆", "train"], [["U+1F687"], "🚇", "metro"], [["U+1F688"], "🚈", "light rail"], [["U+1F689"], "🚉", "station"], [["U+1F68A"], "🚊", "tram"], [["U+1F69D"], "🚝", "monorail"], [["U+1F69E"], "🚞", "mountain railway"], [["U+1F68B"], "🚋", "tram car"], [["U+1F68C"], "🚌", "bus"], [["U+1F68D"], "🚍", "oncoming bus"], [["U+1F68E"], "🚎", "trolleybus"], [["U+1F690"], "🚐", "minibus"], [["U+1F691"], "🚑", "ambulance"], [["U+1F692"], "🚒", "fire engine"], [["U+1F693"], "🚓", "police car"], [["U+1F694"], "🚔", "oncoming police car"], [["U+1F695"], "🚕", "taxi"], [["U+1F696"], "🚖", "oncoming taxi"], [["U+1F697"], "🚗", "automobile"], [["U+1F698"], "🚘", "oncoming automobile"], [["U+1F699"], "🚙", "sport utility vehicle"], [["U+1F69A"], "🚚", "delivery truck"], [["U+1F69B"], "🚛", "articulated lorry"], [["U+1F69C"], "🚜", "tractor"], [["U+1F3CE"], "🏎", "racing car"], [["U+1F3CD"], "🏍", "motorcycle"], [["U+1F6F5"], "🛵", "motor scooter"], [["U+1F9BD"], "🦽", "manual wheelchair"], [["U+1F9BC"], "🦼", "motorized wheelchair"], [["U+1F6FA"], "🛺", "auto rickshaw"], [["U+1F6B2"], "🚲", "bicycle"], [["U+1F6F4"], "🛴", "kick scooter"], [["U+1F6F9"], "🛹", "skateboard"], [["U+1F6FC"], "🛼", "⊛ roller skate"], [["U+1F68F"], "🚏", "bus stop"], [["U+1F6E3"], "🛣", "motorway"], [["U+1F6E4"], "🛤", "railway track"], [["U+1F6E2"], "🛢", "oil drum"], [["U+26FD"], "⛽", "fuel pump"], [["U+1F6A8"], "🚨", "police car light"], [["U+1F6A5"], "🚥", "horizontal traffic light"], [["U+1F6A6"], "🚦", "vertical traffic light"], [["U+1F6D1"], "🛑", "stop sign"], [["U+1F6A7"], "🚧", "construction"]]], ["transport-water", [[["U+2693"], "⚓", "anchor"], [["U+26F5"], "⛵", "sailboat"], [["U+1F6F6"], "🛶", "canoe"], [["U+1F6A4"], "🚤", "speedboat"], [["U+1F6F3"], "🛳", "passenger ship"], [["U+26F4"], "⛴", "ferry"], [["U+1F6E5"], "🛥", "motor boat"], [["U+1F6A2"], "🚢", "ship"]]], ["transport-air", [[["U+2708"], "✈", "airplane"], [["U+1F6E9"], "🛩", "small airplane"], [["U+1F6EB"], "🛫", "airplane departure"], [["U+1F6EC"], "🛬", "airplane arrival"], [["U+1FA82"], "🪂", "parachute"], [["U+1F4BA"], "💺", "seat"], [["U+1F681"], "🚁", "helicopter"], [["U+1F69F"], "🚟", "suspension railway"], [["U+1F6A0"], "🚠", "mountain cableway"], [["U+1F6A1"], "🚡", "aerial tramway"], [["U+1F6F0"], "🛰", "satellite"], [["U+1F680"], "🚀", "rocket"], [["U+1F6F8"], "🛸", "flying saucer"]]], ["hotel", [[["U+1F6CE"], "🛎", "bellhop bell"], [["U+1F9F3"], "🧳", "luggage"]]], ["time", [[["U+231B"], "⌛", "hourglass done"], [["U+23F3"], "⏳", "hourglass not done"], [["U+231A"], "⌚", "watch"], [["U+23F0"], "⏰", "alarm clock"], [["U+23F1"], "⏱", "stopwatch"], [["U+23F2"], "⏲", "timer clock"], [["U+1F570"], "🕰", "mantelpiece clock"], [["U+1F55B"], "🕛", "twelve o’clock"], [["U+1F567"], "🕧", "twelve-thirty"], [["U+1F550"], "🕐", "one o’clock"], [["U+1F55C"], "🕜", "one-thirty"], [["U+1F551"], "🕑", "two o’clock"], [["U+1F55D"], "🕝", "two-thirty"], [["U+1F552"], "🕒", "three o’clock"], [["U+1F55E"], "🕞", "three-thirty"], [["U+1F553"], "🕓", "four o’clock"], [["U+1F55F"], "🕟", "four-thirty"], [["U+1F554"], "🕔", "five o’clock"], [["U+1F560"], "🕠", "five-thirty"], [["U+1F555"], "🕕", "six o’clock"], [["U+1F561"], "🕡", "six-thirty"], [["U+1F556"], "🕖", "seven o’clock"], [["U+1F562"], "🕢", "seven-thirty"], [["U+1F557"], "🕗", "eight o’clock"], [["U+1F563"], "🕣", "eight-thirty"], [["U+1F558"], "🕘", "nine o’clock"], [["U+1F564"], "🕤", "nine-thirty"], [["U+1F559"], "🕙", "ten o’clock"], [["U+1F565"], "🕥", "ten-thirty"], [["U+1F55A"], "🕚", "eleven o’clock"], [["U+1F566"], "🕦", "eleven-thirty"]]], ["sky & weather", [[["U+1F311"], "🌑", "new moon"], [["U+1F312"], "🌒", "waxing crescent moon"], [["U+1F313"], "🌓", "first quarter moon"], [["U+1F314"], "🌔", "waxing gibbous moon"], [["U+1F315"], "🌕", "full moon"], [["U+1F316"], "🌖", "waning gibbous moon"], [["U+1F317"], "🌗", "last quarter moon"], [["U+1F318"], "🌘", "waning crescent moon"], [["U+1F319"], "🌙", "crescent moon"], [["U+1F31A"], "🌚", "new moon face"], [["U+1F31B"], "🌛", "first quarter moon face"], [["U+1F31C"], "🌜", "last quarter moon face"], [["U+1F321"], "🌡", "thermometer"], [["U+2600"], "☀", "sun"], [["U+1F31D"], "🌝", "full moon face"], [["U+1F31E"], "🌞", "sun with face"], [["U+1FA90"], "🪐", "ringed planet"], [["U+2B50"], "⭐", "star"], [["U+1F31F"], "🌟", "glowing star"], [["U+1F320"], "🌠", "shooting star"], [["U+1F30C"], "🌌", "milky way"], [["U+2601"], "☁", "cloud"], [["U+26C5"], "⛅", "sun behind cloud"], [["U+26C8"], "⛈", "cloud with lightning and rain"], [["U+1F324"], "🌤", "sun behind small cloud"], [["U+1F325"], "🌥", "sun behind large cloud"], [["U+1F326"], "🌦", "sun behind rain cloud"], [["U+1F327"], "🌧", "cloud with rain"], [["U+1F328"], "🌨", "cloud with snow"], [["U+1F329"], "🌩", "cloud with lightning"], [["U+1F32A"], "🌪", "tornado"], [["U+1F32B"], "🌫", "fog"], [["U+1F32C"], "🌬", "wind face"], [["U+1F300"], "🌀", "cyclone"], [["U+1F308"], "🌈", "rainbow"], [["U+1F302"], "🌂", "closed umbrella"], [["U+2602"], "☂", "umbrella"], [["U+2614"], "☔", "umbrella with rain drops"], [["U+26F1"], "⛱", "umbrella on ground"], [["U+26A1"], "⚡", "high voltage"], [["U+2744"], "❄", "snowflake"], [["U+2603"], "☃", "snowman"], [["U+26C4"], "⛄", "snowman without snow"], [["U+2604"], "☄", "comet"], [["U+1F525"], "🔥", "fire"], [["U+1F4A7"], "💧", "droplet"], [["U+1F30A"], "🌊", "water wave"]]]]], ["Activities", [["event", [[["U+1F383"], "🎃", "jack-o-lantern"], [["U+1F384"], "🎄", "Christmas tree"], [["U+1F386"], "🎆", "fireworks"], [["U+1F387"], "🎇", "sparkler"], [["U+1F9E8"], "🧨", "firecracker"], [["U+2728"], "✨", "sparkles"], [["U+1F388"], "🎈", "balloon"], [["U+1F389"], "🎉", "party popper"], [["U+1F38A"], "🎊", "confetti ball"], [["U+1F38B"], "🎋", "tanabata tree"], [["U+1F38D"], "🎍", "pine decoration"], [["U+1F38E"], "🎎", "Japanese dolls"], [["U+1F38F"], "🎏", "carp streamer"], [["U+1F390"], "🎐", "wind chime"], [["U+1F391"], "🎑", "moon viewing ceremony"], [["U+1F9E7"], "🧧", "red envelope"], [["U+1F380"], "🎀", "ribbon"], [["U+1F381"], "🎁", "wrapped gift"], [["U+1F397"], "🎗", "reminder ribbon"], [["U+1F39F"], "🎟", "admission tickets"], [["U+1F3AB"], "🎫", "ticket"]]], ["award-medal", [[["U+1F396"], "🎖", "military medal"], [["U+1F3C6"], "🏆", "trophy"], [["U+1F3C5"], "🏅", "sports medal"], [["U+1F947"], "🥇", "1st place medal"], [["U+1F948"], "🥈", "2nd place medal"], [["U+1F949"], "🥉", "3rd place medal"]]], ["sport", [[["U+26BD"], "⚽", "soccer ball"], [["U+26BE"], "⚾", "baseball"], [["U+1F94E"], "🥎", "softball"], [["U+1F3C0"], "🏀", "basketball"], [["U+1F3D0"], "🏐", "volleyball"], [["U+1F3C8"], "🏈", "american football"], [["U+1F3C9"], "🏉", "rugby football"], [["U+1F3BE"], "🎾", "tennis"], [["U+1F94F"], "🥏", "flying disc"], [["U+1F3B3"], "🎳", "bowling"], [["U+1F3CF"], "🏏", "cricket game"], [["U+1F3D1"], "🏑", "field hockey"], [["U+1F3D2"], "🏒", "ice hockey"], [["U+1F94D"], "🥍", "lacrosse"], [["U+1F3D3"], "🏓", "ping pong"], [["U+1F3F8"], "🏸", "badminton"], [["U+1F94A"], "🥊", "boxing glove"], [["U+1F94B"], "🥋", "martial arts uniform"], [["U+1F945"], "🥅", "goal net"], [["U+26F3"], "⛳", "flag in hole"], [["U+26F8"], "⛸", "ice skate"], [["U+1F3A3"], "🎣", "fishing pole"], [["U+1F93F"], "🤿", "diving mask"], [["U+1F3BD"], "🎽", "running shirt"], [["U+1F3BF"], "🎿", "skis"], [["U+1F6F7"], "🛷", "sled"], [["U+1F94C"], "🥌", "curling stone"]]], ["game", [[["U+1F3AF"], "🎯", "direct hit"], [["U+1FA80"], "🪀", "yo-yo"], [["U+1FA81"], "🪁", "kite"], [["U+1F3B1"], "🎱", "pool 8 ball"], [["U+1F52E"], "🔮", "crystal ball"], [["U+1FA84"], "🪄", "⊛ magic wand"], [["U+1F9FF"], "🧿", "nazar amulet"], [["U+1F3AE"], "🎮", "video game"], [["U+1F579"], "🕹", "joystick"], [["U+1F3B0"], "🎰", "slot machine"], [["U+1F3B2"], "🎲", "game die"], [["U+1F9E9"], "🧩", "puzzle piece"], [["U+1F9F8"], "🧸", "teddy bear"], [["U+1FA85"], "🪅", "⊛ piñata"], [["U+1FA86"], "🪆", "⊛ nesting dolls"], [["U+2660"], "♠", "spade suit"], [["U+2665"], "♥", "heart suit"], [["U+2666"], "♦", "diamond suit"], [["U+2663"], "♣", "club suit"], [["U+265F"], "♟", "chess pawn"], [["U+1F0CF"], "🃏", "joker"], [["U+1F004"], "🀄", "mahjong red dragon"], [["U+1F3B4"], "🎴", "flower playing cards"]]], ["arts & crafts", [[["U+1F3AD"], "🎭", "performing arts"], [["U+1F5BC"], "🖼", "framed picture"], [["U+1F3A8"], "🎨", "artist palette"], [["U+1F9F5"], "🧵", "thread"], [["U+1FAA1"], "🪡", "⊛ sewing needle"], [["U+1F9F6"], "🧶", "yarn"], [["U+1FAA2"], "🪢", "⊛ knot"]]]]], ["Objects", [["clothing", [[["U+1F453"], "👓", "glasses"], [["U+1F576"], "🕶", "sunglasses"], [["U+1F97D"], "🥽", "goggles"], [["U+1F97C"], "🥼", "lab coat"], [["U+1F9BA"], "🦺", "safety vest"], [["U+1F454"], "👔", "necktie"], [["U+1F455"], "👕", "t-shirt"], [["U+1F456"], "👖", "jeans"], [["U+1F9E3"], "🧣", "scarf"], [["U+1F9E4"], "🧤", "gloves"], [["U+1F9E5"], "🧥", "coat"], [["U+1F9E6"], "🧦", "socks"], [["U+1F457"], "👗", "dress"], [["U+1F458"], "👘", "kimono"], [["U+1F97B"], "🥻", "sari"], [["U+1FA71"], "🩱", "one-piece swimsuit"], [["U+1FA72"], "🩲", "briefs"], [["U+1FA73"], "🩳", "shorts"], [["U+1F459"], "👙", "bikini"], [["U+1F45A"], "👚", "woman’s clothes"], [["U+1F45B"], "👛", "purse"], [["U+1F45C"], "👜", "handbag"], [["U+1F45D"], "👝", "clutch bag"], [["U+1F6CD"], "🛍", "shopping bags"], [["U+1F392"], "🎒", "backpack"], [["U+1FA74"], "🩴", "⊛ thong sandal"], [["U+1F45E"], "👞", "man’s shoe"], [["U+1F45F"], "👟", "running shoe"], [["U+1F97E"], "🥾", "hiking boot"], [["U+1F97F"], "🥿", "flat shoe"], [["U+1F460"], "👠", "high-heeled shoe"], [["U+1F461"], "👡", "woman’s sandal"], [["U+1FA70"], "🩰", "ballet shoes"], [["U+1F462"], "👢", "woman’s boot"], [["U+1F451"], "👑", "crown"], [["U+1F452"], "👒", "woman’s hat"], [["U+1F3A9"], "🎩", "top hat"], [["U+1F393"], "🎓", "graduation cap"], [["U+1F9E2"], "🧢", "billed cap"], [["U+1FA96"], "🪖", "⊛ military helmet"], [["U+26D1"], "⛑", "rescue worker’s helmet"], [["U+1F4FF"], "📿", "prayer beads"], [["U+1F484"], "💄", "lipstick"], [["U+1F48D"], "💍", "ring"], [["U+1F48E"], "💎", "gem stone"]]], ["sound", [[["U+1F507"], "🔇", "muted speaker"], [["U+1F508"], "🔈", "speaker low volume"], [["U+1F509"], "🔉", "speaker medium volume"], [["U+1F50A"], "🔊", "speaker high volume"], [["U+1F4E2"], "📢", "loudspeaker"], [["U+1F4E3"], "📣", "megaphone"], [["U+1F4EF"], "📯", "postal horn"], [["U+1F514"], "🔔", "bell"], [["U+1F515"], "🔕", "bell with slash"]]], ["music", [[["U+1F3BC"], "🎼", "musical score"], [["U+1F3B5"], "🎵", "musical note"], [["U+1F3B6"], "🎶", "musical notes"], [["U+1F399"], "🎙", "studio microphone"], [["U+1F39A"], "🎚", "level slider"], [["U+1F39B"], "🎛", "control knobs"], [["U+1F3A4"], "🎤", "microphone"], [["U+1F3A7"], "🎧", "headphone"], [["U+1F4FB"], "📻", "radio"]]], ["musical-instrument", [[["U+1F3B7"], "🎷", "saxophone"], [["U+1FA97"], "🪗", "⊛ accordion"], [["U+1F3B8"], "🎸", "guitar"], [["U+1F3B9"], "🎹", "musical keyboard"], [["U+1F3BA"], "🎺", "trumpet"], [["U+1F3BB"], "🎻", "violin"], [["U+1FA95"], "🪕", "banjo"], [["U+1F941"], "🥁", "drum"], [["U+1FA98"], "🪘", "⊛ long drum"]]], ["phone", [[["U+1F4F1"], "📱", "mobile phone"], [["U+1F4F2"], "📲", "mobile phone with arrow"], [["U+260E"], "☎", "telephone"], [["U+1F4DE"], "📞", "telephone receiver"], [["U+1F4DF"], "📟", "pager"], [["U+1F4E0"], "📠", "fax machine"]]], ["computer", [[["U+1F50B"], "🔋", "battery"], [["U+1F50C"], "🔌", "electric plug"], [["U+1F4BB"], "💻", "laptop"], [["U+1F5A5"], "🖥", "desktop computer"], [["U+1F5A8"], "🖨", "printer"], [["U+2328"], "⌨", "keyboard"], [["U+1F5B1"], "🖱", "computer mouse"], [["U+1F5B2"], "🖲", "trackball"], [["U+1F4BD"], "💽", "computer disk"], [["U+1F4BE"], "💾", "floppy disk"], [["U+1F4BF"], "💿", "optical disk"], [["U+1F4C0"], "📀", "dvd"], [["U+1F9EE"], "🧮", "abacus"]]], ["light & video", [[["U+1F3A5"], "🎥", "movie camera"], [["U+1F39E"], "🎞", "film frames"], [["U+1F4FD"], "📽", "film projector"], [["U+1F3AC"], "🎬", "clapper board"], [["U+1F4FA"], "📺", "television"], [["U+1F4F7"], "📷", "camera"], [["U+1F4F8"], "📸", "camera with flash"], [["U+1F4F9"], "📹", "video camera"], [["U+1F4FC"], "📼", "videocassette"], [["U+1F50D"], "🔍", "magnifying glass tilted left"], [["U+1F50E"], "🔎", "magnifying glass tilted right"], [["U+1F56F"], "🕯", "candle"], [["U+1F4A1"], "💡", "light bulb"], [["U+1F526"], "🔦", "flashlight"], [["U+1F3EE"], "🏮", "red paper lantern"], [["U+1FA94"], "🪔", "diya lamp"]]], ["book-paper", [[["U+1F4D4"], "📔", "notebook with decorative cover"], [["U+1F4D5"], "📕", "closed book"], [["U+1F4D6"], "📖", "open book"], [["U+1F4D7"], "📗", "green book"], [["U+1F4D8"], "📘", "blue book"], [["U+1F4D9"], "📙", "orange book"], [["U+1F4DA"], "📚", "books"], [["U+1F4D3"], "📓", "notebook"], [["U+1F4D2"], "📒", "ledger"], [["U+1F4C3"], "📃", "page with curl"], [["U+1F4DC"], "📜", "scroll"], [["U+1F4C4"], "📄", "page facing up"], [["U+1F4F0"], "📰", "newspaper"], [["U+1F5DE"], "🗞", "rolled-up newspaper"], [["U+1F4D1"], "📑", "bookmark tabs"], [["U+1F516"], "🔖", "bookmark"], [["U+1F3F7"], "🏷", "label"]]], ["money", [[["U+1F4B0"], "💰", "money bag"], [["U+1FA99"], "🪙", "⊛ coin"], [["U+1F4B4"], "💴", "yen banknote"], [["U+1F4B5"], "💵", "dollar banknote"], [["U+1F4B6"], "💶", "euro banknote"], [["U+1F4B7"], "💷", "pound banknote"], [["U+1F4B8"], "💸", "money with wings"], [["U+1F4B3"], "💳", "credit card"], [["U+1F9FE"], "🧾", "receipt"], [["U+1F4B9"], "💹", "chart increasing with yen"]]], ["mail", [[["U+2709"], "✉", "envelope"], [["U+1F4E7"], "📧", "e-mail"], [["U+1F4E8"], "📨", "incoming envelope"], [["U+1F4E9"], "📩", "envelope with arrow"], [["U+1F4E4"], "📤", "outbox tray"], [["U+1F4E5"], "📥", "inbox tray"], [["U+1F4E6"], "📦", "package"], [["U+1F4EB"], "📫", "closed mailbox with raised flag"], [["U+1F4EA"], "📪", "closed mailbox with lowered flag"], [["U+1F4EC"], "📬", "open mailbox with raised flag"], [["U+1F4ED"], "📭", "open mailbox with lowered flag"], [["U+1F4EE"], "📮", "postbox"], [["U+1F5F3"], "🗳", "ballot box with ballot"]]], ["writing", [[["U+270F"], "✏", "pencil"], [["U+2712"], "✒", "black nib"], [["U+1F58B"], "🖋", "fountain pen"], [["U+1F58A"], "🖊", "pen"], [["U+1F58C"], "🖌", "paintbrush"], [["U+1F58D"], "🖍", "crayon"], [["U+1F4DD"], "📝", "memo"]]], ["office", [[["U+1F4BC"], "💼", "briefcase"], [["U+1F4C1"], "📁", "file folder"], [["U+1F4C2"], "📂", "open file folder"], [["U+1F5C2"], "🗂", "card index dividers"], [["U+1F4C5"], "📅", "calendar"], [["U+1F4C6"], "📆", "tear-off calendar"], [["U+1F5D2"], "🗒", "spiral notepad"], [["U+1F5D3"], "🗓", "spiral calendar"], [["U+1F4C7"], "📇", "card index"], [["U+1F4C8"], "📈", "chart increasing"], [["U+1F4C9"], "📉", "chart decreasing"], [["U+1F4CA"], "📊", "bar chart"], [["U+1F4CB"], "📋", "clipboard"], [["U+1F4CC"], "📌", "pushpin"], [["U+1F4CD"], "📍", "round pushpin"], [["U+1F4CE"], "📎", "paperclip"], [["U+1F587"], "🖇", "linked paperclips"], [["U+1F4CF"], "📏", "straight ruler"], [["U+1F4D0"], "📐", "triangular ruler"], [["U+2702"], "✂", "scissors"], [["U+1F5C3"], "🗃", "card file box"], [["U+1F5C4"], "🗄", "file cabinet"], [["U+1F5D1"], "🗑", "wastebasket"]]], ["lock", [[["U+1F512"], "🔒", "locked"], [["U+1F513"], "🔓", "unlocked"], [["U+1F50F"], "🔏", "locked with pen"], [["U+1F510"], "🔐", "locked with key"], [["U+1F511"], "🔑", "key"], [["U+1F5DD"], "🗝", "old key"]]], ["tool", [[["U+1F528"], "🔨", "hammer"], [["U+1FA93"], "🪓", "axe"], [["U+26CF"], "⛏", "pick"], [["U+2692"], "⚒", "hammer and pick"], [["U+1F6E0"], "🛠", "hammer and wrench"], [["U+1F5E1"], "🗡", "dagger"], [["U+2694"], "⚔", "crossed swords"], [["U+1F52B"], "🔫", "pistol"], [["U+1FA83"], "🪃", "⊛ boomerang"], [["U+1F3F9"], "🏹", "bow and arrow"], [["U+1F6E1"], "🛡", "shield"], [["U+1F527"], "🔧", "wrench"], [["U+1FA9B"], "🪛", "⊛ screwdriver"], [["U+1F529"], "🔩", "nut and bolt"], [["U+2699"], "⚙", "gear"], [["U+1F5DC"], "🗜", "clamp"], [["U+2696"], "⚖", "balance scale"], [["U+1F9AF"], "🦯", "white cane"], [["U+1F517"], "🔗", "link"], [["U+26D3"], "⛓", "chains"], [["U+1FA9D"], "🪝", "⊛ hook"], [["U+1F9F0"], "🧰", "toolbox"], [["U+1F9F2"], "🧲", "magnet"], [["U+1FA9C"], "🪜", "⊛ ladder"]]], ["science", [[["U+2697"], "⚗", "alembic"], [["U+1F9EA"], "🧪", "test tube"], [["U+1F9EB"], "🧫", "petri dish"], [["U+1F9EC"], "🧬", "dna"], [["U+1F52C"], "🔬", "microscope"], [["U+1F52D"], "🔭", "telescope"], [["U+1F4E1"], "📡", "satellite antenna"]]], ["medical", [[["U+1F489"], "💉", "syringe"], [["U+1FA78"], "🩸", "drop of blood"], [["U+1F48A"], "💊", "pill"], [["U+1FA79"], "🩹", "adhesive bandage"], [["U+1FA7A"], "🩺", "stethoscope"]]], ["household", [[["U+1F6AA"], "🚪", "door"], [["U+1F6D7"], "🛗", "⊛ elevator"], [["U+1F6CF"], "🛏", "bed"], [["U+1F6CB"], "🛋", "couch and lamp"], [["U+1FA91"], "🪑", "chair"], [["U+1F6BD"], "🚽", "toilet"], [["U+1FAA0"], "🪠", "⊛ plunger"], [["U+1F6BF"], "🚿", "shower"], [["U+1F6C1"], "🛁", "bathtub"], [["U+1FA92"], "🪒", "razor"], [["U+1F9F4"], "🧴", "lotion bottle"], [["U+1F9F7"], "🧷", "safety pin"], [["U+1F9F9"], "🧹", "broom"], [["U+1F9FA"], "🧺", "basket"], [["U+1F9FB"], "🧻", "roll of paper"], [["U+1FAA3"], "🪣", "⊛ bucket"], [["U+1F9FC"], "🧼", "soap"], [["U+1FAA5"], "🪥", "⊛ toothbrush"], [["U+1F9FD"], "🧽", "sponge"], [["U+1F9EF"], "🧯", "fire extinguisher"], [["U+1F6D2"], "🛒", "shopping cart"]]], ["other-object", [[["U+1F6AC"], "🚬", "cigarette"], [["U+26B0"], "⚰", "coffin"], [["U+26B1"], "⚱", "funeral urn"], [["U+1F5FF"], "🗿", "moai"], [["U+1FAA7"], "🪧", "⊛ placard"]]]]], ["Symbols", [["transport-sign", [[["U+1F3E7"], "🏧", "ATM sign"], [["U+1F6AE"], "🚮", "litter in bin sign"], [["U+1F6B0"], "🚰", "potable water"], [["U+267F"], "♿", "wheelchair symbol"], [["U+1F6B9"], "🚹", "men’s room"], [["U+1F6BA"], "🚺", "women’s room"], [["U+1F6BB"], "🚻", "restroom"], [["U+1F6BC"], "🚼", "baby symbol"], [["U+1F6BE"], "🚾", "water closet"], [["U+1F6C2"], "🛂", "passport control"], [["U+1F6C3"], "🛃", "customs"], [["U+1F6C4"], "🛄", "baggage claim"], [["U+1F6C5"], "🛅", "left luggage"]]], ["warning", [[["U+26A0"], "⚠", "warning"], [["U+1F6B8"], "🚸", "children crossing"], [["U+26D4"], "⛔", "no entry"], [["U+1F6AB"], "🚫", "prohibited"], [["U+1F6B3"], "🚳", "no bicycles"], [["U+1F6AD"], "🚭", "no smoking"], [["U+1F6AF"], "🚯", "no littering"], [["U+1F6B1"], "🚱", "non-potable water"], [["U+1F6B7"], "🚷", "no pedestrians"], [["U+1F4F5"], "📵", "no mobile phones"], [["U+1F51E"], "🔞", "no one under eighteen"], [["U+2622"], "☢", "radioactive"], [["U+2623"], "☣", "biohazard"]]], ["arrow", [[["U+2B06"], "⬆", "up arrow"], [["U+2197"], "↗", "up-right arrow"], [["U+27A1"], "➡", "right arrow"], [["U+2198"], "↘", "down-right arrow"], [["U+2B07"], "⬇", "down arrow"], [["U+2199"], "↙", "down-left arrow"], [["U+2B05"], "⬅", "left arrow"], [["U+2196"], "↖", "up-left arrow"], [["U+2195"], "↕", "up-down arrow"], [["U+2194"], "↔", "left-right arrow"], [["U+21A9"], "↩", "right arrow curving left"], [["U+21AA"], "↪", "left arrow curving right"], [["U+2934"], "⤴", "right arrow curving up"], [["U+2935"], "⤵", "right arrow curving down"], [["U+1F503"], "🔃", "clockwise vertical arrows"], [["U+1F504"], "🔄", "counterclockwise arrows button"], [["U+1F519"], "🔙", "BACK arrow"], [["U+1F51A"], "🔚", "END arrow"], [["U+1F51B"], "🔛", "ON! arrow"], [["U+1F51C"], "🔜", "SOON arrow"], [["U+1F51D"], "🔝", "TOP arrow"]]], ["religion", [[["U+1F6D0"], "🛐", "place of worship"], [["U+269B"], "⚛", "atom symbol"], [["U+1F549"], "🕉", "om"], [["U+2721"], "✡", "star of David"], [["U+2638"], "☸", "wheel of dharma"], [["U+262F"], "☯", "yin yang"], [["U+271D"], "✝", "latin cross"], [["U+2626"], "☦", "orthodox cross"], [["U+262A"], "☪", "star and crescent"], [["U+262E"], "☮", "peace symbol"], [["U+1F54E"], "🕎", "menorah"], [["U+1F52F"], "🔯", "dotted six-pointed star"]]], ["zodiac", [[["U+2648"], "♈", "Aries"], [["U+2649"], "♉", "Taurus"], [["U+264A"], "♊", "Gemini"], [["U+264B"], "♋", "Cancer"], [["U+264C"], "♌", "Leo"], [["U+264D"], "♍", "Virgo"], [["U+264E"], "♎", "Libra"], [["U+264F"], "♏", "Scorpio"], [["U+2650"], "♐", "Sagittarius"], [["U+2651"], "♑", "Capricorn"], [["U+2652"], "♒", "Aquarius"], [["U+2653"], "♓", "Pisces"], [["U+26CE"], "⛎", "Ophiuchus"]]], ["av-symbol", [[["U+1F500"], "🔀", "shuffle tracks button"], [["U+1F501"], "🔁", "repeat button"], [["U+1F502"], "🔂", "repeat single button"], [["U+25B6"], "▶", "play button"], [["U+23E9"], "⏩", "fast-forward button"], [["U+23ED"], "⏭", "next track button"], [["U+23EF"], "⏯", "play or pause button"], [["U+25C0"], "◀", "reverse button"], [["U+23EA"], "⏪", "fast reverse button"], [["U+23EE"], "⏮", "last track button"], [["U+1F53C"], "🔼", "upwards button"], [["U+23EB"], "⏫", "fast up button"], [["U+1F53D"], "🔽", "downwards button"], [["U+23EC"], "⏬", "fast down button"], [["U+23F8"], "⏸", "pause button"], [["U+23F9"], "⏹", "stop button"], [["U+23FA"], "⏺", "record button"], [["U+23CF"], "⏏", "eject button"], [["U+1F3A6"], "🎦", "cinema"], [["U+1F505"], "🔅", "dim button"], [["U+1F506"], "🔆", "bright button"], [["U+1F4F6"], "📶", "antenna bars"], [["U+1F4F3"], "📳", "vibration mode"], [["U+1F4F4"], "📴", "mobile phone off"]]], ["gender", [[["U+2640"], "♀", "female sign"], [["U+2642"], "♂", "male sign"], [["U+26A7"], "⚧", "⊛ transgender symbol"]]], ["math", [[["U+2716"], "✖", "multiply"], [["U+2795"], "➕", "plus"], [["U+2796"], "➖", "minus"], [["U+2797"], "➗", "divide"], [["U+267E"], "♾", "infinity"]]], ["punctuation", [[["U+203C"], "‼", "double exclamation mark"], [["U+2049"], "⁉", "exclamation question mark"], [["U+2753"], "❓", "question mark"], [["U+2754"], "❔", "white question mark"], [["U+2755"], "❕", "white exclamation mark"], [["U+2757"], "❗", "exclamation mark"], [["U+3030"], "〰", "wavy dash"]]], ["currency", [[["U+1F4B1"], "💱", "currency exchange"], [["U+1F4B2"], "💲", "heavy dollar sign"]]], ["other-symbol", [[["U+2695"], "⚕", "medical symbol"], [["U+267B"], "♻", "recycling symbol"], [["U+269C"], "⚜", "fleur-de-lis"], [["U+1F531"], "🔱", "trident emblem"], [["U+1F4DB"], "📛", "name badge"], [["U+1F530"], "🔰", "Japanese symbol for beginner"], [["U+2B55"], "⭕", "hollow red circle"], [["U+2705"], "✅", "check mark button"], [["U+2611"], "☑", "check box with check"], [["U+2714"], "✔", "check mark"], [["U+274C"], "❌", "cross mark"], [["U+274E"], "❎", "cross mark button"], [["U+27B0"], "➰", "curly loop"], [["U+27BF"], "➿", "double curly loop"], [["U+303D"], "〽", "part alternation mark"], [["U+2733"], "✳", "eight-spoked asterisk"], [["U+2734"], "✴", "eight-pointed star"], [["U+2747"], "❇", "sparkle"], [["U+00A9"], "©", "copyright"], [["U+00AE"], "®", "registered"], [["U+2122"], "™", "trade mark"]]], ["keycap", [[["U+0023", "U+FE0F", "U+20E3"], "#️⃣", "keycap: #"], [["U+002A", "U+FE0F", "U+20E3"], "*️⃣", "keycap: *"], [["U+0030", "U+FE0F", "U+20E3"], "0️⃣", "keycap: 0"], [["U+0031", "U+FE0F", "U+20E3"], "1️⃣", "keycap: 1"], [["U+0032", "U+FE0F", "U+20E3"], "2️⃣", "keycap: 2"], [["U+0033", "U+FE0F", "U+20E3"], "3️⃣", "keycap: 3"], [["U+0034", "U+FE0F", "U+20E3"], "4️⃣", "keycap: 4"], [["U+0035", "U+FE0F", "U+20E3"], "5️⃣", "keycap: 5"], [["U+0036", "U+FE0F", "U+20E3"], "6️⃣", "keycap: 6"], [["U+0037", "U+FE0F", "U+20E3"], "7️⃣", "keycap: 7"], [["U+0038", "U+FE0F", "U+20E3"], "8️⃣", "keycap: 8"], [["U+0039", "U+FE0F", "U+20E3"], "9️⃣", "keycap: 9"], [["U+1F51F"], "🔟", "keycap: 10"]]], ["alphanum", [[["U+1F520"], "🔠", "input latin uppercase"], [["U+1F521"], "🔡", "input latin lowercase"], [["U+1F522"], "🔢", "input numbers"], [["U+1F523"], "🔣", "input symbols"], [["U+1F524"], "🔤", "input latin letters"], [["U+1F170"], "🅰", "A button (blood type)"], [["U+1F18E"], "🆎", "AB button (blood type)"], [["U+1F171"], "🅱", "B button (blood type)"], [["U+1F191"], "🆑", "CL button"], [["U+1F192"], "🆒", "COOL button"], [["U+1F193"], "🆓", "FREE button"], [["U+2139"], "ℹ", "information"], [["U+1F194"], "🆔", "ID button"], [["U+24C2"], "Ⓜ", "circled M"], [["U+1F195"], "🆕", "NEW button"], [["U+1F196"], "🆖", "NG button"], [["U+1F17E"], "🅾", "O button (blood type)"], [["U+1F197"], "🆗", "OK button"], [["U+1F17F"], "🅿", "P button"], [["U+1F198"], "🆘", "SOS button"], [["U+1F199"], "🆙", "UP! button"], [["U+1F19A"], "🆚", "VS button"], [["U+1F201"], "🈁", "Japanese “here” button"], [["U+1F202"], "🈂", "Japanese “service charge” button"], [["U+1F237"], "🈷", "Japanese “monthly amount” button"], [["U+1F236"], "🈶", "Japanese “not free of charge” button"], [["U+1F22F"], "🈯", "Japanese “reserved” button"], [["U+1F250"], "🉐", "Japanese “bargain” button"], [["U+1F239"], "🈹", "Japanese “discount” button"], [["U+1F21A"], "🈚", "Japanese “free of charge” button"], [["U+1F232"], "🈲", "Japanese “prohibited” button"], [["U+1F251"], "🉑", "Japanese “acceptable” button"], [["U+1F238"], "🈸", "Japanese “application” button"], [["U+1F234"], "🈴", "Japanese “passing grade” button"], [["U+1F233"], "🈳", "Japanese “vacancy” button"], [["U+3297"], "㊗", "Japanese “congratulations” button"], [["U+3299"], "㊙", "Japanese “secret” button"], [["U+1F23A"], "🈺", "Japanese “open for business” button"], [["U+1F235"], "🈵", "Japanese “no vacancy” button"]]], ["geometric", [[["U+1F534"], "🔴", "red circle"], [["U+1F7E0"], "🟠", "orange circle"], [["U+1F7E1"], "🟡", "yellow circle"], [["U+1F7E2"], "🟢", "green circle"], [["U+1F535"], "🔵", "blue circle"], [["U+1F7E3"], "🟣", "purple circle"], [["U+1F7E4"], "🟤", "brown circle"], [["U+26AB"], "⚫", "black circle"], [["U+26AA"], "⚪", "white circle"], [["U+1F7E5"], "🟥", "red square"], [["U+1F7E7"], "🟧", "orange square"], [["U+1F7E8"], "🟨", "yellow square"], [["U+1F7E9"], "🟩", "green square"], [["U+1F7E6"], "🟦", "blue square"], [["U+1F7EA"], "🟪", "purple square"], [["U+1F7EB"], "🟫", "brown square"], [["U+2B1B"], "⬛", "black large square"], [["U+2B1C"], "⬜", "white large square"], [["U+25FC"], "◼", "black medium square"], [["U+25FB"], "◻", "white medium square"], [["U+25FE"], "◾", "black medium-small square"], [["U+25FD"], "◽", "white medium-small square"], [["U+25AA"], "▪", "black small square"], [["U+25AB"], "▫", "white small square"], [["U+1F536"], "🔶", "large orange diamond"], [["U+1F537"], "🔷", "large blue diamond"], [["U+1F538"], "🔸", "small orange diamond"], [["U+1F539"], "🔹", "small blue diamond"], [["U+1F53A"], "🔺", "red triangle pointed up"], [["U+1F53B"], "🔻", "red triangle pointed down"], [["U+1F4A0"], "💠", "diamond with a dot"], [["U+1F518"], "🔘", "radio button"], [["U+1F533"], "🔳", "white square button"], [["U+1F532"], "🔲", "black square button"]]]]], ["Flags", [["flag", [[["U+1F3C1"], "🏁", "chequered flag"], [["U+1F6A9"], "🚩", "triangular flag"], [["U+1F38C"], "🎌", "crossed flags"], [["U+1F3F4"], "🏴", "black flag"], [["U+1F3F3"], "🏳", "white flag"], [["U+1F3F3", "U+FE0F", "U+200D", "U+1F308"], "🏳️‍🌈", "rainbow flag"], [["U+1F3F3", "U+FE0F", "U+200D", "U+26A7", "U+FE0F"], "🏳️‍⚧️", "⊛ transgender flag"], [["U+1F3F4", "U+200D", "U+2620", "U+FE0F"], "🏴‍☠️", "pirate flag"]]], ["country-flag", [[["U+1F1E6", "U+1F1E8"], "🇦🇨", "flag: Ascension Island"], [["U+1F1E6", "U+1F1E9"], "🇦🇩", "flag: Andorra"], [["U+1F1E6", "U+1F1EA"], "🇦🇪", "flag: United Arab Emirates"], [["U+1F1E6", "U+1F1EB"], "🇦🇫", "flag: Afghanistan"], [["U+1F1E6", "U+1F1EC"], "🇦🇬", "flag: Antigua & Barbuda"], [["U+1F1E6", "U+1F1EE"], "🇦🇮", "flag: Anguilla"], [["U+1F1E6", "U+1F1F1"], "🇦🇱", "flag: Albania"], [["U+1F1E6", "U+1F1F2"], "🇦🇲", "flag: Armenia"], [["U+1F1E6", "U+1F1F4"], "🇦🇴", "flag: Angola"], [["U+1F1E6", "U+1F1F6"], "🇦🇶", "flag: Antarctica"], [["U+1F1E6", "U+1F1F7"], "🇦🇷", "flag: Argentina"], [["U+1F1E6", "U+1F1F8"], "🇦🇸", "flag: American Samoa"], [["U+1F1E6", "U+1F1F9"], "🇦🇹", "flag: Austria"], [["U+1F1E6", "U+1F1FA"], "🇦🇺", "flag: Australia"], [["U+1F1E6", "U+1F1FC"], "🇦🇼", "flag: Aruba"], [["U+1F1E6", "U+1F1FD"], "🇦🇽", "flag: Åland Islands"], [["U+1F1E6", "U+1F1FF"], "🇦🇿", "flag: Azerbaijan"], [["U+1F1E7", "U+1F1E6"], "🇧🇦", "flag: Bosnia & Herzegovina"], [["U+1F1E7", "U+1F1E7"], "🇧🇧", "flag: Barbados"], [["U+1F1E7", "U+1F1E9"], "🇧🇩", "flag: Bangladesh"], [["U+1F1E7", "U+1F1EA"], "🇧🇪", "flag: Belgium"], [["U+1F1E7", "U+1F1EB"], "🇧🇫", "flag: Burkina Faso"], [["U+1F1E7", "U+1F1EC"], "🇧🇬", "flag: Bulgaria"], [["U+1F1E7", "U+1F1ED"], "🇧🇭", "flag: Bahrain"], [["U+1F1E7", "U+1F1EE"], "🇧🇮", "flag: Burundi"], [["U+1F1E7", "U+1F1EF"], "🇧🇯", "flag: Benin"], [["U+1F1E7", "U+1F1F1"], "🇧🇱", "flag: St. Barthélemy"], [["U+1F1E7", "U+1F1F2"], "🇧🇲", "flag: Bermuda"], [["U+1F1E7", "U+1F1F3"], "🇧🇳", "flag: Brunei"], [["U+1F1E7", "U+1F1F4"], "🇧🇴", "flag: Bolivia"], [["U+1F1E7", "U+1F1F6"], "🇧🇶", "flag: Caribbean Netherlands"], [["U+1F1E7", "U+1F1F7"], "🇧🇷", "flag: Brazil"], [["U+1F1E7", "U+1F1F8"], "🇧🇸", "flag: Bahamas"], [["U+1F1E7", "U+1F1F9"], "🇧🇹", "flag: Bhutan"], [["U+1F1E7", "U+1F1FB"], "🇧🇻", "flag: Bouvet Island"], [["U+1F1E7", "U+1F1FC"], "🇧🇼", "flag: Botswana"], [["U+1F1E7", "U+1F1FE"], "🇧🇾", "flag: Belarus"], [["U+1F1E7", "U+1F1FF"], "🇧🇿", "flag: Belize"], [["U+1F1E8", "U+1F1E6"], "🇨🇦", "flag: Canada"], [["U+1F1E8", "U+1F1E8"], "🇨🇨", "flag: Cocos (Keeling) Islands"], [["U+1F1E8", "U+1F1E9"], "🇨🇩", "flag: Congo - Kinshasa"], [["U+1F1E8", "U+1F1EB"], "🇨🇫", "flag: Central African Republic"], [["U+1F1E8", "U+1F1EC"], "🇨🇬", "flag: Congo - Brazzaville"], [["U+1F1E8", "U+1F1ED"], "🇨🇭", "flag: Switzerland"], [["U+1F1E8", "U+1F1EE"], "🇨🇮", "flag: Côte d’Ivoire"], [["U+1F1E8", "U+1F1F0"], "🇨🇰", "flag: Cook Islands"], [["U+1F1E8", "U+1F1F1"], "🇨🇱", "flag: Chile"], [["U+1F1E8", "U+1F1F2"], "🇨🇲", "flag: Cameroon"], [["U+1F1E8", "U+1F1F3"], "🇨🇳", "flag: China"], [["U+1F1E8", "U+1F1F4"], "🇨🇴", "flag: Colombia"], [["U+1F1E8", "U+1F1F5"], "🇨🇵", "flag: Clipperton Island"], [["U+1F1E8", "U+1F1F7"], "🇨🇷", "flag: Costa Rica"], [["U+1F1E8", "U+1F1FA"], "🇨🇺", "flag: Cuba"], [["U+1F1E8", "U+1F1FB"], "🇨🇻", "flag: Cape Verde"], [["U+1F1E8", "U+1F1FC"], "🇨🇼", "flag: Curaçao"], [["U+1F1E8", "U+1F1FD"], "🇨🇽", "flag: Christmas Island"], [["U+1F1E8", "U+1F1FE"], "🇨🇾", "flag: Cyprus"], [["U+1F1E8", "U+1F1FF"], "🇨🇿", "flag: Czechia"], [["U+1F1E9", "U+1F1EA"], "🇩🇪", "flag: Germany"], [["U+1F1E9", "U+1F1EC"], "🇩🇬", "flag: Diego Garcia"], [["U+1F1E9", "U+1F1EF"], "🇩🇯", "flag: Djibouti"], [["U+1F1E9", "U+1F1F0"], "🇩🇰", "flag: Denmark"], [["U+1F1E9", "U+1F1F2"], "🇩🇲", "flag: Dominica"], [["U+1F1E9", "U+1F1F4"], "🇩🇴", "flag: Dominican Republic"], [["U+1F1E9", "U+1F1FF"], "🇩🇿", "flag: Algeria"], [["U+1F1EA", "U+1F1E6"], "🇪🇦", "flag: Ceuta & Melilla"], [["U+1F1EA", "U+1F1E8"], "🇪🇨", "flag: Ecuador"], [["U+1F1EA", "U+1F1EA"], "🇪🇪", "flag: Estonia"], [["U+1F1EA", "U+1F1EC"], "🇪🇬", "flag: Egypt"], [["U+1F1EA", "U+1F1ED"], "🇪🇭", "flag: Western Sahara"], [["U+1F1EA", "U+1F1F7"], "🇪🇷", "flag: Eritrea"], [["U+1F1EA", "U+1F1F8"], "🇪🇸", "flag: Spain"], [["U+1F1EA", "U+1F1F9"], "🇪🇹", "flag: Ethiopia"], [["U+1F1EA", "U+1F1FA"], "🇪🇺", "flag: European Union"], [["U+1F1EB", "U+1F1EE"], "🇫🇮", "flag: Finland"], [["U+1F1EB", "U+1F1EF"], "🇫🇯", "flag: Fiji"], [["U+1F1EB", "U+1F1F0"], "🇫🇰", "flag: Falkland Islands"], [["U+1F1EB", "U+1F1F2"], "🇫🇲", "flag: Micronesia"], [["U+1F1EB", "U+1F1F4"], "🇫🇴", "flag: Faroe Islands"], [["U+1F1EB", "U+1F1F7"], "🇫🇷", "flag: France"], [["U+1F1EC", "U+1F1E6"], "🇬🇦", "flag: Gabon"], [["U+1F1EC", "U+1F1E7"], "🇬🇧", "flag: United Kingdom"], [["U+1F1EC", "U+1F1E9"], "🇬🇩", "flag: Grenada"], [["U+1F1EC", "U+1F1EA"], "🇬🇪", "flag: Georgia"], [["U+1F1EC", "U+1F1EB"], "🇬🇫", "flag: French Guiana"], [["U+1F1EC", "U+1F1EC"], "🇬🇬", "flag: Guernsey"], [["U+1F1EC", "U+1F1ED"], "🇬🇭", "flag: Ghana"], [["U+1F1EC", "U+1F1EE"], "🇬🇮", "flag: Gibraltar"], [["U+1F1EC", "U+1F1F1"], "🇬🇱", "flag: Greenland"], [["U+1F1EC", "U+1F1F2"], "🇬🇲", "flag: Gambia"], [["U+1F1EC", "U+1F1F3"], "🇬🇳", "flag: Guinea"], [["U+1F1EC", "U+1F1F5"], "🇬🇵", "flag: Guadeloupe"], [["U+1F1EC", "U+1F1F6"], "🇬🇶", "flag: Equatorial Guinea"], [["U+1F1EC", "U+1F1F7"], "🇬🇷", "flag: Greece"], [["U+1F1EC", "U+1F1F8"], "🇬🇸", "flag: South Georgia & South Sandwich Islands"], [["U+1F1EC", "U+1F1F9"], "🇬🇹", "flag: Guatemala"], [["U+1F1EC", "U+1F1FA"], "🇬🇺", "flag: Guam"], [["U+1F1EC", "U+1F1FC"], "🇬🇼", "flag: Guinea-Bissau"], [["U+1F1EC", "U+1F1FE"], "🇬🇾", "flag: Guyana"], [["U+1F1ED", "U+1F1F0"], "🇭🇰", "flag: Hong Kong SAR China"], [["U+1F1ED", "U+1F1F2"], "🇭🇲", "flag: Heard & McDonald Islands"], [["U+1F1ED", "U+1F1F3"], "🇭🇳", "flag: Honduras"], [["U+1F1ED", "U+1F1F7"], "🇭🇷", "flag: Croatia"], [["U+1F1ED", "U+1F1F9"], "🇭🇹", "flag: Haiti"], [["U+1F1ED", "U+1F1FA"], "🇭🇺", "flag: Hungary"], [["U+1F1EE", "U+1F1E8"], "🇮🇨", "flag: Canary Islands"], [["U+1F1EE", "U+1F1E9"], "🇮🇩", "flag: Indonesia"], [["U+1F1EE", "U+1F1EA"], "🇮🇪", "flag: Ireland"], [["U+1F1EE", "U+1F1F1"], "🇮🇱", "flag: Israel"], [["U+1F1EE", "U+1F1F2"], "🇮🇲", "flag: Isle of Man"], [["U+1F1EE", "U+1F1F3"], "🇮🇳", "flag: India"], [["U+1F1EE", "U+1F1F4"], "🇮🇴", "flag: British Indian Ocean Territory"], [["U+1F1EE", "U+1F1F6"], "🇮🇶", "flag: Iraq"], [["U+1F1EE", "U+1F1F7"], "🇮🇷", "flag: Iran"], [["U+1F1EE", "U+1F1F8"], "🇮🇸", "flag: Iceland"], [["U+1F1EE", "U+1F1F9"], "🇮🇹", "flag: Italy"], [["U+1F1EF", "U+1F1EA"], "🇯🇪", "flag: Jersey"], [["U+1F1EF", "U+1F1F2"], "🇯🇲", "flag: Jamaica"], [["U+1F1EF", "U+1F1F4"], "🇯🇴", "flag: Jordan"], [["U+1F1EF", "U+1F1F5"], "🇯🇵", "flag: Japan"], [["U+1F1F0", "U+1F1EA"], "🇰🇪", "flag: Kenya"], [["U+1F1F0", "U+1F1EC"], "🇰🇬", "flag: Kyrgyzstan"], [["U+1F1F0", "U+1F1ED"], "🇰🇭", "flag: Cambodia"], [["U+1F1F0", "U+1F1EE"], "🇰🇮", "flag: Kiribati"], [["U+1F1F0", "U+1F1F2"], "🇰🇲", "flag: Comoros"], [["U+1F1F0", "U+1F1F3"], "🇰🇳", "flag: St. Kitts & Nevis"], [["U+1F1F0", "U+1F1F5"], "🇰🇵", "flag: North Korea"], [["U+1F1F0", "U+1F1F7"], "🇰🇷", "flag: South Korea"], [["U+1F1F0", "U+1F1FC"], "🇰🇼", "flag: Kuwait"], [["U+1F1F0", "U+1F1FE"], "🇰🇾", "flag: Cayman Islands"], [["U+1F1F0", "U+1F1FF"], "🇰🇿", "flag: Kazakhstan"], [["U+1F1F1", "U+1F1E6"], "🇱🇦", "flag: Laos"], [["U+1F1F1", "U+1F1E7"], "🇱🇧", "flag: Lebanon"], [["U+1F1F1", "U+1F1E8"], "🇱🇨", "flag: St. Lucia"], [["U+1F1F1", "U+1F1EE"], "🇱🇮", "flag: Liechtenstein"], [["U+1F1F1", "U+1F1F0"], "🇱🇰", "flag: Sri Lanka"], [["U+1F1F1", "U+1F1F7"], "🇱🇷", "flag: Liberia"], [["U+1F1F1", "U+1F1F8"], "🇱🇸", "flag: Lesotho"], [["U+1F1F1", "U+1F1F9"], "🇱🇹", "flag: Lithuania"], [["U+1F1F1", "U+1F1FA"], "🇱🇺", "flag: Luxembourg"], [["U+1F1F1", "U+1F1FB"], "🇱🇻", "flag: Latvia"], [["U+1F1F1", "U+1F1FE"], "🇱🇾", "flag: Libya"], [["U+1F1F2", "U+1F1E6"], "🇲🇦", "flag: Morocco"], [["U+1F1F2", "U+1F1E8"], "🇲🇨", "flag: Monaco"], [["U+1F1F2", "U+1F1E9"], "🇲🇩", "flag: Moldova"], [["U+1F1F2", "U+1F1EA"], "🇲🇪", "flag: Montenegro"], [["U+1F1F2", "U+1F1EB"], "🇲🇫", "flag: St. Martin"], [["U+1F1F2", "U+1F1EC"], "🇲🇬", "flag: Madagascar"], [["U+1F1F2", "U+1F1ED"], "🇲🇭", "flag: Marshall Islands"], [["U+1F1F2", "U+1F1F0"], "🇲🇰", "flag: North Macedonia"], [["U+1F1F2", "U+1F1F1"], "🇲🇱", "flag: Mali"], [["U+1F1F2", "U+1F1F2"], "🇲🇲", "flag: Myanmar (Burma)"], [["U+1F1F2", "U+1F1F3"], "🇲🇳", "flag: Mongolia"], [["U+1F1F2", "U+1F1F4"], "🇲🇴", "flag: Macao SAR China"], [["U+1F1F2", "U+1F1F5"], "🇲🇵", "flag: Northern Mariana Islands"], [["U+1F1F2", "U+1F1F6"], "🇲🇶", "flag: Martinique"], [["U+1F1F2", "U+1F1F7"], "🇲🇷", "flag: Mauritania"], [["U+1F1F2", "U+1F1F8"], "🇲🇸", "flag: Montserrat"], [["U+1F1F2", "U+1F1F9"], "🇲🇹", "flag: Malta"], [["U+1F1F2", "U+1F1FA"], "🇲🇺", "flag: Mauritius"], [["U+1F1F2", "U+1F1FB"], "🇲🇻", "flag: Maldives"], [["U+1F1F2", "U+1F1FC"], "🇲🇼", "flag: Malawi"], [["U+1F1F2", "U+1F1FD"], "🇲🇽", "flag: Mexico"], [["U+1F1F2", "U+1F1FE"], "🇲🇾", "flag: Malaysia"], [["U+1F1F2", "U+1F1FF"], "🇲🇿", "flag: Mozambique"], [["U+1F1F3", "U+1F1E6"], "🇳🇦", "flag: Namibia"], [["U+1F1F3", "U+1F1E8"], "🇳🇨", "flag: New Caledonia"], [["U+1F1F3", "U+1F1EA"], "🇳🇪", "flag: Niger"], [["U+1F1F3", "U+1F1EB"], "🇳🇫", "flag: Norfolk Island"], [["U+1F1F3", "U+1F1EC"], "🇳🇬", "flag: Nigeria"], [["U+1F1F3", "U+1F1EE"], "🇳🇮", "flag: Nicaragua"], [["U+1F1F3", "U+1F1F1"], "🇳🇱", "flag: Netherlands"], [["U+1F1F3", "U+1F1F4"], "🇳🇴", "flag: Norway"], [["U+1F1F3", "U+1F1F5"], "🇳🇵", "flag: Nepal"], [["U+1F1F3", "U+1F1F7"], "🇳🇷", "flag: Nauru"], [["U+1F1F3", "U+1F1FA"], "🇳🇺", "flag: Niue"], [["U+1F1F3", "U+1F1FF"], "🇳🇿", "flag: New Zealand"], [["U+1F1F4", "U+1F1F2"], "🇴🇲", "flag: Oman"], [["U+1F1F5", "U+1F1E6"], "🇵🇦", "flag: Panama"], [["U+1F1F5", "U+1F1EA"], "🇵🇪", "flag: Peru"], [["U+1F1F5", "U+1F1EB"], "🇵🇫", "flag: French Polynesia"], [["U+1F1F5", "U+1F1EC"], "🇵🇬", "flag: Papua New Guinea"], [["U+1F1F5", "U+1F1ED"], "🇵🇭", "flag: Philippines"], [["U+1F1F5", "U+1F1F0"], "🇵🇰", "flag: Pakistan"], [["U+1F1F5", "U+1F1F1"], "🇵🇱", "flag: Poland"], [["U+1F1F5", "U+1F1F2"], "🇵🇲", "flag: St. Pierre & Miquelon"], [["U+1F1F5", "U+1F1F3"], "🇵🇳", "flag: Pitcairn Islands"], [["U+1F1F5", "U+1F1F7"], "🇵🇷", "flag: Puerto Rico"], [["U+1F1F5", "U+1F1F8"], "🇵🇸", "flag: Palestinian Territories"], [["U+1F1F5", "U+1F1F9"], "🇵🇹", "flag: Portugal"], [["U+1F1F5", "U+1F1FC"], "🇵🇼", "flag: Palau"], [["U+1F1F5", "U+1F1FE"], "🇵🇾", "flag: Paraguay"], [["U+1F1F6", "U+1F1E6"], "🇶🇦", "flag: Qatar"], [["U+1F1F7", "U+1F1EA"], "🇷🇪", "flag: Réunion"], [["U+1F1F7", "U+1F1F4"], "🇷🇴", "flag: Romania"], [["U+1F1F7", "U+1F1F8"], "🇷🇸", "flag: Serbia"], [["U+1F1F7", "U+1F1FA"], "🇷🇺", "flag: Russia"], [["U+1F1F7", "U+1F1FC"], "🇷🇼", "flag: Rwanda"], [["U+1F1F8", "U+1F1E6"], "🇸🇦", "flag: Saudi Arabia"], [["U+1F1F8", "U+1F1E7"], "🇸🇧", "flag: Solomon Islands"], [["U+1F1F8", "U+1F1E8"], "🇸🇨", "flag: Seychelles"], [["U+1F1F8", "U+1F1E9"], "🇸🇩", "flag: Sudan"], [["U+1F1F8", "U+1F1EA"], "🇸🇪", "flag: Sweden"], [["U+1F1F8", "U+1F1EC"], "🇸🇬", "flag: Singapore"], [["U+1F1F8", "U+1F1ED"], "🇸🇭", "flag: St. Helena"], [["U+1F1F8", "U+1F1EE"], "🇸🇮", "flag: Slovenia"], [["U+1F1F8", "U+1F1EF"], "🇸🇯", "flag: Svalbard & Jan Mayen"], [["U+1F1F8", "U+1F1F0"], "🇸🇰", "flag: Slovakia"], [["U+1F1F8", "U+1F1F1"], "🇸🇱", "flag: Sierra Leone"], [["U+1F1F8", "U+1F1F2"], "🇸🇲", "flag: San Marino"], [["U+1F1F8", "U+1F1F3"], "🇸🇳", "flag: Senegal"], [["U+1F1F8", "U+1F1F4"], "🇸🇴", "flag: Somalia"], [["U+1F1F8", "U+1F1F7"], "🇸🇷", "flag: Suriname"], [["U+1F1F8", "U+1F1F8"], "🇸🇸", "flag: South Sudan"], [["U+1F1F8", "U+1F1F9"], "🇸🇹", "flag: São Tomé & Príncipe"], [["U+1F1F8", "U+1F1FB"], "🇸🇻", "flag: El Salvador"], [["U+1F1F8", "U+1F1FD"], "🇸🇽", "flag: Sint Maarten"], [["U+1F1F8", "U+1F1FE"], "🇸🇾", "flag: Syria"], [["U+1F1F8", "U+1F1FF"], "🇸🇿", "flag: Eswatini"], [["U+1F1F9", "U+1F1E6"], "🇹🇦", "flag: Tristan da Cunha"], [["U+1F1F9", "U+1F1E8"], "🇹🇨", "flag: Turks & Caicos Islands"], [["U+1F1F9", "U+1F1E9"], "🇹🇩", "flag: Chad"], [["U+1F1F9", "U+1F1EB"], "🇹🇫", "flag: French Southern Territories"], [["U+1F1F9", "U+1F1EC"], "🇹🇬", "flag: Togo"], [["U+1F1F9", "U+1F1ED"], "🇹🇭", "flag: Thailand"], [["U+1F1F9", "U+1F1EF"], "🇹🇯", "flag: Tajikistan"], [["U+1F1F9", "U+1F1F0"], "🇹🇰", "flag: Tokelau"], [["U+1F1F9", "U+1F1F1"], "🇹🇱", "flag: Timor-Leste"], [["U+1F1F9", "U+1F1F2"], "🇹🇲", "flag: Turkmenistan"], [["U+1F1F9", "U+1F1F3"], "🇹🇳", "flag: Tunisia"], [["U+1F1F9", "U+1F1F4"], "🇹🇴", "flag: Tonga"], [["U+1F1F9", "U+1F1F7"], "🇹🇷", "flag: Turkey"], [["U+1F1F9", "U+1F1F9"], "🇹🇹", "flag: Trinidad & Tobago"], [["U+1F1F9", "U+1F1FB"], "🇹🇻", "flag: Tuvalu"], [["U+1F1F9", "U+1F1FC"], "🇹🇼", "flag: Taiwan"], [["U+1F1F9", "U+1F1FF"], "🇹🇿", "flag: Tanzania"], [["U+1F1FA", "U+1F1E6"], "🇺🇦", "flag: Ukraine"], [["U+1F1FA", "U+1F1EC"], "🇺🇬", "flag: Uganda"], [["U+1F1FA", "U+1F1F2"], "🇺🇲", "flag: U.S. Outlying Islands"], [["U+1F1FA", "U+1F1F3"], "🇺🇳", "flag: United Nations"], [["U+1F1FA", "U+1F1F8"], "🇺🇸", "flag: United States"], [["U+1F1FA", "U+1F1FE"], "🇺🇾", "flag: Uruguay"], [["U+1F1FA", "U+1F1FF"], "🇺🇿", "flag: Uzbekistan"], [["U+1F1FB", "U+1F1E6"], "🇻🇦", "flag: Vatican City"], [["U+1F1FB", "U+1F1E8"], "🇻🇨", "flag: St. Vincent & Grenadines"], [["U+1F1FB", "U+1F1EA"], "🇻🇪", "flag: Venezuela"], [["U+1F1FB", "U+1F1EC"], "🇻🇬", "flag: British Virgin Islands"], [["U+1F1FB", "U+1F1EE"], "🇻🇮", "flag: U.S. Virgin Islands"], [["U+1F1FB", "U+1F1F3"], "🇻🇳", "flag: Vietnam"], [["U+1F1FB", "U+1F1FA"], "🇻🇺", "flag: Vanuatu"], [["U+1F1FC", "U+1F1EB"], "🇼🇫", "flag: Wallis & Futuna"], [["U+1F1FC", "U+1F1F8"], "🇼🇸", "flag: Samoa"], [["U+1F1FD", "U+1F1F0"], "🇽🇰", "flag: Kosovo"], [["U+1F1FE", "U+1F1EA"], "🇾🇪", "flag: Yemen"], [["U+1F1FE", "U+1F1F9"], "🇾🇹", "flag: Mayotte"], [["U+1F1FF", "U+1F1E6"], "🇿🇦", "flag: South Africa"], [["U+1F1FF", "U+1F1F2"], "🇿🇲", "flag: Zambia"], [["U+1F1FF", "U+1F1FC"], "🇿🇼", "flag: Zimbabwe"]]], ["subdivision-flag", [[["U+1F3F4", "U+E0067", "U+E0062", "U+E0065", "U+E006E", "U+E0067", "U+E007F"], "🏴󠁧󠁢󠁥󠁮󠁧󠁿", "flag: England"], [["U+1F3F4", "U+E0067", "U+E0062", "U+E0073", "U+E0063", "U+E0074", "U+E007F"], "🏴󠁧󠁢󠁳󠁣󠁴󠁿", "flag: Scotland"], [["U+1F3F4", "U+E0067", "U+E0062", "U+E0077", "U+E006C", "U+E0073", "U+E007F"], "🏴󠁧󠁢󠁷󠁬󠁳󠁿", "flag: Wales"]]]]]];
/* harmony default export */ const js_EmojiChars = (EmojiChars);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js
var EmojiAnims = [["(heart)", "heart.png", "Heart"], ["(cool)", "cool.png", "Cool"], ["(hearteyes)", "hearteyes.png", "Heart eyes"], ["(stareyes)", "stareyes.png", "Star eyes"], ["(like)", "like.png", "Like"], ["(unamused)", "unamused.png", "Unamused"], ["(cwl)", "cwl.png", "Crying with laughter"], ["(xd)", "xd.png", "XD smiley"], [":)", "smile.png", "Smile"], [":(", "sad.png", "Sad"], [":D", "laugh.png", "Laugh"], [":O", "surprised.png", "Surprised"], [";)", "wink.png", "Wink"], [";(", "cry.png", "Crying"], ["(shivering)", "shivering.png", "Cold shivering"], ["(:|", "sweat.png", "Sweating"], [":|", "speechless.png", "Speechless"], [":P", "tongueout.png", "Cheeky"], [":$", "blush.png", "Blushing"], ["(inlove)", "inlove.png", "In love"], ["(kiss)", "kiss.png", "Kiss"], [":^)", "wonder.png", "Wondering"], ["|-)", "sleepy.png", "Sleepy"], ["|-(", "dull.png", "Dull"], ["(yawn)", "yawn.png", "Yawn"], ["(puke)", "puke.png", "Vomiting"], ["(doh)", "doh.png", "Doh!"], ["(angry)", "angry.png", "Angry"], ["(wasntme)", "wasntme.png", "It wasn't me!"], ["(worry)", "worry.png", "Worried"], ["(mm)", "mmm.png", "Mmmmm…"], ["(nerd)", "nerdy.png", "Nerdy"], ["(rainbowsmile)", "rainbowsmile.png", "Rainbow smile"], [":x", "lipssealed.png", "My lips are sealed"], ["(devil)", "devil.png", "Devil"], ["(angel)", "angel.png", "Angel"], ["(envy)", "envy.png", "Envy"], ["(makeup)", "makeup.png", "Make-up"], ["(think)", "think.png", "Thinking"], ["(rofl)", "rofl.png", "Rolling on the floor laughing"], ["(happy)", "happy.png", "Happy"], ["(smirk)", "smirk.png", "Smirking"], ["(nod)", "nod.png", "Nodding"], ["(shake)", "shake.png", "Shake"], ["(waiting)", "waiting.png", "Waiting"], ["(emo)", "emo.png", "Emo"], ["(donttalk)", "donttalktome.png", "Don't talk to me"], ["(idea)", "idea.png", "Idea"], ["(talk)", "talk.png", "Talking"], ["(swear)", "swear.png", "Swearing"], ["]:)", "evilgrin.png", "Evil grin"], ["(headbang)", "headbang.png", "Banging head on wall"], ["(learn)", "learn.png", "Global Learning"], ["(headphones)", "headphones.png", "Listening to headphones"], ["(morningafter)", "hungover.png", "Morning after party"], ["(selfie)", "selfie.png", "Selfie"], ["(shock)", "shock.png", "Spoiler alert"], ["(llsshock)", "llsshock.png", "Spoiler alert"], ["(ttm)", "ttm.png", "Talking too much"], ["(dream)", "dream.png", "Dreaming"], ["(ill)", "ill.png", "Ill"], ["(tired)", "tired.png", "Tired"], ["(party)", "party.png", "Party"], ["(bandit)", "bandit.png", "Bandit"], ["(tauri)", "tauri.png", "Bald man with glasses"], ["(nazar)", "nazar.png", "Blessing"], ["(movember)", "movember.png", "Movember"], ["(mysteryskype)", "mysteryskype.png", "Mystery Skype"], ["(dotdfemale)", "dotdfemale.png", "Day of the dead"], ["(dotdmale)", "dotdmale.png", "Day of the dead"], ["(selfiediwali)", "selfiediwali.png", "Selfie Diwali"], ["(diwaliselfie)", "diwaliselfie.png", "Diwali selfie"], ["(steveaoki)", "steveaoki.png", "Steve Aoki"], ["(aokijump)", "aokijump.png", "Aoki jump"], ["(cakethrow)", "cakethrow.png", "Cake throw"], ["(kolony)", "kolony.png", "Kolony"], ["(joy)", "joy.png", "Joy"], ["(anger)", "anger.png", "Anger"], ["(sadness)", "sadness.png", "Sadness"], ["(disgust)", "disgust.png", "Disgust"], ["(fear)", "fear.png", "Fear"], ["(hestonfacepalm)", "hestonfacepalm.png", "Heston facepalm"], ["(heston)", "heston.png", "Heston Blumenthal"], ["(stormtrooper)", "stormtrooper.png", "Storm trooper"], ["(kyloren)", "kyloren.png", "Kylo Ren"], ["(captainphasma)", "captainphasma.png", "Captain Phasma"], ["(malthe)", "malthe.png", "Smiling man with glasses"], ["(ladyvamp)", "ladyvampire.png", "Lady vampire"], ["(vampire)", "vampire.png", "Vampire"], ["(ghost)", "ghost.png", "Ghost"], ["(skull)", "skull.png", "Skull"], ["(pumpkin)", "pumpkin.png", "Pumpkin"], ["(santa)", "santa.png", "Santa"], ["(xmascwl)", "xmascwl.png", "Xmas crying with laughter"], ["(festiveparty)", "festiveparty.png", "Festive party"], ["(holidayspirit)", "holidayspirit.png", "Holiday spirit"], ["(rudolfsurprise)", "rudolfsurprise.png", "Surprised Rudolf"], ["(rudolfidea)", "rudolfidea.png", "Rudolf idea"], ["(wtf)", "wtf.png", "WTF…"], ["(smoking)", "smoke.png", "Smoking"], ["(drunk)", "drunk.png", "Drunk"], ["(finger)", "finger.png", "Finger"], ["(oliver)", "oliver.png", "Man saying come on"], ["(xmassarcastic)", "xmassarcastic.png", "Xmas sarcastic"], ["(xmascry)", "xmascry.png", "Xmas cry"], ["(wave)", "hi.png", "Hi"], ["(highfive)", "highfive.png", "High five"], ["(clap)", "clap.png", "Clapping"], ["(sarcastic)", "sarcastic.png", "Sarcastic"], ["(chuckle)", "giggle.png", "Giggle"], ["(facepalm)", "facepalm.png", "Facepalm"], ["(rock)", "rock.png", "Rock"], ["(yn)", "fingerscrossed.png", "Fingers crossed"], ["(listening)", "listening.png", "Listening"], ["(wait)", "wait.png", "Wait"], ["(whew)", "whew.png", "Relieved"], ["(tmi)", "tmi.png", "Too much information"], ["(call)", "call.png", "Call"], ["(punch)", "punch.png", "Punch"], ["(talktothehand)", "talktothehand.png", "Talk to the hand"], ["(whistle)", "whistle.png", "Whistle"], ["(slap)", "slap.png", "Slap"], ["(lalala)", "lalala.png", "Lalala"], ["(y)", "yes.png", "Yes"], ["(n)", "no.png", "No"], ["(handshake)", "handshake.png", "Handshake"], ["(fistbump)", "fistbump.png", "Fist bump"], ["(poke)", "poke.png", "Poke"], ["(celebrate)", "handsinair.png", "Hands celebrating"], ["(hearthands)", "hearthands.png", "Heart hands"], ["(victory)", "victory.png", "Victory sign"], ["(noworries)", "noworries.png", "No worries"], ["(ok)", "ok.png", "OK"], ["(pray)", "praying.png", "Praying"], ["(flex)", "muscle.png", "Muscle"], ["(ek)", "naturescall.png", "Nature's call"], ["(woty)", "woty.png", "Woman of the year"], ["(glassceiling)", "glassceiling.png", "Glass ceiling"], ["(deadyes)", "deadyes.png", "Dead yes"], ["(xmasyes)", "xmasyes.png", "Xmas yes"], ["(dropthemic)", "dropthemic.png", "Drop the mic"]];
/* harmony default export */ const js_EmojiAnims = (EmojiAnims);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/autocompleteinput.css
var autocompleteinput = __webpack_require__(3824);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/SearchStringArrayAdapter.js
/**
 * @typedef {Object} SearchArrayAdapterOption
 * @property {function} searchFuntion
 * 
 * 
 * 
 * @param {Array<String>} arr 
 * @param {SearchArrayAdapterOption} options not implement yet
 */
function SearchStringArrayAdapter(texts, options) {
  if (!this.queryItems) return new SearchStringArrayAdapter(texts, options);
  this.texts = texts;
}

SearchStringArrayAdapter.prototype.queryItems = function (query, mInput) {
  var query = query.toLocaleLowerCase();
  return this.texts.map(function (text) {
    var start = text.toLocaleLowerCase().indexOf(query);

    if (start >= 0) {
      var hightlightedText = text.substr(0, start) + '<strong style="color:red">' + text.substr(start, query.length) + '</strong>' + text.substr(start + query.length);
      return {
        text: text,
        hightlightedText: hightlightedText
      };
    } else return null;
  }).filter(function (it) {
    return it !== null;
  });
};

SearchStringArrayAdapter.onAttached = function (parent) {
  this.parent = parent;
};

SearchStringArrayAdapter.prototype.getItemText = function (item, mInput) {
  return item.text;
};

SearchStringArrayAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) {
  if (reuseItem) {
    reuseItem.childNodes[0].innerHTML = item.hightlightedText;
    return reuseItem;
  } else return _({
    tag: 'div',
    child: {
      tag: 'span',
      "class": 'absol-autocomplete-input-item-text',
      props: {
        innerHTML: item.hightlightedText
      }
    }
  });
};

/* harmony default export */ const adapter_SearchStringArrayAdapter = (SearchStringArrayAdapter);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/SearchObjectArrayAdapter.js
/**
 * @typedef {Object} SearchObjectArrayAdapter
 * @property {function} getItemText
 * 
 * 
 * 
 * @param {Array<Object>} arr 
 * @param {SearchArrayAdapterOption} options
 */
function SearchObjectArrayAdapter(objects, options) {
  if (!this.queryItems) return new SearchObjectArrayAdapter(texts, options);
  this.objects = objects;
  this.options = options;
}

SearchObjectArrayAdapter.prototype.queryItems = function (query, mInput) {
  var query = query.toLocaleLowerCase();
  return this.objects.map(function (object) {
    var text = this.getItemText(object);
    var start = text.toLocaleLowerCase().indexOf(query);

    if (start >= 0) {
      var hightlightedText = text.substr(0, start) + '<strong style="color:red">' + text.substr(start, query.length) + '</strong>' + text.substr(start + query.length);
      return Object.assign(object, {
        __hightlightedText__: hightlightedText
      });
    } else return null;
  }.bind(this)).filter(function (it) {
    return it !== null;
  });
};

SearchObjectArrayAdapter.prototype.onAttached = function (parent) {
  this.parent = parent;

  parent.getSelectedObject = function () {
    if (this._selectedIndex >= 0) {
      return this.$poolItems[this._selectedIndex]._holderItem;
    } else {
      return null;
    }
  };
};

SearchObjectArrayAdapter.prototype.getItemText = function (item, mInput) {
  if (this.options && this.options.getItemText) return this.options.getItemText.call(this, item, mInput);else if (typeof item.text == 'string') {
    return item.text;
  } else return item.toString();
};

SearchObjectArrayAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) {
  if (reuseItem) {
    reuseItem.childNodes[0].innerHTML = item.__hightlightedText__;
    return reuseItem;
  } else return _({
    tag: 'div',
    child: {
      tag: 'span',
      props: {
        innerHTML: item.__hightlightedText__
      }
    }
  });
};

/* harmony default export */ const adapter_SearchObjectArrayAdapter = (SearchObjectArrayAdapter);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/AutoCompleteInput.js







var AutoCompleteInput_ = absol_acomp_ACore._;
var AutoCompleteInput_$ = absol_acomp_ACore.$;

function AutoCompleteInput() {
  this.$input = AutoCompleteInput_$('input', this).on('keyup', this.eventHandler.keyup).on('keydown', this.eventHandler.keydown).on('focus', this.eventHandler.focus).on('blur', this.eventHandler.blur);
  this.$dropdown = AutoCompleteInput_$('.absol-autocomplete-input-dropdown', this);
  this.$vscroller = AutoCompleteInput_$('bscroller', this).on('click', this.eventHandler.vscrollerClick);
  this.$poolItems = [];
  this._currentData = [];
  this._sessionIndex = 0;
  this._updatedSession = -1;
  this._cache = {};
  HTML5_OOP.drillProperty(this, this.$input, 'value');
  return this;
}

AutoCompleteInput.tag = 'AutoCompleteInput';

AutoCompleteInput.render = function () {
  return AutoCompleteInput_({
    extendEvent: 'change',
    "class": 'absol-autocomplete-input',
    child: ['input[type="text"].absol-autocomplete-input-text', {
      "class": 'absol-autocomplete-input-dropdown',
      style: {
        display: 'none'
      },
      child: {
        tag: 'bscroller',
        style: {
          'max-height': '500px'
        }
      }
    }]
  });
};

AutoCompleteInput.eventHandler = {};

AutoCompleteInput.eventHandler.keyup = function (event) {
  if (this._keyTimeout) {
    clearTimeout(this._keyTimeout);
    this._keyTimeout = 0;
  }

  var cTimeout = setTimeout(function () {
    clearTimeout(cTimeout);
    this.find();
  }.bind(this), 300);

  if (this._cacheTimeout) {
    clearTimeout(this._cacheTimeout);
    this._cacheTimeout = 0;
  }

  var cacheTimeout = setTimeout(function () {
    clearTimeout(cacheTimeout);
    this.clearCache();
  }.bind(this), 300);
  this._cacheTimeout = cacheTimeout;
  this._keyTimeout = cTimeout;
};

AutoCompleteInput.eventHandler.blur = function () {
  this.removeClass('focus');
};

AutoCompleteInput.eventHandler.focus = function () {
  this.addClass('focus');
  AutoCompleteInput_$(document.body).on('mousedown', this.eventHandler.clickOut); //todo
};

AutoCompleteInput.eventHandler.clickOut = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event)) return;
  AutoCompleteInput_$(document.body).off('mousedown', this.eventHandler.clickOut);
  var text = this.$input.value;

  if (this._lastValue != text) {
    this._lastValue = text;
    this.$dropdown.addStyle('display', 'none');
    this._lastValue = text;
    this.emit('change', {
      target: this,
      value: text
    }, this);
  }
};

AutoCompleteInput.eventHandler.vscrollerClick = function (event) {
  var current = event.target;

  while (current && !current.containsClass('absol-autocomplete-input-item') && current != this.$vscroller) {
    current = current.parentElement;
  }

  if (current && current._holderItem) {
    var text = this.getItemText(current._holderItem);
    this.$input.value = text;
    this._lastQuery = text;
    this._selectedIndex = current._holderIndex;
    this.$dropdown.addStyle('display', 'none');
    this._lastValue = text;
    this.emit('change', {
      target: this,
      value: text
    }, this);
  }
};

AutoCompleteInput.eventHandler.keydown = function (event) {
  var key = event.key;

  if (key == 'ArrowDown') {
    if (this._selectedIndex + 1 < this._currentData.length) {
      if (this.$poolItems[this._selectedIndex]) {
        this.$poolItems[this._selectedIndex].removeClass('active');
      }

      this._selectedIndex += 1;

      if (this.$poolItems[this._selectedIndex]) {
        this.$poolItems[this._selectedIndex].addClass('active');

        this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]);
      }
    }

    event.preventDefault();
  } else if (key == 'ArrowUp') {
    if (this._selectedIndex - 1 >= 0) {
      if (this.$poolItems[this._selectedIndex]) {
        this.$poolItems[this._selectedIndex].removeClass('active');
      }

      this._selectedIndex -= 1;

      if (this.$poolItems[this._selectedIndex]) {
        this.$poolItems[this._selectedIndex].addClass('active');

        this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]);
      }
    }

    event.preventDefault();
  } else if (key == 'Enter') {
    var text;

    if (this._currentData[this._selectedIndex] === undefined) {
      text = this.$input.value;
    } else {
      text = this.getItemText(this._currentData[this._selectedIndex]);
      this.$input.value = text;
    }

    this._lastQuery = text;
    this.$dropdown.addStyle('display', 'none');
    this._lastValue = text;
    this.emit('change', {
      target: this,
      value: text
    }, this);
  }
};

AutoCompleteInput.prototype.focus = function () {
  if (this.disabled) return;
  this.$input.focus.apply(this.$input, arguments);
};

AutoCompleteInput.prototype.blur = function () {
  this.$input.blur.apply(this.$input, arguments);
};

AutoCompleteInput.prototype.select = function () {
  this.$input.select.apply(this.$input, arguments);
};

AutoCompleteInput.prototype.find = function () {
  var query = this.$input.value;
  if (query == this._lastQuery) return;
  this._lastQuery = query;
  var currentSession = ++this._sessionIndex;

  if (!query) {
    this.pushData([], currentSession, query);
    return;
  }

  if (this.disableCache) {
    var onReciveData = function (data) {
      cacheHolder.data = data;
      this.pushData(data, currentSession, query); //sessionIndex may be change
    }.bind(this);

    var result = this.queryItems(query);
    if (typeof result.then == 'function') result.then(onReciveData);else onReciveData(result);
  } else {
    if (this._cache[query]) {
      this._cache[query].sessionIndex = currentSession;

      if (!this._cache[query].pending) {
        var data = this._cache[query].data;
        this.pushData(data, currentSession);
      }
    } else {
      var cacheHolder = {
        pending: true,
        sessionIndex: currentSession
      };

      var onReciveData = function (data) {
        cacheHolder.data = data;
        cacheHolder.pending = false;
        this.pushData(data, cacheHolder.sessionIndex, query); //sessionIndex may be change
      }.bind(this);

      var result = this.queryItems(query);
      if (typeof result.then == 'function') result.then(onReciveData);else onReciveData(result);
      this._cache[query] = cacheHolder;
    }
  }
};

AutoCompleteInput.prototype.pushData = function (data, sessionIndex, query) {
  if (sessionIndex > this._updatedSession) {
    this._updatedSession = sessionIndex;
    this.$vscroller.clearChild();
    this._currentData = data;

    if (data && data.length > 0) {
      this.$dropdown.removeStyle('display');
    } else {
      this.$dropdown.addStyle('display', 'none');
    }

    var maxHeight = this.getComputedStyleValue('max-height');

    if (maxHeight == 'none' || !maxHeight) {
      maxHeight = 10000;
    } else {
      maxHeight = parseFloat(maxHeight.replace('px', ''));
    }

    var outBound = HTML5_Dom.traceOutBoundingClientRect(this);
    var bound = this.$input.getBoundingClientRect();
    var aTop = bound.top - outBound.top;
    var aBotom = outBound.bottom - bound.bottom;
    this.$dropdown.removeClass('top');

    if (aTop > aBotom) {
      maxHeight = Math.min(maxHeight, aTop - 10);
    } else {
      maxHeight = Math.min(maxHeight, aBotom - 10);
    }

    this.$vscroller.addStyle('max-height', maxHeight + 'px');
    this._selectedIndex = -1;
    data.reduce(function (sync, item, i, arr) {
      return sync.then(function () {
        if (this._updatedSession != sessionIndex) return;
        return new Promise(function (rs) {
          if (this._updatedSession != sessionIndex) return;
          var reuseItem = this.$poolItems.length > i ? this.$poolItems[i] : undefined;

          if (reuseItem) {
            reuseItem.removeClass('active');
          }

          var newView = this.getItemView(item, i, AutoCompleteInput_, AutoCompleteInput_$, query, reuseItem, this);
          newView.addClass('absol-autocomplete-input-item');
          newView._holderItem = item;
          newView._holderIndex = i;
          if (i == this._selectedIndex) newView.addClass('active');

          if (this.$poolItems.length <= i) {
            this.$poolItems.push(newView);
          } else {
            this.$poolItems[i] = newView;
          }

          this.$vscroller.addChild(newView);

          if (i == 0) {
            var estimateHeight = newView.getBoundingClientRect().height * arr.length;

            if (aTop > aBotom && estimateHeight > aBotom) {
              this.$dropdown.addClass('top');
            }
          }

          if (i >= 50 && i % 50 == 0) setTimeout(rs, 0);else rs();
        }.bind(this));
      }.bind(this));
    }.bind(this), Promise.resolve());
  }
};

AutoCompleteInput.prototype.getItemText = function (item) {
  if (this.adapter && this.adapter.getItemText) {
    return this.adapter.getItemText(item, this);
  } else if (typeof item == 'string') {
    return item;
  } else {
    throw Error('You need adapter.getItemText(item, mAutoCompleteInput) to handle your item text!');
  }
};

AutoCompleteInput.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent) {
  if (this.adapter && this.adapter.getItemView) {
    return this.adapter.getItemView(item, index, _, $, query, reuseItem, refParent, this);
  } else {
    var text = this.getItemText(item);

    if (reuseItem) {
      reuseItem.childNodes[0].innerHTML = text;
      return reuseItem;
    }

    return _({
      child: {
        tag: 'span',
        "class": 'absol-autocomplete-input-item-text',
        child: {
          text: text
        }
      }
    });
  }
};
/**
 * @param {String} query
 * @returns {Array}
 */


AutoCompleteInput.prototype.queryItems = function (query) {
  if (this.adapter && this.adapter.queryItems) {
    return this.adapter.queryItems(query, this);
  } else {
    throw new Error('Invalid adapter: queryItems(query, mAutoCompleteInput) not found!');
  }
};

AutoCompleteInput.prototype.clearCache = function (old) {
  if (typeof old != "number") old = 30;

  for (var key in this._cache) {
    var cacheHolder = this._cache[key];

    if (this._sessionIndex - cacheHolder.sessionIndex > old) {
      delete this._cache[key];
    }
  }
};

AutoCompleteInput.property = {};
AutoCompleteInput.property.adapter = {
  set: function set(value) {
    if (value instanceof Array) {
      if (value[0] == 'SearchStringArray') {
        this._adapter = new adapter_SearchStringArrayAdapter(value[1], value[2]);
      } else if (value[0] == 'SearchObjectArray') {
        this._adapter = new adapter_SearchObjectArrayAdapter(value[1], value[2]);
      } else {
        throw new Error("Unknown adapter type name");
      }
    } else {
      this._adapter = value;
    }

    if (this.adapter && this.adapter.onAttached) {
      this.adapter.onAttached(this);
    }
  },
  get: function get() {
    return this._adapter;
  }
};
AutoCompleteInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-disabled');
    } else {
      this.removeClass('absol-disabled');
    }
  },
  get: function get() {
    return this.containsClass('absol-disabled');
  }
};
AutoCompleteInput.attribute = {};
AutoCompleteInput.attribute.disabled = {
  set: function set(value) {
    if (value === true || value === 'true' || value === null) {
      this.disabled = true;
    } else {
      this.disabled = false;
    }
  },
  get: function get() {
    return this.disabled ? 'true' : 'false';
  },
  remove: function remove() {
    this.disabled = false;
  }
};
absol_acomp_ACore.install('AutoCompleteInput'.toLowerCase(), AutoCompleteInput);
/* harmony default export */ const js_AutoCompleteInput = (AutoCompleteInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/boardtable.css
var boardtable = __webpack_require__(8521);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Board.js



var Board_ = absol_acomp_ACore._;
var Board_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function Board() {}

Board.tag = "board";

Board.render = function () {
  return Board_({
    "class": 'as-board',
    extendEvent: ['sizechange', 'changeposition']
  });
};

Board.prototype.getParent = function () {
  var parent = this.parentElement;

  while (parent) {
    if (parent.classList.contains('ac-board-table')) return parent;
    parent = parent.parentElement;
  }

  return null;
};

absol_acomp_ACore.install(Board);
/* harmony default export */ const js_Board = (Board);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/utils.js


function insertTextAtCursor(text) {
  var sel, range;

  if (window.getSelection) {
    sel = window.getSelection();

    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      range.insertNode(document.createTextNode(text));
    }
  } else if (document.selection && document.selection.createRange) {
    document.selection.createRange().text = text;
  }
}
function contenteditableTextOnly(element, processText) {
  if (element.__contenteditableTextOnly__) return;
  element.__contenteditableTextOnly__ = true;
  element.addEventListener("paste", function (e) {
    e.preventDefault();

    if (e.clipboardData && e.clipboardData.getData) {
      var text = e.clipboardData.getData("text/plain");
      if (processText) text = processText(text);
      document.execCommand("insertHTML", false, text);
    } else if (window.clipboardData && window.clipboardData.getData) {
      var text = window.clipboardData.getData("Text");
      if (processText) text = processText(text);
      insertTextAtCursor(text);
    }
  });
}
function getSelectionText() {
  var text = "";
  var activeEl = document.activeElement;
  var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;

  if (activeElTagName == "textarea" || activeElTagName == "input" && /^(?:text|search|password|tel|url)$/i.test(activeEl.type) && typeof activeEl.selectionStart == "number") {
    text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
  } else if (window.getSelection) {
    text = window.getSelection().toString();
  }

  return text;
}
/***
 *
 * @param num
 * @param maxVal
 * @return {number}
 */

function positiveIntMod(num, maxVal) {
  if (maxVal <= 0) return 0;

  if (num >= 0 && num < maxVal) {
    return Math.floor(num);
  } else if (num === Infinity) {
    if (maxVal === Infinity) return Infinity;else return 0;
  } else if (num < 0) {
    return (num + Math.ceil(-num / maxVal) * maxVal) % maxVal;
  } else if (num >= maxVal) {
    return Math.floor(num) % maxVal;
  } else return 0;
}
function utils_measureText(text, font) {
  // re-use canvas object for better performance
  var canvas = utils_measureText.canvas || (utils_measureText.canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  if (font) context.font = font;
  var metrics = context.measureText(text);
  return metrics;
}
function utils_getCaretPosition(oField) {
  var iCaretPos = 0;

  if (document.selection) {
    oField.focus();
    var oSel = document.selection.createRange();
    oSel.moveStart('character', -oField.value.length);
    iCaretPos = oSel.text.length;
  } else if (oField.selectionStart || oField.selectionStart == '0') iCaretPos = oField.selectionDirection == 'backward' ? oField.selectionStart : oField.selectionEnd;

  return iCaretPos;
}
/**
 *
 * @param {AElement} elt
 */

function preventNotNumberInput(elt) {
  elt.addEventListener('keyup', function () {
    var lastValue = elt.tagName === "DIV" || elt.tagName === "SPAN" ? elt.innerHTML : elt.attributes.value;
    var cValue = parseFloat(this.value);

    if (this.value != lastValue) {
      elt.attributes.value = cValue;
      elt.emit('change', cValue, elt);
    }
  });
  elt.addEventListener("paste", function (e) {
    e.preventDefault();
    var text = "";

    if (e.clipboardData && e.clipboardData.getData) {
      text = e.clipboardData.getData("text/plain");
    } else if (window.clipboardData && window.clipboardData.getData) {
      text = window.clipboardData.getData("Text");
    }

    var matched = text.match(/[+-]?([0-9]*[.])?[0-9]+/);

    if (matched) {
      this.value = matched[0];
    }
  });
  elt.addEventListener('keydown', function (event) {
    var key = event.key;

    if (key && key.length == 1 && !event.ctrlKey && !event.altKey) {
      if (key.match(/[0-9.\-\+]/)) {
        if (key == '.' && this.value.indexOf('.') >= 0) event.preventDefault();
        if ((key == '+' || key == '-') && (this.value.indexOf('+') >= 0 || this.value.indexOf('-') >= 0 || utils_getCaretPosition(this) > 0)) event.preventDefault();
      } else event.preventDefault();
    }
  });
}
function buildCss(StyleSheet) {
  absol_acomp_ACore._({
    tag: 'style',
    props: {
      innerHTML: Object.keys(StyleSheet).map(function (key) {
        var style = StyleSheet[key];
        return key + ' {\n' + Object.keys(style).map(function (propName) {
          return propName + ': ' + style[propName] + ';';
        }).join('\n') + '}';
      }).join('\n')
    }
  }).addTo(document.head);
}
/***
 *
 * @param {"camera"|"microphone"|"camcorder"|{accept:("image/*"|"audio/*"|"video/*"|undefined), capture:boolean|undefined, multiple:boolean|undefined}|{}} props
 * @return {Promise<File[]>}
 */

function openFileDialog(props, unSafe) {
  return new Promise(function (resolve) {
    var input = absol_acomp_ACore._({
      tag: 'input',
      style: {
        display: 'none'
      },
      attr: {
        type: 'file'
      }
    }).addTo(document.body);

    props = props || {};

    if (props === 'camera') {
      props = {
        accept: 'image/*',
        capture: 'camera'
      };
    } else if (props === 'microphone') {
      props = {
        accept: 'audio/*',
        capture: "microphone"
      };
    } else if (props === 'camcorder') {
      props = {
        accept: 'video/*',
        capture: 'camcorder'
      };
    }

    if (props.accept) {
      if (props.accept instanceof Array) input.attr('accept', props.accept.join(','));else input.attr('accept', props.accept);
    } else {
      input.attr('accept', null);
    }

    if (props.capture) {
      input.attr('capture', props.capture);
    }

    if (props.multiple) {
      input.attr('multiple', 'true');
    } else {
      input.attr('multiple');
    }

    input.value = null;

    function focusHandler() {
      setTimeout(function () {
        window.removeEventListener('focus', focusHandler);

        if (unSafe) {
          input.off('change', changeHandler);
          input.remove();
          resolve([]);
        }
      }, 1000);
    }

    function changeHandler() {
      input.off('change', changeHandler);
      window.removeEventListener('focus', focusHandler);
      var files = Array.prototype.slice.call(input.files);
      resolve(files);
      input.remove();
    }

    input.on('change', changeHandler);
    input.click();
    setTimeout(function () {
      window.addEventListener('focus', focusHandler);
    }, 10);
  });
}
var charWidth = {
  "A": 9.337890625,
  "Á": 9.337890625,
  "À": 9.337890625,
  "Ả": 9.337890625,
  "Ã": 9.337890625,
  "Ạ": 9.337890625,
  "a": 7.7861328125,
  "á": 7.7861328125,
  "à": 7.7861328125,
  "ả": 7.7861328125,
  "ã": 7.7861328125,
  "ạ": 7.7861328125,
  "Ă": 9.337890625,
  "Ắ": 9.337890625,
  "Ằ": 9.337890625,
  "Ẳ": 9.337890625,
  "Ẵ": 9.337890625,
  "Ặ": 9.337890625,
  "ă": 7.7861328125,
  "ắ": 7.7861328125,
  "ằ": 7.7861328125,
  "ẳ": 7.7861328125,
  "ẵ": 7.7861328125,
  "ặ": 7.7861328125,
  "Â": 9.337890625,
  "Ấ": 9.337890625,
  "Ầ": 9.337890625,
  "Ẩ": 9.337890625,
  "Ẫ": 9.337890625,
  "Ậ": 9.337890625,
  "â": 7.7861328125,
  "ấ": 7.7861328125,
  "ầ": 7.7861328125,
  "ẩ": 7.7861328125,
  "ẫ": 7.7861328125,
  "ậ": 7.7861328125,
  "B": 9.337890625,
  "b": 7.7861328125,
  "C": 10.1103515625,
  "c": 7,
  "D": 10.1103515625,
  "d": 7.7861328125,
  "Đ": 10.1103515625,
  "đ": 7.7861328125,
  "E": 9.337890625,
  "É": 9.337890625,
  "È": 9.337890625,
  "Ẻ": 9.337890625,
  "Ẽ": 9.337890625,
  "Ẹ": 9.337890625,
  "e": 7.7861328125,
  "é": 7.7861328125,
  "è": 7.7861328125,
  "ẻ": 7.7861328125,
  "ẽ": 7.7861328125,
  "ẹ": 7.7861328125,
  "Ê": 9.337890625,
  "Ế": 9.337890625,
  "Ề": 9.337890625,
  "Ể": 9.337890625,
  "Ễ": 9.337890625,
  "Ệ": 9.337890625,
  "ê": 7.7861328125,
  "ế": 7.7861328125,
  "ề": 7.7861328125,
  "ể": 7.7861328125,
  "ễ": 7.7861328125,
  "ệ": 7.7861328125,
  "G": 10.8896484375,
  "g": 7.7861328125,
  "H": 10.1103515625,
  "h": 7.7861328125,
  "I": 3.8896484375,
  "Í": 3.8896484375,
  "Ì": 3.8896484375,
  "Ỉ": 3.8896484375,
  "Ĩ": 3.8896484375,
  "Ị": 3.8896484375,
  "i": 3.1103515625,
  "í": 3.1103515625,
  "ì": 3.1103515625,
  "ỉ": 3.1103515625,
  "ĩ": 3.1103515625,
  "ị": 3.1103515625,
  "K": 9.337890625,
  "k": 7,
  "L": 7.7861328125,
  "l": 3.1103515625,
  "M": 11.662109375,
  "m": 11.662109375,
  "N": 10.1103515625,
  "n": 7.7861328125,
  "O": 10.8896484375,
  "Ó": 10.8896484375,
  "Ò": 10.8896484375,
  "Ỏ": 10.8896484375,
  "Õ": 10.8896484375,
  "Ọ": 10.8896484375,
  "o": 7.7861328125,
  "ó": 7.7861328125,
  "ò": 7.7861328125,
  "ỏ": 7.7861328125,
  "õ": 7.7861328125,
  "ọ": 7.7861328125,
  "Ô": 10.8896484375,
  "Ố": 10.8896484375,
  "Ồ": 10.8896484375,
  "Ổ": 10.8896484375,
  "Ỗ": 10.8896484375,
  "Ộ": 10.8896484375,
  "ô": 7.7861328125,
  "ố": 7.7861328125,
  "ồ": 7.7861328125,
  "ổ": 7.7861328125,
  "ỗ": 7.7861328125,
  "ộ": 7.7861328125,
  "Ơ": 12.00390625,
  "Ớ": 12.00390625,
  "Ờ": 12.00390625,
  "Ở": 12.00390625,
  "Ỡ": 12.00390625,
  "Ợ": 12.00390625,
  "ơ": 9.1806640625,
  "ớ": 9.1806640625,
  "ờ": 9.1806640625,
  "ở": 9.1806640625,
  "ỡ": 9.1806640625,
  "ợ": 9.1806640625,
  "P": 9.337890625,
  "p": 7.7861328125,
  "Q": 10.8896484375,
  "q": 7.7861328125,
  "R": 10.1103515625,
  "r": 4.662109375,
  "S": 9.337890625,
  "s": 7,
  "T": 8.5517578125,
  "t": 3.8896484375,
  "U": 10.1103515625,
  "Ú": 10.1103515625,
  "Ù": 10.1103515625,
  "Ủ": 10.1103515625,
  "Ũ": 10.1103515625,
  "Ụ": 10.1103515625,
  "u": 7.7861328125,
  "ú": 7.7861328125,
  "ù": 7.7861328125,
  "ủ": 7.7861328125,
  "ũ": 7.7861328125,
  "ụ": 7.7861328125,
  "Ư": 11.9560546875,
  "Ứ": 11.9560546875,
  "Ừ": 11.9560546875,
  "Ử": 11.9560546875,
  "Ữ": 11.9560546875,
  "Ự": 11.9560546875,
  "ư": 9.3720703125,
  "ứ": 9.3720703125,
  "ừ": 9.3720703125,
  "ử": 9.3720703125,
  "ữ": 9.3720703125,
  "ự": 9.3720703125,
  "V": 9.337890625,
  "v": 7,
  "X": 9.337890625,
  "x": 7,
  "Y": 9.337890625,
  "Ý": 9.337890625,
  "Ỳ": 9.337890625,
  "Ỷ": 9.337890625,
  "Ỹ": 9.337890625,
  "Ỵ": 9.337890625,
  "y": 7,
  "ý": 7,
  "ỳ": 7,
  "ỷ": 7,
  "ỹ": 7,
  "ỵ": 7,
  " ": 3.8896484375
};
function utils_estimateWidth14(text) {
  // return absol.text.measureText(text, '14px arial').width
  var l = 0;

  for (var j = 0; j < text.length; ++j) {
    l += charWidth[text.charAt(j)] || 9.337890625;
  }

  return l;
}
/***
 *
 * @param {number} v
 * @returns {number}
 */

function absCeil(v) {
  var a = Math.ceil(Math.abs(v));
  return v < 0 ? -a : a;
}
/***
 *
 * @param {number} x
 * @param {number} l
 * @returns {String}
 */

function zeroPadding(x, l) {
  var res = Math.abs(x) + '';

  while (res.length < l) {
    res = '0' + res;
  }

  if (x < 0) res = '-' + res;
  return res;
}
var propertyFilter = ["$trigger", "$content", "_isShow", "defineEvent", "isSupportedEvent", "emit", "fire", "eventEmittorOnWithTime", "on", "once", "off", "init", "eventHandler", "super", "defineAttribute", "defineAttributes", "attr", "addStyle", "removeStyle", "addChild", "addTo", "selfRemove", "selfReplace", "clearChild", "containsClass", "addClass", "removeClass", "getComputedStyleValue", "getFontSize", "findChildAfter", "findChildBefore", "addChildBefore", "addChildAfter", "getBoundingRecursiveRect", "isDescendantOf", "getCSSRules", "afterAttached", "afterDisplayed", "_azar_extendEvents", "__azar_force", "_azar_extendAttributes", "_azar_extendTags", "findAvailablePosition", "$container", "autoFixParrentSize", "sync", "$dropper", "$vmenu", "$button", "$text", "$key", "$arrow", "$iconCtn", "_textMarginRight", "_tabIndex", '$icon', '_icon', '$textNode', '$primaryBtn', '$extendBtn', '_menuHolder', '_items'].reduce(function (ac, cr) {
  ac[cr] = true;
  return ac;
}, {});
/**
 * This is a solution for menu, before a better one.
 * @param obj
 * @returns {{}}
 */

function cleanMenuItemProperty(obj) {
  var res = {};
  var keys = Object.keys(obj);
  var key;

  for (var i = 0; i < keys.length; ++i) {
    key = keys[i];

    if (!propertyFilter[key]) {
      res[key] = obj[key];
    }
  }

  res.text = obj.text;

  if (obj.icon) {
    res.icon = obj.icon;
  }

  if (obj.items) {
    res.items = obj.items;
  }

  return res;
}
/***
 *
 * @param {AElement} e1
 * @param {AElement} e2
 */

function swapElt(e1, e2) {
  var temp = _('div');

  e1.parentElement.replaceChild(temp, e1);
  e2.parentElement.replaceChild(e1, e2);
  temp.parentElement.replaceChild(e2, temp);
}
/**
 *
 * @param {HTMLElement} elt
 */

function vScrollIntoView(elt) {
  var parent = elt.parentElement;
  var overflowStyle;

  while (parent) {
    overflowStyle = window.getComputedStyle(parent)['overflow'];

    if ((overflowStyle === 'auto scroll' || overflowStyle === 'auto' || overflowStyle === 'hidden auto' || overflowStyle === 'scroll' || parent.tagName === 'HTML') && parent.clientHeight < parent.scrollHeight) {
      break;
    }

    parent = parent.parentElement;
  }

  if (!parent || parent === document || parent.tagName == "HTML" || parent.tagName == "html") {
    elt.scrollIntoView(true);
    return;
  }

  var eBound = elt.getBoundingClientRect();
  var viewportBound = parent.getBoundingClientRect();
  var currentScrollTop = parent.scrollTop;
  var newScrollTop = currentScrollTop;

  if (eBound.bottom > viewportBound.bottom) {
    newScrollTop = currentScrollTop + (eBound.bottom - viewportBound.bottom);
  }

  if (eBound.top < viewportBound.top) {
    newScrollTop = currentScrollTop - (viewportBound.top - eBound.top);
  }

  if (newScrollTop != currentScrollTop) {
    parent.scrollTop = newScrollTop;
  }
}
function fileSize2Text(s) {
  if (typeof s !== "number" || isNaN(s)) return '';
  var units = ['B', 'KB', 'MB', 'GB', 'TB'];
  var b = 1;

  for (var i = 0; i < units.length; ++i) {
    if (s <= b * 1024) {
      return Math.floor(s / b * 100) / 100 + units[i];
    }

    b *= 1024;
  }

  return Math.floor(s / b * 10) / 100 + 'PB';
}
function isDateTimeFormatToken(text) {
  return ['d', 'dd', 'M', 'MM', 'y', 'yyyy', 'h', 'hh', 'H', 'HH', 'm', 'mm', 'a'].indexOf(text) >= 0;
}
function isRealNumber(value) {
  return isFinite(value) && typeof value === "number";
}
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/hanger.css
var hanger = __webpack_require__(6026);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Hanger.js






var Hanger_ = absol_acomp_ACore._;
var Hanger_$ = absol_acomp_ACore.$;
/****
 * @extends AElement
 * @constructor
 */

function Hanger() {
  this.addClass('as-hanger');
  this.defineEvent(['predrag', 'dragstart', 'drag', 'dragend']);
  this._hangOn = 0;
  this._hangerPointerData = null;
  this.on2({
    mousedown: this.eventHandler.hangerPointerDown,
    touchstart: this.eventHandler.hangerPointerDown
  });
  this._touchEvents = {
    touchend: this.eventHandler.hangerPointerFinish,
    touchcancel: this.eventHandler.hangerPointerFinish,
    touchmove: this.eventHandler.hangerPointerMove
  };
  this._mouseEvents = {
    mouseup: this.eventHandler.hangerPointerFinish,
    mouseleave: this.eventHandler.hangerPointerFinish,
    mousemove: this.eventHandler.hangerPointerMove
  };
}

Hanger.tag = 'hanger';

Hanger.render = function () {
  return Hanger_('div');
};

Hanger.prototype.on2 = function () {
  if (arguments.length == 1) {
    for (var name in arguments[0]) {
      Hanger.prototype.on2.call(this, name, arguments[0][name]);
    }
  } else if (arguments.length == 2) {
    this.addEventListener(arguments[0], arguments[1], Detector_BrowserDetector.supportPassiveEvent ? {
      passive: false
    } : true);
  }
};

Hanger.prototype.off2 = function () {
  if (arguments.length == 1) {
    for (var name in arguments[0]) {
      Hanger.prototype.off2.call(this, name, arguments[0][name]);
    }
  } else if (arguments.length == 2) {
    this.removeEventListener(arguments[0], arguments[1], Detector_BrowserDetector.supportPassiveEvent ? {
      passive: false
    } : true);
  }
};

Hanger.property = {};
/**
 * @type {Hanger}
 */

Hanger.property.hangOn = {
  set: function set(value) {
    if (!(value > 0)) value = 0;
    this._hangOn = value;
  },
  get: function get() {
    return this._hangOn;
  }
};
/**
 * @type {Hanger}
 */

Hanger.eventHandler = {};

Hanger.eventHandler.hangerPointerDown = function (event) {
  if (this._hangerPointerData) return;
  var bound = this.getBoundingClientRect();
  var startingPoint;
  var isTouch = event.type === 'touchstart';
  var pointerIdent = -1;
  var target;

  if (isTouch) {
    var touch = event.changedTouches[0];
    target = touch.target;
    pointerIdent = touch.identifier;
    startingPoint = new Math_Vec2(touch.clientX, touch.clientY);
  } else {
    startingPoint = new Math_Vec2(event.clientX, event.clientY);
    target = event.target;
  }

  var offsetVec = startingPoint.sub(new Math_Vec2(bound.left, bound.top));
  this._hangerPointerData = {
    state: 0,
    isTouch: isTouch,
    bound: bound,
    startingPoint: startingPoint,
    offsetVec: offsetVec,
    pointerIdent: pointerIdent,
    target: target
  };
  var preDragEvent = {
    type: 'predrag',
    originEvent: event,
    isTouch: isTouch,
    bound: bound,
    startingPoint: startingPoint,
    currentPoint: startingPoint,
    offsetVec: offsetVec,
    pointerIdent: pointerIdent,
    canceled: false,
    cancel: function cancel() {
      this.canceled = true;
    },
    clientX: startingPoint.x,
    clientY: startingPoint.y,
    target: target,
    preventDefault: function preventDefault() {
      event.preventDefault();
    }
  };
  this.emit('predrag', preDragEvent, this);

  if (preDragEvent.canceled) {
    this._hangerPointerData = null;
    return;
  }

  ;
  if (isTouch) this.on2.call(document.body, this._touchEvents);else this.on2.call(document.body, this._mouseEvents);
};

Hanger.eventHandler.hangerPointerMove = function (event) {
  var pointerData = this._hangerPointerData;
  var isTouch = pointerData.isTouch;
  var pointerIdent = -2;
  var currentPoint;

  if (isTouch) {
    var touch = findChangedTouchByIdent(event, pointerData.pointerIdent);

    if (touch) {
      pointerIdent = touch.identifier;
      currentPoint = new Math_Vec2(touch.clientX, touch.clientY);
    }
  } else {
    currentPoint = new Math_Vec2(event.clientX, event.clientY);
    pointerIdent = -1;
  }

  if (pointerIdent != pointerData.pointerIdent) return;
  pointerData.currentPoint = currentPoint;

  if (pointerData.state == 0) {
    var distance = currentPoint.sub(pointerData.startingPoint).abs();

    if (distance >= this._hangOn) {
      var dragStartEvent = {
        type: 'dragstart',
        originEvent: event,
        isTouch: isTouch,
        bound: pointerData.bound,
        startingPoint: pointerData.startingPoint,
        offsetVec: pointerData.offsetVec,
        pointerIdent: pointerIdent,
        currentPoint: currentPoint,
        target: pointerData.target,
        clientX: currentPoint.x,
        clientY: currentPoint.y,
        preventDefault: function preventDefault() {
          event.preventDefault();
        }
      };
      pointerData.state = 1;
      this.emit('dragstart', dragStartEvent, this);
    }
  }

  if (pointerData.state === 1) {
    var dragEvent = {
      type: 'drag',
      originEvent: event,
      isTouch: isTouch,
      bound: pointerData.bound,
      startingPoint: pointerData.startingPoint,
      offsetVec: pointerData.offsetVec,
      pointerIdent: pointerIdent,
      currentPoint: currentPoint,
      target: pointerData.target,
      clientX: currentPoint.x,
      clientY: currentPoint.y,
      preventDefault: function preventDefault() {
        event.preventDefault();
      }
    };
    this.emit('drag', dragEvent, this);
  }
};

Hanger.eventHandler.hangerPointerFinish = function (event) {
  var pointerData = this._hangerPointerData;
  var isTouch = event.type === 'touchend';
  if (pointerData.isTouch !== isTouch) return;
  var pointerIdent = -2;
  var currentPoint;

  if (isTouch) {
    var touch = findChangedTouchByIdent(event, pointerData.pointerIdent);

    if (touch) {
      pointerIdent = touch.identifier;
      currentPoint = new Math_Vec2(touch.clientX, touch.clientY);
    }
  } else {
    currentPoint = new Math_Vec2(event.clientX, event.clientY);
    pointerIdent = -1;
  }

  if (pointerIdent !== pointerData.pointerIdent) return;

  if (pointerData.state === 1) {
    var dragEndEvent = {
      type: 'dragend',
      originEvent: event,
      isTouch: isTouch,
      bound: pointerData.bound,
      startingPoint: pointerData.startingPoint,
      offsetVec: pointerData.offsetVec,
      pointerIdent: pointerIdent,
      currentPoint: currentPoint,
      target: pointerData.target,
      clientX: currentPoint.x,
      clientY: currentPoint.y,
      preventDefault: function preventDefault() {
        event.preventDefault();
      }
    };
    this.emit('dragend', dragEndEvent, this);
  }

  this._hangerPointerData = null;
  if (isTouch) this.off2.call(document.body, this._touchEvents);else this.off2.call(document.body, this._mouseEvents);
};

absol_acomp_ACore.install(Hanger);
/* harmony default export */ const js_Hanger = (Hanger);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/BoardTable.js











var BoardTable_ = absol_acomp_ACore._;
var BoardTable_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function BoardTable() {
  var events = {
    touchstart: this.eventHandler.mousedown,
    mousedown: this.eventHandler.mousedown
  };
  js_Hanger.prototype.on2.call(this, events);
  this._childHolders = [];
  this._dragEventData = null;
  this._friends = [];
  this._longPressEventData = null;
}

BoardTable.tag = 'boardtable';

BoardTable.render = function () {
  return BoardTable_({
    "class": 'as-board-table',
    extendEvent: ['sizechange', 'orderchange', 'itemleave', 'itementer', 'dragitemstart', 'dragitemend']
  });
};

var EFFECT_ZONE_CLASS_NAME = 'as-board-table-effect-zone';
var DRAG_ZONE_CLASS_NAME = 'as-board-drag-zone';
var FREE_ZONE_CLASS_NAME = 'as-board-free-zone';
BoardTable.EFFECT_ZONE_CLASS_NAME = EFFECT_ZONE_CLASS_NAME;
BoardTable.DRAG_ZONE_CLASS_NAME = DRAG_ZONE_CLASS_NAME;
BoardTable.FREE_ZONE_CLASS_NAME = FREE_ZONE_CLASS_NAME;
BoardTable.prototype.$preventContext = BoardTable_({
  tag: 'textarea',
  "class": 'as-board-table-prevent-context',
  props: {
    readOnly: true
  }
});
BoardTable.prototype.maxScrollSpeed = 300;

BoardTable.prototype.findDomChildBefore = function (elt) {
  var nodes = this.childNodes;

  for (var i = 0; i < nodes.length; ++i) {
    if (nodes[i] == elt) return nodes[i - 1];
  }

  return null;
};

BoardTable.prototype.findDomChildAfter = function (elt) {
  var nodes = this.childNodes;

  for (var i = 0; i < nodes.length; ++i) {
    if (nodes[i] == elt) return nodes[i + 1];
  }

  return null;
};

BoardTable.prototype.addChild = function (elt) {
  if (elt.classList.contains('as-board')) {
    elt.selfRemove();
    var atElt;

    if (this._childHolders.length > 0) {
      atElt = this.findDomChildAfter(this._childHolders[this._childHolders.length - 1].elt);

      if (atElt) {
        if (atElt != -1) this.insertBefore(elt, atElt);else throw new Error("Violation data!");
      } else {
        this.appendChild(elt);
      }
    } else {
      this.appendChild(elt);
    }

    var holder = {
      elt: elt
    };
    elt.on('sizechange', holder.onsizechange);

    this._childHolders.push(holder);
  } else {
    this.appendChild(elt);
  }

  return this;
};

BoardTable.prototype.removeChild = function (elt) {
  var holderIndex = this.findChildHolderIndex(elt);

  if (holderIndex >= 0) {
    var holder = this._childHolders[holderIndex];
    holder.elt.off('sizechange', holder.onsizechange);

    this._childHolders.splice(holderIndex, 1);

    holder.elt.remove();
  } else {
    this["super"](elt);
  }
};

BoardTable.prototype.findChildBefore = function (elt) {
  var holderIndex = this.findChildHolderIndex(elt);
  if (holderIndex < 0) return holderIndex;
  if (holderIndex < 1) return null;
  return this._childHolders[holderIndex - 1];
};

BoardTable.prototype.findChildAfter = function (elt) {
  var holderIndex = this.findChildHolderIndex(elt);
  if (holderIndex < 0) return holderIndex;
  if (holderIndex <= this._childHolders.length) return null;
  return this._childHolders[holderIndex + 1];
};

BoardTable.prototype.addChildBefore = function (elt, at) {
  elt.selfRemove();
  var atIndex = this.findChildHolderIndex(at);

  if (elt.classList.contains('as-board')) {
    if (atIndex < 0) {
      if (this._childHolders.length > 0) {
        if (this.findDomChildAfter(this._childHolders[this._childHolders.length - 1].elt) == at) {
          atIndex = this._childHolders.length;
        } else {
          throw new Error("Invalid position, you must insert board next to other board!");
        }
      }
    }

    this.insertBefore(elt, at);
    var holder = {
      elt: elt
    };

    this._childHolders.splice(atIndex, 0, holder);
  } else {
    if (atIndex > 0) {
      throw new Error("Invalid position, you can not insert othert type between two board!");
    } else {
      this.insertBefore(elt, at);
    }
  }

  return this;
};

BoardTable.prototype.addChildAfter = function (elt, at) {
  elt.selfRemove();
  var atIndex = this.findChildHolderIndex(at);
  var afterAt = this.findDomChildAfter(at);

  if (elt.classList.contains('as-board')) {
    if (atIndex < 0) {
      if (this._childHolders.length > 0) {
        if (this.findDomChildBefore(this._childHolders[0].elt) == at) {
          atIndex = -1;
        } else throw new Error("Invalid position,  you must insert board next to other board!");
      }
    }

    var holder = {
      elt: elt
    };

    if (!afterAt) {
      this.appendChild(elt);
    } else {
      this.insertBefore(elt, afterAt);
    }

    this._childHolders.splice(atIndex + 1, 0, holder);
  } else {
    if (this._childHolders.length > 1 && atIndex >= 0 && atIndex + 1 < this._childHolders.length) {
      throw new Error("Invalid position, you can not insert othert type between two board!");
    } else {
      if (!afterAt) {
        this.appendChild(elt);
      } else {
        this.insertBefore(elt, afterAt);
      }
    }
  }

  return this;
};

BoardTable.prototype.clearChild = function () {
  this._childHolders = [];
  return Element.prototype.clearChild.call(this);
};

BoardTable.prototype.findChildHolder = function (elt) {
  return this._childHolders[this.findChildHolderIndex(elt)];
};

BoardTable.prototype.findChildHolderIndex = function (elt) {
  for (var i = 0; i < this._childHolders.length; ++i) {
    if (this._childHolders[i].elt == elt) return i;
  }

  return -1;
};

BoardTable.prototype.getEffectZone = function () {
  var ez = this;

  while (ez) {
    if (ez.classList.contains(EFFECT_ZONE_CLASS_NAME)) {
      return ez;
    }

    ez = ez.parentElement;
  }

  return this;
};

BoardTable.prototype._findDragZone = function (elt) {
  var res = null;

  while (elt != this && elt) {
    if (elt.classList.contains('as-board-table')) return null; //maybe in other

    if (!res && elt.classList.contains(DRAG_ZONE_CLASS_NAME)) {
      res = elt;
    }

    if (!res && elt.classList.contains(FREE_ZONE_CLASS_NAME)) return null; // do not drag

    elt = elt.parentElement;
  }

  return res;
};

BoardTable.prototype._findBoard = function (elt) {
  while (elt != this && elt) {
    if (elt.classList.contains('as-board')) return elt;
    elt = elt.parentElement;
  }

  return null;
};

BoardTable.prototype.getAllFriends = function () {
  var thisBT = this;
  var res = [];
  var friendQR;

  for (var i = 0; i < this._friends.length; ++i) {
    friendQR = this._friends[i];

    if (friendQR != this && friendQR && friendQR.classList && friendQR.classList.contains('as-board-table')) {
      res.push(friendQR);
    } else if (typeof friendQR == 'string') {
      // query
      BoardTable_$(friendQR, false, function (elt) {
        if (thisBT != elt && elt.classList && elt.classList.contains('as-board-table')) {
          res.push(elt);
        }

        return false;
      });
    }
  }

  return res;
};

BoardTable.prototype._findHoverBoardIndex = function (clientX, clientY, excludes) {
  var cli = new Math_Vec2(clientX, clientY);
  var bound;

  for (var i = 0; i < this._childHolders.length; ++i) {
    // holder =
    if (excludes && excludes.indexOf(this._childHolders[i].elt) >= 0) continue;
    bound = Math_Rectangle.fromClientRect(this._childHolders[i].elt.getBoundingClientRect());
    if (bound.containsPoint(cli)) return i;
  }

  return -1;
};
/**
 * @type {BoardTable}
 */


BoardTable.eventHandler = {};

BoardTable.eventHandler.mousedown = function (event) {
  if (this._dragEventData) return;
  var mousePos;
  var pointerIdent = -1;
  var target;
  var isTouch = event.type === 'touchstart';

  if (isTouch) {
    var touch = event.changedTouches[0];
    target = touch.target;
    pointerIdent = touch.identifier;
    mousePos = new Math_Vec2(touch.clientX, touch.clientY);
  } else {
    mousePos = new Math_Vec2(event.clientX, event.clientY);
    target = event.target;
  }

  var dragzone = this._findDragZone(target);

  if (dragzone) {
    var boardElt = this._findBoard(dragzone);

    var holderIndex = this.findChildHolderIndex(boardElt);
    if (holderIndex < 0) return; // can not move

    var cBound = boardElt.getBoundingClientRect();
    var mouseBoardOffset = mousePos.sub(new Math_Vec2(cBound.left, cBound.top));
    this._dragEventData = {
      boardElt: boardElt,
      state: 'WAIT',
      mouseStartPos: mousePos,
      mousePos: mousePos,
      mouseBoardOffset: mouseBoardOffset,
      holderIndex: holderIndex,
      boardBound: cBound,
      isTouch: isTouch,
      pointerIdent: pointerIdent
    };
    var cEvent = HTML5_EventEmitter.copyEvent(event);

    if (isTouch) {
      js_Hanger.prototype.on2.call(document.body, {
        touchend: this.eventHandler.touchFinishBeforeReadyDrag,
        touchcancel: this.eventHandler.touchFinishBeforeReadyDrag,
        touchmove: this.eventHandler.touchMoveBeforeReadyDrag
      });
      this.$preventContext.off('contextmenu', this.eventHandler.contextMenu); //event maybe not remove because of double click

      this.$preventContext.on('contextmenu', this.eventHandler.contextMenu);
      var thisBT = this;
      this._dragEventData._longPressTimeout = setTimeout(function () {
        thisBT._longPressEventData = -1;
        thisBT.$preventContext.addStyle({
          '--x': mousePos.x + 'px',
          '--y': mousePos.y + 'px'
        }).addTo(document.body);
        thisBT.eventHandler.readyDrag(cEvent);
      }, 400);
    } else {
      this.eventHandler.readyDrag(event);
    }
  }
};

BoardTable.eventHandler.touchFinishBeforeReadyDrag = function (event) {
  var thisBT = this;
  var dragEventData = this._dragEventData;
  if (!dragEventData) return;
  js_Hanger.prototype.off2.call(document.body, {
    touchend: this.eventHandler.touchFinishBeforeReadyDrag,
    touchcancel: this.eventHandler.touchFinishBeforeReadyDrag,
    touchmove: this.eventHandler.touchMoveBeforeReadyDrag
  });

  if (this._dragEventData._longPressTimeout > 0) {
    clearTimeout(this._dragEventData._longPressTimeout);
  }

  if (dragEventData.state === 'WAIT') {
    this._dragEventData = null; // canceled
  } else {
    setTimeout(function () {
      thisBT.$preventContext.off('contextmenu', thisBT.eventHandler.contextMenu);
      thisBT.$preventContext.remove();
    }, 60);
  }
};

BoardTable.eventHandler.contextMenu = function (event) {
  event.preventDefault();
  this.$preventContext.off('contextmenu', this.eventHandler.contextMenu);
  this.$preventContext.remove();
  this.eventHandler.touchFinishBeforeReadyDrag(event);
};

BoardTable.eventHandler.touchMoveBeforeReadyDrag = function (event) {
  var dragEventData = this._dragEventData;
  var touch = findChangedTouchByIdent(event, dragEventData.pointerIdent);
  if (!touch) return;
  var mousePos = new Math_Vec2(touch.clientX, touch.clientY);

  if (dragEventData.state === 'WAIT') {
    var dv = mousePos.sub(dragEventData.mouseStartPos);

    if (dv.abs() > 8) {
      this.eventHandler.touchFinishBeforeReadyDrag(event);
      this._dragEventData = null; // cancel
    }
  } else {
    this.$preventContext.addStyle({
      '--x': mousePos.x + 'px',
      '--y': mousePos.y + 'px'
    });
  }
};

BoardTable.eventHandler.readyDrag = function (event) {
  var dragEventData = this._dragEventData;
  dragEventData.state = "PRE_DRAG";
  var bodyEvents = {};

  if (dragEventData.isTouch) {
    bodyEvents.touchmove = this.eventHandler.mousemove;
    bodyEvents.touchcancel = this.eventHandler.mousefinish;
    bodyEvents.touchend = this.eventHandler.mousefinish;
  } else {
    bodyEvents.mousemove = this.eventHandler.mousemove;
    bodyEvents.mouseup = this.eventHandler.mousefinish;
    bodyEvents.mouseleave = this.eventHandler.mousefinish;
  }

  js_Hanger.prototype.on2.call(document.body, bodyEvents);

  if (dragEventData.isTouch) {
    this.eventHandler.mousemove(event);
  }
};

BoardTable.eventHandler.mousemovePredrag = function (event) {
  var dragEventData = this._dragEventData;
  var mousePos = dragEventData.mousePos;
  var thisBT = this;
  event.preventDefault();
  var cBound = dragEventData.boardElt.getBoundingClientRect();

  if (mousePos.sub(dragEventData.mouseStartPos).abs() > 8 || dragEventData.isTouch) {
    dragEventData.placeHolderElt = BoardTable_$(dragEventData.boardElt.cloneNode(false)).addClass('as-board-place-holder').addStyle({
      width: cBound.width + 'px',
      height: cBound.height + 'px'
    });
    dragEventData.friendHolders = this.getAllFriends().concat([this]).map(function (elt) {
      //include itself
      var effectZone = elt.getEffectZone();
      var res = {
        elt: elt,
        effectZone: effectZone
      };

      if (!dragEventData.isTouch) {
        var enterEvent = thisBT.eventHandler.enterFriendEffectZone.bind(thisBT, elt);
        js_Hanger.prototype.on2.call(effectZone, dragEventData.isTouch ? 'touchmove' : 'mouseenter', enterEvent);
        res.enterEvent = enterEvent;
      } else {// use move event to detect
      }

      return res;
    });
    dragEventData.inEffectZoneOf = this;
    dragEventData.cardStyle = {
      width: dragEventData.boardElt.style.width,
      height: dragEventData.boardElt.style.height
    };
    dragEventData.boardElt.addStyle({
      width: cBound.width + 'px',
      height: cBound.height + 'px'
    });
    this.insertBefore(dragEventData.placeHolderElt, dragEventData.boardElt);
    dragEventData.state = "DRAG";
    BoardTable_$(document.body).addClass('as-has-board-table-drag');
    dragEventData.boardElt.addClass('as-board-moving');
    dragEventData.boardAt = dragEventData.holderIndex;
    dragEventData.boardIn = thisBT;
    this.emit('dragitemstart', {
      type: 'dragitemstart',
      target: this,
      boardElt: this._dragEventData.boardElt
    }, this);
  }
};

BoardTable.eventHandler.mousemoveDragInSelf = function (event) {
  var dragEventData = this._dragEventData;
  var mousePos = dragEventData.mousePos;

  if (this._childHolders.length < 2) {
    if (dragEventData.boardIn != this) {
      this.insertBefore(dragEventData.placeHolderElt, this._childHolders[0].elt);
      dragEventData.boardIn = this;
      dragEventData.boardAt = 0;
    }
  } else {
    // bản thân chỉ có 1, hoặc nhiều hơn
    var i = this._findHoverBoardIndex(mousePos.x, mousePos.y, [dragEventData.boardElt]);

    if (i >= 0) {
      if (dragEventData.boardIn != this) {
        dragEventData.boardIn = this;
      }

      var viewIndex;

      if (i < dragEventData.holderIndex && i < dragEventData.boardAt || i > dragEventData.holderIndex && i > dragEventData.boardAt || dragEventData.holderIndex == dragEventData.boardAt) {
        viewIndex = i;
      } else {
        if (dragEventData.holderIndex > dragEventData.boardAt) {
          viewIndex = i + 1;
        } else {
          viewIndex = i - 1;
        }
      }

      var fbound = this._childHolders[i].elt.getBoundingClientRect();

      var displayStyple = this._childHolders[i].elt.getComputedStyleValue('display');

      if (mousePos.x > fbound.left && mousePos.x < fbound.right && mousePos.y > fbound.top && mousePos.y < fbound.bottom) {
        if (displayStyple.startsWith('inline')) {
          if (dragEventData.boardBound.width < fbound.width) {
            if (dragEventData.boardAt > viewIndex && mousePos.x > fbound.left + dragEventData.boardBound.width) {
              viewIndex += 1;
            } else if (dragEventData.boardAt < viewIndex && mousePos.x < fbound.left + fbound.width - dragEventData.boardBound.width) {
              viewIndex -= 1;
            }
          }
        } else {
          if (dragEventData.boardBound.height < fbound.height) {
            if (dragEventData.boardAt > viewIndex && mousePos.y >= fbound.top + dragEventData.boardBound.height) {
              viewIndex += 1;
            } else if (dragEventData.boardAt < viewIndex && mousePos.y <= fbound.top + fbound.height - dragEventData.boardBound.height) {
              viewIndex -= 1;
            }
          }
        }

        viewIndex = Math.max(0, Math.min(this._childHolders.length, viewIndex));

        if (viewIndex != dragEventData.boardAt) {
          dragEventData.boardAt = viewIndex;

          if (dragEventData.holderIndex >= viewIndex) {
            this.insertBefore(dragEventData.placeHolderElt, this._childHolders[viewIndex].elt);
          } else {
            var bf = Element.prototype.findChildAfter.call(this, this._childHolders[viewIndex].elt);
            if (bf) this.insertBefore(dragEventData.placeHolderElt, bf);else {
              this.appendChild(dragEventData.placeHolderElt);
            }
          }
        }
      }
    }
  }
};

BoardTable.eventHandler.mousemoveDragInOther = function (event) {
  var dragEventData = this._dragEventData;
  var mousePos = dragEventData.mousePos;
  var other = dragEventData.inEffectZoneOf;

  if (other._childHolders.length == 0) {
    if (dragEventData.boardIn != other) {
      dragEventData.boardIn = other;
      dragEventData.boardAt = 0;
      other.appendChild(dragEventData.placeHolderElt);
    }
  } else {
    var i = other._findHoverBoardIndex(mousePos.x, mousePos.y);

    if (i >= 0) {
      if (dragEventData.boardIn != other) {
        dragEventData.boardIn = other;
      }

      var displayStyple = other._childHolders[i].elt.getComputedStyleValue('display');

      var di = 0;

      var bbound = other._childHolders[i].elt.getBoundingClientRect();

      if (displayStyple.startsWith('inline')) {
        if (mousePos.x > bbound.left + bbound.width / 2) di++;
      } else {
        if (mousePos.y > bbound.top + bbound.height / 2) di++;
      }

      i += di;

      if (i < other._childHolders.length) {
        other.insertBefore(dragEventData.placeHolderElt, other._childHolders[i].elt);
      } else {
        var bf = other.findChildAfter(other._childHolders[other._childHolders.length - 1].elt);

        if (bf) {
          other.insertBefore(dragEventData.placeHolderElt, bf);
        } else {
          other.appendChild(dragEventData.placeHolderElt);
        }
      }

      dragEventData.boardAt = i;
    }
  }
};

BoardTable.eventHandler.mousemoveDrag = function (event) {
  var dragEventData = this._dragEventData;

  if (dragEventData.inEffectZoneOf == this) {
    this.eventHandler.mousemoveDragInSelf(event);
  } else {
    this.eventHandler.mousemoveDragInOther(event);
  }
};

BoardTable.eventHandler.boarDrag = function (event) {
  var dragEventData = this._dragEventData;
  var mousePos = dragEventData.mousePos;
  var boardPos = mousePos.sub(dragEventData.mouseBoardOffset);
  dragEventData.boardElt.addStyle({
    left: boardPos.x + 'px',
    top: boardPos.y + 'px'
  });
};

BoardTable.eventHandler.dragOnEffectZone = function (event) {
  var dragEventData = this._dragEventData;
  var mousePos = dragEventData.mousePos;
  var friendHolders = dragEventData.friendHolders;
  var bound;

  for (var i = 0; i < friendHolders.length; ++i) {
    bound = Math_Rectangle.fromClientRect(friendHolders[i].effectZone.getBoundingClientRect());

    if (bound.containsPoint(mousePos)) {
      dragEventData.inEffectZoneOf = friendHolders[i].elt;
      break;
    }
  }
};

BoardTable.eventHandler.mousemoveOverflow = function (event) {
  if (!this._dragEventData) return;
  var dragEventData = this._dragEventData;
  var scrollerX = this._dragEventData.boardIn;
  var overflowStyle;

  while (scrollerX) {
    overflowStyle = window.getComputedStyle(scrollerX)['overflow'];
    if ((overflowStyle === 'auto' || overflowStyle === 'auto hidden' || overflowStyle === 'scroll' || scrollerX.tagName === 'HTML') && scrollerX.clientWidth < scrollerX.scrollWidth) break;
    scrollerX = scrollerX.parentElement;
  }

  var scrollerY = this._dragEventData.boardIn;

  while (scrollerY) {
    overflowStyle = window.getComputedStyle(scrollerY)['overflow'];
    if ((overflowStyle === 'auto' || overflowStyle === 'hidden auto' || overflowStyle === 'scroll' || scrollerY.tagName === 'HTML') && scrollerY.clientHeight < scrollerY.scrollHeight) break;
    scrollerY = scrollerY.parentElement;
  }

  var outBound;
  var bBound;
  var screenSize = HTML5_Dom.getScreenSize();
  var vx = 0;
  var vy = 0;
  bBound = this._dragEventData.boardElt.getBoundingClientRect();

  if (scrollerX) {
    if (dragEventData.$scrollerX !== scrollerX) {
      dragEventData.scrollerXValue = scrollerX.scrollLeft;
      dragEventData.$scrollerX = scrollerX;
    }

    outBound = scrollerX.getBoundingClientRect();
    outBound = {
      left: Math.max(outBound.left, 0),
      top: Math.max(outBound.top, 0),
      bottom: Math.min(outBound.bottom, screenSize.height),
      right: Math.min(outBound.right, screenSize.width)
    };

    if (bBound.left < outBound.left) {
      vx = bBound.left - outBound.left;
    } else if (bBound.right > outBound.right) {
      vx = bBound.right - outBound.right;
    }
  } else {
    dragEventData.$scrollerX = null;
  }

  if (scrollerY) {
    if (dragEventData.$scrollerY !== scrollerY) {
      dragEventData.scrollerYValue = scrollerY.scrollTop;
      dragEventData.$scrollerY = scrollerY;
    }

    outBound = scrollerY.getBoundingClientRect();
    outBound = {
      left: Math.max(outBound.left, 0),
      top: Math.max(outBound.top, 0),
      bottom: Math.min(outBound.bottom, screenSize.height),
      right: Math.min(outBound.right, screenSize.width)
    };

    if (bBound.top < outBound.top) {
      vy = bBound.top - outBound.top;
    } else if (bBound.bottom > outBound.bottom) {
      vy = bBound.bottom - outBound.bottom;
    }
  } else {
    dragEventData.$scrollerY = null;
  }

  vx = Math.max(-this.maxScrollSpeed, Math.min(this.maxScrollSpeed, vx * Math.sqrt(Math.abs(vx))));
  vy = Math.max(-this.maxScrollSpeed, Math.min(this.maxScrollSpeed, vy * Math.sqrt(Math.abs(vy))));

  if (vx !== 0 || vy !== 0) {
    var copyEvent = {
      type: event.type,
      preventDefault: function preventDefault() {
        /* noop */
      },
      target: event.target
    };

    if (event.type === 'touchmove') {
      copyEvent.changedTouches = Array.prototype.map.call(event.changedTouches, function (it) {
        return {
          identifier: it.identifier,
          clientX: it.clientX,
          clientY: it.clientY,
          target: it.target
        };
      });
      copyEvent.touches = Array.prototype.map.call(event.touches, function (it) {
        return {
          identifier: it.identifier,
          clientX: it.clientX,
          clientY: it.clientY,
          target: it.target
        };
      });
    } else {
      copyEvent.clientX = event.clientX;
      copyEvent.clientY = event.clientY;
    }

    var thisBT = this;
    var now = new Date().getTime();

    if (dragEventData.requestAnimationFrameId >= 0) {
      cancelAnimationFrame(dragEventData.requestAnimationFrameId);
    }

    dragEventData.requestAnimationFrameId = requestAnimationFrame(function () {
      dragEventData.requestAnimationFrameId = -1;
      var dt = (new Date().getTime() - now) / 1000;

      if (dragEventData.$scrollerY) {
        dragEventData.scrollerYValue += vy * dt;
        dragEventData.scrollerYValue = Math.max(0, Math.min(dragEventData.$scrollerY.scrollHeight - dragEventData.$scrollerY.clientHeight, dragEventData.scrollerYValue));
        dragEventData.$scrollerY.scrollTop = dragEventData.scrollerYValue;
      }

      if (dragEventData.$scrollerX) {
        dragEventData.scrollerXValue += vx * dt;
        dragEventData.scrollerXValue = Math.max(0, Math.min(dragEventData.$scrollerX.scrollWidth - dragEventData.$scrollerX.clientWidth, dragEventData.scrollerXValue));
        dragEventData.$scrollerX.scrollLeft = dragEventData.scrollerXValue;
      }

      if (thisBT._dragEventData && thisBT._dragEventData.state === "DRAG") {
        thisBT.eventHandler.mousemoveOverflow(copyEvent);
      }
    });
  }
};

BoardTable.eventHandler.mousemove = function (event) {
  var dragEventData = this._dragEventData;
  var isTouch = event.type === 'touchmove' || event.type === 'touchstart'; // call from timeout

  if (dragEventData.isTouch !== isTouch) return;
  var mousePos;
  var pointerIdent;
  var touch = -2;

  if (isTouch) {
    touch = findChangedTouchByIdent(event, dragEventData.pointerIdent);

    if (touch) {
      pointerIdent = touch.identifier;
      mousePos = new Math_Vec2(touch.clientX, touch.clientY);
    }
  } else {
    pointerIdent = -1;
    mousePos = new Math_Vec2(event.clientX, event.clientY);
  }

  if (dragEventData.pointerIdent !== pointerIdent) return;
  dragEventData.mousePos = mousePos;
  event.preventDefault();

  if (dragEventData.isTouch && dragEventData.state === 'DRAG') {
    this.eventHandler.dragOnEffectZone(event); //because touch not have mouseenter event
  }

  if (dragEventData.state === 'PRE_DRAG') {
    this.eventHandler.mousemovePredrag(event);
  }

  if (dragEventData.state === 'DRAG') {
    this.eventHandler.mousemoveDrag(event);
    this.eventHandler.boarDrag(event);
    this.eventHandler.mousemoveOverflow(event);
  }
};

BoardTable.eventHandler.mousefinish = function (event) {
  var dragEventData = this._dragEventData;
  var isTouch = event.type === 'touchend';
  if (dragEventData.isTouch !== isTouch) return;
  var mousePos;
  var pointerIdent;
  var touch = -2;

  if (isTouch) {
    touch = findChangedTouchByIdent(event, dragEventData.pointerIdent);

    if (touch) {
      pointerIdent = touch.identifier;
      mousePos = new Math_Vec2(touch.clientX, touch.clientY);
    }
  } else {
    pointerIdent = -1;
    mousePos = new Math_Vec2(event.clientX, event.clientY);
  }

  if (dragEventData.pointerIdent !== pointerIdent) return;
  dragEventData.mousePos = mousePos;
  var changed;

  if (dragEventData.state == 'DRAG') {
    setTimeout(function () {
      BoardTable_$(document.body).removeClass('as-has-board-table-drag');
    }, 1);
    dragEventData.boardElt.removeClass('as-board-moving').removeStyle('left').removeStyle('top');
    dragEventData.boardElt.addStyle(dragEventData.cardStyle);
    dragEventData.placeHolderElt.remove();
    dragEventData.state = "FINISH";
    if (!dragEventData.isTouch) dragEventData.friendHolders.forEach(function (holder) {
      js_Hanger.prototype.off2.call(holder.effectZone, 'mouseenter', holder.enterEvent);
    });

    if (dragEventData.boardIn == this) {
      if (dragEventData.holderIndex != dragEventData.boardAt) {
        if (dragEventData.holderIndex > dragEventData.boardAt) {
          this.insertBefore(dragEventData.boardElt, this._childHolders[dragEventData.boardAt].elt);
        } else if (dragEventData.holderIndex < dragEventData.boardAt) {
          var bf = Element.prototype.findChildAfter.call(this, this._childHolders[dragEventData.boardAt].elt);
          if (bf) this.insertBefore(dragEventData.boardElt, bf);else {
            this.appendChild(dragEventData.boardElt);
          }
        }

        var holder = this._childHolders.splice(dragEventData.holderIndex, 1)[0];

        this._childHolders.splice(dragEventData.boardAt, 0, holder);

        changed = 'orderchange';
        this.emit('orderchange', {
          type: 'orderchange',
          boardElt: holder.elt,
          action: 'move',
          from: dragEventData.holderIndex,
          to: dragEventData.boardAt,
          target: this
        }, this);
      }
    } else {
      var holder = this._childHolders.splice(dragEventData.holderIndex, 1)[0];

      holder.elt.remove(); ///remove all event

      var other = dragEventData.boardIn;
      changed = 'itemleave';
      this.emit('itemleave', {
        type: 'itemleave',
        item: holder.elt,
        from: {
          index: dragEventData.holderIndex,
          table: this
        },
        to: {
          index: dragEventData.boardAt,
          table: other
        },
        target: this
      }, this);

      if (other._childHolders.length == 0) {
        other.appendChild(holder.elt);

        other._childHolders.push(holder);
      } else {
        if (dragEventData.boardAt < other._childHolders.length) {
          other.insertBefore(holder.elt, other._childHolders[dragEventData.boardAt].elt);

          other._childHolders.splice(dragEventData.boardAt, 0, holder);
        } else {
          var bf = other.findDomChildAfter(other._childHolders.elt);

          if (bf) {
            other.insertBefore(holder.elt, bf);
          } else {
            other.appendChild(holder.elt);
          }

          other._childHolders.push(holder);
        }
      }

      other.emit('itementer', {
        type: 'itementer',
        item: holder.elt,
        target: other,
        from: {
          index: dragEventData.holderIndex,
          table: this
        },
        to: {
          index: dragEventData.boardAt,
          table: other
        }
      }, other);
    }

    this.emit('dragitemend', {
      type: 'dragitemend',
      target: this,
      changed: changed,
      boardElt: this._dragEventData.boardElt
    }, this);
  }

  var bodyEvents = {};

  if (dragEventData.isTouch) {
    bodyEvents.touchmove = this.eventHandler.mousemove;
    bodyEvents.touchcancel = this.eventHandler.mousefinish;
    bodyEvents.touchend = this.eventHandler.mousefinish;
  } else {
    bodyEvents.mousemove = this.eventHandler.mousemove;
    bodyEvents.mouseup = this.eventHandler.mousefinish;
    bodyEvents.mouseleave = this.eventHandler.mousefinish;
  }

  js_Hanger.prototype.off2.call(document.body, bodyEvents);
  this._dragEventData = null;
};

BoardTable.eventHandler.enterFriendEffectZone = function (friendElt, event) {
  this._dragEventData.inEffectZoneOf = friendElt;
};

BoardTable.prototype.getAllBoards = function () {
  return this._childHolders.map(function (holder) {
    return holder.elt;
  });
};

BoardTable.property = {};
BoardTable.property.friends = {
  set: function set(value) {
    value = value || [];
    if (!(value instanceof Array)) value = [value];
    this._friends = value;
  },
  get: function get() {
    return this._friends;
  }
};
absol_acomp_ACore.install(BoardTable);
/* harmony default export */ const js_BoardTable = (BoardTable);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/bscroller.css
var bscroller = __webpack_require__(931);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/BScroller.js




var BScroller_ = absol_acomp_ACore._;
var BScroller_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function BScroller() {
  this.addClass('as-bscroller');
}

BScroller.tag = "bscroller";

BScroller.render = function (data) {
  if (data && data.elt) {
    return BScroller_$(data.elt);
  } else return BScroller_('div');
};

BScroller.prototype.scrollInto = function (element) {
  if (Element.prototype.isDescendantOf.call(element, this)) {
    var elementBound = element.getBoundingClientRect();
    var viewportBound = this.getBoundingClientRect();
    var currentScrollTop = this.scrollTop;
    var newScrollTop = currentScrollTop;

    if (elementBound.bottom > viewportBound.bottom) {
      newScrollTop = currentScrollTop + (elementBound.bottom - viewportBound.bottom);
    }

    if (elementBound.top < viewportBound.top) {
      newScrollTop = currentScrollTop - (viewportBound.top - elementBound.top);
    }

    if (newScrollTop != currentScrollTop) {
      this.scrollTop = newScrollTop;
    }

    var currentScrollLeft = this.scrollLeft;
    var newScrollLeft = currentScrollLeft;

    if (elementBound.right > viewportBound.right) {
      newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right);
    }

    if (elementBound.left < viewportBound.left) {
      newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left);
    }

    if (newScrollLeft != currentScrollLeft) {
      this.scrollLeft = newScrollLeft;
    }
  }
};

absol_acomp_ACore.install(BScroller);
/* harmony default export */ const js_BScroller = (BScroller);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/buttonarray.css
var buttonarray = __webpack_require__(9607);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonArray.js
function ButtonArray_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ButtonArray_typeof = function _typeof(obj) { return typeof obj; }; } else { ButtonArray_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ButtonArray_typeof(obj); }




var ButtonArray_ = absol_acomp_ACore._;
var ButtonArray_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function ButtonArray() {
  this._dict = {};
  this._pool = [];
  this._items = [];
  this.$lastActiveBtn = null;
  this._value = undefined;
  this._lastValue = this._value;
}

ButtonArray.tag = 'buttonarray';

ButtonArray.render = function () {
  return ButtonArray_({
    extendEvent: ['change'],
    "class": 'as-button-array'
  });
};

ButtonArray.prototype._newButton = function () {
  var button = ButtonArray_({
    tag: 'button',
    "class": 'as-button-array-item',
    child: {
      text: 'null'
    }
  });

  button.on('click', this.eventHandler.clickItem.bind(this, button));
  return button;
};

ButtonArray.prototype._requestButton = function (items) {
  var button;

  if (this._pool.length > 0) {
    button = this._pool.pop();
  } else {
    button = this._newButton();
  }

  return button;
};

ButtonArray.prototype._assignButton = function (button, data) {
  button._data = data;
  button.childNodes[0].data = data.text;
};

ButtonArray.prototype._releaseButton = function (button) {
  this._pool.push(button);
};

ButtonArray.prototype._getFullFormat = function (item) {
  var res = {};

  if (typeof item == 'string' || typeof item == 'number' || typeof item == 'boolean' || item === null || item === undefined) {
    res.ident = item;
    res.value = item;
    res.text = item + '';
  } else if (item && ButtonArray_typeof(item) == 'object') {
    res.value = item.value;
    res.ident = res.value + '';
    res.text = item.text;
  }

  return res;
};

ButtonArray.property = {};
/**
 * @type {ButtonArray}
 */

ButtonArray.property.items = {
  set: function set(items) {
    items = items || [];
    this._items = items;
    var child;

    while (this.childNodes.length > items.length) {
      child = this.lastChild;

      this._releaseButton(child);

      this.removeChild(child);
    }

    while (this.childNodes.length < items.length) {
      this.addChild(this._requestButton());
    }

    var item;

    for (var i = 0; i < items.length; ++i) {
      item = this._getFullFormat(items[i]);

      this._assignButton(this.childNodes[i], item);

      this._dict[item.ident] = {
        elt: this.childNodes[i],
        data: item
      };
    }

    if (items.length > 0) {
      if (!this._dict[this._value + '']) {
        this._value = this._getFullFormat(items[0]).value;
      }
    }

    this.value = this._value;
  },
  get: function get() {
    return this._items;
  }
};
ButtonArray.property.value = {
  set: function set(value) {
    this._value = value;
    this._lastValue = this._value;

    if (this.$lastActiveBtn) {
      this.$lastActiveBtn.removeClass('as-active');
      this.$lastActiveBtn = null;
    }

    var hodler = this._dict[value + ''];

    if (hodler) {
      hodler.elt.addClass('as-active');
      this.$lastActiveBtn = hodler.elt;
    }
  },
  get: function get() {
    return this._value;
  }
};
ButtonArray.eventHandler = {};

ButtonArray.eventHandler.clickItem = function (item, event) {
  if (this._lastValue != item._data.value) {
    this.value = item._data.value;
    this.emit('change', {
      target: this,
      value: this.value,
      type: 'change'
    }, this);
  }
};

absol_acomp_ACore.install(ButtonArray);
/* harmony default export */ const js_ButtonArray = (ButtonArray);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/calendarinput.css
var calendarinput = __webpack_require__(350);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chromecalendar.css
var chromecalendar = __webpack_require__(9479);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/scroller.css
var scroller = __webpack_require__(9874);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Scroller.js






var Scroller_ = absol_acomp_ACore._;
var Scroller_$ = absol_acomp_ACore.$;

absol_acomp_ACore.$scrollStyle = function () {
  var element = Scroller_('style#vscroller-style');

  element.innerHTML = ['.absol-vscroller-viewport{ margin-right: ' + -17 + 'px;  min-width: calc(100% + ' + 17 + 'px);}', '.absol-hscroller-viewport{ margin-bottom: ' + -17 + 'px;  min-height: calc(100% + ' + 17 + 'px);}'].join('\n');
  document.head.appendChild(element);
  HTML5_Dom.getScrollSize().then(function (size) {
    element.innerHTML = ['.absol-vscroller-viewport{ margin-right: ' + -size.width + 'px; min-width: calc(100% + ' + size.width + 'px);}', '.absol-hscroller-viewport{ margin-bottom: ' + -size.height + 'px; min-height: calc(100% + ' + size.height + 'px);}'].join('\n');
  });
  return element;
}();

function VScroller() {
  var thisVS = this;
  this.$attachHook = Scroller_$('attachhook', this);
  this.sync = new Promise(function (rs) {
    thisVS.$attachHook.once('error', function () {
      rs();
    });
  });
  this.$attachHook.on('error', function () {
    thisVS.requestUpdateSize();
  });
  this.$vscrollbar = Scroller_$('vscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar);
  this.$viewport = Scroller_$('.absol-vscroller-viewport', this).on('scroll', this.eventHandler.scrollViewport);
  HTML5_OOP["extends"](thisVS.$viewport, {
    removeChild: function removeChild() {
      this["super"].apply(this, arguments);
      thisVS.requestUpdateSize();
      return thisVS;
    }
  });
}
VScroller.tag = 'vscroller';

VScroller.render = function () {
  return Scroller_({
    "class": 'absol-vscroller',
    child: ['.absol-vscroller-viewport', {
      "class": ['absol-scrollbar-container', 'vertical'],
      child: 'vscrollbar'
    }, 'attachhook']
  });
};

VScroller.prototype.requestUpdateSize = function () {
  // return;
  if (this._isRequestingUpdateSize) return this.sync;
  this._isRequestingUpdateSize = true;
  this.sync = this.sync.then(function () {
    this.$vscrollbar.outerHeight = this.$viewport.clientHeight;
    this.$vscrollbar.innerHeight = this.$viewport.scrollHeight - 2;
    this.$vscrollbar.innerOffset = this.$viewport.scrollTop;

    if (this.$vscrollbar.innerHeight <= this.$vscrollbar.outerHeight) {
      this.$vscrollbar.hidden = true;
      this.addClass('disabled');
    } else {
      this.removeClass('disabled');
      this.$vscrollbar.hidden = false;
    }

    this._isRequestingUpdateSize = false;
  }.bind(this));
  return this.sync;
};

VScroller.prototype.init = function (props) {
  this["super"](props);
  this.requestUpdateSize();
};

VScroller.prototype.addChild = function () {
  var res = this.$viewport.addChild.apply(this.$viewport, arguments);
  this.requestUpdateSize();
  return res;
};

VScroller.prototype.clearChild = function () {
  var res = this.$viewport.clearChild.apply(this.$viewport, arguments);
  this.requestUpdateSize();
  return res;
};

VScroller.prototype.addChildBefore = function () {
  var res = this.$viewport.addChildBefore.apply(this.$viewport, arguments);
  this.requestUpdateSize();
  return res;
};

VScroller.prototype.addChildAfter = function () {
  var res = this.$viewport.addChildAfter.apply(this.$viewport, arguments);
  this.requestUpdateSize();
  return res;
};

VScroller.prototype.findChildAfter = function () {
  return this.$viewport.findChildAfter.apply(this.$viewport, arguments);
};

VScroller.prototype.findChildBefore = function () {
  return this.$viewport.findChildBefore.apply(this.$viewport, arguments);
};

VScroller.prototype.removeChild = function () {
  var res = this.$viewport.removeChild.apply(this.$viewport, arguments);
  this.requestUpdateSize();
  return res;
};

VScroller.prototype.scrollInto = function (element, padding, scrollTime, beforFrame, afterFrame) {
  padding = padding || 0;
  scrollTime = scrollTime || 0;
  var frameCount = Math.ceil(scrollTime / 15 + 1);
  var self = this;

  function onFrame() {
    beforFrame && beforFrame();
    var elementBound = element.getBoundingClientRect();
    var viewportBound = self.$viewport.getBoundingClientRect();
    var currentScrollTop = self.$viewport.scrollTop;
    var newScrollTop = currentScrollTop;

    if (elementBound.bottom + padding > viewportBound.bottom) {
      newScrollTop = currentScrollTop + (elementBound.bottom + padding - viewportBound.bottom) / (Math.log(frameCount) + 1);
    }

    if (elementBound.top - padding < viewportBound.top) {
      newScrollTop = currentScrollTop - (viewportBound.top - (elementBound.top - padding)) / (Math.log(frameCount) + 1);
    }

    if (newScrollTop != currentScrollTop) {
      self.$viewport.scrollTop = newScrollTop;
    }

    afterFrame && afterFrame();
    frameCount--;
    if (frameCount > 0) setTimeout(onFrame, 15);
  }

  if (Element.prototype.isDescendantOf.call(element, this.$viewport)) {
    onFrame();
  }
};

VScroller.prototype.scrollBy = function (dy, duration) {
  duration = duration || 0;
  var frameCount = Math.ceil(duration / 20);
  var timeOut = duration / frameCount;
  var i = 0;
  var self = this;
  var start = self.$viewport.scrollTop;
  var end = start + dy;

  function onFrame() {
    self.$viewport.scrollTop = Math.max(map(i, 0, frameCount, start, end), 0);
    ++i;
    if (i <= frameCount) setTimeout(onFrame, timeOut);
  }

  onFrame();
};

VScroller.eventHandler = {};

VScroller.eventHandler.scrollViewport = function (event) {
  this.$vscrollbar.outerHeight = this.$viewport.clientHeight;
  this.$vscrollbar.innerHeight = this.$viewport.scrollHeight;
  this.$vscrollbar.innerOffset = this.$viewport.scrollTop;
};

VScroller.eventHandler.scrollScrollbar = function (event) {
  this.$viewport.scrollTop = this.$vscrollbar.innerOffset;
};

function HScroller() {
  var thisHS = this;
  this.$attachHook = Scroller_$('attachhook', this).on('error', function () {
    this.requestUpdateSize = this.requestUpdateSize || thisHS.requestUpdateSize.bind(thisHS);
    HTML5_Dom.addToResizeSystem(this);
  });
  this.sync = new Promise(function (rs, rj) {
    thisHS.$attachHook.once('error', rs);
  });
  this.$hscrollbar = Scroller_$('hscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar);
  this.$viewport = Scroller_$('.absol-hscroller-viewport', this).on('scroll', this.eventHandler.scrollViewport);
  HTML5_OOP["extends"](this.$viewport, {
    removeChild: function removeChild() {
      this["super"].apply(this, arguments);
      thisHS.requestUpdateSize();
      return thisHS;
    }
  });
}
HScroller.tag = 'hscroller';

HScroller.render = function () {
  return Scroller_({
    "class": 'absol-hscroller',
    child: ['.absol-hscroller-viewport', {
      "class": ['absol-scrollbar-container', 'horizontal'],
      child: 'hscrollbar'
    }, 'attachhook']
  });
};

HScroller.eventHandler = {};

HScroller.eventHandler.scrollViewport = function (event) {
  this.$hscrollbar.outerWidth = this.$viewport.clientWidth;
  this.$hscrollbar.innerWidth = this.$viewport.scrollWidth;
  this.$hscrollbar.innerOffset = this.$viewport.scrollLeft;
};

HScroller.eventHandler.scrollScrollbar = function (event) {
  this.$viewport.scrollLeft = this.$hscrollbar.innerOffset;
};

Object.assign(HScroller.prototype, VScroller.prototype);

HScroller.prototype.requestUpdateSize = function () {
  // return;
  if (this._isRequestingUpdateSize) return this.sync;
  this._isRequestingUpdateSize = true;
  this.sync = this.sync.then(function () {
    this.$hscrollbar.outerWidth = this.$viewport.clientWidth;
    this.$hscrollbar.innerWidth = this.$viewport.scrollWidth;
    this.$hscrollbar.innerOffset = this.$viewport.scrollLeft;

    if (this.$hscrollbar.innerWidth <= this.$hscrollbar.outerWidth) {
      this.$hscrollbar.hidden = true;
      this.addClass('disabled');
    } else {
      this.removeClass('disabled');
      this.$hscrollbar.hidden = false;
    }

    this._isRequestingUpdateSize = false;
  }.bind(this));
  return this.sync;
};

HScroller.prototype.scrollInto = function (element) {
  if (Element.prototype.isDescendantOf.call(element, this.$viewport)) {
    var elementBound = element.getBoundingClientRect();
    var viewportBound = this.$viewport.getBoundingClientRect();
    var currentScrollLeft = this.$viewport.scrollLeft;
    var newScrollLeft = currentScrollLeft;

    if (elementBound.right > viewportBound.right) {
      newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right);
    }

    if (elementBound.left < viewportBound.left) {
      newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left);
    }

    if (newScrollLeft != currentScrollLeft) {
      this.$viewport.scrollLeft = newScrollLeft;
    }
  }
};

function Scrollbar() {
  var thisSB = this;
  this.$button = Scroller_$('.absol-scrollbar-button', this);
  this.on('active', function () {
    if (!thisSB.$forceModal) thisSB.$forceModal = Scroller_('.absol-scrollbar-force-modal');
    thisSB.$forceModal.addTo(document.body);
  }).on('deactive', function () {
    setTimeout(function () {
      thisSB.$forceModal.remove();
    }, 30);
  });
}
Scrollbar.tag = 'scrollbar';

Scrollbar.render = function () {
  return Scroller_({
    "class": ['absol-scrollbar'],
    extendEvent: ['scroll', 'active', 'deactive'],
    child: '.absol-scrollbar-button'
  });
};

Scrollbar.property = {};
Scrollbar.property.hidden = {
  set: function set(value) {
    value = !!value;

    if (value != this._hidden) {
      this._hidden = value;
      if (value) this.addClass('absol-hidden');else this.removeClass('absol-hidden');
    }
  },
  get: function get() {
    return this.containsClass('absol-hidden');
  }
};
function VScrollbar() {
  var thisVS = this;
  var top0, innerOffset0;

  var pointerMoveEventHandler = function pointerMoveEventHandler(event) {
    event.preventDefault();
    var dy = event.clientY - top0;
    var newInnerOffset = innerOffset0 + dy * (thisVS.innerHeight / thisVS.outerHeight) * (thisVS.outerHeight / thisVS.getBoundingClientRect().height);
    if (newInnerOffset + thisVS.outerHeight > thisVS.innerHeight) newInnerOffset = thisVS.innerHeight - thisVS.outerHeight;
    if (newInnerOffset < 0) newInnerOffset = 0;
    thisVS.innerOffset = newInnerOffset; //todo

    event.innerOffset = newInnerOffset;
    thisVS.emit('scroll', event);
  };

  var finishEventHandler = function finishEventHandler(event) {
    var body = Scroller_$(document.body);
    body.off('pointerleave', finishEventHandler);
    body.off('pointerup', finishEventHandler);
    body.off('pointermove', pointerMoveEventHandler);
    thisVS.removeClass('absol-active');
    thisVS.emit('deactive', {
      type: 'deactive',
      originEvent: event,
      tagert: thisVS
    });
  };

  var pointerDownEventHandler = function pointerDownEventHandler(event) {
    var boundRes = thisVS.getBoundingClientRect();
    var boundButton = thisVS.$button.getBoundingClientRect();
    top0 = event.clientY;

    if (event.target == thisVS.$button) {
      innerOffset0 = thisVS.innerOffset;
    } else {
      var newInnerOffset = map(top0 - boundButton.height / 2 - boundRes.top, 0, boundRes.height, 0, thisVS.innerHeight);
      if (newInnerOffset + thisVS.outerHeight > thisVS.innerHeight) newInnerOffset = thisVS.innerHeight - thisVS.outerHeight;
      if (newInnerOffset < 0) newInnerOffset = 0;
      thisVS.innerOffset = newInnerOffset; //todo

      event.innerOffset = newInnerOffset;
      innerOffset0 = newInnerOffset;
      thisVS.emit('scroll', event);
    }

    var body = Scroller_$(document.body);
    body.on('pointerleave', finishEventHandler);
    body.on('pointerup', finishEventHandler);
    body.on('pointermove', pointerMoveEventHandler);
    thisVS.addClass('absol-active');
    thisVS.emit('active', {
      type: 'active',
      originEvent: event,
      tagert: thisVS
    });
  };

  this.on('pointerdown', pointerDownEventHandler, true);
}
VScrollbar.tag = 'vscrollbar';

VScrollbar.render = function () {
  return Scroller_({
    tag: 'scrollbar',
    "class": 'absol-vscrollbar'
  }, true);
};

VScrollbar.prototype.updateValue = function () {
  this.$button.addStyle('height', Math.min(this.outerHeight / this.innerHeight, 1) * 100 + '%');
  this.$button.addStyle('top', this.innerOffset / this.innerHeight * 100 + '%');
};

VScrollbar.property = {
  innerOffset: {
    set: function set(value) {
      value = value || 0;

      if (this._innerOffset != value) {
        this._innerOffset = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._innerOffset || 0;
    }
  },
  innerHeight: {
    set: function set(value) {
      value = value || 1;
      value = Math.max(value, 1);

      if (this._innerHeight != value) {
        this._innerHeight = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._innerHeight || 1;
    }
  },
  outerHeight: {
    set: function set(value) {
      value = value || 0;
      value = Math.max(value, 0);

      if (this._outerHeight != value) {
        this._outerHeight = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._outerHeight || 0;
    }
  }
};
function HScrollbar() {
  var thisHS = this;
  var left0, innerOffset0;

  var pointerMoveEventHandler = function pointerMoveEventHandler(event) {
    event.preventDefault();
    var dy = event.clientX - left0;
    var newInnerOffset = innerOffset0 + dy * (thisHS.innerWidth / thisHS.outerWidth) * (thisHS.outerWidth / thisHS.getBoundingClientRect().width);
    if (newInnerOffset + thisHS.outerWidth > thisHS.innerWidth) newInnerOffset = thisHS.innerWidth - thisHS.outerWidth;
    if (newInnerOffset < 0) newInnerOffset = 0;
    thisHS.innerOffset = newInnerOffset; //todo

    event.innerOffset = newInnerOffset;
    thisHS.emit('scroll', event);
  };

  var finishEventHandler = function finishEventHandler(event) {
    var body = Scroller_$(document.body);
    body.off('pointerleave', finishEventHandler);
    body.off('pointerup', finishEventHandler);
    body.off('pointermove', pointerMoveEventHandler);
    thisHS.removeClass('absol-active');
    thisHS.emit('deactive', {
      type: 'deactive',
      originEvent: event,
      tagert: thisHS
    });
  };

  var pointerDownEventHandler = function pointerDownEventHandler(event) {
    var boundRes = thisHS.getBoundingClientRect();
    var boundButton = thisHS.$button.getBoundingClientRect();
    left0 = event.clientX;

    if (event.target == thisHS.$button) {
      innerOffset0 = thisHS.innerOffset;
    } else {
      var newInnerOffset = map(left0 - boundButton.width / 2 - boundRes.left, 0, boundRes.width, 0, thisHS.innerWidth);
      if (newInnerOffset + thisHS.outerWidth > thisHS.innerWidth) newInnerOffset = thisHS.innerWidth - thisHS.outerWidth;
      if (newInnerOffset < 0) newInnerOffset = 0;
      thisHS.innerOffset = newInnerOffset; //todo

      event.innerOffset = newInnerOffset;
      innerOffset0 = newInnerOffset;
      thisHS.emit('scroll', event);
    }

    var body = Scroller_$(document.body);
    body.on('pointerleave', finishEventHandler);
    body.on('pointerup', finishEventHandler);
    body.on('pointermove', pointerMoveEventHandler);
    thisHS.addClass('absol-active');
    thisHS.emit('active', {
      type: 'deactive',
      originEvent: event,
      tagert: thisHS
    });
  };

  this.on('pointerdown', pointerDownEventHandler, true);
}
HScrollbar.tag = 'hscrollbar';

HScrollbar.render = function () {
  return Scroller_({
    tag: 'scrollbar',
    "class": 'absol-hscrollbar'
  }, true);
};

HScrollbar.prototype.updateValue = function () {
  this.$button.addStyle('width', Math.min(this.outerWidth / this.innerWidth, 1) * 100 + '%');
  this.$button.addStyle('left', this.innerOffset / this.innerWidth * 100 + '%');
};

HScrollbar.property = {
  innerOffset: {
    set: function set(value) {
      value = value || 0;

      if (this._innerOffset != value) {
        this._innerOffset = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._innerOffset || 0;
    }
  },
  innerWidth: {
    set: function set(value) {
      value = value || 1;
      value = Math.max(value, 1);

      if (this._innerWidth != value) {
        this._innerWidth = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._innerWidth || 1;
    }
  },
  outerWidth: {
    set: function set(value) {
      value = value || 0;
      value = Math.max(value, 0);

      if (this._outerWidth != value) {
        this._outerWidth = value;
        this.updateValue();
      }
    },
    get: function get() {
      return this._outerWidth || 0;
    }
  }
};
absol_acomp_ACore.install([VScrollbar, HScrollbar, Scrollbar, VScroller, HScroller]);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeCalendar.js









var ChromeCalendar_ = absol_acomp_ACore._;
var ChromeCalendar_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function ChromeCalendar() {
  var thisCal = this;
  this._level = "day";
  this.$years = ChromeCalendar_$('.absol-chrome-calendar-years', this);

  this._fillYearList(this.$years);

  this.$title = ChromeCalendar_$('.absol-chrome-calendar-title', this).on('click', this.eventHandler.clickTitle);
  this.$titleTime = ChromeCalendar_$('.title-time', this.$title);
  this.$instance = ChromeCalendar_$('.absol-chrome-calendar-instance', this);
  this.$era = ChromeCalendar_$('.absol-chrome-calendar-era', this).on('scroll', this.eventHandler.eraScroll).on('click', this.eventHandler.clickEra);

  this._fillEra();

  this.$month = ChromeCalendar_$('.absol-chrome-calendar-month', this);
  this._min = new Date(1890, 0, 1);
  this._max = new Date(2090, 0, 1);
  this._selectedDates = [beginOfDay(new Date())];
  this._viewDate = new Date();
  this.$prevBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.prev-btn', this).on('click', this.eventHandler.clickPrev);
  this.$todayBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.today-btn', this).on('click', this.eventHandler.clickToday);
  this.$nextBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.next-btn', this).on('click', this.eventHandler.clickNext);
  /***
   *
   * @type {VScroller}
   */

  this.$yearScroller = ChromeCalendar_$('vscroller.absol-chrome-calendar-years', this);
  this.$yearItems = [];
  ChromeCalendar_$('.absol-chrome-calendar-year', this.$yearScroller, function (e) {
    thisCal.$yearItems.push(e);
  });
  this.$attachHook = ChromeCalendar_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$attachHook).on('level_change', this.eventHandler.levelChange).on('request_update_buttons', this._updateButtons.bind(this)).on('request_update_month', this._updateMonth.bind(this, this.$month)).on('request_update_open_year', this._updateOpenYear.bind(this)).on('request_update_disabled_year_in_era', this._updateDisabledYearInEra.bind(this)).on('request_update_picked_years', this._updatePickedYears.bind(this));
  this.sync = new Promise(function (rs) {
    thisCal.$attachHook.on('attached', rs);
  });
  this.domSignal.emit('level_change');
  this.sync.then('attached', function () {
    thisCal.$yearScroller.requestUpdateSize();
    thisCal.expandYear(thisCal._viewDate.getFullYear());

    thisCal._updateYearInEra();
  });
  HTML5_OOP.drillProperty(this, this, 'minLimitDate', 'min');
  HTML5_OOP.drillProperty(this, this, 'minDateLimit', 'min');
  HTML5_OOP.drillProperty(this, this, 'maxLimitDate', 'max');
  HTML5_OOP.drillProperty(this, this, 'maxDateLimit', 'max');
}

ChromeCalendar.tag = 'ChromeCalendar'.toLowerCase();

ChromeCalendar.render = function () {
  return ChromeCalendar_({
    "class": ['absol-chrome-calendar', 'as-level-day'],
    extendEvent: 'pick',
    child: [{
      "class": 'absol-chrome-calendar-header',
      child: [{
        "class": 'absol-chrome-calendar-title',
        child: [{
          tag: 'span',
          "class": 'title-time',
          child: {
            text: 'Septemper, 2019'
          }
        }]
      }, {
        "class": 'absol-chrome-calendar-header-buttons',
        child: [{
          tag: 'button',
          "class": 'prev-btn',
          child: 'span.mdi.mdi-menu-left',
          attr: {
            title: 'Previous Month'
          }
        }, {
          tag: 'button',
          "class": 'today-btn',
          child: 'span.mdi.mdi-circle-medium',
          attr: {
            title: 'Today'
          }
        }, {
          tag: 'button',
          "class": 'next-btn',
          child: 'span.mdi.mdi-menu-right',
          attr: {
            title: 'Next Month'
          }
        }]
      }]
    }, {
      "class": 'absol-chrome-calendar-instance',
      child: [{
        "class": 'absol-chrome-calendar-dayofweek',
        child: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(function (text) {
          return {
            child: {
              text: text
            }
          };
        })
      }, {
        "class": 'absol-chrome-calendar-month',
        child: Array(6).fill(0).map(function (u, i) {
          return {
            "class": 'absol-chrome-calendar-week-in-mounth',
            child: Array(7).fill(0).map(function (v, j) {
              return {
                child: {
                  text: i * 7 + j + ''
                }
              };
            })
          };
        })
      }, {
        tag: 'vscroller',
        "class": 'absol-chrome-calendar-years',
        child: {}
      }, {
        "class": "absol-chrome-calendar-era"
      }]
    }]
  });
};
/**
 * @param {Date} date
 * @returns {Boolean}
 */


ChromeCalendar.prototype._isSelectedDate = function (date) {
  for (var i = 0; i < this._selectedDates.length; ++i) {
    if (compareDate(date, this._selectedDates[i]) === 0) return true;
  }

  return false;
};
/**
 * @param {Date} date
 * @returns {Boolean}
 */


ChromeCalendar.prototype._isSelectedMonth = function (date) {
  for (var i = 0; i < this._selectedDates.length; ++i) {
    if (compareMonth(date, this._selectedDates[i]) === 0) return true;
  }

  return false;
};
/**
 * @param {Date} date
 * @returns {Boolean}
 */


ChromeCalendar.prototype._isSelectedYear = function (date) {
  for (var i = 0; i < this._selectedDates.length; ++i) {
    if (date.getFullYear() === this._selectedDates[i].getFullYear()) return true;
  }

  return false;
};

ChromeCalendar.prototype._dayCmpLimit = function (date) {
  if (compareDate(date, this._min) < 0) return -1;
  if (compareDate(date, this._max) > 0) return 1;
  return 0;
};

ChromeCalendar.prototype._monthCmpLimit = function (date) {
  var startOfMonth = datetime_beginOfMonth(date);
  var endOfMonth = nextMonth(date);
  var minMil = Math.max(startOfMonth.getTime(), this._min.getTime());
  var maxMil = Math.min(endOfMonth.getTime(), nextDate(this._max).getTime());
  if (minMil < maxMil) return 0;
  return this._dayCmpLimit(date);
};

ChromeCalendar.prototype._yearCmpLimit = function (date) {
  var startOfYear = beginOfYear(date);
  var endOfYear = new Date(date.getFullYear() + 1, 0, 1);
  var minMil = Math.max(startOfYear.getTime(), this._min.getTime());
  var maxMil = Math.min(endOfYear.getTime(), nextDate(this._max).getTime());
  if (minMil < maxMil) return 0;
  return this._dayCmpLimit(date);
};
/***
 *
 * @param {Date} date
 * @param event
 */


ChromeCalendar.prototype.pickDate = function (date, event) {
  date = beginOfDay(date);
  this._selectedDates = [date];

  this._updateMonth(this.$month);

  if (this.$lastOpenYearItem) this.$lastOpenYearItem.$months.updateActiveMonth();
  this.emit('pick', {
    type: 'pick',
    value: date,
    isTrusted: event && event.isTrusted,
    originEvent: event,
    selectedDates: this.selectedDates
  });
};
/***
 *
 * @param {Date} date
 * @param event
 */


ChromeCalendar.prototype.pickMonth = function (date, event) {
  date = datetime_beginOfMonth(date);
  this._selectedDates = [date];
  if (this.$lastOpenYearItem) this.$lastOpenYearItem.$months.updateActiveMonth();
  this.emit('pick', {
    type: 'pick',
    value: date,
    isTrusted: event && event.isTrusted,
    originEvent: event,
    selectedDates: this.selectedDates
  });
};

ChromeCalendar.prototype._updatePickedYears = function () {
  var yearElt;
  var self = this;

  while (this.$lastPickYears && this.$lastPickYears.length > 0) {
    yearElt = this.$lastPickYears.pop();
    yearElt.removeClass('absol-chrome-calendar-selected');
  }

  this.$lastPickYears = this._selectedDates.map(function (date) {
    var yearElt = self._yearInAre(date.getFullYear());

    yearElt.addClass('absol-chrome-calendar-selected');
    return yearElt;
  });
};

ChromeCalendar.prototype.pickYear = function (year, event) {
  var date = new Date(year, 0, 1, 0, 0, 0, 0);
  this._selectedDates = [date];
  this.domSignal.emit('request_update_picked_years');
  this.scrollIntoDecade(Math.floor(year / 10) * 10, true);
  this.emit('pick', {
    type: 'pick',
    value: date,
    isTrusted: event && event.isTrusted,
    originEvent: event
  });
};
/**
 * @param {Element} monthElt
 * @param {Date} date
 */


ChromeCalendar.prototype._fillMonth = function (monthElt, date) {
  var self = this;

  if (monthElt.$cells === undefined) {
    //for faster, attach event to element 
    monthElt.$cells = [];
    ChromeCalendar_$('.absol-chrome-calendar-week-in-mounth > div', this.$month, function (elt) {
      monthElt.$cells.push(elt);
      elt.on('click', function (event) {
        self.pickDate(this.__date__, event);

        if (elt.containsClass('absol-chrome-calendar-not-in-month')) {
          if (this.__date__.getDate() < 15) {
            self.viewNexMonth();
          } else {
            self.viewPrevMonth();
          }
        }
      });
    });
  }

  var currentDate = beginOfWeek(datetime_beginOfMonth(date));
  var d;
  var cell;

  for (var i = 0; i < monthElt.$cells.length; ++i) {
    cell = monthElt.$cells[i];
    d = currentDate.getDate();
    cell.innerHTML = '' + d;
    cell.__date__ = beginOfDay(currentDate);
    currentDate = nextDate(currentDate);
  }
};

ChromeCalendar.prototype._updateMonth = function (monthElt) {
  if (!monthElt.$cells) return; // days weren't filled

  var now = new Date();

  var viewM = this._viewDate.getMonth();

  var m;
  var cell;
  var currentDate;

  for (var i = 0; i < monthElt.$cells.length; ++i) {
    cell = monthElt.$cells[i];
    currentDate = cell.__date__;
    m = currentDate.getMonth();
    if (m != viewM) cell.addClass('absol-chrome-calendar-not-in-month');else cell.removeClass('absol-chrome-calendar-not-in-month');
    if (compareDate(currentDate, now) == 0) cell.addClass('absol-chrome-calendar-today');else cell.removeClass('absol-chrome-calendar-today');
    if (this._isSelectedDate(currentDate)) cell.addClass('absol-chrome-calendar-selected');else cell.removeClass('absol-chrome-calendar-selected');

    if (compareDate(this._min, currentDate) > 0 || compareDate(currentDate, this._max) > 0) {
      cell.addClass('absol-chrome-calendar-date-disabled');
    } else {
      cell.removeClass('absol-chrome-calendar-date-disabled');
    }
  }
};

ChromeCalendar.prototype._fillYearList = function (ctn) {
  var thisCal = this;

  ChromeCalendar_({
    child: Array(200).fill(0).map(function (u, i) {
      return {
        "class": 'absol-chrome-calendar-year',
        child: [{
          "class": 'absol-chrome-calendar-year-head',
          child: {
            text: i + 1890 + ''
          }
        }],
        props: {
          __year__: i + 1890
        },
        on: {
          click: function click() {
            thisCal.expandYear(this.__year__);
          }
        }
      };
    })
  }).addTo(ctn);
};

ChromeCalendar.prototype._fillEra = function () {
  var now = new Date();
  var cYear = now.getFullYear();
  var rows = Array(50).fill(0).map(function (u, i) {
    return ChromeCalendar_({
      "class": 'absol-chrome-calendar-era-row',
      child: Array(4).fill(0).map(function (u1, j) {
        var classList = ['absol-chrome-calendar-era-year'];
        var year = 1890 + i * 4 + j;

        if (cYear === year) {
          classList.push('absol-chrome-calendar-today');
        }

        return {
          "class": classList,
          child: {
            text: year + ''
          },
          props: {
            __year__: year
          }
        };
      })
    });
  });
  this.$era.addChild(rows);
};

ChromeCalendar.prototype.viewNexMonth = function () {
  var self = this;
  this.sync = this.sync.then(function () {
    return new Promise(function (rs) {
      var oldBound = self.$month.getBoundingClientRect();
      var oldMonth = self.$month.cloneNode(true);
      var instanceBound = self.$instance.getBoundingClientRect();

      if (self.$lastAnimationCtn) {
        self.$lastAnimationCtn.removeClass('new').addClass('old');
      }

      var oldMonthCnt = ChromeCalendar_({
        "class": ['absol-chrome-calendar-month-animation-container', 'old'],
        style: {
          top: oldBound.top - instanceBound.top + 'px',
          height: oldBound.height + 'px',
          width: oldBound.width + 'px'
        },
        child: oldMonth
      }).addTo(self.$instance);

      self._viewDate = nextMonth(self._viewDate);
      self.viewMonth();
      var newMonth = self.$month.cloneNode(true);
      var overlap = 0;
      var j = 41;

      while (j >= 0 && self.$month.$cells[j].containsClass('absol-chrome-calendar-not-in-month')) {
        overlap += oldBound.height / 6;
        j -= 7;
      }

      var newMonthCtn = ChromeCalendar_({
        "class": ['absol-chrome-calendar-month-animation-container', 'new'],
        style: {
          top: oldBound.top + oldBound.height - instanceBound.top - overlap + 'px',
          height: oldBound.height + 'px',
          width: oldBound.width + 'px'
        },
        child: newMonth
      }).addTo(self.$instance);

      self.$lastAnimationCtn = newMonthCtn;
      setTimeout(function () {
        oldMonthCnt.addStyle('top', oldBound.top - oldBound.height + overlap - instanceBound.top + 'px');
        newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px');
      }, 20);
      setTimeout(function () {
        self.$lastAnimationCtn = undefined;
        oldMonthCnt.remove();
        newMonthCtn.remove();
      }, 220);
      setTimeout(rs, 22);
    });
  });
  return this.sync;
};

ChromeCalendar.prototype.viewPrevMonth = function () {
  var self = this;
  this.sync = this.sync.then(function () {
    return new Promise(function (rs) {
      var oldBound = self.$month.getBoundingClientRect();
      var oldMonth = self.$month.cloneNode(true);
      var instanceBound = self.$instance.getBoundingClientRect();

      if (self.$lastAnimationCtn) {
        self.$lastAnimationCtn.removeClass('new').addClass('old');
      }

      var oldMonthCnt = ChromeCalendar_({
        "class": ['absol-chrome-calendar-month-animation-container', 'old'],
        style: {
          top: oldBound.top - instanceBound.top + 'px',
          height: oldBound.height + 'px',
          width: oldBound.width + 'px'
        },
        child: oldMonth
      }).addTo(self.$instance);

      self._viewDate = prevMonth(self._viewDate);
      self.viewMonth();
      var newMonth = self.$month.cloneNode(true);
      var overlap = 0;
      var j = 0;

      while (j < 42 && self.$month.$cells[j].containsClass('absol-chrome-calendar-not-in-month')) {
        overlap += oldBound.height / 6;
        j += 7;
      }

      var newMonthCtn = ChromeCalendar_({
        "class": ['absol-chrome-calendar-month-animation-container', 'new'],
        style: {
          top: oldBound.top - oldBound.height + overlap - instanceBound.top + 'px',
          height: oldBound.height + 'px',
          width: oldBound.width + 'px'
        },
        child: newMonth
      }).addTo(self.$instance);

      self.$lastAnimationCtn = newMonthCtn;
      setTimeout(function () {
        oldMonthCnt.addStyle('top', oldBound.top + oldBound.height - overlap - instanceBound.top + 'px');
        newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px');
      }, 20);
      setTimeout(function () {
        self.$lastAnimationCtn = undefined;
        oldMonthCnt.remove();
        newMonthCtn.remove();
      }, 220);
      setTimeout(rs, 22);
    });
  });
  return this.sync;
};

ChromeCalendar.prototype.viewToday = function () {
  this._viewDate = new Date();

  switch (this._level) {
    case "day":
      this.viewMonth();
      break;

    case "month":
      break;

    case "year":
      this.viewEra(true);
      break;
  }
};

ChromeCalendar.prototype.viewMonth = function () {
  this._updateButtons();

  this.removeClass('view-year').removeClass('view-era').addClass('view-month');

  this._fillMonth(this.$month, this._viewDate);

  this._updateMonth(this.$month);

  this.$titleTime.innerHTML = formatDateString(this._viewDate, 'mmmm, yyyy');
};

ChromeCalendar.prototype.viewYear = function () {
  this.removeClass('view-month').removeClass('view-era').addClass('view-year');
  this.expandYear(this._viewDate.getFullYear());
  this.$yearScroller.requestUpdateSize();
};

ChromeCalendar.prototype.viewEra = function (animation) {
  this.removeClass('view-month').removeClass('view-year').addClass('view-era');
  this.scrollIntoDecade(Math.floor(this._viewDate.getFullYear() / 10) * 10, animation);
};

ChromeCalendar.prototype.viewNextDecade = function (animation) {
  this._viewDate = new Date(Math.min(2080, Math.floor(this._viewDate.getFullYear() / 10) * 10 + 10), 0, 1);
  this._viewDate = new Date(Math.min(this._viewDate.getTime(), prevDate(this._max).getTime()));
  this.viewEra(animation);
};

ChromeCalendar.prototype.viewPrevDecade = function (animation) {
  this._viewDate = new Date(Math.max(1890, Math.floor(this._viewDate.getFullYear() / 10) * 10 - 10), 0, 1);
  this._viewDate = new Date(Math.max(this._viewDate.getTime(), this._min.getTime()));
  this.viewEra(animation);
};

ChromeCalendar.prototype.expandYear = function (year) {
  if (this._level === 'month') {
    this._viewDate = new Date(year, 0, 1);
    this.$titleTime.innerHTML = formatDateString(this._viewDate, 'mmmm, yyyy');
    this.domSignal.emit('request_update_buttons');
  }

  var fontSize = this.getFontSize();
  var self = this;
  var lastItemElt = this.$lastOpenYearItem;
  var itemElt = this.$yearItems[year - 1890];
  var lastYear = 100000000;

  if (lastItemElt && lastItemElt.__year__ !== year) {
    lastYear = lastItemElt.__year__;
    lastItemElt.addClass('start-closing');
    setTimeout(function () {
      lastItemElt.removeClass('start-closing').addClass('closing');
    }, 0);
    setTimeout(function () {
      lastItemElt.removeClass('closing');
      lastItemElt.$months.remove();
      lastItemElt.$months = undefined;
    }, 100);
  }

  if (lastItemElt !== itemElt) {
    if (!itemElt.$months) {
      itemElt.$months = this._createMonths(year).addTo(itemElt);
      itemElt.addClass('start-opening');
      setTimeout(function () {
        itemElt.removeClass('start-opening').addClass('opening');
      }, 1);
      setTimeout(function () {
        itemElt.removeClass('opening');
      }, 100);
    }
  }

  var dy = itemElt.getBoundingClientRect().top - self.$yearScroller.getBoundingClientRect().top - fontSize * 0.45;

  if (itemElt.__year__ > lastYear) {
    dy -= 6 * fontSize;
  }

  self.$yearScroller.scrollBy(dy, 100);
  this.$lastOpenYearItem = itemElt;
  itemElt.$months.updateActiveMonth();
};

ChromeCalendar.prototype.scrollIntoDecade = function (startYear, animation) {
  if (!this.isDescendantOf(document.body)) {
    return this.sync.then(this.scrollIntoDecade.bind(this));
  }

  var thisCal = this;
  return new Promise(function (resolve) {
    var eraBound = thisCal.$era.getBoundingClientRect();
    var rowIdx = Math.floor((startYear - 1890) / 4);

    if (thisCal._decadeScrollTimeout > 0) {
      clearTimeout(thisCal._decadeScrollTimeout);
      thisCal._decadeScrollTimeout = -1;
    }

    if (thisCal.scrollIntoDecadeResolve) {
      thisCal.scrollIntoDecadeResolve();
      thisCal.scrollIntoDecadeResolve = null;
    }

    thisCal.scrollIntoDecadeResolve = resolve;
    var t0 = new Date().getTime();
    var t1 = t0 + 250;
    var y0 = thisCal.$era.scrollTop;
    var y1 = rowIdx * eraBound.height / 4;

    if (animation) {
      thisCal._decadeScrollTimeout = setTimeout(function tick() {
        var tc = new Date().getTime();
        var yc = Math.min(1, Math.pow((tc - t0) / (t1 - t0), 2)) * (y1 - y0) + y0;
        thisCal.$era.scrollTop = yc;

        if (tc < t1) {
          thisCal._decadeScrollTimeout = setTimeout(tick, 30);
        } else {
          thisCal._decadeScrollTimeout = -1;
          thisCal.scrollIntoDecadeResolve = null;
          resolve();
        }
      }, 30);
    } else {
      thisCal.$era.scrollTop = y1;
    }
  });
};

ChromeCalendar.prototype._updateButtons_day = function () {
  if (this._monthCmpLimit(prevMonth(this._viewDate)) < 0) {
    this.$prevBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled');
  }

  if (this._monthCmpLimit(nextMonth(this._viewDate)) > 0) {
    this.$nextBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled');
  }

  var now = new Date();

  if (this._monthCmpLimit(now) === 0) {
    this.$todayBtn.removeClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$todayBtn.addClass('absol-chrome-calendar-button-disabled');
  }
};

ChromeCalendar.prototype._updateButtons_year = function () {
  if (!this._viewDate) return;
  var year = Math.floor(this._viewDate.getFullYear() / 10) * 10;

  if (this._yearCmpLimit(new Date(year - 1, 0, 1)) < 0) {
    this.$prevBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled');
  }

  if (this._yearCmpLimit(new Date(year + 10, 0, 1)) > 0) {
    this.$nextBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled');
  }

  var now = new Date();

  if (this._yearCmpLimit(now) === 0) {
    this.$todayBtn.removeClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$todayBtn.addClass('absol-chrome-calendar-button-disabled');
  }
};

ChromeCalendar.prototype._updateButtons_month = function () {
  if (this._yearCmpLimit(new Date(this._viewDate.getFullYear() + 1, 0, 1)) > 0) {
    this.$nextBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled');
  }

  if (this._yearCmpLimit(new Date(this._viewDate.getFullYear() - 1, 0, 1)) < 0) {
    this.$prevBtn.addClass('absol-chrome-calendar-button-disabled');
  } else {
    this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled');
  }
};

ChromeCalendar.prototype._updateButtons = function () {
  var fName = '_updateButtons_' + this._level;
  this[fName] && this[fName]();
};

ChromeCalendar.prototype._createMonths = function (year) {
  var now = new Date();
  var self = this;

  var res = ChromeCalendar_({
    "class": 'absol-chrome-calendar-year-mounths',
    child: Array(3).fill('').map(function (u, i) {
      return {
        "class": 'absol-chrome-calendar-year-row-months',
        child: Array(4).fill(0).map(function (v, j) {
          var date = new Date(year, i * 4 + j, 1, 0, 0, 0, 0, 0);
          return {
            "class": ['absol-chrome-calendar-year-month'].concat(year == now.getFullYear() && now.getMonth() == i * 4 + j ? ['absol-chrome-calendar-today'] : []).concat(self._isSelectedMonth(date) ? ['absol-chrome-calendar-selected'] : []),
            child: {
              text: monthNames[i * 4 + j].substr(0, 3)
            },
            on: {
              click: function click() {}
            },
            props: {
              __date__: date
            }
          };
        })
      };
    }),
    on: {
      click: this.eventHandler.clickMonthsInYear
    }
  });

  res.$monthList = [];
  ChromeCalendar_$('.absol-chrome-calendar-year-month', res, function (e) {
    res.$monthList.push(e);
  });

  res.updateActiveMonth = function () {
    res.$monthList.forEach(function (e) {
      now = new Date();

      if (compareMonth(e.__date__, now) == 0) {
        e.addClass('absol-chrome-calendar-today');
      } else {
        e.removeClass('absol-chrome-calendar-today');
      }

      if (self._isSelectedMonth(e.__date__)) {
        e.addClass('absol-chrome-calendar-selected');
      } else {
        e.removeClass('absol-chrome-calendar-selected');
      }

      var beginOfMonth = datetime_beginOfMonth(e.__date__);
      var endOfMonth = prevDate(nextMonth(e.__date__));

      if (compareDate(self._min, endOfMonth) > 0 || compareDate(beginOfMonth, self._max) > 0) {
        e.addClass('absol-chrome-calendar-date-disabled');
      } else {
        e.removeClass('absol-chrome-calendar-date-disabled');
      }
    });
  };

  return res;
};

ChromeCalendar.prototype._yearInAre = function (year) {
  var d = year - 1890;
  var rowIdx = Math.floor(d / 4);
  var colIdx = d % 4;
  return this.$era.childNodes[rowIdx] && this.$era.childNodes[rowIdx].childNodes[colIdx];
};

ChromeCalendar.prototype._clearYearInAre = function (startYear) {
  var cellElt;

  for (var i = 0; i < 10; ++i) {
    cellElt = this._yearInAre(startYear + i);
    if (cellElt) cellElt.removeClass('absol-chrome-calendar-in-decade');
  }
};

ChromeCalendar.prototype._activeYearInAre = function (startYear) {
  var cellElt;

  for (var i = 0; i < 10; ++i) {
    cellElt = this._yearInAre(startYear + i);
    if (cellElt) cellElt.addClass('absol-chrome-calendar-in-decade');
  }
};

ChromeCalendar.prototype._updateYearInEra = function () {
  var eraBound = this.$era.getBoundingClientRect();
  var startYear = 1890 + 4 * Math.ceil((this.$era.scrollTop - eraBound.height / 16) * 4 / eraBound.height);
  var startDecade = Math.floor(startYear / 10) * 10;
  if (startDecade + 10 - startYear < 8) startDecade += 10;

  if (this._lastStartDecade !== startDecade) {
    if (this._lastStartDecade > 0) {
      this._clearYearInAre(this._lastStartDecade);
    }

    this._lastStartDecade = startDecade;

    this._activeYearInAre(startDecade);

    if (this._level === 'year') {
      this.$titleTime.innerHTML = startDecade + '-' + (startDecade + 10);

      if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) {
        if (this._yearCmpLimit(new Date(startDecade, 0, 1)) === 0) this._viewDate = new Date(startDecade, 0, 1);
      }
    }

    this.domSignal.emit('request_update_buttons');
  }
};

ChromeCalendar.prototype._updateDisabledYearInEra = function () {
  var self = this;
  Array.prototype.forEach.call(this.$era.childNodes, function (rowElt) {
    Array.prototype.forEach.call(rowElt.childNodes, function (cellElt) {
      if (cellElt.__year__) {
        if (self._yearCmpLimit(new Date(cellElt.__year__, 0, 1)) === 0) {
          cellElt.removeClass('absol-chrome-calendar-date-disabled');
        } else {
          cellElt.addClass('absol-chrome-calendar-date-disabled');
        }
      }
    });
  });
};

ChromeCalendar.prototype._updateOpenYear = function () {
  if (this.$lastOpenYearItem) {
    this.$lastOpenYearItem.$months.updateActiveMonth();
  }
};

ChromeCalendar.property = {};
ChromeCalendar.property.selectedDates = {
  set: function set(value) {
    value = value || [];
    if (value instanceof Date) value = [value];
    this._selectedDates = value;
    this._viewDate = this._selectedDates[0] || new Date();
    this.domSignal.emit('level_change');
    if (this._level === 'year') this.domSignal.emit('request_update_picked_years');
  },
  get: function get() {
    return this._selectedDates;
  }
};
ChromeCalendar.property.min = {
  set: function set(value) {
    if (!value) value = new Date(1890, 0, 1);
    if (typeof value == 'number') value = new Date(value);
    value = beginOfDay(value);
    value = new Date(Math.max(new Date(1890, 0, 1).getTime(), value.getTime()));
    this._min = value;
    this.domSignal.emit('request_update_buttons');
    this.domSignal.emit('request_update_month');
    this.domSignal.emit('request_update_open_year');
    this.domSignal.emit('request_update_disabled_year_in_era');
  },
  get: function get() {
    return this._min;
  }
}; //include maxLimitDate

ChromeCalendar.property.max = {
  set: function set(value) {
    if (!value) value = new Date(2090, 0, 1);
    if (typeof value == 'number') value = new Date(value);
    if (value.getTime() > beginOfDay(value).getTime()) value = nextDate(beginOfDay(value));
    value = new Date(Math.min(new Date(2090, 0, 1).getTime(), value.getTime()));
    this._max = value;
    this.domSignal.emit('request_update_buttons');
    this.domSignal.emit('request_update_month');
    this.domSignal.emit('request_update_open_year');
    this.domSignal.emit('request_update_disabled_year_in_era');
  },
  get: function get() {
    return this._max;
  }
};
ChromeCalendar.property.multiSelect = {
  set: function set(value) {
    throw new Error('Not support yet!');
    var lastValue = this.multiSelect;
    value = !!value;

    if (lastValue != value) {
      if (value) {
        this.addClass('multi-select');
      } else {
        this.removeClass('multi-select');
      }

      this._updateMonth(this.$month);
    }
  },
  get: function get() {
    return this.containsClass('multi-select');
  }
};
ChromeCalendar.property.level = {
  set: function set(value) {
    value = (value || '') + '';
    value = value.toLowerCase();
    if (['day', 'month', 'year'].indexOf(value) < 0) value = 'day';
    if (this._level === value) return;
    this.removeClass('as-level-' + this._level);
    this._level = value;
    this.addClass('as-level-' + this._level);
    this.domSignal.emit('level_change');
    if (this._level === 'year') this.domSignal.emit('request_update_picked_years');
  },
  get: function get() {
    return this._level;
  }
};
ChromeCalendar.property.viewDate = {
  set: function set(date) {
    this._viewDate = date;
    this.domSignal.emit('level_change');
  },
  get: function get() {
    return this._viewDate;
  }
};
ChromeCalendar.eventHandler = {};

ChromeCalendar.eventHandler.eraScroll = function () {
  this._updateYearInEra();
};

ChromeCalendar.eventHandler.clickEra = function (event) {
  var yearElt = event.target;
  var year = yearElt.__year__;
  if (typeof year !== "number") return;
  this.pickYear(year, event);
};

ChromeCalendar.eventHandler.clickPrev = function () {
  switch (this._level) {
    case "day":
      this.viewPrevMonth();
      break;

    case "month":
      this.expandYear(Math.min(this._max.getFullYear(), this._viewDate.getFullYear() - 1));
      break;

    case "year":
      if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) this.viewPrevDecade(true);
      break;
  }
};

ChromeCalendar.eventHandler.clickNext = function () {
  switch (this._level) {
    case "day":
      this.viewNexMonth();
      break;

    case "month":
      this.expandYear(Math.max(prevDate(this._min).getFullYear(), this._viewDate.getFullYear() + 1));
      break;

    case "year":
      if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) this.viewNextDecade(true);
      break;
  }
};

ChromeCalendar.eventHandler.clickToday = function (event) {
  this.viewToday();

  switch (this._level) {
    case "day":
      this.pickDate(new Date());
      break;

    case "month":
      this.expandYear(new Date().getFullYear());
      this.pickMonth(datetime_beginOfMonth(new Date()), event);
      break;

    case "year":
      this.pickYear(new Date().getFullYear());
      this._viewDate = new Date(new Date().getFullYear(), 0, 1);
      this.viewEra(true);
      break;
  }
};

ChromeCalendar.eventHandler.clickTitle = function (event) {
  switch (this._level) {
    case "day":
      this.viewYear();
      break;

    case "month":
      break;

    case "year":
      break;
  }
};

ChromeCalendar.eventHandler.clickMonthsInYear = function (event) {
  var monthElt = event.target;
  var date = monthElt.__date__;
  if (!date) return;

  switch (this._level) {
    case "day":
      this._viewDate = date;
      this.viewMonth();
      break;

    case "month":
      this.pickMonth(date, event);
      break;

    case "year":
      break;
  }
};

ChromeCalendar.eventHandler.levelChange = function () {
  switch (this._level) {
    case "day":
      this.viewMonth();
      break;

    case "month":
      this.viewYear();
      break;

    case "year":
      this.viewEra();
      break;
  }
};

absol_acomp_ACore.install(ChromeCalendar);
ChromeCalendar._session = Math.random() * 10000000000 >> 0;
ChromeCalendar._listener = undefined;

ChromeCalendar.showWhenClick = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
  var res = {
    calendarProps: Object.assign({
      maxDateLimit: null,
      minDateLimit: null
    }, calendarProps),
    anchor: anchor,
    currentSession: undefined,
    element: element,
    calendarPickListener: calendarPickListener,
    darkTheme: darkTheme,
    setDateValue: function setDateValue(value) {
      if (this.currentSession == ChromeCalendar._session) {
        ChromeCalendar.$calendar.selectedDates = [value];
      }
    },
    cancel: function cancel() {}
  };

  var clickHandler = function clickHandler() {
    if (ChromeCalendar._session == res.currentSession) return;
    res.currentSession = ChromeCalendar.show(res.element, res.calendarProps, res.anchor, res.calendarPickListener, res.darkTheme);

    var finish = function finish(event) {
      if (event && event.target && HTML5_EventEmitter.hitElement(ChromeCalendar.$calendar, event)) return;
      document.body.removeEventListener('click', finish, false);
      ChromeCalendar.close(res.currentSession);
      ChromeCalendar.$calendar.off('pick', finish);
      res.currentSession = undefined;

      res.cancel = function () {};
    };

    setTimeout(function () {
      document.body.addEventListener('click', finish, false);
      ChromeCalendar.$calendar.on('pick', finish);
      res.cancel = finish;
    }, 10);
  };

  res.remove = function () {
    element.removeEventListener('click', clickHandler, false);
  };

  element.addEventListener('click', clickHandler, false);
  return res;
};

ChromeCalendar.show = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
  ChromeCalendar._session = Math.random() * 10000000000 >> 0;

  function exec() {
    if (!ChromeCalendar.$ctn) {
      ChromeCalendar.$ctn = ChromeCalendar_('.absol-context-hinge-fixed-container');
      ChromeCalendar.$follower = ChromeCalendar_('follower').addTo(ChromeCalendar.$ctn);
      ChromeCalendar.$calendar = ChromeCalendar_('chromecalendar').on('pick', function (event) {
        if (typeof ChromeCalendar._listener == 'function') {
          ChromeCalendar._listener(event.value);
        }
      }).addTo(ChromeCalendar.$follower);
    }

    ChromeCalendar.$ctn.addTo(document.body); // only one value need

    if (calendarProps instanceof Date) calendarProps = {
      selectedDates: [calendarProps]
    };
    if (calendarProps instanceof Array) calendarProps = {
      selectedDates: calendarProps
    };
    Object.assign(ChromeCalendar.$calendar, calendarProps);
    if (darkTheme) ChromeCalendar.$ctn.addClass('dark');else ChromeCalendar.$ctn.removeClass('dark');
    ChromeCalendar.$follower.followTarget = element;
    ChromeCalendar.$follower.anchor = anchor;
    ChromeCalendar.$calendar.addStyle('visibility', 'hidden'); //for prevent size change blink

    ChromeCalendar._listener = calendarPickListener;
    setTimeout(function () {
      ChromeCalendar.$follower.updatePosition();
      ChromeCalendar.$calendar.removeStyle('visibility');
    }, 2);
  }

  if (document.body) exec();else HTML5_Dom.documentReady.then(exec);
  return ChromeCalendar._session;
};

ChromeCalendar.close = function (session) {
  if (session !== true && session != ChromeCalendar._session) return;

  function exec() {
    ChromeCalendar.followTarget = undefined;
    ChromeCalendar._listener = undefined;
    ChromeCalendar.$ctn.remove();
  }

  if (document.body) exec();else HTML5_Dom.documentReady.then(exec);
};

/* harmony default export */ const js_ChromeCalendar = (ChromeCalendar);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CalendarInput.js
function CalendarInput_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { CalendarInput_typeof = function _typeof(obj) { return typeof obj; }; } else { CalendarInput_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return CalendarInput_typeof(obj); }







var CalendarInput_ = absol_acomp_ACore._;
var CalendarInput_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function CalendarInput() {
  var thisCI = this;
  this.$input = CalendarInput_$('input', this);
  this._value = null;
  this._quickOption = js_ChromeCalendar.showWhenClick(this, {
    minLimitDate: this.minLimitDate || this.minDateLimit,
    maxLimitDate: this.maxLimitDate || this.maxDateLimit,
    selectedDates: [new Date()]
  }, 'auto', function (value) {
    thisCI._value = value;
    thisCI.$input.value = thisCI.formatDateString(value);
    thisCI._quickOption.calendarProps.selectedDates = [value]; //change new option

    thisCI.emit('change', {
      target: thisCI,
      value: value
    }, thisCI);
  });
  HTML5_OOP.drillProperty(this, this._quickOption.calendarProps, {
    minLimitDate: 'minLimitDate',
    maxLimitDate: 'maxLimitDate',
    minDateLimit: 'minLimitDate',
    maxDateLimit: 'maxLimitDate'
  });
}

CalendarInput.tag = 'CalendarInput'.toLowerCase();

CalendarInput.render = function () {
  return CalendarInput_({
    extendEvent: ['change'],
    "class": 'absol-calendar-input',
    child: 'input[type="text"][readonly="true"][value="dd/mm/yyyy"]'
  });
};

CalendarInput.property = {};
CalendarInput.property.value = {
  set: function set(value) {
    if (value === null || value === undefined) {
      this.$input.value = this.formatDateString(value);
      this._quickOption.calendarProps.selectedDates = [];
      this._value = value;
      this._quickOption.calendarProps.selectedDates = [new Date()];
    } else {
      if (typeof value == 'number') value = new Date(value);
      this._value = value;
      this.$input.value = this.formatDateString(value);
      this._quickOption.calendarProps.selectedDates = [value];
    }
  },
  get: function get() {
    return this._value;
  }
};
CalendarInput.property.disabled = {
  set: function set(value) {
    this.$input.disabled = !!value;

    if (value) {
      this.addClass('absol-disabled');
    } else {
      this.removeClass('absol-disabled');
    }
  },
  get: function get() {
    return this.$input.disabled;
  }
};
CalendarInput.attribute = {
  disabled: {
    set: function set(value) {
      this.$input.attr('disabled', value);
      if (this.$input.disabled) this.addClass('absol-disabled');
    },
    get: function get() {
      return this.$input.attr('disabled');
    },
    remove: function remove() {
      this.$input.attr('disabled', undefined);
      this.removeClass('absol-disabled');
    }
  }
};
CalendarInput.property.dateToString = {
  set: function set(value) {
    this._dateToString = value;
    this.$input.value = this.formatDateString(this.value);
  },
  get: function get() {
    return this._dateToString;
  }
};

CalendarInput.prototype.formatDateString = function (date) {
  if (!date) {
    return {
      'undefined': 'dd/mm/yyyy',
      'function': '--/--/--',
      'object': 'dd/mm/yyyy',
      'string': CalendarInput_typeof(this.dateToString)
    }[CalendarInput_typeof(this.dateToString)] || '--/--/--';
  }

  if (!this.dateToString) {
    return formatDateString(date);
  } else if (typeof this.dateToString == 'string') {
    return formatDateString(date, this.dateToString);
  } else if (typeof this.dateToString == 'function') {
    return this.dateToString(date);
  }
};

absol_acomp_ACore.install(CalendarInput);
function OldCalendarInput() {}
OldCalendarInput.tag = 'calendar-input';

OldCalendarInput.render = function (data) {
  return CalendarInput_({
    tag: 'calendarinput',
    extendEvent: 'changed',
    props: data,
    on: {
      change: function change(ev) {
        this.emit('changed', ev.value);
      }
    }
  });
};

absol_acomp_ACore.install(OldCalendarInput);
/* harmony default export */ const js_CalendarInput = (CalendarInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkboxinput.css
var checkboxinput = __webpack_require__(963);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBoxInput.js




var CheckBoxInput_ = absol_acomp_ACore._;
var CheckBoxInput_$ = absol_acomp_ACore.$;

var tickIcon = CheckBoxInput_(['<svg class="as-checkbox-input-check-icon" width="18px" height="18px" version="1.1" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg" >', ' <g transform="translate(0 -279)">', '  <path class="bound" d="m3 279.69h12c1.3434 0.0111 2.3298 1.5259 2.3131 2.4775v11.836c0.05005 0.89373-1.1834 2.2964-2.3131 2.3131h-12c-0.82692 0.0166-2.3131-1.1834-2.3131-2.3131v-12.237c0.0022374-1.171 0.3775-2.0759 2.3131-2.0759z" style="stroke-linejoin:round; stroke-width: 1"/>', '  <path class="tick" d="m3.1656 288.66c-0.10159 0.0612-0.11743 0.12506-0.12993 0.18899l3.7473 4.3467c0.066638 0.0459 0.11813 0.0263 0.16832 1e-3 0 0 1.7699-4.2166 4.7251-7.4568 1.4783-1.6208 3.2406-3.3659 3.2406-3.3659 0.0054-0.14125-0.10946-0.15807-0.1754-0.22551 0 0-2.5832 1.6364-4.7524 3.8336-1.8697 1.8939-3.6666 4.4016-3.6666 4.4016z"/>', '  <path class="minus" d="m4 287 h10 v2 h-10z"/>', ' </g>', '</svg>'].join(''));
/***
 * @extends AElement
 * @constructor
 */


function CheckboxInput() {
  this.$input = CheckBoxInput_$('input', this).on('change', this.notifyChange.bind(this));
  this.checked = false;
  this.disabled = false;
  this.on('click', this.eventHandler.click);
  this.onchange = null;
}

CheckboxInput.tag = "CheckboxInput".toLowerCase();

CheckboxInput.render = function (data) {
  return CheckBoxInput_({
    tag: 'label',
    extendEvent: 'change',
    "class": 'as-checkbox-input',
    child: [{
      elt: data && data.$input,
      tag: 'input',
      "class": 'as-checkbox-input-value',
      attr: {
        type: 'checkbox'
      }
    }, tickIcon.cloneNode(true)]
  });
};
/***
 * as normal, change event will be fired when checkbox change by system
 */


CheckboxInput.prototype.notifyChange = function () {
  var event = {
    checked: this.checked
  };
  this.emit('change', event, this);
};

CheckboxInput.prototype._updateCheckedClass = function () {
  if (this.checked) {
    this.addClass('as-checked');
  } else {
    this.removeClass('as-checked');
  }
};

CheckboxInput.property = {};
CheckboxInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }

    this.$input.disabled = !!value;
  },
  get: function get() {
    return this.$input.disabled;
  }
};
/***
 *
 * @type {CheckboxInput}
 */

CheckboxInput.property.checked = {
  set: function set(value) {
    this.$input.checked = !!value;

    this._updateCheckedClass();
  },
  get: function get() {
    return this.$input.checked;
  }
};
CheckboxInput.attribute = {
  checked: {
    set: function set(value) {
      if (value === 'false' || value === null) {
        this.checked = false;
      } else {
        this.checked = true;
      }
    },
    get: function get() {
      return this.checked ? 'true' : 'false';
    },
    remove: function remove() {
      this.checked = false;
    }
  },
  disabled: {
    set: function set(value) {
      if (value === 'false' || value === null) {
        this.disabled = false;
      } else {
        this.disabled = true;
      }
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  }
};
/***
 *
 * @type {CheckboxInput}
 */

CheckboxInput.eventHandler = {};

CheckboxInput.eventHandler.click = function () {
  this._updateCheckedClass();
};

absol_acomp_ACore.install(CheckboxInput);

CheckboxInput.autoReplace = function () {
  var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag));
  var ph;
  var attOfPH;
  var attrs;
  var style;
  var classList;
  var attNode;
  var attrName, attrValue;
  var props;

  for (var i = 0; i < placeHolders.length; ++i) {
    ph = placeHolders[i];
    attOfPH = ph.attributes;
    classList = [];
    style = {};
    attrs = {};
    props = {};

    for (var j = 0; j < attOfPH.length; ++j) {
      attNode = attOfPH[j];
      attrName = attNode.nodeName;
      attrValue = attNode.nodeValue;

      if (attrName == 'style') {
        attrValue.trim().split(';').reduce(function (style, prop) {
          var p = prop.split(':');

          if (p.length == 2) {
            style[p[0].trim()] = p[1].trim();
          }

          return style;
        }, style);
      } else if (attrName == 'class') {
        classList = attrValue.trim().split(/\s+/);
      } else if (attrName == 'onchange') {
        props.onchange = new Function('event', 'sender', attrValue);
      } else {
        attrs[attrName] = attrValue;
      }
    }

    var newElt = CheckBoxInput_({
      tag: this.tag,
      attr: attrs,
      "class": classList,
      style: style,
      props: props
    });

    CheckBoxInput_$(ph).selfReplace(newElt);
  }
};

CheckboxInput.initAfterLoad = function () {
  HTML5_Dom.documentReady.then(function () {
    CheckboxInput.autoReplace();
  });
};

/* harmony default export */ const CheckBoxInput = (CheckboxInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkbox.css
var css_checkbox = __webpack_require__(9338);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBox.js






var CheckBox_ = absol_acomp_ACore._;
var CheckBox_$ = absol_acomp_ACore.$;
var CheckBox_$$ = absol_acomp_ACore.$$;
/***
 * @extends AElement
 * @constructor
 */

function CheckBox() {
  this.defineEvent('change');
  /***
   *
   * @type {CheckboxInput}
   */

  this.$input = CheckBox_$('checkboxinput', this).on('change', this.notifyChange.bind(this));
  this.$labels = CheckBox_$$('span', this);
  this.on('click', this.eventHandler.click);
  HTML5_OOP.drillProperty(this, this.$input, ['checked']);
}

CheckBox.tag = 'checkbox';

CheckBox.render = function () {
  return CheckBox_({
    "class": ['absol-checkbox', 'as-no-label'],
    child: [{
      tag: 'span',
      "class": ['absol-checkbox-label', 'as-left'],
      child: {
        text: ''
      }
    }, 'checkboxinput', {
      tag: 'span',
      "class": ['absol-checkbox-label', 'as-right'],
      child: {
        text: ''
      }
    }]
  });
};

CheckBox.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    checked: this.checked,
    target: this
  }, this);
}; //v, labelText, checked


CheckBox.attribute = {
  checked: {
    set: function set(value) {
      if (value === 'false' || value == null) {
        this.checked = false;
      } else {
        this.checked = true;
      }
    },
    get: function get() {
      return this.checked ? 'true' : 'false';
    },
    remove: function remove() {
      this.checked = false;
    }
  },
  disabled: {
    set: function set(value) {
      if (value === 'false' || value === null) {
        this.disabled = false;
      } else {
        this.disabled = true;
      }
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  }
};
CheckBox.property = {};
CheckBox.property.text = {
  get: function get() {
    return this._text;
  },
  set: function set(value) {
    value = value || '';

    if (value.length === 0) {
      this.addClass('as-no-label');
    } else {
      this.removeClass('as-no-label');
    }

    this._text = value;
    this.$labels[0].firstChild.data = value;
    this.$labels[1].firstChild.data = value;
  }
};
CheckBox.property.disabled = {
  get: function get() {
    return this.$input.disabled;
  },
  set: function set(value) {
    value = !!value;
    this.$input.disabled = value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  }
};
/***
 *
 * @type {{}|CheckBox}
 */

CheckBox.eventHandler = {};

CheckBox.eventHandler.click = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$input, event)) {
    this.$input.click();
  }
};

absol_acomp_ACore.install(CheckBox);
/* harmony default export */ const js_CheckBox = (CheckBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/circlesectionlabel.css
var circlesectionlabel = __webpack_require__(6995);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CircleSectionLabel.js





var CircleSectionLabel_ = absol_acomp_ACore._;
var CircleSectionLabel_$ = absol_acomp_ACore.$;
var _g = HTML5_Svg.ShareInstance._;
var $g = HTML5_Svg.ShareInstance.$;
var Design = {
  circleHeight: 218 - 36,
  borderWidth: 36,
  textBoxHeight: 146,
  textHeight: 48,
  indexHeight: 54,
  textBoxPaddingLeft: 80,
  indexArrowRadius: (172 - 18) / 2,
  indexArrowStrokeWidth: 18,
  indexArrowStartAngle: -Math.PI / 6,
  indexArrowEndAngle: -7 * Math.PI / 12
};
var StyleSheet = {
  '.as-circle-section-label-text': {
    height: Design.textBoxHeight / Design.textHeight + 'em',
    'padding-left': Design.textBoxPaddingLeft / Design.textHeight + 'em',
    'line-height': Design.textBoxHeight / Design.textHeight + 'em'
  },
  '.as-circle-section-label-index': {
    'font-size': Design.indexHeight / Design.textHeight + 'em',
    height: (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em',
    'line-height': (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em',
    width: (Design.circleHeight + Design.borderWidth) / Design.indexHeight + 'em'
  }
};

CircleSectionLabel_({
  tag: 'style',
  id: 'circle-section-label-style',
  props: {
    innerHTML: Object.keys(StyleSheet).map(function (key) {
      var style = StyleSheet[key];
      return key + ' {\n' + Object.keys(style).map(function (propName) {
        return propName + ': ' + style[propName] + ';';
      }).join('\n') + '}';
    }).join('\n')
  }
}).addTo(document.head);
/**
 * @extends AElement
 * @constructor
 */


function CircleSectionLabel() {
  this._ident = (Math.random() + '').replace(/[^0-9]/g, '_');
  this.$background = CircleSectionLabel_$('.as-circle-section-label-background', this);
  this.$index = CircleSectionLabel_$('.as-circle-section-label-index', this);
  this.$text = CircleSectionLabel_$('.as-circle-section-label-text', this);
  this.$attachhook = CircleSectionLabel_('attachhook').addTo(this).on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
    this.requestUpdateSize();
  });
  this.$attachhook.requestUpdateSize = this.redrawBackground.bind(this);
  this.$svg = _g({
    tag: 'svg',
    attr: {
      width: '0',
      height: '0'
    },
    child: [{
      tag: 'defs',
      child: [{
        tag: 'marker',
        id: 'marker_' + this._ident,
        attr: {
          markerWidth: "4",
          markerHeight: "4",
          refX: "0",
          refY: "1",
          orient: "auto",
          markerUnits: "strokeWidth",
          viewBox: "0 0 4 4"
        },
        child: {
          tag: 'path',
          "class": 'as-circle-section-label-arrow-marker-path',
          attr: {
            d: 'M0,0 L0,2 L2,1 z'
          }
        }
      }]
    }, 'rect.as-circle-section-label-text-box', 'circle.as-circle-section-label-index-box', 'path.as-circle-section-label-arrow']
  }).addTo(this.$background);
  this.$indexBox = $g('circle.as-circle-section-label-index-box', this.$svg);
  this.$textBox = $g('rect.as-circle-section-label-text-box', this.$svg); // this.$marker = $g('defs marker', this.$svg);
  // this.$markerPath = $g(' path', this.$marker);

  this.$arrow = $g('path.as-circle-section-label-arrow', this.$svg).attr({
    'marker-end': "url(" + '#marker_' + this._ident + ")"
  });
}

;

CircleSectionLabel.prototype.redrawBackground = function () {
  var indexBound = this.$index.getBoundingClientRect();
  var textBound = this.$text.getBoundingClientRect();
  var cHeight = indexBound.height;
  var cWidth = textBound.right - indexBound.left;
  this.$svg.attr({
    height: cHeight + '',
    width: cWidth + '',
    viewBox: [0, 0, cWidth, cHeight].join(' ')
  });
  var borderWidth = cHeight * Design.borderWidth / (Design.circleHeight + Design.borderWidth);
  var radius = cHeight * Design.circleHeight / (Design.circleHeight + Design.borderWidth) / 2;
  var x0 = indexBound.width / 2;
  var y0 = cHeight / 2;
  this.$indexBox.attr({
    r: radius + '',
    cx: x0,
    cy: y0
  }).addStyle({
    strokeWidth: borderWidth + ''
  });
  var textBoxHeight = textBound.height;
  this.$textBox.attr({
    x: x0 / 2,
    y: (cHeight - textBoxHeight) / 2,
    width: cWidth - x0 - 1,
    height: textBoxHeight,
    rx: textBoxHeight / 2,
    ry: textBoxHeight / 2
  });
  var arrowRadius = cHeight * Design.indexArrowRadius / (Design.circleHeight + Design.borderWidth);
  this.$arrow.attr({
    d: ['M', x0 + arrowRadius * Math.cos(Design.indexArrowStartAngle), y0 + arrowRadius * Math.sin(Design.indexArrowStartAngle), 'A', arrowRadius, arrowRadius, 0, 1, 1, x0 + arrowRadius * Math.cos(Design.indexArrowEndAngle), y0 + arrowRadius * Math.sin(Design.indexArrowEndAngle)].join(' ')
  }).addStyle('stroke-width', cHeight * Design.indexArrowStrokeWidth / (Design.circleHeight + Design.borderWidth));
};

CircleSectionLabel.tag = 'CircleSectionLabel'.toLowerCase();

CircleSectionLabel.render = function () {
  return CircleSectionLabel_({
    "class": 'as-circle-section-label',
    child: [{
      "class": 'as-circle-section-label-background'
    }, '.as-circle-section-label-index', '.as-circle-section-label-text']
  });
};

CircleSectionLabel.property = {};
CircleSectionLabel.property.index = {
  set: function set(value) {
    this._index = value;
    this.$index.clearChild().addChild(CircleSectionLabel_({
      text: value + ''
    }));
  },
  get: function get() {
    return this._index;
  }
};
CircleSectionLabel.property.text = {
  set: function set(value) {
    this._text = value;
    this.$text.clearChild().addChild(CircleSectionLabel_({
      text: value + ''
    }));
  },
  get: function get() {
    return this._text;
  }
};
absol_acomp_ACore.install(CircleSectionLabel);
/* harmony default export */ const js_CircleSectionLabel = (CircleSectionLabel);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/contextmenu.css
var contextmenu = __webpack_require__(5843);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/menu.css
var menu = __webpack_require__(6538);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/follower.css
var follower = __webpack_require__(3138);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Follower.js





var Follower_ = absol_acomp_ACore._;
var Follower_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function Follower() {
  this.$attachhook = Follower_('attachhook', this).addTo(this).on('attached', function () {
    this.requestUpdateSize();
    HTML5_Dom.addToResizeSystem(this);
  });
  this.$attachhook.requestUpdateSize = this.updatePosition.bind(this);
  this.$followTarget = undefined;
  this.$scrollTrackElts = [];
  this._scrollTrackEventHandler = undefined;
  this._anchor = Follower.ANCHOR_PRIORITY;
  this.defineEvent(['updateposition', 'preupdateposition']);
}

Follower.tag = 'Follower'.toLowerCase();

Follower.render = function () {
  return Follower_('.absol-follower');
};

Follower.prototype.clearChild = function () {
  var children = Array.prototype.slice.call(this.children);
  var attachhookElt = this.$attachhook;
  children.forEach(function (elt) {
    if (elt != attachhookElt) elt.remove();
  });
}; //Todo: remove child, find child....

/**
 * X = $target.x + F[anchor_index][0] * $target.width + F[anchor_index][1] * $content.width
 * Y = $target.y + F[anchor_index][2] * $target.height + F[anchor_index][3] * $content.height
 */


Follower.ANCHOR_FACTORS = [[1, 0, 0, 0], //0
[0, 0, 1, 0], //1
[1, -1, 1, 0], //2
[0, -1, 0, 0], //3
[0, -1, 1, -1], //4
[1, -1, 0, -1], //5
[0, 0, 0, -1], //6
[1, 0, 1, -1], //7
[1, 0, 0.5, -0.5], //8
[0.5, -0.5, 1, 0], //9
[0, -1, 0.5, -0.5], //10
[0.5, -0.5, 0, -1], //11
[1, 0, 1, 0], //12
[0, -1, 1, 0], //13
[0, -1, 0, -1], //14
[1, 0, 0, -1] //15
];
Follower.ANCHOR_PRIORITY = [1, 6, 2, 5, 0, 7, 3, 4, 9, 11, 8, 10, 12, 15, 13, 14];

Follower.prototype.updatePosition = function () {
  if (!this.$followTarget) return;
  this.emit('preupdateposition', {
    target: this
  }, this);
  var targetBound = this.$followTarget.getBoundingClientRect();
  var screenSize = HTML5_Dom.getScreenSize();
  var outRect = new Math_Rectangle(0, 0, screenSize.width, screenSize.height);
  var bound = this.getBoundingClientRect();
  var x = 0;
  var y = 0;
  var score;
  var anchors = this._lastAnchor === undefined ? this.anchor : [this._lastAnchor].concat(this.anchor);
  var factor;
  var bestX,
      bestY,
      bestScore = -100000;
  var newContentRect;
  var bestAnchor;

  for (var i = 0; i < anchors.length; ++i) {
    factor = Follower.ANCHOR_FACTORS[anchors[i]];
    x = targetBound.left + factor[0] * targetBound.width + factor[1] * bound.width;
    y = targetBound.top + factor[2] * targetBound.height + factor[3] * bound.height;
    newContentRect = new Math_Rectangle(x, y, bound.width, bound.height);
    score = newContentRect.collapsedSquare(outRect);

    if (score - 10 > bestScore) {
      bestAnchor = anchors[i];
      bestScore = score;
      bestX = x;
      bestY = y;
    }
  }

  if (this._lastAnchor !== bestAnchor) {
    this.removeClass('as-anchor-' + this._lastAnchor);
    this._lastAnchor = bestAnchor;
    this.addClass('as-anchor-' + this._lastAnchor);
  }

  this.addStyle({
    left: bestX + 'px',
    top: bestY + 'px'
  });
  this.emit('updateposition', {
    target: this
  }, this);
};

Follower.prototype.refollow = function () {
  if (!this.$followTarget) return;
  this.updatePosition();
  this.addClass('following');
  if (this._scrollTrackEventHandler) this.unfollow();
  this._scrollTrackEventHandler = this.updatePosition.bind(this);
  this.$scrollTrackElts = [];
  var trackElt = this.$followTarget;

  while (trackElt) {
    if (trackElt.addEventListener) trackElt.addEventListener('scroll', this._scrollTrackEventHandler, false);else trackElt.attachEvent('onscroll', this._scrollTrackEventHandler, false);
    this.$scrollTrackElts.push(trackElt);
    trackElt = trackElt.parentElement;
  }

  if (document.addEventListener) {
    document.addEventListener('scroll', this._scrollTrackEventHandler, false);
  } else {
    document.attachEvent('onscroll', this._scrollTrackEventHandler, false);
  }

  this.$scrollTrackElts.push(document);
};

Follower.prototype.unfollow = function () {
  if (!this._scrollTrackEventHandler) return; // nothing to do

  this.removeClass('following');
  var trackElt;

  for (var i = 0; i < this.$scrollTrackElts.length; ++i) {
    trackElt = this.$scrollTrackElts[i];
    if (trackElt.removeEventListener) trackElt.removeEventListener('scroll', this._scrollTrackEventHandler, false);else trackElt.dettachEvent('onscroll', this._scrollTrackEventHandler, false);
  }

  this.$scrollTrackElts = [];
  this._scrollTrackEventHandler = undefined;
};

Follower.property = {};
Follower.property.followTarget = {
  set: function set(elt) {
    if (elt === null || elt === undefined || !elt) {
      this.unfollow();
      this.$followTarget = undefined;
      return;
    } else if (typeof elt == 'string') {
      elt = Follower_$(elt) || document.getElementById(elt);
    }

    if (HTML5_Dom.isDomNode(elt)) {
      this.$followTarget = elt;
      this._lastAncho = undefined;
      this.refollow();
    } else throw new Error("Invalid element");
  },
  get: function get() {
    return this.$followTarget;
  }
};
Follower.property.anchor = {
  set: function set(value) {
    value = value || Follower.ANCHOR_PRIORITY;
    if (value == 'auto') value = Follower.ANCHOR_PRIORITY;
    if (typeof value == null) value = [value];
    if (!(value instanceof Array)) throw new Error('Invalid anchor ' + value);
    value = value.map(function (x) {
      x = Math.floor(x);

      if (x >= 0 && x < Follower.ANCHOR_FACTORS.length) {
        return x;
      } else throw new Error("Invalid anchor: " + x);
    });
    this._anchor = value;
    this._lastAnchor = undefined;
    this.updatePosition();
  },
  get: function get() {
    return this._anchor;
  }
};
absol_acomp_ACore.install(Follower);
/* harmony default export */ const js_Follower = (Follower);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Menu.js







var Menu_ = absol_acomp_ACore._;
var Menu_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function MenuButton() {
  this.$text = Menu_$('.absol-vmenu-button-text', this);
  this.$key = Menu_$('.absol-vmenu-button-key', this);
  this.$arrow = Menu_$('.absol-vmenu-arrow', this);
  this.$iconCtn = Menu_$('.absol-vmenu-button-ext-icon-container', this);
  HTML5_OOP.drillProperty(this, this.$text, 'text', 'innerHTML');
  HTML5_OOP.drillProperty(this, this.$key, 'key', 'innerHTML');
}
MenuButton.tag = 'menubutton';

MenuButton.render = function () {
  return Menu_({
    tag: 'button',
    "class": 'absol-vmenu-button',
    child: [{
      "class": 'absol-vmenu-button-ext-icon-container',
      child: 'img.absol-vmenu-button-icon'
    }, '.absol-vmenu-button-text', '.absol-vmenu-button-key', {
      "class": 'absol-vmenu-arrow-container',
      child: 'span.absol-vmenu-arrow'
    }]
  });
};

MenuButton.property = {};
MenuButton.property.extendClasses = {
  set: function set(value) {
    var self = this;
    this.extendClasses.forEach(function (className) {
      self.removeClass(className);
    });
    this._extendClass = [];
    if (!value) return;

    if (typeof value == 'string') {
      value = value.split(/\s+/).filter(function (c) {
        return c.length > 0;
      });
    }

    if (value instanceof Array) {
      this._extendClass = value;

      this._extendClass.forEach(function (className) {
        self.addClass(className);
      });
    } else {
      throw new Error('Invalid extendClasses');
    }
  },
  get: function get() {
    return this._extendClass || [];
  }
};
MenuButton.property.icon = {
  set: function set(value) {
    this.$iconCtn.clearChild();
    this._icon = value;

    if (value) {
      Menu_(value).addTo(this.$iconCtn);
    }
  },
  get: function get() {
    return this._icon;
  }
};
MenuButton.property.iconSrc = {
  set: function set(value) {
    if (value) this.icon = {
      tag: 'img',
      props: {
        src: value
      }
    };else this.icon = value;
  },
  get: function get() {
    return this.icon && this.icon.props && this.icon.props.src;
  }
};
MenuButton.property.extendStyle = {
  set: function set(value) {
    this.removeStyle(this._extendStyle || {});
    this._extendStyle = value || {};
    this.addStyle(this.extendStyle);
  },
  get: function get() {
    return this._extendStyle || {};
  }
};
absol_acomp_ACore.install(MenuButton);
/***
 *
 * @extends Follower
 * @constructor
 */

function Dropdown() {
  this.$container = Menu_$('.absol-dropdown-content', this);
  this.$container.followTarget = this;
  this.$container.anchor = [1, 2, 6, 5];
}
Dropdown.tag = 'dropdown';

Dropdown.render = function () {
  return Menu_({
    "class": ['absol-drop-hidden', 'absol-dropdown'],
    child: 'follower.absol-dropdown-content.as-bscroller'
  });
};

Dropdown.property = {};
Dropdown.property.show = {
  set: function set(value) {
    if (value) {
      this.removeClass('absol-drop-hidden');

      if (this.$container.lastChild && this.$container.lastChild.$items) {
        this.$container.lastChild.$items.forEach(function (itemElt) {
          if (itemElt.autoFixParrentSize) {
            itemElt.autoFixParrentSize();
          }
        });
      }

      var aPst = this.findAvailablePosition();

      if (aPst.crampedHeight) {
        this.removeClass('overlap-top'); // this.$container.followTarget = null;?

        this.$container.addStyle({
          'max-height': aPst.maxHeight + 'px'
        });
        this.$container.refollow();
        this.$container.updatePosition();
        this.$container.addStyle('top', this.getBoundingClientRect().top + aPst.posTop + 'px');
      } else {
        this.$container.removeStyle('max-height').removeStyle('top');
        this.$container.refollow();
        this.$container.updatePosition();
      }
    } else {
      this.addClass('absol-drop-hidden');
    }
  },
  get: function get() {
    return !this.containsClass('absol-drop-hidden');
  }
};

Dropdown.prototype.findAvailablePosition = function () {
  var outBound = HTML5_Dom.traceOutBoundingClientRect(document.body);
  var containerBound = this.$container.getBoundingClientRect();
  var bound = this.getBoundingClientRect();
  var distTop = bound.top - outBound.top;
  var distLeft = bound.left - outBound.left;
  var distRight = -bound.right + outBound.right;
  var distBottom = -bound.bottom + outBound.bottom;
  var result = {};
  if (distLeft >= containerBound.width) result.left = true;
  if (distTop >= containerBound.height) result.top = true;
  if (distRight >= containerBound.width) result.right = true;
  if (distBottom >= containerBound.height) result.bottom = true;
  if (distRight + bound.width >= containerBound.width) result.overlapRight = true;
  if (distLeft + bound.width >= containerBound.width) result.overlapLeft = true;
  if (distBottom + bound.height >= containerBound.height) result.overlapBottom = true;
  if (distTop + bound.height >= containerBound.height) result.overlapTop = true;

  if (!result.overlapTop && !result.overlapBottom) {
    result.crampedHeight = true;
    result.maxHeight = outBound.height - 20;
    result.posTop = distBottom - Math.min(containerBound.height, result.maxHeight) + bound.height - 10;
  }

  return result;
};

Dropdown.prototype.addChild = function (child) {
  if (child instanceof Array) {
    for (var i = 0; i < child.length; ++i) {
      this.addChild(child[i]);
    }
  } else {
    if (!this.$trigger) {
      this["super"](child);
      this.$trigger = child;
    } else {
      this.$container.addChild(child);
    }
  }
};

Dropdown.prototype.clearChild = function () {
  if (this.$trigger) {
    this.$trigger.selfRemove();
    this.$trigger = undefined;
  }

  this.$container.clearChild();
};

Dropdown.prototype.init = function (props) {
  props = props || {};
  Object.assign(this, props);
};

function Dropright() {
  this.$container = Menu_$('.absol-dropright-content', this);
  this.$container.followTarget = this;
  this.$container.anchor = [0, 3, 7, 4];
}
Dropright.tag = 'dropright';

Dropright.render = function () {
  return Menu_({
    "class": ['absol-drop-hidden', 'absol-dropright'],
    child: 'follower.absol-dropright-content.as-bscroller',
    data: {
      $trigger: undefined,
      $content: undefined,
      _isShow: false
    }
  });
};

Object.assign(Dropright.prototype, Dropdown.prototype); //is the same

Dropright.prototype.addChild = Dropdown.prototype.addChild;
Dropright.prototype.clearChild = Dropdown.prototype.clearChild;
Dropright.property = Object.assign({}, Dropdown.property);
function VMenuLine() {
  return Menu_('<div class="absol-vmenu-line"><div></div></div>');
}
VMenuLine.tag = 'VMenuLine'.toLowerCase();
function VMenuItem() {
  var thisVM = this;
  this.sync = new Promise(function (rs) {
    Menu_('attachhook').addTo(thisVM).on('error', function () {
      this.remove();
      rs();
    });
  });
  this.$dropper = Menu_$('dropright', this);
  this.$vmenu = Menu_$('vmenu', this);
  this.$button = Menu_$('menubutton', this);
  this.$text = thisVM.$button.$text;
  this.$key = thisVM.$button.$key;
  this.$arrow = thisVM.$button.$arrow;
  this.$iconCtn = thisVM.$button.$iconCtn;
  HTML5_OOP.drillProperty(this, this.$button, ['text', 'extendClasses', 'extendStyle', 'key', 'icon', 'iconSrc']);
  HTML5_OOP.drillProperty(this, this.$vmenu, ['activeTab']);
  this.eventHandler = HTML5_OOP.bindFunctions(this, VMenuItem.eventHandler);
  this.$vmenu.on('press', this.eventHandler.pressItem, true);
  this.$button.on('click', this.eventHandler.clickButton, true);
  this.$button.on('mouseenter', this.eventHandler.enterButton, true);
  this._textMarginRight = 0;
}
VMenuItem.tag = 'VMenuItem'.toLowerCase();

VMenuItem.render = function () {
  return Menu_({
    tag: 'dropright',
    extendEvent: ['press', 'enter'],
    child: ['menubutton', {
      tag: 'vmenu'
    }]
  });
};

VMenuItem.prototype.init = function (props) {
  Object.assign(this, props || {});
  this.sync = this.sync.then(this.autoFixParrentSize.bind(this));
};

VMenuItem.prototype.autoFixParrentSize = function () {
  var parentWidth = this.$dropper.getBoundingClientRect().width; // dropper is fixed parent content size

  if (!parentWidth) return;
  var buttonWidth = this.$button.getBoundingClientRect().width;
  var fontSize = this.$text.getFontSize();
  this._textMarginRight = parentWidth - buttonWidth + this._textMarginRight;
  this.$text.addStyle('margin-right', this._textMarginRight / fontSize + 'em');
};

VMenuItem.eventHandler = {};

VMenuItem.eventHandler.enterButton = function (event) {
  event.menuItem = this;
  var newEvent = HTML5_EventEmitter.copyEvent(event);
  this.emit('enter', newEvent, this);
};

VMenuItem.eventHandler.pressItem = function (event) {
  var newEvent = HTML5_EventEmitter.copyEvent(event, {
    target: this
  });
  this.emit('press', newEvent, this);
};

VMenuItem.eventHandler.clickButton = function (event) {
  event.menuDontHide = this.items && this.items.length > 0;
  event.menuItem = this;
  event.vmenuItem = this;
  var newEvent = HTML5_EventEmitter.copyEvent(event, {
    target: this
  });
  this.emit('press', newEvent, this);
};

VMenuItem.property = {};
VMenuItem.property.items = {
  set: function set(items) {
    items = items || [];

    if (items.length > 0) {
      this.$arrow.addClass(['mdi', 'mdi-chevron-right']);
    } else {
      this.$arrow.removeClass(['mdi', 'mdi-chevron-right']);
    }

    this.$vmenu.items = items;
  },
  get: function get() {
    return this.$vmenu.items;
  }
};
VMenuItem.property.disable = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-menu-item-disable');
    } else {
      this.removeClass('absol-menu-item-disable');
    }
  },
  get: function get() {
    return this.containsClass('absol-menu-item-disable');
  }
};
function VMenu() {
  var thisVM = this;
  this.sync = new Promise(function (rs) {
    Menu_('attachhook').addTo(thisVM).on('error', function () {
      this.remove();
      rs();
    });
  });
}
VMenu.tag = 'vmenu';

VMenu.render = function () {
  return Menu_({
    "class": 'absol-vmenu',
    extendEvent: 'press'
  });
};

VMenu.property = {};
VMenu.property.activeTab = {
  set: function set(tabIndex) {
    this._activeTab = tabIndex;

    if (this.$items) {
      for (var i = 0; i < this.$items.length; ++i) {
        var item = this.$items[i];
        item.show = i == tabIndex && !item.disable;
        item.activeTab = -1;

        if (i == tabIndex && !item.disable) {
          item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-vmenu-button-hover');
        } else {
          item.$button && item.$button.removeClass('absol-vmenu-button-hover');
        }
      }
    }
  },
  get: function get() {
    return this._activeTab;
  }
};
VMenu.property.extendStyle = {
  set: function set(value) {
    this.removeStyle(this._extendStyle || {});
    this._extendStyle = value || {};
    this.addStyle(this.extendStyle);
  },
  get: function get() {
    return this._extendStyle || {};
  }
};
VMenu.property.extendClasses = {
  set: function set(value) {
    var self = this;
    this.extendClasses.forEach(function (className) {
      self.removeClass(className);
    });
    this._extendClass = [];
    if (!value) return;

    if (typeof value == 'string') {
      value = value.split(/\s+/).filter(function (c) {
        return c.length > 0;
      });
    }

    if (value instanceof Array) {
      this._extendClass = value;

      this._extendClass.forEach(function (className) {
        self.addClass(className);
      });
    } else {
      throw new Error('Invalid extendClasses');
    }
  },
  get: function get() {
    return this._extendClass || [];
  }
};
VMenu.eventHandler = {};

VMenu.eventHandler.enterItem = function (event) {
  var tabIndex = event.menuItem._tabIndex;
  this.activeTab = tabIndex;
};

VMenu.eventHandler.pressItem = function (event) {
  this.emit('press', HTML5_EventEmitter.copyEvent(event, {
    target: this
  }), this);
};

VMenu.property.items = {
  set: function set(items) {
    this._childFromItems(items || []);
  },
  get: function get() {
    return this.$items;
  }
};

VMenu.prototype.init = function (props) {
  Object.assign(this, props || {});
};

VMenu.prototype._childFromItems = function (items) {
  this.clearChild();
  this.$items = items.map(function (item, index) {
    var itemElt;

    if (typeof item === 'string' && (item.substr(0, 1) === '-' || item.substr(0, 1) === '=')) {
      itemElt = Menu_('vmenuline');
    } else if (isDomNode(item)) {
      itemElt = item;
    } else if (item.child || item["class"] || item.tag || item.style || typeof item === 'string') {
      itemElt = Menu_(item);
    } else {
      itemElt = Menu_({
        tag: 'vmenuitem',
        props: Object.assign({
          _tabIndex: index
        }, item),
        on: {
          enter: {
            callback: this.eventHandler.enterItem,
            cap: true
          },
          press: {
            callback: this.eventHandler.pressItem,
            cap: true
          }
        }
      });
    }

    this.addChild(itemElt);
    return itemElt;
  }.bind(this)); //todo
};

function HMenuItem() {
  this.$vmenu = Menu_$('vmenu', this);
  this.$dropDown = this;
  this.$button = Menu_$('button.absol-hmenu-button', this);
  HTML5_OOP.drillProperty(this, this.$button, 'text', 'innerHTML');
  HTML5_OOP.drillProperty(this, this.$vmenu, 'items');
  HTML5_OOP.drillProperty(this, this.$vmenu, 'activeTab');
  this.$button.on('click', this.eventHandler.clickButton);
  this.$button.on('mouseenter', this.eventHandler.enterButton, true);
  this.$vmenu.on('press', this.eventHandler.pressItem, true); //property show not need because dropdown is itself

  return this;
}
HMenuItem.tag = 'HMenuItem'.toLowerCase();

HMenuItem.render = function () {
  return Menu_({
    tag: 'dropdown',
    extendEvent: ['press', 'enter'],
    child: ['button.absol-hmenu-button', 'vmenu']
  });
};

HMenuItem.eventHandler = {};

HMenuItem.eventHandler.clickButton = function (event) {
  event.menuItem = this;
  event.hmenuItem = this;
  this.emit('press', HTML5_EventEmitter.copyEvent(event, {
    target: this
  }), this);
};

HMenuItem.eventHandler.enterButton = function (event) {
  event.menuItem = this;
  this.emit('enter', HTML5_EventEmitter.copyEvent(event, {
    target: this
  }), this);
};

HMenuItem.eventHandler.pressItem = function (event) {
  this.emit('press', HTML5_EventEmitter.copyEvent(event, {
    target: this
  }), this);
};

HMenuItem.prototype = {};
HMenuItem.prototype.disable = VMenuItem.prototype.disable;

HMenuItem.prototype.init = function (props) {
  props = props || {};
  Object.assign(this, props);
};
/***
 * @extends AElement
 * @constructor
 */


function HMenu() {}
HMenu.tag = 'hmenu';

HMenu.render = function () {
  return Menu_({
    "class": 'absol-hmenu',
    extendEvent: ['press', 'enter', 'activetab', 'cancel']
  });
};

HMenu.eventHandler = {};

HMenu.eventHandler.pressItem = function (event) {
  /**
   * this.activeTab can be undefined
   * undefine >= 0 => false
   * undefine < 0 => false
   */
  if (event.menuItem.items && event.menuItem.items.length > 0 && !(this.activeTab >= 0)) {
    this.activeTab = event.menuItem._tabIndex;
  } else {
    event.isLeaf = !event.menuItem.items || !event.menuItem.items.length;
    this.emit('press', event, this);
  }
};

HMenu.eventHandler.enterItem = function (event) {
  if (this.activeTab >= 0) {
    this.activeTab = event.menuItem._tabIndex;
  }
};

HMenu.eventHandler.clickSomewhere = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event)) return;
  this.activeTab = -1;
  window.removeEventListener('blur', this.eventHandler.clickSomewhere);
};

HMenu.prototype._childFromItems = function (items) {
  this.clearChild();
  this.$items = items.map(function (item, index) {
    var res = Menu_({
      tag: 'hmenuitem',
      props: Object.assign({
        _tabIndex: index
      }, item),
      on: {
        press: {
          callback: this.eventHandler.pressItem,
          cap: true
        },
        enter: {
          callback: this.eventHandler.enterItem,
          cap: true
        }
      }
    });

    this.addChild(res);
    return res;
  }.bind(this));
};

HMenu.prototype.init = function (props) {
  Object.assign(this, props || {});
};

HMenu.property = {};
HMenu.property.items = {
  set: function set(items) {
    this._childFromItems(items || []);
  },
  get: function get() {
    return this.$items;
  }
};
HMenu.property.activeTab = {
  set: function set(tabIndex) {
    var lastValue = this._activeTab;
    this._activeTab = tabIndex;

    for (var i = 0; i < this.$items.length; ++i) {
      var item = this.$items[i];
      item.show = i == tabIndex && !item.disable;
      item.activeTab = -1;

      if (i == tabIndex && !item.disable) {
        item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-hmenu-button-hover');
      } else {
        item.$button && item.$button.removeClass('absol-hmenu-button-hover');
      }
    }

    if (!(lastValue >= 0) && this._activeTab >= 0) {
      setTimeout(function () {
        Menu_$(document.body).on('click', this.eventHandler.clickSomewhere, false);
        window.addEventListener('blur', this.eventHandler.clickSomewhere);
      }.bind(this), 100);
    } else if (lastValue >= 0 && !(this._activeTab >= 0)) {
      Menu_$(document.body).off('click', this.eventHandler.clickSomewhere, false);
    }

    if (lastValue >= 0) {
      if (tabIndex >= 0 && tabIndex != lastValue) {
        this.emit('activetab', {
          type: 'activetab',
          tabIndex: tabIndex,
          target: this
        }, this);
      } else if (!(tabIndex >= 0)) {
        this.emit('cancel', {
          type: 'cancel',
          lastActiveIndex: lastValue,
          target: this
        }, this);
      }
    } else {
      if (tabIndex >= 0) {
        this.emit('activetab', {
          type: 'activetab',
          tabIndex: tabIndex,
          target: this
        }, this);
      }
    }
  },
  get: function get() {
    return this._activeTab;
  }
};
/***
 * @extends AElement
 * @constructor
 */

function VRootMenu() {
  this._items = [];
  this.items = [];
}
VRootMenu.tag = 'VRootMenu'.toLowerCase();

VRootMenu.render = function () {
  return Menu_({
    "class": ['as-v-root-menu'],
    extendEvent: ['press', 'enter', 'activetab', 'cancel']
  });
};

VRootMenu.prototype._childFromItems = function (items) {
  var thisM = this;
  this.clearChild();
  this.$items = items.map(function (item, i) {
    var itemElt;

    if (typeof item === 'string' && (item.substr(0, 1) === '-' || item.substr(0, 1) === '=')) {
      itemElt = Menu_('vmenuline');
    } else if (isDomNode(item)) {
      itemElt = item;
    } else if (item.child || item["class"] || item.tag || item.style || typeof item === 'string') {
      itemElt = Menu_(item);
    } else {
      itemElt = Menu_({
        tag: 'vmenuitem',
        props: item,
        on: {
          enter: thisM.eventHandler.enterItem,
          press: thisM.eventHandler.pressItem
        }
      });
    }

    itemElt._tabIndex = i;
    thisM.addChild(itemElt);
    return itemElt;
  });
};

VRootMenu.property = Object.assign({}, HMenu.property);
VRootMenu.eventHandler = Object.assign({}, HMenu.eventHandler);
absol_acomp_ACore.install([HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VRootMenu]);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ContextMenu.js










var ContextMenu_ = absol_acomp_ACore._;
var ContextMenu_$ = absol_acomp_ACore.$;
var supportContextEvent = false;
var isMobile = Detector_BrowserDetector.isMobile;
/**
 * @extends AElement
 * @constructor
 */

function ContextCaptor() {
  this.attachedElt = null;
  this.$textarea = ContextMenu_$('textarea', this).attr('readonly', 'true').on('contextmenu', this.eventHandler.contextmenu, true);
  this._ss = 0;
  this._isTouch = false;
  /**
   this._target = null;
   * @type {Vec2}
   */

  this._posStart = null;
  /**
   * @type {Vec2}
   */

  this._posCurrent = null;
  this._touchId = -100;
  this._longPressTimeout = -1;
  this._removeTimeout = -1;
  this._fireContextMenuTimeout = -1;
  this.$target = null;
  this._pointerSession = 0;
  this._lastContextSession = 0;
  this.mousedownEvent = null;
  this.sync = Promise.resolve();
}
;

ContextCaptor.prototype.attachTo = function (elt) {
  if (this.attachedElt) {
    this.attachedElt.removeEventListener('mousedown', this.eventHandler.mousedown);
    this.attachedElt.removeEventListener('touchstart', this.eventHandler.mousedown);
    this.attachedElt = null;
  }

  this.attachedElt = elt;

  if (this.attachedElt) {
    this.attachedElt.addEventListener('mousedown', this.eventHandler.mousedown);
    this.attachedElt.addEventListener('touchstart', this.eventHandler.mousedown);
  }

  return this;
};

ContextCaptor.tag = 'ContextCaptor'.toLowerCase();

ContextCaptor.render = function () {
  return ContextMenu_({
    "class": ['absol-context-menu-anchor'],
    extendEvent: 'requestcontextmenu',
    child: ['textarea']
  });
};

ContextCaptor.prototype.showContextMenu = function (x, y, props, onSelectItems) {
  var self = this;

  var anchor = ContextMenu_('.as-context-menu-ctn.absol-context-menu-anchor' + (isMobile ? '.as-anchor-modal' : '')).addTo(document.body);

  var finish = function finish(event) {
    document.body.off('click', finish).off('touchcancel', finish).off('touchend', finish).off('contextmenu', finish);
    anchor.off('click', touchModal);
    self.off('requestcontextmenu', finish);
    setTimeout(function () {
      anchor.selfRemove(); //
    }, 10);
  };

  function touchModal(event) {
    if (event.target.classList && event.target.classList.contains('as-anchor-modal')) {
      finish(event);
    }
  }

  var vmenu = ContextMenu_({
    tag: 'vmenu',
    props: props,
    on: {
      press: onSelectItems || function () {}
    }
  }).addTo(anchor);

  setTimeout(function () {
    if (!isMobile) {
      var screenSize = HTML5_Dom.getScreenSize();
      var menuBound = vmenu.getBoundingClientRect();

      if (x + menuBound.width > screenSize.width - 17) {
        x -= menuBound.width;
      }

      if (y + menuBound.height > screenSize.height - 17) {
        y -= menuBound.height;
      }

      anchor.addStyle({
        left: x + 'px',
        top: y + 'px'
      });
    }

    anchor.addClass('absol-active');
  }, 30);
  setTimeout(function () {
    ContextMenu_$(document.body).on('click', finish).on('contextmenu', finish);
    self.on('requestcontextmenu', finish);
    anchor.on('click', touchModal);
  }, 10);
};

ContextCaptor.prototype._checkNeedHandle = function (target) {
  var current = target;
  var needHandle = false;

  while (current && !needHandle && !current.classList.contains('as-system-context-menu')) {
    if (current.isSupportedEvent && current.isSupportedEvent('contextmenu')) needHandle = true;
    current = current.parentElement;
  }

  return needHandle;
};

ContextCaptor.prototype._fireContextMenuEvent = function () {
  if (this._lastContextSession >= this._pointerSession) return false; // prevent fire multi-times in a pointer session

  var showed = false;
  this._lastContextSession = this._pointerSession;
  var baseEventData = {
    clientX: this._posCurrent.x,
    clientY: this._posCurrent.y,
    target: this.$target
  };
  this.emit('requestcontextmenu', baseEventData, this);
  var self = this;
  var propagation = true;
  var localEvent = Object.assign({
    clientX: this._posCurrent.x,
    clientY: this._posCurrent.y,
    target: this.$target,
    showContextMenu: function showContextMenu(props, onSelectItems) {
      showed = true;
      self.sync = self.sync.then(function () {
        return new Promise(function (rs) {
          setTimeout(function () {
            self.showContextMenu(self._posCurrent.x, self._posCurrent.y, props, onSelectItems);
            rs();
          }, 30);
        });
      });
    },
    stopPropagation: function stopPropagation() {
      propagation = false;
    }
  }, baseEventData);
  Object.defineProperty(localEvent, 'selectedText', {
    get: function get() {
      return getSelectionText();
    }
  });
  var current = this.$target;

  while (current && propagation) {
    if (current.isSupportedEvent && current.isSupportedEvent('contextmenu')) {
      current.emit('contextmenu', localEvent, current, this);
    }

    current = current.parentElement;
  }

  return showed;
};
/**
 * @type {ContextCaptor}
 */


ContextCaptor.eventHandler = {};

ContextCaptor.eventHandler.mousedown = function (event) {
  if (this._touchId != -100) return;
  this._pointerSession++;
  var target;
  var isTouch;
  var touchId;
  var posCurrent;
  var pointer;

  if (event.type == 'touchstart') {
    isTouch = true;
    pointer = event.changedTouches[0];
    touchId = pointer.identifier;
  } else {
    isTouch = false;
    touchId = -1;
    pointer = event;
  }

  target = pointer.target;
  posCurrent = new Math_Vec2(pointer.clientX, pointer.clientY);

  if (isTouch) {
    var dragzone = js_BoardTable.prototype._findDragZone(target);

    if (dragzone) return;
    var thisCT = this;
    this._longPressTimeout = setTimeout(function () {
      if (!thisCT._checkNeedHandle(target)) return;

      if (thisCT._removeTimeout > 0) {
        clearTimeout(thisCT._removeTimeout);
        thisCT._removeTimeout = -1;
      }

      thisCT._ss++;
      thisCT.moveTo(thisCT._posCurrent);
      thisCT.active(true);
      thisCT._longPressTimeout = -1;

      if (thisCT._fireContextMenuTimeout >= 0) {
        clearTimeout(thisCT._fireContextMenuTimeout);
      } // show if device not support contextmenu event (after 700ms)


      thisCT._fireContextMenuTimeout = setTimeout(function () {
        if (!supportContextEvent) {
          thisCT._fireContextMenuEvent();
        }
      }, 300);
    }, 400);
    this.$target = target;
    this._isTouch = isTouch;
    this._touchId = touchId;
    this._posCurrent = posCurrent;
    this._posStart = posCurrent;
    ContextMenu_$(document.body).on('touchmove', thisCT.eventHandler.mousemove).on('touchend', thisCT.eventHandler.mousefinish).on('touchcancel', thisCT.eventHandler.mousefinish);
  } else {
    if (HTML5_EventEmitter.isMouseRight(event) && this._checkNeedHandle(target)) {
      if (this._removeTimeout > 0) {
        clearTimeout(this._removeTimeout);
        this._removeTimeout = -1;
      }

      this.$target = target;
      this._isTouch = isTouch;
      this._posCurrent = posCurrent;
      this._posStart = posCurrent;
      this._touchId = touchId;
      this._ss++;
      this.moveTo(this._posCurrent);
      this.active(true);
      ContextMenu_$(document.body).on('mousemove', this.eventHandler.mousemove).on('mouseup', this.eventHandler.mousefinish).on('mouseleave', this.eventHandler.mousefinish);
    }
  }
};
/**
 * @param {Vec2} pos
 */


ContextCaptor.prototype.moveTo = function (pos) {
  this.addStyle({
    left: pos.x - 80 + 'px',
    top: pos.y - 80 + 'px'
  });
};

ContextCaptor.prototype.active = function (flag) {
  if (flag) this.addClass('absol-active');else this.removeClass('absol-active');
};

ContextCaptor.eventHandler.mousemove = function (event) {
  var isTouch = this._isTouch;
  var touchId;
  var pointer;
  var posCurrent;

  if (isTouch) {
    pointer = event.changedTouches[0];
    touchId = pointer.identifier;
  } else {
    isTouch = false;
    touchId = -1;
    pointer = event;
  }

  if (touchId != this._touchId) return;
  posCurrent = new Math_Vec2(pointer.clientX, pointer.clientY);
  this._posCurrent = posCurrent;

  if (isTouch) {
    if (this._posStart.sub(posCurrent).abs() > 10) this.eventHandler.mousefinish(event);
  }

  this.moveTo(posCurrent);
};

ContextCaptor.eventHandler.mousefinish = function (event) {
  var isTouch = this._isTouch;
  var touchId;
  var pointer;

  if (isTouch) {
    pointer = event.changedTouches[0];
    touchId = pointer.identifier;
  } else {
    isTouch = false;
    touchId = -1;
    pointer = event;
  }

  if (touchId != this._touchId) return;

  if (isTouch) {
    ContextMenu_$(document.body).off('touchmove', this.eventHandler.mousemove).off('touchend', this.eventHandler.mousefinish).off('touchcancel', this.eventHandler.mousefinish);

    if (this._longPressTimeout > 0) {
      clearTimeout(this._longPressTimeout);
      this._longPressTimeout = -1;
    }
  } else {
    ContextMenu_$(document.body).off('mousemove', this.eventHandler.mousemove).off('mouseup', this.eventHandler.mousefinish).off('mouseleave', this.eventHandler.mousefinish);
  }

  this._touchId = -100;

  if (this._fireContextMenuTimeout >= 0) {
    clearTimeout(this._fireContextMenuTimeout);
  }

  var thisCT = this;
  this._removeTimeout = setTimeout(function () {
    thisCT.active(false);
    thisCT._removeTimeout = -1;
  }, 1);
};

ContextCaptor.eventHandler.contextmenu = function (event) {
  supportContextEvent = true;
  event.preventDefault();

  this._fireContextMenuEvent();
};

ContextCaptor.auto = function () {
  if (ContextCaptor.$elt) return;
  ContextCaptor.$elt = ContextMenu_('contextcaptor');
  HTML5_Dom.documentReady.then(function () {
    ContextCaptor.$elt.addTo(document.body);
    ContextCaptor.$elt.attachTo(document.body);
  });
};

absol_acomp_ACore.install(ContextCaptor);
/* harmony default export */ const ContextMenu = (ContextCaptor);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dateinput.css
var dateinput = __webpack_require__(6163);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInput.js






var DateInput_ = absol_acomp_ACore._;
var DateInput_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function DateInput() {
  this._lastValue = null;
  this._value = null;
  this._format = 'dd/mm/yyyy';
  this.$input = DateInput_$('input', this).on('mouseup', this.eventHandler.mouseup).on('keydown', this.eventHandler.keydown).on('paste', this.eventHandler.paste).on('cut', this.eventHandler.cut).on('focus', this.eventHandler.focus);
  this._minLimitDate = new Date(1890, 0, 1, 0, 0, 0, 0);
  this._maxLimitDate = new Date(2090, 0, 1, 0, 0, 0, 0);
  this.$calendarBtn = DateInput_$('.as-date-input-icon-ctn', this).on('mousedown', this.eventHandler.mousedownCalendarBtn);
  this._calendarHolder = js_ChromeCalendar.showWhenClick(this.$calendarBtn, {
    minLimitDate: this._minLimitDate,
    maxLimitDate: this._maxLimitDate,
    selectedDates: [new Date()]
  }, 'auto', this.eventHandler.calendarSelect);
  this._calendarHolder.element = this;
  this._formater = DateInput.formaters[this._format];
  HTML5_OOP.drillProperty(this, this._calendarHolder.calendarProps, ['minLimitDate', 'maxLimitDate']);
  this.value = null;
}

DateInput.formaters = {
  'dd/mm/yyyy': {
    separator: '/',
    nan: ['dd', 'mm', 'yyyy'],
    dayIdx: 0,
    monthIdx: 1,
    yearIdx: 2
  },
  'dd-mm-yyyy': {
    separator: '-',
    nan: ['dd', 'mm', 'yyyy'],
    dayIdx: 0,
    monthIdx: 1,
    yearIdx: 2
  },
  'dd.mm.yyyy': {
    separator: '.',
    nan: ['dd', 'mm', 'yyyy'],
    dayIdx: 0,
    monthIdx: 1,
    yearIdx: 2
  },
  'yyyy/mm/dd': {
    separator: '/',
    nan: ['yyyy', 'mm', 'dd'],
    dayIdx: 2,
    monthIdx: 1,
    yearIdx: 0
  },
  'yyyy-mm-dd': {
    separator: '-',
    nan: ['yyyy', 'mm', 'dd'],
    dayIdx: 2,
    monthIdx: 1,
    yearIdx: 0
  },
  'mm/dd/yyyy': {
    separator: '/',
    nan: ['mm', 'dd', 'yyyy'],
    dayIdx: 1,
    monthIdx: 0,
    yearIdx: 2
  }
};
DateInput.tag = 'dateinput';

DateInput.render = function () {
  //only support dd/mm/yyyy
  return DateInput_({
    "class": 'as-date-input',
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      props: {
        value: '__/__/____'
      }
    }, {
      "class": 'as-date-input-icon-ctn',
      child: 'span.mdi.mdi-calendar'
    }]
  });
};

DateInput.prototype._autoSelect = function () {
  var slEnd = this.$input.selectionEnd;
  var slStart = this.$input.selectionStart;
  var texts = this.$input.value.split(this._formater.separator);
  var lTexts = texts.reduce(function (ac, cr) {
    ac.push(ac[ac.length - 1] + cr.length + 1);
    return ac;
  }, [0]);

  function indexOf(offset) {
    var l;

    for (var i = 0; i < lTexts.length; ++i) {
      l = lTexts[i];
      if (l > offset) return i;
    }

    return texts.length;
  }

  var i0 = indexOf(slStart);
  var i1 = indexOf(slEnd);

  if (i0 == i1) {
    this.$input.selectionStart = lTexts[i0 - 1];
    this.$input.selectionEnd = lTexts[i0] - 1;
  } else {
    this.$input.selectionStart = 0;
    this.$input.selectionEnd = lTexts[lTexts.length - 1];
  }
};

DateInput.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    target: this,
    value: this._value
  }, this);
};

DateInput.prototype._countSeparator = function (text) {
  return text.replace(new RegExp('[^\\' + this._formater.separator + ']', 'g'), '').length;
};

DateInput.prototype._cleanCharacter = function (text) {
  return text.replace(new RegExp('[^0-9\\' + this._formater.separator + ']', 'g'), '');
};

DateInput.prototype._splitBySeparator = function (text) {
  return text.split(this._formater.separator);
};

DateInput.prototype._onlySeparator = function (text) {
  return text.replace(new RegExp('[^\\' + this._formater.separator + ']', 'g'), '');
};

DateInput.prototype._isAcceptKey = function (key) {
  return !!key.match(new RegExp('[0-9\\' + this._formater.separator + ']', 'i'));
};
/**
 * @type {DateInput}
 */


DateInput.eventHandler = {};

DateInput.eventHandler.paste = function (event) {
  var paste = (event.clipboardData || window.clipboardData).getData('text');
  event.preventDefault();
  paste = this._cleanCharacter(paste);
  var slEnd = this.$input.selectionEnd;
  var slStart = this.$input.selectionStart;
  var sStart = Math.min(slStart, slEnd);
  var sEnd = Math.max(slEnd, slStart);
  var value = this.$input.value;

  var slashPasteCount = this._countSeparator(paste);

  var slashSelectedCount = this._countSeparator(value.substr(sStart, sEnd - sStart));

  if (slashPasteCount < 2) {
    if (slashPasteCount > slashSelectedCount) {
      paste = this._splitBySeparator(paste).slice(0, slashSelectedCount + 1).join(this._formater.separator);
    } else if (slashPasteCount < slashSelectedCount) {
      paste += this._formater.separator.repeat(slashSelectedCount - slashPasteCount);
    }

    slStart = (value.substr(0, sStart) + paste).length;
    slEnd = slStart;
    value = value.substr(0, sStart) + paste + value.substr(sEnd);
  } else {
    value = this._splitBySeparator(paste).slice(0, 3).join(this._formater.separator);
    slStart = value.length;
    slEnd = value.length;
  }

  this.$input.value = value;
  this.$input.selectionStart = slStart;
  this.$input.selectionEnd = slEnd;
};

DateInput.eventHandler.cut = function (event) {
  event.preventDefault();
  var slEnd = this.$input.selectionEnd;
  var slStart = this.$input.selectionStart;
  var sStart = Math.min(slStart, slEnd);
  var sEnd = Math.max(slEnd, slStart);
  var value = this.$input.value;
  this.$input.value = value.substr(0, sStart) + this._onlySeparator(value.substr(sStart, sEnd - sStart)) + value.substr(sEnd);
  this.$input.selectionStart = slStart;
  this.$input.selectionEnd = slStart;
};

DateInput.eventHandler.mouseup = function () {
  setTimeout(this._autoSelect.bind(this), 1);
};

DateInput.eventHandler.focus = function () {
  this.$input.on('blur', this.eventHandler.blur);
};

DateInput.eventHandler.blur = function () {
  var thisIp = this;
  this.$input.off('blur', this.eventHandler.blur);
  var value = this.$input.value;

  var slashValueCount = this._countSeparator(value).length;

  for (var i = slashValueCount; i < 2; ++i) {
    value += this._formater.separator;
  }

  var texts = value.split(this._formater.separator).slice(0, 3);
  var day = parseInt(texts[this._formater.dayIdx]);
  var month = parseInt(texts[this._formater.monthIdx]);
  var year = parseInt(texts[this._formater.yearIdx]);
  if (!isNaN(year)) year = Math.min(2090, Math.max(year, 1890));
  if (!isNaN(month)) month = Math.max(1, Math.min(12, month));

  if (!isNaN(day)) {
    day = Math.max(1, Math.min(31, day));

    if (!isNaN(month)) {
      day = Math.min(daysInMonth(2000, month), day);
      if (!isNaN(year)) day = Math.min(daysInMonth(year, month), day);
    }
  }

  if (!isNaN(year) && !isNaN(month) && !isNaN(day)) {
    var dateValue = new Date(year, month - 1, day, 0, 0, 0, 0);

    if (this._lastValue == null || compareDate(dateValue, this._lastValue) != 0) {
      this.value = dateValue;
      this.notifyChange();
    }
  } else {
    var values = this._formater.nan.slice();

    values[this._formater.dayIdx] = day;
    values[this._formater.monthIdx] = month;
    values[this._formater.yearIdx] = year;
    this.$input.value = values.map(function (e, i) {
      if (isNaN(e)) return thisIp._formater.nan[i];
      e = e + '';

      while (e.length < thisIp._formater.nan[i].length) {
        e = '0' + e;
      }

      return e;
    }).join(this._formater.separator);

    if (this._lastValue != null) {
      this._value = null;
      this.notifyChange();
    }
  }
};

DateInput.eventHandler.calendarSelect = function (value) {
  this.value = value;
  this.notifyChange();
};

DateInput.eventHandler.keydown = function (event) {
  var slEnd = this.$input.selectionEnd;
  var slStart = this.$input.selectionStart;
  var value = this.$input.value;
  var sStart = Math.min(slStart, slEnd);
  var sEnd = Math.max(slEnd, slStart);
  var selectedValue = value.substr(sStart, sEnd - sStart);

  var slashValueCount = this._countSeparator(value);

  var slashSelectedCount = this._countSeparator(selectedValue);

  var texts = this._splitBySeparator(value);

  var lTexts = texts.reduce(function (ac, cr) {
    ac.push(ac[ac.length - 1] + cr.length + 1);
    return ac;
  }, [0]);

  function indexOf(offset) {
    var l;

    for (var i = 0; i < lTexts.length; ++i) {
      l = lTexts[i];
      if (l > offset) return i;
    }

    return texts.length;
  }

  var i0 = indexOf(slStart);
  var i1 = indexOf(slEnd);

  if (event.key == 'Enter') {
    event.preventDefault();
    this.$input.blur();
  } else if (event.key == 'Meta') {
    event.preventDefault();
  } else if (event.key == 'Backspace') {
    if (slStart == slEnd) {
      if (slStart > 0) {
        if (value.charAt(slStart - 1) == this._formater.separator) {
          event.preventDefault();
          this.$input.value = value;
          this.$input.selectionStart = slStart - 1;
          this.$input.selectionEnd = slStart - 1;
        }
      }
    } else if (i0 != i1) {
      event.preventDefault();
      this.$input.value = value.substr(0, sStart) + this._onlySeparator(selectedValue) + value.substr(sEnd);
      this.$input.selectionStart = slStart;
      this.$input.selectionEnd = slStart;
    }
  } else if (event.key == 'Delete') {
    if (slStart == slEnd) {
      if (slStart < value.length) {
        if (value.charAt(slStart) == this._formater.separator) {
          event.preventDefault();
          this.$input.value = value;
          this.$input.selectionStart = slStart + 1;
          this.$input.selectionEnd = slStart + 1;
        }
      }
    } else if (i0 != i1) {
      event.preventDefault();
      this.$input.value = value.substr(0, sStart) + this._onlySeparator(selectedValue) + value.substr(sEnd);
      this.$input.selectionStart = slStart;
      this.$input.selectionEnd = slStart;
    }
  } else if (!event.ctrlKey && !event.altKey && event.key && event.key.length == 1) {
    if (this._isAcceptKey(event.key)) {
      if (event.key == this._formater.separator) {
        if (slashSelectedCount == 0 && slashValueCount >= 2 && value.charAt(slEnd) != this._formater.separator) {
          event.preventDefault();
        } else if (value.charAt(slEnd) == this._formater.separator) {
          event.preventDefault();
          this.$input.selectionStart = lTexts[i1];
          this.$input.selectionEnd = lTexts[i1 + 1] - 1;
        }
      }
    } else {
      event.preventDefault();
    }
  } else if (!event.ctrlKey && !event.altKey && event.key == "Tab") {
    if (event.shiftKey) {
      if (i0 > 1) {
        event.preventDefault();
        this.$input.selectionStart = lTexts[i1 - 2];
        this.$input.selectionEnd = lTexts[i1 - 1] - 1;
      }
    } else {
      if (i1 < texts.length) {
        event.preventDefault();
        this.$input.selectionStart = lTexts[i1];
        this.$input.selectionEnd = lTexts[i1 + 1] - 1;
      }
    }
  }
};

DateInput.property = {};
DateInput.property.value = {
  set: function set(value) {
    if (value === false || value === null || value === undefined) {
      this.$input.value = this._format;
      this._value = null;
    } else if (typeof value == 'string' || typeof value == 'number') {
      this._value = beginOfDay(new Date(value));
      this.$input.value = formatDateString(this._value, this._format);
    } else if (value.getTime) {
      this._value = beginOfDay(value);
      this.$input.value = formatDateString(this._value, this._format);
    }

    this._lastValue = this._value;
    this._calendarHolder.calendarProps.selectedDates = [this._value || new Date()];
  },
  get: function get() {
    return this._value;
  }
};
DateInput.property.format = {
  set: function set(value) {
    value = value || 'dd/mm/yyyy';
    if (value == this._format) return;

    if (DateInput.formaters[value]) {
      this._formater = DateInput.formaters[value];
      this._format = value;
      this.value = this.value;
    } else {
      throw new Error("Not support format " + value);
    }
  },
  get: function get() {
    return this._format;
  }
};
DateInput.property.disabled = {
  set: function set(value) {
    value = !!value;
    this.$input.disabled = value;
    if (value) this.addClass('as-disabled');else this.removeClass('as-disabled');
  },
  get: function get() {
    return this.$input.disabled;
  }
};
absol_acomp_ACore.install(DateInput);
/* harmony default export */ const js_DateInput = ((/* unused pure expression or super */ null && (DateInput)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/datetimeinput.css
var datetimeinput = __webpack_require__(2863);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometimepicker.css
var chrometimepicker = __webpack_require__(7442);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTimePicker.js




/***
 * @extends AElement
 * @constructor
 */

function ChromeTimePicker() {
  this._hour = 0;
  this._minute = 0;
  this.$lists = $$('.as-chrome-time-picker-list', this);
  this.$hourList = this.$lists[0];
  this.$hourList.on('scroll', this.eventHandler.hourScroll).on('click', this.eventHandler.clickHourList);
  this.$hour24List = this.$lists[1];
  this.$hour24List.on('scroll', this.eventHandler.hour24Scroll).on('click', this.eventHandler.clickHour24List);
  this.$minList = this.$lists[2];
  this.$minList.on('scroll', this.eventHandler.minScroll).on('click', this.eventHandler.clickMinList);
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$attachhook).on('request_scroll_into_selected', this._scrollIntoSelected.bind(this));
  this.$amBtn = $('.as-chrome-time-picker-btn[data-value="AM"]', this).on('click', this.eventHandler.clickAM);
  this.$pmBtn = $('.as-chrome-time-picker-btn[data-value="PM"]', this).on('click', this.eventHandler.clickPM);
  this.scrollIntoSelected();
  this.hour = 0;
  this.minute = 0;
  this.s24 = false;
  $$('.as-chrome-time-picker-scroller', this).forEach(this._makeScroller.bind(this));
}

ChromeTimePicker.tag = 'ChromeTimePicker'.toLowerCase();

ChromeTimePicker.render = function () {
  return ACore_({
    "class": 'as-chrome-time-picker',
    extendEvent: ['change'],
    child: [{
      "class": ['as-chrome-time-picker-scroller', 'as-chrome-time-picker-scroller-h12'],
      child: [{
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-up',
        child: 'span.mdi.mdi-chevron-up'
      }, {
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-down',
        child: 'span.mdi.mdi-chevron-down'
      }, {
        "class": ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h12'],
        child: {
          "class": 'as-chrome-time-picker-list',
          child: Array(36).fill(0).map(function (u, i) {
            return {
              tag: 'button',
              "class": 'as-chrome-time-picker-btn',
              child: {
                tag: 'span',
                child: {
                  text: i % 12 + 1 + ''
                }
              },
              props: {
                __hour__: i % 12 + 1
              }
            };
          })
        }
      }]
    }, {
      "class": ['as-chrome-time-picker-scroller', 'as-chrome-time-picker-scroller-h24'],
      child: [{
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-up',
        child: 'span.mdi.mdi-chevron-up'
      }, {
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-down',
        child: 'span.mdi.mdi-chevron-down'
      }, {
        "class": ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h24'],
        child: {
          "class": 'as-chrome-time-picker-list',
          child: Array(24 * 3).fill(0).map(function (u, i) {
            return {
              tag: 'button',
              "class": 'as-chrome-time-picker-btn',
              child: {
                tag: 'span',
                child: {
                  text: i % 24 + ''
                }
              },
              props: {
                __hour__: i % 24
              }
            };
          })
        }
      }]
    }, {
      "class": 'as-chrome-time-picker-scroller',
      child: [{
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-up',
        child: 'span.mdi.mdi-chevron-up'
      }, {
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-down',
        child: 'span.mdi.mdi-chevron-down'
      }, {
        "class": 'as-chrome-time-picker-viewport',
        child: {
          "class": 'as-chrome-time-picker-list',
          child: Array(180).fill(0).map(function (u, i) {
            return {
              tag: 'button',
              "class": 'as-chrome-time-picker-btn',
              child: {
                tag: 'span',
                child: {
                  text: i % 60 + ''
                }
              },
              props: {
                __min__: i % 60
              }
            };
          })
        }
      }]
    }, {
      "class": ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-period'],
      child: ['AM', 'PM'].map(function (u) {
        return {
          tag: 'button',
          "class": 'as-chrome-time-picker-btn',
          attr: {
            'data-value': u
          },
          child: {
            tag: 'span',
            child: {
              text: u
            }
          },
          props: {
            __APM__: u
          }
        };
      })
    }]
  });
};

ChromeTimePicker.prototype._makeScroller = function (rootElt) {
  var upBtn = $('.as-chrome-time-picker-scroller-up', rootElt);
  var downBtn = $('.as-chrome-time-picker-scroller-down', rootElt);
  var listElt = $('.as-chrome-time-picker-list', rootElt);
  var delta = 0;

  function tick() {
    if (delta === 0) return;
    listElt.scrollTop -= delta;
    requestAnimationFrame(tick);
  }

  function cancel() {
    delta = 0;
    document.body.removeEventListener('mouseup', cancel);
    document.body.removeEventListener('mouseleave', cancel);
  }

  upBtn.on('mousedown', function () {
    delta = 5;
    document.body.addEventListener('mouseup', cancel);
    document.body.addEventListener('mouseleave', cancel);
    tick();
  });
  downBtn.on('mousedown', function () {
    delta = -5;
    document.body.addEventListener('mouseup', cancel);
    document.body.addEventListener('mouseleave', cancel);
    tick();
  });
};

ChromeTimePicker.prototype.scrollIntoSelected = function () {
  this.domSignal.emit('request_scroll_into_selected');
};

ChromeTimePicker.prototype._scrollIntoSelected = function () {
  var hour = this._hour;
  this.$hour24List.scrollTop = (hour + 24) * 28;
  hour = this._hour % 12;
  if (hour === 0) hour = 12;
  this.$hourList.scrollTop = (hour + 11) * 28;
  this.$minList.scrollTop = (this._minute + 60) * 28;
};

ChromeTimePicker.prototype.notifyChange = function (event) {
  this.emit('change', {
    type: 'change',
    originEvent: event,
    dayOffset: this.dayOffset,
    hour: this.hour,
    minute: this.minute,
    target: this
  }, this);
};

ChromeTimePicker.property = {};
ChromeTimePicker.property.hour = {
  set: function set(value) {
    value = value % 24 || 0;
    var prevVal = this._hour;
    this.$hour24List.childNodes[prevVal].removeClass('as-selected');
    this.$hour24List.childNodes[prevVal + 24].removeClass('as-selected');
    this.$hour24List.childNodes[prevVal + 48].removeClass('as-selected');
    prevVal = this._hour % 12;
    if (prevVal === 0) prevVal = 12;
    this.$hourList.childNodes[prevVal - 1].removeClass('as-selected');
    this.$hourList.childNodes[prevVal - 1 + 12].removeClass('as-selected');
    this.$hourList.childNodes[prevVal - 1 + 24].removeClass('as-selected');
    this._hour = value;
    prevVal = this._hour;
    this.$hour24List.childNodes[prevVal].addClass('as-selected');
    this.$hour24List.childNodes[prevVal + 24].addClass('as-selected');
    this.$hour24List.childNodes[prevVal + 48].addClass('as-selected');
    prevVal = this._hour % 12;
    if (prevVal === 0) prevVal = 12;
    this.$hourList.childNodes[prevVal - 1].addClass('as-selected');
    this.$hourList.childNodes[prevVal - 1 + 12].addClass('as-selected');
    this.$hourList.childNodes[prevVal - 1 + 24].addClass('as-selected');

    if (this._hour >= 12) {
      this.$pmBtn.addClass('as-selected');
      this.$amBtn.removeClass('as-selected');
    } else {
      this.$amBtn.addClass('as-selected');
      this.$pmBtn.removeClass('as-selected');
    }
  },
  get: function get() {
    return this._hour;
  }
};
ChromeTimePicker.property.minute = {
  set: function set(value) {
    value = value % 60 || 0;
    var prevVal = this._minute;
    this.$minList.childNodes[prevVal].removeClass('as-selected');
    this.$minList.childNodes[prevVal + 60].removeClass('as-selected');
    this.$minList.childNodes[prevVal + 120].removeClass('as-selected');
    this._minute = value;
    prevVal = this._minute;
    this.$minList.childNodes[prevVal].addClass('as-selected');
    this.$minList.childNodes[prevVal + 60].addClass('as-selected');
    this.$minList.childNodes[prevVal + 120].addClass('as-selected');
  },
  get: function get() {
    return this._minute;
  }
};
ChromeTimePicker.property.dayOffset = {
  set: function set(value) {
    value = value || 0;
    if (value.getTime) value = value.getTime() - beginOfDay(value).getTime();else {
      value = value % MILLIS_PER_DAY;
    }
    this.hour = Math.floor(value / MILLIS_PER_HOUR);
    this.minute = Math.floor(value % MILLIS_PER_HOUR / MILLIS_PER_MINUTE);
    this.domSignal.emit('request_scroll_into_selected');
  },
  get: function get() {
    return this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE;
  }
};
ChromeTimePicker.property.s24 = {
  set: function set(value) {
    if (value) {
      this.addClass('as-24h-clock');
    } else {
      this.removeClass('as-24h-clock');
    }
  },
  get: function get() {
    return this.containsClass('as-24h-clock');
  }
};
ChromeTimePicker.eventHandler = {};

ChromeTimePicker.eventHandler.hourScroll = function () {
  var y = this.$hourList.scrollTop;
  var dy = 0;
  if (y < 28 * 12) dy = 28 * 12;else if (y > 28 * 24) {
    dy = -28 * 12;
  }

  if (dy !== 0) {
    this.$hourList.scrollTop += dy;
  }
};

ChromeTimePicker.eventHandler.hour24Scroll = function () {
  var y = this.$hour24List.scrollTop;
  var dy = 0;
  if (y < 28 * 24) dy = 28 * 24;else if (y > 28 * 48) {
    dy = -28 * 24;
  }

  if (dy !== 0) {
    this.$hour24List.scrollTop += dy;
  }
};

ChromeTimePicker.eventHandler.minScroll = function () {
  var y = this.$minList.scrollTop;
  var dy = 0;
  if (y < 28 * 60) dy = 28 * 60;else if (y > 28 * 120) {
    dy = -28 * 60;
  }

  if (dy !== 0) {
    this.$minList.scrollTop += dy;
  }
};

ChromeTimePicker.eventHandler.clickHourList = function (event) {
  var hour;
  if ('__hour__' in event.target) hour = event.target.__hour__;
  if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__;

  if (hour !== undefined) {
    if (this.hour >= 12) {
      this.hour = hour === 12 ? hour : hour + 12;
    } else {
      this.hour = hour === 12 ? 0 : hour;
    }

    if ((hour - 1 + 12) * 28 < this.$hourList.scrollTop) {
      this.$hourList.scrollTop = (hour - 1 + 12) * 28;
    } else if ((hour - 1 + 13) * 28 > this.$hourList.scrollTop + this.$hourList.clientHeight) {
      this.$hourList.scrollTop = (hour - 1 + 13) * 28 - this.$hourList.clientHeight;
    }

    this.notifyChange(event);
  }
};

ChromeTimePicker.eventHandler.clickHour24List = function (event) {
  var hour;
  if ('__hour__' in event.target) hour = event.target.__hour__;
  if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__;

  if (hour !== undefined) {
    this.hour = hour;

    if ((hour + 24) * 28 < this.$hourList.scrollTop) {
      this.$hourList.scrollTop = (hour + 24) * 28;
    } else if ((hour + 24) * 28 > this.$hourList.scrollTop + this.$hourList.clientHeight) {
      this.$hourList.scrollTop = (hour + 24) * 28 - this.$hourList.clientHeight;
    }

    this.notifyChange(event);
  }
};

ChromeTimePicker.eventHandler.clickMinList = function (event) {
  var min;
  if ('__min__' in event.target) min = event.target.__min__;
  if ('__min__' in event.target.parentElement) min = event.target.parentElement.__min__;

  if (min !== undefined) {
    this.minute = min;

    if ((min + 60) * 28 < this.$minList.scrollTop) {
      this.$minList.scrollTop = (min + 60) * 28;
    } else if ((min + 61) * 28 > this.$minList.scrollTop + this.$minList.clientHeight) {
      this.$minList.scrollTop = (min + 61) * 28 - this.$minList.clientHeight;
    }

    this.notifyChange(event);
  }
};

ChromeTimePicker.eventHandler.clickPM = function (event) {
  if (this.hour < 12) this.hour += 12;
  this.notifyChange(event);
};

ChromeTimePicker.eventHandler.clickAM = function (event) {
  if (this.hour >= 12) this.hour -= 12;
  this.notifyChange(event);
};

absol_acomp_ACore.install(ChromeTimePicker);
/* harmony default export */ const js_ChromeTimePicker = (ChromeTimePicker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateTimeInput.js
function DateTimeInput_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { DateTimeInput_typeof = function _typeof(obj) { return typeof obj; }; } else { DateTimeInput_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return DateTimeInput_typeof(obj); }










var STATE_NEW = 1;
var STATE_EDITED = 2;
var STATE_NONE = 0;
/***
 * @extends AElement
 * @constructor
 */

function DateTimeInput() {
  this._editingData = {};
  this._value = null;
  this._min = new Date(1890, 0, 1);
  this._max = new Date(new Date(2090, 0, 1).getTime() - 1);
  this._format = 'dd/MM/yyyy hh:mm a';
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$attachhook);
  this.domSignal.on('request_auto_select', this._autoSelect.bind(this));
  /***
   *
   * @type {HTMLInputElement | AElement}
   */

  this.$text = $('.as-date-time-input-text', this).on('mousedown', this.eventHandler.mouseDownInput).on('mouseup', this.eventHandler.mouseUpInput).on('dblclick', this.eventHandler.dblclickInput).on('keydown', this.eventHandler.keydown).on('blur', this.eventHandler.inputBlur).on('contextmenu', function (event) {
    event.preventDefault();
  });
  this.$pickerBtn = $('.as-date-time-input-icon-btn', this).on('click', this.eventHandler.clickPickerBtn);
  this.$clearBtn = $('button.as-time-input-clear-btn', this).on('click', this.clear.bind(this));
  this.notNull = false;
  this.min = this._min;
  this.max = this._max;
}

DateTimeInput.tag = 'DateTimeInput'.toLowerCase(); //calendar-clock

DateTimeInput.render = function () {
  return ACore_({
    extendEvent: ['change'],
    "class": 'as-date-time-input',
    child: [{
      tag: 'input',
      "class": 'as-date-time-input-text',
      attr: {
        ondrop: "return false;"
      },
      props: {
        value: 'dd/MM/yyyy hh:mm a'
      }
    }, {
      tag: 'button',
      "class": 'as-time-input-clear-btn',
      child: 'span.mdi.mdi-close-circle'
    }, {
      tag: 'button',
      "class": 'as-date-time-input-icon-btn',
      child: 'span.mdi.mdi-calendar-clock'
    }]
  });
};

DateTimeInput.prototype.tokenRegex = /([^.\/:\-,\\\s]+)|([.\/:\-,\\]+)/i;
/***
 *
 * @param start
 * @returns {null|{ident: string, length: number, sourceText: string, replace: function(s: string, selecting:boolean):void, text: string, idx: number, elt: (HTMLInputElement|absol.AElement)}}
 */

DateTimeInput.prototype._tokenAt = function (start) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var rgxFormat = new RegExp(this.tokenRegex.source, 'g');
  var s = this.$text.value;
  var format = this._format;
  var tokenMatched = rgx.exec(s);
  var formatToken = rgxFormat.exec(format);
  var tokenMatchedList = [];
  var formatTokenList = [];
  var text, ident;
  var idx;

  while (tokenMatched && formatToken) {
    text = tokenMatched[1];
    ident = formatToken[1];

    if (text && isDateTimeFormatToken(ident)) {
      tokenMatchedList.push(tokenMatched);
      formatTokenList.push(formatToken);
    }

    tokenMatched = rgx.exec(s);
    formatToken = rgxFormat.exec(format);
  }

  var bestI = -1;
  var bestD = Infinity;
  var d;

  for (var i = 0; i < tokenMatchedList.length; ++i) {
    tokenMatched = tokenMatchedList[i];
    formatToken = formatTokenList[i];
    text = tokenMatched[1];
    idx = tokenMatched.index;
    d = Math.min(Math.abs(start - idx), Math.abs(start - (idx + text.length)));

    if (d < bestD) {
      bestD = d;
      bestI = i;
    }
  }

  if (bestI >= 0) {
    tokenMatched = tokenMatchedList[bestI];
    formatToken = formatTokenList[bestI];
    text = tokenMatched[1];
    ident = formatToken[1];
    idx = tokenMatched.index;
    return {
      idx: idx,
      text: text,
      length: text.length,
      ident: ident,
      elt: this.$text,
      sourceText: s,
      replace: function replace(newText, selecting) {
        var left = this.sourceText.substr(0, this.idx);
        var right = this.sourceText.substr(this.idx + this.length);
        this.text = newText;
        this.length = newText.length;
        this.sourceText = left + this.text + right;
        this.elt.value = this.sourceText;

        if (selecting) {
          this.elt.setSelectionRange(this.idx, this.idx + this.length);
        }
      }
    };
  }

  return null;
};

DateTimeInput.prototype._autoSelect = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  var tokenEnd = this._tokenAt(this.$text.selectionEnd);

  if (token) {
    if (tokenEnd.idx === token.idx) {
      this.$text.setSelectionRange(token.idx, token.idx + token.length);
      this._editingData.state = STATE_NEW;
    } else {
      this.$text.select();
      this._editingData.state = STATE_NONE;
    }
  }
};

DateTimeInput.prototype._editNextToken = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  if (!token) return false;
  var cIdx = token.idx;
  var l = this.$text.value.length;

  for (var i = token.idx + token.length; i < l; ++i) {
    token = this._tokenAt(i);

    if (token && token.idx !== cIdx) {
      this.$text.setSelectionRange(token.idx, token.idx + token.length);
      this._editingData.state = STATE_NEW;
      break;
    }
  }
};

DateTimeInput.prototype._editPrevToken = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  if (!token) return false;
  var cIdx = token.idx;
  var l = this.$text.value.length;

  for (var i = token.idx - 1; i >= 0; --i) {
    token = this._tokenAt(i);

    if (token && token.idx !== cIdx) {
      this.$text.setSelectionRange(token.idx, token.idx + token.length);
      this._editingData.state = STATE_NEW;
      break;
    }
  }
};

DateTimeInput.prototype.tokenMap = {
  d: 'd',
  dd: 'd',
  M: 'M',
  MM: 'M',
  y: 'y',
  yyyy: 'y',
  hh: 'h',
  h: 'h',
  mm: 'm',
  m: 'm',
  a: 'a'
};
/***
 *
 * @param {string} s
 * @returns {{}}
 * @private
 */

DateTimeInput.prototype._makeTokenDict = function (s) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var rgxFormat = new RegExp(this.tokenRegex.source, 'g');
  var format = this._format;
  var tokenMap = this.tokenMap;
  var tokenMatched = rgx.exec(s);
  var formatToken = rgxFormat.exec(format);
  var text, ident;
  var idx;
  var res = {};

  while (tokenMatched && formatToken) {
    text = tokenMatched[1];
    ident = formatToken[1];

    if (text) {
      if (tokenMap[ident]) {
        idx = tokenMatched.index;
        res[tokenMap[ident]] = {
          text: text,
          idx: idx,
          length: text.length,
          sourceText: s,
          value: ident === 'a' ? text : parseInt(text)
        };
      }
    }

    tokenMatched = rgx.exec(s);
    formatToken = rgxFormat.exec(format);
  }

  return res;
};
/***
 *
 * @param {Date} date
 * @private
 */


DateTimeInput.prototype._makeValueDict = function (date) {
  var res = {};
  res.d = {
    value: date.getDate()
  };
  res.y = {
    value: date.getFullYear()
  };
  res.M = {
    value: date.getMonth() + 1
  };
  res.m = {
    value: date.getMinutes()
  };
  res.h = {
    value: date.getHours()
  };

  if (res.h.value < 12) {
    if (res.h.value === 0) res.h.value = 12;
    res.a = {
      value: "AM"
    };
  } else {
    if (res.h.value > 12) res.h.value -= 12;
    res.a = {
      value: "PM"
    };
  }

  return res;
};

DateTimeInput.prototype._applyTokenDict = function (format, dict, debug) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var tokenMap = this.tokenMap;
  return format.replace(rgx, function (full, g1, g2, sourceText) {
    if (g1 && tokenMap[g1]) {
      var ident = tokenMap[g1];

      if (ident === 'a') {
        return dict.a && dict.a.value || 'a';
      } else {
        if (dict[ident] && !isNaN(dict[ident].value)) {
          var numberText = dict[ident].value + '';

          while (numberText.length < g1.length) {
            numberText = '0' + numberText;
          }

          return numberText;
        } else {
          return full;
        }
      }
    } else return full;
  });
};

DateTimeInput.prototype._loadValueFromInput = function () {
  var tkDict = this._makeTokenDict(this.$text.value);

  var H = NaN;

  if (tkDict.a.value === 'AM') {
    H = tkDict.h.value % 12;
  } else if (tkDict.a.value === 'PM') {
    H = tkDict.h.value + (tkDict.h.value === 12 ? 0 : 12);
  }

  var date = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value, H, tkDict.m.value);

  if (isNaN(date.getTime())) {
    this._value = null;
  } else {
    this._value = date;
  }
};

DateTimeInput.prototype.clear = function () {
  var lev = this._lastEmitValue;

  if (this.notNull) {
    this.value = formatDateTime(new Date(Math.max(this.min.getTime(), Math.min(this.max.getTime(), new Date().getTime()))), this.format);
  } else {
    this.value = null;
  }

  this._lastEmitValue = lev;

  this._notifyIfChange();
};

DateTimeInput.prototype._notifyIfChange = function (event) {
  if (!this._lastEmitValue && !this._value) return;
  if (this._lastEmitValue && this._value && this._lastEmitValue.getTime() === this._value.getTime()) return;
  this.emit('change', {
    type: 'change',
    target: this,
    value: this._value,
    originEvent: event
  }, this);
  this._lastEmitValue = this._value;
};

DateTimeInput.prototype._correctingInput = function () {
  var tkDict = this._makeTokenDict(this.$text.value);

  var equalMin = true;
  var equalMax = true;

  if (!isNaN(tkDict.y.value)) {
    tkDict.y.value = Math.max(this._min.getFullYear(), Math.min(this._max.getFullYear(), tkDict.y.value));
    equalMin = tkDict.y.value === this._min.getFullYear();
    equalMax = tkDict.y.value === this._max.getFullYear();
  } else {
    equalMin = false;
    equalMax = false;
  }

  if (!isNaN(tkDict.M.value)) {
    tkDict.M.value = Math.max(1, Math.min(12, tkDict.M.value));

    if (equalMin) {
      tkDict.M.value = Math.max(this._min.getMonth() + 1, tkDict.M.value);
      equalMin = tkDict.M.value === this._min.getMonth() + 1;
    }

    if (equalMax) {
      tkDict.M.value = Math.min(this._max.getMonth() + 1, tkDict.M.value);
      equalMax = this._max.getMonth() + 1;
    }
  } else {
    equalMin = false;
    equalMax = false;
  }

  if (!isNaN(tkDict.d.value)) {
    tkDict.d.value = Math.max(1, Math.min(31, tkDict.d.value));

    if (!isNaN(tkDict.M.value)) {
      tkDict.d.value = Math.min(tkDict.d.value, daysInMonth(isNaN(tkDict.y.value) ? 2020 : tkDict.y.value, tkDict.M.value - 1));
    }

    if (equalMin) {
      tkDict.d.value = Math.max(this._min.getDate(), tkDict.d.value);
      equalMin = tkDict.d.value === this._min.getDate();
    }

    if (equalMax) {
      tkDict.d.value = Math.min(this._max.getDate(), tkDict.d.value);
      equalMax = tkDict.d.value === this._max.getDate();
    }
  } else {
    equalMin = false;
    equalMax = false;
  } //todo: min max


  if (tkDict.a.value === 'AM' || tkDict.a.value === 'PM') {
    if (equalMin) {}
  } else {
    equalMin = false;
    equalMax = false;
  }

  var text = this._applyTokenDict(this._format, tkDict);

  this.$text.value = text;
};

DateTimeInput.prototype._correctingCurrentToken = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  if (!token) return;
  var value;

  if (token.ident === 'a') {
    if (token.text !== 'a' && token.text !== 'AM' && token.text !== 'PM') {
      token.replace('a', false);
    }
  } else {
    value = parseInt(token.text);
    var rqMin = {
      d: 1,
      dd: 1,
      M: 1,
      MM: 1,
      y: 1890,
      yyyy: 1890,
      h: 1,
      hh: 1,
      m: 0,
      mm: 0
    }[token.ident];
    var rqMax = {
      d: 31,
      dd: 31,
      M: 12,
      MM: 12,
      y: 2089,
      yyyy: 2089,
      h: 12,
      hh: 12,
      m: 59,
      mm: 59
    }[token.ident];

    if (rqMin !== undefined) {
      if (!isNaN(value)) {
        if (value < rqMin || value > rqMin) {
          value = Math.max(rqMin, Math.min(rqMax, value));
          token.replace(zeroPadding(value, token.ident.length), false);
          this._editingData.d = value;
        }
      } else if (token.text !== token.ident) {
        token.replace(token.ident, false);
      }
    }
  }
};

DateTimeInput.prototype._dateFrom = function (value) {
  var typeV = DateTimeInput_typeof(value);

  if (typeV === 'string' || typeV === 'number') {
    value = new Date(value);
  }

  if (!value || !value.getTime) value = null;

  if (value) {
    value = new Date(value.getTime());
    value.setSeconds(0, 0);
  }

  return value || null;
};

DateTimeInput.property = {};
DateTimeInput.property.disabled = {
  set: function set(value) {
    this.$text.disabled = !!value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.containsClass('as-disabled');
  }
};
DateTimeInput.property.format = {
  set: function set(value) {
    var dict;

    if (this._value) {
      dict = this._makeValueDict(this._value);
    } else {
      dict = this._makeTokenDict(this.$text.value);
    }

    this._format = value;
    this.$text.value = this._applyTokenDict(value, dict);
  },
  get: function get() {
    return this._format;
  }
};
DateTimeInput.property.value = {
  set: function set(value) {
    this._value = this._dateFrom(value);
    var dict;

    if (this._value) {
      dict = this._makeValueDict(this._value);
    } else {
      dict = this._makeTokenDict(this.$text.value);
    }

    if (value) {
      this.$text.value = this._applyTokenDict(this._format, dict, true);
    } else {
      this.$text.value = this.format;
    }

    this._lastEmitValue = this._value;
  },
  get: function get() {
    return this._value;
  }
};
DateTimeInput.property.min = {
  set: function set(value) {
    this._min = this._dateFrom(value) || new Date(1890, 0, 1);
  },
  get: function get() {
    return this._min;
  }
};
DateTimeInput.property.max = {
  set: function set(value) {
    this._max = this._dateFrom(value) || new Date(new Date(2090, 0, 1).getTime() - 1);
  },
  get: function get() {
    return this._max;
  }
};
DateTimeInput.eventHandler = {};

DateTimeInput.eventHandler.mouseUpInput = function () {
  this.domSignal.emit('request_auto_select');
};

DateTimeInput.eventHandler.mouseDownInput = function () {
  if (document.activeElement === this.$text) {
    this._correctingCurrentToken();
  }
};

DateTimeInput.eventHandler.dblclickInput = function (event) {
  event.preventDefault();
};
/***
 *
 * @param {KeyboardEvent} event
 */


DateTimeInput.eventHandler.keydown = function (event) {
  var token = this._tokenAt(this.$text.selectionStart);

  var endToken = this._tokenAt(this.$text.selectionEnd);

  if (!token) {
    if (event.key === 'Enter') {
      this._correctingInput();

      this._loadValueFromInput();

      this._notifyIfChange(event);
    }

    return;
  }

  var newTokenText;
  var value;

  if (event.key.startsWith('Arrow') || [' ', ':', '/', '-'].indexOf(event.key) >= 0) {
    event.preventDefault();

    switch (event.key) {
      case 'ArrowLeft':
        this._editPrevToken();

        break;

      case 'ArrowRight':
      case ' ':
      case ':':
      case '/':
      case '-':
        this._editNextToken();

        break;

      case 'ArrowUp':
      case 'ArrowDown':
        switch (token.ident) {
          case 'dd':
          case 'd':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.d = event.key === 'ArrowUp' ? 1 : 31;
            } else {
              this._editingData.d = 1 + (value + (event.key === 'ArrowUp' ? 0 : 29)) % 31;
            }

            newTokenText = '' + this._editingData.d;

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'MM':
          case 'M':
            value = parseInt(token.text) - 1;

            if (isNaN(value)) {
              this._editingData.M = event.key === 'ArrowUp' ? 0 : 11;
            } else {
              this._editingData.M = (value + (event.key === 'ArrowUp' ? 1 : 11)) % 12;
            }

            newTokenText = '' + (this._editingData.M + 1);

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'yyyy':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.y = new Date().getFullYear();
            } else {
              this._editingData.y = Math.max(1890, Math.min(2089, value + (event.key === 'ArrowUp' ? 1 : -1)));
            }

            newTokenText = this._editingData.y + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case "hh":
          case 'h':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.h = event.key === 'ArrowUp' ? 1 : 12;
            } else {
              this._editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12;
            }

            newTokenText = this._editingData.h + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case "mm":
          case 'm':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.m = event.key === 'ArrowUp' ? 0 : 59;
            } else {
              this._editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60;
            }

            newTokenText = this._editingData.m + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'a':
            value = token.text;
            this._editingData.a = value === 'PM' ? "AM" : "PM";
            newTokenText = this._editingData.a;
            token.replace(newTokenText, true);
            break;
        }

        break;
    }
  } else if (event.key === "Delete" || event.key === 'Backspace') {
    event.preventDefault();

    if (endToken.idx !== token.idx) {
      if (this.notNull) {
        this.$text.value = formatDateTime(new Date(Math.max(this.min.getTime(), Math.min(this.max.getTime(), new Date().getTime()))), this.format);
      } else {
        this.$text.value = this._format;
      }

      this.$text.select();
    } else {
      if (this.notNull) {
        switch (token.ident) {
          case 'HH':
          case 'mm':
          case 'H':
          case 'm':
            token.replace(zeroPadding(0, token.ident.length), true);
            break;

          case 'h':
          case 'hh':
            token.replace('12', true);
            break;

          case 'M':
          case 'MM':
          case 'dd':
          case 'd':
            token.replace(zeroPadding(1, token.ident.length), true);
            break;

          case 'y':
          case 'yyyy':
            token.replace(zeroPadding(Math.max(this.min.getFullYear(), Math.min(this.max.getFullYear(), new Date().getFullYear())), token.ident.length), true);
            break;

          case 'a':
            token.replace('AM', true);
            break;
        }
      } else {
        token.replace(token.ident, true);
      }

      if (event.key === "Delete") this._editNextToken();else this._editPrevToken();
    }
  } else if (event.key === "Enter" || event.key === 'Tab') {
    this._correctingInput();

    this._loadValueFromInput();

    this._notifyIfChange(event);
  } else if (event.ctrlKey) {
    switch (event.key) {
      case 'a':
      case 'A':
        break;

      case 'c':
      case 'C':
        break;

      case 'x':
      case 'X':
        this.domSignal.once('clear_value', function () {
          this.$text.value = this._format;
          this.$text.select();
        }.bind(this));
        this.domSignal.emit('clear_value');
        break;

      default:
        event.preventDefault();
    }
  } else if (event.key.match(/^[0-9]$/g)) {
    event.preventDefault();
    var dVal = parseInt(event.key);

    if (this._editingData.state === STATE_NEW) {
      switch (token.ident) {
        case 'dd':
        case 'd':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;
          this._editingData.d = dVal;

          if (dVal > 3) {
            this._editNextToken();
          }

          break;

        case 'MM':
        case 'M':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;
          this._editingData.M = dVal;

          if (dVal > 1) {
            this._editNextToken();
          }

          break;

        case 'yyyy':
        case 'y':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;
          this._editingData.state_num = 1;
          break;

        case 'm':
        case 'mm':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;

          if (dVal > 5) {
            this._editNextToken();
          }

          break;

        case 'h':
        case 'hh':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;

          if (dVal > 1) {
            this._editNextToken();
          }

          break;
      }
    } else {
      switch (token.ident) {
        case 'dd':
        case 'd':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(31, dVal));
          this._editingData.d = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'MM':
        case 'M':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(12, dVal));
          this._editingData.M = dVal - 1;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'yyyy':
        case 'y':
          dVal = (parseInt(token.text.replace(/^./, '')) || 0) * 10 + dVal;
          this._editingData.state_num++;

          if (this._editingData.state_num >= 4) {
            // dVal = Math.max(1890, Math.min(2089, dVal));
            token.replace(zeroPadding(dVal, token.ident.length), true);

            this._editNextToken();
          } else {
            token.replace(zeroPadding(dVal, token.ident.length), true);
          }

          break;

        case 'm':
        case 'mm':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(59, dVal));
          this._editingData.m = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'h':
        case 'hh':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(12, dVal));
          this._editingData.h = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;
      }
    }
  } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') {
    event.preventDefault();

    if (event.key.match(/^[aAsS]$/)) {
      token.replace('AM', true);
      this._editingData.a = "AM";
    } else {
      token.replace('PM', true);
      this._editingData.a = "PM";
    }

    this._editNextToken();
  } else {
    event.preventDefault();
  }
};

DateTimeInput.eventHandler.inputBlur = function () {
  this._correctingInput();

  this._loadValueFromInput();

  this._notifyIfChange();
};

DateTimeInput.eventHandler.clickPickerBtn = function () {
  this._attachPicker();
};

DateTimeInput.eventHandler.clickOut = function (event) {
  if (hitElement(this.share.$follower, event)) return;

  this._releasePicker();
};

DateTimeInput.eventHandler.clickCancelBtn = function () {
  this._releasePicker();
};

DateTimeInput.eventHandler.calendarPick = function (event) {
  var value = event.value;

  var tkDict = this._makeTokenDict(this.share.pickedValeText);

  if (tkDict.y) {
    tkDict.y.value = value.getFullYear();
  }

  if (tkDict.M) {
    tkDict.M.value = value.getMonth() + 1;
  }

  if (tkDict.d) {
    tkDict.d.value = value.getDate();
  }

  this.share.pickedValeText = this._applyTokenDict(this._format, tkDict);
};

DateTimeInput.eventHandler.clickOKBtn = function (event) {
  this.$text.value = this.share.pickedValeText;

  this._correctingInput();

  this._loadValueFromInput();

  this._notifyIfChange(event);

  this._releasePicker();
};

DateTimeInput.eventHandler.timePick = function (event) {
  var hour = event.hour;
  var minute = event.minute;

  var tkDict = this._makeTokenDict(this.$text.value);

  if (tkDict.h) {
    tkDict.h.value = 1 + (hour + 11) % 12;

    if (tkDict.a) {
      tkDict.a.value = hour >= 12 ? "PM" : 'AM';
    }
  }

  if (tkDict.m) {
    tkDict.m.value = minute;
  }

  this.share.pickedValeText = this._applyTokenDict(this._format, tkDict);
};

DateTimeInput.prototype.share = {
  $follower: null,
  $calendar: null,
  $timePicker: null,
  $holdingInput: null
};

DateTimeInput.prototype._preparePicker = function () {
  if (!this.share.$follower) {
    this.share.$timePicker = ACore_({
      tag: js_ChromeTimePicker.tag,
      "class": 'as-date-time-input-time-picker'
    });
    this.share.$calendar = ACore_({
      tag: js_ChromeCalendar.tag,
      "class": 'as-date-time-input-date-picker'
    });
    this.share.$closeBtn = ACore_({
      tag: 'button',
      "class": 'as-date-time-input-picker-btn',
      child: 'span.mdi.mdi-close'
    });
    this.share.$cancelBtn = ACore_({
      tag: 'button',
      "class": 'as-date-time-input-picker-btn',
      child: {
        text: 'CANCEL'
      }
    });
    this.share.$okBtn = ACore_({
      tag: 'button',
      "class": 'as-date-time-input-picker-btn',
      child: {
        text: 'OK'
      }
    });
    this.share.$follower = ACore_({
      tag: js_Follower.tag,
      "class": 'as-date-time-input-follower',
      child: [{
        "class": 'as-date-time-input-picker-header',
        child: this.share.$closeBtn
      }, {
        "class": 'as-date-time-input-picker-ctn',
        child: [this.share.$calendar, this.share.$timePicker]
      }, {
        "class": 'as-date-time-input-picker-footer',
        child: [this.share.$okBtn, this.share.$cancelBtn]
      }]
    });
  }
};

DateTimeInput.prototype._attachPicker = function () {
  this._preparePicker();

  if (this.share.$holdingInput) this.share.$holdingInput._releasePicker();
  this.share.pickedValeText = this.$text.value;
  this.share.$holdingInput = this;
  this.share.$follower.addStyle('visibility', 'hidden');
  this.share.$follower.addTo(document.body);
  this.share.$follower.followTarget = this;
  this.$pickerBtn.off('click', this.eventHandler.clickPickerBtn);
  this.share.$calendar.on('pick', this.eventHandler.calendarPick);
  this.share.$timePicker.on('change', this.eventHandler.timePick);
  this.share.$okBtn.on('click', this.eventHandler.clickOKBtn);
  this.share.$cancelBtn.on('click', this.eventHandler.clickCancelBtn);
  this.share.$closeBtn.on('click', this.eventHandler.clickCancelBtn);

  var tkDict = this._makeTokenDict(this.$text.value);

  if (tkDict.h && !isNaN(tkDict.h.value)) {
    if (tkDict.a && tkDict.a.value === 'PM') {
      this.share.$timePicker.hour = 12 + tkDict.h.value % 12;
    } else {
      this.share.$timePicker.hour = tkDict.h.value % 12;
    }
  } else {
    this.share.$timePicker.hour = 0;
  }

  if (tkDict.m && !isNaN(tkDict.m.value)) {
    this.share.$timePicker.minute = tkDict.m.value;
  } else {
    this.share.$timePicker.minute = 0;
  }

  var date = null;

  if (tkDict.d && !isNaN(tkDict.d.value) && tkDict.M && !isNaN(tkDict.M.value) && tkDict.y && !isNaN(tkDict.y.value)) {
    date = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value);
    if (isNaN(date.getTime())) date = null;
  }

  if (date) {
    this.share.$calendar.selectedDates = [date];
    this.share.$calendar.viewDate = date;
  } else {
    this.share.$calendar.selectedDates = [];
    var viewDate = null;

    if (tkDict.y && !isNaN(tkDict.y.value)) {
      if (tkDict.M && !isNaN(tkDict.M.value)) {
        if (tkDict.d && !isNaN(tkDict.d.value)) {
          viewDate = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value);
        } else {
          viewDate = new Date(tkDict.y.value, tkDict.M.value - 1, 1);
        }
      } else {
        viewDate = new Date(tkDict.y.value, 0, 1);
      }
    } else {
      viewDate = new Date();
    }

    if (viewDate && !isNaN(viewDate.getTime())) {
      this.share.$calendar.viewDate = viewDate;
    } else {
      this.share.$calendar.viewDate = new Date();
    }
  }

  setTimeout(function () {
    this.share.$follower.removeStyle('visibility');
    document.body.addEventListener('click', this.eventHandler.clickOut);
  }.bind(this), 5);
};

DateTimeInput.prototype._releasePicker = function () {
  if (this.share.$holdingInput !== this) return;
  this.share.$follower.remove();
  this.share.$holdingInput = null;
  this.share.$calendar.off('pick', this.eventHandler.calendarPick);
  this.share.$timePicker.off('change', this.eventHandler.timePick);
  this.share.$okBtn.off('click', this.eventHandler.clickOKBtn);
  this.share.$cancelBtn.off('click', this.eventHandler.clickCancelBtn);
  this.share.$closeBtn.off('click', this.eventHandler.clickCancelBtn);
  document.body.removeEventListener('click', this.eventHandler.clickOut);
  setTimeout(function () {
    this.$pickerBtn.on('click', this.eventHandler.clickPickerBtn);
  }.bind(this));
};

absol_acomp_ACore.install(DateTimeInput);
/* harmony default export */ const js_DateTimeInput = (DateTimeInput);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInput2.js











var DateInput2_STATE_NEW = 1;
var DateInput2_STATE_EDITED = 2;
var DateInput2_STATE_NONE = 0;
var DateInput2_ = absol_acomp_ACore._;
var DateInput2_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function DateInput2() {
  this._lastValue = null;
  this._value = null;
  this._format = 'dd/MM/yyyy';
  this.$input = DateInput2_$('input', this);
  this._editingData = {};
  this.$text = this.$input;
  this.$text.on('mousedown', this.eventHandler.mouseDownInput).on('mouseup', this.eventHandler.mouseUpInput).on('dblclick', this.eventHandler.dblclickInput).on('keydown', this.eventHandler.keydown).on('blur', this.eventHandler.inputBlur).on('contextmenu', function (event) {
    event.preventDefault();
  });
  this.$domSignal = DateInput2_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('request_auto_select', this._autoSelect.bind(this));
  this._min = new Date(1890, 0, 1, 0, 0, 0, 0);
  this._max = new Date(2090, 0, 1, 0, 0, 0, 0);
  this.$calendarBtn = DateInput2_$('.as-date-input-icon-ctn', this).on('click', this.eventHandler.clickCalendarBtn);
  this.$clearBtn = DateInput2_$('button.as-date-input-clear-btn', this).on('click', this.clear.bind(this));
  this.value = this._value;
  this.format = this._format;
  this.notNull = false;
  HTML5_OOP.drillProperty(this, this, 'minLimitDate', 'min');
  HTML5_OOP.drillProperty(this, this, 'minDateLimit', 'min');
  HTML5_OOP.drillProperty(this, this, 'maxLimitDate', 'max');
  HTML5_OOP.drillProperty(this, this, 'maxDateLimit', 'max');
}

DateInput2.tag = 'dateinput';

DateInput2.render = function () {
  //only support dd/mm/yyyy
  return DateInput2_({
    "class": 'as-date-input',
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      "class": 'as-date-input-text',
      props: {
        value: '__/__/____'
      }
    }, {
      tag: 'button',
      "class": 'as-date-input-clear-btn',
      child: 'span.mdi.mdi-close-circle'
    }, {
      "class": 'as-date-input-icon-ctn',
      child: 'span.mdi.mdi-calendar'
    }]
  });
};
/**
 * @param {String} text
 */


DateInput2.prototype._verifyFormat = function (text) {
  var regex = /([,.\-\/])|([a-zA-Z0-9]+)/g;
  var tokens = text.match(regex);
  var count = [['dd', 'd'], ['M', 'MM'], ['yy', 'yyyy']].map(function (list) {
    return list.reduce(function (ac, cr) {
      if (tokens.indexOf(cr) >= 0) return ac + 1;
      return ac;
    }, 0);
  });
  return count[0] <= count[1] && count[1] <= count[2] && count[2] === 1;
};

DateInput2.prototype._notifyIfChange = function (event) {
  if (!this._lastValue !== !this._value || (this._lastValue && compareDate(this._lastValue, this._value)) !== 0) {
    this._lastValue = this._value;
    this.emit('change', {
      type: 'change',
      target: this,
      value: this._value,
      originEvent: event
    }, this);
  }
};

DateInput2.prototype.notifyChange = function () {
  this._lastValue = this._value;
  this.emit('change', {
    type: 'change',
    target: this,
    value: this._value
  }, this);
};

DateInput2.prototype.focus = function () {
  this.$input.focus();
};

DateInput2.prototype.blur = function () {
  this.$input.blur();
};

DateInput2.prototype.clear = function () {
  this._applyValue(null);

  this._notifyIfChange();
};
/***
 *
 * @param {Date|null} value
 */


DateInput2.prototype._applyValue = function (value) {
  this._value = value;

  if (!value) {
    this.$input.value = this.format;
  } else {
    this.$input.value = formatDateTime(this._value, this._format);
  }

  this._updateNullClass();
};

DateInput2.prototype._updateNullClass = function () {
  var value = this._value;

  if (!value) {
    this.addClass('as-value-null');
  } else {
    this.removeClass('as-value-null');
  }
};

DateInput2.prototype.tokenRegex = js_DateTimeInput.prototype.tokenRegex;
DateInput2.prototype._autoSelect = js_DateTimeInput.prototype._autoSelect;
DateInput2.prototype._tokenAt = js_DateTimeInput.prototype._tokenAt;
DateInput2.prototype._editNextToken = js_DateTimeInput.prototype._editNextToken;
DateInput2.prototype._editPrevToken = js_DateTimeInput.prototype._editPrevToken;
DateInput2.prototype._makeTokenDict = js_DateTimeInput.prototype._makeTokenDict;

DateInput2.prototype._correctingInput = function () {
  var tkDict = this._makeTokenDict(this.$text.value);

  var min = this._min;
  var max = this._max;
  var equalMin;
  var equalMax;

  if (!isNaN(tkDict.y.value)) {
    tkDict.y.value = Math.max(min.getFullYear(), Math.min(max.getFullYear(), tkDict.y.value));
    equalMin = tkDict.y.value === min.getFullYear();
    equalMax = tkDict.y.value === max.getFullYear();
  } else {
    equalMin = false;
    equalMax = false;
  }

  if (tkDict.M && !isNaN(tkDict.M.value)) {
    tkDict.M.value = Math.max(1, Math.min(12, tkDict.M.value));

    if (equalMin) {
      tkDict.M.value = Math.max(min.getMonth() + 1, tkDict.M.value);
      equalMin = tkDict.M.value === min.getMonth() + 1;
    }

    if (equalMax) {
      tkDict.M.value = Math.min(max.getMonth() + 1, tkDict.M.value);
      equalMax = max.getMonth() + 1;
    }
  } else {
    equalMin = false;
    equalMax = false;
  }

  if (tkDict.d && !isNaN(tkDict.d.value)) {
    tkDict.d.value = Math.max(1, Math.min(31, tkDict.d.value));

    if (!isNaN(tkDict.M.value)) {
      tkDict.d.value = Math.min(tkDict.d.value, daysInMonth(isNaN(tkDict.y.value) ? 2020 : tkDict.y.value, tkDict.M.value - 1));
    }

    if (equalMin) {
      tkDict.d.value = Math.max(min.getDate(), tkDict.d.value);
    }

    if (equalMax) {
      tkDict.d.value = Math.min(max.getDate(), tkDict.d.value);
    }
  }

  var text = this._applyTokenDict(this._format, tkDict);

  this.$text.value = text;
};

DateInput2.prototype._correctingCurrentToken = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  if (!token) return;
  var value;
  value = parseInt(token.text);
  var rqMin = {
    d: 1,
    dd: 1,
    M: 1,
    MM: 1,
    y: 1890,
    yyyy: 1890
  }[token.ident];
  var rqMax = {
    d: 31,
    dd: 31,
    M: 12,
    MM: 12,
    y: 2089,
    yyyy: 2089
  }[token.ident];

  if (rqMin !== undefined) {
    if (!isNaN(value)) {
      if (value < rqMin || value > rqMin) {
        value = Math.max(rqMin, Math.min(rqMax, value));
        token.replace(zeroPadding(value, token.ident.length), false);
      }
    } else if (this.notNull) {
      if (token.ident.startsWith('y')) {
        value = new Date().getFullYear();
      } else {
        value = rqMin;
      }

      token.replace(zeroPadding(value, token.ident.length), false);
    } else if (token.text !== token.ident) {
      token.replace(token.ident, false);
    }
  }
};
/***
 *
 * @param {Date|string|null}date
 * @return {Date|null}
 */


DateInput2.prototype._normalizeValue = function (date) {
  var temp;

  if (date === null || date === undefined || date === false) {
    return null;
  }

  if (typeof date === 'string') {
    temp = new Date(date);

    if (isNaN(temp.getTime())) {
      temp = parseDateTime(date, this._format);
    }

    date = temp;
  } else if (typeof date === 'number') {
    date = new Date(date);
  }

  if (date.getTime && date.getHours) {
    if (isNaN(date.getTime())) {
      return null;
    } else {
      return beginOfDay(date);
    }
  } else {
    return null;
  }
};

DateInput2.prototype._loadValueFromInput = function () {
  var tkDict = this._makeTokenDict(this.$text.value);

  var y = tkDict.y ? tkDict.y.value : new Date().getFullYear();
  var m = tkDict.M ? tkDict.M.value - 1 : 0;
  var d = tkDict.d ? tkDict.d.value : 1;
  var date = new Date(y, m, d);

  if (isNaN(date.getTime())) {
    this._value = null;
  } else {
    this._value = date;
  }

  this._updateNullClass();
};

DateInput2.prototype._applyTokenDict = function (format, dict, debug) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var tokenMap = this.tokenMap;
  return format.replace(rgx, function (full, g1, g2, sourceText) {
    if (g1 && tokenMap[g1]) {
      var ident = tokenMap[g1];

      if (dict[ident] && !isNaN(dict[ident].value)) {
        var numberText = dict[ident].value + '';

        while (numberText.length < g1.length) {
          numberText = '0' + numberText;
        }

        return numberText;
      } else {
        return full;
      }
    } else return full;
  });
};

DateInput2.prototype.focus = function () {
  this.$text.focus();
  this.$text.select();
};

DateInput2.prototype.tokenMap = {
  d: 'd',
  dd: 'd',
  M: 'M',
  MM: 'M',
  y: 'y',
  yyyy: 'y'
};
/**
 * @type {DateInput2}
 */

DateInput2.eventHandler = {};

DateInput2.eventHandler.keydown = function (event) {
  var token = this._tokenAt(this.$text.selectionStart);

  var endToken = this._tokenAt(this.$text.selectionEnd);

  if (!token) {
    if (event.key === 'Enter') {
      this._correctingInput();

      this._loadValueFromInput();

      this._notifyIfChange(event);
    }

    return;
  }

  var newTokenText;
  var value;

  if (event.key.startsWith('Arrow') || event.key.match(/^[\-/,\s]$/)) {
    event.preventDefault();

    switch (event.key) {
      case 'ArrowLeft':
        this._editPrevToken();

        break;

      case 'ArrowRight':
      case '-':
      case ',':
      case '/':
      case ' ':
        this._editNextToken();

        break;

      case 'ArrowUp':
      case 'ArrowDown':
        switch (token.ident) {
          case 'dd':
          case 'd':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.d = event.key === 'ArrowUp' ? 1 : 31;
            } else {
              this._editingData.d = 1 + (value + (event.key === 'ArrowUp' ? 0 : 29)) % 31;
            }

            newTokenText = '' + this._editingData.d;

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'MM':
          case 'M':
            value = parseInt(token.text) - 1;

            if (isNaN(value)) {
              this._editingData.M = event.key === 'ArrowUp' ? 0 : 11;
            } else {
              this._editingData.M = (value + (event.key === 'ArrowUp' ? 1 : 11)) % 12;
            }

            newTokenText = '' + (this._editingData.M + 1);

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'yyyy':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.y = new Date().getFullYear();
            } else {
              this._editingData.y = Math.max(1890, Math.min(2089, value + (event.key === 'ArrowUp' ? 1 : -1)));
            }

            newTokenText = this._editingData.y + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;
        }

    }
  } else if (event.key === "Delete" || event.key === 'Backspace') {
    event.preventDefault();

    if (endToken.idx !== token.idx) {
      if (this.notNull) {
        this.$text.value = formatDateTime(new Date(Math.min(this.max.getTime(), Math.max(this.min.getTime(), new Date().getTime()))), this._format);
      } else {
        this.$text.value = this._format;
      }

      this.$text.select();
    } else {
      if (this.notNull) {
        switch (token.ident) {
          case 'y':
          case 'yyyy':
            token.replace(zeroPadding(new Date().getFullYear(), token.ident.length), true);
            break;

          case 'M':
          case 'MM':
          case 'd':
          case 'dd':
            token.replace(zeroPadding(1, token.ident.length), true);
            break;

          default:
            token.replace(token.ident, true);
        }
      } else {
        token.replace(token.ident, true);
      }

      if (event.key === "Delete") this._editNextToken();else this._editPrevToken();
    }
  } else if (event.key === "Enter" || event.key === 'Tab') {
    this._correctingInput();

    this._loadValueFromInput();

    this._notifyIfChange(event);
  } else if (event.ctrlKey) {
    switch (event.key) {
      case 'a':
      case 'A':
        break;

      case 'c':
      case 'C':
        break;

      case 'x':
      case 'X':
        this.domSignal.once('clear_value', function () {
          this.$text.value = this._format;
          this.$text.select();
        }.bind(this));
        this.domSignal.emit('clear_value');
        break;

      default:
        event.preventDefault();
    }
  } else if (event.key.match(/^[0-9]$/g)) {
    event.preventDefault();
    var dVal = parseInt(event.key);

    if (this._editingData.state === DateInput2_STATE_NEW) {
      switch (token.ident) {
        case 'dd':
        case 'd':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = DateInput2_STATE_EDITED;
          this._editingData.d = dVal;

          if (dVal > 3) {
            this._editNextToken();
          }

          break;

        case 'MM':
        case 'M':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = DateInput2_STATE_EDITED;
          this._editingData.M = dVal;

          if (dVal > 1) {
            this._editNextToken();
          }

          break;

        case 'yyyy':
        case 'y':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = DateInput2_STATE_EDITED;
          this._editingData.state_num = 1;
          break;
      }
    } else {
      switch (token.ident) {
        case 'dd':
        case 'd':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(31, dVal));
          this._editingData.d = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'MM':
        case 'M':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(12, dVal));
          this._editingData.M = dVal - 1;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'yyyy':
        case 'y':
          dVal = (parseInt(token.text.replace(/^./, '')) || 0) * 10 + dVal;
          this._editingData.state_num++;

          if (this._editingData.state_num >= 4) {
            // dVal = Math.max(1890, Math.min(2089, dVal));
            token.replace(zeroPadding(dVal, token.ident.length), true);

            this._editNextToken();
          } else {
            token.replace(zeroPadding(dVal, token.ident.length), true);
          }

          break;
      }
    }
  } else {
    event.preventDefault();
  }
};

DateInput2.eventHandler.mouseUpInput = js_DateTimeInput.eventHandler.mouseUpInput;
DateInput2.eventHandler.mouseDownInput = js_DateTimeInput.eventHandler.mouseDownInput;
DateInput2.eventHandler.dblclickInput = js_DateTimeInput.eventHandler.dblclickInput;
DateInput2.eventHandler.inputBlur = js_DateTimeInput.eventHandler.inputBlur;

DateInput2.eventHandler.calendarSelect = function (value) {
  this.value = value;
  this.notifyChange();
};

DateInput2.eventHandler.clickCalendarBtn = function () {
  this._attachCalendar();
};

DateInput2.eventHandler.clickOut = function (event) {
  if (hitElement(this.share.$calendar, event)) return;

  this._releaseCalendar();
};

DateInput2.eventHandler.calendarPick = function (event) {
  this._applyValue(event.value);

  this._notifyIfChange(event.originEvent || event);

  this._releaseCalendar();
};

DateInput2.property = {};
DateInput2.property.value = {
  set: function set(value) {
    value = this._normalizeValue(value);
    if (!value && this.notNull) value = beginOfDay(new Date());
    this._lastValue = value;

    this._applyValue(value);
  },
  get: function get() {
    return this._value;
  }
};
/**
 * not support MMM, MMMM, support number only
 * @type {DateInput2}
 */

DateInput2.property.format = {
  set: function set(value) {
    value = value || 'dd/MM/yyyy';
    value = value.replace(/m/g, 'M');
    value = value.replace(/MM([M]+)/, 'MM');

    if (!this._verifyFormat(value)) {
      value = 'dd/MM/yyyy';
      console.error("Invalid date format: " + value);
    }

    this._format = value;
    this.value = this.value; //update
  },
  get: function get() {
    return this._format;
  }
};
DateInput2.property.disabled = {
  set: function set(value) {
    value = !!value;
    this.$input.disabled = value;
    if (value) this.addClass('as-disabled');else this.removeClass('as-disabled');
    this.$text.disabled = value;
  },
  get: function get() {
    return this.$input.disabled;
  }
};
DateInput2.property.calendarLevel = {
  get: function get() {
    if (this._format.indexOf('d') >= 0) return 'day';
    if (this._format.indexOf('M') >= 0) return 'month';
    return 'year';
  }
};
DateInput2.property.min = {
  set: function set(value) {
    this._min = this._normalizeValue(value) || new Date(1890, 0, 1);
  },
  get: function get() {
    return this._min;
  }
};
DateInput2.property.max = {
  set: function set(value) {
    this._max = this._normalizeValue(value) || new Date(2090, 0, 1);
  },
  get: function get() {
    return this._max;
  }
};
DateInput2.property.notNull = {
  set: function set(value) {
    if (value) {
      this.addClass('as-must-not-null');
      if (!this.value) this.value = new Date();
    } else {
      this.removeClass('as-must-not-null');
    }
  },
  get: function get() {
    return this.containsClass('as-must-not-null');
  }
};
DateInput2.prototype.share = {
  /***
   * @type {ChromeCalendar}
   */
  $calendar: null,

  /***
   * @type {Follower}
   */
  $follower: null,

  /***
   * @type {DateInput2}
   */
  $holdingInput: null
};

DateInput2.prototype._prepareCalendar = function () {
  if (this.share.$calendar) return;
  this.share.$calendar = DateInput2_({
    tag: 'chromecalendar',
    "class": 'as-date-input-calendar'
  });
  this.share.$follower = DateInput2_({
    tag: 'follower',
    "class": 'as-date-input-follower',
    child: this.share.$calendar
  });
};

DateInput2.prototype._attachCalendar = function () {
  this._prepareCalendar();

  if (this.share.$holdingInput) this.share.$holdingInput._releaseCalendar();
  this.share.$follower.addTo(document.body);
  this.share.$follower.addStyle('visibility', 'hidden');
  this.share.$holdingInput = this;
  this.share.$follower.followTarget = this;
  this.share.$calendar.level = this.calendarLevel;
  this.share.$calendar.min = this._min;
  this.share.$calendar.max = this._max;
  this.share.$calendar.on('pick', this.eventHandler.calendarPick);
  this.share.$calendar.selectedDates = this.value ? [this.value] : [];
  this.share.$calendar.viewDate = this.value ? this.value : new Date(Math.max(this._min.getTime(), Math.min(this._max.getTime(), new Date().getTime())));
  setTimeout(function () {
    document.body.addEventListener('click', this.eventHandler.clickOut);
    this.share.$follower.removeStyle('visibility');
  }.bind(this), 5);
  this.$calendarBtn.off('click', this.eventHandler.clickCalendarBtn);
};

DateInput2.prototype._releaseCalendar = function () {
  if (this.share.$holdingInput !== this) return;
  this.share.$calendar.off('pick', this.eventHandler.calendarPick);
  this.share.$follower.remove();
  document.body.removeEventListener('click', this.eventHandler.clickOut);
  setTimeout(function () {
    this.$calendarBtn.on('click', this.eventHandler.clickCalendarBtn);
  }.bind(this), 5);
  this.share.$holdingInput = null;
};

absol_acomp_ACore.install(DateInput2);
/* harmony default export */ const js_DateInput2 = (DateInput2);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/draggablestack.css
var draggablestack = __webpack_require__(1984);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PositionTracker.js



/***
 * @extends {AElement}
 * @constructor
 */

function PositionTracker() {
  this.defineEvent('positionchange');
  this.$trackScrollParents = [];
  this._scrollTrackEventHandler = this.notifyPositionChange.bind(this);
}

PositionTracker.tag = 'PositionTracker'.toLowerCase();
/***
 *
 * @return {AElement}
 */

PositionTracker.render = function () {
  return _('div');
};

PositionTracker.prototype.notifyPositionChange = function (event) {
  this.emit('positionchange', {
    type: 'positionchange',
    originEvent: event
  });
};

PositionTracker.prototype.startTrackPosition = function () {
  if (this.$trackScrollParents.length > 0) this.stopTrackPosition();
  var trackElt = this;

  while (trackElt) {
    if (trackElt.addEventListener) trackElt.addEventListener('scroll', this._scrollTrackEventHandler, false);else trackElt.attachEvent('onscroll', this._scrollTrackEventHandler, false);
    this.$trackScrollParents.push(trackElt);
    trackElt = trackElt.parentElement;
  }

  if (document.addEventListener) {
    document.addEventListener('scroll', this._scrollTrackEventHandler, false);
  } else {
    document.attachEvent('onscroll', this._scrollTrackEventHandler, false);
  }

  this.$trackScrollParents.push(document);
};

PositionTracker.prototype.stopTrackPosition = function () {
  var trackElt;

  for (var i = 0; i < this.$trackScrollParents.length; ++i) {
    trackElt = this.$trackScrollParents[i];
    if (trackElt.removeEventListener) trackElt.removeEventListener('scroll', this._scrollTrackEventHandler, false);else trackElt.dettachEvent('onscroll', this._scrollTrackEventHandler, false);
  }

  this.$trackScrollParents = [];
};

absol_acomp_ACore.install(PositionTracker);
/* harmony default export */ const js_PositionTracker = (PositionTracker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableVStack.js









var DraggableVStack_ = absol_acomp_ACore._;
var DraggableVStack_$ = absol_acomp_ACore.$;
/***
 * @augments Hanger
 * @augments PositionTracker
 * @constructor
 */

function DraggableVStack() {
  DraggableVStack_({
    tag: 'PositionTracker'.toLowerCase(),
    elt: this
  });

  this.$cloneContainer = DraggableVStack_('.absol-draggable-stack-clone-container');
  this.on('predrag', this.eventHandler.predrag).on('dragstart', this.eventHandler.dragstart).on('drag', this.eventHandler.drag).on('dragend', this.eventHandler.dragend);
  this._state = 0;
  this.friends = [];
  this.$friends = [];
  this._privateDraggableVStackIdent = randomIdent(35);
  this._dragData = null;
  this.on('positionchange', this.eventHandler.scroll);
}

DraggableVStack.tag = 'DraggableVStack'.toLowerCase();

DraggableVStack.render = function () {
  return DraggableVStack_({
    tag: 'hanger',
    extendEvent: ['change', 'orderchange', 'itemleave', 'itementer'],
    "class": ['absol-draggable-stack', 'absol-draggable-vstack']
  });
};

DraggableVStack.prototype._updateFriends = function () {
  var dict = {};
  dict[this._privateDraggableVStackIdent] = this;
  this.$friends = this.friends.reduce(function (ac, cr) {
    if (HTML5_Dom.isDomNode(cr)) {
      if (cr._privateDraggableVStackIdent) {
        ac.result.push(cr);
        ac.dict[cr._privateDraggableVStackIdent] = cr;
      }
    } else if (typeof cr === 'string') {
      DraggableVStack_$(cr, false, function (elt) {
        if (elt._privateDraggableVStackIdent) {
          if (!ac.dict[elt._privateDraggableVStackIdent]) {
            ac.result.push(elt);
            ac.dict[elt._privateDraggableVStackIdent] = elt;
          }
        }
      });
    }

    return ac;
  }, {
    dict: dict,
    result: []
  }).result;
};

DraggableVStack.prototype._findIndex = function (clientY) {
  var childBounds = Array.prototype.map.call(this.childNodes, function (elt) {
    return elt.getBoundingClientRect();
  });
  var childTops = childBounds.map(function (b) {
    return b.top;
  });
  childTops.push((childBounds[childBounds.length - 1] || this.getBoundingClientRect()).bottom);
  var nearestIdx = 0;
  var nearestVal = 10000000;
  var val;

  for (var i = 0; i < childTops.length; ++i) {
    val = Math.abs(clientY - childTops[i]);

    if (val < nearestVal) {
      nearestVal = val;
      nearestIdx = i;
    }
  }

  return nearestIdx;
};
/***
 *
 * @type {DraggableVStack|{}}
 */


DraggableVStack.eventHandler = {};

DraggableVStack.eventHandler.predrag = function (event) {
  var dragzone = this._findDragzone(event.target);

  if (!dragzone) {
    event.cancel();
  }
};

DraggableVStack.eventHandler.dragstart = function (event) {
  this.startTrackPosition();
  event.preventDefault();

  this._updateFriends();

  this._state = 1;
  this.addClass('as-state-drag');
  this._dragData = {
    mouseStartPos: new Math_Vec2(event.clientX, event.clientY),
    elt: this._findDirectChild(event.target),
    rootBound: this.getBoundingClientRect(),
    dest: this
  };
  this._dragData.mouseCurrentPos = this._dragData.mouseStartPos;

  this._updateDestChildrenBound();

  this._dragData.idx = Array.prototype.indexOf.call(this.childNodes, this._dragData.elt);
  this._dragData.eltBound = this._dragData.destChildBounds[this._dragData.idx];
  this._dragData.offsetPos = this._dragData.mouseStartPos.sub(new Math_Vec2(this._dragData.eltBound.left, this._dragData.eltBound.top));
  this._dragData.eltRelative = new Math_Vec2(this._dragData.eltBound.left, this._dragData.eltBound.top).sub(new Math_Vec2(this._dragData.rootBound.left, this._dragData.rootBound.top));
  this.$cloneContainer.addTo(document.body);
  this.$cloneContainer.clearChild().addChild(DraggableVStack_$(this._dragData.elt.cloneNode(true)).addStyle({
    boxSizing: 'border-box',
    width: this._dragData.eltBound.width + 'px',
    height: this._dragData.eltBound.height + 'px'
  }));
  this.$cloneContainer.addStyle({
    left: this._dragData.eltBound.left + 'px',
    top: this._dragData.eltBound.top + 'px'
  });

  this._dragData.elt.addClass('dragging');
};

DraggableVStack.eventHandler.drag = function (event) {
  event.preventDefault();
  this._dragData.mouseCurrentPos = new Math_Vec2(event.clientX, event.clientY);

  this._updateHoverDest();

  this._updateDraggingPosition();

  this.eventHandler.dragOverflow(event);
};

DraggableVStack.prototype.getClientY = function () {
  var top = 1000000;
  var bottom = -10000000;
  var child;
  var childBound;

  for (var i = 0; i < this.childNodes.length; ++i) {
    child = this.childNodes[i];
    if (child === this.$cloneContainer) continue;

    if (child.getBoundingClientRect) {
      childBound = child.getBoundingClientRect();
      top = Math.min(top, childBound.top);
      bottom = Math.max(bottom, childBound.bottom);
    }
  }

  return {
    top: top,
    bottom: bottom
  };
};

DraggableVStack.eventHandler.dragOverflow = function (event) {
  var scroller = this;

  while (scroller) {
    var overflowStyle = window.getComputedStyle(scroller)['overflow'];
    if ((overflowStyle === 'auto' || overflowStyle === 'scroll' || scroller.tagName === 'HTML') && scroller.clientHeight < scroller.scrollHeight) break;
    scroller = scroller.parentElement;
  }

  if (!scroller) return;
  var outBound = scroller.getBoundingClientRect();
  var bBound = this.$cloneContainer.getBoundingClientRect();
  var screenSize = HTML5_Dom.getScreenSize();

  if (scroller.tagName !== "HTML") {
    outBound = {
      top: Math.max(outBound.top, 0),
      bottom: Math.min(outBound.bottom, screenSize.height)
    };
  } else {
    outBound = {
      top: 0,
      bottom: screenSize.height
    };
  }

  var vy = 0;

  if (bBound.top < outBound.top) {
    vy = bBound.top - outBound.top;
  } else if (bBound.bottom > outBound.bottom) {
    vy = bBound.bottom - outBound.bottom;
  }

  var dt = 1 / 30;

  if (vy !== 0) {
    var copyEvent = {
      type: event.type,
      preventDefault: function preventDefault() {
        /* noop */
      },
      target: event.target
    };
    copyEvent.clientX = event.clientX;
    copyEvent.clientY = event.clientY;
    var thisBT = this;
    setTimeout(function () {
      if (scroller.scrollHeight > scroller.clientHeight) {
        scroller.scrollTop += absCeil(vy * dt);
      }

      if (thisBT._state === 1) {
        thisBT.eventHandler.dragOverflow(copyEvent);
      }
    }, dt * 1000);
  }
};

DraggableVStack.eventHandler.scroll = function (event) {
  this._updateDraggingPosition();
};

DraggableVStack.eventHandler.dragend = function (event) {
  this.stopTrackPosition();
  event.preventDefault();

  this._dragData.dest.removeClass('as-state-drag');

  this.$cloneContainer.remove();

  this._dragData.elt.removeClass('dragging');

  this.removeClass('as-state-no-change');
  this._state = 0;
  var beforeElt;

  if (this._dragData.dest === this) {
    if (this._dragData.idx === this._dragData.destIdx || this._dragData.idx + 1 === this._dragData.destIdx) {//todo
    } else {
      if (this._dragData.destIdx === this.childNodes.length) {
        this._dragData.elt.remove();

        this.addChild(this._dragData.elt);
        this.emit('change', {
          type: 'change',
          fromStack: this,
          toStack: this,
          elt: this._dragData.elt,
          sourceIndex: this._dragData.idx,
          destIndex: this.childNodes.length,
          oldIdx: this._dragData.idx,
          newIdx: this.childNodes.length - 1,
          desc: "Move element to end of stack."
        }, this);
        this.emit('orderchange', {
          type: 'orderchange',
          fromStack: this,
          toStack: this,
          elt: this._dragData.elt,
          oldIdx: this._dragData.idx,
          newIdx: this.childNodes.length - 1,
          desc: "Move element to end of stack."
        }, this);
      } else {
        beforeElt = this.childNodes[this._dragData.destIdx];

        this._dragData.elt.remove();

        this.addChildBefore(this._dragData.elt, beforeElt);
        this.emit('change', {
          type: 'change',
          fromStack: this,
          toStack: this,
          elt: this._dragData.elt,
          sourceIndex: this._dragData.idx,
          destIndex: this._dragData.destIdx,
          oldIdx: this._dragData.idx,
          newIdx: this._dragData.destIdx > this._dragData.idx ? this._dragData.destIdx - 1 : this._dragData.destIdx,
          desc: "Move element to before  this.childNodes[" + this._dragData.destIdx + "]"
        }, this);
        this.emit('orderchange', {
          type: 'orderchange',
          fromStack: this,
          toStack: this,
          elt: this._dragData.elt,
          oldIdx: this._dragData.idx,
          newIdx: this._dragData.destIdx > this._dragData.idx ? this._dragData.destIdx - 1 : this._dragData.destIdx,
          desc: "Move element to before  this.childNodes[" + this._dragData.destIdx + "]"
        }, this);
      }
    }
  } else {
    if (this._dragData.destIdx === this._dragData.dest.childNodes.length) {
      this.emit('orderchange', {
        type: 'itemleave',
        fromStack: this,
        toStack: this._dragData.dest,
        oldIdx: this._dragData.idx,
        newIdx: this.childNodes.length - 1,
        desc: "Move element to end of friend stack."
      }, this);

      this._dragData.elt.remove();

      this._dragData.dest.addChild(this._dragData.elt);

      this._dragData.dest.emit('orderchange', {
        type: 'itementer',
        fromStack: this,
        toStack: this._dragData.dest,
        oldIdx: this._dragData.idx,
        newIdx: this.childNodes.length - 1,
        desc: "Move element to end of friend stack."
      }, this._dragData.dest);

      this.emit('change', {
        type: 'change',
        fromStack: this,
        toStack: this._dragData.dest,
        elt: this._dragData.elt,
        sourceIndex: this._dragData.idx,
        destIndex: this.childNodes.length,
        oldIdx: this._dragData.idx,
        newIdx: this.childNodes.length - 1,
        desc: "Move element to end of friend stack."
      });
    } else {
      beforeElt = this._dragData.dest.childNodes[this._dragData.destIdx];

      this._dragData.elt.remove();

      this.emit('itemleave', {
        type: 'itemleave',
        fromStack: this,
        toStack: this._dragData.dest,
        elt: this._dragData.elt,
        oldIdx: this._dragData.idx,
        newIdx: this._dragData.destIdx,
        desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]"
      }, this);

      this._dragData.dest.addChildBefore(this._dragData.elt, beforeElt);

      this._dragData.dest.emit('itementer', {
        type: 'itementer',
        fromStack: this,
        toStack: this._dragData.dest,
        elt: this._dragData.elt,
        oldIdx: this._dragData.idx,
        newIdx: this._dragData.destIdx,
        desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]"
      }, this._dragData.dest);

      this.emit('change', {
        type: 'change',
        fromStack: this,
        toStack: this._dragData.dest,
        elt: this._dragData.elt,
        sourceIndex: this._dragData.idx,
        destIndex: this._dragData.destIdx,
        oldIdx: this._dragData.idx,
        newIdx: this._dragData.destIdx,
        desc: "Move element to before friend.childNodes[" + this._dragData.destIdx + "]"
      }, this);
    }
  }
};

DraggableVStack.prototype._updateDestChildrenBound = function () {
  var top0 = this._dragData.dest.getBoundingClientRect().top;

  this._dragData.destChildBounds = Array.prototype.map.call(this._dragData.dest.childNodes, function (elt) {
    return elt.getBoundingClientRect();
  });
  this._dragData.destChildTops = this._dragData.destChildBounds.map(function (bound) {
    return bound.top - top0;
  }).concat([(this._dragData.destChildBounds[this._dragData.destChildBounds.length - 1] || this.getBoundingClientRect()).bottom - top0]);
};

DraggableVStack.prototype._updateHoverDest = function () {
  var bound;
  var newDest;
  var friendElt;
  var friendList = this.$friends.concat([this]);
  var top0;

  for (var i = 0; i < friendList.length; ++i) {
    friendElt = friendList[i];
    bound = Math_Rectangle.fromClientRect(friendElt.getBoundingClientRect());

    if (bound.containsPoint(this._dragData.mouseCurrentPos)) {
      top0 = bound.y;
      newDest = friendElt;
      break;
    }
  }

  if (newDest && this._dragData.dest !== newDest) {
    this._dragData.dest.removeClass('as-state-drag');

    this._dragData.dest = newDest;

    this._dragData.dest.addClass('as-state-drag');

    this._dragData.dest.addStyle('--dest-y', 'unset');

    this._updateDestChildrenBound();
  }
};

DraggableVStack.prototype._updateDraggingPosition = function () {
  var bound = this.getBoundingClientRect();

  var clonePos = this._dragData.mouseCurrentPos.sub(this._dragData.offsetPos);

  this.$cloneContainer.addStyle({
    top: clonePos.y + 'px',
    left: bound.left + 'px'
  });
  this._dragData.destIdx = this._dragData.dest._findIndex(clonePos.y + this._dragData.eltBound.height / 2);

  this._dragData.dest.addStyle('--dest-y', this._dragData.destChildTops[this._dragData.destIdx] + 'px');

  if (this._dragData.dest === this) {
    if (this._dragData.idx === this._dragData.destIdx || this._dragData.idx + 1 === this._dragData.destIdx) {
      this.addClass('as-state-no-change');
    } else {
      this.removeClass('as-state-no-change');
    }
  }
};

DraggableVStack.prototype._autoScrollParentIfNeed = function (delta) {
  //todo: choose which element should be scroll
  if (!(delta > 0)) delta = 10000;
  var bound = this.getBoundingClientRect();
  var cloneBound = this.$cloneContainer.getBoundingClientRect();
  var outBound = HTML5_Dom.traceOutBoundingClientRect(this.$cloneContainer);
  if (outBound.bottom >= cloneBound.bottom && outBound.top <= cloneBound.top) return;
  var scrollables = [];
  var current = this;

  while (current) {
    var oy = window.getComputedStyle(current);
    oy = oy['overflow-y'] || oy['overflowY'];

    if (oy == 'auto' || oy == 'scroll') {
      scrollables.push(current);
    }

    current = current.parentElement;
  }

  scrollables.push(document.body.parentElement);
};

DraggableVStack.prototype._findDragzone = function (elt) {
  var result = null;

  while (elt && elt != this) {
    if (elt.classList && elt.classList.contains('drag-zone')) {
      result = elt;
      break;
    }

    elt = elt.parentNode;
  }

  if (result) {
    elt = result;

    while (elt && elt != this) {
      if (elt.classList && elt.classList.contains('absol-draggable-stack')) {
        result = null;
        break;
      }

      elt = elt.parentNode;
    }
  }

  return result;
};

DraggableVStack.prototype._findDirectChild = function (elt) {
  while (elt && elt != this) {
    if (elt.parentNode == this) return elt;
    elt = elt.parentNode;
  }

  return undefined;
};

DraggableVStack.property = {};
DraggableVStack.property.friends = {
  set: function set(value) {
    if (!(value instanceof Array)) value = [value];
    this._friends = value;
  },
  get: function get() {
    return this._friends;
  }
};
absol_acomp_ACore.install(DraggableVStack);
/* harmony default export */ const js_DraggableVStack = (DraggableVStack);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableHStack.js






var DraggableHStack_ = absol_acomp_ACore._;
var DraggableHStack_$ = absol_acomp_ACore.$;
/***
 * @augments DraggableVStack
 * @augments PositionTracker
 * @constructor
 */

function DraggableHStack() {
  this._dragData = null;
  this.$cloneContainer = DraggableHStack_('.absol-draggable-stack-clone-container');
  this.on('predrag', this.eventHandler.predrag).on('dragstart', this.eventHandler.dragstart).on('drag', this.eventHandler.drag).on('dragend', this.eventHandler.dragend);

  DraggableHStack_({
    elt: this,
    tag: js_PositionTracker
  }).on('positionchange', this._updateDraggingPosition.bind(this));
}

DraggableHStack.tag = "DraggableHStack".toLowerCase();

DraggableHStack.render = function () {
  return DraggableHStack_({
    tag: 'hanger',
    extendEvent: 'change',
    "class": ['absol-draggable-stack', 'absol-draggable-hstack']
  });
};
/***
 *
 * @param {Rectangle} rect
 * @returns {number}
 * @private
 */


DraggableHStack.prototype._findDropIdx = function (rect) {
  if (!this._dragData) return -1;
  var centerX = rect.x + rect.width / 2;
  var currentBound = Math_Rectangle.fromClientRect(this.getBoundingClientRect());
  var nearestDistance = Math.abs(centerX - currentBound.width); //end of stack

  var cDist;
  var nearestIndex = this._dragData.childBounds.length;
  var childX;

  for (var i = 0; i < this._dragData.childBounds.length; ++i) {
    childX = this._dragData.childBounds[i].x + currentBound.x - this._dragData.bound.x;
    cDist = Math.abs(centerX - childX);

    if (cDist < nearestDistance) {
      nearestDistance = cDist;
      nearestIndex = i;
    }
  }

  return nearestIndex;
};
/***
 *
 * @type {DraggableHStack|{}}
 */


DraggableHStack.eventHandler = {};
DraggableHStack.eventHandler.predrag = js_DraggableVStack.eventHandler.predrag;

DraggableHStack.eventHandler.dragstart = function (event) {
  this.addClass('as-has-dragging');
  this.startTrackPosition();
  var mousePos = new Math_Vec2(event.clientX, event.clientY);

  var elt = this._findDirectChild(event.target);

  var childBounds = Array.prototype.map.call(this.childNodes, function (e) {
    return Math_Rectangle.fromClientRect(e.getBoundingClientRect());
  });
  var eltIdx = Array.prototype.indexOf.call(this.childNodes, elt);
  var eltBound = childBounds[eltIdx];
  var eltMouseOffset = mousePos.sub(new Math_Vec2(eltBound.x, eltBound.y));
  this._dragData = {
    mouseStartPos: mousePos,
    mousePos: mousePos,
    bound: Math_Rectangle.fromClientRect(this.getBoundingClientRect()),
    childBounds: childBounds,
    elt: elt,
    eltIdx: eltIdx,
    eltBound: eltBound,
    eltMouseOffset: eltMouseOffset
  };
  this.$cloneContainer.addStyle({
    left: eltBound.x + 'px',
    top: eltBound.y + 'px',
    width: eltBound.width + 'px',
    height: eltBound.height + 'px'
  }).clearChild().addChild(DraggableHStack_$(elt.cloneNode(true))).addTo(document.body);
  elt.addClass('as-dragging');

  this._updateDraggingPosition();
};

DraggableHStack.eventHandler.drag = function (event) {
  event.preventDefault();
  this._dragData.mousePos = new Math_Vec2(event.clientX, event.clientY);

  this._updateDraggingPosition();
};

DraggableHStack.eventHandler.dragend = function (event) {
  var thisS = this;
  this.stopTrackPosition();
  this.removeClass('as-has-dragging');

  this._dragData.elt.removeClass('as-dragging');

  if (this._dragData.destIdx == this._dragData.eltIdx || this._dragData.destIdx == this._dragData.eltIdx + 1) {
    this.$cloneContainer.addClass('as-home-going');

    this._updateDraggingPosition();

    setTimeout(function () {
      thisS.$cloneContainer.selfRemove().removeClass('as-home-going');
    }, 100);
  } else {
    if (this._dragData.destIdx === this._dragData.childBounds.length) {
      this._dragData.elt.remove();

      this.addChild(this._dragData.elt);
      this.emit('change', {
        type: 'change',
        elt: this._dragData.elt,
        sourceIndex: this._dragData.eltIdx,
        destIndex: this._dragData.childBounds.length,
        oldIdx: this._dragData.eltIdx,
        newIdx: this._dragData.childBounds.length - 1,
        desc: "Move element to end of stack."
      }, this);
    } else {
      var beforeElt = this.childNodes[this._dragData.destIdx];

      this._dragData.elt.remove();

      this.addChildBefore(this._dragData.elt, beforeElt);
      this.emit('change', {
        type: 'change',
        elt: this._dragData.elt,
        sourceIndex: this._dragData.eltIdx,
        destIndex: this._dragData.destIdx,
        oldIdx: this._dragData.eltIdx,
        newIdx: this._dragData.destIdx > this._dragData.eltIdx ? this._dragData.destIdx - 1 : this._dragData.destIdx,
        desc: "Move element to before  this.childNodes[" + this._dragData.destIdx + "]"
      }, this);
    }

    this.$cloneContainer.selfRemove().removeClass('as-home-going');
  }

  this.removeClass('as-no-change');
};

DraggableHStack.prototype._findDragzone = js_DraggableVStack.prototype._findDragzone;
DraggableHStack.prototype._findDirectChild = js_DraggableVStack.prototype._findDirectChild;

DraggableHStack.prototype._updateDraggingPosition = function () {
  var bound = this.getBoundingClientRect();
  var x, y;

  if (this.$cloneContainer.containsClass('as-home-going')) {
    x = this._dragData.eltBound.x - this._dragData.bound.x + bound.left;
    y = this._dragData.eltBound.y - this._dragData.bound.y + bound.top;
  } else {
    y = bound.top + (this._dragData.eltBound.y - this._dragData.bound.y);

    var newPos = this._dragData.mousePos.sub(this._dragData.eltMouseOffset);

    x = newPos.x;
  }

  this.$cloneContainer.addStyle({
    left: x + 'px',
    top: y + 'px'
  });

  var cBound = this._dragData.eltBound.clone();

  cBound.x = x;
  cBound.y = y;

  var destIdx = this._findDropIdx(cBound);

  this._dragData.destIdx = destIdx;
  var destX;

  if (destIdx >= this._dragData.childBounds.length) {
    var lastRect = this._dragData.childBounds[this._dragData.childBounds.length - 1];
    destX = lastRect.x + lastRect.width - this._dragData.bound.x;
  } else {
    destX = this._dragData.childBounds[destIdx].x - this._dragData.bound.x;
  }

  this.addStyle('--dest-x', destX + 'px');

  if (destIdx == this._dragData.eltIdx || destIdx == this._dragData.eltIdx + 1) {
    this.addClass('as-no-change');
  } else {
    this.removeClass('as-no-change');
  }
};

absol_acomp_ACore.install(DraggableHStack);
/* harmony default export */ const js_DraggableHStack = (DraggableHStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/droppanel.css
var droppanel = __webpack_require__(1784);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/exptree.css
var exptree = __webpack_require__(8687);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ExpTree.js







var ExpTree_ = absol_acomp_ACore._;
var ExpTree_$ = absol_acomp_ACore.$;
absol_acomp_ACore.install('toggler-ico', function () {
  var res = ExpTree_('<svg class="toggler-ico" width="14" height="14" version="1.1" viewBox="0 0 3.7042 3.7042" xmlns="http://www.w3.org/2000/svg" >' + '    <rect style="fill: transparent; stroke: none" x="0" y="0" width="3.7042" height="3.7042"></rect>' + '    <g transform="translate(0 -293.3)" class="toggle-close">' + '        <path d="m0.52917 293.82v2.6458l2.6458-1.3229z" />' + '    </g>' + '    <g transform="translate(0 -293.3)" class="toggle-open">' + '        <path d="m3.175 294.09-2.6458 2.1167h2.6458z"/>' + '    </g>' + '</svg>');

  return res;
});
absol_acomp_ACore.install('remove-ico', function () {
  return ExpTree_('<svg class="remove-ico" width="24" height="24" viewBox="0 0 24 24">\
                <rect style="fill: transparent; stroke: none" x="0" y="0" width="24" height="24"></rect>\
                <path class="close" d="M3,16.74L7.76,12L3,7.26L7.26,3L12,7.76L16.74,3L21,7.26L16.24,12L21,16.74L16.74,21L12,16.24L7.26,21L3,16.74" />\
                <circle class="modified" cx="12" cy="12" r="10" />\
            </svg>');
});
/***
 * @extends AElement
 * @constructor
 */

function ExpNode() {
  var thisEN = this;
  this.$level = ExpTree_$('.absol-exp-node-level', this);
  this.$removeIcon = ExpTree_$('remove-ico', this).on('click', function (event) {
    thisEN.emit('pressremove', {
      target: thisEN,
      type: 'pressremove'
    }, this);
  });
  this.on('keydown', this.eventHandler.buttonKeydown);
  this.$toggleIcon = ExpTree_$('toggler-ico', this).on('click', function (event) {
    thisEN.emit('presstoggle', copyEvent(event, {
      target: thisEN,
      type: 'pressremove'
    }), this);
  });
  this.on('click', function (event) {
    if (!HTML5_EventEmitter.hitElement(thisEN.$removeIcon, event) && !HTML5_EventEmitter.hitElement(thisEN.$toggleIcon, event)) thisEN.emit('press', copyEvent(event, {
      target: thisEN,
      type: 'press'
    }), this);
  });
  this.$iconCtn = ExpTree_$('div.absol-exp-node-ext-icon', this);
  this.$extIcon = ExpTree_$('img.absol-exp-node-ext-icon', this);
  this.$name = ExpTree_$('span.absol-exp-node-name', this);
  this.$desc = ExpTree_$('span.absol-exp-node-desc', this);
  contenteditableTextOnly(this.$name, function (text) {
    return text.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim();
  });
  HTML5_OOP.drillProperty(thisEN, thisEN.$extIcon, 'extSrc', 'src');
  this._level = 0;
  this.__isExpNode__ = true;
  return thisEN;
}
ExpNode.tag = 'expnode';

ExpNode.render = function () {
  return ExpTree_({
    tag: 'button',
    extendEvent: ['pressremove', 'press', 'presstoggle'],
    "class": 'absol-exp-node',
    child: ['.absol-exp-node-level', 'remove-ico', 'toggler-ico', 'img.absol-exp-node-ext-icon', 'div.absol-exp-node-ext-icon', 'span.absol-exp-node-name', 'span.absol-exp-node-desc']
  });
};

ExpNode.property = {};
ExpNode.property.icon = {
  set: function set(value) {
    if (this.$iconP) {
      this.$iconP.remove();
      this.$iconP = undefined;
    }

    if (value && value != null) {
      var newE;

      if (!HTML5_Dom.isDomNode(value)) {
        newE = ExpTree_(value);
      }

      this.$iconP = newE;
      this.$iconCtn.addChild(newE);
      this._icon = value;
    } else {
      this._icon = undefined;
    }
  },
  get: function get() {
    return this._icon;
  }
};
ExpNode.property.level = {
  set: function set(value) {
    value = value || 0;

    if (value !== this.level) {
      this._level = value || 0;
      this.$level.innerHTML = '&nbsp;'.repeat(this._level * 6);
    }
  },
  get: function get() {
    return this._level || 0;
  }
};
ExpNode.property.name = {
  set: function set(value) {
    value = value + '';
    this._name = value;
    this.$name.clearChild();
    if (value && value.length > 0) this.$name.addChild(ExpTree_({
      text: value
    }));
  },
  get: function get() {
    return this._name || '';
  }
};
ExpNode.property.desc = {
  set: function set(value) {
    this._desc = (value || '') + '';
    this.$desc.clearChild();
    this.$desc.addChild(ExpTree_({
      text: this._desc
    }));
  },
  get: function get() {
    return this._desc || '';
  }
};
ExpNode.property.status = {
  set: function set(value) {
    this.removeClass('status-open').removeClass('status-close').removeClass('status-modified').removeClass('status-removable');

    if (!value || value == 'none') {//todo
    } else if (value == 'close') {
      this.addClass('status-close');
    } else if (value == 'open') {
      this.addClass('status-open');
    } else if (value == 'removable') {
      this.addClass('status-removable');
    } else if (value == 'modified') {
      this.addClass('status-modified');
    } else {
      throw new Error('Invalid status ' + value);
    }

    this._status = value;
  },
  get: function get() {
    return this._status;
  }
};
ExpNode.property.active = {
  set: function set(value) {
    if (value) {
      this.addClass('as-active');
      this.addClass('active');
    } else {
      this.removeClass('as-active');
      this.removeClass('active');
    }
  },
  get: function get() {
    return this.containsClass('as-active');
  }
};

ExpNode.prototype.rename = function (resolveCallback, rejectCallback) {
  var self = this;
  var span = this.$name;
  var lastName = span.innerHTML;
  span.attr('contenteditable', 'true');
  span.focus();
  document.execCommand('selectAll', false, null);

  function keydowEventHandle(event) {
    var key = event.key;

    if (key == 'Enter') {
      event.preventDefault();
      span.blur();
      span.attr('contenteditable', undefined);
    } else if (key == "ESC") {
      event.preventDefault();
      span.innerHTML = lastName;
      span.blur();
      span.attr('contenteditable', undefined);
    }
  }

  function blurEventHandle(event) {
    finish();
    var curentName = span.innerHTML.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim();

    if (curentName == lastName) {
      rejectCallback && rejectCallback();
    } else {
      if (curentName.length == 0) {
        span.innerHTML = lastName;
        rejectCallback && rejectCallback();
      } else {
        var res = resolveCallback && resolveCallback(curentName);

        if (res === false) {
          span.innerHTML = lastName;
        } else if (res && res.then) {
          res.then(function (result) {
            if (result === false) {
              span.innerHTML = lastName; //faile
            } else {//success
            }
          }, function () {
            //reject value
            span.innerHTML = lastName;
          });
        } else {//success
        }
      }
    }
  }

  function finish() {
    span.off('keydown', keydowEventHandle);
    span.off('blur', blurEventHandle);
    ExpTree_$(document.body).once('click', function () {
      setTimeout(function () {
        span.attr('contenteditable', undefined);
      }, 2);
    });
  }

  span.on('keydown', keydowEventHandle);
  span.on('blur', blurEventHandle);
};

ExpNode.prototype.findNodeBefore = function () {
  var tree = this.parentElement;
  var root;
  var prevTree;
  var res = null;

  if (tree.__isExpTree__) {
    root = tree.getRoot();
    root.visitRecursive(function (cTree) {
      if (cTree === tree) {
        res = prevTree;
      }

      prevTree = cTree;
    });
  }

  return res && res.getNode();
};

ExpNode.prototype.findNodeAfter = function () {
  var tree = this.parentElement;
  var root;
  var prevTree;
  var res = null;

  if (tree.__isExpTree__) {
    root = tree.getRoot();
    root.visitRecursive(function (cTree) {
      if (prevTree === tree) {
        res = cTree;
      }

      prevTree = cTree;
    });
  }

  return res && res.getNode();
};

ExpNode.eventHandler = {};
/****
 *
 * @param {KeyboardEvent} event
 */

ExpNode.eventHandler.buttonKeydown = function (event) {
  if (event.target === this) {
    if (!event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey) {
      var destNode;
      var tree = this.parentElement;
      var parentTree = tree && tree.getParent();

      switch (event.key) {
        case 'ArrowLeft':
          if (tree.status === 'open') {
            tree.status = 'close';
            tree.notifyStatusChange();
          } else {
            destNode = parentTree && parentTree.getNode();
          }

          break;

        case 'ArrowRight':
          if (tree.status === 'close') {
            tree.status = 'open';
            tree.notifyStatusChange();
          } else {
            destNode = this.findNodeAfter();
          }

          break;

        case 'ArrowUp':
          destNode = this.findNodeBefore();
          break;

        case 'ArrowDown':
          destNode = this.findNodeAfter();
          break;

        case 'Space':
          this.click();
          break;
      }

      if (destNode) {
        destNode.focus();
        event.preventDefault();
      }
    }
  }
};
/***
 * @extends AElement
 * @constructor
 */


function ExpTree() {
  var thisET = this;
  this.$node = ExpTree_$('expnode', this).on('press', function (event) {
    thisET.emit('press', Object.assign({}, {
      target: thisET,
      node: this,
      type: 'press'
    }, event), this);
  }).on('pressremove', function (event) {
    thisET.emit('pressremove', Object.assign({}, {
      target: thisET,
      node: this,
      type: 'pressremove'
    }, event), this);
  }).on('presstoggle', this.eventHandler.nodePressToggle);
  this.$itemsContainer = ExpTree_$('.absol-exp-items', thisET);
  HTML5_OOP.drillProperty(this, this.$node, ['desc', 'name', 'title', 'extSrc', 'active', 'icon']);
  this.__isExpTree__ = true;
  this._level = 0;
}
ExpTree.tag = 'ExpTree'.toLowerCase();

ExpTree.render = function () {
  return ExpTree_({
    "class": 'absol-exp-tree',
    extendEvent: ['press', 'pressremove', 'statuschange'],
    child: ['expnode', '.absol-exp-items']
  });
};

ExpTree.property = {};
ExpTree.property.level = {
  set: function set(value) {
    value = value || 0;

    if (value != this.level) {
      this.$node.level = value;
      Array.prototype.forEach.call(this.$itemsContainer.childNodes, function (e) {
        e.level = value + 1;
      });
    }
  },
  get: function get() {
    return this.$node.level;
  }
};
ExpTree.property.status = {
  set: function set(value) {
    this.$node.status = value;

    if (value != 'open') {
      this.addClass('hide-children');
    } else {
      this.removeClass('hide-children');
    }
  },
  get: function get() {
    return this.$node.status;
  }
};
['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild'].forEach(function (key) {
  ExpTree.prototype[key] = function () {
    this.$itemsContainer[key].apply(this.$itemsContainer, arguments);
  };
});

ExpTree.prototype.addChild = function (child) {
  if (!child.__isExpTree__) throw new Error('Child node must be a ExpTree');
  child.level = this.level + 1;
  this.$itemsContainer.addChild(child);
};

ExpTree.prototype.addChildBefore = function (child, at) {
  child.level = this.level + 1;
  this.$itemsContainer.addChildBefore(child, at);
};

ExpTree.prototype.addChildAfter = function (child, at) {
  child.level = this.level + 1;
  this.$itemsContainer.addChildAfter(child, at);
};
/****
 *
 * @return {ExpTree}
 */


ExpTree.prototype.getParent = function () {
  var current = this.parentNode;

  while (current) {
    if (current.__isExpTree__) break;
    current = current.parentNode;
  }

  return current;
};
/***
 *
 * @return {ExpTree}
 */


ExpTree.prototype.getRoot = function () {
  var parent = this.getParent();
  if (!parent) return this;
  return parent.getRoot();
};

ExpTree.prototype.getNode = function () {
  return this.$node;
};

ExpTree.prototype.getChildren = function () {
  return Array.apply(null, this.$itemsContainer.childNodes);
};
/***
 *
 * @param {function(tree: ExpTree): void} cb
 */


ExpTree.prototype.visitRecursive = function (cb) {
  cb(this);
  if (this.status === 'open') Array.prototype.forEach.call(this.$itemsContainer.childNodes, function (child) {
    child.visitRecursive(cb);
  });
};

ExpTree.prototype.getPath = function () {
  var path = [];
  var current = this;

  while (current) {
    path.push(current.name);
    current = current.getParent();
  }

  return path.reverse();
};

ExpTree.prototype.accessByPath = function (path) {
  if (path.length == 0) return this;
  var childs = this.getChildren();
  var res;

  for (var i = 0; i < childs.length; ++i) {
    if (childs[i].name == path[0]) {
      res = childs[i].accessByPath(path.slice(1));
      break;
    }
  }

  return res;
};

ExpTree.prototype.toggle = function () {
  switch (this.status) {
    case 'close':
      this.status = 'open';
      break;

    case 'open':
      this.status = 'close';
      break;
  }
};

ExpTree.prototype.notifyStatusChange = function (props) {
  this.emit('statuschange', Object.assign({
    type: 'statuschange',
    target: this
  }, props), this);
};

ExpTree.eventHandler = {};

ExpTree.eventHandler.nodePressToggle = function (event) {
  this.toggle();
  this.notifyStatusChange({
    originEvent: event
  });
};
/***
 * @extends ExpTree
 * @constructor
 */


function ExpGroup() {
  this.addClass('as-exp-group');
  this.__isExpTree__ = true;
}
ExpGroup.tag = 'ExpGroup'.toLowerCase();

ExpGroup.render = function () {
  return ExpTree_('div');
};
/***
 *
 * @param {function(tree: ExpTree): void} cb
 */


ExpGroup.prototype.visitRecursive = function (cb) {
  Array.prototype.forEach.call(this.childNodes, function (child) {
    child.visitRecursive(cb);
  });
};

ExpGroup.prototype.getParent = function () {
  return null;
};

ExpGroup.prototype.getRoot = function () {
  return this;
};

ExpGroup.prototype.getNode = function () {
  return null;
};

absol_acomp_ACore.install(ExpNode);
absol_acomp_ACore.install(ExpTree);
absol_acomp_ACore.install(ExpGroup);
/* harmony default export */ const js_ExpTree = (ExpTree);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanel.js





var DropPanel_ = absol_acomp_ACore._;
var DropPanel_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function DropPanel() {
  var thisDP = this;
  /***
   *
   * @type {ExpGroup}
   */

  this.$body = DropPanel_$('.absol-drop-panel-body', this);
  this.$head = DropPanel_$('.absol-drop-panel-head', this).on('click', thisDP.eventHandler.clickHead);
  this.$name = DropPanel_$('.absol-drop-panel-name', thisDP);
  HTML5_OOP.drillProperty(this, this.$name, 'name', 'innerHTML');
  return thisDP;
}

DropPanel.tag = 'DropPanel'.toLowerCase();

DropPanel.render = function () {
  return DropPanel_({
    "class": 'absol-drop-panel',
    extendEvent: ['toggle'],
    child: [{
      "class": 'absol-drop-panel-head',
      child: ['toggler-ico', {
        tag: 'span',
        "class": "absol-drop-panel-name"
      }]
    }, {
      tag: 'expgroup',
      "class": ['absol-drop-panel-body', 'absol-bscroller']
    }]
  });
};

DropPanel.eventHandler = {};

DropPanel.eventHandler.clickHead = function (event) {
  if (!this._childOfButton(event.target)) {
    var event = {
      target: this,
      isShowed: this.show,
      preventDefault: function preventDefault() {
        this.prevented = true;
      }
    };
    this.emit('toggle', event, this);

    if (!event.prevented) {
      this.toggle();
    }
  }
};

['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild', 'addChild'].forEach(function (key) {
  DropPanel.prototype[key] = function () {
    this.$body[key].apply(this.$body, arguments);
  };
});

DropPanel.prototype._childOfButton = function (elt) {
  while (elt && elt != this) {
    if (elt.tagName == "BUTTON") {
      return true;
    }

    elt = elt.parentElement;
  }

  return false;
};

DropPanel.prototype.toggle = function () {
  this.show = !this.show;
};

DropPanel.property = {};
DropPanel.property.show = {
  set: function set(value) {
    if (value) {
      var maxHeight = parseFloat(this.getComputedStyleValue('max-height').replace('px', ''));
      var headBound = this.$head.getBoundingClientRect();

      if (maxHeight != 'none' && maxHeight != 'auto') {
        this.$body.addStyle('max-height', maxHeight - headBound.height + 'px');
      }

      this.$body.addStyle('height', this.$body.scrollHeight + 'px');
      setTimeout(function () {
        this.$body.removeStyle('height');
        window.dispatchEvent(new Event('resize'));
      }.bind(this), 200);
      this.addClass('show');
    } else {
      this.$body.addStyle('height', this.$body.scrollHeight + 'px');
      setTimeout(function () {
        this.$body.addStyle('height', '0');
      }.bind(this), 0);
      setTimeout(function () {
        this.$body.removeStyle('height');
        window.dispatchEvent(new Event('resize'));
      }.bind(this), 200);
      this.removeClass('show');
    }
  },
  get: function get() {
    return this.containsClass('show');
  }
};
absol_acomp_ACore.install(DropPanel);
/* harmony default export */ const js_DropPanel = (DropPanel);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanelStack.js




var DropPanelStack_ = absol_acomp_ACore._;
var DropPanelStack_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function DropPanelStack() {
  var res = this;
  this.$attachHook = DropPanelStack_('attachhook').on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
    this.updateSize = res.updateSize.bind(res);
  });
  this.sync = new Promise(function (rs) {
    res.$attachHook.once('error', rs);
  });
}

DropPanelStack.tag = 'DropPanelStack'.toLowerCase();

DropPanelStack.render = function () {
  return DropPanelStack_({
    "class": 'absol-drop-panel-stack',
    child: ['attachhook']
  });
};

DropPanelStack.prototype.updateSize = function () {};

DropPanelStack.prototype.getFreeHeight = function () {
  var childNodes = this.childNodes;
  var sumHeight = 0;
  var bound = this.getBoundingClientRect();
  var childBound;

  for (var i = 0; i < childNodes.length; ++i) {
    var child = childNodes[i];

    if (child.containsClass && child.containsClass('absol-drop-panel')) {
      childBound = child.getBoundingClientRect();
      sumHeight += childBound.height;
    }
  }

  return bound.height - sumHeight;
};

DropPanelStack.prototype.addChild = function (child) {
  var self = this;

  if (child.containsClass('absol-drop-panel')) {
    //remove last event listener off other parent
    if (child.__drop_panel_toggle_listener__) {
      child.off('toggle', child.__drop_panel_toggle_listener__);
    }

    child.__drop_panel_toggle_listener__ = function (event) {
      event.preventDefault();
      self.sync = self.sync.then(function () {
        if (event.isShowed) {
          setTimeout(function () {
            child.removeStyle('max-height');
          }, 200);
          child.toggle();
        } else {
          var headBound = child.$head.getBoundingClientRect();
          var vailableHeight = self.getFreeHeight();

          if (vailableHeight > 3) {
            child.addStyle('max-height', self.getFreeHeight() + headBound.height + 'px');
            child.toggle();
          }
        }

        return new Promise(function (rs) {
          setTimeout(rs, 200);
        });
      });
    };

    child.on('toggle', child.__drop_panel_toggle_listener__);
    this["super"](child);
  } else {
    throw new Error('Child element must be a DropPanel');
  }
};

absol_acomp_ACore.install('droppanelstack', DropPanelStack);
/* harmony default export */ const js_DropPanelStack = (DropPanelStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/editabletext.css
var editabletext = __webpack_require__(3755);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EditableText.js




var EditableText_ = absol_acomp_ACore._;
var EditableText_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function EditableText() {
  var thisET = this;
  this.$span = EditableText_$('span', this);
  this.$text = document.createTextNode('');
  this.$span.addChild(this.$text);
  this.$higne = EditableText_$('.absol-editabe-text-higne', this);
  this.$input = EditableText_$('input', this);
  HTML5_OOP.drillProperty(this, this.$input, ['selectionStart', 'selectionEnd']);
  this.sync = new Promise(function (rs) {
    EditableText_('attachhook').addTo(thisET).once('error', rs);
  });
  this.$input.on('keydown', this.eventHandler.inputKeyDown, true);
  this.$input.on('change', this.eventHandler.inputChange);
  this.$input.on('blur', this.eventHandler.inputBlur);
}

;
EditableText.tag = 'EditableText'.toLowerCase();

EditableText.render = function () {
  return EditableText_({
    "class": 'absol-editabe-text',
    extendEvent: ['blur', 'focus', 'change', 'modify'],
    child: [{
      "class": 'absol-editabe-text-higne',
      child: '<input type="text">'
    }, 'span']
  });
};

EditableText.prototype.focus = function () {
  this.$input.focus();
};

EditableText.prototype.blur = function () {
  this.$input.blur();
};

EditableText.prototype.select = function () {
  this.$input.select();
};

EditableText.prototype.edit = function (flag, select) {
  this.editing = !!flag;
  this.sync = this.sync.then(function () {
    if (flag) {
      this.focus();
      if (select) this.select();
    } else this.blur();
  }.bind(this));
  return this.sync;
};

EditableText.prototype._update = function () {
  this.sync = this.sync.then(function () {
    return new Promise(function (rs) {
      // setTimeout(function () {
      var bound = this.getBoundingClientRect();
      var higneBound = this.$higne.getBoundingClientRect();
      var fsize = this.getFontSize();
      this.$input.addStyle('width', bound.width + 4 + fsize * 0 + 'px');
      this.$input.addStyle('height', bound.height + 4 + 'px');
      this.$input.addStyle('left', bound.left - higneBound.left - 2 + 'px');
      this.$input.addStyle('top', bound.top - higneBound.top + 'px');
      rs();
    }.bind(this));
  }.bind(this));
};

EditableText.property = {};
EditableText.property.text = {
  set: function set(value) {
    this.$text.textContent = value;
    this.$input.value = value;
  },
  get: function get() {
    return this.$text.textContent;
  }
};
EditableText.property.editing = {
  set: function set(value) {
    if (this._editting === value) return;
    this._editting = !!value;

    if (value) {
      this.$input.value = this.text;

      this._update();

      this.sync = this.sync.then(function () {
        this.addClass('editing');
        this.$input.value = this.text;
        this.$input.addStyle('font', this.$span.getComputedStyleValue('font'));
        this.$input.addStyle('font-style', this.$span.getComputedStyleValue('font-style'));
        this.$input.addStyle('color', this.$span.getComputedStyleValue('color'));
      }.bind(this));
    } else {
      this.removeClass('editing');
    }
  },
  get: function get() {
    return !!this._editting;
  }
};
EditableText.eventHandler = {};

EditableText.eventHandler.inputKeyDown = function (event) {
  requestAnimationFrame(function () {
    this.text = this.$input.value;

    this._update();

    event.text = this.text;
    this.emit('modify', event);
  }.bind(this));
};

EditableText.eventHandler.inputChange = function (event) {
  this.editing = false;
  this.emit('change', event);
};

EditableText.eventHandler.inputBlur = function (event) {
  this.editing = false;
  this.emit('blur', event);
};

absol_acomp_ACore.install(EditableText);
/* harmony default export */ const js_EditableText = (EditableText);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojipicker.css
var emojipicker = __webpack_require__(8395);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Sprite.js



var Sprite_ = absol_acomp_ACore._;
var Sprite_$ = absol_acomp_ACore.$;
var NOT_READY = 0;
var READY = 1;
var START = 2;
var RUNNING = 3;
var PAUSE = 4;
var STOP = 5;
var ERROR = 6;
var STATE_TO_STRING = ['NOT_READY', 'READY', 'START', 'RUNNING', 'PAUSE', 'STOP', 'ERROR'];
/**
 * @augments AElement
 * @augments HTMLCanvasElement
 * @constructor
 */

function Sprite() {
  this.loadTextureTimeout = 5000;
  this._textureLoaded = false;
  this._state = NOT_READY;
  this.defineEvent(['ready', 'srcerror', 'play', 'resume', 'pause', 'stop', 'reset', 'end', 'frame']);
  this._length = 60;
  this._lastDrawFrame = -1;
  this._frameIndex = 0;
  this._timeout = -1;
  this.ctx = this.getContext('2d');
  this._fps = 10;
  this._lastDrawMilis = 0;
  this._overTime = 0;
  this.draw = this.draw.bind(this);
  this.texture = null;
  this._frames = {
    type: 'grid',
    col: 1,
    row: 1
  };
  this._loop = false;
}

Sprite.cache = {};

Sprite.prototype.draw = function () {
  //todo
  var now = new Date().getTime();
  var dt = this._overTime + now - this._lastDrawMilis;
  var di = Math.floor(dt / 1000 * this._fps);
  var frameIndex = this._frameIndex + di;

  if (this._loop) {
    frameIndex = frameIndex % this._length;
  } else {
    frameIndex = Math.min(this._length - 1, frameIndex);
  }

  if (!isNaN(this._frameIndex) && frameIndex != this._frameIndex) {
    this.drawFrame(this._frameIndex);
  }

  this._overTime = dt - di * 1000 / this._fps;
  var nextTime = now + 1000 / this._fps - this._overTime - new Date().getTime();
  this._lastDrawMilis = now;
  this._frameIndex = frameIndex;
  this._timeout = -1;

  if (this._loop || frameIndex + 1 < this._length) {
    if (this._state == RUNNING) this._timeout = setTimeout(this.draw, nextTime);
  } else this.stop();
};

Sprite.prototype.drawFrame = function (index) {
  if (this._lastDrawFrame == index) return;
  this._lastDrawFrame = index;
  this.ctx.clearRect(0, 0, this.width, this.height);

  if (this._frames.type == 'grid') {
    var imgWidth = this.texture.naturalWidth;
    var imgHeight = this.texture.naturalHeight;
    var sHeight = imgHeight / this._frames.row;
    var sWidth = imgWidth / this._frames.col;
    var sx = index % this._frames.col * sWidth;
    var sy = Math.floor(index / this._frames.col) * sHeight;
    this.ctx.drawImage(this.texture, sx, sy, sWidth, sHeight, 0, 0, this.width, this.height);
  } else {}

  this.emit('frame', {
    name: 'frame',
    target: this,
    frameIndex: index
  }, this);
};

Sprite.prototype.stop = function () {
  this.pause();
  if (this._state != PAUSE) return this;
  this._state = STOP;
  this.emit('stop', {
    name: 'stop',
    target: this
  }, this);
  return this;
};

Sprite.prototype.pause = function () {
  if (this._state != RUNNING) return this;
  this._state = PAUSE;

  if (this._timeout > 0) {
    clearTimeout(this._timeout);
    this._timeout = -1;
  }

  var now = new Date().getTime();
  this._overTime += now - this._lastDrawMilis;
  this.emit('pause', {
    name: 'pause',
    target: this
  }, this);
};

Sprite.prototype.resume = function () {
  if (this._state != START && this._state != PAUSE) return this;
  if (this._state == RUNNING) return this;
  this._state = RUNNING;
  var now = new Date().getTime();
  this._lastDrawMilis = now;
  this.draw();
  this.emit('resume', {
    name: 'pause',
    target: this
  }, this);
};

Sprite.prototype.reset = function () {
  this._frameIndex = 0;
  this._overTime = 0;
};

Sprite.prototype.play = function () {
  if (this._state == ERROR) return this;
  if (this._state == RUNNING) return this;

  if (this._state == READY || this._state == STOP) {
    this.reset();
  }

  this._state = START;
  this.emit('play', {
    name: 'start',
    target: this
  }, this);
  this.resume();
  return this;
};

Sprite.prototype.afterReady = function () {
  var thisSprite = this;
  if (this._state != NOT_READY && this._state != ERROR) return Promise.resolve();else return new Promise(function (rs, rj) {
    thisSprite.once('ready', rs);
    thisSprite.once('srcerror', rj);
  });
};

Sprite.tag = 'sprite';

Sprite.render = function () {
  return Sprite_('canvas.as-sprite');
};

Sprite.property = {};
Sprite.property.frames = {
  set: function set(value) {
    this.stop();
    this._lastDrawFrame = -1;

    if (value && value.type == 'grid') {
      this._length = value.col * value.row;
    }

    this._frames = value;

    if (this._textureLoaded && this._frames && this._state == NOT_READY) {
      //todo: verify frame
      this._state = READY;
      this.emit('ready', {
        target: this,
        name: 'ready'
      }, this);
    }
  },
  get: function get() {
    return this._frames;
  }
};
Sprite.property.frameIndex = {
  set: function set(value) {
    value = value || 0;
    if (value < 0) value = this._length - 1;

    if (this._loop) {
      this._frameIndex = value % this._length;
      this._overTime = 0;
    } else {
      this._frameIndex = Math.max(this._length - 1, value);
      this._overTime = 0;
    }

    this.drawFrame(this._frameIndex);
  },
  get: function get() {
    return this._frameIndex;
  }
};
Sprite.property.src = {
  set: function set(value) {
    this.stop();
    this._lastDrawFrame = -1; //did not draw any thing 

    value = value || [];
    var lastSrc = this._src;
    this._src = value || null;
    if (lastSrc == this._src) return;
    if (!value) this.texture = null;else {
      var cImage;

      if (!Sprite.cache[this._src]) {
        cImage = new Image();
        Sprite.cache[this._src] = cImage;
        cImage.src = this._src;
      } else {
        cImage = Sprite.cache[this._src];
      }

      this.texture = cImage;
      this._state = NOT_READY;
      var thisSprite = this;
      this._textureLoaded = false;
      HTML5_Dom.waitImageLoaded(this.texture, this.loadTextureTimeout).then(function (rs) {
        if (thisSprite.texture == cImage) {
          thisSprite._textureLoaded = true;

          if (thisSprite._frames) {
            thisSprite._lastDrawFrame = -1;
            thisSprite._state = READY;
            thisSprite.emit('ready', {
              target: thisSprite,
              name: 'ready'
            }, thisSprite);
          }
        }
      }, function () {
        if (thisSprite.texture == cImage) {
          thisSprite._state = ERROR;
          thisSprite.emit('srcerror', {
            target: thisSprite,
            name: 'srcerror'
          }, thisSprite);
        }
      });
    }
  },
  get: function get() {
    return this._src;
  }
};
Sprite.property.state = {
  get: function get() {
    return STATE_TO_STRING[this._state];
  }
};
Sprite.property.length = {
  get: function get() {
    return this._length;
  }
};
Sprite.property.fps = {
  set: function set(value) {
    value = Math.max(value || 0, 0);
    this._fps = value;

    if (this._state == RUNNING) {
      clearTimeout(this._timeout);
      this._timeout = -1;
      var now = new Date().getTime();
      this._overTime += now - this._lastDrawMilis;
      this._overTime = Math.min(1000 / this._fps, this._overTime);
      this.draw();
    }
  },
  get: function get() {
    return this._fps;
  }
};
Sprite.property.loop = {
  set: function set(value) {
    value = !!value;
    this._loop = value;
  },
  get: function get() {
    return this._loop;
  }
};
absol_acomp_ACore.install(Sprite);
/* harmony default export */ const js_Sprite = (Sprite);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiPicker.js





var EmojiPicker_ = absol_acomp_ACore._;
var EmojiPicker_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function EmojiPicker() {
  var thisPicker = this;
  this._aliveTimeout = 90;
  this._assetRoot = this.attr('data-asset-root');
  /***
   *
   * @type {Sprite}
   */

  this.$previewAnim = EmojiPicker_$('sprite.as-emoji-picker-preview-anim', this).on('ready', this.eventHandler.previewAnimReady).on('frame', this.eventHandler.previewAnimFrame);
  this.$previewAnim.loop = true;
  this.$previewAnim.src = this._assetRoot + '/anim/x120/' + js_EmojiAnims[0][1];
  this.$previewAnim.fps = 30;
  this.$desc = EmojiPicker_$('.as-emoji-picker-preview-desc', this);
  this.$shortcut = EmojiPicker_$('.as-emoji-picker-preview-shortcut', this);
  this.$desc.clearChild().addChild(EmojiPicker_({
    text: js_EmojiAnims[0][2]
  }));
  this.$shortcut.clearChild().addChild(EmojiPicker_({
    text: js_EmojiAnims[0][0]
  }));
  this.$list = EmojiPicker_$('.as-emoji-picker-list', this);
  this.$items = js_EmojiAnims.reduce(function (ac, it) {
    var itemElt = EmojiPicker_({
      tag: 'img',
      "class": 'as-emoji-picker-item',
      props: {
        src: thisPicker._assetRoot + '/static/x20/' + it[1]
      }
    }).addTo(thisPicker.$list);

    itemElt.on('mouseenter', thisPicker.eventHandler.mouseenterItem.bind(thisPicker, it, itemElt));
    itemElt.on('click', thisPicker.eventHandler.clickItem.bind(thisPicker, it));
    ac[it[0]] = itemElt;
    return ac;
  }, {});
  this.$attachook = EmojiPicker_('attachhook').addTo(this).on('error', this.eventHandler.attach);
}

EmojiPicker.assetRoot = function () {
  if (location.hostname.match(/^.+\.absol.cf$/)) return 'https://absol.cf/emoji';
  return '/emoji';
}();

EmojiPicker.tag = 'EmojiPicker'.toLowerCase();

EmojiPicker.render = function (data) {
  data = data || {};
  data.assetRoot = data.assetRoot || EmojiPicker.assetRoot;
  return EmojiPicker_({
    "class": 'as-emoji-picker',
    extendEvent: 'pick',
    attr: {
      'data-asset-root': data.assetRoot
    },
    child: [{
      "class": 'as-emoji-picker-preview',
      child: [{
        "class": '.as-emoji-picker-preview-anim-ctn',
        child: 'sprite.as-emoji-picker-preview-anim'
      }, '.as-emoji-picker-preview-desc', '.as-emoji-picker-preview-shortcut']
    }, {
      tag: 'bscroller',
      "class": 'as-emoji-picker-list'
    }]
  });
};
/**
 * @type {EmojiPicker}
 */


EmojiPicker.eventHandler = {};

EmojiPicker.eventHandler.attach = function () {
  this._aliveTimeout = 90;
  setTimeout(this.$previewAnim.play.bind(this.$previewAnim), 1);
};

EmojiPicker.eventHandler.previewAnimReady = function () {
  this.$previewAnim.frames = {
    type: 'grid',
    col: 1,
    row: this.$previewAnim.texture.naturalHeight / this.$previewAnim.texture.naturalWidth
  };
  this.$previewAnim.play();
};

EmojiPicker.eventHandler.previewAnimFrame = function () {
  if (this._aliveTimeout == 0) {
    var bound = this.getBoundingClientRect();

    if (bound.width == 0) {
      this.$previewAnim.stop();
    } else {
      this._aliveTimeout = 90;
    }
  }

  this._aliveTimeout--;
};

EmojiPicker.eventHandler.mouseenterItem = function (itemData, itemElt, event) {
  if (this.$lastHoverItem == itemElt) return;
  this.$lastHoverItem = itemElt;
  this.$previewAnim.src = this._assetRoot + '/anim/x120/' + itemData[1];
  this.$desc.clearChild().addChild(EmojiPicker_({
    text: itemData[2]
  }));
  this.$shortcut.clearChild().addChild(EmojiPicker_({
    text: itemData[0]
  }));
};

EmojiPicker.eventHandler.clickItem = function (itemData, event) {
  this.emit('pick', {
    name: 'pick',
    key: itemData[0],
    target: this
  }, this);
};

absol_acomp_ACore.install(EmojiPicker);
/* harmony default export */ const js_EmojiPicker = (EmojiPicker);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconbutton.css
var flexiconbutton = __webpack_require__(8913);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js



var FlexiconButton_ = absol_acomp_ACore._;
var FlexiconButton_$ = absol_acomp_ACore.$;
/**
 * @extends AElement
 * @constructor
 */

function FlexiconButton() {
  this._icon = null;
  this.$content = FlexiconButton_$('.as-flexicon-button-content', this);
  this.$iconCtn = FlexiconButton_$('.as-flexicon-button-icon-container', this);
  this.$textCtn = FlexiconButton_$('.as-flexicon-button-text-container', this);
}

FlexiconButton.tag = 'FlexiconButton'.toLowerCase();

FlexiconButton.render = function () {
  return FlexiconButton_({
    tag: 'button',
    "class": 'as-flexicon-button',
    child: {
      "class": 'as-icon-button-table-box',
      child: {
        "class": 'as-flexicon-button-content',
        child: ['.as-flexicon-button-icon-container', '.as-flexicon-button-text-container']
      }
    }
  });
};

FlexiconButton.property = {};
FlexiconButton.property.icon = {
  set: function set(value) {
    value = value || null;
    this._icon = value;
    this.$iconCtn.clearChild();

    if (value !== null) {
      this.$iconCtn.addChild(FlexiconButton_(value));
    }
  },
  get: function get() {
    return this._icon;
  }
};
FlexiconButton.property.text = {
  set: function set(value) {
    value = value || null;
    this._text = value;
    this.$textCtn.clearChild();

    if (value !== null) {
      this.$textCtn.addChild(FlexiconButton_({
        text: value
      }));
    }
  },
  get: function get() {
    return this._text;
  }
};
absol_acomp_ACore.install(FlexiconButton);
/* harmony default export */ const js_FlexiconButton = (FlexiconButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconinput.css
var flexiconinput = __webpack_require__(6177);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconInput.js




var FlexiconInput_ = absol_acomp_ACore._;
var FlexiconInput_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function FlexiconInput() {
  this.$input = FlexiconInput_$('.as-flexicon-input-text-input', this);
  this.$iconCtn = FlexiconInput_$('.as-flexicon-input-icon-ctn', this);
  this.$unitCtn = FlexiconInput_$('.as-flexicon-input-unit-ctn', this);
  HTML5_OOP.drillProperty(this, this.$input, ['value', 'readonly']);
  this.on('click', function (event) {
    if (event.target != this.$input) this.$input.focus();
  }.bind(this));
}

FlexiconInput.prototype.on = function () {
  return this.$input.on.apply(this.$input, arguments);
};

FlexiconInput.prototype.once = function () {
  return this.$input.once.apply(this.$input, arguments);
};

FlexiconInput.prototype.off = function () {
  return this.$input.off.apply(this.$input, arguments);
};

FlexiconInput.tag = 'FlexiconInput'.toLowerCase();

FlexiconInput.render = function () {
  return FlexiconInput_({
    "class": 'as-flexicon-input',
    child: [{
      "class": 'as-flexicon-input-icon-ctn'
    }, {
      tag: 'input',
      "class": 'as-flexicon-input-text-input',
      attr: {
        type: 'text'
      }
    }, {
      "class": 'as-flexicon-input-unit-ctn'
    }]
  });
};

FlexiconInput.property = {};
FlexiconInput.property.icon = {
  set: function set(value) {
    value = value || null;
    this._icon = value;
    this.$iconCtn.clearChild();

    if (value == null) {
      this.removeClass('as-flexicon-input-has-icon');
    } else {
      this.addClass('as-flexicon-input-has-icon');
      this.$iconCtn.addChild(FlexiconInput_(value));
    }
  },
  get: function get() {
    return this._icon;
  }
};
FlexiconInput.property.unit = {
  set: function set(value) {
    this._unit = value;

    if (this._unit) {
      this.addClass('as-flexicon-input-has-unit');
      this.$unitCtn.clearChild().addChild(FlexiconInput_({
        text: value + ''
      }));
    } else {
      this.removeClass('as-flexicon-input-has-unit');
      this.$unitCtn.clearChild();
    }
  },
  get: function get() {
    return this._unit;
  }
};
FlexiconInput.property.disabled = {
  set: function set(value) {
    value = !!value;
    this.$input.disabled = value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.$input.disabled;
  }
};
absol_acomp_ACore.install(FlexiconInput);
/* harmony default export */ const js_FlexiconInput = (FlexiconInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/frame.css
var css_frame = __webpack_require__(4892);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Frame.js




var Frame_ = absol_acomp_ACore._;
var Frame_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function Frame() {
  this.$parent = null; // FrameView or TabView
}

Frame.tag = 'frame';

Frame.render = function () {
  return Frame_({
    "class": 'absol-frame',
    attr: {
      id: randomIdent(12)
    },
    extendEvent: ['attached', 'detached', 'deactive', 'active'] // deactive and active event will be send by parent

  });
};

Frame.prototype.notifyAttached = function (parentElt) {
  this.$parent = parentElt;
  this.emit('attached', {
    type: 'attached',
    target: this,
    parentElt: parentElt
  }, this);
};

Frame.prototype.notifyDetached = function () {
  this.emit('detached', {
    type: 'detached',
    target: this,
    parentElt: this.$parent
  }, this);
  this.$parent = undefined;
};

Frame.prototype.selfRemove = function () {
  if (this.$parent) this.$parent.removeChild(this);else this["super"](); // normal remove
};

Frame.prototype.getParent = function () {
  return this.$parent;
};

Frame.prototype.requestActive = function () {
  if (this.$parent) {
    this.$parent.activeFrame(this);
  }
};

absol_acomp_ACore.install(Frame);
/* harmony default export */ const js_Frame = (Frame);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/frameview.css
var frameview = __webpack_require__(215);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FrameView.js




var FrameView_ = absol_acomp_ACore._;
var FrameView_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function FrameView() {
  this.$containers = [];
}

FrameView.tag = 'frameview';

FrameView.render = function () {
  return FrameView_({
    "class": 'absol-frame-view',
    extendEvent: ['activeframe', 'deactiveframe']
  });
};

FrameView.prototype.addChild = function (elt) {
  if (elt.containsClass && elt.containsClass('absol-frame')) {
    elt.selfRemove();

    var containerElt = FrameView_({
      "class": 'absol-frame-view-frame-container',
      child: elt,
      props: {
        __elt__: elt
      }
    });

    this.$containers.push(containerElt);
    this.appendChild(containerElt);
    elt.notifyAttached(this);
  } else {
    throw new Error('Children must be a frame');
  }
};

FrameView.prototype.addLast = function (elt) {
  this.addChild(elt);
  this.activeFrame(elt);
};

FrameView.prototype.removeLast = function () {
  if (this.$containers.length > 0) {
    this.removeChild(this.$containers[this.$containers.length - 1].__elt__);
  }

  if (this.$containers.length > 0) {
    this.activeFrame(this.$containers[this.$containers.length - 1].__elt__);
  }
};

FrameView.prototype.getLength = function () {
  return this.$containers.length;
};

FrameView.prototype.getAllChild = function () {
  return this.$containers.map(function (ctn) {
    return ctn.__elt__;
  });
};

FrameView.prototype.getLast = function () {
  if (this.$containers.length > 0) {
    return this.$containers[this.$containers.length - 1].__elt__;
  }

  return null;
};

FrameView.prototype.addChildBefore = function (elt, at) {
  if (elt.containsClass && elt.containsClass('absol-frame')) {
    elt.selfRemove();
    var index = this.childIndexOf(at);

    if (index < 0) {
      throw new Error('Second param is not a child');
    }

    var index = this.childIndexOf(at);
    var atCtnElt = this.$containers[index];

    var containerElt = FrameView_({
      "class": 'absol-frame-view-frame-container',
      child: elt,
      props: {
        __elt__: elt
      }
    });

    this.$containers.splice(index, 0, containerElt);
    this["super"](containerElt, atCtnElt);
    elt.notifyAttached(this);
  } else {
    throw new Error('Children must be a frame');
  }
};

FrameView.prototype.addChildAfter = function (elt, at) {
  if (elt.containsClass && elt.containsClass('absol-frame')) {
    elt.selfRemove();
    var index = this.childIndexOf(at);

    if (index < 0) {
      throw new Error('Second param is not a child');
    }

    var index = this.childIndexOf(at);
    var atCtnElt = this.$containers[index];

    var containerElt = FrameView_({
      "class": 'absol-frame-view-frame-container',
      child: elt,
      props: {
        __elt__: elt
      }
    });

    this.$containers.splice(index + 1, 0, containerElt);
    this["super"](containerElt, atCtnElt);
    elt.notifyAttached(this);
  } else {
    throw new Error('Children must be a frame');
  }
};

FrameView.prototype.removeChild = function (elt) {
  var ctnEltIndex = this.childIndexOf(elt);

  if (ctnEltIndex >= 0) {
    var ctnElt = this.$containers[ctnEltIndex];
    this.$containers.splice(ctnEltIndex, 1);
    this["super"](ctnElt);
  } else {
    throw new Error('Removed element is not a child!');
  }
};

FrameView.prototype.childIndexOf = function (elt) {
  for (var i = 0; i < this.$containers.length; ++i) {
    if (this.$containers[i].__elt__ == elt) return i;
  }

  return -1;
};

FrameView.prototype.findChildBefore = function (elt) {
  var eltIndex = this.childIndexOf(elt);
  if (eltIndex < 0) return -1;
  return this.$containers[eltIndex - 1];
};

FrameView.prototype.findChildAfter = function (elt) {
  var eltIndex = this.childIndexOf(elt);
  if (eltIndex < 0) return -1;
  return this.$containers[eltIndex + 1];
};

FrameView.prototype.clearChild = function () {
  while (this.$containers.length > 0) {
    this.removeChild(this.$containers[0].__elt__);
  }

  return this;
};

FrameView.prototype.findChildById = function (id) {
  var elt;

  for (var i = 0; i < this.$containers.length; ++i) {
    elt = this.$containers[i].__elt__;
    if (elt.getAttribute('id') == id) return elt;
  }

  return undefined;
};

FrameView.prototype.getAllChild = function () {
  return this.$containers.map(function (ctnElt) {
    return ctnElt.__elt__;
  });
};

FrameView.prototype.activeFrame = function (frameElt) {
  var ctnElt, elt;

  for (var i = 0; i < this.$containers.length; ++i) {
    ctnElt = this.$containers[i];
    elt = ctnElt.__elt__;

    if (frameElt == elt) {
      if (!ctnElt.containsClass('absol-active')) {
        ctnElt.addClass('absol-active');
        this.notifyActiveFrame(elt);
      } // else do nothing

    } else {
      if (ctnElt.containsClass('absol-active')) {
        ctnElt.removeClass('absol-active');
        this.notifyDeactiveFrame(elt);
      } // else do nonthing

    }
  }

  return this;
};

FrameView.prototype.notifyActiveFrame = function (frameElt, originEvent) {
  frameElt.emit('active', {
    target: frameElt,
    type: 'active',
    originEvent: originEvent
  });
  this.emit('activeframe', {
    type: 'activeframe',
    target: this,
    frameElt: frameElt,
    originEvent: originEvent
  }, this);
};

FrameView.prototype.notifyDeactiveFrame = function (frameElt, originEvent) {
  this.emit('deactiveframe', {
    type: 'deactiveframe',
    target: this,
    frameElt: frameElt,
    originEvent: originEvent
  }, this);
};

FrameView.prototype.activeFrameById = function (id) {
  var frameElt = this.findChildById(id);
  if (frameElt) this.activeFrame(frameElt);
  return this;
};

absol_acomp_ACore.install('frameview', FrameView);
/* harmony default export */ const js_FrameView = (FrameView);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabFrame.js

var TabFrame_$ = absol_acomp_ACore.$;
var TabFrame_ = absol_acomp_ACore._;

function TabFrame() {}

TabFrame.tag = 'tabframe';

TabFrame.render = function () {
  return TabFrame_({
    tag: 'frame',
    "class": 'absol-tab-frame',
    extendEvent: ['requestremove', 'remove']
  }, true);
};

TabFrame.property = {};
TabFrame.property.name = {
  set: function set(value) {
    if (typeof name == "undefined") {
      this._name = undefined;
    } else {
      this._name = value + '';
    }

    if (this.$parent) {
      if (this.$parent.notifyUpdateName) this.$parent.notifyUpdateName(this);
    }
  },
  get: function get() {
    return this._name;
  }
};
TabFrame.property.modified = {
  set: function set(value) {
    this._modified = !!value;

    if (this.$parent) {
      if (this.$parent.notifyUpdateModified) this.$parent.notifyUpdateModified(this);
    }
  },
  get: function get() {
    return !!this._modified;
  }
};
TabFrame.property.desc = {
  set: function set(value) {
    if (typeof value == "undefined") {
      this._desc = undefined;
    } else {
      this._desc = value + '';
    }

    if (this.$parent) {
      if (this.$parent.notifyUpdateDesc) this.$parent.notifyUpdateDesc(this);
    }
  },
  get: function get() {
    return this._desc;
  }
};
TabFrame.attribute = {};
TabFrame.attribute.name = {
  set: function set(value) {
    this.name = value;
  },
  get: function get() {
    return this.name;
  },
  remove: function remove() {
    this.name = undefined;
  }
};
TabFrame.attribute.desc = {
  set: function set(value) {
    this.desc = value;
  },
  get: function get() {
    return this.desc;
  },
  remove: function remove() {
    this.desc = undefined;
  }
};
TabFrame.attribute.modified = {
  set: function set(value) {
    this.modified = value == 'true' || value == '1' || value === true;
  },
  get: function get() {
    return this.modified ? 'true' : undefined;
  },
  remove: function remove() {
    this.desc = false;
  }
};

TabFrame.prototype.requestRemove = function () {
  if (this.$parent && this.$parent.removeTab) {
    this.$parent.removeTab(this.id, false);
  } else {
    this.selfRemove();
  }
};

absol_acomp_ACore.install(TabFrame);
/* harmony default export */ const js_TabFrame = (TabFrame);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tabview.css
var tabview = __webpack_require__(5255);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabButton.js




var TabButton_ = absol_acomp_ACore._;
var TabButton_$ = absol_acomp_ACore.$;

function TabButton() {
  var thisTB = this;
  this.$close = TabButton_$('.absol-tabbar-button-close', this);
  this.$iconCtn = TabButton_$('.absol-tabbar-button-icon-container', this).on('click', function (event) {
    event.tabButtonEventName = 'delete';
    thisTB.emit('close', event);
  });
  this.$modifiedFlag = TabButton_$('.absol-tabbar-button-modified-flag', this).on('click', function (event) {
    event.tabButtonEventName = 'delete';
    thisTB.emit('close', event);
  });
  this.$textView = TabButton_$('.absol-tabbar-button-text', this);
  this.on({
    click: function click(event) {
      if (event.tabButtonEventName) return;
      event.tabButtonEventName = 'active';
      thisTB.emit('active', event);
    }
  });
}

TabButton.tag = 'TabButton';

TabButton.render = function () {
  return TabButton_({
    tag: 'button',
    "class": 'absol-tabbar-button',
    extendEvent: ['close', 'active'],
    id: randomIdent(20),
    child: [{
      "class": 'absol-tabbar-button-text'
    }, {
      "class": 'absol-tabbar-button-icon-container',
      child: [{
        tag: 'span',
        "class": ['absol-tabbar-button-close', 'mdi-close', 'mdi'],
        attr: {
          title: 'Close'
        }
      }, {
        tag: 'span',
        "class": ['absol-tabbar-button-close-circle', 'mdi-close-circle', 'mdi'],
        attr: {
          title: 'Close'
        }
      }, {
        tag: 'span',
        "class": ['absol-tabbar-button-modified-flag', 'mdi', 'mdi-checkbox-blank-circle']
      }]
    }]
  });
};

TabButton.property = {};
TabButton.property.active = {
  set: function set(value) {
    this._active = value;
    if (value) this.addClass('absol-tabbar-button-active');else this.removeClass('absol-tabbar-button-active');
  },
  get: function get() {
    return this._active;
  }
};
TabButton.property.name = {
  set: function set(value) {
    this._name = value || '';
    this.$textView.innerHTML = this._name;
  },
  get: function get() {
    return this._name;
  }
};
TabButton.property.desc = {
  set: function set(value) {
    this.attr('title', value);
  },
  get: function get() {
    return this.attr('title');
  }
};
TabButton.property.modified = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-tabbar-button-modified');
    } else {
      this.removeClass('absol-tabbar-button-modified');
    }
  },
  get: function get() {
    return this.containsClass('absol-tabbar-button-modified');
  }
};
absol_acomp_ACore.install(TabButton);
/* harmony default export */ const js_TabButton = ((/* unused pure expression or super */ null && (TabButton)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabBar.js



var TabBar_ = absol_acomp_ACore._;
var TabBar_$ = absol_acomp_ACore.$;

function TabBar() {
  this.defineEvent(['active', 'close']);
  this.on('wheel', function (event) {
    var lastLeft = this.$viewport.scrollLeft;

    if (event.deltaY > 1) {
      this.$viewport.scrollLeft += 50;
    } else if (event.deltaY < -1) {
      this.$viewport.scrollLeft -= 50;
    }

    if (lastLeft != this.$viewport.scrollLeft) event.preventDefault();
  });
  this._tabs = [];
}

TabBar.tag = 'tabbar';

TabBar.render = function () {
  return TabBar_('hscroller.absol-tabbar');
};

TabBar.prototype.getAllTabButtons = function () {
  var buttons = [];
  TabBar_$('tabbutton', this, function (e) {
    buttons.push(e);
  });
  return buttons;
};
/***
 *
 * @param {string} ident
 * @return {TabButton}
 */


TabBar.prototype.getButtonByIdent = function (ident) {
  return TabBar_$('tabbutton#tabbuton-' + ident, this);
};

TabBar.property = {};
TabBar.property.tabs = {
  set: function set(value) {
    this.clearChild();
    this._tabs = [];
    (value || []).forEach(this.addTab.bind(this));
  },
  get: function get() {
    //each hold item data
    return this._tabs || [];
  }
};
/***
 *
 * @param {{text}}
 * @return {tabbar}
 */

TabBar.prototype.addTab = function (value) {
  var self = this;
  var props = {};

  if (typeof value == "string") {
    props.name = value;
  } else {
    if (value.name) {
      props.name = value.name;
    } else {
      throw new Error('Tab must has name attribute');
    }

    if (value.desc) props.desc = value.desc;
  }

  var tabButton = TabBar_({
    tag: 'tabbutton',
    props: props,
    on: {
      active: function active(event, sender) {
        var prevented = false;
        self.emit('active', {
          target: this,
          value: value,
          preventDefault: function preventDefault() {
            prevented = true;
          }
        }, self);

        if (!prevented) {
          self.getAllTabButtons().forEach(function (e) {
            e.active = false;
          });
          this.active = true;
        }
      },
      close: function close(event, sender) {
        var prevented = false;
        self.emit('close', {
          target: this,
          value: value,
          preventDefault: function preventDefault() {
            prevented = true;
          }
        }, self);

        if (!prevented) {
          //todo:active other
          this.remove();
        }
      }
    }
  }).addTo(this);

  if (value.id) tabButton.attr('id', 'tabbuton-' + value.id);

  this._tabs.push(tabButton);

  this.requestUpdateSize();
  return tabButton;
};

TabBar.prototype.removeTab = function (id) {
  this._tabs = this._tabs.filter(function (value) {
    return value == id;
  });
  TabBar_$('#tabbuton-' + id, this).remove();
  this.requestUpdateSize();
};

TabBar.prototype.activeTab = function (id) {
  var self = this;
  var activedbtn = TabBar_$('.absol-tabbar-button-active', this);

  if (activedbtn && activedbtn.attr('id') != id) {
    activedbtn.active = false;
  }

  var mButton = TabBar_$('#tabbuton-' + id, this);

  if (mButton) {
    mButton.active = true;
    setTimeout(function () {
      self.scrollInto(mButton);
    }, 30);
  }
};

TabBar.prototype.setModified = function (ident, flag) {
  var bt = this.getButtonByIdent(ident);

  if (bt) {
    bt.modified = flag;
  }
};

absol_acomp_ACore.install(TabBar);
/* harmony default export */ const js_TabBar = ((/* unused pure expression or super */ null && (TabBar)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabView.js




var TabView_ = absol_acomp_ACore._;
var TabView_$ = absol_acomp_ACore.$;

function TabView() {
  var thisTV = this;
  /***
   *
   * @type {TabBar}
   */

  this.$tabbar = TabView_$('tabbar', this);
  this.$tabbar.on({
    close: TabView.eventHandler.closeTab.bind(thisTV),
    active: TabView.eventHandler.activeTab.bind(thisTV)
  });
  this._frameHolders = [];
  this._history = [];
}

TabView.tag = 'TabView'.toLowerCase();

TabView.render = function () {
  return TabView_({
    "class": 'absol-tabview',
    extendEvent: ['activetab', 'deactivetab', 'removetab', 'requestremovetab'],
    child: ['tabbar']
  });
};

TabView.eventHandler = {};

TabView.eventHandler.closeTab = function (event) {
  event.preventDefault();
  var id = event.value.id;
  this.removeTab(id, true);
};

TabView.eventHandler.activeTab = function (event) {
  event.preventDefault();
  var id = event.value.id;
  this.activeTab(id, true);
};

TabView.prototype.activeTab = function (id, userActive) {
  var self = this;
  var resPromise = [];
  var needDeactiveHolder = [];
  var needActiveHolder = [];

  this._frameHolders.forEach(function (holder) {
    if (holder.containerElt.containsClass('absol-tabview-container-hidden')) {
      if (holder.id == id) {
        needActiveHolder.push(holder);
      }
    } else {
      if (holder.id != id) {
        needDeactiveHolder.push(holder);
      }
    }
  });

  needDeactiveHolder.forEach(function (holder) {
    holder.containerElt.addClass('absol-tabview-container-hidden');
    holder.tabFrame.emit('deactive', {
      type: 'deactive',
      target: holder.tabFrame,
      id: holder.id,
      userActive: !!userActive,
      tabButton: holder.tabButton,
      holder: holder
    }, holder.tabFrame);
  });
  needActiveHolder.forEach(function (holder) {
    self._history.push(holder.id);

    holder.containerElt.removeClass('absol-tabview-container-hidden');
    self.$tabbar.activeTab(holder.id);
    holder.tabFrame.emit('active', {
      type: 'active',
      target: holder.tabFrame,
      id: holder.id,
      userActive: !!userActive,
      tabButton: holder.tabButton,
      holder: holder
    }, holder.tabFrame);
    self.emit('activetab', {
      type: 'activetab',
      target: self,
      id: holder.id,
      userActive: !!userActive,
      tabButton: holder.tabButton,
      holder: holder
    }, self);
  });
};

TabView.prototype.removeTab = function (id, userActive) {
  var self = this;
  var resPromise = [];

  this._frameHolders.forEach(function (holder) {
    if (holder.id == id) {
      var eventData = {
        type: 'requestremove',
        id: id,
        userActive: !!userActive,
        target: holder.tabFrame,
        tabFrame: holder.tabFrame,
        tabButton: holder.tabButton,
        holder: holder,
        __promise__: Promise.resolve(),
        waitFor: function waitFor(promise) {
          this.__promise__ = promise;
        }
      };
      holder.tabFrame.emit('requestremove', eventData, holder.tabFrame);
      eventData.type = 'requestremovetab';
      eventData.target = self;
      self.emit('requestremovetab', eventData, self);
      resPromise.push(eventData.__promise__.then(function () {
        //if ok
        var eventData2 = {
          type: 'deactive',
          target: holder.tabFrame,
          id: holder.id,
          userActive: !!userActive,
          tabButton: holder.tabButton,
          holder: holder
        };
        if (!holder.containerElt.containsClass('absol-tabview-container-hidden')) holder.tabFrame.emit('deactive', eventData2, holder.tabFrame);
        eventData2.type = 'deactivetab';
        eventData2.target = self;
        if (!holder.containerElt.containsClass('absol-tabview-container-hidden')) self.emit('deactivetab', eventData2, self);
        self._frameHolders = self._frameHolders.filter(function (x) {
          return x.id != id;
        });
        holder.tabFrame.notifyDetached();
        self.$tabbar.removeTab(holder.id);
        holder.containerElt.remove();
        eventData2.type = 'remove';
        eventData2.target = holder.tabFrame;
        holder.tabFrame.emit('remove', eventData2, holder.tabFrame);
        eventData2.type = 'removetab';
        eventData2.target = self;
        self.emit('removetab', eventData2, self);
        self.activeLastTab();
      }, function () {//if reject
      }));
    }
  });

  return Promise.all(resPromise);
};

TabView.prototype.notifyUpdateDesc = function (elt) {
  var holder = this.findHolder(elt);

  if (holder) {
    holder.tabButton.desc = elt.desc;
  }
};

TabView.prototype.notifyUpdateName = function (elt) {
  var holder = this.findHolder(elt);

  if (holder) {
    holder.tabButton.name = elt.name;
  }
};

TabView.prototype.notifyUpdateModified = function (elt) {
  var holder = this.findHolder(elt);

  if (holder) {
    holder.tabButton.modified = elt.modified;
  }
};

TabView.prototype.findHolder = function (elt) {
  for (var i = 0; i < this._frameHolders.length; ++i) {
    var holder = this._frameHolders[i];

    if (holder.tabFrame == elt) {
      return holder;
    }
  }
};

TabView.prototype.addChild = function () {
  var self = this;
  Array.prototype.forEach.call(arguments, function (elt) {
    if (!elt.notifyAttached || !elt.notifyDetached) {
      throw new Error('element is not a tabframe');
    }

    var containerElt = TabView_('.absol-tabview-container.absol-tabview-container-hidden');

    self.appendChild(containerElt); //origin function

    elt.selfRemove();
    var id = elt.attr('id');
    var desc = elt.attr('desc') || undefined;
    var name = elt.attr('name') || 'NoName';
    var modified = elt.modified;
    var tabButton = self.$tabbar.addTab({
      name: name,
      id: id,
      desc: desc,
      modified: modified
    });
    containerElt.addChild(elt);
    elt.notifyAttached(self);
    var holder = {};
    HTML5_OOP.drillProperty(holder, elt, 'id');
    HTML5_OOP.drillProperty(holder, elt, 'desc');
    HTML5_OOP.drillProperty(holder, elt, 'name');
    Object.defineProperties(holder, {
      tabButton: {
        value: tabButton,
        writable: false
      },
      tabFrame: {
        value: elt,
        writable: false
      },
      containerElt: {
        value: containerElt,
        writable: false
      }
    });

    self._frameHolders.push(holder);

    self.activeTab(id);
  });
};

TabView.prototype.activeLastTab = function () {
  var dict = this._frameHolders.reduce(function (ac, holder) {
    ac[holder.id] = true;
    return ac;
  }, {});

  while (this._history.length > 0) {
    var id = this._history[this._history.length - 1];

    if (dict[id]) {
      this.activeTab(id);
      break;
    } else {
      this._history.pop();
    }
  }
};

TabView.prototype.getChildAt = function (index) {
  return this._frameHolders[index].tabFrame;
};

TabView.prototype.getAllChild = function () {
  return this._frameHolders.map(function (holder) {
    return holder.tabFrame;
  });
};

TabView.prototype.getActiveTabHolder = function () {
  var holder = null;

  for (var i = 0; i < this._frameHolders.length; ++i) {
    holder = this._frameHolders[i];

    if (!holder.containerElt.containsClass('absol-tabview-container-hidden')) {
      return holder;
    }
  }

  return null;
};

TabView.prototype.getActiveTab = function () {
  var holder = this.getActiveTabHolder();
  return holder && holder.tabFrame;
};

TabView.prototype.getActiveTabId = function () {
  var holder = this.getActiveTabHolder();
  return holder && holder.id;
};

TabView.prototype.getTabById = function (id) {
  var holder = this.getTabHolderById(id);
  return holder && holder.tabFrame;
};

TabView.prototype.getTabHolderById = function (id) {
  var holder = null;

  for (var i = 0; i < this._frameHolders.length; ++i) {
    holder = this._frameHolders[i];

    if (holder.id === id) {
      return holder;
    }
  }

  return null;
};

TabView.prototype.activeFrame = function (elt) {
  if (typeof elt == "string") {
    return this.activeTab(elt);
  } else if (elt && elt.attr) {
    return this.activeTab(elt.attr('id'));
  } else {
    throw new Error("Invalid param, must be id or elt!");
  }
};

TabView.property = {};
TabView.property.historyOfTab = {
  get: function get() {
    return this._history.slice();
  }
};
absol_acomp_ACore.install('tabview', TabView);
/* harmony default export */ const js_TabView = (TabView);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/singlepage.css
var singlepage = __webpack_require__(5289);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SinglePage.js





var SinglePage_ = absol_acomp_ACore._;
var SinglePage_$ = absol_acomp_ACore.$;
var warned = false;
/***
 * @extends AElement
 * @constructor
 */

function SinglePage() {
  var thisSP = this;
  this._updateIntv = -1;

  this._tick = function () {
    if (this.isDescendantOf(document.body)) {
      if (this.$header) {
        var headerHeight = this.$header.getBoundingClientRect().height;

        if (this._prevHeaderHeight !== headerHeight) {
          HTML5_ResizeSystem.update();
        }
      }
    } else {
      clearInterval(this._updateIntv);
      this._updateIntv = -1;
    }
  }.bind(this);

  this.$attachhook = SinglePage_$('attachhook', this).on('attached', function () {
    this.updateSize();
    setTimeout(this.updateSize, 20);
    HTML5_Dom.addToResizeSystem(this);

    if (thisSP._updateIntv < 0) {
      thisSP._updateIntv = setInterval(thisSP._tick, 200);
    }
  });
  this.$attachhook.updateSize = this.updateSize.bind(this);
  this.$header = null;
  this.$footer = null;
  this.$viewport = SinglePage_$('.absol-single-page-scroller-viewport', this);
  this.$scroller = SinglePage_$('.absol-single-page-scroller', this);
}

SinglePage.tag = 'SinglePage'.toLowerCase();

SinglePage.render = function () {
  return SinglePage_({
    tag: 'tabframe',
    extendEvent: ['sizechange'],
    "class": 'absol-single-page',
    child: [{
      "class": 'absol-single-page-scroller',
      child: {
        "class": 'absol-single-page-scroller-viewport'
      }
    }, 'attachhook']
  });
};

SinglePage.prototype.updateSize = function () {
  if (!this.isDescendantOf(document.body)) return;
  var paddingTop = parseFloat(this.getComputedStyleValue('padding-top').replace('px', '')) || 0;

  if (this.$header) {
    var headerBound = this.$header.getBoundingClientRect();
    var headerMarginTop = parseFloat(this.$header.getComputedStyleValue('margin-top').replace('px', '')) || 0;
    var headerMarginBottom = parseFloat(this.$header.getComputedStyleValue('margin-bottom').replace('px', '')) || 0;
    this.$scroller.addStyle('top', headerBound.height + headerMarginTop + headerMarginBottom + paddingTop + 'px');
    this._prevHeaderHeight = headerBound.height;
  }

  if (this.$footer) {
    var footerBound = this.$footer.getBoundingClientRect();
    this.$viewport.addStyle('padding-bottom', footerBound.height + 'px');
  }

  if (this.isSupportedEvent('sizechange')) this.emit('sizechange', {
    type: 'sizechange',
    target: this
  }, this);
  this.addStyle('--single-page-scroller-height', this.$scroller.clientHeight + 'px');
};

SinglePage.prototype.addChild = function (elt) {
  if (elt.classList.contains('absol-single-page-header')) {
    if (this.firstChild) {
      this.addChildBefore(elt, this.firstChild);
    } else {
      this.appendChild(elt);
    }

    this.$header = SinglePage_$(elt);
    this.updateSize();
  } else if (elt.classList.contains('absol-single-page-footer')) {
    this.$viewport.addChild(elt);
    this.$footer = SinglePage_$(elt);
    this.updateSize();
  } else {
    this.$viewport.addChild(elt);
  }
};

SinglePage.prototype.removeChild = function (elt) {
  if (elt == this.$footer) {
    this.$viewport.removeChild(elt);
    this.$footer = undefined;
    this.updateSize();
  } else if (elt == this.$header) {
    this["super"](elt);
    this.$header = undefined;
    this.updateSize();
  } else {
    this.$viewport.removeChild(elt);
  }
};

absol_acomp_ACore.install(SinglePage);
/* harmony default export */ const js_SinglePage = (SinglePage);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/hexasectionlabel.css
var hexasectionlabel = __webpack_require__(8829);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/HexaSectionLabel.js





var HexaSectionLabel_ = absol_acomp_ACore._;
var HexaSectionLabel_$ = absol_acomp_ACore.$;
var HexaSectionLabel_g = HTML5_Svg.ShareInstance._;
var HexaSectionLabel_$g = HTML5_Svg.ShareInstance.$;
var HexaSectionLabel_Design = {
  hexaHeight: 425,
  textBoxHeight: 286,
  textHeight: 96,
  indexHeight: 110,
  textBoxPaddingLeft: 127,
  borderWidth: 38
};
var HexaSectionLabel_StyleSheet = {
  '.as-hexa-section-label-text': {
    height: HexaSectionLabel_Design.textBoxHeight / HexaSectionLabel_Design.textHeight + 'em',
    'padding-left': HexaSectionLabel_Design.textBoxPaddingLeft / HexaSectionLabel_Design.textHeight + 'em',
    'line-height': HexaSectionLabel_Design.textBoxHeight / HexaSectionLabel_Design.textHeight + 'em'
  },
  '.as-hexa-section-label-index': {
    'font-size': HexaSectionLabel_Design.indexHeight / HexaSectionLabel_Design.textHeight + 'em',
    height: HexaSectionLabel_Design.hexaHeight / HexaSectionLabel_Design.indexHeight + 'em',
    'line-height': HexaSectionLabel_Design.hexaHeight / HexaSectionLabel_Design.indexHeight + 'em',
    width: (HexaSectionLabel_Design.hexaHeight + HexaSectionLabel_Design.borderWidth) / Math.cos(Math.PI / 6) / HexaSectionLabel_Design.indexHeight + 'em'
  }
};

HexaSectionLabel_({
  tag: 'style',
  id: 'hexa-section-label-style',
  props: {
    innerHTML: Object.keys(HexaSectionLabel_StyleSheet).map(function (key) {
      var style = HexaSectionLabel_StyleSheet[key];
      return key + ' {\n' + Object.keys(style).map(function (propName) {
        return propName + ': ' + style[propName] + ';';
      }).join('\n') + '}';
    }).join('\n')
  }
}).addTo(document.head);
/***
 * @extends AElement
 * @constructor
 */


function HexaSectionLabel() {
  this.$background = HexaSectionLabel_$('.as-hexa-section-label-background', this);
  this.$index = HexaSectionLabel_$('.as-hexa-section-label-index', this);
  this.$text = HexaSectionLabel_$('.as-hexa-section-label-text', this);
  this.$attachhook = HexaSectionLabel_('attachhook').addTo(this).on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
    this.requestUpdateSize();
  });
  this.$attachhook.requestUpdateSize = this.redrawBackground.bind(this);
  this.$svg = HexaSectionLabel_g({
    tag: 'svg',
    attr: {
      width: '0',
      height: '0'
    },
    child: ['path.as-hexa-section-label-text-box', 'path.as-hexa-section-label-index-box']
  }).addTo(this.$background);
  this.$indexBox = HexaSectionLabel_$g('path.as-hexa-section-label-index-box', this.$svg);
  this.$textBox = HexaSectionLabel_$g('path.as-hexa-section-label-text-box', this.$svg);
}

HexaSectionLabel.prototype.redrawBackground = function () {
  var indexBound = this.$index.getBoundingClientRect();
  var textBound = this.$text.getBoundingClientRect();
  var cHeight = indexBound.height;
  var cWidth = textBound.right - indexBound.left;
  this.$svg.attr({
    height: cHeight + '',
    width: cWidth + '',
    viewBox: [0, 0, cWidth, cHeight].join(' ')
  });
  var borderWidth = cHeight * HexaSectionLabel_Design.borderWidth / HexaSectionLabel_Design.hexaHeight;
  var radius = cHeight / Math.cos(Math.PI / 6) / 2 - borderWidth / 2;
  var x0 = indexBound.width / 2;
  var y0 = cHeight / 2;
  this.$indexBox.attr('d', Array(6).fill(0).map(function (u, i) {
    var angle = Math.PI / 3 + i * Math.PI / 3;
    var x = radius * Math.cos(angle) + x0;
    var y = radius * Math.sin(angle) + y0;
    return (i == 0 ? 'M' : 'L') + x + ' ' + y;
  }).join(' ') + 'Z').addStyle({
    strokeWidth: borderWidth + ''
  });
  var skewX = 18 / 45;
  var textBoxHeight = textBound.height;
  this.$textBox.attr('d', [[x0, (cHeight - textBoxHeight) / 2], [cWidth - 1, (cHeight - textBoxHeight) / 2], [cWidth - 1 - textBoxHeight * skewX, (cHeight - textBoxHeight) / 2 + textBoxHeight], [x0, (cHeight - textBoxHeight) / 2 + textBoxHeight]].map(function (point, i) {
    return (i == 0 ? 'M' : 'L') + point.join(' ');
  }).join(' ') + 'Z');
};

HexaSectionLabel.tag = 'HexaSectionLabel'.toLowerCase();

HexaSectionLabel.render = function () {
  return HexaSectionLabel_({
    "class": 'as-hexa-section-label',
    child: [{
      "class": 'as-hexa-section-label-background'
    }, '.as-hexa-section-label-index', '.as-hexa-section-label-text']
  });
};

HexaSectionLabel.property = {};
HexaSectionLabel.property.index = {
  set: function set(value) {
    this._index = value;
    this.$index.clearChild().addChild(HexaSectionLabel_({
      text: value + ''
    }));
  },
  get: function get() {
    return this._index;
  }
};
HexaSectionLabel.property.text = {
  set: function set(value) {
    this._text = value;
    this.$text.clearChild().addChild(HexaSectionLabel_({
      text: value + ''
    }));
  },
  get: function get() {
    return this._text;
  }
};
absol_acomp_ACore.install(HexaSectionLabel);
/* harmony default export */ const js_HexaSectionLabel = (HexaSectionLabel);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/vruler.css
var vruler = __webpack_require__(81);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VRuler.js



var VRuler_ = absol_acomp_ACore._;
var VRuler_$ = absol_acomp_ACore.$;

function VRuler() {
  var self = this;
  this.$attachHook = VRuler_('attachhook').on('error', function () {
    this.updateSize = self.update.bind(self);
    HTML5_Dom.addToResizeSystem(this);
    this.updateSize();
  }).addTo(this);
  this.$lines = [];
  this.$numbers = [];
  this.$measureTarget = undefined;
  this._viewingNumberCount = 0;
  this._viewingLineCount = 0;
  this._spacing = 10;
  this._major = 10;
  this._valueFloat = 'top';
}

VRuler.tag = 'vruler';

VRuler.render = function () {
  return VRuler_({
    "class": 'as-vruler'
  });
};

VRuler.prototype.measureElement = function (elt) {
  if (typeof elt == "string") elt = VRuler_$(elt);
  this.$measureTarget = elt;
  this.update();
};

VRuler.prototype.update = function () {
  var fontSize = this.getFontSize();
  var measureBound;
  var bound = this.getBoundingClientRect();
  var contentBound = {
    left: bound.left + 1,
    right: bound.right - 1,
    top: bound.top + 1,
    bottom: bound.bottom - 1,
    width: bound.width - 2,
    height: bound.height - 2
  };

  if (this.$measureTarget) {
    measureBound = this.$measureTarget.getBoundingClientRect();
  } else {
    measureBound = contentBound;
  }

  var startOfset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing;
  if (startOfset < 0) startOfset += this._spacing;
  var lineIndexOfset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOfset) / this._spacing);
  var lineCount = Math.floor((contentBound.height - startOfset) / this._spacing) + 1;

  while (this.$lines.length < lineCount) {
    this.$lines.push(VRuler_('.as-vruler-line'));
  }

  var i;
  var lineElt;

  for (i = 0; i < lineCount; ++i) {
    lineElt = this.$lines[i];

    if ((i + lineIndexOfset) % this._major == 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

    lineElt.addStyle(this._valueFloat, startOfset + this._spacing * i - 0.5 + 'px');
  }

  while (this._viewingLineCount < lineCount) {
    this.$lines[this._viewingLineCount++].addTo(this);
  }

  while (this._viewingLineCount > lineCount) {
    this.$lines[--this._viewingLineCount].remove();
  }

  var numberCount = Math.floor((lineCount + lineIndexOfset - 1) / this._major) - Math.ceil(lineIndexOfset / this._major) + 1;

  while (this.$numbers.length < numberCount) {
    this.$numbers.push(VRuler_('.as-vruler-major-number'));
  }

  var numberElt;
  var number;
  var majorStartOfset = startOfset;

  if (lineIndexOfset > 0) {
    majorStartOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing;
  } else {
    majorStartOfset += (this._major - (this._spacing + lineIndexOfset % this._spacing)) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major;
    numberElt = this.$numbers[i];

    if (numberElt.__cacheNumber__ != number) {
      numberElt.__cacheNumber__ = number;
      numberElt.innerHTML = number + '';
    }

    numberElt.addStyle(this._valueFloat, majorStartOfset + this._major * i * this._spacing - 0.7 * 0.5 * fontSize + 'px');
  }

  while (this._viewingNumberCount < numberCount) {
    this.$numbers[this._viewingNumberCount++].addTo(this);
  }

  while (this._viewingNumberCount > numberCount) {
    this.$numbers[--this._viewingNumberCount].remove();
  }
};

VRuler.property = {};
VRuler.property.major = {
  set: function set(value) {
    if (value > 0) {
      this._major = value;
      this.update();
    }
  },
  get: function get() {
    return this._major;
  }
};
VRuler.property.spacing = {
  set: function set(value) {
    if (value > 0) {
      this._spacing = value;
      this.update();
    }
  },
  get: function get() {
    return this._spacing;
  }
};
VRuler.property.inverse = {
  set: function set(value) {
    this._valueFloat = value ? 'bottom' : 'top';
    this.update();
  },
  get: function get() {
    return this._valueFloat == 'bottom';
  }
};
absol_acomp_ACore.install('vruler', VRuler);
/* harmony default export */ const js_VRuler = (VRuler);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/hruler.css
var hruler = __webpack_require__(9619);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/HRuler.js




var HRuler_ = absol_acomp_ACore._;
var HRuler_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function HRuler() {
  var self = this;
  this.$attachHook = HRuler_('attachhook').on('error', function () {
    this.updateSize = self.update.bind(self);
    HTML5_Dom.addToResizeSystem(this);
    this.updateSize();
  }).addTo(self);
  this.$lines = [];
  this.$numbers = [];
  this._viewingNumberCount = 0;
  this._viewingLineCount = 0;
  this._spacing = 10;
  this._major = 10;
  this.$measureTarget = null;
  this._valueFloat = 'left';
}

HRuler.tag = 'hruler';

HRuler.render = function () {
  return HRuler_({
    "class": 'as-hruler'
  });
};

HRuler.prototype.measureElement = function (elt) {
  if (typeof elt == "string") elt = HRuler_$(elt);
  this.$measureTarget = elt;
  this.update();
};

HRuler.prototype.update = function () {
  var fontSize = this.getFontSize();
  var measureBound;
  var bound = this.getBoundingClientRect();
  var contentBound = {
    left: bound.left + 1,
    right: bound.right - 1,
    top: bound.top + 1,
    bottom: bound.bottom - 1,
    width: bound.width - 2,
    height: bound.height - 2
  };

  if (this.$measureTarget) {
    measureBound = this.$measureTarget.getBoundingClientRect();
  } else {
    measureBound = contentBound;
  }

  var startOfset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing;
  if (startOfset < 0) startOfset += this._spacing;
  var lineIndexOfset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOfset) / this._spacing);
  var lineCount = Math.floor((contentBound.width - startOfset) / this._spacing) + 1;

  while (this.$lines.length < lineCount) {
    this.$lines.push(HRuler_('.as-hruler-line'));
  }

  var i;
  var lineElt;

  for (i = 0; i < lineCount; ++i) {
    lineElt = this.$lines[i];

    if ((i + lineIndexOfset) % this._major == 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

    lineElt.addStyle(this._valueFloat, startOfset + this._spacing * i - 0.5 + 'px');
  }

  while (this._viewingLineCount < lineCount) {
    this.$lines[this._viewingLineCount++].addTo(this);
  }

  while (this._viewingLineCount > lineCount) {
    this.$lines[--this._viewingLineCount].remove();
  }

  var numberCount = Math.floor((lineCount + lineIndexOfset - 1) / this._major) - Math.ceil(lineIndexOfset / this._major) + 1;

  while (this.$numbers.length < numberCount) {
    this.$numbers.push(HRuler_('.as-hruler-major-number'));
  }

  var numberElt;
  var number;
  var majorStartOfset = startOfset;

  if (lineIndexOfset > 0) {
    majorStartOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing;
  } else {
    majorStartOfset += (this._major - (this._spacing + lineIndexOfset % this._spacing)) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major;
    numberElt = this.$numbers[i];

    if (numberElt.__cacheNumber__ != number) {
      numberElt.__cacheNumber__ = number;
      numberElt.innerHTML = number + '';
    }

    numberElt.addStyle(this._valueFloat, majorStartOfset + this._major * i * this._spacing - 0.7 * 2.5 * fontSize + 'px');
  }

  while (this._viewingNumberCount < numberCount) {
    this.$numbers[this._viewingNumberCount++].addTo(this);
  }

  while (this._viewingNumberCount > numberCount) {
    this.$numbers[--this._viewingNumberCount].remove();
  }
};

HRuler.property = {};
HRuler.property.major = {
  set: function set(value) {
    if (value > 0) {
      this._major = value;
      this.update();
    }
  },
  get: function get() {
    return this._major;
  }
};
HRuler.property.spacing = {
  set: function set(value) {
    if (value > 0) {
      this._spacing = value;
      this.update();
    }
  },
  get: function get() {
    return this._spacing;
  }
};
HRuler.property.inverse = {
  set: function set(value) {
    this._valueFloat = value ? 'right' : 'left';
    this.update();
  },
  get: function get() {
    return this._valueFloat == 'right';
  }
};
absol_acomp_ACore.install(HRuler);
/* harmony default export */ const js_HRuler = (HRuler);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/IconSprite.js


var IconSprite_ = absol_acomp_ACore._;
var IconSprite_$ = absol_acomp_ACore.$;

function IconSprite() {
  this.$attachhook = IconSprite_('attachhook').addTo(this).on('error', this.eventHandler.attached);
  this.on('frame', this.eventHandler.frame);
  this._checkRootTimeout = 30;
  this.loop = true;
}

IconSprite.tag = 'iconsprite';

IconSprite.render = function () {
  return IconSprite_('sprite', true);
};
/**
 * @type {IconSprite}
 */


IconSprite.eventHandler = {};

IconSprite.eventHandler.attached = function () {
  var thisAS = this;
  this._checkRootTimeout = 30;
  this.afterReady().then(function () {
    thisAS.width = thisAS.texture.naturalWidth;
    thisAS.height = thisAS.width;
    thisAS.frames = {
      type: 'grid',
      col: 1,
      row: thisAS.texture.naturalHeight / thisAS.texture.naturalWidth
    };
    thisAS.drawFrame(0);
    thisAS.play();
  });
};

IconSprite.eventHandler.frame = function () {
  this._checkRootTimeout--;

  if (this._checkRootTimeout == 0) {
    if (this.isDescendantOf(document.body)) {
      this._checkRootTimeout = 30;
    } else {
      this.stop();
      this.remove();
    }
  }
};

absol_acomp_ACore.install(IconSprite);
/* harmony default export */ const js_IconSprite = (IconSprite);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/linearcolorbar.css
var linearcolorbar = __webpack_require__(6090);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LinearColorBar.js





var LinearColorBar_ = absol_acomp_ACore._;
var LinearColorBar_$ = absol_acomp_ACore.$;
var LinearColorBar_g = HTML5_Svg.ShareInstance._;
var LinearColorBar_$g = HTML5_Svg.ShareInstance.$;
var LinearColorBar_Design = {
  textHeight: 56,
  barHeight: 97,
  barBlockWidth: 79,
  barBlockMargin: 19,
  valueTextHeight: 70,
  valueStrokeWidth: 5,
  valueHeight: 99,
  valueWidth: 52,
  valueTripHeight: 32,
  height: 430,
  barY: 201
};
var SyleSheet = {
  '.as-linear-color-bar': {
    height: LinearColorBar_Design.height / LinearColorBar_Design.textHeight + 'em'
  },
  '.as-linear-color-value-text': {
    'font-size': LinearColorBar_Design.valueTextHeight / LinearColorBar_Design.textHeight + 'em'
  }
};
buildCss(SyleSheet);

function LinearColorBar() {
  this._indent = (Math.random() + '').replace(/[^0-9]/g, '_');
  this._extendValue = 0;
  this._value = 0;
  this._valueText = '';
  this.$valueText = LinearColorBar_$('.as-linear-color-value-text', this);
  this.$minValueText = LinearColorBar_$('.as-linear-color-min-value-text', this);
  this.$maxValueText = LinearColorBar_$('.as-linear-color-max-value-text', this);
  this.$background = LinearColorBar_$('svg.as-linear-color-background', this);
  this._attached = false;
  var thisBar = this;
  this.$attachhook = LinearColorBar_('attachhook').addTo(this).on('error', function () {
    thisBar._attached = true;
    HTML5_Dom.addToResizeSystem(this);
    this.requestUpdateSize();
  });
  this.$background.attr({
    height: 0,
    width: 0
  });
  this.$attachhook.requestUpdateSize = this.redraw.bind(this);
  this.$defs = LinearColorBar_g('defs').addTo(this.$background);
  this.$gradient = LinearColorBar_g('linearGradient#gradient_' + this._indent).attr({
    x1: "0%",
    y1: "0%",
    x2: "100%",
    y2: "0%"
  }).addTo(this.$defs);
  this.$rect = LinearColorBar_g('rect.as-linear-color-bar-rect').attr({
    fill: 'url(#gradient_' + this._indent + ')'
  }).addTo(this.$background);
  this.$splitLine = LinearColorBar_g('path.as-linear-color-split-line').addTo(this.$background);
  this.$valueArrow = LinearColorBar_g('path.as-linear-color-value-arrow').addTo(this.$background);
  this.colorMapping = 'rainbow';
}

LinearColorBar.prototype.redraw = function () {
  var bBound = this.getBoundingClientRect();
  var cWidth = bBound.width;
  var cHeight = bBound.height;
  var maxTextBound = this.$maxValueText.getBoundingClientRect();
  var minTextBound = this.$minValueText.getBoundingClientRect();
  var valueTextBound = this.$valueText.getBoundingClientRect();
  var valueWidth = LinearColorBar_Design.valueWidth / LinearColorBar_Design.height * cHeight;
  var minValueX = valueWidth / 1.5;
  this.$minValueText.addStyle('left', Math.max((minValueX - minTextBound.width) / 2, 0) + 'px');
  var maxValueX = (cWidth - LinearColorBar_Design.valueWidth) / (1 + this._extendValue);
  var extendX = cWidth - valueWidth / 1.5;
  var valueX = minValueX + this._value * (maxValueX - minValueX);
  this.$valueText.addStyle('left', valueX - valueTextBound.width / 2 + 'px');
  this.$maxValueText.addStyle('left', maxValueX - maxTextBound.width / 2 + 'px');
  var barY = LinearColorBar_Design.barY / LinearColorBar_Design.height * cHeight;
  var barHeight = LinearColorBar_Design.barHeight / LinearColorBar_Design.height * cHeight;
  this.$rect.attr({
    x: '' + minValueX,
    y: '' + barY,
    width: extendX - minValueX + '',
    height: barHeight
  });
  this.$background.attr({
    height: cHeight + '',
    width: cWidth + '',
    viewBox: [0, 0, cWidth, cHeight].join(' ')
  });
  var valueTripHeight = LinearColorBar_Design.valueTripHeight / LinearColorBar_Design.height * cHeight;
  var valueHeight = LinearColorBar_Design.valueHeight / LinearColorBar_Design.height * cHeight;
  this.$valueArrow.addStyle('stroke-width', LinearColorBar_Design.valueStrokeWidth / LinearColorBar_Design.height * cHeight + '').attr('d', [[[valueX, barY], [valueX - valueWidth / 2, barY - valueTripHeight], [valueX - valueWidth / 2, barY - valueHeight], [valueX + valueWidth / 2, barY - valueHeight], [valueX + valueWidth / 2, barY - valueTripHeight]]].map(function (point, i) {
    return (i == 0 ? 'M' : 'L') + point.join(' ');
  }).join(' ') + 'Z');
  var splitDistMin = (LinearColorBar_Design.barBlockWidth + LinearColorBar_Design.barBlockMargin) / LinearColorBar_Design.height * cHeight;
  var splitCounts = [100, 50, 20, 10, 5, 2, 1];
  var splitDist = maxValueX - minValueX;
  var splitCount = 1;

  for (var i = 0; i < splitCounts.length; ++i) {
    splitDist = (maxValueX - minValueX) / splitCounts[i];

    if (splitDist >= splitDistMin) {
      splitCount = splitCounts[i];
      break;
    }
  }

  this.$splitLine.addStyle('stroke-width', LinearColorBar_Design.barBlockMargin / LinearColorBar_Design.height * cHeight + '').attr({
    d: Array(splitCount + 1).fill(0).map(function (u, i) {
      return 'M' + (maxValueX - i * splitDist) + ' ' + (barY - 1) + 'v' + (barHeight + 2);
    }).join(' ')
  });
};

LinearColorBar.prototype._updateGradient = function () {
  var barMax = 1 + this._extendValue;
  var gradientElt = this.$gradient.clearChild();

  this._colorMapping.forEach(function (it) {
    LinearColorBar_g({
      tag: 'stop',
      attr: {
        offset: (it.value <= 1 ? it.value / barMax * 100 : 100) + '%'
      },
      style: {
        'stop-color': it.color + '',
        'stop-opacity': '1'
      }
    }).addTo(gradientElt);
  });
};

LinearColorBar.prototype.BUILDIN_COLORS_RANGE = {
  'rainbow': [{
    value: 0,
    color: 'red'
  }, {
    value: 1 / 6,
    color: 'orange'
  }, {
    value: 1 / 3,
    color: 'yellow'
  }, {
    value: 1 / 2,
    color: 'green'
  }, {
    value: 2 / 3,
    color: 'blue'
  }, {
    value: 5 / 6,
    color: 'indigo'
  }, {
    value: 1,
    color: 'violet'
  }, {
    value: Infinity,
    color: 'violet'
  }],
  'rainbow-invert': [{
    value: 0,
    color: 'violet'
  }, {
    value: 1 / 6,
    color: 'indigo'
  }, {
    value: 1 / 3,
    color: 'blue'
  }, {
    value: 1 / 2,
    color: 'green'
  }, {
    value: 2 / 3,
    color: 'yellow'
  }, {
    value: 5 / 6,
    color: 'orange'
  }, {
    value: 1,
    color: 'red'
  }, {
    value: Infinity,
    color: 'violet'
  }],
  'performance': [{
    value: 0,
    color: 'red'
  }, {
    value: 0.5,
    color: 'orange'
  }, {
    value: 1,
    color: 'green'
  }, {
    value: Infinity,
    color: 'green'
  }],
  'performance-invert': [{
    value: 0,
    color: 'green'
  }, {
    value: 0.5,
    color: 'orange'
  }, {
    value: 1,
    color: 'red'
  }, {
    value: Infinity,
    color: 'red'
  }]
};
LinearColorBar.tag = 'LinearColorBar'.toLowerCase();

LinearColorBar.render = function () {
  return LinearColorBar_({
    "class": 'as-linear-color-bar',
    child: ['svg.as-linear-color-background', '.as-linear-color-value-text', '.as-linear-color-min-value-text', '.as-linear-color-max-value-text']
  });
};

LinearColorBar.property = {};
LinearColorBar.property.valueText = {
  set: function set(value) {
    value = value + '';
    this._valueText = value;
    this.$valueText.clearChild().addChild(LinearColorBar_({
      text: value
    }));
  },
  get: function get() {
    return this._valueText;
  }
};
LinearColorBar.property.minValueText = {
  set: function set(value) {
    value = value + '';
    this._minValueText = value;
    this.$minValueText.clearChild().addChild(LinearColorBar_({
      text: value
    }));
  },
  get: function get() {
    return this._valueText;
  }
};
LinearColorBar.property.maxValueText = {
  set: function set(value) {
    value = value + '';
    this._maxValueText = value;
    this.$maxValueText.clearChild().addChild(LinearColorBar_({
      text: value
    }));
  },
  get: function get() {
    return this._valueText;
  }
};
LinearColorBar.property.value = {
  set: function set(value) {
    this._value = value;
  },
  get: function get() {
    return this._value;
  }
};
LinearColorBar.property.extendValue = {
  set: function set(value) {
    this._extendValue = value;

    this._updateGradient();
  },
  get: function get() {
    return this._extendValue;
  }
};
LinearColorBar.property.colorMapping = {
  set: function set(value) {
    if (typeof value == "string") value = this.BUILDIN_COLORS_RANGE[value];
    this._colorMapping = value.slice();

    this._colorMapping.sort(function (a, b) {
      return a.value - b.value;
    });

    this._updateGradient();
  },
  get: function get() {
    return this._colorMapping;
  }
};
absol_acomp_ACore.install(LinearColorBar);
/* harmony default export */ const js_LinearColorBar = (LinearColorBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mediainput.css
var mediainput = __webpack_require__(9725);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MediaInput.js









var MediACore = new HTML5_Dom();
MediACore.install(absol_acomp_ACore);
var MediaInput_ = MediACore._;
var MediaInput_$ = MediACore.$;

function MediaInput_openFileDialog(props) {
  if (!MediACore.$fileInput) {
    MediACore.$fileInput = MediaInput_({
      tag: 'input',
      "class": 'vmedia-no-show',
      attr: {
        type: 'file'
      },
      props: {}
    }).addTo(document.body);
  }

  props = props || {};

  if (props.accept) {
    if (props.accept instanceof Array) MediACore.$fileInput.attr('accept', props.accept.join(','));else MediACore.$fileInput.attr('accept', props.accept);
  } else {
    MediACore.$fileInput.attr('accept', null);
  }

  if (props.multiple) {
    MediACore.$fileInput.attr('multiple', 'true');
  } else {
    MediACore.$fileInput.attr('multiple');
  }

  MediACore.$fileInput.value = null;
  MediACore.$fileInput.click();
  return new Promise(function (resolve, reject) {
    var finish = false;
    var body = MediaInput_$('body');
    MediACore.$fileInput.once('change', function () {
      finish = true;
      resolve(Array.prototype.map.call(this.files, function (file) {
        return file;
      }));
    });
    body.once('mousedown', function () {
      if (finish) return;
      resolve();
    });
  });
}

function MediaInput() {
  this.$editor = MediaInput_$('.vmedia-media-input-text-container-editor', this);
  this.$editor.on('paste', this.eventHandler.paste);
  this.$editor.on('keydown', this.eventHandler.keydown, true);
  this.$addImagebtn = MediaInput_$('#add-image-btn', this);
  this.$addImagebtn.on('click', this.eventHandler.clickAddImage);
  this.$addFilebtn = MediaInput_$('#add-file-btn', this);
  this.$addFilebtn.on('click', this.eventHandler.clickAddFile);
  this.$imagePreviewContainer = MediaInput_$('.vmedia-media-input-imagepreview-container', this);
  this.on('dragover', this.eventHandler.dragOver);
  this.on('drop', this.eventHandler.drop);
  this.$sendbtn = MediaInput_$('#send-btn', this);
  this.$sendbtn.on('click', this.eventHandler.send);
  this.$toolLeftCtn = MediaInput_$('.vmedia-media-input-tool-container-left', this);
  this.$pluginContentCtn = MediaInput_$('.vmedia-media-input-plugin-content-container', this);
  this.snapData = [];
  this.snapDataHead = 0;
  this.sync = this.afterAttached();
  this.snapText();
}

MediaInput.tag = 'MediaInput'.toLowerCase();

MediaInput.render = function () {
  return MediaInput_({
    "class": 'vmedia-media-input',
    extendEvent: ['send', 'update', 'releaseplugin'],
    child: {
      "class": 'vmedia-media-input-text-container',
      child: [{
        "class": 'vmedia-media-input-imagepreview-container',
        child: {
          "class": 'vmedia-media-input-dropover',
          child: 'download-ico'
        }
      }, {
        "class": 'vmedia-media-input-text-container-editor',
        attr: {
          contenteditable: 'true'
        },
        on: {}
      }, {
        "class": 'vmedia-media-input-text-container-buttons',
        attr: {
          title: 'Send'
        }
      }, {
        "class": 'vmedia-media-input-tool-container',
        child: [{
          "class": 'vmedia-media-input-tool-container-left',
          child: [{
            tag: 'button',
            attr: {
              id: 'add-image-btn',
              title: 'Add image'
            },
            child: 'add-image-ico'
          }, {
            tag: 'button',
            attr: {
              id: 'add-file-btn',
              title: 'Add file'
            },
            child: 'add-file-ico'
          }]
        }, {
          "class": 'vmedia-media-input-tool-container-right',
          child: [{
            tag: 'button',
            id: 'send-btn',
            attr: {
              title: 'Send'
            },
            child: 'send-ico'
          }]
        }]
      }, '.vmedia-media-input-plugin-content-container.blur']
    }
  });
};

MediaInput.prototype.addImage = function (url, title, data) {
  MediaInput_({
    tag: 'imagepreview',
    attr: {
      title: title
    },
    props: {
      data: data,
      imgSrc: url
    },
    on: {
      pressremove: function pressremove() {
        this.selfRemove();
      }
    }
  }).addTo(this.$imagePreviewContainer);
};

MediaInput.prototype.addFile = function (url, ext, title, data) {
  MediaInput_({
    tag: 'filepreview',
    attr: {
      title: title
    },
    props: {
      fileSrc: url,
      ext: ext,
      data: data
    },
    on: {
      pressremove: function pressremove() {
        this.selfRemove();
      }
    }
  }).addTo(this.$imagePreviewContainer);
};

MediaInput.property = {};
MediaInput.property.text = {
  set: function set(value) {
    this.$editor.clearChild();
    value = value || '';
    var lines = value.split(/\r*\n/);
    if (lines.length < 1) return;
    this.$editor.addChild(document.createTextNode(lines[0]));
    lines.shift();
    lines.forEach(function (line) {
      this.$editor.addChild(MediaInput_({
        child: document.createTextNode(line)
      }));
    }.bind(this));
    this.snapText();
  },
  get: function get() {
    return this.getTextFromElements(this.$editor);
  }
};
MediaInput.property.files = {
  get: function get() {
    return Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
      return e._azar_extendTags && e._azar_extendTags.filepreview;
    }).map(function (e) {
      return e.data;
    });
  }
};
MediaInput.property.images = {
  get: function get() {
    return Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
      return e._azar_extendTags && e._azar_extendTags.imagepreview;
    }).map(function (e) {
      return e.data;
    });
  }
}; // MediaInput.property

MediaInput.property.plugins = {
  set: function set(value) {
    this.sync = this.sync.then(this._dettachPlugins.bind(this, this._plugins));

    if (value) {
      if (!(value instanceof Array)) value = [value];
      this._plugins = value;
      this.addClass('has-plugin');
    } else {
      //remove plugin
      this.sync.then(this._dettachPlugins.bind(this));
      this._plugins = null;
      this.removeClass('has-plugin');
    }

    this.sync = this.sync.then(this._attachPlugins.bind(this, this._plugins));
  },
  get: function get() {
    return this._plugins || null;
  }
};

MediaInput.prototype.appendText = function (text) {
  var lastBr = null;

  if (this.$editor.childNodes && this.$editor.childNodes.length > 0 && this.$editor.childNodes[this.$editor.childNodes.length - 1].tagName && this.$editor.childNodes[this.$editor.childNodes.length - 1].tagName.toLowerCase() == 'br') {
    lastBr = this.$editor.childNodes[this.$editor.childNodes.length - 1];
  }

  var lines = text.split(/\r?\n/);

  if (lastBr) {
    for (var i = 0; i < lines.length; ++i) {
      if (i > 0) this.$editor.addChild(MediaInput_('br'));

      var e = MediaInput_({
        text: lines[i]
      });

      this.$editor.addChild(e);
    }
  } else {
    for (var i = 0; i < lines.length; ++i) {
      if (i > 0) this.$editor.addChildBefore(MediaInput_('br'), lastBr);

      var e = MediaInput_({
        text: lines[i]
      });
    }

    this.$editor.addChildBefore(e, lastBr);
  }

  setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype._attachPlugins = function (plugins) {
  if (!plugins) return;
  var self = this;
  plugins.forEach(function (plugin) {
    var oldContent = null;

    var $button = MediaInput_('button').addTo(self.$toolLeftCtn).on('click', function () {
      if (self._lastActivePlugin == plugin) return;
      self.releasePlugin();
      self._lastActivePlugin = plugin;
      self.$pluginContentCtn.removeClass('blur');
      self.$pluginContentCtn.clearChild();

      if (plugin.getContent) {
        var newContent = plugin.getContent(self, MediaInput_, MediaInput_$, self.$pluginContentCtn, oldContent);
        oldContent = newContent;
        self.$pluginContentCtn.addChild(newContent);
      }

      var buttonBound = $button.getBoundingClientRect();
      var rootBound = self.$pluginContentCtn.parentNode.getBoundingClientRect();
      self.$pluginContentCtn.addStyle({
        left: buttonBound.left + buttonBound.width / 2 - rootBound.left + 'px',
        bottom: rootBound.bottom - buttonBound.top + 'px'
      });
      if (plugin.onActive) plugin.onActive(self);
      setTimeout(function () {
        var outListener = function outListener(event) {
          if (HTML5_EventEmitter.hitElement(self.$pluginContentCtn, event)) {} else if (self._lastActivePlugin == plugin) {
            var prevented = true;
            if (plugin.onBlur) plugin.onBlur({
              preventDefault: function preventDefault() {
                prevented = false;
              }
            });

            if (prevented) {
              self.releasePlugin();
              MediaInput_$(document.body).off('click', outListener);
            }
          } else {
            MediaInput_$(document.body).off('click', outListener);
          }
        };

        MediaInput_$(document.body).on('click', outListener);
        self.once('releaseplugin', function (ev) {
          if (ev.plugin == plugin) {
            MediaInput_$(document.body).off('click', outListener);
          }
        });
      }, 100);
    });

    var btnInners = plugin.getTriggerInner(self, MediaInput_, MediaInput_$, $button);
    if (!(btnInners instanceof Array)) btnInners = [btnInners];
    btnInners.forEach(function (e) {
      if (typeof e == 'string') {
        e = MediaInput_({
          text: e
        });
      }

      $button.addChild(e);
    });
    if (plugin.onAttached) plugin.onAttached(self);
  }); //todo

  return true;
};

MediaInput.prototype.releasePlugin = function () {
  if (this._lastActivePlugin) {
    var plugin = this._lastActivePlugin;
    plugin.onDeactived && plugin.onDeactived(self);
    this.$pluginContentCtn.addClass('blur');
    this.emit('releaseplugin', {
      target: this,
      plugin: plugin
    }, this);
    this._lastActivePlugin = null;
  }
};

MediaInput.prototype._dettachPlugins = function (plugins) {
  if (!plugins) return;
  var self = this;
  plugins.forEach(function (plugin) {
    if (plugin.onAttached) plugin.onAttached(self);
  }); //todo

  this._lastActivePlugin = null;
  return true;
};

MediaInput.prototype.focus = function () {
  this.$editor.focus();
  setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.clear = function () {
  Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
    return e._azar_extendTags && e._azar_extendTags.imagepreview;
  }).forEach(function (e) {
    e.selfRemove();
  });
  Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
    return e._azar_extendTags && e._azar_extendTags.filepreview;
  }).forEach(function (e) {
    return e.selfRemove();
  });
  this.$editor.innerHTML = "";
  this.emit('update', {
    target: this
  }, this);
};

MediaInput.prototype.escapeSpace = function (s) {
  return s.replace(/\s/g, '&nbsp');
};

MediaInput.prototype.unescapeSpace = function (s) {
  return s.replace(/&nbsp/g, ' ');
};

MediaInput.prototype.getTextFromElements = function (element) {
  return getTextIn(element); // var self = this;
  // function visit(e, prevE) {
  //     var ac = '';
  //     var isNewLine = false;
  //     if (prevE && prevE.nodeType != Node.TEXT_NODE) {
  //         if (prevE.tagName && prevE.tagName.toLowerCase() == 'br') {
  //             isNewLine = true;
  //         }
  //         else if (Element.prototype.getComputedStyleValue.call(prevE, 'display') == 'block') {
  //             isNewLine = true;
  //         }
  //     }
  //     if (e.nodeType == Node.TEXT_NODE) {
  //         if (isNewLine) ac += '\n';
  //         ac += e.data;
  //     }
  //     else {
  //         var lastE = undefined;
  //         for (var i = 0; i < e.childNodes.length; ++i) {
  //             ac += visit(e.childNodes[i], i > 0 ? e.childNodes[i - 1] : null);
  //         }
  //     }
  //     return ac;
  // }
  // return visit(element);
};

MediaInput.prototype.getElementsFromText = function (text) {
  var newElements = text.split('\n').map(function (text) {
    return document.createTextNode(text);
  }).reduce(function (ac, cr, i, arr) {
    if (i > 0) ac.push(MediaInput_('br'));
    ac.push(cr);
    return ac;
  }, []);
  return newElements;
}; // MediaInput.prototype.textOnly = function(e) {
//     if (e.nodeType == Node.TEXT_NODE) return e.textContent;
//     if (!e.tagName) return '';
//     if (e.tagName.toLowerCase() == 'br') return '\n';
//     return ($(e).getComputedStyleValue('display') == 'block' ? '\n' : '') + Array.prototype.map.call(e.childNodes, this.textOnly.bind(this)).join('')
// };


MediaInput.prototype.makeTextOnly = function () {
  var self = this;
  var editor = this.$editor;
  Array.apply(null, this.$editor.childNodes).forEach(function (e) {
    e = MediaInput_$(e);
    if (e.nodeType == Node.TEXT_NODE) return;

    if (e.tagName) {
      var tagName = e.tagName.toLowerCase();
      if (tagName == 'br') return;

      if (tagName.match(/img|script|svg|button|iframe|hr|video|canvas/)) {
        e.selfRemove(e);
      }

      if (tagName.match(/select|input|textarea/)) {
        e.selfReplace(document.createTextNode(e.value));
        return;
      }

      var newElements = self.getElementsFromText(self.getTextFromElements(e));
      var lastElement;

      if (e.getComputedStyleValue('display') == 'block') {
        lastElement = MediaInput_('br');
      } else {
        lastElement = newElements.pop();
      }

      e.selfReplace(lastElement);
      newElements.forEach(function (nE) {
        editor.addChildBefore(nE, lastElement);
      });
    }
  });
  this.emit('update', {
    target: editor
  }, this);
};

MediaInput.eventHandler = {};

MediaInput.eventHandler.keydown = function (event) {
  if (event.key == "Enter") {
    if (!event.ctrlKey && !event.altKey && !event.shiftKey) {
      event.preventDefault();
      this.eventHandler.send(event);
      this.snapText();
    }
  }

  if (event.ctrlKey && event.key == 'z') {
    event.preventDefault();
    this.undoText();
  }

  if (event.ctrlKey && event.key == 'x') {
    setTimeout(this.snapText.bind(this), 100);
  }

  setTimeout(this.emit.bind(this, 'update', event, this), 1);
};

MediaInput.eventHandler.send = function (event) {
  if (this.images.length == 0 && this.text.trim().length == 0 && this.files.length == 0) {
    return;
  }

  this.emit('send', event, this);
  this.snapText();
};

MediaInput.eventHandler.clickAddImage = function (event) {
  MediaInput_openFileDialog({
    accept: 'image/*',
    multiple: true
  }).then(function (files) {
    if (!files) return;
    files.map(function (file) {
      var url = (window.URL || window.webkitURL).createObjectURL(file);
      this.addImage(url, file.name, {
        file: file,
        name: file.name,
        url: url
      });
      this.emit('update', event, this);
    }.bind(this));
  }.bind(this));
};

MediaInput.eventHandler.clickAddFile = function (event) {
  MediaInput_openFileDialog({
    multiple: true
  }).then(function (files) {
    if (!files) return;
    files.map(function (file) {
      var url = (window.URL || window.webkitURL).createObjectURL(file);

      if (file.type.match(/^image/)) {
        this.addImage(url, file.name, {
          file: file,
          name: file.name,
          url: url
        });
      } else {
        var p = file.name.split('.');
        var ext = p.length > 1 ? p[p.length - 1] : '';
        this.addFile(url, ext.toUpperCase(), file.name, {
          file: file,
          name: file.name,
          url: url
        });
      }
    }.bind(this));
    this.emit('update', event, this);
  }.bind(this));
};

MediaInput.eventHandler.dragOver = function (event) {
  event.preventDefault();
  this._lastDragOver = new Date().getTime();
  var currentDragOver = this._lastDragOver;

  if (!this.dragOver) {
    this.dragOver = true;
    this.addClass('dragover');
    this.emit('update', event, this);
  }

  setTimeout(function () {
    this._waitDragFileOut;

    if (this._lastDragOver == currentDragOver) {
      this.removeClass('dragover');
      this.dragOver = false;
      this.emit('update', event, this);
    }
  }.bind(this), 200);
};

MediaInput.eventHandler.drop = function (event) {
  event.preventDefault();

  if (event.dataTransfer.items) {
    for (var i = 0; i < event.dataTransfer.items.length; i++) {
      if (event.dataTransfer.items[i].kind === 'file') {
        var file = event.dataTransfer.items[i].getAsFile();

        if (!file.type && file.size % 4096 == 0) {//todo: folder
        } else {
          this.addSystemFile(file);
          this.emit('update', event, this);
        }
      }
    }
  } else {
    for (var i = 0; i < event.dataTransfer.files.length; i++) {
      var file = event.dataTransfer.files[i];

      if (!file.type && file.size % 4096 == 0) {} else {
        this.addSystemFile(file);
        this.emit('update', event, this);
      }
    }
  }
};

MediaInput.prototype.addSystemFile = function (file) {
  var url = (window.URL || window.webkitURL).createObjectURL(file);

  if (file.type.match(/^image/)) {
    this.addImage(url, file.name, {
      file: file,
      name: file.name,
      url: url
    });
  } else {
    var p = file.name.split('.');
    var ext = p.length > 1 ? p[p.length - 1] : '';
    this.addFile(url, ext.toUpperCase(), file.name, {
      file: file,
      name: file.name,
      url: url
    });
  }
};

MediaInput.eventHandler.paste = function (event) {
  var pasteData = event.clipboardData || window.clipboardData;
  var beforePasteElement = [];
  var self = this;

  function visit(e, ac) {
    ac.push(e);

    if (e.childNodes) {
      for (var i = 0; i < e.childNodes.length; ++i) {
        visit(e.childNodes[i], ac);
      }
    }
  }

  visit(this.$editor, beforePasteElement);

  function relocalCursor() {
    var afterPasteElement = [];
    visit(self.$editor, afterPasteElement);
    var diffElts = afterPasteElement.filter(function (e) {
      return beforePasteElement.indexOf(e) < 0;
    });

    if (diffElts.length > 0) {
      var last = diffElts.pop();

      if (last.nodeType == Node.TEXT_NODE) {
        var range = document.createRange();
        range.selectNodeContents(last);
        range.setStart(last, last.data.length);
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
      } else {
        setSelectionRange(last, Infinity);
      }
    }
  }
  /**Safari bug */


  if (pasteData && pasteData.items) {
    var items = pasteData.items;
    var isAddImage = false;

    for (var i = 0; i < items.length; i++) {
      if (items[i].type.indexOf('image') !== -1) {
        var blob = items[i].getAsFile();
        var URLObj = window.URL || window.webkitURL;
        var source = URLObj.createObjectURL(blob);
        var file = blobToFile(blob);
        var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) {
          this.addImage(source, 'Clipboard', {
            file: blob,
            name: null,
            url: source,
            blob: blob,
            arrayBuffer: arrayBuffer
          });
          this.emit('update', event, this);
        }.bind(this));
        isAddImage = true;
        this.emit('update', event, this);
      }
    }

    if (isAddImage) event.preventDefault();
    requestAnimationFrame(function () {
      self.makeTextOnly();
      relocalCursor();
    });
  } else {
    requestAnimationFrame(function () {
      var img = MediaInput_$('img', this.$editor, function (img) {
        if (img) {
          img = MediaInput_$(img);
          var source = img.getAttribute('src');
          img.selfRemove();
          HTML5_Dom.imageToCanvas(img).then(function (canvas) {
            var dataURI = canvas.toDataURL();
            var blob = dataURItoBlob(dataURI);
            var file = blobToFile(blob);
            var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) {
              this.addImage(source, 'Clipboard', {
                dataURI: dataURI,
                file: blob,
                name: null,
                url: source,
                blob: blob,
                arrayBuffer: arrayBuffer
              });
              this.emit('update', event, this);
            }.bind(this));
          }.bind(this), function (e) {})["catch"](function (e) {});
        }
      }.bind(this));
      this.makeTextOnly();
      relocalCursor();
    }.bind(this));
  }
};

MediaInput.prototype.undoText = function () {
  if (this.snapDataHead <= 1) return;
  this.snapDataHead--;
  if (this.snapDataHead <= 0) return;
  var newText = this.snapData[this.snapDataHead - 1];
  this.text = newText;
  setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.redoText = function () {
  if (this.snapData.length <= this.snapDataHead) return;
  this.snapDataHead++;
  var newText = this.snapData[this.snapDataHead - 1];
  var currentText = this.text;
  this.text = newText;
  setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.snapText = function () {
  while (this.snapData.length > this.snapDataHead && this.snapData.length > 0) {
    this.snapData.pop();
  }

  var oldText = this.snapData[this.snapDataHead - 1];
  var newText = this.text;
  if (newText == oldText) return;
  this.snapData.push(this.text);
  this.snapDataHead++;
};

function ImagePreview() {
  var res = MediaInput_({
    extendEvent: 'pressremove',
    "class": ['vmedia-media-input-imagepreview', 'vmedia-no-select'],
    child: ['img', 'times-ico']
  });

  res.$img = MediaInput_$('img', res);
  res.$timesIco = MediaInput_$('times-ico', res);
  res.$timesIco.on('click', function (event) {
    res.emit('pressremove', event, res);
  });
  HTML5_OOP.drillProperty(res, res.$img, 'imgSrc', 'src');
  return res;
}

;

function FilePreview() {
  var res = MediaInput_({
    extendEvent: 'pressremove',
    "class": ['vmedia-media-input-filepreview', 'vmedia-no-select'],
    child: ['attachment-ico', 'times-ico']
  });

  res.$img = MediaInput_$('attachment-ico', res);
  HTML5_OOP.drillProperty(res, res.$img, 'ext');
  res.$timesIco = MediaInput_$('times-ico', res);
  res.$timesIco.on('click', function (event) {
    res.emit('pressremove', event, res);
  });
  return res;
}

;
MediACore.creator.mediainput = MediaInput;
MediACore.creator.imagepreview = ImagePreview;
MediACore.creator.filepreview = FilePreview;

MediACore.creator['send-ico'] = function () {
  return MediaInput_(['<svg class="send" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458">', '    <g transform="translate(0 -270.54)">', '        <path d="m0.64298 272.44 3.1712 9.5402 22.152 1.7742-22.152 1.7482-3.1712 9.4749 25.323-11.223z" />', '    </g>', '</svg>'].join(''));
};

MediACore.creator['add-file-ico'] = function () {
  return MediaInput_(['<svg class="add-file" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg">', '    <g transform="translate(0 -270.54)">', '        <path d="m4.2431 295.69c-0.74006-0.0759-1.4136-0.33772-2.0047-0.77942-0.19965-0.14919-0.60549-0.55475-0.75233-0.75182-0.45099-0.60524-0.7154-1.2913-0.77699-2.016-0.01275-0.15007-0.01628-2.6111-0.01252-8.7468 0.0049-8.0504 0.0068-8.5472 0.03338-8.6986 0.0883-0.50391 0.22692-0.91024 0.44705-1.3104 0.52794-0.95973 1.452-1.6645 2.5119-1.9158 0.44319-0.10508 0.12729-0.0972 4.1445-0.10308 2.5538-4e-3 3.6864-1e-4 3.7795 0.0121 0.38853 0.0508 0.80777 0.24687 1.2709 0.59434 0.44102 0.33085 0.68272 0.55272 1.7227 1.5813 0.46507 0.45998 1.2812 1.2664 1.8136 1.7921 0.96172 0.94958 1.3847 1.3824 1.696 1.7354 0.61073 0.69257 0.92 1.2063 1.0441 1.7344 0.02613 0.11122 0.02875 0.28598 0.03409 2.2731 0.0047 1.7451 0.0018 2.1574-0.01502 2.178-0.01424 0.0174-0.10685 0.0394-0.2936 0.0699-0.45695 0.0745-1.0078 0.22363-1.4356 0.38862-0.10025 0.0387-0.1888 0.0663-0.19678 0.0613-0.0085-5e-3 -0.01461-0.7983-0.01475-1.9156-2.09e-4 -1.6438-0.0036-1.9208-0.0245-2.0096-0.06972-0.29578-0.28642-0.50043-0.63767-0.60222-0.32942-0.0955-0.31104-0.0947-2.4299-0.10482l-1.9437-9e-3 -0.12495-0.0442c-0.25474-0.0901-0.45899-0.26526-0.5666-0.48578-0.10853-0.22238-0.10356-0.127-0.10407-1.9994-4.63e-4 -1.7153-0.01031-2.1544-0.05446-2.4288-0.06935-0.43095-0.22893-0.69171-0.5027-0.82138l-0.10904-0.0516h-3.1807c-3.4262 0-3.27-4e-3 -3.5482 0.0835-0.68034 0.21325-1.1718 0.754-1.3329 1.4666l-0.0345 0.15261v8.5059c0 8.1045 0.0014 8.5125 0.02871 8.6468 0.08088 0.39719 0.25808 0.72858 0.53956 1.0091 0.28082 0.27984 0.576 0.44186 0.98191 0.53896 0.11389 0.0273 0.36156 0.0293 4.5294 0.0374l4.409 9e-3 0.02019 0.0402c0.0111 0.0221 0.07695 0.15943 0.14632 0.30521s0.17519 0.3518 0.23515 0.45783c0.14341 0.25357 0.43703 0.69284 0.61725 0.92343 0.0793 0.10148 0.14077 0.19003 0.13659 0.19679-0.0073 0.0118-9.9306 0.0132-10.046 1e-3z" />', '        <path transform="matrix(.26458 0 0 .26458 0 270.54)" d="m72.469 65.742v7.4062h-7.4062v7.2852h7.4062v7.2812h7.2793v-7.2812h7.3535v-7.2852h-7.3535v-7.4062zm24.948 11.119a21.371 21.371 0 0 1-21.371 21.371 21.371 21.371 0 0 1-21.371-21.371 21.371 21.371 0 0 1 21.371-21.371 21.371 21.371 0 0 1 21.371 21.371z" style="fill-rule:evenodd;" />', '        <path d="m17.256 283.76 1.921-0.47607-0.04725-4.2884c0-0.50159-0.29516-1.2441-1.0789-2.0168l-4.6989-4.6324c-0.73814-0.72769-1.5947-0.97084-2.1519-0.97084h-7.0235c-2.1533 0.0144-3.4601 2.6226-3.4778 3.4778v17.284c0 2.121 2.2409 3.5346 3.5346 3.5346h10.058l-1.1146-1.9305h-8.6658c-1.1271 0-1.8503-1.1115-1.8503-1.8503v-16.867c0-1.0721 1.1373-1.6977 1.6977-1.6977h6.2175c0.43142 0 0.8103 0.28958 0.8103 1.1742v3.714c0 0.24768 0.36442 0.90967 0.90968 0.90967h3.2537c1.2453 0 1.6905 0.32876 1.6905 1.1613z"  />', '    </g>', '</svg>'].join(''));
};

MediACore.creator['add-image-ico'] = function () {
  return MediaInput_(['<svg class="add-image" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="absol/src/HTML5/Elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">', '    <g transform="translate(0 -270.54)">', '        <path d="m24.73 288.69a5.9808 5.9808 0 0 1-5.9808 5.9808 5.9808 5.9808 0 0 1-5.9808-5.9808 5.9808 5.9808 0 0 1 5.9808-5.9808 5.9808 5.9808 0 0 1 5.9808 5.9808zm1.503-0.037a7.5843 7.5843 0 0 1-7.5843 7.5843 7.5843 7.5843 0 0 1-7.5843-7.5843 7.5843 7.5843 0 0 1 7.5843-7.5843 7.5843 7.5843 0 0 1 7.5843 7.5843z" style="fill-rule:evenodd;fill:#414141"/>', '        <path d="m17.869 284.42v3.4127h-3.4081v1.6066h3.4081v3.438h1.6061v-3.438h3.4432v-1.6066h-3.4432v-3.4127z" style="fill-rule:evenodd;fill:#414141"/>', '        <path d="m24.614 281.39v-6.1305c0-1.6957-1.2841-2.6602-2.6602-2.6602h-18.412c-1.4547 0-2.7249 1.0223-2.7249 2.7249v14.986c0 1.2346 0.99768 2.6028 2.586 2.586h6.9542c-0.36184-0.63963-0.51495-1.0286-0.69323-1.6506h-6.4562c-0.29938 0-0.72246-0.40379-0.72246-0.72247v-1.8082l6.0428-6.7569 2.0296 2.0129 0.9605-1.3029-2.9734-3.1488-5.9885 6.7736v-11.426c0-0.24935 0.30766-0.63476 0.63476-0.63476h18.934c0.3592 0 0.84357 0.19284 0.84357 0.84357v5.2285c0.61147 0.22444 1.1564 0.59412 1.6454 1.0858z" style="fill:#414141"/>', '        <circle cx="17.869" cy="277.61" r="1.6891" style="fill-rule:evenodd;fill:#414141"/>', '    </g>', '</svg>'].join(''));
};

MediACore.creator['attachment-ico'] = function () {
  return MediaInput_(['<svg class="attachment" width="1024" height="1024"  version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" >', '    <path d="M145.6 0C100.8 0 64 35.2 64 80v862.4C64 987.2 100.8 1024 145.6 1024h732.8c44.8 0 81.6-36.8 81.6-81.6V324.8L657.6 0h-512z" fill="#8199AF"/>', '    <path d="M960 326.4v16H755.2s-100.8-20.8-99.2-108.8c0 0 4.8 92.8 97.6 92.8H960z" fill="#617F9B"/>', '    <path d="M657.6 0v233.6c0 25.6 17.6 92.8 97.6 92.8H960L657.6 0z" fill="#fff"/>', '    <path d="m491.77 770.31c17.6-19.2 17.6-48 0-67.2s-48-17.6-65.6 0l-147.2 147.2c-17.6 17.6-17.6 48 0 65.6s48 19.2 65.6 0l91.2-89.6c4.8-4.8 4.8-12.8 0-17.6s-14.4-6.4-19.2 0l-57.6 56c-8 8-19.2 8-27.2 0s-8-20.8 0-28.8l56-56c20.8-20.8 54.4-20.8 75.2 0s20.8 54.4 0 75.2l-89.6 89.6c-33.6 33.6-88 33.6-123.2 0-33.6-33.6-33.6-88 0-121.6l147.2-147.2c33.6-33.6 89.6-33.6 123.2 0s33.6 88 0 121.6l-14.4 14.4c-1.6-14.4-6.4-28.8-16-41.6z" style="fill:#fff"/>', '    <path d="m130.09 23.864h504.75v182.93h-545.65v-140.08c0.34155-16.845 13.608-42.414 40.9-42.847z" style="fill-opacity:.29648;fill-rule:evenodd;fill:#fff"/>', '</svg>'].join(''));
};

MediACore.creator['attachment-ico'].property = {
  ext: {
    set: function set(value) {
      value = value || '';

      if (this.$ext) {
        this.$ext.selfRemove();
      }

      this.$ext = HTML5_Svg.ShareInstance._('<text text-anchor="middle" x="321.39" y="170" font-size="145.76" style="fill:white;" >' + value + '</text>').addTo(this);
    },
    get: function get() {
      return this._ext || '';
    }
  }
};

MediACore.creator['times-ico'] = function () {
  return MediaInput_(['<svg class="times" width="100" height="100" version="1.1" viewBox="0 0 26.458 26.458" xmlns="http://www.w3.org/2000/svg">', '    <g transform="translate(0 -270.54)">', '        <path d="m7.7013 276.49 5.4832 5.4832 5.5494-5.5494 1.7874 1.7874-5.5291 5.5291 5.4957 5.4957-1.754 1.754-5.5124-5.5124-5.5542 5.5542-1.7623-1.7623 5.5375-5.5375-5.5208-5.5208zm17.103 7.3351a11.558 11.558 0 0 1-11.558 11.558 11.558 11.558 0 0 1-11.558-11.558 11.558 11.558 0 0 1 11.558-11.558 11.558 11.558 0 0 1 11.558 11.558z" style="fill-rule:evenodd;"/>', '    </g>'].join(''));
};

MediACore.creator['download-ico'] = function () {
  return MediaInput_(['<svg class="download" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', '    <g transform="translate(0,-197)">', '        <path d="m44.888 209.14h13.982c1.1087 0.0459 2.2328 0.74137 2.317 2.3612v23.694h13.622c1.9742-0.18801 3.004 2.6244 1.9175 4.1118l-23.469 23.918c-0.876 0.77477-1.9993 0.77232-2.9362 0l-23.559-24.009c-0.86532-1.0422 0.11658-4.1953 2.3821-4.2047h13.268v-22.939c-0.08167-1.1772 0.78292-2.9507 2.4768-2.9312z" style="fill:#00c3e5"/>', '        <path d="m86.97 276.99a3.5027 3.5696 0 0 1-3.5027 3.5696 3.5027 3.5696 0 0 1-3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027 3.5696zm-12.768 0a3.5027 3.5696 0 0 1-3.5027 3.5696 3.5027 3.5696 0 0 1-3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027-3.5696 3.5027 3.5696 0 0 1 3.5027 3.5696zm-60.003-16.135h24.609c9.1206 13.508 17.573 12.942 26.609 0h23.839c2.8529 5e-3 3.5087 2.3205 3.4679 3.8227v18.953c0.04867 1.3083-1.5145 2.9901-2.7505 2.9832h-76.253c-1.049 0.0441-2.6554-1.4851-2.6306-3.1451l-1.56e-4 -18.792c0.0024-1.3549 0.50958-3.7927 3.1091-3.8227z" style="fill-rule:evenodd;fill:#00c3e5"/>', '    </g>', '</svg>'].join(''));
};

MediACore.creator['plus-ico'] = function () {
  return MediaInput_('<svg class="_7oal" height="24" width="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><polygon points="-6,30 30,30 30,-6 -6,-6 "></polygon><path d="m18,11l-5,0l0,-5c0,-0.552 -0.448,-1 -1,-1c-0.5525,0 -1,0.448 -1,1l0,5l-5,0c-0.5525,0 -1,0.448 -1,1c0,0.552 0.4475,1 1,1l5,0l0,5c0,0.552 0.4475,1 1,1c0.552,0 1,-0.448 1,-1l0,-5l5,0c0.552,0 1,-0.448 1,-1c0,-0.552 -0.448,-1 -1,-1m-6,13c-6.6275,0 -12,-5.3725 -12,-12c0,-6.6275 5.3725,-12 12,-12c6.627,0 12,5.3725 12,12c0,6.6275 -5.373,12 -12,12" ></path></g></svg>');
};

absol_acomp_ACore.install(MediaInput);
/* harmony default export */ const js_MediaInput = (MediaInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/messageinput.css
var messageinput = __webpack_require__(4647);
;// CONCATENATED MODULE: ./node_modules/absol/src/Input/keyboard.js
function isFnKey(name) {
  return name.match(/^[fF]([2-9]|(1([0-2]?)))$/);
}
function isSpaceKey(name) {
  return name === ' ' || name.match(/^[sS]pace$/);
}
function isCtrlKey(name) {
  return name.match(/(^([cC]ontrol)|ctrl)$/);
}
function isAltKey(name) {
  return name.match(/^[aA]lt$/);
}
function isShiftKey(name) {
  return name.match(/^[sS]hift$/);
}
function isMetaKey(name) {
  return name.toLowerCase().match(/^(command|windows|meta)$/);
}
/***
 *
 * @param {string} text
 * @return {string}
 */

function normalizeKeyBindingIdent(text) {
  var keys = text.trim().toLowerCase().split(/[-+\s_.]+/).filter(function (w) {
    return w.length > 0;
  });
  var values = {
    meta: 1,
    ctrl: 2,
    alt: 3,
    shift: 4
  };
  keys.sort(function (a, b) {
    var va, vb;
    va = values[a] || 100;
    vb = values[b] || 100;
    return va - vb;
  });
  return keys.join('-');
}
/***
 *
 * @param {KeyboardEvent} event
 * @return {string}
 */

function keyboardEventToKeyBindingIdent(event) {
  var keys = [];

  if (event.metaKey) {
    keys.push('meta');
  }

  if (event.ctrlKey) keys.push('ctrl');
  if (event.altKey) keys.push('alt');
  if (event.shiftKey) keys.push('shift');

  if (isSpaceKey(event.key)) {
    keys.push('space');
  } else if (isFnKey(event.key)) {
    keys.push(event.key.toLowerCase());
  } else if (!isMetaKey(event.key) && !isAltKey(event.key) && !isCtrlKey(event.key) && !isShiftKey(event.key)) keys.push(event.key.toLowerCase());

  return keys.join('-');
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MessageInput.js
function MessageInput_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { MessageInput_typeof = function _typeof(obj) { return typeof obj; }; } else { MessageInput_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return MessageInput_typeof(obj); }













var MessageInput_ = absol_acomp_ACore._;
var MessageInput_$ = absol_acomp_ACore.$;
var MessageInput_$$ = absol_acomp_ACore.$$;
/***
 *
 * @typedef {{text:string, desc: string, img?:string, file?:string}|string} MessageInputQuote
 */

var iconCatalogCaches = {};
var MODE_NEW = 0;
var MODE_EDIT = 1;
var MessageInput_isMobile = Detector_BrowserDetector.isMobile;
/***
 * @extends AElement
 * @constructor
 */

function MessageInput() {
  this._cmdRunner = new AppPattern_CMDRunner(this);
  this._keyMaps = {};
  this._plugins = [];
  this._mode = MODE_NEW; //edit

  this._editingText = "";
  prepareIcon();
  /**
   * @type {import('./PreInput').default}
   */

  this.$preInput = MessageInput_$('preinput', this);
  this.$preInput.on('change', this.eventHandler.preInputChange).on('keyup', this.eventHandler.preInputKeyUp).on('keydown', this.eventHandler.preInputKeyDown).on('pasteimg', this.eventHandler.preInputPasteImg).on('focus', this.eventHandler.preInputFocus).on('blur', this.eventHandler.preInputBlur); // //every can make size change

  this._imageFiles = [];
  this._files = [];
  this._latBound = {};
  this.$quote = MessageInput_$('messagequote.as-message-input-quote', this).on('pressremove', this.eventHandler.clickQuoteRemoveBtn);
  this.$right = MessageInput_$('.as-message-input-right', this);
  this.$attachmentCtn = MessageInput_$('.as-message-input-attachment-ctn', this);
  this.$emojiBtn = MessageInput_$('.as-message-input-plugin-emoji', this).on('click', this.eventHandler.clickEmojiBtn);
  this.$fileBtn = MessageInput_$('.as-message-input-plugin-file', this).on('click', this.openFileDialog.bind(this));
  this.$attachmentAddBtn = MessageInput_$('.as-message-input-attachment-add-btn', this).on('click', this.openFileDialog.bind(this));
  this.$sendBtn = MessageInput_$('.as-message-input-plugin-send', this).on('click', this.notifySend.bind(this));
  this.$cancelBtn = MessageInput_$('.as-message-input-plugin-cancel', this).on('click', this.notifyCancel.bind(this));
  this.$emojiPickerCtn = MessageInput_('.as-message-input-external-tools-popup');
  this.$emojiPicker = MessageInput_('emojipicker').addTo(this.$emojiPickerCtn).on('pick', this.eventHandler.pickEmoji);
  this.$attachhook = MessageInput_('attachhook').addTo(this).on('error', this.notifySizeChange.bind(this));
  this.on('drop', this.eventHandler.drop).on('dragover', this.eventHandler.dragover);
  this.autoSend = false;
  /***
   *
   * @type {MessageInputQuote|null}
   */

  this.quote = null;
}

MessageInput.MODE_EDIT = MODE_EDIT;
MessageInput.MODE_NEW = MODE_NEW;

MessageInput.iconAssetRoot = function () {
  if (location.hostname.match(/^.+\.absol.cf$/)) return 'https://absol.cf/exticons/vivid';
  return '/vivid_exticons';
}();

MessageInput.tag = 'MessageInput'.toLowerCase();

MessageInput.render = function (data) {
  data = data || {};
  data.iconAssetRoot = data.iconAssetRoot || MessageInput.iconAssetRoot;
  return MessageInput_({
    attr: {
      'data-icon-asset-root': MessageInput.iconAssetRoot
    },
    "class": 'as-message-input',
    extendEvent: ['sendtext', 'sendimage', 'sendfile', 'sendquote', 'cancel', 'change', 'sizechange', 'send', 'useraddfile'],
    child: [{
      "class": 'as-message-input-right',
      child: [{
        tag: 'button',
        "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-file'],
        child: 'span.mdi.mdi-attachment.mdi-rotate-90'
      }, {
        tag: 'button',
        "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-send'],
        child: 'span.mdi.mdi-send'
      }, {
        tag: 'button',
        "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-cancel'],
        child: 'span.mdi.mdi-close'
      }]
    }, {
      "class": 'as-message-input-pre-ctn',
      child: ['messagequote.as-message-input-quote.as-removable.as-shorten-text', {
        "class": 'as-message-input-emoji-btn-ctn',
        child: {
          tag: 'button',
          "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-emoji'],
          child: 'span.mdi.mdi-emoticon-happy-outline'
        }
      }, {
        "class": ['as-message-input-attachment-ctn', 'as-bscroller'],
        child: [{
          tag: 'button',
          "class": 'as-message-input-attachment-add-btn',
          child: ['span.mdi.mdi-arrow-down-bold.as-message-input-attachment-add-btn-drop', {
            tag: 'span',
            "class": 'as-message-input-attachment-add-btn-plus',
            child: {
              text: "+"
            }
          }]
        }]
      }, 'preinput.as-message-input-pre.absol-bscroller']
    }]
  });
};

MessageInput.prototype.toggleEmoji = function () {
  if (this.containsClass('as-message-input-show-emoji')) this.closeEmoji();else this.showEmoji();
};

MessageInput.prototype.showEmoji = function () {
  if (this.containsClass('as-message-input-show-emoji')) return;
  var value = this.$preInput.value;
  this._lastInputSelectPosion = this.$preInput.getSelectPosition() || {
    start: value.length,
    end: value.length
  };
  this.addClass('as-message-input-show-emoji');
  this.addChild(this.$emojiPickerCtn);
  var thisMi = this;
  setTimeout(function () {
    MessageInput_$(document.body).on('mousedown', thisMi.eventHandler.mousedownOutEmoji);
  }, 100);
  this.$preInput.focus();
};

MessageInput.prototype.notifyChange = function () {
  this.emit('change', {
    name: 'change',
    target: this
  }, this);

  if (this.autoSend) {
    if (this.files.length > 0 || this.images.length > 0) this.notifySend();
  }
};

MessageInput.prototype.notifySend = function () {
  var eventData = {
    imageRemovePrevented: false,
    fileRemovePrevented: false,
    textRemovePrevented: false,
    quoteRemovePrevented: false,
    target: this,
    files: this.files,
    images: this.images,
    text: this.text
  };

  if (eventData.files.length > 0) {
    this.emit('sendfile', Object.assign(eventData, {
      type: 'sendfile',
      preventDefault: function preventDefault() {
        this.fileRemovePrevented = true;
      }
    }), this);
  }

  if (eventData.images.length > 0) {
    this.emit('sendimage', Object.assign(eventData, {
      type: 'sendimage',
      preventDefault: function preventDefault() {
        this.imageRemovePrevented = true;
      }
    }), this);
  }

  if (typeof this.quote === "string" || this.quote) {
    this.emit('sendquote', Object.assign(eventData, {
      type: 'sendquote',
      preventDefault: function preventDefault() {
        this.quoteRemovePrevented = true;
      }
    }), this);
  }

  if (this.files.length > 0 || eventData.images.length > 0 || eventData.text || typeof this.quote === "string" || this.quote) {
    if (eventData.text) this.$preInput.focus();
    this.emit('send', Object.assign(eventData, {
      type: 'send',
      preventDefault: function preventDefault() {
        this.imageRemovePrevented = true;
        this.fileRemovePrevented = true;
        this.imageRemovePrevented = true;
        this.quoteRemovePrevented = true;
      }
    }), this);
  }

  if (!eventData.fileRemovePrevented) this.files = [];
  if (!eventData.imageRemovePrevented) this.images = [];
  if (!eventData.textRemovePrevented) this.text = '';
  if (!eventData.quoteRemovePrevented) this.quote = null;
};

MessageInput.prototype.notifyCancel = function () {
  this.emit('cancel', {
    type: 'cancel',
    name: 'send',
    target: this,
    clearAllContent: this.clearAllContent.bind(this)
  }, this);
};

MessageInput.prototype.clearAllContent = function () {
  this.text = '';
  this.quote = null;
  this.files = [];
  this.images = [];
};

MessageInput.prototype.focus = function () {
  var value = this.$preInput.value;
  var range = this.$preInput.getSelectPosition() || {
    start: value.length,
    end: value.length
  };
  this.$preInput.focus();
  this.$preInput.applyData(value, range);
};

MessageInput.prototype.blur = function () {
  this.$preInput.blur();
};

MessageInput.prototype._updateAttachmentClass = function () {
  if (this._imageFiles.length + this._files.length) {
    this.addClass("as-has-attachment");
  } else {
    this.removeClass("as-has-attachment");
  }
};

MessageInput.prototype.addImageFiles = function (imageFiles, urls) {
  var thisMi = this;
  Array.prototype.forEach.call(imageFiles, function (file, index) {
    thisMi._imageFiles.push(file);

    var src;

    if (urls) {
      src = urls[index];
    }

    if (!src) {
      src = URL.createObjectURL(file);
    }

    var itemElt = MessageInput_({
      "class": ['as-message-input-attach-preview', 'as-image'],
      attr: {
        title: file.name
      },
      child: [{
        "class": 'as-message-input-attach-preview-image',
        style: {
          backgroundImage: 'url(' + src + ')'
        }
      }, {
        tag: 'button',
        "class": 'as-message-input-attach-preview-close-btn',
        child: 'span.mdi.mdi-close',
        attr: {
          title: 'remove'
        },
        on: {
          click: function click() {
            thisMi._imageFiles = thisMi._imageFiles.filter(function (it) {
              return it !== file;
            });
            itemElt.remove();

            thisMi._updateAttachmentClass();

            thisMi.notifySizeChange();
            thisMi.notifyChange();
          }
        }
      }, {
        "class": 'as-message-input-attach-preview-info',
        child: [{
          "class": 'as-message-input-attach-preview-name',
          child: {
            text: file.name
          }
        }, {
          "class": 'as-message-input-attach-preview-size',
          child: {
            text: fileSize2Text(file.size)
          }
        }]
      }]
    }).addTo(thisMi.$attachmentCtn);

    thisMi.$attachmentCtn.addChildBefore(itemElt, thisMi.$attachmentAddBtn);
  });

  this._updateAttachmentClass();

  this.notifySizeChange();
};

MessageInput.prototype.addFiles = function (files) {
  var thisMi = this;
  Array.prototype.forEach.call(files, function (file, index) {
    thisMi._files.push(file);

    MessageInput.iconSupportAsync.then(function (ExtensionIcons) {
      var src;
      var ext = file.name.split('.').pop().toLowerCase();

      if (ExtensionIcons.indexOf(ext) > 0) {
        src = MessageInput.iconAssetRoot + '/' + ext + '.svg';
      } else {
        src = MessageInput.iconAssetRoot + '/' + 'default' + '.svg';
      }

      var itemElt = MessageInput_({
        "class": ['as-message-input-attach-preview', 'as-file'],
        attr: {
          title: file.name
        },
        child: [{
          tag: 'img',
          "class": 'as-message-input-attach-preview-file',
          props: {
            src: src
          }
        }, {
          tag: 'button',
          "class": 'as-message-input-attach-preview-close-btn',
          child: 'span.mdi.mdi-close',
          attr: {
            title: 'remove'
          },
          on: {
            click: function click() {
              thisMi._files = thisMi._files.filter(function (it) {
                return it !== file;
              });
              itemElt.remove();

              thisMi._updateAttachmentClass();

              thisMi.notifySizeChange();
              thisMi.notifyChange();
            }
          }
        }, {
          "class": 'as-message-input-attach-preview-info',
          child: [{
            "class": 'as-message-input-attach-preview-name',
            child: {
              text: file.name
            }
          }, {
            "class": 'as-message-input-attach-preview-size',
            child: {
              text: fileSize2Text(file.size)
            }
          }]
        }]
      });

      thisMi.$attachmentCtn.addChildBefore(itemElt, thisMi.$attachmentAddBtn);
    });
  });

  this._updateAttachmentClass();

  thisMi.notifySizeChange();
};

MessageInput.prototype.closeEmoji = function () {
  if (!this.containsClass('as-message-input-show-emoji')) return;
  this.removeClass('as-message-input-show-emoji');
  this.removeChild(this.$emojiPickerCtn);
  MessageInput_$(document.body).off('mousedown', this.eventHandler.mousedownOutEmoji);
};

MessageInput.prototype.notifyAddFiles = function (files) {
  var event = {
    resolvedAsync: Promise.resolve(files),
    files: files,
    resolve: function resolve(result) {
      if (!result) {
        this.resolvedAsync = Promise.resolve(undefined);
      } else if (result.then) {
        this.resolvedAsync = result;
      } else {
        this.resolvedAsync = Promise.resolve(result);
      }
    }
  };
  this.emit('useraddfile', event);
  return event.resolvedAsync;
};

MessageInput.prototype.openFileDialog = function () {
  var thisMi = this;
  openFileDialog({
    multiple: true
  }).then(function (files) {
    if (!thisMi.autoSend) thisMi.$preInput.focus();
    thisMi.notifyAddFiles(files).then(function (files) {
      if (files && files.length > 0) thisMi.handleAddingFileByType(files);
    });
  });
};

MessageInput.prototype.handleAddingFileByType = function (files) {
  if (files.length > 0) {
    var imageFiles = [];
    var otherFiles = [];
    var file;

    for (var i = 0; i < files.length; ++i) {
      file = files[i];

      if (!!file.type && file.type.match && file.type.match(/^image\//)) {
        imageFiles.push(file);
      } else {
        otherFiles.push(file);
      }
    }

    this.addImageFiles(imageFiles);
    this.addFiles(otherFiles);
    this.notifyChange();
  }
};

MessageInput.prototype.notifySizeChange = function () {
  var bound = this.getBoundingClientRect();

  if (this._latBound.width != bound.width || this._latBound.height != bound.height) {
    this._latBound.width = bound.width;
    this._latBound.height = bound.height;
    this.emit('sizechange', {
      name: 'sizechange',
      bound: bound,
      target: this
    }, this);
  }
};

MessageInput.prototype.addPlugin = function (option) {
  var plugin = new this.PluginConstructor(this, option);

  this._plugins.push(plugin);

  this.addStyle('--plugin-buttons-width', this._plugins.length * 45 + 'px');
  return plugin;
};
/***
 *
 * @param {{name?:string, exec:function(_this:MessageInput):void, keyBiding?:string}} option
 */


MessageInput.prototype.addCommand = function (option) {
  option.name = option.name || randomIdent(20);

  this._cmdRunner.add(option.name, option.exec);

  if (option.keyBiding && option.keyBiding.trim) {
    var keyBindingIdent = normalizeKeyBindingIdent(option.keyBiding);
    this._keyMaps[keyBindingIdent] = option.name;
  }
};

MessageInput.prototype.exeCmd = function (name) {
  var args = Array.prototype.slice.call(arguments);
  args[0] = this;
  args.unshift(name);

  this._cmdRunner.invoke.apply(this._cmdRunner, args);
};

MessageInput.prototype._updateQuote = function () {
  this.$quote.data = this._quote;
  if (this._quote) this.addClass('as-has-quote');else this.removeClass('as-has-quote');
  this.notifySizeChange();
};
/**
 * @type {MessageInput}
 */


MessageInput.eventHandler = {};

MessageInput.eventHandler.preInputChange = function (event) {
  var text = this.$preInput.value;

  if (text.length > 0) {
    this.addClass('as-has-text');
  } else {
    this.removeClass('as-has-text');
  }

  if (text === this._editingText) {
    this.removeClass('as-text-changed');
  } else {
    this.addClass('as-text-changed');
  }

  this.notifySizeChange();
  this.notifyChange();
};

MessageInput.eventHandler.preInputKeyDown = function (event) {
  if (!(event.shiftKey || event.ctrlKey || event.altKey) && event.key === 'Enter') {
    this.notifySend();
    event.preventDefault();
  } else if ((event.shiftKey || event.ctrlKey || event.altKey) && event.key === 'Enter') {
    event.preventDefault();
    var text = this.$preInput.value;
    var selectedPos = this.$preInput.getSelectPosition();
    var newText = text.substr(0, selectedPos.start) + '\n' + text.substr(selectedPos.end);
    this.$preInput.applyData(newText, selectedPos.start + 1);
    this.notifySizeChange();
    this.$preInput.commitChange(newText, selectedPos.start + 1);
  } else if (event.key === "Escape" && this._mode === MODE_EDIT) {
    this.notifyCancel();
    event.preventDefault();
  }

  var keyBindingIdent = keyboardEventToKeyBindingIdent(event);

  if (this._keyMaps[keyBindingIdent]) {
    event.preventDefault();
    this.exeCmd(this._keyMaps[keyBindingIdent]);
  }

  setTimeout(this.notifySizeChange.bind(this), 1);
};

MessageInput.eventHandler.preInputKeyUp = function (event) {
  var value = this.$preInput.value;
  this._lastInputSelectPosion = this.$preInput.getSelectPosition() || {
    start: value.length,
    end: value.length
  };
  this.notifySizeChange();
};

MessageInput.eventHandler.preInputPasteImg = function (event) {
  if (this._mode == 'edit') return;
  var files = Array.prototype.slice.call(event.imageFiles);
  var urls = event.urls && Array.prototype.slice.call(event.urls);
  this.notifyAddFiles(files).then(function (newFiles) {
    if (!newFiles || newFiles.length === 0) return;
    var newUrls = urls && newFiles.map(function (file) {
      return urls[files.indexOf(file)];
    });
    this.addImageFiles(newFiles, newUrls);
    this.notifyChange();
  }.bind(this));
};

MessageInput.eventHandler.preInputFocus = function () {
  this.addClass('as-focus');
};

MessageInput.eventHandler.preInputBlur = function () {
  this.removeClass('as-focus');
};

MessageInput.eventHandler.clickEmojiBtn = function () {
  this.toggleEmoji();
};

MessageInput.eventHandler.mousedownOutEmoji = function (event) {
  if (HTML5_EventEmitter.hitElement(this.$emojiPicker, event) || HTML5_EventEmitter.hitElement(this.$emojiBtn, event)) return;
  this.closeEmoji();
};

MessageInput.eventHandler.pickEmoji = function (event) {
  var text = this.$preInput.value;
  var newText = text.substr(0, this._lastInputSelectPosion.start) + event.key + text.substr(this._lastInputSelectPosion.end);
  var selected = this._lastInputSelectPosion;
  var newOffset = selected.start + event.key.length;
  this._lastInputSelectPosion = {
    start: newOffset,
    end: newOffset
  };
  this.$preInput.focus();
  this.$preInput.applyData(newText, newOffset);
  this.$preInput.commitChange(newText, newOffset);
  this.notifySizeChange();
  this.$preInput.focus(); //older firefox version will be lost focus
  // this.notifyChange();//not need
};

MessageInput.eventHandler.dragover = function (event) {
  event.preventDefault();
  this.addClass('as-drag-hover');
  this.notifySizeChange();
  if (this._hoverTimeout > 0) clearTimeout(this._hoverTimeout);
  var thisMi = this;
  this._hoverTimeout = setTimeout(function () {
    thisMi._hoverTimeout = -1;
    thisMi.removeClass('as-drag-hover');
    thisMi.notifySizeChange();
  }, 200); //todo:
};

MessageInput.eventHandler.drop = function (event) {
  event.preventDefault();
  var files = [];
  var file;

  if (event.dataTransfer.items) {
    for (var i = 0; i < event.dataTransfer.items.length; i++) {
      if (event.dataTransfer.items[i].kind === 'file') {
        file = event.dataTransfer.items[i].getAsFile();

        if (!file.type && file.size % 4096 == 0) {//todo: folder
        } else {
          files.push(file);
        }
      }
    }
  } else {
    for (var i = 0; i < event.dataTransfer.files.length; i++) {
      file = event.dataTransfer.files[i];

      if (!file.type && file.size % 4096 == 0) {} else {
        files.push(file);
      }
    }
  }

  this.notifyAddFiles(files).then(function (files) {
    this.handleAddingFileByType(files);
  }.bind(this));
};

MessageInput.eventHandler.clickQuoteRemoveBtn = function () {
  this.quote = null;
  this.notifyChange();
};

MessageInput.property = {};
MessageInput.property.files = {
  set: function set(value) {
    MessageInput_$$('.as-file', this.$attachmentCtn).forEach(function (elt) {
      elt.remove();
    });
    value = value || [];
    this._files = [];
    this.addFiles(value);
  },
  get: function get() {
    return this._files;
  }
};
MessageInput.property.images = {
  set: function set(value) {
    MessageInput_$$('.as-image', this.$attachmentCtn).forEach(function (elt) {
      elt.remove();
    });
    value = value || [];
    this._imageFiles = [];
    this.addImageFiles(value);
  },
  get: function get() {
    return this._imageFiles;
  }
};
MessageInput.property.text = {
  set: function set(text) {
    this.$preInput.value = '' + text;

    if (text.length > 0) {
      this.addClass('as-has-text');
    } else {
      this.removeClass('as-has-text');
    }

    if (this._mode === MODE_EDIT) {
      this._editingText = text;
    }

    this.removeClass('as-text-changed');
  },
  get: function get() {
    return this.$preInput.value;
  }
};
/**
 * @type {MessageInput}
 */

MessageInput.property.mode = {
  set: function set(value) {
    value = value || MODE_NEW;

    if (value === MODE_EDIT || value.toLowerCase && value.toLowerCase() === 'edit') {
      this.addClass('as-mode-edit');
      value = MODE_EDIT;
      this._editingText = this.$preInput.value;
    } else {
      value = MODE_NEW;
      this._editingText = '';
      this.removeClass('as-mode-edit');
    }

    this.removeClass('as-text-changed');
    this._mode = value;
  },
  get: function get() {
    return this._mode === MODE_EDIT ? 'edit' : 'new';
  }
};
MessageInput.property.autoSend = {
  set: function set(value) {
    if (value) {
      this.addClass('as-auto-send');
    } else {
      this.removeClass('as-auto-send');
    }
  },
  get: function get() {
    return this.containsClass('as-auto-send');
  }
};
MessageInput.property.quote = {
  set: function set(quote) {
    this._quote = quote;

    this._updateQuote();
  },
  get: function get() {
    return this._quote;
  }
};
absol_acomp_ACore.install(MessageInput);
/* harmony default export */ const js_MessageInput = (MessageInput);
var urlRex = /^(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+$/;
function parseMessage(text, data) {
  data = data || {};
  data.emojiAssetRoot = data.emojiAssetRoot || js_EmojiPicker.assetRoot;
  data.staticSize = data.staticSize || 20;
  data.animSize = data.animSize || 60;
  var textLines = text.split(/\r?\n/);
  var lines = textLines.map(function (textLine) {
    var longTokenTexts = textLine.split(/\s/);
    var tokenGroups = longTokenTexts.map(function (longTokenText, longTokenIndex) {
      var tokens = [];
      if (longTokenIndex > 0) tokens.push({
        type: 'text',
        value: ' '
      });
      var emojiKey, emojiKeyTemp;
      var subIndex, subIndexTemp;
      var leftToken;
      var found;
      var emoji;

      while (longTokenText.length > 0) {
        found = false;
        subIndex = 10000000;

        for (var i = 0; i < js_EmojiAnims.length; ++i) {
          emojiKeyTemp = js_EmojiAnims[i][0];
          subIndexTemp = longTokenText.indexOf(emojiKeyTemp);

          if (subIndexTemp >= 0 && subIndexTemp < subIndex) {
            subIndex = subIndexTemp;
            emojiKey = emojiKeyTemp;
            emoji = js_EmojiAnims[i];
            found = true;
          }
        }

        if (found) {
          if (subIndex >= 0) {
            leftToken = longTokenText.substr(0, subIndex);
            longTokenText = longTokenText.substr(subIndex + emojiKey.length);

            if (leftToken.length > 0) {
              tokens.push({
                type: 'text',
                value: leftToken
              });
            }

            tokens.push({
              type: 'emoji',
              value: emoji
            });
            found = true;
          }
        } else {
          tokens.push({
            type: 'text',
            value: longTokenText
          });
          longTokenText = '';
        }
      }

      tokens.forEach(function (token) {
        if (token.type == 'text') {
          var urlMatched = token.value.match(urlRex);

          if (urlMatched) {
            token.type = 'url';
            token.protocal = urlMatched[1];
          }
        }
      });
      return tokens;
    });
    var tokens = [];

    for (var i = 0; i < tokenGroups.length; ++i) {
      tokens.push.apply(tokens, tokenGroups[i]);
    }

    return tokens.reduce(function (ac, token) {
      if (token.type == 'text' && ac.last.type == 'text') {
        ac.last.value += token.value;
      } else {
        ac.last = token;
        ac.result.push(token);
      }

      return ac;
    }, {
      result: [],
      last: {
        type: 'null'
      }
    }).result;
  });
  var res = lines.reduce(function (ac, line, lineIndex, lines) {
    line.reduce(function (ac, token) {
      if (token.type == 'text') {
        ac.push({
          tag: 'span',
          child: {
            text: token.value
          }
        });
      } else if (token.type == 'url') {
        ac.push({
          tag: 'a',
          "class": 'as-protocal-' + token.protocal,
          child: {
            text: token.value
          },
          props: {
            href: token.value
          }
        });
      } else if (token.type == 'emoji') {
        ac.push({
          tag: 'span',
          "class": 'as-emoji-text',
          child: {
            text: token.value[0]
          }
        });
        ac.push({
          tag: 'img',
          "class": 'as-emoji',
          props: {
            src: data.emojiAssetRoot + '/static/x' + data.staticSize + '/' + token.value[1]
          }
        });
      }

      return ac;
    }, ac);
    if (lineIndex < lines.length - 1 || line.length == 0) ac.push('br');
    return ac;
  }, []);

  if (res.length == 2 && res[1]["class"] == 'as-emoji') {
    res[1].tag = 'iconsprite', res[1].props.fps = 30;
    res[1].props.src = res[1].props.src.replace('/static/x' + data.staticSize, '/anim/x' + data.animSize);
  }

  return res;
}
MessageInput.parseMessage = parseMessage;
function prepareIcon() {
  if (!MessageInput.iconSupportAsync) {
    var catalogiUrl = MessageInput.iconAssetRoot + '/catalog.json';
    MessageInput.iconSupportAsync = MessageInput.iconSupportAsync || iconCatalogCaches[catalogiUrl] ? Promise.resolve(iconCatalogCaches[catalogiUrl]) : Network_XHR.getRequest(catalogiUrl).then(function (result) {
      iconCatalogCaches[catalogiUrl] = JSON.parse(result);
      return iconCatalogCaches[catalogiUrl];
    });
  }

  return MessageInput.iconSupportAsync;
}
/***
 * @typedef MessageInputPluginOption
 * @property {string} [id]
 * @property {string|Object|AElement} icon
 * @property {function(_thisAdapter: MessageInputPlugin, _:Dom._, Dom.$):AElement} createContent
 * @property {function(_thisAdapter:MessageInputPlugin):void} onPressTrigger
 */

function MessageQuote() {
  prepareIcon();
  /***
   *
   * @type {null|MessageInputQuote}
   * @private
   */

  this._data = null;
  this.$img = MessageInput_$('.as-message-quote-img', this);
  this.$text = MessageInput_$('.as-message-quote-text', this);
  this.$desc = MessageInput_$('.as-message-quote-desc', this);
  this.$removeBtn = MessageInput_$('.as-message-quote-remove-btn', this).on('click', this.eventHandler.clickRemoveBtn);
  Object.defineProperty(this, '$text', {
    set: function set() {
      console.trace();
    },
    get: function get() {
      return MessageInput_$('.as-message-quote-text', this);
    }
  });
}
MessageQuote.tag = 'MessageQuote'.toLowerCase();

MessageQuote.render = function () {
  return MessageInput_({
    extendEvent: 'pressremove',
    "class": 'as-message-quote-box',
    child: [{
      "class": 'as-message-quote-img'
    }, {
      "class": 'as-message-quote-sym',
      child: 'span.mdi.mdi-format-quote-open-outline'
    }, {
      "class": 'as-message-quote-content',
      child: [{
        "class": 'as-message-quote-text',
        child: {
          text: ''
        }
      }, {
        "class": 'as-message-quote-desc',
        child: {
          text: ''
        }
      }]
    }, {
      tag: 'button',
      "class": 'as-message-quote-remove-btn',
      child: 'span.mdi.mdi-close'
    }]
  });
};

MessageQuote.property = {};
MessageQuote.eventHandler = {};
MessageQuote.property.removable = {
  set: function set(val) {
    if (val) {
      this.addClass('as-removable');
    } else {
      this.removeClass('as-removable');
    }
  },
  get: function get() {
    return this.containsClass('as-removable');
  }
};
MessageQuote.property.shortenText = {
  set: function set(val) {
    if (val) {
      this.addClass('as-shorten-text');
    } else {
      this.removeClass('as-shorten-text');
    }
  },
  get: function get() {
    return this.containsClass('as-shorten-text');
  }
};
MessageQuote.property.data = {
  set: function set(quote) {
    this._data = quote;
    var text, desc;
    var file, img;

    if (typeof quote === "string") {
      text = quote;
      desc = '';
    } else if (quote && MessageInput_typeof(quote) === "object") {
      text = quote.text;
      desc = quote.desc;
      file = quote.file;
      img = quote.img;
    }

    if (text === undefined) {
      this.$text.clearChild();
      this.$desc.firstChild.data = '';
      this.removeClass('as-has-file');
      this.removeClass('as-has-img');
    } else {
      if (file) {
        file = file.toLowerCase().split('.').pop();
        MessageInput.iconSupportAsync.then(function (iconSupport) {
          if (iconSupport.indexOf(file) < 0) file = 'default';
          this.$img.addStyle('background-image', 'url(' + MessageInput.iconAssetRoot + '/' + file + '.svg)');
        }.bind(this));
        this.addClass('as-has-file');
      } else this.removeClass('as-has-file');

      if (img) {
        this.$img.addStyle('background-image', 'url(' + img + ')');
        this.addClass('as-has-img');
      } else this.removeClass('as-has-img');

      if (this.shortenText) text = text.split(/\r?\n/).shift();
      var parsedText = parseMessage(text);
      var textEltChain = parsedText.map(function (c) {
        return MessageInput_(c);
      });
      this.$text.clearChild().addChild(textEltChain);
      this.$desc.firstChild.data = desc;
    }
  },
  get: function get() {
    return this.data;
  }
};

MessageQuote.eventHandler.clickRemoveBtn = function () {
  this.emit('pressremove', {
    target: this,
    type: 'pressclose'
  }, this);
};

absol_acomp_ACore.install(MessageQuote);
/***
 *
 * @param {MessageInput} inputElt
 * @param {MessageInputPluginOption} option
 * @constructor
 */

function MessageInputPlugin(inputElt, option) {
  this.inputElt = inputElt;
  this.icon = option.icon;
  this.id = option.id || randomIdent(16);
  this.$icon = null;
  this.$triggerBtn = null;
  this.$content = null;
  this.$popup = null;
  if (option.createContent) this.createContent = option.createContent;
  if (option.onPressTrigger) this.onPressTrigger = option.onPressTrigger;
  this.ev_pressTrigger = this.ev_pressTrigger.bind(this);
  this.ev_pressOut = this.ev_pressOut.bind(this);
  this.attach();
}

MessageInputPlugin.prototype.attach = function () {
  this.inputElt.$right.addChildBefore(this.getTriggerButton(), this.inputElt.$right.firstChild);
};

MessageInputPlugin.prototype.ev_pressTrigger = function (event) {
  var value = this.inputElt.$preInput.value;
  this._lastInputSelectPosion = this.inputElt.$preInput.getSelectPosition() || {
    start: value.length,
    end: value.length
  };

  if (this.onPressTrigger) {
    this.onPressTrigger(this);
  } else {
    if (this.isPopupOpened()) {
      this.closePopup();
    } else {
      this.openPopup();
    }
  }
};

MessageInputPlugin.prototype.insertText = function (itext) {
  if (!this._lastInputSelectPosion) {
    throw new Error('Invalid call');
  }

  var text = this.inputElt.$preInput.value;
  var newText = text.substr(0, this._lastInputSelectPosion.start) + itext + text.substr(this._lastInputSelectPosion.end);
  var selected = this._lastInputSelectPosion;
  var newOffset = selected.start + itext.length;
  this.inputElt.$preInput.focus();
  this.inputElt.$preInput.applyData(newText, newOffset);
  this.inputElt.$preInput.commitChange(newText, newOffset);
  this.inputElt.notifySizeChange();
  this.inputElt.$preInput.focus();
};

MessageInputPlugin.prototype.appendText = function (itext) {
  if (!this._lastInputSelectPosion) {
    throw new Error('Invalid call');
  }

  var text = this.inputElt.$preInput.value;
  var newText = text + itext;
  var newOffset = newText.length;
  this.inputElt.$preInput.focus();
  this.inputElt.$preInput.applyData(newText, newOffset);
  this.inputElt.$preInput.commitChange(newText, newOffset);
  this.inputElt.notifySizeChange();
  this.inputElt.$preInput.focus();
};

MessageInputPlugin.prototype.replaceText = function (itext) {
  if (!this._lastInputSelectPosion) {
    throw new Error('Invalid call');
  }

  var newText = itext;
  var newOffset = newText.length;
  this.inputElt.$preInput.focus();
  this.inputElt.$preInput.applyData(newText, newOffset);
  this.inputElt.$preInput.commitChange(newText, newOffset);
  this.inputElt.notifySizeChange();
  this.inputElt.$preInput.focus();
};

MessageInputPlugin.prototype.ev_pressOut = function (event) {
  if (HTML5_EventEmitter.hitElement(this.getTriggerButton(), event)) return;
  if (HTML5_EventEmitter.hitElement(this.getPopup(), event)) return;
  this.closePopup();
};

MessageInputPlugin.prototype.getIconElt = function () {
  if (!this.$icon) this.$icon = MessageInput_(this.icon);
  return this.$icon;
};

MessageInputPlugin.prototype.getTriggerButton = function () {
  if (!this.$triggerBtn) {
    this.$triggerBtn = MessageInput_({
      tag: 'button',
      "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-' + this.id],
      child: this.getIconElt(),
      on: {
        click: this.ev_pressTrigger
      }
    });
  }

  return this.$triggerBtn;
};

MessageInputPlugin.prototype.createContent = function (_thisAdapter, _, $) {
  throw new Error("Not implement!");
};
/***
 *
 * @type {null|function(_thisAdapter:MessageInputPlugin):void}
 */


MessageInputPlugin.prototype.onPressTrigger = null;

MessageInputPlugin.prototype.getContent = function () {
  if (!this.$content) this.$content = this.createContent(this.inputElt, MessageInput_, MessageInput_$);
  return this.$content;
};

MessageInputPlugin.prototype.getPopup = function () {
  if (!this.$popup) {
    this.$popup = MessageInput_({
      "class": 'as-message-input-external-tools-popup',
      child: this.getContent()
    });
  }

  return this.$popup;
};

MessageInputPlugin.prototype.openPopup = function () {
  if (this.isPopupOpened()) return;
  this.inputElt.appendChild(this.getPopup());
  document.body.addEventListener('click', this.ev_pressOut);
};

MessageInputPlugin.prototype.closePopup = function () {
  if (!this.isPopupOpened()) return;
  this.getPopup().remove();
  document.body.removeEventListener('click', this.ev_pressOut);
};

MessageInputPlugin.prototype.isPopupOpened = function () {
  return !!this.getPopup().parentElement;
};

MessageInput.prototype.PluginConstructor = MessageInputPlugin;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/numberinput.css
var numberinput = __webpack_require__(3081);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/NumberInput.js







var NumberInput_ = absol_acomp_ACore._;
var NumberInput_$ = absol_acomp_ACore.$;

function NumberInput() {
  this.eventHandler = HTML5_OOP.bindFunctions(this, NumberInput.eventHandler);
  this.$input = NumberInput_$('input', this).on('keydown', this.eventHandler.keydown).on('keyup', this.eventHandler.keyup).on('paste', this.eventHandler.paste).on('change', this.eventHandler.change);
  this.$input.value = 0;
  this._previusValue = 0; //to kwnow whenever the value changed

  this._value = 0;
  this._max = Infinity;
  this._min = -Infinity;
  this.$upBtn = NumberInput_$('.absol-number-input-button-up-container button', this).on('mousedown', this.eventHandler.mouseDownUpBtn);
  this.$downBtn = NumberInput_$('.absol-number-input-button-down-container button', this).on('mousedown', this.eventHandler.mouseDownDownBtn);
  this._decimalSeparator = '.';
  this._thousandsSeparator = '';
  this._floatFixed = -1; // unset

  this._decimalPadding = -1; //unset
}

NumberInput.tag = 'NumberInput'.toLowerCase();

NumberInput.render = function () {
  return NumberInput_({
    "class": 'absol-number-input',
    extendEvent: ['change'],
    child: [{
      "class": 'absol-number-input-text-container',
      child: 'input[type="text"]'
    }, {
      "class": 'absol-number-input-button-up-container',
      child: {
        tag: 'button',
        child: 'span.mdi.mdi-menu-up'
      }
    }, {
      "class": 'absol-number-input-button-down-container',
      child: {
        tag: 'button',
        child: 'span.mdi.mdi-menu-down'
      }
    }]
  });
};

NumberInput.eventHandler = {};

NumberInput.eventHandler.mouseDownUpBtn = function (event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  var self = this;
  var body = NumberInput_$(document.body);
  var pressing = true;
  var timeout = -1;
  var i = 0;

  function tick() {
    if (pressing) {
      if (i == 0 || i >= 4) {
        self.value = Math.round(self.value * Math.pow(10, Math.max(self._floatFixed, 0)) + 1) / Math.pow(10, Math.max(self._floatFixed, 0));
        self.notifyChanged({
          by: 'long_press_button'
        });
      }

      ++i;
      self.__pressingUpTimeout__ = setTimeout(tick, 100);
    }
  }

  function finish(event) {
    pressing = false;

    if (timeout >= 0) {
      clearTimeout(timeout);
      timeout = -1;
    }

    body.off('mouseup', finish);
    body.off('mouseleave', finish);

    if (event.type == 'mouseup') {
      self.$input.focus();
    }

    self.notifyChanged({
      originEvent: event,
      by: 'press_button'
    });
  }

  body.on('mouseup', finish);
  body.on('mouseleave', finish);
  tick();
};

NumberInput.eventHandler.mouseDownDownBtn = function (event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  var self = this;
  var body = NumberInput_$(document.body);
  var pressing = true;
  var timeout = -1;
  var i = 0;

  function tick() {
    if (pressing) {
      if (i == 0 || i >= 4) {
        self.value = Math.round(self.value * Math.pow(10, Math.max(self._floatFixed, 0)) - 1) / Math.pow(10, Math.max(self._floatFixed, 0));
        self.notifyChanged({
          by: 'long_press_button'
        });
      }

      ++i;
      self.__pressingUpTimeout__ = setTimeout(tick, 100);
    }
  }

  function finish(event) {
    pressing = false;

    if (timeout >= 0) {
      clearTimeout(timeout);
      timeout = -1;
    }

    body.off('mouseup', finish);
    body.off('mouseleave', finish);

    if (event.type == 'mouseup') {
      self.$input.focus();
    }

    self.notifyChanged({
      originEvent: event,
      by: 'press_button'
    });
  }

  body.on('mouseup', finish);
  body.on('mouseleave', finish);
  tick();
};

NumberInput.eventHandler.keyup = function (event) {
  var cValue = parseFloat(this.$input.value);

  if (!isNaN(cValue) && cValue <= this.max && this.min <= cValue) {
    this._value = cValue;
    this.notifyChanged({
      originEvent: event,
      by: 'keyup'
    });
  }
};

NumberInput.eventHandler.keydown = function () {
  var key = event.key;
  var text = this.$input.value;

  if (key && key.length == 1 && !event.ctrlKey) {
    if (key.match(/[0-9.\-\+]/)) {
      if (key == '.' && text.indexOf('.') >= 0) event.preventDefault();
      if ((key == '+' || key == '-') && (text.indexOf('+') >= 0 || text.indexOf('-') >= 0 || Text_getCaretPosition(this.$input) > 0)) event.preventDefault();
    } else event.preventDefault();
  }
};

NumberInput.eventHandler.change = function (event) {
  this.value = parseFloat(this.$input.value);
  this.notifyChanged({
    originEvent: event,
    by: 'input_change'
  });
};

NumberInput.eventHandler.paste = function (e) {
  e.preventDefault();
  var text = "";

  if (e.clipboardData && e.clipboardData.getData) {
    text = e.clipboardData.getData("text/plain");
  } else if (window.clipboardData && window.clipboardData.getData) {
    text = window.clipboardData.getData("Text");
  }

  var oldText = this.$input.value;
  var caretPos = Text_getCaretPosition(this.$input);
  var newText = oldText.substr(0, caretPos) + text + oldText.substr(caretPos);
  var matched = newText.match(/[+-]?([0-9]*[.])?[0-9]+/);

  if (matched) {
    this.value = parseFloat(matched[0]);
  }
};

NumberInput.prototype.notifyChanged = function (option) {
  option = option || {};

  if (this._previusValue != this.value || this._prevBy !== option.by) {
    this.emit('change', Object.assign({
      target: this,
      value: this.value
    }, option || {}), this);
    this._previusValue = this.value;
    this._prevBy = option.by;
  }
};

NumberInput.prototype.numberToString = function (number) {
  return numberToString(this._value, this._floatFixed, this._decimalSeparator, this._thousandsSeparator, this._decimalPadding);
};

NumberInput.prototype.updateTextValue = function () {
  if (this._value == Infinity || this._value == -Infinity) this.$input.value = this._value + "";
  this.$input.value = this.numberToString(this._value);
};

NumberInput.prototype.stringToNumber = function (string) {
  var matchedInf = string.toLowerCase().match('/([+-])?infinity/');

  if (matchedInf) {
    if (matchedInf[1] == '-') return Infinity;
    return -Infinity;
  } else if (this._thousandsSeparator == '.') {
    string = string.replace(/\./g, '').replace(/\,/, '.');
  } else if (this._thousandsSeparator == ',') {
    string = string.replace(/\,/g, '');
  }

  return parseFloat(string);
};

NumberInput.property = {};
NumberInput.property.value = {
  set: function set(value) {
    if (typeof value != 'number' || isNaN(value)) value = 0;
    this._value = Math.max(this._min, Math.min(this._max, value));
    this.updateTextValue();
  },
  get: function get() {
    return this._value;
  }
};
NumberInput.property.max = {
  set: function set(value) {
    if (!(typeof value == 'number') || isNaN(value)) {
      value = Infinity;
    }

    this._max = value;
    this._value = Math.min(value, this._value);
    this._min = Math.min(this._min, this._value);
    this.updateTextValue();
  },
  get: function get() {
    return this._max;
  }
};
NumberInput.property.min = {
  set: function set(value) {
    if (!(typeof value == 'number') || isNaN(value)) {
      value = -Infinity;
    }

    this._min = value;
    this._value = Math.max(value, this._value);
    this._max = Math.max(this._max, this._value);
    this.updateTextValue();
  },
  get: function get() {
    return this._min;
  }
};
NumberInput.property.decimalSeparator = {
  set: function set(value) {
    if (value == ',') {
      if (this._thousandsSeparator == ',') this._thousandsSeparator = '.';
    } else if (value == '.') {
      if (this._thousandsSeparator == '.') this._thousandsSeparator = ',';
    } else {
      value = '';
    }

    this._decimalSeparator = value;
    this.updateTextValue();
  },
  get: function get() {
    return this._decimalSeparator;
  }
};
NumberInput.property.thousandsSeparator = {
  set: function set(value) {
    if (value == ',') {
      if (this._decimalSeparator == ',') this._decimalSeparator = '.';
    } else if (value == '.') {
      if (this._decimalSeparator == '.') this._decimalSeparator = ',';
    } else {
      value = '';
    }

    this._thousandsSeparator = value;
    this.updateTextValue();
  },
  get: function get() {
    return this._thousandsSeparator;
  }
};
NumberInput.property.floatFixed = {
  set: function set(value) {
    if (typeof value == "number") {
      if (isNaN(value)) {
        value = -1;
      } else {
        value = Math.round(Math.max(-1, Math.min(100, value)));
      }
    } else {
      value = -1;
    }

    this._floatFixed = value;
    this.updateTextValue();
  },
  get: function get() {
    return this._floatFixed;
  }
};
NumberInput.property.decimalPadding = {
  set: function set(value) {
    if (typeof value == "number") {
      if (isNaN(value)) {
        value = 0;
      } else {
        value = Math.round(Math.max(-1, Math.min(100, value)));
      }
    } else {
      value = 0;
    }

    this._decimalPadding = value;
    this.updateTextValue();
  },
  get: function get() {
    return this._decimalPadding;
  }
};
NumberInput.property.disabled = {
  set: function set(value) {
    this.$input.disabled = !!value;
    this.$upBtn.disabled = !!value;
    this.$downBtn.disabled = !!value;
    if (value) this.addClass('absol-disabled');else this.removeClass('absol-disabled');
  },
  get: function get() {
    return this.$input.disabled;
  }
};
absol_acomp_ACore.install('NumberInput'.toLowerCase(), NumberInput);
/* harmony default export */ const js_NumberInput = (NumberInput);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/NumberSpanInput.js


var NumberSpanInput_ = absol_acomp_ACore._;
var NumberSpanInput_$ = absol_acomp_ACore.$;
/***
 * @extends  AElement
 * @constructor
 */

function NumberSpanInput() {
  this.ev_keydown = this.ev_keydown.bind(this);
  this.on('keydown', this.ev_keydown, true);
  this.readOnly = false;
  this.value = 0;
  this.on('paste', function (event) {
    event.preventDefault();
  });
}

NumberSpanInput.tag = 'NumberSpanInput'.toLowerCase();

NumberSpanInput.render = function () {
  return NumberSpanInput_({
    tag: 'span',
    child: {
      text: ''
    }
  });
};

NumberSpanInput.prototype.selectAll = function () {
  var sel;

  if (window.getSelection) {
    sel = window.getSelection();
    sel.removeAllRanges();
    var range = document.createRange();
    range.selectNode(this.childNodes[this.childNodes.length - 1]);
    sel.addRange(range);
  } else {
    console.error("TimePicker: Not support!");
  }
};

NumberSpanInput.prototype.selectEnd = function () {
  var sel;

  if (window.getSelection) {
    sel = window.getSelection();
    sel.removeAllRanges();

    this._autoAddZero();

    var length = this.firstChild.data.length;
    var range = document.createRange();
    range.setStart(this.firstChild, length);
    range.setEnd(this.firstChild, length);
    sel.addRange(range);
  } else {
    console.error("TimePicker: Not support!");
  }
};

NumberSpanInput.prototype.selectNone = function () {
  var sel;

  if (document.activeElement === this) {
    sel = window.getSelection();
    sel.removeAllRanges();
  }
};

NumberSpanInput.prototype._autoAddZero = function () {
  if (!this.firstChild) {
    this.addChild(NumberSpanInput_({
      text: '0'
    }));
  }
};
/***
 *
 * @param {KeyboardEvent} event
 */


NumberSpanInput.prototype.ev_keydown = function (event) {
  if (event.key && event.key.length == 1 && !event.ctrlKey && !event.altKey) {
    if (event.key.match(/[0-9]/)) {} else {
      event.preventDefault();
    }
  } else if (event.key == 'Enter') {
    event.preventDefault();
  }
};

NumberSpanInput.property = {};
NumberSpanInput.property.readOnly = {
  set: function set(value) {
    this.contentEditable = !value;
  },
  get: function get() {
    return this.contentEditable === false || this.contentEditable === 'false';
  }
};
/***
 *
 * @type {NumberSpanInput}
 */

NumberSpanInput.property.value = {
  set: function set(value) {
    this._autoAddZero();

    this.firstChild.data = value + '';
  },
  get: function get() {
    return this.firstChild && this.firstChild.data || '';
  }
};
absol_acomp_ACore.install(NumberSpanInput);
/* harmony default export */ const js_NumberSpanInput = (NumberSpanInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/onscreenwindow.css
var onscreenwindow = __webpack_require__(3576);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/OnsScreenWindow.js






var OnsScreenWindow_ = absol_acomp_ACore._;
var OnsScreenWindow_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function OnScreenWindow() {
  var res = this;
  this._lastSize = {
    width: 0,
    height: 0
  };
  res.$headerbar = OnsScreenWindow_$('.absol-onscreen-window-head-bar', res).on('dragstart', res.eventHandler.beginDragHeaderbar);
  res.$bottomResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom', res).on('dragstart', res.eventHandler.beginDragBottom);
  res.$rightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-right', res).on('dragstart', res.eventHandler.beginDragRight);
  res.$topResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top', res).on('dragstart', res.eventHandler.beginDragTop);
  res.$leftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-left', res).on('dragstart', res.eventHandler.beginDragLeft);
  res.$bottomRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right', res).on('dragstart', res.eventHandler.beginDragButtonRight);
  res.$bottomLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left', res).on('dragstart', res.eventHandler.beginDragBottomLeft);
  res.$topLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left', res).on('dragstart', res.eventHandler.beginDragTopLeft);
  res.$topRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right', res).on('dragstart', res.eventHandler.beginDragTopRight);
  res.$headerButtonCtn = OnsScreenWindow_$('.absol-onscreen-window-head-bar-buttons', res.$headerbar);
  res.$windowIcon = OnsScreenWindow_$('span.absol-onscreen-window-head-bar-icon.mdi.mdi-settings', res);
  res.$windowTitle = OnsScreenWindow_$('.absol-onscreen-window-head-bar-title', res);
  res._windowIcon = 'span.absol-onscreen-window-head-bar-icon.mdi.mdi-settings';
  res._windowTitle = '';
  res.$bodyContainer = OnsScreenWindow_$('.absol-onscreen-window-body-container', res);
  res.$attachhook = OnsScreenWindow_('attachhook').addTo(res).on('error', function () {
    this.updateSize = this.updateSize || res.relocation.bind(res);
    HTML5_Dom.addToResizeSystem(this);
  });
  res.$minimizeBtn = OnsScreenWindow_$('button.absol-onscreen-window-head-bar-button-minimize', res);
  res.$closeBtn = OnsScreenWindow_$('button.absol-onscreen-window-head-bar-button-close', res);
  res.$dockBtn = OnsScreenWindow_$('button.absol-onscreen-window-head-bar-button-dock', res);
}

OnScreenWindow.tag = 'OnScreenWindow'.toLowerCase();

OnScreenWindow.render = function () {
  return OnsScreenWindow_({
    extendEvent: ['sizechange', 'drag', 'relocation'],
    "class": 'absol-onscreen-window',
    child: {
      "class": 'absol-onscreen-window-content',
      child: [{
        tag: 'hanger',
        "class": 'absol-onscreen-window-head-bar',
        child: ['span.absol-onscreen-window-head-bar-icon.mdi.mdi-settings', {
          tag: 'span',
          "class": 'absol-onscreen-window-head-bar-title',
          child: {
            text: ''
          }
        }, {
          "class": "absol-onscreen-window-head-bar-buttons",
          child: [{
            tag: 'button',
            "class": 'absol-onscreen-window-head-bar-button-minimize',
            child: 'span.mdi.mdi-window-minimize'
          }, {
            tag: 'button',
            "class": 'absol-onscreen-window-head-bar-button-dock',
            child: 'span.mdi.mdi-dock-window'
          }, {
            tag: 'button',
            "class": 'absol-onscreen-window-head-bar-button-close',
            child: 'span.mdi.mdi-close'
          }]
        }]
      }, {
        "class": 'absol-onscreen-window-body-container'
      }, 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-right', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left', 'hanger.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right']
    }
  });
};

OnScreenWindow.prototype.maybeSizeChange = function () {
  var bound = this.getBoundingClientRect();

  if (this._lastSize.width !== bound.width || this._lastSize.height !== bound.height) {
    this._lastSize = bound;
    window.dispatchEvent(new Event('resize'));
    this.emit('sizechange', {
      size: bound,
      target: this,
      type: 'sizechange'
    }, this);
  }
};

OnScreenWindow.eventHandler = {};

OnScreenWindow.eventHandler.beginDragHeaderbar = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$headerButtonCtn, event)) {
    this.$headerbar.on('drag', this.eventHandler.dragHeaderbar);
    this.$headerbar.on('dragend', this.eventHandler.endDragHeaderbar);
    var screenSize = HTML5_Dom.getScreenSize();
    var bound = this.getBoundingClientRect();
    this.__moveData__ = {
      bound: bound,
      modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal').addTo(document.body),
      maxLeft: screenSize.width - bound.width - 1,
      maxY: screenSize.height - bound.height - 1
    };
  }
};

OnScreenWindow.eventHandler.dragHeaderbar = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var dy = d.y;
  var newX = Math.max(0, Math.min(this.__moveData__.maxLeft, this.__moveData__.bound.left + dx));
  var newY = Math.max(0, Math.min(this.__moveData__.maxY, this.__moveData__.bound.top + dy));
  this.addStyle({
    top: newY + 'px',
    left: newX + 'px'
  });
  this.emit('drag', event, this);
};

OnScreenWindow.eventHandler.endDragHeaderbar = function (event) {
  this.$headerbar.off('drag', this.eventHandler.dragHeaderbar);
  this.$headerbar.off('dragend', this.eventHandler.endDragHeaderbar);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
};

OnScreenWindow.eventHandler.beginDragBottom = function (event) {
  if (event.target != this.$bottomResizer) return;
  this.$bottomResizer.on('drag', this.eventHandler.dragBottom);
  this.$bottomResizer.on('dragend', this.eventHandler.endDragBottom);
  var screenSize = HTML5_Dom.getScreenSize();
  var bound = this.getBoundingClientRect();
  this.__moveData__ = {
    bound: bound,
    minHeight: this.getFontSize() * 1.4,
    maxHeight: screenSize.height - bound.top,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-bottom').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragBottom = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dy = d.y;
  var newHeight = Math.max(this.__moveData__.minHeight, Math.min(this.__moveData__.maxHeight, this.__moveData__.bound.height + dy));
  this.addStyle('height', newHeight + 'px');
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragBottom = function (event) {
  this.$bottomResizer.off('drag', this.eventHandler.dragBottom);
  this.$bottomResizer.off('dragend', this.eventHandler.endDragBottom);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragRight = function (event) {
  if (event.target != this.$rightResizer) return;
  this.$rightResizer.on('drag', this.eventHandler.dragRight);
  this.$rightResizer.on('dragend', this.eventHandler.endDragRight);
  var screenSize = HTML5_Dom.getScreenSize();
  var bound = this.getBoundingClientRect();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  this.__moveData__ = {
    minWidth: minWidth,
    bound: bound,
    maxWidth: screenSize.width - bound.left,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-right').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragRight = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var newWidth = Math.max(this.__moveData__.minWidth, Math.min(this.__moveData__.maxWidth, this.__moveData__.bound.width + dx));
  this.addStyle('width', newWidth + 'px');
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragRight = function (event) {
  this.$rightResizer.off('drag', this.eventHandler.dragRight);
  this.$rightResizer.off('dragend', this.eventHandler.endDragRight);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragTop = function (event) {
  if (event.target != this.$topResizer) return;
  this.$topResizer.on('drag', this.eventHandler.dragTop);
  this.$topResizer.on('dragend', this.eventHandler.endDragTop); // var screenSize = Dom.getScreenSize();

  var bound = this.getBoundingClientRect();
  var fontSize = this.getFontSize();
  this.__moveData__ = {
    fontSize: fontSize,
    bound: bound,
    maxTop: bound.bottom - 1.4 * fontSize,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-top').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragTop = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dy = d.y;
  var newTop = Math.max(0, Math.min(this.__moveData__.maxTop, this.__moveData__.bound.top + dy));
  var newHeight = this.__moveData__.bound.bottom - newTop;
  this.addStyle({
    'top': newTop + 'px',
    'height': newHeight + 'px'
  });
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragTop = function (event) {
  this.$topResizer.off('drag', this.eventHandler.dragTop);
  this.$topResizer.off('dragend', this.eventHandler.endDragTop);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragLeft = function (event) {
  if (event.target != this.$leftResizer) return;
  this.$leftResizer.on('drag', this.eventHandler.dragLeft);
  this.$leftResizer.on('dragend', this.eventHandler.endDragLeft);
  var bound = this.getBoundingClientRect();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  this.__moveData__ = {
    maxLeft: bound.right - minWidth,
    bound: bound,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-left').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragLeft = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var newLeft = Math.max(0, Math.min(this.__moveData__.maxLeft, this.__moveData__.bound.left + dx));
  var newWidth = this.__moveData__.bound.right - newLeft;
  this.addStyle({
    width: newWidth + 'px',
    left: newLeft + 'px'
  });
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragLeft = function (event) {
  this.$leftResizer.off('drag', this.eventHandler.dragLeft);
  this.$leftResizer.off('dragend', this.eventHandler.endDragLeft);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
}; //todo


OnScreenWindow.eventHandler.beginDragButtonRight = function (event) {
  if (event.target != this.$bottomRightResizer) return;
  this.$bottomRightResizer.on('drag', this.eventHandler.dragButtonRight);
  this.$bottomRightResizer.on('dragend', this.eventHandler.endDragButtonRight);
  var screenSize = HTML5_Dom.getScreenSize();
  var bound = this.getBoundingClientRect();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  this.__moveData__ = {
    minHeight: this.getFontSize() * 1.4,
    minWidth: minWidth,
    bound: bound,
    maxWidth: screenSize.width - bound.left,
    maxHeight: screenSize.height - bound.top,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-bottom-right').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragButtonRight = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var dy = d.y;
  var newWidth = Math.max(this.__moveData__.minWidth, Math.min(this.__moveData__.maxWidth, this.__moveData__.bound.width + dx));
  var newHeight = Math.max(this.__moveData__.minHeight, Math.min(this.__moveData__.maxHeight, this.__moveData__.bound.height + dy));
  this.addStyle('width', newWidth + 'px');
  this.addStyle('height', newHeight + 'px');
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragButtonRight = function (event) {
  this.$bottomRightResizer.off('drag', this.eventHandler.dragButtonRight);
  this.$bottomRightResizer.off('dragend', this.eventHandler.endDragButtonRight);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragBottomLeft = function (event) {
  if (event.target != this.$bottomLeftResizer) return;
  this.$bottomLeftResizer.on('drag', this.eventHandler.dragBottomLeft);
  this.$bottomLeftResizer.on('dragend', this.eventHandler.endDragBottomLeft);
  var bound = this.getBoundingClientRect();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  var screenSize = HTML5_Dom.getScreenSize();
  this.__moveData__ = {
    maxLeft: bound.right - minWidth,
    bound: bound,
    minHeight: this.getFontSize() * 1.4,
    maxHeight: screenSize.height - bound.top,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-bottom-left').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragBottomLeft = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var dy = d.y;
  var newLeft = Math.max(0, Math.min(this.__moveData__.maxLeft, this.__moveData__.bound.left + dx));
  var newWidth = this.__moveData__.bound.right - newLeft;
  var newHeight = Math.max(this.__moveData__.minHeight, Math.min(this.__moveData__.maxHeight, this.__moveData__.bound.height + dy));
  this.addStyle('height', newHeight + 'px');
  this.addStyle({
    width: newWidth + 'px',
    left: newLeft + 'px'
  });
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
};

OnScreenWindow.eventHandler.endDragBottomLeft = function (event) {
  this.$bottomLeftResizer.off('drag', this.eventHandler.dragLeft);
  this.$bottomLeftResizer.off('dragend', this.eventHandler.endDragLeft);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragTopLeft = function (event) {
  if (event.target != this.$topLeftResizer) return;
  this.$topLeftResizer.on('drag', this.eventHandler.dragTopLeft);
  this.$topLeftResizer.on('dragend', this.eventHandler.endDragTopLeft);
  var bound = this.getBoundingClientRect();
  var fontSize = this.getFontSize();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  this.__moveData__ = {
    maxLeft: bound.right - minWidth,
    fontSize: fontSize,
    bound: bound,
    maxTop: bound.bottom - 1.4 * fontSize,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-top-left').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragTopLeft = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var dy = d.y;
  var newTop = Math.max(0, Math.min(this.__moveData__.maxTop, this.__moveData__.bound.top + dy));
  var newHeight = this.__moveData__.bound.bottom - newTop;
  var newLeft = Math.max(0, Math.min(this.__moveData__.maxLeft, this.__moveData__.bound.left + dx));
  var newWidth = this.__moveData__.bound.right - newLeft;
  this.addStyle({
    top: newTop + 'px',
    height: newHeight + 'px',
    width: newWidth + 'px',
    left: newLeft + 'px'
  });
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragTopLeft = function (event) {
  this.$topLeftResizer.off('drag', this.eventHandler.dragTopLeft);
  this.$topLeftResizer.off('dragend', this.eventHandler.endDragTopLeft);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

OnScreenWindow.eventHandler.beginDragTopRight = function (event) {
  if (event.target != this.$topRightResizer) return;
  this.$topRightResizer.on('drag', this.eventHandler.dragTopRight);
  this.$topRightResizer.on('dragend', this.eventHandler.endDragTopRight);
  var screenSize = HTML5_Dom.getScreenSize();
  var bound = this.getBoundingClientRect();
  var fontSize = this.getFontSize();
  var minWidth = this.$windowTitle.getBoundingClientRect().right - bound.left + this.$headerButtonCtn.getBoundingClientRect().width;
  this.__moveData__ = {
    minWidth: minWidth,
    fontSize: fontSize,
    bound: bound,
    maxWidth: screenSize.width - bound.left,
    maxTop: bound.bottom - 1.4 * fontSize,
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal.absol-onscreen-window-resize-top-right').addTo(document.body)
  };
};

OnScreenWindow.eventHandler.dragTopRight = function (event) {
  var d = event.currentPoint.sub(event.startingPoint);
  var dx = d.x;
  var dy = d.y;
  var newWidth = Math.max(this.__moveData__.minWidth, Math.min(this.__moveData__.maxWidth, this.__moveData__.bound.width + dx));
  var newTop = Math.max(0, Math.min(this.__moveData__.maxTop, this.__moveData__.bound.top + dy));
  var newHeight = this.__moveData__.bound.bottom - newTop;
  this.addStyle({
    'top': newTop + 'px',
    'height': newHeight + 'px',
    width: newWidth + 'px'
  });
  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
  this.maybeSizeChange();
};

OnScreenWindow.eventHandler.endDragTopRight = function (event) {
  this.$topRightResizer.off('drag', this.eventHandler.dragTopRight);
  this.$topRightResizer.off('dragend', this.eventHandler.endDragTopRight);

  this.__moveData__.modal.remove();

  this.__moveData__ = undefined;
};

['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter'].forEach(function (key) {
  OnScreenWindow.prototype[key] = function () {
    return this.$bodyContainer[key].apply(this.$bodyContainer, arguments);
  };
});
OnScreenWindow.property = {};
OnScreenWindow.property.windowIcon = {
  set: function set(value) {
    this._windowIcon = value;

    if (this.$windowIcon) {
      this.$windowIcon.remove();
      this.$windowIcon = undefined;
    }

    if (value) {
      this.$windowIcon = OnsScreenWindow_(value).addClass('absol-onscreen-window-head-bar-icon');
      this.$headerbar.addChildBefore(this.$windowIcon, this.$headerbar.childNodes[0]);
    }
  },
  get: function get() {
    return this._windowIcon;
  }
};
OnScreenWindow.property.windowTitle = {
  set: function set(value) {
    this._windowTitle = value;
    this.$windowTitle.clearChild().addChild(OnsScreenWindow_({
      text: '' + value
    }));
  },
  get: function get() {
    return this._windowTitle;
  }
};

OnScreenWindow.prototype.relocation = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = HTML5_Dom.getScreenSize();
  var isRelocated = false;

  if (bound.bottom >= screenSize.height) {
    this.addStyle('top', Math.max(0, screenSize.height - bound.height) + 'px');
    isRelocated = true;
  }

  if (bound.right >= screenSize.width) {
    this.addStyle('left', Math.max(0, screenSize.width - bound.width) + 'px');
    isRelocated = true;
  }

  if (isRelocated) {
    this.emit('relocation', {
      type: 'relocation',
      target: this
    }, this);
  }
};

absol_acomp_ACore.install(OnScreenWindow);
/* harmony default export */ const OnsScreenWindow = (OnScreenWindow);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageselector.css
var pageselector = __webpack_require__(5461);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageSelector.js


var PageSelector_ = absol_acomp_ACore._;
var PageSelector_$ = absol_acomp_ACore.$;

function PageSelector() {
  this.$pageInput = PageSelector_$('.absol-page-number-input input', this);
  this.$pageInput.on('keyup', this.eventHandler.pressEnterKey);
  this.$prevBtn = PageSelector_$('li.page-previous', this);
  this.$nextBtn = PageSelector_$('li.page-next', this);
  this.$firstBtn = PageSelector_$('li.page-first', this);
  this.$lastBtn = PageSelector_$('li.page-last', this);
  this.$nextBtn.on('click', this.eventHandler.clickNext);
  this.$prevBtn.on('click', this.eventHandler.clickPrev);
  this.$firstBtn.on('click', this.eventHandler.clickFirst);
  this.$lastBtn.on('click', this.eventHandler.clickLast);
  this.$buttonContainer = PageSelector_$('.absol-page-number-buttons', this);
  this._buttons = [];
  this._pageOffset = 1;
  this._selectedIndex = 1;
  this._pageCount = 1;
  this._pageRange = 1;
  this.$pageInput.value = this._selectedIndex;
}

PageSelector.tag = 'PageSelector'.toLowerCase();

PageSelector.render = function () {
  return PageSelector_({
    "class": ['absol-page-selector'],
    extendEvent: ['change'],
    child: [{
      "class": 'absol-page-number-input',
      child: [{
        tag: 'label',
        child: {
          text: "Page"
        }
      }, {
        tag: 'input',
        attr: {
          type: 'text'
        }
      }]
    }, {
      tag: 'ul',
      "class": 'absol-page-number-buttons',
      child: [' <li class="page-first">\
                        <a aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="absol-page-link">First</a>\
                    </li>', ' <li class="page-previous">\
                        <a aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="absol-page-link">Previous</a>\
                    </li>', '<li class="page-next" >\
                        <a aria-controls="dtBasicExample" data-dt-idx="7" tabindex="0" class="absol-page-link">Next</a>\
                    </li>', ' <li class="page-last">\
                        <a aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="absol-page-link">Last</a>\
                    </li>']
    }]
  });
};

PageSelector.eventHandler = {};

PageSelector.eventHandler.pressEnterKey = function (event) {
  if (event.keyCode != 13) return;
  var index = parseInt(this.$pageInput.value.trim(), 10);

  if (index < 1 || index > this._pageCount) {
    this.$pageInput.value = this._selectedIndex;
    return;
  }

  this.selectPage(index, true);
};

PageSelector.eventHandler.clickLast = function (event) {
  this.selectPage(this._pageCount, true);
};

PageSelector.eventHandler.clickFirst = function (event) {
  this.selectPage(1, true);
};

PageSelector.eventHandler.clickNext = function (event) {
  if (this._selectedIndex == this._pageCount) return;
  this.selectPage(this._selectedIndex + 1, true);
};

PageSelector.eventHandler.clickPrev = function (event) {
  if (this._selectedIndex == 1) return;
  this.selectPage(this._selectedIndex - 1, true);
};

PageSelector.eventHandler.clickIndex = function (index, event) {
  this.selectPage(index + this._pageOffset, true);
};

PageSelector.prototype._createButton = function (index) {
  var button = PageSelector_({
    tag: 'li',
    "class": 'absol-page-number',
    child: {
      tag: 'a',
      attr: {
        'data-index': index
      },
      child: {
        text: '' + index
      }
    },
    on: {
      click: PageSelector.eventHandler.clickIndex.bind(this, index)
    }
  });

  this.$buttonContainer.addChildBefore(button, this.$nextBtn);
  return button;
};

PageSelector.prototype.setPageRange = function (pageCount) {
  this._pageRange = pageCount;
  if (this._buttons.length > 0) throw new Error("Not implement change pageCount");

  while (this._buttons.length < pageCount) {
    this._buttons.push(this._createButton(this._buttons.length));
  }
};

PageSelector.prototype.setStartPage = function (index) {
  this._buttons.forEach(function (e, i) {
    e.childNodes[0].innerHTML = i + index + '';
  });

  this._pageOffset = index;
};

PageSelector.prototype.selectPage = function (index, userActive) {
  if (index == this._selectedIndex) this.setStartPage(index - parseInt(this._pageRange / 2));

  if (index > this._selectedIndex) {
    if (index == this._pageOffset + this._pageRange - 1) this.setStartPage(index - parseInt(this._pageRange / 2));
  }

  if (index < this._selectedIndex) {
    if (index == this._pageOffset) this.setStartPage(index - parseInt(this._pageRange / 2));
  }

  if (index > this._pageCount - parseInt(this._pageRange / 2)) this.setStartPage(this._pageCount - this._pageRange + 1);
  if (index <= parseInt(this._pageRange / 2)) this.setStartPage(1);
  var pageOffset = this._pageOffset;

  this._buttons.forEach(function (e, i) {
    if (i + pageOffset == index) {
      e.addClass('active');
    } else {
      e.removeClass('active');
    }
  });

  if (this._selectedIndex != index) {
    this._selectedIndex = index;
    this.$pageInput.value = index;
    this.emit('change', {
      target: this,
      selectedIndex: index,
      userActive: !!userActive
    }, this);
  }
};

PageSelector.prototype.getSelectedPage = function () {
  return this._selectedIndex;
};

PageSelector.prototype.setPageCount = function (count) {
  this._pageCount = count;
};

PageSelector.property = {};

PageSelector.prototype.init = function (props) {
  props = props || {};
  props.pageOffset = props.pageOffset || 1;
  props.pageRange = props.pageRange || 5;
  props.pageCount = props.pageCount || 15;
  props.selectedIndex = typeof props.selectedIndex == "number" ? props.selectedIndex : props.pageOffset;
  if (props.pageCount < props.pageRange) props.pageRange = props.pageCount;
  this.setPageCount(props.pageCount);
  this.setPageRange(props.pageRange);
  this.setStartPage(props.pageOffset);
  this.selectPage(props.selectedIndex);
};

absol_acomp_ACore.install(PageSelector);
/* harmony default export */ const js_PageSelector = (PageSelector);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/preinput.css
var preinput = __webpack_require__(441);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PreInput.js






var PreInput_ = absol_acomp_ACore._;
var PreInput_$ = absol_acomp_ACore.$;
var textDelay = Detector_BrowserDetector.isSafari ? 100 : 1;
/***
 * @extends AElement
 * @constructor
 */

function PreInput() {
  this.defineEvent(['pasteimg', 'pastetext', 'change']);
  this.on('paste', this.eventHandler.paste);
  this.on('keydown', this.eventHandler.keydown);
  this.history = [];
  this.historyIndex = -1;
  this.commitChange('', 0);
}

PreInput.tag = 'preinput';

PreInput.render = function () {
  return PreInput_({
    tag: 'pre',
    "class": 'as-preinput',
    attr: {
      contenteditable: 'true'
    },
    child: 'br'
  });
};

PreInput.prototype.applyData = function (text, offset) {
  var textNode = PreInput_({
    text: text
  });

  this.clearChild().addChild(textNode).addChild(PreInput_('br'));

  if (document.activeElement == this && this.isDescendantOf(document.body)) {
    if (document.getSelection) {
      var sel = document.getSelection();
      sel.removeAllRanges();
      var range = document.createRange();

      if (typeof offset == 'number') {
        range.setStart(textNode, Math.min(text.length, offset));
      } else {
        range.setStart(textNode, Math.min(text.length, offset.start));
        range.setEnd(textNode, Math.min(text.length, offset.end));
      }

      sel.addRange(range);
      this.scrollIntoRange(range);
    } else {
      console.error("PreInput: Not support!");
    }
  }
};

PreInput.prototype.scrollIntoRange = function (range) {
  var elementBound = range.getBoundingClientRect();
  var viewportBound = this.getBoundingClientRect();
  var dBottom = 0;
  if (range.startContainer && range.startContainer.data && range.startContainer.data.charAt(range.startContainer.data.length - 1) == '\n') dBottom += this.getFontSize() * 1.5;
  var currentScrollTop = this.scrollTop;
  var newScrollTop = currentScrollTop;

  if (elementBound.bottom + dBottom > viewportBound.bottom) {
    newScrollTop = currentScrollTop + (elementBound.bottom + dBottom - viewportBound.bottom);
  }

  if (elementBound.top < viewportBound.top) {
    newScrollTop = currentScrollTop - (viewportBound.top - elementBound.top);
  }

  if (newScrollTop != currentScrollTop) {
    this.scrollTop = newScrollTop;
  }

  var currentScrollLeft = this.scrollLeft;
  var newScrollLeft = currentScrollLeft;

  if (elementBound.right > viewportBound.right) {
    newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right);
  }

  if (elementBound.left < viewportBound.left) {
    newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left);
  }

  if (newScrollLeft != currentScrollLeft) {
    this.scrollLeft = newScrollLeft;
  }
};

PreInput.prototype.undo = function () {
  if (this.historyIndex <= 0) return;
  this.historyIndex--;
  var record = this.history[this.historyIndex];
  this.applyData(record.text, record.offset);
  this.emit('change', {
    target: this,
    value: record.text,
    action: 'undo',
    record: record,
    type: 'change'
  }, this);
};

PreInput.prototype.redo = function () {
  if (this.historyIndex + 1 >= this.history.length) return;
  this.historyIndex++;
  var record = this.history[this.historyIndex];
  this.applyData(record.text, record.offset);
  this.emit('change', {
    target: this,
    value: record.text,
    action: 'redo',
    record: record,
    type: 'change'
  }, this);
};

PreInput.prototype.commitChange = function (text, offset) {
  while (this.historyIndex < this.history.length - 1) {
    this.history.pop();
  }

  var lastText = this.history.length > 0 ? this.history[this.history.length - 1].text : null;

  if (text === lastText) {
    if (this.history[this.history.length - 1].offset != offset) this.history[this.history.length - 1].offset = offset;
  } else {
    this.historyIndex = this.history.length;
    var record = {
      text: text,
      offset: offset
    };
    this.history.push(record);
    this.emit('change', {
      target: this,
      value: record.text,
      action: 'commit',
      record: record,
      type: 'change'
    }, this);
  }
};

PreInput.prototype.waitToCommit = function (text, offset) {
  var thisInput = this;
  if (this._commitTimeout > 0) clearTimeout(this._commitTimeout);
  this._commitTimeout = setTimeout(function () {
    thisInput.commitChange(text, offset);
  }, textDelay);
};

PreInput.prototype.getPosition = function (node, offset) {
  if (!node) return NaN;
  if (node == this) return offset;
  var parent = node.parentElement;
  if (!parent) return NaN;
  var text = '';
  var child;
  var lastBr = false;

  for (var i = 0; i < parent.childNodes.length; ++i) {
    child = parent.childNodes[i];
    if (child == node) break;
    text += this.stringOf(child);
  }

  return this.getPosition(parent, text.length + offset);
};

PreInput.prototype.getSelectPosition = function () {
  if (window.getSelection) {
    var sel = window.getSelection();

    if (sel.getRangeAt && sel.rangeCount) {
      var range = sel.getRangeAt(0);
      var direction = 'forward';
      var cmpPosition = sel.anchorNode.compareDocumentPosition(sel.focusNode);

      if (cmpPosition === 4) {
        direction = 'forward';
      } else if (cmpPosition === 2) {
        direction = 'backward';
      } else if (!cmpPosition && sel.anchorOffset > sel.focusOffset || cmpPosition === Node.DOCUMENT_POSITION_PRECEDING) {
        direction = 'backward';
      }

      var startOffset = this.getPosition(range.startContainer, range.startOffset);
      var endOffset = this.getPosition(range.endContainer, range.endOffset);
      if (isNaN(startOffset)) return null;
      return {
        start: startOffset,
        end: endOffset,
        direction: direction
      };
    }
  } else if (document.selection) {
    console.error('May not support!');
  }
};

PreInput.prototype.stringOf = function (node) {
  if (!node) return '';

  if (node.nodeType == 3) {
    return node.data;
  }

  if (node.tagName == 'BR' || node.tagName == 'br') {
    return '\n';
  }

  var thisInput = this;
  return Array.prototype.map.call(node.childNodes, function (cNode, index, arr) {
    if ((cNode.tagName == 'BR' || cNode.tagName == 'br') && index + 1 >= arr.length) return '';
    return thisInput.stringOf(cNode);
  }).join('');
};

PreInput.prototype._pasteText = function (text) {
  var sel = window.getSelection();
  var range;

  if (window.getSelection) {
    sel = window.getSelection();

    if (sel.getRangeAt && sel.rangeCount) {
      try {
        range = sel.getRangeAt(0);
        range.deleteContents();

        var textNode = PreInput_({
          text: text
        });

        range.insertNode(textNode);

        if (sel.removeRange) {
          sel.removeRange(range);
        } else {
          sel.removeAllRanges();
        }

        range = document.createRange();
        range.setStart(textNode, text.length);
        sel.addRange(range);
        this.scrollIntoRange(range);
        this.commitChange(this.stringOf(this), this.getPosition(textNode, text.length));
      } catch (error) {
        alert(error.message);
      }
    }
  } else if (document.selection && document.selection.createRange) {
    document.selection.createRange().text = text;
    this.commitChange(this.stringOf(this), this.getPosition(textNode, text.length));
    console.error('May not support!');
  }
};
/**
 * @type {PreInput}
 */


PreInput.eventHandler = {};

PreInput.eventHandler.paste = function (event) {
  var thisIp = this;
  var clipboardData = event.clipboardData || window.clipboardData;
  /**Safari bug */

  if (clipboardData) {
    if (clipboardData.items) {
      var items = Array.prototype.slice.call(clipboardData.items);
      var imgItems = items.filter(function (item) {
        return item.type.indexOf('image') >= 0;
      });
      var plainTextItems = items.filter(function (item) {
        return item.type.indexOf('text/plain') >= 0;
      });

      if (imgItems.length > 0) {
        var imgFiles = imgItems.map(function (it) {
          return it.getAsFile();
        });
        this.emit('pasteimg', {
          target: this,
          imageFile: imgFiles[0],
          imageFiles: imgFiles,
          orginEvent: event
        }, this);
      } else if (plainTextItems.length > 0) {
        var plainTextItem = plainTextItems[0]; //only one item

        plainTextItem.getAsString(function (text) {
          thisIp._pasteText(text);
        });
      } else {
        window.ABSOL_DEBUG && console.error("Can not handle clipboard data");
      }

      event.preventDefault();
    } else {
      var text = event.clipboardData.getData('text/plain');

      if (text) {
        event.preventDefault();

        this._pasteText(text);
      } else {
        var currentText = this.stringOf(this);
        var currentSelection = this.getSelectPosition();
        setTimeout(function () {
          var images = [];
          PreInput_$('img', thisIp, function (elt) {
            images.push(elt);
          });
          Promise.all(images.map(function (img) {
            return HTML5_Dom.imageToCanvas(img).then(function (canvas) {
              var dataURI = canvas.toDataURL();
              var blob = dataURItoBlob(dataURI);
              var file = blobToFile(blob);
              return {
                file: file,
                blob: blob,
                url: dataURI
              };
            }, function (error) {
              console.error(error);
            })["catch"](function (error) {
              console.error(error);
            });
          })).then(function (results) {
            results = results.filter(function (it) {
              return !!it;
            });

            if (results.length > 0) {
              var imgFiles = results.map(function (it) {
                return it.file;
              });
              var urls = results.map(function (it) {
                return it.url;
              });
              thisIp.emit('pasteimg', {
                target: this,
                imageFile: imgFiles[0],
                imageFiles: imgFiles,
                urls: urls,
                url: urls[0],
                orginEvent: event
              }, thisIp);
            }
          });
          thisIp.applyData(currentText, currentSelection);
        }, textDelay);
      }
    }
  } else {
    setTimeout(function () {
      if (window.getSelection) {
        var sel = window.getSelection();

        if (sel.getRangeAt && sel.rangeCount) {
          var range = sel.getRangeAt(0);
          var text = this.stringOf(this);
          var offset = this.getPosition(range.startContainer, range.startOffset);
          this.waitToCommit(text, offset);
        }
      } else if (document.selection) {
        console.error('May not support!');
      }
    }.bind(this), textDelay);
  }
};

PreInput.eventHandler.keydown = function (event) {
  if (event.ctrlKey) {
    switch (event.key) {
      case 'z':
        this.undo();
        event.preventDefault();
        break;

      case 'y':
        this.redo();
        event.preventDefault();
        break;

      default:
        break;
    }
  }

  if (!event.ctrlKey && !event.altKey) {
    setTimeout(function () {
      if (window.getSelection) {
        var sel = window.getSelection();

        if (sel.getRangeAt && sel.rangeCount) {
          var range = sel.getRangeAt(0);
          var text = this.stringOf(this);
          var offset = this.getPosition(range.startContainer, range.startOffset);
          this.waitToCommit(text, offset);
        }
      } else if (document.selection) {
        console.error('May not support!');
      }
    }.bind(this), textDelay);
  }
};

PreInput.property = {};
PreInput.property.value = {
  set: function set(value) {
    value = value || '';
    this.applyData(value, value.length);
    this.commitChange(value, value.length);
  },
  get: function get() {
    return this.stringOf(this);
  }
};
PreInput.property.disabled = {
  set: function set(value) {
    value = !!value;
    if (value === this.containsClass('as-disabled')) return;

    if (value) {
      this.addClass('as-disabled');
      this.attr({
        contenteditable: undefined,
        oncut: 'return false',
        onpaste: 'return false',
        onkeydown: 'if(event.metaKey) return true; return false;'
      });
    } else {
      this.removeClass('as-disabled');
      this.attr({
        contenteditable: true,
        oncut: undefined,
        onpaste: undefined,
        onkeydown: undefined
      });
    }
  },
  get: function get() {
    return this.containsClass('as-disabled');
  }
};
absol_acomp_ACore.install(PreInput);
/* harmony default export */ const js_PreInput = (PreInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/progressbar.css
var progressbar = __webpack_require__(487);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProgressBar.js


var ProgressBar_ = absol_acomp_ACore._;
var ProgressBar_$ = absol_acomp_ACore.$;

function ProgressBar() {
  this._value = 0;
  this._variant = null;
  this.$value = ProgressBar_$('.as-progress-bar-value', this);
  this._striped = false;
  this._animated = false;
}

ProgressBar.tag = 'ProgressBar'.toLowerCase();

ProgressBar.render = function () {
  return ProgressBar_({
    "class": 'as-progress-bar',
    child: {
      "class": 'as-progress-bar-value'
    }
  });
};

ProgressBar.property = {};
/**
 * @type {ProgressBar}
 */

ProgressBar.property.variant = {
  set: function set(value) {
    if (this._variant) {
      this.removeClass('as-variant-' + this._variant);
    }

    if (value) {
      this.addClass('as-variant-' + value);
    } else {
      value = null;
    }

    this._variant = value;
  },
  get: function get() {
    return this._variant;
  }
};
/**
 * @type {ProgressBar}
 */

ProgressBar.property.value = {
  set: function set(value) {
    value = Math.max(0, Math.min(1, value || 0));
    this._value = value;
    this.$value.addStyle('width', value * 100 + '%');
  },
  get: function get() {
    return this._value;
  }
};
ProgressBar.property.animated = {
  set: function set(value) {
    value = !!value;
    this._striped = value;

    if (value) {
      this.addClass('as-animated');
    } else {
      this.removeClass('as-animated');
    }
  },
  get: function get() {
    return this._animated;
  }
};
ProgressBar.property.striped = {
  set: function set(value) {
    value = !!value;
    this._striped = value;

    if (value) {
      this.addClass('as-striped');
    } else {
      this.removeClass('as-striped');
    }
  },
  get: function get() {
    return this._striped;
  }
};
absol_acomp_ACore.install(ProgressBar);
/* harmony default export */ const js_ProgressBar = (ProgressBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/quicklistbutton.css
var quicklistbutton = __webpack_require__(7775);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FollowerToggler.js



var FollowerToggler_ = absol_acomp_ACore._;
var FollowerToggler_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function FollowerToggler() {
  this.defineEvent(['close', 'open', 'preopen']);
  this.on('click', this.eventHandler.click);
  this.addClass('as-follower-trigger');
  this.$follower = null;
  this._opened = false;
}

FollowerToggler.tag = 'FollowerToggler'.toLowerCase();

FollowerToggler.render = function () {
  return FollowerToggler_('div');
};

FollowerToggler.prototype.toggle = function () {
  if (this._opened) this.close();else this.open();
};

FollowerToggler.prototype.open = function () {
  if (this._opened) return;
  this._opened = true;
  this.addClass('as-follower-trigger-open');
  if (!this.$follower) return;
  this.emit('preopen', {
    name: 'preopen',
    target: this
  }, this);
  var thisTg = this;
  setTimeout(function () {
    thisTg.$follower.refollow();
    thisTg.$follower.removeClass('absol-follower-hidden');
    document.body.addEventListener('click', thisTg.eventHandler.clickBody);
    thisTg.emit('open', {
      name: 'open',
      target: this
    }, this);
  }, 1);
};

FollowerToggler.prototype.close = function () {
  if (!this._opened) return;
  this._opened = false;
  this.removeClass('as-follower-trigger-open');
  if (!this.$follower) return;
  this.$follower.unfollow();
  this.$follower.addClass('absol-follower-hidden');
  document.body.removeEventListener('click', this.eventHandler.clickBody);
  this.emit('close', {
    name: 'close',
    target: this
  }, this);
};

FollowerToggler.prototype.bindFollower = function (elt) {
  if (this.$follower) {
    this.$follower.followTarget = null;
  }

  if (elt && elt.refollow) {
    if (this._opened) elt.removeClass('absol-follower-hidden');else elt.addClass('absol-follower-hidden');
    elt.followTarget = this;
    this.$follower = elt;
  } else {
    throw new Error("Must be a follower!");
  }
};

FollowerToggler.eventHandler = {};

FollowerToggler.eventHandler.clickBody = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event) || HTML5_EventEmitter.hitElement(this.$follower, event)) return;
  this.close();
};

FollowerToggler.eventHandler.click = function () {
  this.toggle();
};

absol_acomp_ACore.install(FollowerToggler);
/* harmony default export */ const js_FollowerToggler = (FollowerToggler);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickListButton.js




var QuickListButton_ = absol_acomp_ACore._;
var QuickListButton_$ = absol_acomp_ACore.$;
/****
 * @extends FollowerToggler
 * @constructor
 */

function QuickListButton() {
  this.$shareFollower = QuickListButton.getFollower();

  QuickListButton_({
    tag: 'followertoggler',
    elt: this,
    on: {
      preopen: this.eventHandler.preopen,
      close: this.eventHandler.closeFollower
    }
  });

  this.bindFollower(this.$shareFollower);
  this.$iconCtn.remove();
  this.$content.addChild(this.$iconCtn);
  this._items = this._items;
  this._anchor = [];
  this.$list = null;
  this._listUpdated = true;
  this._opened = false;
  this.anchor = [12, 13, 15, 14]; //todo: add property
}

QuickListButton.$follower = QuickListButton_('follower.as-quick-list-button-follower');

QuickListButton.getFollower = function () {
  if (!QuickListButton.$follower) QuickListButton.$follower = QuickListButton_('follower.as-quick-list-button-follower');
  return QuickListButton.$follower;
};

QuickListButton.tag = 'QuickListButton'.toLowerCase();

QuickListButton.render = function () {
  return QuickListButton_({
    tag: 'flexiconbutton',
    "class": 'as-quick-list-button',
    extendEvent: 'select',
    props: {
      text: "+ Thêm",
      icon: 'span.mdi.mdi-menu-down'
    }
  });
};

QuickListButton.property = {};
QuickListButton.property.items = {
  set: function set(value) {
    value = value || [];
    this._items = value;
    this._listUpdated = false;
  },
  get: function get() {
    return this._items;
  }
};
/**
 * @type {QuickListButton}
 */

QuickListButton.eventHandler = {};

QuickListButton.eventHandler.preopen = function () {
  this.$shareFollower.addTo(document.body);
  this.$shareFollower.anchor = this.anchor;

  if (this.$list == null) {
    this.$list = QuickListButton_('selectlist.absol-bscroller').on('pressitem', this.eventHandler.pressitem);
  }

  if (!this._listUpdated) {
    this._listUpdated = true;
    this.$list.items = this._items;
  }

  this.$shareFollower.addChild(this.$list);
  this.$shareFollower.on({
    preupdateposition: this.eventHandler.preUpdatePosition
  });
};

QuickListButton.eventHandler.preUpdatePosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = HTML5_Dom.getScreenSize();
  var maxHeight = Math.max(screenSize.height - bound.bottom, bound.top) - 10;
  this.$list.addStyle('max-height', maxHeight + 'px');
};

QuickListButton.eventHandler.closeFollower = function () {
  this.$shareFollower.off({
    preupdateposition: this.eventHandler.preUpdatePosition
  });
};

QuickListButton.eventHandler.pressitem = function (event) {
  this.close();
  this.emit('select', Object.assign({}, event, {
    type: 'select',
    target: this
  }));
};

absol_acomp_ACore.install(QuickListButton);
/* harmony default export */ const js_QuickListButton = (QuickListButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlist.css
var selectlist = __webpack_require__(1540);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkboxbutton.css
var checkboxbutton = __webpack_require__(9409);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckboxButton.js



absol_acomp_ACore.install('checkboxbutton', CheckBoxInput);
/* harmony default export */ const CheckboxButton = (CheckBoxInput);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectListItem.js
function SelectListItem_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SelectListItem_typeof = function _typeof(obj) { return typeof obj; }; } else { SelectListItem_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SelectListItem_typeof(obj); }




var SelectListItem_ = absol_acomp_ACore._;
var SelectListItem_$ = absol_acomp_ACore.$;
/***
 *
 * @extends AElement
 * @constructor
 */

function SelectListItem() {
  var res = this;
  res.$text = SelectListItem_$('span.absol-selectlist-item-text', res);
  res.$textValue = res.$text.childNodes[0];
  res.$descCtn = SelectListItem_$('.absol-selectlist-item-desc-container', res);
  res.$desc = SelectListItem_$('span.absol-selectlist-item-desc', res.$descCtn);
  res.$descValue = res.$desc.childNodes[0];
  res._extendClasses = [];
  res._extendStyle = {};
  res._data = "";
  res._level = 0;
}

SelectListItem.render = function () {
  return SelectListItem_({
    "class": 'absol-selectlist-item',
    child: [{
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: ''
      }
    }, {
      "class": 'absol-selectlist-item-desc-container',
      child: {
        tag: 'span',
        "class": 'absol-selectlist-item-desc',
        child: {
          text: ''
        }
      }
    }]
  });
};

SelectListItem.property = {};
SelectListItem.property.extendClasses = {
  set: function set(value) {
    var i;

    for (i = 0; i < this._extendClasses.length; ++i) {
      this.removeClass(this._extendClasses[i]);
    }

    this._extendClasses = [];
    if (typeof value == 'string') value = value.trim().split(/\s+/);
    value = value || [];

    for (i = 0; i < value.length; ++i) {
      this._extendClasses.push(value[i]);

      this.addClass(value[i]);
    }
  },
  get: function get() {
    return this._extendClasses;
  }
};
SelectListItem.property.extendStyle = {
  set: function set(value) {
    this.removeStyle(this._extendStyle);
    this._extendStyle = Object.assign({}, value || {});
    this.addStyle(this._extendStyle);
  },
  get: function get() {
    return this._extendClasses;
  }
};
SelectListItem.property.data = {
  set: function set(value) {
    this._data = value;

    if (typeof value == 'string') {
      this.$textValue.data = value;
      this.$descValue.data = '';
      this.level = 0;
      this.extendClasses = '';
      this.extendStyle = {};
      this.lastInGroup = false;
      this.isLeaf = false;
      this.selected = false;
    } else {
      this.$textValue.data = value.text || '';
      this.$descValue.data = value.desc || '';
      this.level = value.level || 0;
      this.extendClasses = value.extendClasses;
      this.extendStyle = value.extendStyle;
      this.lastInGroup = !!value.lastInGroup;
      this.isLeaf = !!value.isLeaf;
      this.selected = !!value.selected;
    }
  },
  get: function get() {
    return this._data;
  }
};
SelectListItem.property.value = {
  get: function get() {
    return getValueOfListItem(this._data);
  }
};
SelectListItem.property.text = {
  get: function get() {
    return getTextOfListItem(this._data);
  }
};
SelectListItem.property.desc = {
  get: function get() {
    return getDescriptionOfListItem(this._data);
  }
};
SelectListItem.property.level = {
  set: function set(value) {
    value = value || 0;
    this._level = value;
    this.$text.addStyle('margin-left', value * 0.9 + 'em');
  },
  get: function get() {
    return this._level;
  }
};
SelectListItem.property.lastInGroup = {
  set: function set(value) {
    if (value) {
      this.addClass('as-last-in-group');
    } else {
      this.removeClass('as-last-in-group');
    }
  },
  get: function get() {
    return this.containsClass('as-last-in-group');
  }
};
SelectListItem.property.isLeaf = {
  set: function set(value) {
    if (value) {
      this.addClass('as-is-leaf');
    } else {
      this.removeClass('as-is-leaf');
    }
  },
  get: function get() {
    return this.containsClass('as-is-leaf');
  }
};
SelectListItem.property.selected = {
  set: function set(value) {
    if (value) {
      this.addClass('as-selected');
    } else {
      this.removeClass('as-selected');
    }
  },
  get: function get() {
    return this.containsClass('as-selected');
  }
};
absol_acomp_ACore.install('SelectListItem'.toLowerCase(), SelectListItem);
/* harmony default export */ const js_SelectListItem = (SelectListItem);
function getTextOfListItem(item) {
  if (item) {
    if (item.match) {} else if (item.text && item.text.match) {
      return item.text;
    } else return '';
  } else return '';
}
function getValueOfListItem(item) {
  if (item) {
    if (item.match) {
      return item;
    } else if (SelectListItem_typeof(item) === "object") return item.value;else return item;
  } else return item;
}
function getDescriptionOfListItem(item) {
  return item && SelectListItem_typeof(item) == "object" ? item.desc : undefined;
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectList.js






var SelectList_ = absol_acomp_ACore._;
var SelectList_$ = absol_acomp_ACore.$;
var isSupportedVar = window.CSS && window.CSS.supports && window.CSS.supports('--fake-var', 'red');
/**
 * Setup css
 */

if (isSupportedVar) {
  SelectList.$dynamicStyle = function () {
    var cssElt = SelectList_('style#selectlist-dynamic-style');

    var cssCode = ['.absol-selectlist-item>span {', '    margin-right: calc(0.35em + var(--select-list-desc-width));', '}', '.absol-selectlist-item-desc-container {', '    width: var(--select-list-desc-width);', '}'];
    cssElt.innerHTML = cssCode.join('\n');
    cssElt.addTo(document.head);
    return cssElt;
  }();
}

var itemPool = [];

function onMousedownItem(event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  var thisSL = this.$parent;

  if (thisSL) {
    thisSL.value = this.value;
    thisSL.emit('pressitem', {
      type: 'pressitem',
      target: thisSL,
      itemElt: this,
      value: this.value,
      data: this.data
    });
  }
}

function makeItem() {
  return SelectList_({
    tag: 'selectlistitem',
    on: {
      mousedown: onMousedownItem
    }
  });
}
function requireItem($parent) {
  var item;

  if (itemPool.length > 0) {
    item = itemPool.pop();
  } else {
    item = makeItem();
  }

  item.$parent = $parent;
  return item;
}
function releaseItem(item) {
  item.$parent = null;
  item.removeClass('selected');
  itemPool.push(item);
}
;
function SelectList_measureMaxDescriptionWidth(items) {
  var maxDescWidth = 0;
  var maxText = 0;
  var maxEst = 0;
  var est;

  for (var i = 0; i < items.length; ++i) {
    if (items[i].desc) {
      est = utils_estimateWidth14(items[i].desc);

      if (est > maxEst) {
        maxEst = est;
        maxText = items[i].desc;
      }
    }
  }

  if (maxText) maxDescWidth = utils_measureText(maxText, 'italic 14px  sans-serif').width;
  return maxDescWidth;
}
;
function measureMaxTextWidth(items) {
  var maxTextWidth = 0;
  var maxText = 0;
  var maxEst = 0;
  var maxLv = 0;
  var est;
  var text;
  var item;

  for (var i = 0; i < items.length; ++i) {
    item = items[i];

    if (item.text) {
      text = item.text;
      est = utils_estimateWidth14(text) + 14 * 0.9 * (item.level || 0);

      if (est > maxEst) {
        maxEst = est;
        maxText = text;
        maxLv = item.level || 0;
      }
    }
  }

  if (maxText) maxTextWidth = 14 * 0.9 * maxLv + utils_measureText(maxText, '14px Arial, Helvetica, sans-serif').width + 14; //padding left, right 7px

  return maxTextWidth;
}
function measureListHeight(items) {
  var border = 0;
  var n = items.length - 1;
  return items.length * 20 + border;
}
function measureListSize(items) {
  var descWidth = SelectList_measureMaxDescriptionWidth(items);
  var textWidth = measureMaxTextWidth(items);
  var width = textWidth;

  if (descWidth > 0) {
    width += descWidth + 14;
  }

  var height = measureListHeight(items);
  return {
    width: width,
    height: height,
    descWidth: descWidth,
    textWidth: textWidth
  };
}
/*global absol*/

/***
 * @extends AElement
 * @constructor
 */

function SelectList() {
  var thisSL = this;
  this.defineEvent(['pressitem', 'cancelasync', 'valuevisibilityasync', 'finishasync', 'sizechangeasync']);
  this.$attachhook = SelectList_('attachhook').addTo(this);
  this.sync = new Promise(function (rs) {
    thisSL.$attachhook.once('error', rs);
  });
  this.$items = [];
  this.$itemByValue = {}; //quick find element

  this.$selectedItem = undefined;
  this.measuredSize = {
    width: 0,
    height: 0,
    descWidth: 0,
    textWidth: 0
  };
  this._itemSession = 0;
  this._finished = true;
}

;
SelectList.tag = "SelectList".toLowerCase();

SelectList.render = function () {
  return SelectList_('.absol-selectlist');
};

SelectList.prototype._updateSelectedItem = function () {
  var newSelectedItemElt = this.$itemByValue[this._selectValue];

  if (newSelectedItemElt != this.$selectedItem) {
    if (this.$selectedItem) {
      this.$selectedItem.removeClass('selected');
    }

    if (newSelectedItemElt) {
      newSelectedItemElt.addClass('selected');
      this.$selectedItem = newSelectedItemElt;
    }
  }
};

SelectList.prototype._requireItems = function (itemCout) {
  var item;

  while (this.$items.length < itemCout) {
    item = requireItem(this);
    this.$items.push(item);
    this.addChild(item);
  }

  while (this.$items.length > itemCout) {
    item = this.$items.pop();
    item.remove();
    releaseItem(item);
  }
};

SelectList.prototype._assignItems = function (from, to) {
  var foundSelected = false;
  var itemElt;
  var item;

  for (var i = from; i < to; ++i) {
    itemElt = this.$items[i];
    item = this._items[i];
    itemElt.data = item;
    itemElt.__index__ = i;

    if (this.$itemByValue[item.value]) {
      console.warn('Value  ' + this.$items[i].value + ' is duplicated!');
    } else {
      this.$itemByValue[item.value] = itemElt;

      if (this._selectValue == item.value) {
        itemElt.addClass('selected');
        this.$selectedItem = itemElt;
        foundSelected = true;
      } else {
        itemElt.removeClass('selected');
      }
    }
  }

  return foundSelected;
};

SelectList.prototype.setItemsAsync = function (items) {
  //start process
  this._finished = false;
  var session = Math.floor(Math.random() * 1000000);
  this._itemSession = session;
  this._items = items || [];
  this.$itemByValue = {};
  this.measuredSize = measureListSize(items);
  this.style.setProperty('--select-list-desc-width', this.measuredSize.descWidth + 'px'); //addStyle notWork because of convert to cameCase 

  var thisSL = this;
  var i = 0;
  var limit = 20;

  function tick() {
    if (thisSL._itemSession != session) {
      thisSL.emit('cancelasync', {
        session: session,
        type: 'cancelasync'
      }, this);
      return;
    }

    if (i >= items.length) {
      thisSL._updateSelectedItem();

      thisSL._finished = false;
      thisSL.emit('finishasync', {
        session: session,
        type: 'finishasync'
      }, this);
      return;
    }

    var n = Math.min(items.length - i, limit);
    var itemCout = i + n;

    thisSL._requireItems(itemCout);

    i = itemCout;

    var foundSelected = thisSL._assignItems(itemCout - n, itemCout);

    if (foundSelected) {
      thisSL.emit('valuevisibilityasync', {
        session: session,
        type: 'valuevisibilityasync',
        itemElt: thisSL.$items[i]
      }, thisSL);
    }

    thisSL.emit('sizechangeasync', {
      session: session,
      type: 'sizechangeasync'
    }, this);
    setTimeout(tick, 2);
  }

  setTimeout(tick, 2);
  return Object.assign({
    session: session
  }, this.measuredSize);
};

SelectList.prototype.setItems = function (items) {
  this._finished = false;
  var session = Math.floor(Math.random() * 1000000);
  this._itemSession = session;
  this._items = items || [];
  this.$itemByValue = {};
  this.measuredSize = measureListSize(items);
  this.style.setProperty('--select-list-desc-width', this.measuredSize.descWidth + 'px'); //addStyle notWork because of convert to cameCase 

  var itemCount = items.length;

  this._requireItems(itemCount);

  this._assignItems(0, itemCount);

  this._finished = true;
  return {
    session: this._itemSession,
    width: this._descWidth + this._textWidth + 14,
    height: this._height
  };
};

SelectList.property = {};
/**
 * @type {SelectList}
 */

SelectList.property.items = {
  set: function set(value) {
    value = value || [];
    this.setItems(value);
  },
  get: function get() {
    return this._items || [];
  }
};
SelectList.property.value = {
  set: function set(value) {
    this._selectValue = value;

    this._updateSelectedItem();
  },
  get: function get() {
    return this._selectValue;
  }
};
SelectList.property.item = {
  get: function get() {
    if (this.$selectedItem) return this.$selectedItem.data;
    return undefined;
  }
};
SelectList.property.selectedIndex = {
  get: function get() {
    throw new Error("selectedIndex getter is deprecated");
  }
};

SelectList.prototype.init = function (props) {
  props = props || {};
  var value = props.value;
  delete props.value;
  this["super"](props);
  if (value !== undefined) this.value = value;
};

SelectList.eventHandler = {};
absol_acomp_ACore.install(SelectList);
/* harmony default export */ const js_SelectList = (SelectList);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickMenu.js






var QuickMenu_isMobile = Detector_BrowserDetector.isMobile;
var QuickMenu_ = absol_acomp_ACore._;
var QuickMenu_$ = absol_acomp_ACore.$;

function QuickMenu() {
  //like context menu without right-click
  this._contextMenuSync = Promise.resolve();
}

QuickMenu.tag = 'QuickMenu'.toLowerCase();

QuickMenu.render = function () {
  return QuickMenu_({
    tag: 'vmenu',
    extendEvent: 'requestcontextmenu',
    "class": ['as-quick-menu', 'as-bscroller'],
    style: {
      'overflow-y': 'auto',
      'box-sizing': 'border-box'
    }
  });
};

absol_acomp_ACore.install(QuickMenu);
QuickMenu.PRIORITY_ANCHORS = [0, 3, 7, 4, 1, 2, 6, 5];
QuickMenu.DEFAULT_ANCHOR = 0;
QuickMenu.$elt = QuickMenu_('quickmenu');
QuickMenu.$element = undefined;
QuickMenu.$anchor = QuickMenu_('.absol-context-menu-anchor.as-context-menu-ctn');
QuickMenu.$anchor.addChild(QuickMenu.$elt);
QuickMenu._acceptAnchors = 0;
QuickMenu._previewAnchor = QuickMenu.DEFAULT_ANCHOR;
QuickMenu._session = Math.random() * 10000000000 >> 0;
QuickMenu._menuListener = undefined;
QuickMenu._scrollOutListener = undefined;
QuickMenu.$elt.on('press', function (event) {
  if (QuickMenu._menuListener) QuickMenu._menuListener(cleanMenuItemProperty(event.menuItem));
});

QuickMenu.updatePosition = function () {
  if (!QuickMenu.$element) return;
  var menu = QuickMenu.$elt;
  var anchor = QuickMenu.$anchor;
  var eBound = QuickMenu.$element.getBoundingClientRect();
  var outBound = traceOutBoundingClientRect(QuickMenu.$element);

  if (eBound.bottom < outBound.top || eBound.left > outBound.right || eBound.top > outBound.bottom || eBound.right < outBound.left) {
    QuickMenu._scrollOutListener && QuickMenu._scrollOutListener();
  }

  var qBound = menu.getBoundingClientRect();
  outBound = getScreenSize();
  outBound.left = 0;
  outBound.right = outBound.width;
  outBound.top = 0;
  outBound.bottom = outBound.height; //padding

  outBound.left += 2;
  outBound.top += 2;
  outBound.bottom -= 2;
  outBound.right -= 2;
  outBound.height -= 4;
  outBound.width -= 4;

  var getPos = function getPos(anchor) {
    anchor = anchor % 8;
    var x = 0;
    var y = 0;

    if (anchor == 0 || anchor == 3) {
      y = eBound.top;
    }

    if (anchor == 0 || anchor == 7) {
      x = eBound.right;
    }

    if (anchor == 1 || anchor == 6) {
      x = eBound.left;
    }

    if (anchor == 1 || anchor == 2) {
      y = eBound.bottom;
    }

    if (anchor == 2 || anchor == 5) {
      x = eBound.right - qBound.width;
    }

    if (anchor == 3 || anchor == 4) {
      x = eBound.left - qBound.width;
    }

    if (anchor == 4 || anchor == 7) {
      y = eBound.bottom - qBound.height;
    }

    if (anchor == 5 || anchor == 6) {
      y = eBound.top - qBound.height;
    }

    return {
      x: x,
      y: y
    };
  };

  var pos;
  var bestSquare = -1;
  var bestRect;
  var priority = (typeof QuickMenu._previewAnchor === 'number' ? [QuickMenu._previewAnchor] : []).concat(QuickMenu._acceptAnchors);

  if (priority.length) {
    var cAnchor;
    var outRect = new Math_Rectangle(outBound.left, outBound.top, outBound.width, outBound.height);
    var menuRect;
    var viewSquare;
    var cPos;

    for (var i = 0; i < priority.length; ++i) {
      cAnchor = priority[i];
      cPos = getPos(cAnchor);
      menuRect = new Math_Rectangle(cPos.x, cPos.y, qBound.width, qBound.height);
      viewSquare = outRect.collapsedSquare(menuRect);

      if (viewSquare - 0.01 > bestSquare) {
        bestSquare = viewSquare;
        pos = cPos;
        QuickMenu._previewAnchor = cAnchor;
        bestRect = outRect.collapsedRect(menuRect);
      }
    }

    anchor.addStyle({
      left: pos.x + 'px',
      top: pos.y + 'px'
    });
  } else {
    anchor.removeStyle({
      left: null,
      top: null
    });
  }
};

QuickMenu._scrollEventHandler = QuickMenu.updatePosition.bind(QuickMenu);
QuickMenu.$scrollTrackElements = [];

QuickMenu.show = function (element, menuProps, anchor, menuListener, darkTheme) {
  var menuElt = QuickMenu.$elt;
  var anchorElt = QuickMenu.$anchor; //untrack all element

  QuickMenu.$scrollTrackElements.forEach(function (e) {
    if (e.removeEventListener) e.removeEventListener('scroll', QuickMenu._scrollEventHandler, false);else e.dettachEvent('onscroll', QuickMenu._scrollEventHandler, false);
  });
  QuickMenu.$scrollTrackElements = [];

  if (typeof anchor == 'number') {
    QuickMenu._acceptAnchors = [anchor];
  } else if (anchor instanceof Array) {
    QuickMenu._acceptAnchors = anchor;
  } else if (anchor === 'modal') {
    QuickMenu._acceptAnchors = [];
  } else {
    QuickMenu._acceptAnchors = QuickMenu.PRIORITY_ANCHORS;
  }

  if (anchor === 'modal') {
    QuickMenu.$anchor.addClass('as-anchor-modal');
  } else {
    QuickMenu.$anchor.removeClass('as-anchor-modal');
  }

  QuickMenu._previewAnchor = QuickMenu._acceptAnchors[0];
  QuickMenu._session = Math.random() * 10000000000 >> 0;
  QuickMenu.$anchor.addTo(document.body);
  HTML5_Dom.addToResizeSystem(QuickMenu.$elt);
  QuickMenu.$elt.updateSize = QuickMenu.updatePosition.bind(QuickMenu);
  QuickMenu.$element = element;
  QuickMenu.$element.classList.add('as-quick-menu-attached');
  QuickMenu._menuListener = menuListener;
  Object.assign(menuElt, menuProps);
  if (darkTheme) anchorElt.addClass('dark');else anchorElt.removeClass('dark');
  menuElt.addStyle('visibility', 'hidden'); //for prevent size change blink

  QuickMenu.$anchor.addClass('absol-active');
  QuickMenu.updatePosition();
  setTimeout(function () {
    menuElt.addStyle('visibility', 'visible');
  }, QuickMenu_isMobile ? 33 : 2); //track element

  var trackElt = element.parentElement;

  while (trackElt) {
    // trackElt.addEventListener('scroll', QuickMenu._scrollEventHandler, false);
    if (trackElt.addEventListener) trackElt.addEventListener('scroll', QuickMenu._scrollEventHandler, false);else trackElt.attachEvent('onscroll', QuickMenu._scrollEventHandler, false);
    QuickMenu.$scrollTrackElements.push(trackElt);
    trackElt = trackElt.parentElement;
  }

  if (document.addEventListener) {
    document.addEventListener('scroll', QuickMenu._scrollEventHandler, false);
  } else {
    document.attachEvent('onscroll', QuickMenu._scrollEventHandler, false);
  }

  QuickMenu.$scrollTrackElements.push(document);
  return QuickMenu._session;
};

QuickMenu.close = function (session) {
  if (session !== true && session !== QuickMenu._session) return;
  QuickMenu._session = Math.random() * 10000000000 >> 0;
  if (QuickMenu.$element) QuickMenu.$element.classList.remove('as-quick-menu-attached');
  QuickMenu.$element = undefined;
  QuickMenu._menuListener = undefined;
  QuickMenu._previewAnchor = QuickMenu.DEFAULT_ANCHOR; //untrack all element

  QuickMenu.$scrollTrackElements.forEach(function (e) {
    e.removeEventListener('scroll', QuickMenu._scrollEventHandler, false);
  });
  QuickMenu.$scrollTrackElements = [];
  var menuElt = QuickMenu.$elt;
  menuElt.removeStyle('visibility'); //for prevent size change blink

  menuElt.removeStyle({
    left: true,
    top: true
  });
  QuickMenu.$anchor.removeClass('absol-active');
  QuickMenu.$anchor.remove();
};

QuickMenu.showWhenClick = function (element, menuProps, anchor, menuListener, darkTheme) {
  var res = {
    menuProps: menuProps,
    anchor: anchor,
    currentSession: undefined,
    element: element,
    menuListener: menuListener,
    darkTheme: darkTheme
  };

  var clickHandler = function clickHandler() {
    if (QuickMenu._session === res.currentSession) return;
    res.currentSession = QuickMenu.show(res.element, res.menuProps, res.anchor, res.menuListener, res.darkTheme);

    var finish = function finish() {
      document.body.removeEventListener('click', finish, false);
      QuickMenu.close(res.currentSession);
      res.currentSession = undefined;
      if (QuickMenu._scrollOutListener === finish) QuickMenu._scrollOutListener = undefined;
    };

    QuickMenu._scrollOutListener = finish;
    setTimeout(function () {
      document.body.addEventListener('click', finish, false);
    }, 10);
  };

  res.remove = function () {
    element.removeEventListener('click', clickHandler, false);
    element.classList.remove('as-quick-menu-trigger');
  };

  element.addEventListener('click', clickHandler, false);
  element.classList.add('as-quick-menu-trigger');
  return res;
};
/**
 * @typedef {Object} QuickMenuAdaptor
 * @property {Function} getFlowedElement default is trigger
 * @property {Function} getMenuProps define menuProps if un-change
 * @property {Function} getAnchor default is 'auto', define anchor if un-change
 * @property {Function} onClose callback
 * @property {Function} onOpen callback
 * @property {Function} onSelect calback
 * @property {Function} isDarkTheme default is false, define darkThem if un-change
 *
 *
 * @typedef {Object} QuickMenuDataHolder
 * @property {Function} remove
 *
 * @param {Element} trigger
 * @param {QuickMenuAdaptor} adaptor
 * @returns {QuickMenuDataHolder}
 */


QuickMenu.toggleWhenClick = function (trigger, adaptor) {
  var res = {
    trigger: trigger,
    adaptor: adaptor,
    currentSession: undefined
  };

  var clickHandler = function clickHandler() {
    if (QuickMenu._session === res.currentSession) return;
    res.currentSession = QuickMenu.show(res.adaptor.getFlowedElement ? res.adaptor.getFlowedElement() : trigger, res.adaptor.getMenuProps ? res.adaptor.getMenuProps() : adaptor.menuProps || [], res.adaptor.getAnchor ? res.adaptor.getAnchor() : adaptor.anchor || 'auto', res.adaptor.onSelect, res.adaptor.isDarkTheme ? res.adaptor.isDarkTheme() : !!res.adaptor.darkTheme);
    if (res.adaptor.onOpen) res.adaptor.onOpen();

    var finish = function finish() {
      document.body.removeEventListener('click', finish, false);
      QuickMenu.close(res.currentSession);
      if (adaptor.onClose) adaptor.onClose();
      res.currentSession = undefined;
      if (QuickMenu._scrollOutListener === finish) QuickMenu._scrollOutListener = undefined;
    };

    QuickMenu._scrollOutListener = finish;
    setTimeout(function () {
      document.body.addEventListener('click', finish, false);
    }, 10);
  };

  res.remove = function () {
    trigger.removeEventListener('click', clickHandler, false);
    trigger.classList.remove('as-quick-menu-trigger');
  };

  trigger.addEventListener('click', clickHandler, false);
  trigger.classList.add('as-quick-menu-trigger');
  return res;
};

/* harmony default export */ const js_QuickMenu = (QuickMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/quickpath.css
var quickpath = __webpack_require__(3293);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickPath.js



var QuickPath_ = absol_acomp_ACore._;
var QuickPath_$ = absol_acomp_ACore.$;

function QuickPath() {
  this._holders = [];
}
/**
 * @type {QuickPath}
 */


QuickPath.eventHandler = {};

QuickPath.eventHandler.click = function (event) {
  var button = this._fileButton(event.target);

  if (button) this.pressButton(button);
};

QuickPath.tag = 'QuickPath'.toLowerCase();
/**
 * @returns {QuickPath}
 */

QuickPath.render = function () {
  return QuickPath_({
    "class": 'absol-quick-path',
    extendEvent: ['change', 'press']
  });
};

QuickPath.prototype.updatePath = function () {
  this.clearChild();
  var self = this;
  this._holders = this._path.map(function (data, index) {
    var holder = self._createButton(data, index);

    holder.buttom.addTo(self);
    return holder;
  });
};

QuickPath.prototype._createButton = function (pathItem, index) {
  var buttom = QuickPath_({
    tag: 'expnode',
    "class": 'absol-quick-path-btn',
    attr: {
      'data-index': '' + index
    }
  });

  buttom.status = 'close';
  buttom.name = pathItem.name;

  if (pathItem.icon) {
    buttom.icon = pathItem.icon;
  }

  if (pathItem.iconSrc) {
    buttom.icon = {
      tag: 'img',
      props: {
        src: pathItem.iconSrc
      }
    };
  }

  var thisQuickpath = this;

  if (pathItem.items) {
    js_QuickMenu.toggleWhenClick(buttom, {
      getAnchor: function getAnchor() {
        return [1, 2, 6, 5];
      },
      getMenuProps: function getMenuProps() {
        return {
          extendStyle: {
            fontSize: buttom.getComputedStyleValue('font-size')
          },
          items: pathItem.items.map(function (it, menuIndex) {
            var res = {
              text: it.name,
              menuIndex: menuIndex,
              icon: it.iconSrc ? {
                tag: 'img',
                props: {
                  src: it.iconSrc
                }
              } : it.icon || undefined,
              extendStyle: it.extendStyle || {},
              extendClass: it.extendClass || []
            };
            return res;
          })
        };
      },
      onOpen: function onOpen() {
        buttom.status = 'open';
        thisQuickpath.emit('press', {
          target: thisQuickpath,
          pathItem: pathItem,
          index: index
        }, thisQuickpath);
      },
      onClose: function onClose() {
        buttom.status = 'close';
      },
      onSelect: function onSelect(item) {
        var dataItem = pathItem.items[item.menuIndex];
        thisQuickpath.emit('change', {
          target: thisQuickpath,
          pathItem: pathItem,
          item: dataItem,
          index: index
        }, thisQuickpath);
        thisQuickpath.status = 'close';
      }
    });
  } else {
    buttom.on('click', function () {
      this.emit('press', {
        target: thisQuickpath,
        pathItem: pathItem,
        index: index
      }, thisQuickpath);
    });
  }

  return {
    buttom: buttom
  };
};

QuickPath.prototype.push = function (item) {
  this.path.push(item);

  var holder = this._createButton(item, this.path.length - 1);

  this.addChild(holder, buttom);

  this._holders.push(holder);
};

QuickPath.prototype.clear = function () {
  this.path = [];
  this._holders = [];
};

QuickPath.prototype.pop = function () {
  //todo
  var res = this.path.pop();
  var button = QuickPath_$('button[data-index="' + this.path.length + '"]');
  if (button) button.remove();
  return res;
};

QuickPath.property = {};
/**
 * @typedef PathElement
 * @property {String} name
 * @property {String} icon
 * @property {Array<String>} items
 *
 */

QuickPath.property.path = {
  /**
   * @param {Array<PathElement>} value
   */
  set: function set(value) {
    this._path = value || [];
    this.updatePath();
  },
  get: function get() {
    return this._path || [];
  }
};
QuickPath.property.textPath = {
  get: function get() {
    return this.path.join('/');
  }
};
absol_acomp_ACore.install('quickpath', QuickPath);
/* harmony default export */ const js_QuickPath = (QuickPath);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/radiobutton.css
var radiobutton = __webpack_require__(9429);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioButton.js





var RadioButton_ = absol_acomp_ACore._;
var RadioButton_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function RadioButton() {
  var thisRB = this;
  this.defineEvent('change');
  this.$input = RadioButton_$('input', this).on('change', this.notifyChange.bind(this));
  HTML5_OOP.drillProperty(this, this.$input, ['value', 'checked']);
}

RadioButton.tag = 'radiobutton';
RadioButton.radioProto = RadioButton_('<svg class="absol-radio-icon" width="20" height="20" version="1.1" viewBox="0 0 5.2917 5.2917"' + '   xmlns="http://www.w3.org/2000/svg">' + '    <g transform="translate(0 -291.71)">' + '        <circle class="bound" cx="2.6458" cy="294.35" r="2.4626" style="stroke-opacity:.99497;stroke-width:.26458;" />' + '        <circle class="dot" cx="2.6458" cy="294.35"  r= "0.92604" style="fill-rule:evenodd;" />' + '    </g>' + '</svg>');

RadioButton.render = function () {
  return RadioButton_({
    tag: 'label',
    "class": 'absol-radio-button',
    child: [{
      tag: 'input',
      attr: {
        type: 'radio'
      }
    }, RadioButton.radioProto.cloneNode(true)]
  });
};

RadioButton.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    checked: this.checked,
    target: this
  }, this);
};

RadioButton.prototype.getAllFriend = function () {
  return Radio.getAllByName(this.name);
};

RadioButton.attribute = {
  checked: {
    set: function set(value) {
      if (value == 'false' || value == null) {
        this.checked = false;
      } else {
        this.checked = true;
      }
    },
    get: function get() {
      return this.checked ? 'true' : 'false';
    },
    remove: function remove() {
      this.checked = false;
    }
  },
  disabled: {
    set: function set(value) {
      if (value == 'false' || value == null) {
        this.disabled = false;
      } else {
        this.disabled = true;
      }
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  },
  name: {
    set: function set(value) {
      this.name = value;
    },
    get: function get() {
      return this.name;
    },
    remove: function remove() {
      this.name = null;
    }
  }
};
RadioButton.property = {
  name: {
    set: function set(name) {
      if (name == null) this.$input.removeAttribute('name');else this.$input.setAttribute('name', name);
    },
    get: function get() {
      return this.$input.getAttribute('name');
    }
  },
  disabled: {
    set: function set(value) {
      this.$input.disabled = !!value;

      if (value) {
        this.addClass('disabled');
      } else {
        this.removeClass('disabled');
      }
    },
    get: function get() {
      return this.$input.disabled;
    }
  }
};

RadioButton.getAllByName = function (name) {
  return (document.getElementsByTagName('input') || []).filter(function (elt) {
    return elt.getAttribute('type') == 'radio' && elt.getAttribute('name') == name;
  });
};

RadioButton.getValueByName = function (name) {
  var inputs = RadioButton.getAllByName(name);
  var res = null;
  var input;

  for (var i = 0; i < inputs.length; ++i) {
    input = inputs[i];

    if (input.checked) {
      res = input.value;
    }
  }

  return res;
};

RadioButton.autoReplace = function () {
  var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag));
  var ph;
  var attOfPH;
  var attrs;
  var style;
  var classList;
  var attNode;
  var attrName, attrValue;
  var props;

  for (var i = 0; i < placeHolders.length; ++i) {
    ph = placeHolders[i];
    attOfPH = ph.attributes;
    classList = [];
    style = {};
    attrs = {};
    props = {};

    for (var j = 0; j < attOfPH.length; ++j) {
      attNode = attOfPH[j];
      attrName = attNode.nodeName;
      attrValue = attNode.nodeValue;

      if (attrName == 'style') {
        attrValue.trim().split(';').reduce(function (style, prop) {
          var p = prop.split(':');

          if (p.length == 2) {
            style[p[0].trim()] = p[1].trim();
          }

          return style;
        }, style);
      } else if (attrName == 'class') {
        classList = attrValue.trim().split(/\s+/);
      } else if (attrName == 'onchange') {
        props.onchange = new Function('event', 'sender', attrValue);
      } else {
        attrs[attrName] = attrValue;
      }
    }

    var newElt = RadioButton_({
      tag: this.tag,
      attr: attrs,
      "class": classList,
      style: style,
      props: props
    });

    RadioButton_$(ph).selfReplace(newElt);
  }
};

RadioButton.initAfterLoad = function () {
  HTML5_Dom.documentReady.then(function () {
    RadioButton.autoReplace();
  });
};

absol_acomp_ACore.install('RadioButton'.toLowerCase(), RadioButton);
/* harmony default export */ const js_RadioButton = (RadioButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/radio.css
var css_radio = __webpack_require__(8316);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Radio.js






var Radio_ = absol_acomp_ACore._;
var Radio_$ = absol_acomp_ACore.$;
var Radio_$$ = absol_acomp_ACore.$$;
var _svg = HTML5_Svg.ShareInstance._;
/***
 * @extends AElement
 * @constructor
 */

function Radio_Radio() {
  var thisR = this;
  this.defineEvent('change');
  this.$input = Radio_$('input', this).on('change', this.notifyChange.bind(this));
  this.$labels = Radio_$$('span', this);
  HTML5_OOP.drillProperty(this, this.$input, ['value', 'checked']);
}

Radio_Radio.tag = 'radio';
Radio_Radio.radioProto = Radio_('<svg class="absol-radio-icon" width="20" height="20" version="1.1" viewBox="0 0 5.2917 5.2917"' + '   xmlns="http://www.w3.org/2000/svg">' + '    <g transform="translate(0 -291.71)">' + '        <circle class="bound" cx="2.6458" cy="294.35" r="2.4626" style="stroke-opacity:.99497;stroke-width:.26458;" />' + '        <circle class="dot" cx="2.6458" cy="294.35"  r= "0.92604" style="fill-rule:evenodd;" />' + '    </g>' + '</svg>');

Radio_Radio.render = function () {
  return Radio_({
    tag: 'label',
    "class": 'absol-radio',
    child: [{
      tag: 'input',
      attr: {
        type: 'radio'
      }
    }, {
      tag: 'span',
      "class": 'absol-radio-left-label'
    }, Radio_Radio.radioProto.cloneNode(true), {
      tag: 'span',
      "class": 'absol-radio-right-label'
    }]
  });
};

Radio_Radio.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    checked: this.checked,
    target: this
  }, this);
};

Radio_Radio.prototype.getAllFriend = function () {
  return Radio_Radio.getAllByName(this.name);
};

Radio_Radio.attribute = js_RadioButton.attribute;
Radio_Radio.property = {
  name: {
    set: function set(name) {
      this.$input.setAttribute('name', name);
    },
    get: function get() {
      return this.$input.getAttribute('name');
    }
  },
  text: {
    set: function set(value) {
      value = (value || '').trim();
      this.$labels[0].clearChild();
      this.$labels[1].clearChild();

      if (value) {
        this.$labels[0].addChild(Radio_({
          text: value
        }));
        this.$labels[1].addChild(Radio_({
          text: value
        }));
      }
    },
    get: function get() {
      return this.$labels[0].firstChild.data;
    }
  },
  disabled: {
    set: function set(value) {
      this.$input.disabled = !!value;

      if (value) {
        this.addClass('disabled');
      } else {
        this.removeClass('disabled');
      }
    },
    get: function get() {
      return this.$input.disabled;
    }
  }
};

Radio_Radio.getAllByName = function (name) {
  return (Array.apply(null, document.getElementsByTagName('input')) || []).filter(function (elt) {
    return elt.getAttribute('type') == 'radio' && elt.getAttribute('name') == name;
  });
};

Radio_Radio.getValueByName = function (name) {
  var inputs = Radio_Radio.getAllByName(name);
  var res = null;
  var input;

  for (var i = 0; i < inputs.length; ++i) {
    input = inputs[i];

    if (input.checked) {
      res = input.value;
    }
  }

  return res;
};

absol_acomp_ACore.install(Radio_Radio);
/* harmony default export */ const js_Radio = (Radio_Radio);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RemoteSvg.js


var RemoteSvg_ = absol_acomp_ACore._;
var RemoteSvg_$ = absol_acomp_ACore.$;

function RemoteSvg() {}

RemoteSvg.tag = 'RemoteSvg'.toLowerCase();

RemoteSvg.render = function () {
  return RemoteSvg_('svg').defineEvent('load');
};

RemoteSvg.property = {
  src: {
    set: function set(value) {
      this._src = value;
      var self = this;
      RemoteSvg.loadIcon(value).then(function (data) {
        self.emit('load', {
          target: self,
          src: value,
          data: data
        }, self);
        self.attr(data.attr);
        self.init(data.props);
      });
    },
    get: function get() {
      return this._name;
    }
  }
};
RemoteSvg.attribute = {
  src: {
    set: function set(value) {},
    get: function get() {},
    remove: function remove() {}
  }
};
RemoteSvg.__cache__ = {};
RemoteSvg.__div_parser__ = document.createElement('div');

RemoteSvg.loadIcon = function (path) {
  if (RemoteSvg.__cache__[path]) {
    return RemoteSvg.__cache__[path];
  } else {
    RemoteSvg.__cache__[path] = Network_XHR.getRequest(path, 'text').then(function (result) {
      RemoteSvg.__div_parser__.innerHTML = result;
      var svgElt = RemoteSvg_$('svg', RemoteSvg.__div_parser__);
      var res = {
        attr: {},
        props: {}
      };

      if (svgElt) {
        Array.prototype.forEach.call(svgElt.attributes, function (attribute) {
          res.attr[attribute.name] = attribute.value;
        });
        res.props.innerHTML = svgElt.innerHTML;
      }

      return res;
    }, function () {
      return {};
    });
    return RemoteSvg.__cache__[path];
  }
};

absol_acomp_ACore.install(RemoteSvg);
/* harmony default export */ const js_RemoteSvg = (RemoteSvg);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/resizebox.css
var resizebox = __webpack_require__(4388);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ResizeBox.js



var ResizeBox_ = absol_acomp_ACore._;
var ResizeBox_$ = absol_acomp_ACore.$;

function ResizeBox() {
  this.on('mousedown', this.eventHandler.mouseDownBody);
  this._mousedownEventData = undefined;
  this._mousemoveEventData = undefined;
  this._lastClickTime = 0;
}

ResizeBox.tag = 'ResizeBox'.toLowerCase();

ResizeBox.render = function () {
  return ResizeBox_({
    "class": 'as-resize-box',
    extendEvent: ['beginmove', 'endmove', 'moving', 'click', 'dblclick'],
    //override click event
    child: {
      "class": 'as-resize-box-body',
      child: ['.as-resize-box-dot.left-top', '.as-resize-box-dot.top', '.as-resize-box-dot.right-top', '.as-resize-box-dot.right', '.as-resize-box-dot.right-bottom', '.as-resize-box-dot.bottom', '.as-resize-box-dot.left-bottom', '.as-resize-box-dot.left']
    }
  });
};

ResizeBox.eventHandler = {};

ResizeBox.eventHandler.mouseDownBody = function (event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  event.preventDefault();
  this._optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g);

  var option = this._optionNames.reduce(function (ac, key) {
    ac[key] = true;
    return ac;
  }, {});

  this._mousedownEventData = {
    clientX: event.clientX,
    clientY: event.clientY,
    target: this,
    originEvent: event,
    prevented: false,
    preventDefault: function preventDefault() {
      this.prevented = true;
    },
    option: option,
    begin: false,
    type: 'beginmove'
  };
  ResizeBox_$(document.body).on('mousemove', this.eventHandler.mouseMoveBody);
  ResizeBox_$(document.body).on('mouseup', this.eventHandler.mouseFinishBody).on('mouseleave', this.eventHandler.mouseFinishBody);
};

ResizeBox.eventHandler.mouseMoveBody = function (event) {
  if (this._mousedownEventData.option.body && !this.canMove) return;

  if (this._mousedownEventData && !this._mousedownEventData.begin && !this._mousedownEventData.prevented) {
    this.emit('beginmove', this._mousedownEventData, this);

    if (this._mousedownEventData.prevented) {
      ResizeBox_$(document.body).off('mousemove', this.eventHandler.mouseMoveBody);
    } else {
      this._mousedownEventData.begin = true;
      ResizeBox_$(document.body).addClass('as-resize-box-overiding').addClass(this._optionNames.join('-'));
    }
  }

  if (this._mousedownEventData.begin) {
    event.preventDefault();
    this._mousemoveEventData = {
      clientX: event.clientX,
      clientY: event.clientY,
      clientX0: this._mousedownEventData.clientX,
      clientY0: this._mousedownEventData.clientY,
      clientDX: event.clientX - this._mousedownEventData.clientX,
      clientDY: event.clientY - this._mousedownEventData.clientY,
      target: this,
      originEvent: event,
      option: this._mousedownEventData.option,
      type: 'moving'
    };
    this.emit('moving', this._mousemoveEventData, this);
  }
};

ResizeBox.eventHandler.mouseFinishBody = function (event) {
  ResizeBox_$(document.body).off('mousemove', this.eventHandler.mouseMoveBody).off('mouseup', this.eventHandler.mouseFinishBody).off('mouseleave', this.eventHandler.mouseFinishBody).removeClass('as-resize-box-overiding').removeClass(this._optionNames.join('-'));
  this._optionNames = undefined;

  if (this._mousedownEventData.begin) {
    this._mousefinishEventData = {
      clientX: event.clientX,
      clientY: event.clientY,
      clientX0: this._mousedownEventData.clientX,
      clientY0: this._mousedownEventData.clientY,
      clientDX: event.clientX - this._mousedownEventData.clientX,
      clientDY: event.clientY - this._mousedownEventData.clientY,
      target: this,
      originEvent: event,
      option: this._mousedownEventData.option,
      type: 'endmove'
    };
    this.emit('endmove', this._mousefinishEventData, this);
  } else {
    if (HTML5_EventEmitter.hitElement(this, event)) {
      this.emit('click', event, this);
      var now = new Date().getTime();

      if (now - this._lastClickTime < 500) {
        this.emit('dblclick', event, this);
        this._lastClickTime = 0;
      }

      this._lastClickTime = now;
    }
  }
};

ResizeBox.property = {};
ResizeBox.property.canMove = {
  set: function set(value) {
    if (value) {
      this.addClass('as-can-move');
    } else {
      this.removeClass('as-can-move');
    }
  },
  get: function get() {
    return this.containsClass('as-can-move');
  }
};
ResizeBox.property.canResize = {
  set: function set(value) {
    if (value) {
      this.addClass('as-can-resize');
    } else {
      this.removeClass('as-can-resize');
    }
  },
  get: function get() {
    return this.containsClass('as-can-resize');
  }
};
ResizeBox.property.canClick = {
  set: function set(value) {
    if (value) {
      this.addClass('as-can-click');
    } else {
      this.removeClass('as-can-click');
    }
  },
  get: function get() {
    return this.containsClass('as-can-click');
  }
};
absol_acomp_ACore.install(ResizeBox);
/* harmony default export */ const js_ResizeBox = (ResizeBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/searcher.css
var searcher = __webpack_require__(880);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Searcher.js




var Searcher_ = absol_acomp_ACore._;
var Searcher_$ = absol_acomp_ACore.$;

absol_acomp_ACore.creator["find-ico"] = function () {
  var res = Searcher_('<svg class="find" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + ' <g transform="matrix(-1 0 0 1 99.478 -193.73)">' + '  <path d="m62.128 199.18c-18.859 0-34.148 15.289-34.148 34.148 0 5.4138 1.26 10.533 3.5026 15.081 0.6886 1.3965 1.4698 2.7392 2.3357 4.02-1.9962 2.1685-31.467 31.596-31.404 33.295 0.21757 5.8346 4.9404 8.7289 9.464 7.855 1.3264-0.25627 30.938-30.639 31.774-31.529 1.3906 0.89633 2.8508 1.6948 4.3702 2.3848 4.2995 1.9526 9.0756 3.04 14.105 3.04 18.859 0 34.147-15.288 34.147-34.147 3e-6 -18.859-15.288-34.148-34.147-34.148zm0.49444 8.2454a26.067 26.067 0 0 1 26.068 26.067 26.067 26.067 0 0 1-26.068 26.068 26.067 26.067 0 0 1-26.067-26.068 26.067 26.067 0 0 1 26.067-26.067z"/>' + ' </g>' + '</svg>');

  return res;
};

absol_acomp_ACore.creator["times-circle-ico"] = function () {
  var res = Searcher_('<svg class="times" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">\
            <g transform="translate(0,-197)">\
                <path d="m49.979 236.2-14.231-14.231-10.696 10.696 14.257 14.257-14.351 14.351 10.737 10.737 14.292-14.292 14.292 14.292 10.761-10.761-14.257-14.257 14.316-14.316-10.725-10.725zm50.021 10.804a50 50 0 0 1-50 50 50 50 0 0 1-50-50 50 50 0 0 1 50-50 50 50 0 0 1 50 50z" />\
            </g>\
        </svg>');

  return res;
};
/**
 * @extends {AElement}
 * @constructor
 */


function SearchTextInput() {
  var thisSTI = this;
  this.defineEvent(['change', 'modify', 'stoptyping']);
  this.eventHandler = HTML5_OOP.bindFunctions(this, SearchTextInput.eventHandler);
  this.$button = Searcher_$('button', this);
  this.$input = Searcher_$('input', this);
  ['keyup', 'keydown', 'focus', 'blur'].forEach(function (evName) {
    thisSTI.defineEvent(evName);
    thisSTI.$input.on(evName, function (event) {
      thisSTI.emit(evName, event, thisSTI);
    });
  });
  this.$input.on('change', this.eventHandler.inputChange);
  this.$input.on('keyup', this.eventHandler.inputKeyUp);
  this.$button.on('click', function (event) {
    thisSTI.$input.value = '';
    thisSTI.eventHandler.inputKeyUp(event);
    setTimeout(function () {
      thisSTI.focus();
    }, 50);
  });
}

SearchTextInput.tag = 'SearchTextInput'.toLowerCase();

SearchTextInput.render = function () {
  return Searcher_({
    "class": 'absol-search-text-input',
    child: [{
      "class": 'absol-search-text-input-container',
      child: {
        tag: 'input',
        attr: {
          type: 'search',
          placeholder: 'search...'
        }
      }
    }, {
      "class": 'absol-search-text-button-container',
      child: {
        tag: 'button',
        child: ['find-ico', 'times-circle-ico']
      }
    }]
  });
};

SearchTextInput.property = {
  value: {
    set: function set(value) {
      value = value || '';
      this.$input.value = value;
      this._lastTextModified = value;

      if (this.value.length > 0) {
        this.addClass('searching');
      } else {
        this.removeClass('searching');
      }
    },
    get: function get() {
      return this.$input.value;
    }
  },
  placeholder: {
    set: function set(value) {
      this.$input.attr('placeholder', value);
    },
    get: function get() {
      return this.$placeholder.getAttribute('placeholder');
    }
  }
};

SearchTextInput.prototype.focus = function () {
  this.$input.focus();
};

SearchTextInput.prototype.blur = function () {
  this.$input.blur();
};

SearchTextInput.eventHandler = {};

SearchTextInput.eventHandler.inputChange = function (event) {
  event.value = this.value;

  if (typeof this.onchange == 'function') {
    this.onchange(event, this);
  }

  this.emit('change', event);
};

SearchTextInput.eventHandler.inputKeyUp = function (event) {
  if (this._lastTextModified != this.value) {
    if (this.value.length > 0) {
      this.addClass('searching');
    } else {
      this.removeClass('searching');
    }

    event.value = this.value;

    if (typeof this.onchange == 'function') {
      this.onchange(event, this);
    }

    this.emit('modify', event);

    if (this._updateTimeOut !== undefined) {
      clearTimeout(this._updateTimeOut);
      this._updateTimeOut = undefined;
    }

    this._updateTimeOut = setTimeout(function () {
      this.emit('stoptyping', event);
    }.bind(this), 500);
    this._lastTextModified = this.value;
  }
};

absol_acomp_ACore.creator.searchcrosstextinput = function () {
  var res = Searcher_('searchtextinput', true);

  return res;
};

absol_acomp_ACore.creator.searchtextinput = SearchTextInput;
/* harmony default export */ const Searcher = (SearchTextInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectbox.css
var selectbox = __webpack_require__(5370);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectmenu.css
var selectmenu = __webpack_require__(571);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlistbox.css
var selectlistbox = __webpack_require__(5929);
;// CONCATENATED MODULE: ./node_modules/absol/src/String/stringMatching.js
/**
 *
 * @param {String} a
 * @param {String} b
 */

function wordLike(a, b) {
  var m = a.length;
  var n = b.length;

  function map(i, j) {
    return i * (n + 1) + j;
  }

  var Q = Array((m + 1) * (n + 1)).fill(0);

  for (var i = 0; i < m; ++i) {
    for (var j = 0; j < n; ++j) {
      if (a.charAt(i) == b.charAt(j)) {
        if (Q[map(i + 1, j + 1)]) {
          if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + 1) Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1;
        } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1;
      } else Q[map(i + 1, j + 1)] = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]);
    }
  }

  return Q[map(m, n)] / harmonicMean(m, n);
}
/**
 *
 * @param {Array<String>} sq1
 * @param {Array<String>} sq2
 */

function wordsMatch(sq1, sq2, matchWordPow) {
  matchWordPow = matchWordPow === undefined ? 1 : matchWordPow;
  var m = sq1.length;
  var n = sq2.length;

  function map(i, j) {
    return i * (n + 1) + j;
  }

  var Q = Array((m + 1) * (n + 1)).fill(0);
  var e = 0.0;

  for (var i = 0; i < m; ++i) {
    for (var j = 0; j < n; ++j) {
      e = Math.pow(wordLike(sq1[i], sq2[j]), matchWordPow);

      if (Q[map(i + 1, j + 1)]) {
        if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + e) Q[map(i + 1, j + 1)] = Q[map(i, j)] + e;
      } else Q[map(i + 1, j + 1)] = Q[map(i, j)] + e;

      e = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]);
      if (e > Q[map(i + 1, j + 1)]) Q[map(i + 1, j + 1)] = e;
    }
  }

  return Q[map(m, n)];
}
function phraseMatch(a, b, matchWordPow) {
  matchWordPow = matchWordPow || 1;
  var spliter = /[\s,-\.+?\_]+/;

  var notEmp = function notEmp(e) {
    return e.length > 0;
  };

  var sq1 = a.toLowerCase().split(spliter).filter(notEmp);
  var sq2 = b.toLowerCase().split(spliter).filter(notEmp);
  var wordsMatchScore = wordsMatch(sq1, sq2);
  var m = sq1.length;
  var n = sq2.length;
  return wordsMatchScore / Math.max(harmonicMean(m, n), 1);
}
;
function phraseLike(a, b, matchWordPow) {
  matchWordPow = matchWordPow || 1;
  var spliter = /[\s,-\.+?\_]+/;

  var notEmp = function notEmp(e) {
    return e.length > 0;
  };

  var sq1 = a.toLowerCase().split(spliter).filter(notEmp);
  var sq2 = b.toLowerCase().split(spliter).filter(notEmp);
  var m = sq1.length;
  var n = sq2.length;
  var wordsMatchScore = wordsMatch(sq1, sq2);
  return wordsMatchScore / Math.max(harmonicMean(m, n), 1);
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/search.js


var EXTRA_MATCH_SCORE = 7;
var UNCASE_MATCH_SCORE = 4;
var UVN_MATCH_SCORE = 3;
var EQUAL_MATCH_SCORE = 4;
var WORD_MATCH_SCORE = 3;
/***
 *
 * @param {SelectionItem} item
 * @returns {*}
 */

function prepareSearchForItem(item) {
  if (!item.text || !item.text.charAt) item.text = item.text + '';
  var spliter = /\s+/;

  var __text__ = item.text.replace(/([\s\b\-()\[\]]|&#8239;|&nbsp;|&#xA0;|\s)+/g, ' ').trim();

  var __textNoneCase__ = __text__.toLowerCase();

  var __nvnText__ = nonAccentVietnamese(__text__);

  var __nvnTextNoneCase__ = __nvnText__.toLowerCase();

  Object.defineProperties(item, {
    __text__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __text__
    },
    __words__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __text__.split(spliter)
    },
    __textNoneCase__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __textNoneCase__
    },
    __wordsNoneCase__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __textNoneCase__.split(spliter)
    },
    __nvnText__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __nvnText__
    },
    __nvnWords__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __nvnText__.split(spliter)
    },
    __nvnTextNoneCase__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __nvnTextNoneCase__
    },
    __nvnWordsNoneCase__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __nvnTextNoneCase__.split(spliter)
    }
  });
  return item;
}
function prepareSearchForList(items) {
  var item;

  for (var i = 0; i < items.length; ++i) {
    if (typeof items[i] == 'string') {
      items[i] = {
        text: items[i],
        value: items[i]
      };
    }

    item = items[i];
    prepareSearchForItem(item);
    if (item.items) prepareSearchForList(item.items);
  }

  return items;
}
function calcItemMatchScore(queryItem, item) {
  var score = 0;
  if (item.__text__ == queryItem.__text__) score += EQUAL_MATCH_SCORE * queryItem.__text__.length;

  var extraIndex = item.__text__.indexOf(queryItem.__text__);

  if (extraIndex >= 0) {
    score += EXTRA_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
  }

  extraIndex = item.__textNoneCase__.indexOf(queryItem.__textNoneCase__);

  if (extraIndex >= 0) {
    score += UNCASE_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
  }

  extraIndex = item.__nvnTextNoneCase__.indexOf(queryItem.__nvnTextNoneCase__);

  if (extraIndex >= 0) {
    score += UNCASE_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
  }

  score += wordsMatch(queryItem.__nvnWordsNoneCase__, item.__nvnWordsNoneCase__) / (queryItem.__nvnWordsNoneCase__.length + 1 + item.__nvnWordsNoneCase__.length) * 2 * WORD_MATCH_SCORE;
  score += wordsMatch(queryItem.__wordsNoneCase__, item.__wordsNoneCase__) / (queryItem.__wordsNoneCase__.length + 1 + item.__wordsNoneCase__.length) * 2 * WORD_MATCH_SCORE;
  return score;
}
/***
 *
 * @param  {String} query
 * @param {Array<SelectionItem>} items
 */

function searchListByText(query, items) {
  query = (query || '').trim();
  if (query.length == 0 || items.length == 0) return items;
  var queryItem = prepareSearchForItem({
    text: query
  });
  var its = items.map(function (item) {
    return {
      item: item,
      score: calcItemMatchScore(queryItem, item)
    };
  });
  its.sort(function (a, b) {
    if (b.score - a.score == 0) {
      if (b.item.__nvnText__ > a.item.__nvnText__) return -1;
      return 1;
    }

    return b.score - a.score;
  });
  var midValue = (its[0].score + its[its.length - 1].score) / 2;
  if (midValue === 0) midValue += 0.1;
  if (midValue < 1) midValue = 1;
  return its.filter(function (it) {
    return it.score >= midValue;
  }).map(function (it) {
    return it.item;
  });
}
/***
 *
 * @param  {String} query
 * @param {Array<SelectionItem>} items
 */

function searchTreeListByText(query, items) {
  query = (query || '').trim();
  if (query.length == 0 || items.length == 0) return items;
  var queryItem = prepareSearchForItem({
    text: query
  });
  var gmaxScore = 0;
  var gminScore = 1000;

  function makeScoreRecursive(item) {
    var score = calcItemMatchScore(queryItem, item);
    gmaxScore = Math.max(score, gmaxScore);
    gminScore = Math.min(score, gminScore);
    var children = (item.items || []).map(function (item) {
      return makeScoreRecursive(item);
    });
    var maxScore = children.reduce(function (ac, cr) {
      return Math.max(ac, cr.maxScore);
    }, score);
    return {
      score: score,
      maxScore: maxScore,
      item: item,
      children: children
    };
  }

  function sortcmp(a, b) {
    return b.maxScore - a.maxScore;
  }

  function filterItems(nodes, medScore) {
    nodes.sort(sortcmp);
    return nodes.filter(function (node) {
      return node.maxScore >= medScore;
    }).map(function (node) {
      var res;

      if (typeof node.item == 'string') {
        res = node.item;
      } else {
        res = Object.assign({}, node.item);
        res.ref = node.item;

        if (node.children && node.children.length > 0) {
          res.items = filterItems(node.children, medScore);
          if (res.items.length == 0) delete res.items;
        }
      }

      return res;
    });
  }

  var scoredItems = items.map(makeScoreRecursive);
  var medianScore = (gminScore + gmaxScore) / 2;
  var items = filterItems(scoredItems, medianScore);
  return items;
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/listIndexing.js
function depthIndexingByValue(items, context) {
  context = context || {
    idx: 0,
    dict: {}
  };
  return items.reduce(function (ac, cr, idx) {
    var value = typeof cr === "string" ? cr : cr.value + '';
    ac[value] = ac[value] || [];
    ac[value].push({
      idx: context.idx++,
      item: cr
    });

    if (cr && cr.items && cr.items.length > 0) {
      depthIndexingByValue(cr.items, context);
    }

    return ac;
  }, context.dict);
}
function indexingByValue(items, dict) {
  return items.reduce(function (ac, cr, idx) {
    var value = typeof cr === "string" ? cr : cr.value + '';
    ac[value] = ac[value] || [];
    ac[value].push({
      idx: idx,
      item: cr
    });
    return ac;
  }, dict || {});
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectListBox.js








var SelectListBox_ = absol_acomp_ACore._;
var SelectListBox_$ = absol_acomp_ACore.$;
var SelectListBox_$$ = absol_acomp_ACore.$$;
var VALUE_HIDDEN = -1;
var VALUE_NORMAL = 1;
/***
 * @extends Follower
 * @constructor
 */

function SelectListBox() {
  this._initDomHook();

  this._initControl();

  this._initScroller();

  this._initProperty();
}

SelectListBox.tag = 'SelectListBox'.toLowerCase();

SelectListBox.render = function () {
  return SelectListBox_({
    tag: 'follower',
    attr: {
      tabindex: 0
    },
    "class": 'as-select-list-box',
    extendEvent: ['pressitem'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, {
      "class": ['as-bscroller', 'as-select-list-box-scroller'],
      child: [{
        "class": ['as-select-list-box-content'],
        child: Array(SelectListBox.prototype.preLoadN).fill('.as-select-list-box-page')
      }]
    }, 'attachhook.as-dom-signal']
  });
};

SelectListBox.prototype.toLoadNextY = 200;
SelectListBox.prototype.preLoadN = 3;
SelectListBox.prototype.itemHeight = 20;

SelectListBox.prototype._initDomHook = function () {
  this.$domSignal = SelectListBox_$('attachhook.as-dom-signal', this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('viewListAt', this.viewListAt.bind(this));
  this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this));
  this.domSignal.on('viewListAtCurrentScrollTop', this.viewListAtCurrentScrollTop.bind(this));
};

SelectListBox.prototype._initControl = function () {
  this._currentOffset = 0;
  this._startItemIdx = 0;
  this.$searchInput = SelectListBox_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
};

SelectListBox.prototype._initScroller = function () {
  this.$content = SelectListBox_$('.as-select-list-box-content', this);
  this._estimateHeight = 0;
  this._pageOffsets = Array(this.preLoadN + 1).fill(0);
  this.$listPages = SelectListBox_$$('.as-select-list-box-page', this);
  this.$listScroller = SelectListBox_$('.as-select-list-box-scroller', this).on('scroll', this.eventHandler.scroll);
};

SelectListBox.prototype._initProperty = function () {
  /***
   *   items  =(search, filler)=> filteredItems =(list to list, tree to list)=>  preDisplayItems =(remove hidden item)=> displayItem
   *
   */
  this._items = [];
  this._itemNodeList = []; // use for tree

  this._values = [];
  this._valueDict = {};
  this._itemNodeHolderByValue = {}; // this._filteredItems = [];// not need , only use when search

  this._preDisplayItems = [];
  this._displayItems = [];
  this._searchCache = {};
  this._displayValue = VALUE_NORMAL;
  this.displayValue = VALUE_NORMAL;
  this.items = [];
};

SelectListBox.prototype._requireItem = function (pageElt, n) {
  var itemElt;

  while (pageElt.childNodes.length > n) {
    itemElt = pageElt.lastChild;
    itemElt.selfRemove();
    releaseItem(itemElt);
  }

  while (pageElt.childNodes.length < n) {
    itemElt = requireItem(this);
    pageElt.addChild(itemElt);
  }
};

SelectListBox.prototype._assignItems = function (pageElt, offset) {
  var n = Math.min(this._displayItems.length - offset, pageElt.childNodes.length);
  var itemElt, value;

  for (var i = 0; i < n; ++i) {
    itemElt = pageElt.childNodes[i];
    itemElt.data = this._displayItems[offset + i];
    value = itemElt.value + '';
  }
};

SelectListBox.prototype._itemsToNodeList = function (items) {
  return items;
};
/***
 *
 * @param {Array<{value:String|Number}>} items
 * @return {Array<{value:String|Number}>}
 */


SelectListBox.prototype._filterDisplayItems = function (items) {
  if (this._displayValue === VALUE_NORMAL) return items;
  var dict = this._valueDict;
  return items.filter(function (item) {
    return !dict[item.value + ''];
  });
};

SelectListBox.prototype._updateSelectedItem = function () {
  var valueDict = this._valueDict;
  this.$listPages.forEach(function (pageElt) {
    Array.prototype.forEach.call(pageElt.childNodes, function (itemElt) {
      var value = itemElt.value + '';

      if (valueDict[value]) {
        itemElt.selected = true;
      } else {
        itemElt.selected = false;
      }
    });
  });
};
/***
 *
 * @param {number} offset
 */


SelectListBox.prototype.viewListAt = function (offset) {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAt', offset);
    return;
  }

  var fontSize = this.$listScroller.getFontSize() || 14;
  offset = Math.max(0, Math.min(offset, this._displayItems.length - 1));
  var screenSize = getScreenSize();
  var maxItem = Math.ceil(Math.max(window.screen.height, screenSize.height) / this.itemHeight);
  var contentBound = this.$content.getBoundingClientRect();
  this._pageOffsets[0] = Math.max(offset - maxItem, 0);

  for (var i = 1; i <= this.preLoadN; ++i) {
    this._pageOffsets[i] = Math.min(this._pageOffsets[i - 1] + maxItem, this._displayItems.length);
  }

  var sIdx, nItem, pageBound;
  var pageElt;

  for (var pageIndex = 0; pageIndex < this.preLoadN; ++pageIndex) {
    sIdx = this._pageOffsets[pageIndex];
    nItem = this._pageOffsets[pageIndex + 1] - sIdx;
    pageElt = this.$listPages[pageIndex];
    pageElt.addStyle('top', this._pageOffsets[pageIndex] * this.itemHeight + 'px');

    this._requireItem(pageElt, nItem);

    this._assignItems(pageElt, sIdx);

    pageBound = pageElt.getBoundingClientRect();
  }

  this._updateSelectedItem();
};

SelectListBox.prototype.viewListAtFirstSelected = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAtFirstSelected');
    return;
  }

  if (this._displayValue == VALUE_HIDDEN) {
    return false;
  } else if (this._values.length > 0) {
    var value = this._values[0];
    var itemHolders = this._displayItemHolderByValue[value + ''];

    if (itemHolders) {
      this.domSignal.once('scrollIntoSelected', function () {
        var holder = itemHolders[0];
        this.viewListAt(holder.idx);
        var itemElt = SelectListBox_$('.as-selected', this.$listScroller);

        if (itemElt) {
          var scrollBound = this.$listScroller.getBoundingClientRect();
          var itemBound = itemElt.getBoundingClientRect();
          this.$listScroller.scrollTop += itemBound.top - scrollBound.top;
        }
      }.bind(this));
      this.domSignal.emit('scrollIntoSelected');
      return true;
    } else return false;
  } else return false;
};

SelectListBox.prototype.viewListAtCurrentScrollTop = function () {
  if (!this.isDescendantOf(document.body)) {
    this.emit('viewListAtCurrentScrollTop');
    return;
  }

  this.viewListAt(Math.floor(this.$listScroller.scrollTop / this.itemHeight));
};

SelectListBox.prototype.searchItemByText = function (text) {
  text = text.trim();
  if (text.length == 0) return this._items;
  if (this._searchCache[text]) return this._searchCache[text];
  this._searchCache[text] = searchListByText(text, this._items);
  return this._searchCache[text];
};

SelectListBox.prototype.resetSearchState = function () {
  this.$searchInput.value = '';
  this._preDisplayItems = this._itemsToNodeList(this._items);

  this._updateDisplayItem();

  this.domSignal.emit('viewListAt', 0);
  this.$listScroller.scrollTop = 0;
};

SelectListBox.prototype.notifyPressOut = function () {
  this.emit('pressout', {
    target: this,
    type: 'pressout'
  }, this);
};

SelectListBox.prototype.notifyPressClose = function () {
  this.emit('pressclose', {
    target: this,
    type: 'pressclose'
  }, this);
};

SelectListBox.prototype._findFirstPageIdx = function () {
  for (var i = 0; i < this.preLoadN; ++i) {
    if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) {
      return i;
    }
  }

  return -1;
};

SelectListBox.prototype._findLastPageIdx = function () {
  for (var i = this.preLoadN - 1; i >= 0; --i) {
    if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) {
      return i;
    }
  }

  return -1;
};

SelectListBox.prototype._updateDisplayItemIndex = function () {
  this._displayItemHolderByValue = indexingByValue(this._displayItems, {});
};

SelectListBox.prototype._updateItemNodeIndex = function () {
  this._itemNodeHolderByValue = depthIndexingByValue(this._items);
};

SelectListBox.prototype._updateDisplayItem = function () {
  this._displayItems = this._filterDisplayItems(this._preDisplayItems);

  this._updateDisplayItemIndex();

  this.$content.addStyle({
    'height': this._displayItems.length * this.itemHeight + 'px'
  });
};

SelectListBox.prototype.footerMinWidth = 0;

SelectListBox.prototype._updateItems = function () {
  this._preDisplayItems = this._itemsToNodeList(this._items);
  this._searchCache = {};
  var estimateSize = measureListSize(this._itemNodeList);
  this._estimateSize = estimateSize;
  this._estimateWidth = estimateSize.width;
  this._estimateDescWidth = estimateSize.descWidth;
  this.addStyle('--select-list-estimate-width', Math.max(this.footerMinWidth, estimateSize.width) + 'px');
  this.addStyle('--select-list-desc-width', estimateSize.descWidth + 'px');

  this._updateDisplayItem();
};
/***
 *
 * @param value
 * @returns {{idx: number, item:{text:string, value:number|string}}[]}
 */


SelectListBox.prototype.findDisplayItemsByValue = function (value) {
  return (this._displayItemHolderByValue[value] || []).slice();
};
/***
 *
 * @param value
 * @returns {{idx: number, item:{text:string, value:number|string}}[]}
 */


SelectListBox.prototype.findItemsByValue = function (value) {
  return (this._itemNodeHolderByValue[value] || []).slice();
};

SelectListBox.property = {};
/***
 *
 * @type {SelectListBox|{}}
 */

SelectListBox.property.items = {
  set: function set(items) {
    items = items || [];
    prepareSearchForList(items);
    this._items = items;
    this._itemNodeList = this._itemsToNodeList(this._items);

    this._updateItemNodeIndex();

    this._updateItems();

    this.viewListAt(0);
  },
  get: function get() {
    return this._items;
  }
};
SelectListBox.property.values = {
  set: function set(values) {
    values = values || [];
    values = values.slice();
    this._values = values;
    this._valueDict = values.reduce(function (ac, cr) {
      ac[cr + ''] = true;
      return ac;
    }, {});

    this._updateDisplayItem();

    this.viewListAtCurrentScrollTop(); //todo

    if (this._pageOffsets[this.preLoadN] > this._pageOffsets[0]) this._updateSelectedItem();
  },
  get: function get() {
    return this._values;
  }
};
SelectListBox.property.displayValue = {
  set: function set(value) {
    this._displayValue = value;
    this._displayItems = this._filterDisplayItems(this._preDisplayItems);

    this._updateItemNodeIndex();

    if (value === VALUE_HIDDEN) {
      this.addClass('as-value-hidden');
    } else {
      this.removeClass('as-value-hidden');
    }
  },
  get: function get() {
    return this._displayValue;
  }
};
SelectListBox.property.enableSearch = {
  set: function set(value) {
    if (value) this.addClass('as-enable-search');else this.removeClass('as-enable-search');
  },
  get: function get() {
    return this.containsClass('as-enable-search');
  }
};
/***
 *
 * @type {SelectListBox|{}}
 */

SelectListBox.eventHandler = {};
/*
*
* @param {MouseEvent} event
*/

SelectListBox.eventHandler.click = function (event) {
  if (event.target === this) this.notifyPressOut();
};

SelectListBox.eventHandler.searchModify = function () {
  var text = this.$searchInput.value;
  var searchedItems = this.searchItemByText(text);
  this._preDisplayItems = this._itemsToNodeList(searchedItems);
  this._displayItems = this._filterDisplayItems(this._preDisplayItems);
  this.$content.addStyle({
    'height': this._displayItems.length * this.itemHeight + 'px'
  });

  this._updateItemNodeIndex();

  this.viewListAt(0);
  this.$listScroller.scrollTop = 0;
  this.updatePosition();
};

SelectListBox.eventHandler.scroll = function () {
  var scrollerBound = this.$listScroller.getBoundingClientRect();

  var topIdx = this._findFirstPageIdx();

  var screenSize = getScreenSize();
  var maxItem = Math.ceil(Math.max(window.screen.height, screenSize.height) / this.itemHeight);
  var topBound = this.$listPages[topIdx].getBoundingClientRect();

  var botIdx = this._findLastPageIdx();

  var botBound;
  botBound = this.$listPages[botIdx].getBoundingClientRect();

  if (topBound.top > scrollerBound.top || topBound.bottom < scrollerBound.bottom) {
    this.viewListAt(Math.floor(this.$listScroller.scrollTop / this.itemHeight));
    return;
  }

  if (this._pageOffsets[topIdx] > 0) {
    if (topBound.top + this.toLoadNextY > scrollerBound.top) {
      this._pageOffsets.unshift(this._pageOffsets.pop());

      this.$listPages.unshift(this.$listPages.pop());
      this._pageOffsets[topIdx] = Math.max(0, this._pageOffsets[topIdx + 1] - maxItem);

      this._requireItem(this.$listPages[topIdx], this._pageOffsets[topIdx + 1] - this._pageOffsets[topIdx]);

      this._assignItems(this.$listPages[topIdx], this._pageOffsets[topIdx]);

      this._updateSelectedItem();

      this.$listPages[topIdx].addStyle('top', this._pageOffsets[topIdx] * this.itemHeight + 'px');
    }
  }

  if (this._pageOffsets[botIdx + 1] < this._displayItems.length) {
    if (botBound.bottom - this.toLoadNextY < scrollerBound.bottom) {
      this._pageOffsets.push(this._pageOffsets.shift());

      this.$listPages.push(this.$listPages.shift());
      this._pageOffsets[botIdx + 1] = Math.min(this._displayItems.length, this._pageOffsets[botIdx] + maxItem);
      this.$listPages[botIdx].addStyle('top', this._pageOffsets[botIdx] * this.itemHeight + 'px');

      this._requireItem(this.$listPages[botIdx], this._pageOffsets[botIdx + 1] - this._pageOffsets[botIdx]);

      this._assignItems(this.$listPages[botIdx], this._pageOffsets[botIdx]);

      this._updateSelectedItem();
    }
  }
};

absol_acomp_ACore.install(SelectListBox);
/* harmony default export */ const js_SelectListBox = (SelectListBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu2.js







/*global absol*/

var SelectMenu2_ = absol_acomp_ACore._;
var SelectMenu2_$ = absol_acomp_ACore.$;

absol_acomp_ACore.creator["dropdown-ico"] = function () {
  return SelectMenu2_(['<svg class="dropdown" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', '<g transform="translate(0,-197)">', '<path d="m6.3152 218.09a4.5283 4.5283 0 0 0-3.5673 7.3141l43.361 55.641a4.5283 4.5283 0 0 0 7.1421 7e-3l43.496-55.641a4.5283 4.5283 0 0 0-3.5673-7.3216z" />', '</g>', '</svg>'].join(''));
};
/***
 * @extends AElement
 * @constructor
 */


function SelectMenu() {
  var thisSM = this;
  this._items = [];
  this._value = null;
  this._lastValue = null;
  this.$holderItem = SelectMenu2_$('.absol-selectmenu-holder-item', this);
  this.$viewItem = SelectMenu2_$('.absol-selectmenu-holder-item selectlistitem', this);
  /***
   *
   * @type {SelectListBox}
   */

  this.$selectlistBox = SelectMenu2_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem);
  this.$selectlistBox.followTarget = this;
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  this._lastValue = "NOTHING_VALUE";
  this._isFocus = false;
  this.isFocus = false;
  this.on('mousedown', this.eventHandler.click, true);
}

SelectMenu.tag = 'selectmenu';

SelectMenu.render = function () {
  return SelectMenu2_({
    "class": ['absol-selectmenu', 'as-select-menu'],
    extendEvent: ['change'],
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": 'absol-selectmenu-holder-item',
      child: 'selectlistitem'
    }, {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }]
  });
};

SelectMenu.prototype.init = function (props) {
  props = props || {};
  Object.keys(props).forEach(function (key) {
    if (props[key] === undefined) delete props[key];
  });

  if (!('value' in props)) {
    if (props.items && props.items.length > 0) props.value = typeof props.items[0] == 'string' ? props.items[0] : props.items[0].value;
  }

  var value = props.value;
  delete props.value;
  this["super"](props);
  this.value = value;
};

SelectMenu.prototype.updateItem = function () {
  var selectedItems = this.$selectlistBox.findDisplayItemsByValue(this._value);

  if (selectedItems.length >= 1) {
    this.$viewItem.data = selectedItems[0].item;
  } else {
    this.$viewItem.data = {
      text: '',
      value: null
    };
  }
};

SelectMenu.prototype.findItemsByValue = function (value) {
  return this.$selectlistBox.findItemsByValue(value);
};

SelectMenu.property = {};
SelectMenu.property.items = {
  set: function set(items) {
    this.$selectlistBox.items = items || [];
    this.addStyle('--select-list-estimate-width', this.$selectlistBox._estimateWidth + 'px');
    this.addStyle('--select-list-desc-width', this.$selectlistBox._estimateDescWidth + 'px');
    if (items.length == 0) return;
    var selectedItems = this.$selectlistBox.findDisplayItemsByValue(this._value);

    if (selectedItems.length === 0) {
      this.value = items[0].value;
    } else if (selectedItems.length > 1) {
      console.warn(this, 'has duplicate item value');
    } else {
      this.updateItem();
    }
  },
  get: function get() {
    return this.$selectlistBox.items;
  }
};
SelectMenu.property.value = {
  set: function set(value) {
    this.$selectlistBox.values = [value];
    this._lastValue = value;
    this._value = value;
    this.updateItem();
  },
  get: function get() {
    return this._value; //todo
  }
};
/***
 *
 * @type {SelectMenu|{}}
 */

SelectMenu.property.isFocus = {
  set: function set(value) {
    var thisSM = this;
    if (!this.items || this.items.length === 0) value = false; //prevent focus

    if (this._isFocus === value) return;
    this._isFocus = !!value;

    if (this._isFocus) {
      document.body.appendChild(this.$selectlistBox);
      this.$selectlistBox.domSignal.$attachhook.emit('attached');
      var bound = this.getBoundingClientRect();
      this.$selectlistBox.addStyle('min-width', bound.width + 'px');
      this.$selectlistBox.refollow();
      this.$selectlistBox.updatePosition();
      setTimeout(function () {
        if (thisSM.enableSearch) {
          thisSM.$selectlistBox.$searchInput.focus();
        } else {
          thisSM.$selectlistBox.focus();
        }

        SelectMenu2_$(document.body).on('click', thisSM.eventHandler.bodyClick);
      }, 100);
      this.$selectlistBox.viewListAtFirstSelected();
    } else {
      SelectMenu2_$(document.body).off('click', thisSM.eventHandler.bodyClick);
      this.$selectlistBox.selfRemove();
      this.$selectlistBox.unfollow();
      this.$selectlistBox.resetSearchState();
    }
  },
  get: function get() {
    return this._isFocus;
  }
};
SelectMenu.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.containsClass('as-disabled');
  }
};
SelectMenu.property.hidden = {
  set: function set(value) {
    if (value) {
      this.addClass('as-hidden');
    } else {
      this.removeClass('as-hidden');
    }
  },
  get: function get() {
    return this.addClass('as-hidden');
  }
};
SelectMenu.property.selectedIndex = {
  get: function get() {
    var selectedItems = this.$selectlistBox.findItemsByValue(this._value);

    if (selectedItems.length > 0) {
      return selectedItems[0].idx;
    }

    return -1;
  }
};
/**
 * @type {SelectMenu|{}}
 */

SelectMenu.eventHandler = {};

SelectMenu.eventHandler.click = function (event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  if (HTML5_EventEmitter.hitElement(this.$selectlistBox, event)) return;
  this.isFocus = !this.isFocus;
};

SelectMenu.eventHandler.bodyClick = function (event) {
  if (!HTML5_EventEmitter.hitElement(this, event) && !HTML5_EventEmitter.hitElement(this.$selectlistBox, event)) {
    setTimeout(function () {
      this.isFocus = false;
    }.bind(this), 5);
  }
};

SelectMenu.eventHandler.selectListBoxPressItem = function (event) {
  this._value = event.data.value;
  this.$selectlistBox.values = [this._value];
  this.updateItem();

  if (this._lastValue !== this.value) {
    event.lastValue = this._lastValue;
    event.value = this.value;
    setTimeout(function () {
      this.emit('change', event, this);
    }.bind(this), 1);
    this._lastValue = this.value;
  }

  setTimeout(function () {
    this.isFocus = false;
  }.bind(this), 50);
};

SelectMenu.eventHandler.preUpdateListPosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
  var outBound = traceOutBoundingClientRect(this);

  if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
    this.isFocus = false;
  }
};

absol_acomp_ACore.install(SelectMenu);
/* harmony default export */ const SelectMenu2 = (SelectMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBoxItem.js




var SelectBoxItem_ = absol_acomp_ACore._;
var SelectBoxItem_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function SelectBoxItem() {
  this._themeClassName = null;
  this.$text = SelectBoxItem_$('.absol-selectbox-item-text', this);
  this.$close = SelectBoxItem_$('.absol-selectbox-item-close', this);
  this.$close.on('click', this.eventHandler.clickClose);
  this.on('click', this.eventHandler.click);
}

;
SelectBoxItem.tag = 'SelectBoxItem'.toLowerCase();

SelectBoxItem.render = function () {
  return SelectBoxItem_({
    "class": ['absol-selectbox-item'],
    extendEvent: ['close', 'press'],
    child: ['.absol-selectbox-item-text', {
      "class": 'absol-selectbox-item-close',
      child: '<span class="mdi mdi-close"></span>'
    }]
  });
};

SelectBoxItem.eventHandler = {};

SelectBoxItem.eventHandler.clickClose = function (event) {
  this.emit('close', event);
};

SelectBoxItem.eventHandler.click = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$close, event)) {
    this.emit('press', event, this);
  }
};

SelectBoxItem.property = {};
SelectBoxItem.property.data = {
  set: function set(value) {
    this._data = value;
    this.$text.clearChild();
    this.$text.addChild(SelectBoxItem_('<span>' + this.text + '</span>'));

    if (value && value.desc) {
      this.attr('title', value.desc);
    } else {
      this.attr('title', undefined);
    }

    if (this._themeClassName) this.removeClass(this._themeClassName);
    this._themeClassName = null;

    if (this.theme) {
      this._themeClassName = 'as-theme-' + this.theme;
      this.addClass(this._themeClassName);
    }
  },
  get: function get() {
    return this._data;
  }
};
SelectBoxItem.property.text = {
  get: function get() {
    if (typeof this._data == 'string') return this._data;else return this._data.text;
  }
};
SelectBoxItem.property.value = {
  get: function get() {
    if (typeof this._data == 'string') return this._data;else return this._data.value;
  }
};
SelectBoxItem.property.theme = {
  get: function get() {
    return this._data.theme || null;
  }
};
SelectBoxItem.property.active = {
  set: function set(value) {
    if (value) {
      this.addClass('as-active');
    } else {
      this.removeClass('as-active');
    }
  },
  get: function get() {
    return this.containsClass('as-active');
  }
};
absol_acomp_ACore.install(SelectBoxItem);
/* harmony default export */ const js_SelectBoxItem = (SelectBoxItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBox.js










var SelectBox_ = absol_acomp_ACore._;
var SelectBox_$ = absol_acomp_ACore.$;

function pressCloseEventHandler(event) {
  var parentElt = this.$parent;
  if (!parentElt) return;
  parentElt.eventHandler.pressCloseItem(this, event);
}

function pressHandler(event) {
  var parentElt = this.$parent;
  if (!parentElt) return;
  parentElt.eventHandler.pressItem(this, event);
}
/***
 *
 * @returns {SelectBoxItem}
 */


function SelectBox_makeItem() {
  return SelectBox_({
    tag: 'selectboxitem',
    on: {
      close: pressCloseEventHandler,
      press: pressHandler
    }
  });
}

var SelectBox_itemPool = [];
function SelectBox_requireItem($parent) {
  var item;

  if (SelectBox_itemPool.length > 0) {
    item = SelectBox_itemPool.pop();
  } else {
    item = SelectBox_makeItem();
  }

  item.$parent = $parent;
  return item;
}
function SelectBox_releaseItem(item) {
  item.$parent = null;
  SelectBox_itemPool.push(item);
}
/***
 * @extends PositionTracker
 * @return {SelectBox}
 * @constructor
 */

function SelectBox() {
  this.on('click', this.eventHandler.click);
  this.$selectlistBox = SelectBox_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5],
      displayValue: VALUE_HIDDEN
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition,
      pressitem: this.eventHandler.selectListBoxPressItem
    }
  });
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  this.$items = [];
  this._values = [];
  this.items = [];
  this.values = [];
  this.$selectlistBox.followTarget = this;
  this.disableClickToFocus = false;
  this.orderly = true;
  this.itemFocusable = false;
  this._activeValue = undefined;
  return this;
}

SelectBox.tag = 'selectbox';

SelectBox.render = function () {
  return SelectBox_({
    tag: 'bscroller',
    "class": ['absol-selectbox', 'absol-bscroller'],
    extendEvent: ['change', 'add', 'remove', 'activevaluechange'],
    attr: {
      tabindex: '1'
    }
  }, true);
};

SelectBox.prototype._requireItem = function (n) {
  var itemElt;

  while (this.$items.length < n) {
    itemElt = SelectBox_requireItem(this);
    this.addChild(itemElt);
    this.$items.push(itemElt);
  }

  while (this.$items.length > n) {
    itemElt = this.$items.pop();
    this.removeChild(itemElt);
    SelectBox_releaseItem(itemElt);
  }
};

SelectBox.prototype._assignItems = function (items) {
  for (var i = 0; i < this.$items.length && i < items.length; ++i) {
    this.$items[i].data = items[i];
  }
};
/***
 *
 * @param {string[] | number[]} values
 * @private
 */


SelectBox.prototype._getItemsByValues = function (values) {
  var selectListBoxElt = this.$selectlistBox;
  var itemHolders = values.reduce(function (ac, cr) {
    ac.push.apply(ac, selectListBoxElt.findItemsByValue(cr));
    return ac;
  }, []);

  if (this.orderly) {
    itemHolders.sort(function (a, b) {
      return a.idx - b.idx;
    });
  }

  return itemHolders.map(function (holder) {
    return holder.item;
  });
};

SelectBox.prototype._updateItems = function () {
  this.viewItemsByValues(this._values);
};

SelectBox.prototype.viewItemsByValues = function (values) {
  var items = this._getItemsByValues(values);

  var cBound = this.getBoundingClientRect();

  this._requireItem(items.length);

  this._assignItems(items);

  if (this.itemFocusable) {
    this._updateFocusItem();
  }

  var nBound = this.getBoundingClientRect();

  if (nBound.width != cBound.width || nBound.height != cBound.height) {
    HTML5_ResizeSystem.updateUp(this);
  }
};

SelectBox.property = {};
SelectBox.property.disabled = SelectMenu2.property.disabled;
SelectBox.property.hidden = SelectMenu2.property.hidden;
SelectBox.property.isFocus = SelectMenu2.property.isFocus;

SelectBox.prototype.init = function (props) {
  props = props || [];
  Object.keys(props).forEach(function (key) {
    if (props[key] === undefined) delete props[key];
  });
  this["super"](props);
};

SelectBox.prototype._updateFocusItem = function () {
  for (var i = 0; i < this.$items.length; ++i) {
    this.$items[i].active = this.$items[i].value == this._activeValue;
  }
};

SelectBox.prototype.init = SelectMenu2.prototype.init;
SelectBox.property.items = {
  set: function set(items) {
    items = items || [];
    this.$selectlistBox.items = items;
    this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px');

    this._updateItems();
  },
  get: function get() {
    return this.$selectlistBox.items;
  }
};
SelectBox.property.values = {
  set: function set(values) {
    values = values || [];
    values = values instanceof Array ? values : [values];
    this._values = values;
    this.$selectlistBox.values = values;

    this._updateItems();
  },
  get: function get() {
    return this._values || [];
  }
};
SelectBox.property.orderly = {
  set: function set(value) {
    var needUpdate = this._orderly === this._orderly;

    if (typeof value === 'function') {
      this._orderly;
    } else this._orderly = !!value;

    if (needUpdate) {
      this.values = this.values;
    }
  },
  get: function get() {
    return !!this._orderly;
  }
};
SelectBox.property.disableClickToFocus = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disable-click-to-focus');
    } else {
      this.removeClass('as-disable-click-to-focus');
    }
  },
  get: function get() {
    return this.containsClass('as-disable-click-to-focus');
  }
};
SelectBox.property.itemFocusable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-item-focusable');
    } else {
      this.removeClass('as-item-focusable');
    }

    this._updateFocusItem();
  },
  get: function get() {
    return this.containsClass('as-item-focusable');
  }
};
SelectBox.property.activeValue = {
  set: function set(value) {
    this._activeValue = value;

    if (this.itemFocusable) {
      this._updateFocusItem(); //todo

    }
  },
  get: function get() {
    return this._activeValue;
  }
};
SelectBox.eventHandler = Object.assign({}, SelectMenu2.eventHandler);

SelectBox.eventHandler.click = function (event) {
  if (event.target === this && !this.disableClickToFocus) {
    this.isFocus = !this.isFocus;
  }
};

SelectBox.eventHandler.bodyClick = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$selectlistBox, event) && event.target !== this) {
    this.isFocus = false;
  }
};

SelectBox.eventHandler.selectListBoxPressItem = function (event) {
  var data = event.data;
  var currentValues = this.$selectlistBox.values;
  currentValues.push(data.value);
  this.$selectlistBox.values = currentValues;
  this.$selectlistBox.updatePosition();
  this._activeValue = data.value;

  this._updateItems();

  this.isFocus = false;
  this.emit('add', Object.assign({}, event, {
    type: 'add',
    target: this,
    value: data.value,
    data: data,
    itemData: data
  }), this);
  this.emit('change', Object.assign({}, event, {
    type: 'change',
    action: 'add',
    target: this,
    value: data.value,
    data: data,
    values: this.values
  }), this);
};

SelectBox.eventHandler.pressCloseItem = function (item, event) {
  var value = item.value;
  var data = item.data;
  var currentValues = this.$selectlistBox.values;
  var index = currentValues.indexOf(value);

  if (index >= 0) {
    currentValues.splice(index, 1);
  }

  this.$selectlistBox.values = currentValues;
  this.$selectlistBox.updatePosition();
  this._values = currentValues;

  this._updateItems();

  this.emit('remove', Object.assign({}, event, {
    type: 'change',
    target: this,
    data: data,
    value: value,
    itemData: data
  }), this);
  this.emit('change', Object.assign({}, event, {
    type: 'change',
    action: 'remove',
    target: this,
    data: data,
    value: value,
    itemData: data
  }), this);
};

SelectBox.eventHandler.pressItem = function (item, event) {
  var value = item.value;

  if (this.itemFocusable) {
    var prevActiveValue = this.activeValue;

    if (value !== prevActiveValue) {
      this.activeValue = value;
      this.emit('activevaluechange', {
        target: this,
        originEvent: event,
        prevActiveValue: prevActiveValue,
        activeValue: value
      }, this);
    }
  }
};

SelectBox.eventHandler.pressCloseItem = function (item, event) {
  var value = item.value;
  var data = item.data;
  var index;
  index = this._values.indexOf(value);

  if (index >= 0) {
    this._values.splice(index, 1);

    this._updateItems();

    this.$selectlistBox.values = this._values;
    this.emit('remove', Object.assign({}, event, {
      type: 'change',
      target: this,
      data: data,
      value: value,
      itemData: data
    }), this);
    this.emit('change', Object.assign({}, event, {
      type: 'change',
      action: 'remove',
      target: this,
      data: data,
      value: value,
      itemData: data
    }), this);
  }
};

absol_acomp_ACore.install(SelectBox);
/* harmony default export */ const js_SelectBox = (SelectBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttable.css
var selecttable = __webpack_require__(4920);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable.js










var privateDom = new HTML5_Dom().install(absol_acomp_ACore);
var SelectTable_$ = privateDom.$;
var SelectTable_ = privateDom._;

function SelectTable() {
  var thisST = this;
  this.$attachhook = SelectTable_('attachhook').addTo(this);
  this.sync = new Promise(function (rs) {
    thisST.$attachhook.on('error', rs);
  });
  this.$buttonsContainer = SelectTable_$('.absol-select-table-buttons-container', this);
  this.$searchContainer = SelectTable_$('.absol-select-table-searchtextinput-container', this);
  this.$nonselectedItemsContainer = SelectTable_$('.absol-select-table-nonselected-items-container', this);
  this.$selectedItemsContainer = SelectTable_$('.absol-select-table-selected-items-container', this);
  this.$nonselectedSearchItemsContainer = SelectTable_$('.absol-select-table-nonselected-search-items-container', this);
  this.$selectedSearchItemsContainer = SelectTable_$('.absol-select-table-selected-search-items-container', this);
  this.$removeAllBtn = SelectTable_$('button.remove-all', this).on('click', this.eventHandler.removeAllBtnClick);
  this.$addAllBtn = SelectTable_$('button.add-all', this).on('click', this.eventHandler.addAllBtnClick);
  this.$vscrollerSelected = SelectTable_$('bscroller#selected', this);
  this.$vscrollerNonselected = SelectTable_$('bscroller#nonselected', this);
  this.$body = SelectTable_$('.absol-select-table-body', this);
  this.$header = SelectTable_$('.absol-select-table-header', this);
  /***
   *
   * @type {SearchTextInput}
   */

  this.$searchTextInput = SelectTable_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchTextInputModify);

  this.$addAllBtn.updateSize = function () {
    thisST.updateScroller && thisST.updateScroller();
  };

  HTML5_Dom.addToResizeSystem(this.$addAllBtn);
  return this;
}

SelectTable.tag = 'SelectTable'.toLowerCase();

SelectTable.render = function () {
  return SelectTable_({
    "class": 'absol-select-table',
    extendEvent: ['change', 'addall', 'removeall', 'add', 'remove'],
    child: [{
      "class": 'absol-select-table-header',
      child: [{
        "class": 'absol-select-table-searchtextinput-container',
        child: 'searchtextinput'
      }, {
        "class": 'absol-select-table-buttons-container',
        child: [{
          tag: 'button',
          "class": 'add-all',
          props: {
            innerHTML: 'Add All'
          }
        }, {
          tag: 'button',
          "class": 'remove-all',
          props: {
            innerHTML: 'Remove All'
          }
        }]
      }]
    }, {
      "class": 'absol-select-table-body',
      child: [{
        tag: 'bscroller',
        attr: {
          id: 'nonselected'
        },
        "class": ['absol-select-table-items-scroller'],
        child: {
          child: ['.absol-select-table-nonselected-items-container', '.absol-select-table-nonselected-search-items-container']
        }
      }, {
        tag: 'bscroller',
        attr: {
          id: 'selected'
        },
        "class": ['absol-select-table-items-scroller'],
        child: {
          child: ['.absol-select-table-selected-items-container', '.absol-select-table-selected-search-items-container']
        }
      }]
    }]
  });
};

SelectTable.prototype.updateButtonsContainerSize = function () {
  var rootBound = this.$buttonsContainer.getBoundingClientRect();
  var containBound = this.$buttonsContainer.getBoundingRecursiveRect();
  var fontSize = this.getFontSize();
  this.$buttonsContainer.addStyle('width', (containBound.width + 1) / fontSize + 'em');
  this.$searchContainer.addStyle('right', (containBound.width + 5) / fontSize + 'em');
};

SelectTable.prototype.addAll = function () {
  Array.apply(null, this.$nonselectedItemsContainer.childNodes).forEach(function (e) {
    e.addTo(this.$selectedItemsContainer);
  }.bind(this));
  this.requestSort();
};

SelectTable.prototype.removeAll = function () {
  Array.apply(null, this.$selectedItemsContainer.childNodes).forEach(function (e) {
    e.addTo(this.$nonselectedItemsContainer);
  }.bind(this));
  this.requestSort();
};

SelectTable.prototype.updateScroller = function () {
  var update = function () {
    if (this.style.height) {
      var height = parseFloat(this.getComputedStyleValue('height').replace('px', ''));
      var headerHeight = parseFloat(this.$header.getComputedStyleValue('height').replace('px', ''));
      var bodyMargin = parseFloat(this.$body.getComputedStyleValue('margin-top').replace('px', ''));
      var borderWidth = 1;
      var availableHeight = height - headerHeight - bodyMargin * 2 - borderWidth * 2;
      this.$vscrollerNonselected.addStyle('max-height', availableHeight + 'px');
      this.$vscrollerSelected.addStyle('max-height', availableHeight + 'px');
    }
  }.bind(this);

  setTimeout(update, 1);
};

SelectTable.prototype.getAllItemElement = function () {
  var selectedItemElements = Array.apply(null, this.$selectedItemsContainer.childNodes);
  var nonselectedItemElements = Array.apply(null, this.$nonselectedItemsContainer.childNodes);
  return selectedItemElements.concat(nonselectedItemElements);
};

SelectTable.prototype.init = function (props) {
  this["super"](props);
  this.sync = this.sync.then(this.updateButtonsContainerSize.bind(this));
};

SelectTable.eventHandler = {};

SelectTable.eventHandler.addAllBtnClick = function (event) {
  this.addAll();

  if (this.searching) {
    this.eventHandler.searchTextInputModify(event);
  }

  this.emit('addall', HTML5_EventEmitter.copyEvent(event, {}), this);
  this.updateScroller();
};

SelectTable.eventHandler.removeAllBtnClick = function (event) {
  this.removeAll();

  if (this.searching) {
    this.eventHandler.searchTextInputModify(event);
  }

  this.emit('removeall', HTML5_EventEmitter.copyEvent(event, {}), this);
  this.updateScroller();
};

SelectTable.prototype._filter = function (items, filterText) {
  var result = [];

  if (filterText.length == 1) {
    result = items.map(function (item) {
      var res = {
        item: item,
        text: typeof item === 'string' ? item : item.text
      };
      return res;
    }).map(function (it) {
      it.score = 0;
      var text = it.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
      it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
      text = nonAccentVietnamese(text);
      it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
      return it;
    });
    result.sort(function (a, b) {
      if (b.score - a.score == 0) {
        if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1;
        return 1;
      }

      return b.score - a.score;
    });
    result = result.filter(function (x) {
      return x.score > 0;
    });
  } else {
    var its = items.map(function (item) {
      var res = {
        item: item,
        text: typeof item === 'string' ? item : item.text
      };
      var text = res.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
      res.score = (phraseMatch(text, filterText) + phraseMatch(nonAccentVietnamese(text), nonAccentVietnamese(filterText))) / 2;
      if (nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(nonAccentVietnamese(filterText).toLowerCase().replace(/s/g, '')) > -1) res.score = 100;
      return res;
    });
    if (its.length == 0) return;
    its.sort(function (a, b) {
      if (b.score - a.score == 0) {
        if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1;
        return 1;
      }

      return b.score - a.score;
    });
    var result = its.filter(function (x) {
      return x.score > 0.5;
    });

    if (result.length == 0) {
      var bestScore = its[0].score;
      result = its.filter(function (it) {
        return it.score + 0.001 >= bestScore;
      });
    }

    if (result[0].score == 0) result = [];
  }

  result = result.map(function (e) {
    return e.item;
  });
  return result;
};

SelectTable.prototype._stringcmp = function (s0, s1) {
  if (s0 == s1) return 0;
  if (s0 > s1) return 1;
  return -1;
};

SelectTable.prototype._getString = function (item) {
  if (typeof item == "string") return item;
  return item.text;
};

SelectTable.prototype._equalArr = function (a, b) {
  if (a.length != b.length) return false;

  for (var i = 0; i < a.length; ++i) {
    if (a[i] != b[i] && a[i].text != b[i].text && a[i].value != b[i].value) return false;
  }

  return true;
};

SelectTable.prototype._applySort = function (items, sortFlag) {
  var res = items.slice();

  if (sortFlag == 1 || sortFlag === true) {
    res.sort(function (a, b) {
      return this._stringcmp(this._getString(a), this._getString(b));
    }.bind(this));
  } else if (sortFlag == -1) {
    res.sort(function (a, b) {
      return -this._stringcmp(this._getString(a), this._getString(b));
    }.bind(this));
  } else if (typeof sortFlag == 'function') {
    res.sort(function (a, b) {
      return sortFlag(a, b);
    }.bind(this));
  }

  return res;
};

SelectTable.prototype.requestSort = function () {
  if (!this.sorted || this.sorted == 0) return;
  var selectedItems = this.selectedItems;

  var selectedItemsNew = this._applySort(selectedItems, this.sorted);

  if (!this._equalArr(selectedItems, selectedItemsNew)) {
    this.selectedItems = selectedItemsNew;
  }

  var nonselectedItems = this.nonselectedItems;

  var nonselectedItemsNew = this._applySort(nonselectedItems, this.sorted);

  if (!this._equalArr(nonselectedItems, nonselectedItemsNew)) {
    this.nonselectedItems = nonselectedItemsNew;
  }
};

SelectTable.eventHandler.searchTextInputModify = function (event) {
  var filterText = this.$searchTextInput.value.trim();

  if (filterText.length > 0) {
    var selectedItems = this.selectedItems;
    var nonselectedItems = this.nonselectedItems;
    this.selectedSearchItems = selectedItems;
    this.nonselectedSearchItems = this._filter(nonselectedItems, filterText);
    this.selectedSearchItems = this._filter(selectedItems, filterText);
  } else {}

  this.searching = filterText.length > 0;
};

SelectTable.property = {};
SelectTable.property.disableMoveAll = {
  set: function set(value) {
    if (value) this.addClass('disable-move-all');else this.removeClass('disable-move-all');
  },
  get: function get() {
    return this.containsClass('disable-move-all');
  }
};
SelectTable.property.removeAllText = {
  set: function set(text) {
    this._removeAllText = text; //todo: update remove all text

    if (!text) this.$removeAllBtn.addStyle('display', 'none');else {
      this.$removeAllBtn.removeStyle('display');
      this.$removeAllBtn.innerHTML = this.removeAllText;
      this.updateButtonsContainerSize();
    }
  },
  get: function get() {
    return this._removeAllText || 'Remove All';
  }
};
SelectTable.property.addAllText = {
  set: function set(text) {
    this._addAllText = text;
    if (!text) this.$addAllBtn.addStyle('display', 'none');else {
      this.$addAllBtn.removeStyle('display');
      this.$addAllBtn.innerHTML = this.removeAllText;
      this.updateButtonsContainerSize();
    }
  },
  get: function get() {
    return this._addAllText || 'Add All';
  }
};
SelectTable.property.searching = {
  set: function set(value) {
    if (value) {
      this.addClass('searching');
    } else {
      this.removeClass('searching');
    }

    this.updateScroller();
  },
  get: function get() {
    return this.containsClass('searching');
  }
};
SelectTable.property.sorted = {
  set: function set(value) {
    this._sort = value;
    this.requestSort();
  },
  get: function get() {
    return this._sort;
  }
};
SelectTable.property.selectedItems = {
  set: function set(items) {
    this.$selectedItemsContainer.clearChild();
    var $nonselectedItemsContainer = this.$nonselectedItemsContainer;
    var $selectedItemsContainer = this.$selectedItemsContainer;
    var self = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedItemsContainer) {
                this.addTo($nonselectedItemsContainer);
                self.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              } else {
                this.addTo($selectedItemsContainer);
                self.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              }

              self.updateScroller();
              self.requestSort();
            }
          }
        }).addTo(this.$selectedItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
    this.requestSort();
  },
  get: function get() {
    return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable.property.nonselectedItems = {
  set: function set(items) {
    this.$nonselectedItemsContainer.clearChild();
    var $nonselectedItemsContainer = this.$nonselectedItemsContainer;
    var $selectedItemsContainer = this.$selectedItemsContainer;
    var self = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedItemsContainer) {
                this.addTo($nonselectedItemsContainer);
                self.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              } else {
                this.addTo($selectedItemsContainer);
                self.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              }

              self.updateScroller();
              self.requestSort();
            }
          }
        }).addTo(this.$nonselectedItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
    this.requestSort();
  },
  get: function get() {
    return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable.property.selectedSearchItems = {
  set: function set(items) {
    this.$selectedSearchItemsContainer.clearChild();
    var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer;
    var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer;
    var table = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedSearchItemsContainer) {
                this.addTo($nonselectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$nonselectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              } else {
                this.addTo($selectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$selectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              }

              table.updateScroller();
              table.requestSort();
            }
          }
        }).addTo(this.$selectedSearchItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
  },
  get: function get() {
    return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable.property.nonselectedSearchItems = {
  set: function set(items) {
    this.$nonselectedSearchItemsContainer.clearChild();
    var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer;
    var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer;
    var table = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedSearchItemsContainer) {
                this.addTo($nonselectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$nonselectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              } else {
                this.addTo($selectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$selectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              }

              table.updateScroller();
              table.requestSort();
            }
          }
        }).addTo(this.$nonselectedSearchItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
  },
  get: function get() {
    return Array.prototype.map.call(this.$nonselectedSearchItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
/*
namespace of selecttable
*/

function Item() {
  var res = SelectTable_({
    extendEvent: ['requestmove'],
    "class": 'absol-select-table-item',
    child: ['span.absol-select-table-item-text', {
      "class": 'absol-select-table-item-right-container',
      child: {
        "class": 'absol-select-table-item-right-container-table',
        child: {
          "class": 'absol-select-table-item-right-container-cell',
          child: ['addicon', 'subicon']
        }
      }
    }]
  });

  res.$text = SelectTable_$('span', res);
  res.eventHandler = HTML5_OOP.bindFunctions(res, Item.eventHandler);
  res.$rightBtn = SelectTable_$('.absol-select-table-item-right-container', res);
  res.on('dblclick', res.eventHandler.dblclick);
  res.$rightBtn.on('click', res.eventHandler.rightBtClick);
  return res;
}

;
Item.eventHandler = {};

Item.eventHandler.dblclick = function (event) {
  event.preventDefault();
  if (!HTML5_EventEmitter.hitElement(this.$rightBtn, event)) this.emit('requestmove', event, this);
};

Item.eventHandler.rightBtClick = function (event) {
  this.emit('requestmove', event, this);
};

Item.property = {};
Item.property.data = {
  set: function set(value) {
    this._data = value;

    if (value) {
      var text;

      if (typeof value == "string") {
        text = value;
      } else {
        text = value.text;
      }

      this.$text.innerHTML = text;
    }
  },
  get: function get() {
    return this._data;
  }
};
Item.property.text = {
  get: function get() {
    return this._data ? typeof this._data == 'string' ? this._data : this._data.text : '';
  }
};
/**
 *
 * <svg width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
 <g transform="translate(0,-197)">
 <path d="m39.873 198.21v38.668h-38.668v20.252h38.668v38.668h20.253v-38.668h38.668v-20.252h-38.668v-38.668z" style="fill-rule:evenodd;fill:#5fbbc2;stroke-linejoin:round;stroke-width:2.4109;stroke:#002eea"/>
 </g>
 </svg>
 */

function AddIcon() {
  return HTML5_Svg.ShareInstance.buildSvg('<svg class="add-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + '<g transform="translate(0,-197)">' + '<path d="m39.873 198.21v38.668h-38.668v20.252h38.668v38.668h20.253v-38.668h38.668v-20.252h-38.668v-38.668z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.4109;" />' + '</g>' + '</svg>');
}

;

function SubIcon() {
  return HTML5_Svg.ShareInstance.buildSvg('<svg class="sub-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' + ' <g transform="translate(0,-197)">' + '  <path d="m98.795 236.87v20.253h-97.589v-20.253z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.411;"/>' + ' </g>' + '</svg>');
}

;
privateDom.install({
  subicon: SubIcon,
  addicon: AddIcon,
  item: Item
});
SelectTable.privateDom = privateDom;
absol_acomp_ACore.install(SelectTable);
/* harmony default export */ const js_SelectTable = (SelectTable);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable2.js








var SelectTable2_privateDom = new HTML5_Dom().install(absol_acomp_ACore).install(js_SelectTable.privateDom);
var SelectTable2_$ = SelectTable2_privateDom.$;
var SelectTable2_ = SelectTable2_privateDom._;

function SelectTable2() {
  var thisST = this;
  this.$attachhook = SelectTable2_('attachhook').addTo(this);
  this.sync = new Promise(function (rs) {
    thisST.$attachhook.on('error', rs);
  });
  this.$buttonsContainer = SelectTable2_$('.absol-select-table-buttons-container', this);
  this.$searchContainer = SelectTable2_$('.absol-select-table-searchtextinput-container', this);
  this.$nonselectedItemsContainer = SelectTable2_$('.absol-select-table-nonselected-items-container', this);
  this.$selectedItemsContainer = SelectTable2_$('.absol-select-table-selected-items-container', this);
  this.$nonselectedSearchItemsContainer = SelectTable2_$('.absol-select-table-nonselected-search-items-container', this);
  this.$selectedSearchItemsContainer = SelectTable2_$('.absol-select-table-selected-search-items-container', this);
  this.$removeAllBtn = SelectTable2_$('button.remove-all', this).on('click', this.eventHandler.removeAllBtnClick);
  this.$addAllBtn = SelectTable2_$('button.add-all', this).on('click', this.eventHandler.addAllBtnClick);
  this.$vscrollerSelected = SelectTable2_$('vscroller#selected', this);
  this.$vscrollerNonselected = SelectTable2_$('vscroller#nonselected', this);
  this.$body = SelectTable2_$('.absol-select-table-body', this);
  this.$searchTextInput = SelectTable2_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchTextInputModify);
}

;
SelectTable2.tag = 'SelectTable2'.toLowerCase();

SelectTable2.render = function () {
  return SelectTable2_({
    "class": ['absol-select-table', 'exclude'],
    extendEvent: ['change', 'addall', 'removeall', 'add', 'remove'],
    child: [{
      "class": 'absol-select-table-header',
      child: [{
        "class": 'absol-select-table-searchtextinput-container',
        child: 'searchtextinput'
      }, {
        "class": 'absol-select-table-buttons-container',
        child: [{
          tag: 'button',
          "class": 'add-all',
          props: {
            innerHTML: 'Add All'
          }
        }, {
          tag: 'button',
          "class": 'remove-all',
          props: {
            innerHTML: 'Remove All'
          }
        }]
      }]
    }, {
      "class": 'absol-select-table-body',
      child: [{
        tag: 'vscroller',
        attr: {
          id: 'nonselected'
        },
        "class": 'absol-select-table-items-scroller',
        child: {
          child: ['.absol-select-table-nonselected-items-container', '.absol-select-table-nonselected-search-items-container']
        }
      }, {
        tag: 'vscroller',
        attr: {
          id: 'selected'
        },
        "class": 'absol-select-table-items-scroller',
        child: {
          child: ['.absol-select-table-selected-items-container', '.absol-select-table-selected-search-items-container']
        }
      }]
    }]
  });
};

SelectTable2.prototype.updateButtonsContainerSize = function () {
  var rootBound = this.$buttonsContainer.getBoundingClientRect();
  var containBound = this.$buttonsContainer.getBoundingRecursiveRect();
  var fontSize = this.getFontSize();
  this.$buttonsContainer.addStyle('width', (containBound.width + 1) / fontSize + 'em');
  this.$searchContainer.addStyle('right', (containBound.width + 5) / fontSize + 'em');
};

SelectTable2.prototype.addAll = function () {
  Array.apply(null, this.$nonselectedItemsContainer.childNodes).forEach(function (e) {
    e.addTo(this.$selectedItemsContainer);
  }.bind(this));
  this.requestSort();
};

SelectTable2.prototype.removeAll = function () {
  Array.apply(null, this.$selectedItemsContainer.childNodes).forEach(function (e) {
    e.addTo(this.$nonselectedItemsContainer);
  }.bind(this));
  this.requestSort();
};

SelectTable2.prototype.updateScroller = function () {
  var update = function () {
    if (this.style.height) {
      var bodyMargin = parseFloat(this.$body.getComputedStyleValue('margin-top').replace('px', '') || 0.14285714285 * 14 + '');
      var bound = this.getBoundingClientRect();
      var bodyBound = this.$body.getBoundingClientRect();
      var bodyRBound = this.$body.getBoundingRecursiveRect();
      var availableHeight = bound.bottom - bodyMargin - bodyBound.top;
      var isOverflowHeight = availableHeight < bodyRBound.height;

      if (isOverflowHeight) {
        this.$vscrollerNonselected.addStyle('max-height', availableHeight + 'px');
        this.$vscrollerSelected.addStyle('max-height', availableHeight + 'px');
        this.$vscrollerSelected.addClass('limited-height');
        this.$vscrollerNonselected.addClass('limited-height');
      } else {
        this.$vscrollerNonselected.removeStyle('max-height');
        this.$vscrollerSelected.removeStyle('max-height');
        this.$vscrollerSelected.removeClass('limited-height');
        this.$vscrollerSelected.removeClass('limited-height');
        this.$vscrollerNonselected.removeClass('limited-height');
      }
    }

    requestAnimationFrame(this.$vscrollerNonselected.requestUpdateSize.bind(this.$vscrollerNonselected));
    requestAnimationFrame(this.$vscrollerSelected.requestUpdateSize.bind(this.$vscrollerSelected));
  }.bind(this);

  setTimeout(update, 1);
};

SelectTable2.prototype.getAllItemElement = function () {
  var selectedItemElements = Array.apply(null, this.$selectedItemsContainer.childNodes);
  var nonselectedItemElements = Array.apply(null, this.$nonselectedItemsContainer.childNodes);
  return selectedItemElements.concat(nonselectedItemElements);
};

SelectTable2.prototype.init = function (props) {
  this["super"](props);
  this.sync = this.sync.then(this.updateButtonsContainerSize.bind(this));
};

SelectTable2.eventHandler = {};

SelectTable2.eventHandler.addAllBtnClick = function (event) {
  this.addAll();

  if (this.searching) {
    this.eventHandler.searchTextInputModify(event);
  }

  this.emit('addall', HTML5_EventEmitter.copyEvent(event, {}), this);
  this.updateScroller();
};

SelectTable2.eventHandler.removeAllBtnClick = function (event) {
  this.removeAll();

  if (this.searching) {
    this.eventHandler.searchTextInputModify(event);
  }

  this.emit('removeall', HTML5_EventEmitter.copyEvent(event, {}), this);
  this.updateScroller();
};

SelectTable2.prototype._filter = function (items, filterText) {
  var result = [];

  if (filterText.length == 1) {
    result = items.map(function (item) {
      var res = {
        item: item,
        text: typeof item === 'string' ? item : item.text
      };
      return res;
    }).map(function (it) {
      it.score = 0;
      var text = it.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
      it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
      text = nonAccentVietnamese(text);
      it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
      return it;
    });
    result.sort(function (a, b) {
      if (b.score - a.score == 0) {
        if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1;
        return 1;
      }

      return b.score - a.score;
    });
    result = result.filter(function (x) {
      return x.score > 0;
    });
  } else {
    var its = items.map(function (item) {
      var res = {
        item: item,
        text: typeof item === 'string' ? item : item.text
      };
      var text = res.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
      res.score = (phraseMatch(text, filterText) + phraseMatch(nonAccentVietnamese(text), nonAccentVietnamese(filterText))) / 2;
      if (nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(nonAccentVietnamese(filterText).toLowerCase().replace(/s/g, '')) > -1) res.score = 100;
      return res;
    });
    if (its.length == 0) return;
    its.sort(function (a, b) {
      if (b.score - a.score == 0) {
        if (nonAccentVietnamese(b.text) > nonAccentVietnamese(a.text)) return -1;
        return 1;
      }

      return b.score - a.score;
    });
    var result = its.filter(function (x) {
      return x.score > 0.5;
    });

    if (result.length == 0) {
      var bestScore = its[0].score;
      result = its.filter(function (it) {
        return it.score + 0.001 >= bestScore;
      });
    }

    if (result[0].score == 0) result = [];
  }

  result = result.map(function (e) {
    return e.item;
  });
  return result;
};

SelectTable2.prototype._stringcmp = function (s0, s1) {
  if (s0 == s1) return 0;
  if (s0 > s1) return 1;
  return -1;
};

SelectTable2.prototype._getString = function (item) {
  if (typeof item == "string") return item;
  return item.text;
};

SelectTable2.prototype._equalArr = function (a, b) {
  if (a.length != b.length) return false;

  for (var i = 0; i < a.length; ++i) {
    if (a[i] != b[i]) return false;
  }

  return true;
};

SelectTable2.prototype._applySort = function (items, sortFlag) {
  var res = items.slice();

  if (sortFlag == 1 || sortFlag === true) {
    res.sort(function (a, b) {
      return this._stringcmp(this._getString(a), this._getString(b));
    }.bind(this));
  } else if (sortFlag == -1) {
    res.sort(function (a, b) {
      return -this._stringcmp(this._getString(a), this._getString(b));
    }.bind(this));
  } else if (typeof sortFlag == 'function') {
    res.sort(function (a, b) {
      return sortFlag(a, b);
    }.bind(this));
  }

  return res;
};

SelectTable2.prototype.requestSort = function () {
  if (!this.sorted || this.sorted == 0) return;
  var selectedItems = this.selectedItems;

  var selectedItemsNew = this._applySort(selectedItems, this.sorted);

  if (!this._equalArr(selectedItems, selectedItemsNew)) {
    this.selectedItems = selectedItemsNew;
  }

  var nonselectedItems = this.nonselectedItems;

  var nonselectedItemsNew = this._applySort(nonselectedItems, this.sorted);

  if (!this._equalArr(nonselectedItems, nonselectedItemsNew)) {
    this.nonselectedItems = nonselectedItemsNew;
  }
};

SelectTable2.eventHandler.searchTextInputModify = function (event) {
  var filterText = this.$searchTextInput.value.trim();

  if (filterText.length > 0) {
    var selectedItems = this.selectedItems;
    var nonselectedItems = this.nonselectedItems;
    this.selectedSearchItems = selectedItems;
    this.nonselectedSearchItems = this._filter(nonselectedItems, filterText);
    this.selectedSearchItems = this._filter(selectedItems, filterText);
  } else {}

  this.searching = filterText.length > 0;
};

SelectTable2.property = {};
SelectTable2.property.disableMoveAll = {
  set: function set(value) {
    if (value) this.addClass('disable-move-all');else this.removeClass('disable-move-all');
  },
  get: function get() {
    return this.containsClass('disable-move-all');
  }
};
SelectTable2.property.removeAllText = {
  set: function set(text) {
    this._removeAllText = text; //todo: update remove all text

    if (!text) this.$removeAllBtn.addStyle('display', 'none');else {
      this.$removeAllBtn.removeStyle('display');
      this.$removeAllBtn.innerHTML = this.removeAllText;
      this.updateButtonsContainerSize();
    }
  },
  get: function get() {
    return this._removeAllText || 'Remove All';
  }
};
SelectTable2.property.addAllText = {
  set: function set(text) {
    this._addAllText = text;
    if (!text) this.$addAllBtn.addStyle('display', 'none');else {
      this.$addAllBtn.removeStyle('display');
      this.$addAllBtn.innerHTML = this.removeAllText;
      this.updateButtonsContainerSize();
    }
  },
  get: function get() {
    return this._addAllText || 'Add All';
  }
};
SelectTable2.property.searching = {
  set: function set(value) {
    if (value) {
      this.addClass('searching');
    } else {
      this.removeClass('searching');
    }

    this.updateScroller();
  },
  get: function get() {
    return this.containsClass('searching');
  }
};
SelectTable2.property.sorted = {
  set: function set(value) {
    this._sort = value;
    this.requestSort();
  },
  get: function get() {
    return this._sort;
  }
};
SelectTable2.property.selectedItems = {
  set: function set(items) {
    this.$selectedItemsContainer.clearChild();
    var $nonselectedItemsContainer = this.$nonselectedItemsContainer;
    var $selectedItemsContainer = this.$selectedItemsContainer;
    var self = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable2_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedItemsContainer) {
                this.addTo($nonselectedItemsContainer);
                self.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              } else {
                this.addTo($selectedItemsContainer);
                self.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              }

              self.updateScroller();
              self.requestSort();
            }
          }
        }).addTo(this.$selectedItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
    this.requestSort();
  },
  get: function get() {
    return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable2.property.nonselectedItems = {
  set: function set(items) {
    this.$nonselectedItemsContainer.clearChild();
    var $nonselectedItemsContainer = this.$nonselectedItemsContainer;
    var $selectedItemsContainer = this.$selectedItemsContainer;
    var self = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable2_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedItemsContainer) {
                this.addTo($nonselectedItemsContainer);
                self.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              } else {
                this.addTo($selectedItemsContainer);
                self.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), self);
              }

              self.updateScroller();
              self.requestSort();
            }
          }
        }).addTo(this.$nonselectedItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
    this.requestSort();
  },
  get: function get() {
    return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable2.property.selectedSearchItems = {
  set: function set(items) {
    this.$selectedSearchItemsContainer.clearChild();
    var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer;
    var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer;
    var table = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable2_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedSearchItemsContainer) {
                this.addTo($nonselectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$nonselectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              } else {
                this.addTo($selectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$selectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              }

              table.updateScroller();
              table.requestSort();
            }
          }
        }).addTo(this.$selectedSearchItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
  },
  get: function get() {
    return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
SelectTable2.property.nonselectedSearchItems = {
  set: function set(items) {
    this.$nonselectedSearchItemsContainer.clearChild();
    var $nonselectedSearchItemsContainer = this.$nonselectedSearchItemsContainer;
    var $selectedSearchItemsContainer = this.$selectedSearchItemsContainer;
    var table = this;

    if (items instanceof Array) {
      items.map(function (item) {
        return SelectTable2_({
          tag: 'item',
          props: {
            data: item
          },
          on: {
            requestmove: function requestmove(event) {
              if (this.parentElement == $selectedSearchItemsContainer) {
                this.addTo($nonselectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$nonselectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('remove', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              } else {
                this.addTo($selectedSearchItemsContainer);
                table.getAllItemElement().filter(function (itemElement) {
                  if (itemElement.data == this.data) {
                    itemElement.addTo(table.$selectedItemsContainer);
                    return true;
                  }

                  return false;
                }.bind(this));
                table.emit('add', HTML5_EventEmitter.copyEvent(event, {
                  item: item
                }), table);
              }

              table.updateScroller();
              table.requestSort();
            }
          }
        }).addTo(this.$nonselectedSearchItemsContainer);
      }.bind(this));
    } else {// error
    }

    this.updateScroller();
  },
  get: function get() {
    return Array.prototype.map.call(this.$nonselectedSearchItemsContainer.childNodes, function (e) {
      return e.data;
    });
  }
};
/*
namespace of selecttable
*/

function SelectTable2_Item() {
  var res = SelectTable2_({
    extendEvent: ['requestmove', 'clickadd', 'clickremove', 'clickexclude'],
    "class": 'absol-select-table-item',
    child: ['span.absol-select-table-item-text', {
      "class": 'absol-select-table-item-right-container',
      child: {
        "class": 'absol-select-table-item-right-container-table',
        child: {
          "class": 'absol-select-table-item-right-container-row',
          child: [{
            attr: {
              title: 'Add'
            },
            "class": ['absol-select-table-item-right-container-cell', 'add'],
            child: 'addicon'
          }, {
            attr: {
              title: 'Remove'
            },
            "class": ['absol-select-table-item-right-container-cell', 'remove'],
            child: 'subicon'
          }, {
            attr: {
              title: 'Exclude'
            },
            "class": ['absol-select-table-item-right-container-cell', 'exclude'],
            child: 'excludeico'
          }]
        }
      }
    }]
  });

  res.$text = SelectTable2_$('span', res);
  res.eventHandler = HTML5_OOP.bindFunctions(res, SelectTable2_Item.eventHandler);
  res.$rightBtn = SelectTable2_$('.absol-select-table-item-right-container', res);
  res.on('dblclick', res.eventHandler.dblclick);
  res.$addBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.add', res).on('click', res.eventHandler.addBtClick);
  res.$removeBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.remove', res).on('click', res.eventHandler.removeBtClick);
  res.$excludeBtn = SelectTable2_$('.absol-select-table-item-right-container-cell.exclude', res).on('click', res.eventHandler.excludeBtClick);
  return res;
}

;
SelectTable2_Item.eventHandler = {};

SelectTable2_Item.eventHandler.dblclick = function (event) {
  event.preventDefault();
  if (!HTML5_EventEmitter.hitElement(this.$rightBtn, event)) this.emit('requestmove', event, this);
};

SelectTable2_Item.eventHandler.rightBtClick = function (event) {
  this.emit('requestmove', event, this);
};

SelectTable2_Item.eventHandler.removeBtClick = function (event) {
  this.emit('clickremove', event, this);
};

SelectTable2_Item.eventHandler.addBtClick = function (event) {
  this.emit('clickadd', event, this);
};

SelectTable2_Item.eventHandler.excludeBtClick = function (event) {
  this.emit('clickexclude', event, this);
};

SelectTable2_Item.property = {};
SelectTable2_Item.property.data = {
  set: function set(value) {
    this._data = value;

    if (value) {
      var text;

      if (typeof value == "string") {
        text = value;
      } else {
        text = value.text;
      }

      this.$text.innerHTML = text;
    }
  },
  get: function get() {
    return this._data;
  }
};
SelectTable2_Item.property.text = {
  get: function get() {
    return this._data ? typeof this._data == 'string' ? this._data : this._data.text : '';
  }
};

function ExcludeIco() {
  return SelectTable2_('<svg class="exclude-icon" width="24" height="24" viewBox="0 0 24 24">\
            <path  d="M8.27,3L3,8.27V15.73L8.27,21H15.73C17.5,19.24 21,15.73 21,15.73V8.27L15.73,3M9.1,5H14.9L19,9.1V14.9L14.9,19H9.1L5,14.9V9.1M11,15H13V17H11V15M11,7H13V13H11V7" />\
        </svg>');
}

SelectTable2_privateDom.install({
  item: SelectTable2_Item,
  excludeico: ExcludeIco
}); // not completed yet

absol_acomp_ACore.install('selecttable2', SelectTable2);
/* harmony default export */ const js_SelectTable2 = (SelectTable2);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/spaninput.css
var spaninput = __webpack_require__(7439);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SpanInput.js




var SpanInput_ = absol_acomp_ACore._;
var SpanInput_$ = absol_acomp_ACore.$;

function SpanInput() {
  this.defineEvent(['change']);
  this._inputType = 0;
  this._lastValue = null;
  this.on('paste', this.eventHandler.paste).on('keyup', this.eventHandler.keyup).on('keydown', this.eventHandler.keydown).on('blur', this.eventHandler.blur);
}

SpanInput.prototype.notifyValueChange = function (event) {
  var cValue = this.value;

  if (this._lastValue != cValue && (this._inputType != 1 || !isNaN(this._lastValue) || !isNaN(cValue))) {
    this._lastValue = cValue;
    this.emit('change', {
      type: 'change',
      value: cValue,
      originEvent: event
    }, this);
  }
};

SpanInput.eventHandler = {};

SpanInput.eventHandler.keyup = function (event) {
  if (this._inputType == 0) {
    this.notifyValueChange(event);
  } else if (this._inputType == 1) {
    this.eventHandler.numberKeyup(event);
  }
};

SpanInput.eventHandler.keydown = function (event) {
  if (this._inputType == 0) {} else if (this._inputType == 1) {
    this.eventHandler.numberKeydown(event);
  }
};

SpanInput.eventHandler.numberBlur = function (value) {
  this.notifyValueChange(event);
};

SpanInput.eventHandler.textBlur = function (event) {
  this.notifyValueChange(event);
};

SpanInput.eventHandler.blur = function (event) {
  if (this._inputType == 0) {
    this.eventHandler.textBlur(event);
  } else if (this._inputType == 1) {
    this.eventHandler.numberKeydown(event);
  }
};

SpanInput.eventHandler.numberKeyup = function (event) {
  this.notifyValueChange();
};

SpanInput.eventHandler.numberKeydown = function (event) {
  var key = event.key;

  if (key == 'Enter') {
    event.preventDefault();
    this.blur();
    this.notifyValueChange();
    return;
  }

  if (key && key.length == 1 && !event.ctrlKey && !event.altKey) {
    if (key.match(/[0-9.\-\+]/)) {
      if (key == '.' && this.text.indexOf('.') >= 0) event.preventDefault();
      if ((key == '+' || key == '-') && (this.text.indexOf('+') >= 0 || this.text.indexOf('-') >= 0 || getCaretPosition(this) > 0)) event.preventDefault();
    } else event.preventDefault();
  }
};

SpanInput.eventHandler.paste = function (event) {
  event.preventDefault();

  if (event.clipboardData && event.clipboardData.getData) {
    var text = event.clipboardData.getData("text/plain");
    if (this._inputType == 1) text = text.replace(/[^0-9.\-+]/g, '');
    document.execCommand("insertHTML", false, text);

    if (this._inputType == 1) {
      if (isNaN(this.value)) {
        this.value = NaN;
      }
    }
  } else if (window.clipboardData && window.clipboardData.getData) {
    var text = window.clipboardData.getData("Text");
    if (this._inputType == 1) text = text.replace(/[^0-9.\-+]/g, '');
    insertTextAtCursor(text);

    if (this._inputType == 1) {
      if (isNaN(this.value)) {
        this.value = NaN;
      }
    }
  }
};

SpanInput.property = {};
SpanInput.property.value = {
  set: function set(value) {
    if (this._inputType == 1 && isNaN(value)) value = null;
    this.clearChild();
    if (value !== null) this.addChild(SpanInput_({
      text: value + ''
    }));
  },
  get: function get() {
    if (this._inputType == 1) {
      return parseFloat(this.text);
    } else {
      return this.text;
    }
  }
};
SpanInput.property.type = {
  set: function set(value) {
    var index = ['text', 'number'].indexOf(value);
    if (index < 0) index = 0;
    this._inputType = index;

    if (index == 1) {
      this.addClass('absol-span-input-empty-minus');
    } else {
      this.removeClass('absol-span-input-empty-minus');
    }
  },
  get: function get() {
    return ['text', 'number'][this._inputType];
  }
};
SpanInput.property.text = {
  get: function get() {
    return getTextIn(this);
  }
};
SpanInput.tag = 'spaninput';

SpanInput.render = function () {
  return SpanInput_('span.absol-span-input[contenteditable="true"]');
};

absol_acomp_ACore.install(SpanInput);
/* harmony default export */ const js_SpanInput = (SpanInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/statictabbar.css
var statictabbar = __webpack_require__(4378);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/StaticTabbar.js



var StaticTabbar_$ = absol_acomp_ACore.$;
var StaticTabbar_ = absol_acomp_ACore._;

function StaticTabbar() {
  var thisST = this;
  this.$activeBox = StaticTabbar_$('.absol-static-tabbar-active-box', this);
  this.$hline = StaticTabbar_$('.absol-static-tabbar-hline', this);
  this.$buttons = [];
  this._btDict = {};
  this._activedButton = undefined;
  this.sync = new Promise(function (resolve) {
    StaticTabbar_('attachhook').on('error', function () {
      this.remove();
      resolve();
    }).addTo(thisST);
  });
  return this;
}

StaticTabbar.tag = 'StaticTabbar'.toLowerCase();

StaticTabbar.render = function () {
  return StaticTabbar_({
    "class": 'absol-static-tabbar',
    extendEvent: 'change',
    child: [{
      "class": 'absol-static-tabbar-active-box',
      child: '.absol-static-tabbar-hline'
    }]
  });
};

StaticTabbar.prototype.fireChange = function (data) {
  this.emit('change', {
    target: this,
    data: data,
    value: this.value
  }, self);
};

StaticTabbar.property = {};
StaticTabbar.property.items = {
  set: function set(value) {
    this.$buttons.forEach(function (e) {
      e.remove();
    });
    this._items = value;
    var self = this;
    this.$buttons = this.items.map(function (tab) {
      var ident = tab.value || randomIdent();

      var button = StaticTabbar_({
        tag: 'button',
        "class": 'absol-static-tabbar-button',
        id: 'tab-' + ident,
        child: {
          tag: 'span',
          child: {
            text: tab.text
          }
        },
        on: {
          click: function click(event) {
            if (self.value != tab.value) {
              self.value = ident;
              self.fireChange(tab);
            }
          }
        }
      }).addTo(self);

      self._btDict[ident] = button;
      return button;
    });

    if (this.value !== undefined) {
      this.sync.then(this.activeTab.bind(this, this.value));
    }
  },
  get: function get() {
    return this._items || [];
  }
};
StaticTabbar.property.value = {
  set: function set(value) {
    this._value = value;

    if (this.$buttons.length > 0) {
      this.sync.then(this.activeTab.bind(this, value));
    }
  },
  get: function get() {
    return this._value;
  }
};

StaticTabbar.prototype.activeTab = function (ident) {
  if (this._activedButton) this._activedButton.removeClass('active');
  var button = this._btDict[ident];
  this._activedButton = button;

  if (button) {
    button.addClass('active');
    var bound = this.getBoundingClientRect();
    var buttonBound = button.getBoundingClientRect();
    var dx = buttonBound.left - bound.left;
    var fontSize = this.getFontSize();
    this.$activeBox.addStyle({
      left: dx / fontSize + 'em',
      width: buttonBound.width / fontSize + 'em'
    });
  } else {
    this.$activeBox.addStyle({
      left: '0',
      width: '0'
    });
  }
};

absol_acomp_ACore.install('statictabbar', StaticTabbar);
/* harmony default export */ const js_StaticTabbar = (StaticTabbar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/switch.css
var css_switch = __webpack_require__(8434);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Switch.js



var Switch_ = absol_acomp_ACore._;
var Switch_$ = absol_acomp_ACore.$;

function Switch() {
  var thisS = this;
  this.$input = Switch_$('input', this);
  this.$input.on('click', function (event) {
    thisS.emit('change', event, thisS);
  });
  HTML5_OOP.drillProperty(this, this.$input, 'checked');
  HTML5_OOP.drillProperty(this, this.$input, 'isOn', 'checked');
}

Switch.tag = 'switch';

Switch.render = function () {
  return Switch_({
    tag: 'label',
    "class": 'absol-switch',
    extendEvent: 'change',
    child: ['input[type="checkbox"]', 'span.absol-switch-slider']
  });
};

Switch.attribute = {
  checked: {
    set: function set(value) {
      if (value == 'false' || value == null) {
        this.checked = false;
      } else {
        this.checked = true;
      }
    },
    get: function get() {
      return this.checked ? 'true' : 'false';
    },
    remove: function remove() {
      this.checked = false;
    }
  },
  disabled: {
    set: function set(value) {
      if (value == 'false' || value == null) {
        this.disabled = false;
      } else {
        this.disabled = true;
      }
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  }
};
Switch.property = {
  disabled: {
    set: function set(value) {
      this.$input.disabled = !!value;

      if (value) {
        this.addClass('disabled');
      } else {
        this.removeClass('disabled');
      }
    },
    get: function get() {
      return this.$input.disabled;
    }
  }
};
absol_acomp_ACore.install('switch', Switch);
/* harmony default export */ const js_Switch = (Switch);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablescroller.css
var tablescroller = __webpack_require__(8994);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableScroller.js




var TableScroller_$ = absol_acomp_ACore.$;
var TableScroller_ = absol_acomp_ACore._;

function TableScroller() {
  var thisTS = this;
  this.$content = undefined;
  this.$fixedViewport = TableScroller_$('.absol-table-scroller-fixed-viewport', this);
  this.$leftScroller = TableScroller_$('.absol-table-scroller-left-vscroller', this);
  this.$leftViewport = TableScroller_$('.absol-table-scroller-left-vscroller-viewport', this).on('scroll', thisTS.eventHandler.scrollLeftScrollerViewport);
  ;
  this.$headScroller = TableScroller_$('.absol-table-scroller-header-hscroller', this);
  this.$headScrollerViewport = TableScroller_$('.absol-table-scroller-header-hscroller-viewport', this).on('scroll', this.eventHandler.scrollHeadScrollerViewport);
  this.$attachHook = TableScroller_$('attachhook', this);
  this.$attachHook.requestUpdateSize = this._updateContentSize.bind(this);
  this.$attachHook.on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
  });
  this.sync = new Promise(function (rs) {
    thisTS.$attachHook.once('error', rs);
  });
  this.$viewport = TableScroller_$('.absol-table-scroller-viewport', this).on('scroll', this.eventHandler.scrollViewport);
  this.$viewport.scrollInto = js_BScroller.prototype.scrollInto;
  this.$leftLine = TableScroller_$('.absol-table-scroller-left-line', this);
  this.$headLine = TableScroller_$('.absol-table-scroller-head-line', this);
  this.$vscrollbarCtn = TableScroller_$('.absol-table-scroller-vscrollbar-container', this);
  this.$vscrollbar = TableScroller_$('.absol-table-scroller-vscrollbar-container vscrollbar', this).on('scroll', function () {
    thisTS.$viewport.scrollTop = this.innerOffset;
  });
  this.$hscrollbarCtn = TableScroller_$('.absol-table-scroller-hscrollbar-container', this);
  this.$hscrollbar = TableScroller_$('.absol-table-scroller-hscrollbar-container hscrollbar', this).on('scroll', function () {
    thisTS.$viewport.scrollLeft = this.innerOffset;
  });
  this.$vscrollbar.hidden = false;
  this.$hscrollbar.hidden = false;
  this._fixedTableThsVisible = [];
  this._fixedTableTr = [];
  this._fixedTableThs = [];
}

TableScroller.tag = 'TableScroller'.toLowerCase();

TableScroller.render = function () {
  return TableScroller_({
    "class": 'absol-table-scroller',
    child: ['.absol-table-scroller-viewport', '.absol-table-scroller-fixed-viewport', //place holder
    {
      "class": 'absol-table-scroller-header-hscroller',
      child: '.absol-table-scroller-header-hscroller-viewport'
    }, {
      "class": 'absol-table-scroller-left-vscroller',
      child: '.absol-table-scroller-left-vscroller-viewport'
    }, '.absol-table-scroller-head-line', '.absol-table-scroller-left-line', {
      "class": 'absol-table-scroller-vscrollbar-container',
      child: {
        tag: 'vscrollbar'
      }
    }, {
      "class": 'absol-table-scroller-hscrollbar-container',
      child: {
        tag: 'hscrollbar'
      }
    }, 'attachhook']
  });
};

TableScroller.scrollSize = 17; //default 

HTML5_Dom.getScrollSize().then(function (size) {
  TableScroller.scrollSize = size.width; //default scroller

  TableScroller.$style = TableScroller_('style[id="table-scroller-css"]').addTo(document.head);
  TableScroller.$style.innerHTML = ['.absol-table-scroller .absol-table-scroller-viewport {', // 
  '    width: calc(100% + ' + size.width + 'px);', '    height: calc(100% + ' + size.width + 'px);', '}', '.absol-table-scroller .absol-table-scroller-header-hscroller-viewport {', '    margin-bottom: -' + size.width + 'px;/*default*/', '}'].join('\n');
  HTML5_Dom.updateResizeSystem();
  setTimeout(HTML5_Dom.updateResizeSystem.bind(HTML5_Dom), 30); // css load delay
});
TableScroller.eventHandler = {};

TableScroller.eventHandler.scrollViewport = function (event) {
  if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$viewport) {
    this.__scrollingElement__ = this.$viewport;
    this.$headScrollerViewport.scrollLeft = this.$viewport.scrollLeft;
    this.$leftViewport.scrollTop = this.$viewport.scrollTop;
    this.$vscrollbar.innerOffset = this.$viewport.scrollTop;
    this.$hscrollbar.innerOffset = this.$viewport.scrollLeft;

    if (this.__scrollTimer__ > 0) {
      clearTimeout(this.__scrollTimer__);
    }

    this.__scrollTimer__ = setTimeout(function () {
      this.__scrollingElement__ = undefined;
      this.__scrollTimer__ = -1;
    }.bind(this), 300);
  }
};

TableScroller.eventHandler.scrollHeadScrollerViewport = function (event) {
  if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$headScrollerViewport) {
    this.__scrollingElement__ = this.$headScrollerViewport;
    this.$viewport.scrollLeft = this.$headScrollerViewport.scrollLeft;

    if (this.__scrollTimer__ > 0) {
      clearTimeout(this.__scrollTimer__);
    }

    this.__scrollTimer__ = setTimeout(function () {
      this.__scrollingElement__ = undefined;
      this.__scrollTimer__ = -1;
    }.bind(this), 100);
  }
};

TableScroller.eventHandler.scrollLeftScrollerViewport = function () {
  if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$leftViewport) {
    this.__scrollingElement__ = this.$leftViewport;
    this.$viewport.scrollTop = this.$leftViewport.scrollTop;

    if (this.__scrollTimer__ > 0) {
      clearTimeout(this.__scrollTimer__);
    }

    this.__scrollTimer__ = setTimeout(function () {
      this.__scrollingElement__ = undefined;
      this.__scrollTimer__ = -1;
    }.bind(this), 100);
  }
};

TableScroller.prototype.clearChild = function () {
  this.$viewport.clearChild();
  this.$fixedViewport.clearChild();
  this.$headScrollerViewport.clearChild();
  this.$leftViewport.clearChild();
  this.$content = null;
  return this;
};

TableScroller.prototype.addChild = function (elt) {
  if (this.$viewport.childNodes.length == 0) {
    if (elt.tagName && elt.tagName.toLowerCase() == 'table') {
      elt.classList.add('absol-table-scroller-origin');
      this.$viewport.addChild(elt);
      this.$content = elt;

      this._updateContent();

      this.sync.then(this._updateContentSize.bind(this)).then(function () {
        setTimeout(this._updateContentSize.bind(this), 30);
      }.bind(this));
    } else {
      throw new Error('Element must be a table!');
    }
  } else {
    throw new Error("Only 1 table accepted!");
  }
};

TableScroller.prototype._updateFixedTable = function () {
  var fixedCol = this.fixedCol;
  this.$fixedViewport.clearChild();
  this.$fixedTable = TableScroller_$(this.$content.cloneNode(false)).addClass('absol-table-scroller-fixed-table').removeClass('absol-table-scroller-origin').addTo(this.$fixedViewport);
  this.$fixedTableThead = TableScroller_$(this.$contentThead.cloneNode(false)).addTo(this.$fixedTable);
  this.$fixedTableThead.clearChild();
  this._fixedTableThsVisible = [];
  var self = this;
  this._fixedTableTr = Array.prototype.filter.call(this.$contentThead.childNodes, function (elt) {
    return elt.tagName == "TR";
  }).map(function (tr) {
    var cloneTr = TableScroller_$(tr.cloneNode(false));
    cloneTr.__originElement__ = tr;
    self.$fixedTableThead.appendChild(cloneTr);
    return cloneTr;
  });
  this._fixedTableThs = this._fixedTableTr.map(function (tr) {
    return Array.prototype.filter.call(tr.__originElement__.childNodes, function (elt1) {
      return elt1.tagName == "TH" || elt1.tagName == "TD";
    }).reduce(function (ac, th) {
      var colspan = th.getAttribute('colspan');

      if (colspan) {
        colspan = parseInt(colspan);
      } else {
        colspan = 1;
      }

      ac.colspanSum += colspan;
      var cloneTh = TableScroller_$(th.cloneNode(true));
      tr.appendChild(cloneTh);
      cloneTh.__originElement__ = th;
      ac.result.push(cloneTh);

      if (ac.colspanSum <= fixedCol) {
        self._fixedTableThsVisible.push(th);
      }

      return ac;
    }, {
      result: [],
      colspanSum: 0
    }).result;
  });
};

TableScroller.prototype._updateHeaderScroller = function () {
  var self = this;
  this.$headScrollerViewport.clearChild();
  this.$headScrollerTable = TableScroller_$(this.$content.cloneNode(false)).removeClass('absol-table-scroller-origin').addTo(this.$headScrollerViewport);
  this.$headScrollerThead = TableScroller_$(this.$contentThead.cloneNode(false)).addTo(this.$headScrollerTable);
  this._headScrollerTr = Array.prototype.filter.call(this.$contentThead.childNodes, function (elt) {
    return elt.tagName == "TR";
  }).map(function (tr) {
    var cloneTr = TableScroller_$(tr.cloneNode(false));
    cloneTr.__originElement__ = tr;
    self.$headScrollerThead.appendChild(cloneTr);
    return cloneTr;
  });
  this._headScrollerTds = this._headScrollerTr.map(function (tr) {
    return Array.prototype.filter.call(tr.__originElement__.childNodes, function (elt1) {
      return elt1.tagName == "TH";
    }).map(function (th) {
      var cloneTh = TableScroller_$(th.cloneNode(true)).addTo(tr);
      cloneTh.__originElement__ = th;
      return cloneTh;
    });
  });
};

TableScroller.prototype._updateLeftTable = function () {
  this.$leftViewport.clearChild();
  this.$leftTable = TableScroller_$(this.$content.cloneNode(true)).addTo(this.$leftViewport);
};

TableScroller.prototype._updateContent = function () {
  this.$contentThead = TableScroller_$('thead', this.$content);

  this._updateFixedTable();

  this._updateHeaderScroller();

  this._updateLeftTable();
};

TableScroller.prototype._updateFixedTableSize = function () {
  var l = 1000;
  var r = -1000;

  this._fixedTableThsVisible.forEach(function (elt) {
    var b = elt.getBoundingClientRect();
    l = Math.min(l, b.left);
    r = Math.max(r, b.right);
  });

  this._leftWidth = Math.max(r - l, 0);
  this.$fixedViewport.addStyle('width', this._leftWidth + 2 + 'px');

  this._fixedTableTr.forEach(function (elt) {
    var styleHeight = elt.__originElement__.getBoundingClientRect().height + 'px';
    elt.addStyle('height', styleHeight);
  });

  this._fixedTableThs.forEach(function (row) {
    row.forEach(function (elt) {
      var styleWidth = elt.__originElement__.getBoundingClientRect().width + 'px';
      elt.addStyle('width', styleWidth);
    });
  });

  this.$fixedTable.addStyle({
    height: this.$contentThead.getBoundingClientRect().height + 'px',
    width: this.$content.getBoundingClientRect().width + 'px'
  });
};

TableScroller.prototype._updateHeaderScrollerSize = function () {
  var headHeight = this.$contentThead.getBoundingClientRect().height + 'px';
  this.$headScrollerTable.addStyle('height', headHeight);
  this.$headScrollerTable.addStyle('width', this.$content.getBoundingClientRect().width + 'px');

  this._headScrollerTr.forEach(function (elt) {
    var styleHeight = elt.__originElement__.getBoundingClientRect().height + 'px';
    elt.addStyle('height', styleHeight);
  });

  this._headScrollerTds.forEach(function (row) {
    row.forEach(function (elt) {
      var styleWidth = elt.__originElement__.getBoundingClientRect().width + 'px';
      elt.addStyle('width', styleWidth);
    });
  });
};

TableScroller.prototype._updateLeftTableSize = function () {
  this.$leftTable.addStyle('width', this.$content.getBoundingClientRect().width + 'px');
  this.$leftTable.addStyle('height', this.$content.getBoundingClientRect().height + 'px');
  this.$leftScroller.addStyle('width', this._leftWidth + 2 + 'px');
};

TableScroller.prototype._updateLinesSize = function () {
  if (this.$viewport.clientHeight < this.$viewport.scrollHeight) {
    this.addClass('scroll-v');
  } else {
    this.removeClass('scroll-v');
  }

  if (this.$viewport.clientWidth < this.$viewport.scrollWidth) {
    this.addClass('scroll-h');
  } else {
    this.removeClass('scroll-h');
  }

  this.$leftLine.addStyle({
    maxHeight: this.$content.getBoundingClientRect().height + 'px',
    left: this._leftWidth + 'px'
  });
  this.$headLine.addStyle({
    top: this.$contentThead.getBoundingClientRect().height + 'px',
    maxWidth: this.$content.getBoundingClientRect().width + 'px'
  });
};

TableScroller.prototype._updateScrollBarSize = function () {
  var viewportBound = this.$viewport.getBoundingClientRect();
  var tableBound = this.$content.getBoundingClientRect();
  this.$vscrollbar.innerHeight = this.$viewport.scrollHeight;
  this.$vscrollbar.outerHeight = viewportBound.height - TableScroller.scrollSize;
  this.$hscrollbar.innerWidth = this.$viewport.scrollWidth;
  this.$hscrollbar.outerWidth = viewportBound.width - TableScroller.scrollSize;
  var overHeight = this.$viewport.clientHeight < this.$viewport.scrollHeight;
  var overWidth = this.$viewport.clientWidth < this.$viewport.scrollWidth;

  if (overHeight) {
    if (overWidth) {
      this.$hscrollbarCtn.removeStyle('bottom');
      this.$vscrollbarCtn.removeStyle('right');
    } else {
      this.$vscrollbarCtn.addStyle('right', viewportBound.width - TableScroller.scrollSize - tableBound.width + 'px');
    }
  } else {
    if (overWidth) {
      this.$hscrollbarCtn.addStyle('bottom', viewportBound.height - TableScroller.scrollSize - tableBound.height + 'px');
    }
  }
};

TableScroller.prototype._updateContentSize = function () {
  if (!this.$fixedTable) return;

  this._updateFixedTableSize();

  this._updateHeaderScrollerSize();

  this._updateLeftTableSize();

  this._updateLinesSize();

  this._updateScrollBarSize();
};

TableScroller.property = {};
TableScroller.property.fixedCol = {
  set: function set(value) {
    value = value || 0;
    this._fixedCol = value;

    if (this.$content) {
      this._updateContent();

      this.sync.then(this._updateContentSize.bind(this)).then(function () {
        setTimeout(this._updateContentSize.bind(this), 30);
      }.bind(this));
    }
  },
  get: function get() {
    return this._fixedCol || 0;
  }
};
absol_acomp_ACore.install(TableScroller);
/* harmony default export */ const js_TableScroller = (TableScroller);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablevscroller.css
var tablevscroller = __webpack_require__(7818);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableVScroller.js



var TableVScroller_ = absol_acomp_ACore._;
var TableVScroller_$ = absol_acomp_ACore.$;

function TableVScroller() {
  var thisTS = this;
  this.$attachHook = TableVScroller_$('attachhook', this);
  this.$attachHook.updateSize = this.update.bind(this);
  this.sync = new Promise(function (rs) {
    thisTS.$attachHook.on('error', rs);
  });
  this.$viewport = TableVScroller_$('.absol-table-vscroller-viewport', this);
  this.$attachHook.on('error', function () {
    HTML5_Dom.addToResizeSystem(thisTS.$attachHook);
    this.updateSize();
  });
  this.$topTable = TableVScroller_$('.absol-table-vscroller-head', this);
  this.$headLine = TableVScroller_$('.absol-table-vscroller-head-line', this);
}

TableVScroller.tag = 'TableVScroller'.toLowerCase();

TableVScroller.render = function () {
  return TableVScroller_({
    "class": 'absol-table-vscroller',
    child: ['.absol-table-vscroller-viewport', 'table.absol-table-vscroller-head', '.absol-table-vscroller-head-line', 'attachhook']
  });
};

TableVScroller.prototype.clearChild = function () {
  this.$viewport.clearChild();
  this.$topTable.clearChild();
};

TableVScroller.prototype.addChild = function (elt) {
  if (this.$viewport.childNodes.length == 0) {
    if (elt.tagName && elt.tagName.toLowerCase() == 'table') {
      this.$viewport.addChild(elt);
      this.$table = TableVScroller_$(elt);
      this.$thead = TableVScroller_$('thead', elt);
      this.$tr = TableVScroller_$('tr', this.$thead);
      this.$topThead = this.$thead.cloneNode(true);
      this.$topTr = TableVScroller_$('tr', this.$topThead);
      this.$topTable.addChild(this.$topThead).addStyle('display', 'none');
      this.update();
    } else {
      throw new Error('Element must be a table!');
    }
  } else {
    throw new Error("Only 1 table accepted!");
  }
};

TableVScroller.prototype._trackBackgroundColor = function (element) {
  var current = this.$thead;
  var res;

  while (current && !res && res != 'rgba(0, 0, 0, 0)') {
    res = window.getComputedStyle(element).getPropertyValue('background-color');
    current = current.parentNode;
  }

  if (res == 'rgba(0, 0, 0, 0)') return 'white';
  return res;
};

TableVScroller.prototype.updateStyle = function () {
  if (!this.$thead) return;
  var clazz = this.$table.attr('class');

  if (clazz) {
    clazz = clazz.trim().split(/\s+/);

    for (var i = 0; i < clazz.length; ++i) {
      this.$topTable.addClass(clazz[i]);
    }
  }

  var bgColor = this._trackBackgroundColor(this.$thead);

  this.$topTable.addStyle('background-color', bgColor);
};

TableVScroller.prototype.updateSize = function () {
  var theadBound = this.$thead.getBoundingClientRect();
  var tableBound = this.$table.getBoundingClientRect();
  this.$topTable.addStyle({
    width: tableBound.width + 'px',
    height: theadBound.height + 'px'
  });
  this.$headLine.addStyle({
    top: theadBound.height + 'px',
    maxWidth: tableBound.width + 'px'
  });

  if (this.$viewport.clientHeight < this.$viewport.scrollHeight) {
    this.addClass('scroll-v');
  } else {
    this.removeClass('scroll-v');
  }

  var realNodes = this.$tr.childNodes;
  var topNodes = this.$topTr.childNodes;

  for (var i = 0; i < realNodes.length; ++i) {
    if (!realNodes[i].tagName) continue;
    var wstyle = window.getComputedStyle(TableVScroller_$(realNodes[i])).getPropertyValue('width');
    TableVScroller_$(topNodes[i]).attr('style', realNodes[i].attr('style')).addStyle('width', wstyle);
  }

  this.$topTable.removeStyle('display');
};

TableVScroller.prototype.update = function () {
  if (!this.$thead) return;
  this.updateStyle();
  this.updateSize();
};

absol_acomp_ACore.install(TableVScroller);
/* harmony default export */ const js_TableVScroller = (TableVScroller);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/textarea2.css
var textarea2 = __webpack_require__(9218);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu.js






/*global absol*/

var SelectMenu_ = absol_acomp_ACore._;
var SelectMenu_$ = absol_acomp_ACore.$;

absol_acomp_ACore.creator["dropdown-ico"] = function () {
  return SelectMenu_(['<svg class="dropdown" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">', '<g transform="translate(0,-197)">', '<path d="m6.3152 218.09a4.5283 4.5283 0 0 0-3.5673 7.3141l43.361 55.641a4.5283 4.5283 0 0 0 7.1421 7e-3l43.496-55.641a4.5283 4.5283 0 0 0-3.5673-7.3216z" />', '</g>', '</svg>'].join(''));
};

function SelectMenu_SelectMenu() {
  var thisSM = this;
  this._items = [];
  this._value = null;
  this._lastValue = null;
  this.$holderItem = SelectMenu_$('.absol-selectmenu-holder-item', this);
  this.$anchorCtn = SelectMenu_SelectMenu.getAnchorCtn();
  this.$anchor = SelectMenu_('.absol-selectmenu-anchor.absol-disabled').addTo(this.$anchorCtn);
  this.$anchorContentCtn = SelectMenu_('.absol-selectmenu-anchor-content-container').addTo(this.$anchor);
  this.$dropdownBox = SelectMenu_('.absol-selectmenu-dropdown-box').addTo(this.$anchorContentCtn);
  this.$searchTextInput = SelectMenu_('searchtextinput').addStyle('display', 'none').addTo(this.$dropdownBox);
  this.$vscroller = SelectMenu_('bscroller').addTo(this.$dropdownBox);
  this.$selectlist = SelectMenu_('selectlist', this).addTo(this.$vscroller).on('sizechangeasync', this.eventHandler.listSizeChangeAsync).on('valuevisibilityasync', this.eventHandler.listValueVisibility);
  this.$scrollTrackElts = [];
  this.$removableTrackElts = [];
  this._itemsByValue = {};
  this.$searchTextInput.on('stoptyping', this.eventHandler.searchModify);
  this._searchCache = {};
  this.$selectlist.on('pressitem', this.eventHandler.selectlistPressItem, true);
  this.$selectlist.on('pressitem', function () {
    thisSM.isFocus = false;
  }, true);
  this._lastValue = "NOTHING_VALUE";
  this._resourceReady = true;
  this.on('mousedown', this.eventHandler.click, true);
  this.on('blur', this.eventHandler.blur);
  this.selectListBound = {
    height: 0,
    width: 0
  };
  this.$attachhook = SelectMenu_$('attachhook', this).on('error', this.eventHandler.attached);
  this.sync = new Promise(function (rs) {
    SelectMenu_$('attachhook', this).once('error', function () {
      rs();
    });
  });
  this._selectListScrollSession = null;
  this._itemIdxByValue = null;
  return this;
}

SelectMenu_SelectMenu.tag = 'selectmenu-old';

SelectMenu_SelectMenu.render = function () {
  return SelectMenu_({
    "class": ['absol-selectmenu'],
    extendEvent: ['change', 'minwidthchange'],
    attr: {
      tabindex: '1'
    },
    child: ['.absol-selectmenu-holder-item', {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }, 'attachhook']
  });
};

SelectMenu_SelectMenu.optimizeResource = true; // //will remove after SelectMenu completed

SelectMenu_SelectMenu.getRenderSpace = function () {
  if (!SelectMenu_SelectMenu.getRenderSpace.warned) {
    console.warn('SelectMenu.getRenderSpace() will be removed in next version');
  }

  SelectMenu_SelectMenu.getRenderSpace.warned = true;

  if (!SelectMenu_SelectMenu.$renderSpace) {
    SelectMenu_SelectMenu.$renderSpace = SelectMenu_('.absol-selectmenu-render-space').addTo(document.body);
  }

  return SelectMenu_SelectMenu.$renderSpace;
};

SelectMenu_SelectMenu.getAnchorCtn = function () {
  if (!SelectMenu_SelectMenu.$anchorCtn) {
    SelectMenu_SelectMenu.$anchorCtn = SelectMenu_('.absol-selectmenu-anchor-container').addTo(document.body);
  }

  return SelectMenu_SelectMenu.$anchorCtn;
};

SelectMenu_SelectMenu.prototype.updateItem = function () {
  this.$holderItem.clearChild();

  if (this._itemsByValue[this.value]) {
    var elt = SelectMenu_({
      tag: 'selectlistitem',
      props: {
        data: this._itemsByValue[this.value]
      }
    }).addTo(this.$holderItem);

    elt.$descCtn.addStyle('width', this.$selectlist._descWidth + 'px');
  }
};

SelectMenu_SelectMenu.prototype._dictByValue = function (items) {
  var dict = {};
  var item;

  for (var i = 0; i < items.length; ++i) {
    item = items[i];
    dict[item.value + ''] = item;
  }

  return dict;
};

SelectMenu_SelectMenu.prototype.init = function (props) {
  props = props || {};
  Object.keys(props).forEach(function (key) {
    if (props[key] === undefined) delete props[key];
  });

  if (!('value' in props)) {
    if (props.items && props.items.length > 0) props.value = typeof props.items[0] == 'string' ? props.items[0] : props.items[0].value;
  }

  var value = props.value;
  delete props.value;
  this["super"](props);
  this.value = value;
};

SelectMenu_SelectMenu.property = {};
SelectMenu_SelectMenu.property.items = {
  set: function set(value) {
    this._searchCache = {};
    this._itemIdxByValue = null;
    /**
     * verity data
     */

    if (value) {
      value.forEach(function (it) {
        if (it && it.text) {
          it.text = it.text + '';
        }
      });
    }

    this._items = value;
    this._itemsByValue = this._dictByValue(value);

    if (!this._itemsByValue[this.value] && value.length > 0) {
      this.value = value[0].value;
    } else this.updateItem();

    this.$dropdownBox.removeStyle('min-width');
    this.selectListBound = this.$selectlist.setItemsAsync(value || []);
    this.style.setProperty('--select-list-desc-width', this.$selectlist.measuredSize.descWidth + 'px');
    this._resourceReady = true;
    this.addStyle('min-width', this.selectListBound.width + 2 + 23 + 'px');
    this.emit('minwidthchange', {
      target: this,
      value: this.selectListBound.width + 2 + 23,
      type: 'minwidthchange'
    }, this);
  },
  get: function get() {
    return this._items || [];
  }
};
SelectMenu_SelectMenu.property.value = {
  set: function set(value) {
    this.$selectlist.value = value;
    this._lastValue = value;
    this.updateItem();
  },
  get: function get() {
    return this.$selectlist.value;
  }
};
SelectMenu_SelectMenu.property.enableSearch = {
  set: function set(value) {
    this._enableSearch = !!value;

    if (value) {
      this.$searchTextInput.removeStyle('display');
    } else {
      this.$searchTextInput.addStyle('display', 'none');
    }
  },
  get: function get() {
    return !!this._enableSearch;
  }
};

SelectMenu_SelectMenu.prototype.updateDropdownPostion = function (updateAnchor) {
  if (!this.isFocus) {
    this.$anchorContentCtn.removeStyle('left').removeStyle('top');
    this.$dropdownBox.removeStyle('min-width');
    return;
  }

  var bound = this.getBoundingClientRect();

  if (!updateAnchor) {
    var outBound = HTML5_Dom.traceOutBoundingClientRect(this);

    if (!this.isFocus || bound.top > outBound.bottom || bound.bottom < outBound.top) {
      this.isFocus = false;
      return;
    }

    var anchorOutBound = HTML5_Dom.traceOutBoundingClientRect(this.$anchor);
    var searchBound = this.$searchTextInput.getBoundingClientRect();
    var availableTop = bound.top - anchorOutBound.top - (this.enableSearch ? searchBound.height + 8 : 0) - 20;
    var availableBottom = anchorOutBound.bottom - bound.bottom - (this.enableSearch ? searchBound.height + 8 : 0) - 20;

    if (this.forceDown || availableBottom >= this.selectListBound.height || availableBottom > availableTop) {
      this.isDropdowUp = false;

      if (this.$dropdownBox.firstChild != this.$searchTextInput) {
        this.$searchTextInput.selfRemove();
        this.$dropdownBox.addChildBefore(this.$searchTextInput, this.$vscroller);
      }

      this.$vscroller.addStyle('max-height', availableBottom + 'px');
    } else {
      this.isDropdowUp = true;

      if (this.$dropdownBox.lastChild != this.$searchTextInput) {
        this.$searchTextInput.selfRemove();
        this.$dropdownBox.addChild(this.$searchTextInput);
      }

      this.$vscroller.addStyle('max-height', availableTop + 'px');
    }

    this.$dropdownBox.addStyle('min-width', bound.width + 'px');
  }

  var anchorBound = this.$anchor.getBoundingClientRect();

  if (this.isDropdowUp) {
    this.$anchorContentCtn.addStyle({
      left: bound.left - anchorBound.left + 'px',
      top: bound.top - anchorBound.top - this.$dropdownBox.clientHeight - 1 + 'px'
    });
  } else {
    this.$anchorContentCtn.addStyle({
      left: bound.left - anchorBound.left + 'px',
      top: bound.bottom - anchorBound.top + 'px'
    });
  }
};

SelectMenu_SelectMenu.prototype.scrollToSelectedItem = function () {
  var self = this;
  setTimeout(function () {
    if (self.$selectlist.$selectedItem) {
      var fistChildBound = self.$selectlist.childNodes[1].getBoundingClientRect();
      var lastChildBound = self.$selectlist.lastChild.getBoundingClientRect();
      var listBound = {
        top: fistChildBound.top,
        height: lastChildBound.bottom - fistChildBound.top,
        bottom: lastChildBound.bottom
      };
      var itemBound = self.$selectlist.$selectedItem.getBoundingClientRect();

      if (self.isDropdowUp) {
        var scrollBound = self.$vscroller.getBoundingClientRect();
        self.$vscroller.scrollTop = Math.max(itemBound.bottom - scrollBound.height - listBound.top, 0);
      } else {
        self.$vscroller.scrollTop = itemBound.top - listBound.top;
      }
    }
  }.bind(this), 3);
};

SelectMenu_SelectMenu.prototype.startTrackScroll = function () {
  var trackElt = this.parentElement;

  while (trackElt) {
    if (trackElt.addEventListener) {
      trackElt.addEventListener('scroll', this.eventHandler.scrollParent, false);
    } else {
      trackElt.attachEvent('onscroll', this.eventHandler.scrollParent, false);
    }

    this.$scrollTrackElts.push(trackElt);
    trackElt = trackElt.parentElement;
  }

  if (document.addEventListener) {
    document.addEventListener('scroll', this.eventHandler.scrollParent, false);
    document.addEventListener('wheel', this.eventHandler.wheelDocument, true);
  } else {
    document.attachEvent('onscroll', this.eventHandler.scrollParent, false);
  }

  this.$scrollTrackElts.push(document);
};

SelectMenu_SelectMenu.prototype.stopTrackScroll = function () {
  var trackElt;

  for (var i = 0; i < this.$scrollTrackElts.length; ++i) {
    trackElt = this.$scrollTrackElts[i];

    if (trackElt.removeEventListener) {
      trackElt.removeEventListener('scroll', this.eventHandler.scrollParent, false);
    } else {
      trackElt.dettachEvent('onscroll', this.eventHandler.scrollParent, false);
    }
  }

  this.$scrollTrackElts = [];
};

SelectMenu_SelectMenu.prototype.startListenRemovable = function () {
  var removableElt = this.parentElement;

  while (removableElt) {
    if (removableElt.isSupportedEvent && removableElt.isSupportedEvent('remove')) {
      removableElt.on('remove', this.eventHandler.removeParent);
    }

    removableElt = removableElt.parentElement;
  }
};

SelectMenu_SelectMenu.prototype.stopListenRemovable = function () {
  var removableElt;

  while (this.$removableTrackElts.length > 0) {
    removableElt = this.$removableTrackElts.pop();
    removableElt.off('remove', this.eventHandler.removeParent);
  }
};

SelectMenu_SelectMenu.prototype._releaseResource = function () {
  this.$selectlist.items = [];
};

SelectMenu_SelectMenu.prototype._requestResource = function () {
  this.$selectlist.items = this._items || [];
};

SelectMenu_SelectMenu.property.isFocus = {
  set: function set(value) {
    var self = this;
    value = !!value;
    if (value == this.isFocus) return;
    this._isFocus = value;

    if (value) {
      this.startTrackScroll();
      this.selectListScrollToken = null; //force scroll

      var isAttached = false;
      setTimeout(function () {
        if (isAttached) return;
        SelectMenu_$('body').on('mousedown', self.eventHandler.bodyClick);
        isAttached = true;
      }, 1000);
      SelectMenu_$('body').once('click', function () {
        setTimeout(function () {
          if (isAttached) return;
          SelectMenu_$('body').on('mousedown', self.eventHandler.bodyClick);
          isAttached = true;
        }, 10);
      });

      if (this.enableSearch) {
        setTimeout(function () {
          self.$searchTextInput.focus();
        }, 50);
      }

      this.updateDropdownPostion();
      this.scrollToSelectedItem();
      this.$anchor.removeClass('absol-disabled');
    } else {
      this.$anchor.addClass('absol-disabled');
      this.stopTrackScroll();
      SelectMenu_$('body').off('mousedown', this.eventHandler.bodyClick);
      setTimeout(function () {
        if (self.$searchTextInput.value != 0) {
          self.$searchTextInput.value = '';
          self.$selectlist.items = self.items;
          self._resourceReady = true;
          self.$selectlist.removeClass('as-searching');
        }
      }, 100);
      this.updateItem();
    }
  },
  get: function get() {
    return !!this._isFocus;
  }
};
SelectMenu_SelectMenu.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('disabled');
    } else {
      this.removeClass('disabled');
    }
  },
  get: function get() {
    return this.containsClass('disabled');
  }
};
SelectMenu_SelectMenu.property.hidden = {
  set: function set(value) {
    if (value) {
      this.addClass('hidden');
    } else {
      this.removeClass('hidden');
    }
  },
  get: function get() {
    return this.addClass('hidden');
  }
};
SelectMenu_SelectMenu.property.selectedIndex = {
  get: function get() {
    if (!this._itemIdxByValue) {
      this._itemIdxByValue = {};

      for (var i = 0; i < this._items.length; ++i) {
        this._itemIdxByValue[this._items[i].value] = i;
      }
    }

    var idx = this._itemIdxByValue[this._value];
    return idx >= 0 ? idx : -1;
  }
};
/**
 * @type {SelectMenu}
 */

SelectMenu_SelectMenu.eventHandler = {};

SelectMenu_SelectMenu.eventHandler.attached = function () {
  if (this._updateInterval) return;
  if (!this.$anchor.parentNode) this.$anchor.addTo(this.$anchorCtn);
  this.$attachhook.updateSize = this.$attachhook.updateSize || this.updateDropdownPostion.bind(this);
  HTML5_Dom.addToResizeSystem(this.$attachhook);
  this.stopListenRemovable();
  this.startListenRemovable();

  if (!this._resourceReady) {
    this._requestResource();

    this._resourceReady = true;
  }

  this._updateInterval = setInterval(function () {
    if (!this.isDescendantOf(document.body)) {
      clearInterval(this._updateInterval);
      this._updateInterval = undefined;
      this.$anchor.selfRemove();
      this.stopTrackScroll();
      this.stopListenRemovable();
      this.eventHandler.removeParent();
    }
  }.bind(this), 10000);
};

SelectMenu_SelectMenu.eventHandler.scrollParent = function (event) {
  var self = this;

  if (this._scrollFrameout > 0) {
    this._scrollFrameout = 10;
    return;
  }

  this._scrollFrameout = this._scrollFrameout || 10;

  function update() {
    self.updateDropdownPostion(false);
    self.scrollToSelectedItem();
    self._scrollFrameout--;
    if (self._scrollFrameout > 0) requestAnimationFrame(update);
  }

  update();
};

SelectMenu_SelectMenu.eventHandler.removeParent = function (event) {
  this._releaseResource();

  this._resourceReady = false;
};

SelectMenu_SelectMenu.eventHandler.click = function (event) {
  if (HTML5_EventEmitter.isMouseRight(event)) return;
  this.isFocus = !this.isFocus;
};

SelectMenu_SelectMenu.eventHandler.bodyClick = function (event) {
  if (!HTML5_EventEmitter.hitElement(this, event) && !HTML5_EventEmitter.hitElement(this.$anchor, event)) {
    setTimeout(function () {
      this.isFocus = false;
    }.bind(this), 5);
  }
};

SelectMenu_SelectMenu.eventHandler.selectlistPressItem = function (event) {
  this.updateItem();

  if (this._lastValue != this.value) {
    event.lastValue = this._lastValue;
    event.value = this.value;
    setTimeout(function () {
      this.emit('change', event, this);
    }.bind(this), 1);
    this._lastValue = this.value;
  }
};

SelectMenu_SelectMenu.eventHandler.searchModify = function (event) {
  var filterText = this.$searchTextInput.value.replace(/((\&nbsp)|(\s))+/g, ' ').trim();

  if (filterText.length == 0) {
    this._resourceReady = true;
    this.$selectlist.items = this.items;
    this.scrollToSelectedItem();
    this.$selectlist.removeClass('as-searching');
  } else {
    this.$selectlist.addClass('as-searching');
    var view = [];

    if (!this._searchCache[filterText]) {
      if (this._items.length > 0 && !this._items[0].__nvnText__) {
        prepareSearchForList(this._items);
      }

      view = searchListByText(filterText, this._items);
      this._searchCache[filterText] = view;
    } else {
      view = this._searchCache[filterText];
    }

    this.$selectlist.items = view;
    this._resourceReady = true;
    this.$vscroller.scrollTop = 0;
  }

  this.selectListBound = this.$selectlist.getBoundingClientRect();
  this.updateDropdownPostion(true);
};

SelectMenu_SelectMenu.eventHandler.listSizeChangeAsync = function () {
  this.updateDropdownPostion();
};

SelectMenu_SelectMenu.eventHandler.listValueVisibility = function (event) {
  if (!this.isFocus) return;
  if (this._selectListScrollSession == event.session) return;
  this._selectListScrollSession = event.session;
  this.scrollToSelectedItem();
};

absol_acomp_ACore.install(SelectMenu_SelectMenu);
/* harmony default export */ const js_SelectMenu = (SelectMenu_SelectMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextArea2.js




var TextArea2_ = absol_acomp_ACore._;
var TextArea2_$ = absol_acomp_ACore.$;

function TextArea2() {
  this.on('keydown', this.eventHandler.keydown);
  this.on('paste', this.eventHandler.paste);
  this.on('cut', this.eventHandler.paste);
}

TextArea2.tag = 'TextArea2'.toLowerCase();

TextArea2.render = function () {
  return TextArea2_('textarea.absol-textarea2');
};

TextArea2.getRenderPre = function () {
  if (!TextArea2.$preSpace) {
    TextArea2.$preSpace = TextArea2_('textarea').addStyle({
      'overflow': 'hidden',
      'height': '12px',
      'resize': 'none'
    }).addTo(js_SelectMenu.getRenderSpace());
  }

  return TextArea2.$preSpace;
};

TextArea2.eventHandler = {};

TextArea2.eventHandler.keydown = function (event) {
  if (event.altKey || event.ctrlKey) return;
  var key = event.key;
  var selectPost = this.getInputSelection();
  var leftText = this.value.substring(0, selectPost.start);
  var rightText = this.value.substring(selectPost.end);
  var middText = '';

  if (key == 'Enter') {
    middText = '\n';
  } else if (key == 'Backspace') {
    if (leftText.length > 0) {
      leftText = leftText.substring(0, leftText.length - 1);
    }
  } else if (key == 'Delete') {
    if (selectPost.start < selectPost.end) {
      middText = '';
    } else if (rightText.length > 0) {
      rightText = rightText.substring(1);
    }
  } else if (key.length == 1) {
    //char
    middText = key;
  } else {
    return;
  }

  var newText = leftText + middText + rightText;

  var heightSyle = this._measureHeight(newText);

  this.addStyle('height', heightSyle);
};

TextArea2.eventHandler.paste = function (event) {
  // var text  = 
  var cl = event.clipboardData || window.clipboardData;
  var middText = cl.getData('Text') || '';
  var selectPost = this.getInputSelection();
  var leftText = this.value.substring(0, selectPost.start);
  var rightText = this.value.substring(selectPost.end);
  var newText = leftText + middText + rightText;

  var heightSyle = this._measureHeight(newText);

  this.addStyle('height', heightSyle);
};

TextArea2.eventHandler.cut = function (event) {
  // var text  = 
  var cl = event.clipboardData || window.clipboardData;
  var selectPost = this.getInputSelection();
  var leftText = this.value.substring(0, selectPost.start);
  var rightText = this.value.substring(selectPost.end);
  var newText = leftText + rightText;

  var heightSyle = this._measureHeight(newText);

  this.addStyle('height', heightSyle);
};

TextArea2.prototype._measureHeight = function (text) {
  var pre = TextArea2.getRenderPre();
  pre.addStyle('padding-left', this.getComputedStyleValue('padding-left'));
  pre.addStyle('padding-right', this.getComputedStyleValue('padding-right'));
  pre.addStyle('padding-top', this.getComputedStyleValue('padding-top'));
  pre.addStyle('padding-bottom', this.getComputedStyleValue('padding-bottom'));
  pre.addStyle('width', this.getComputedStyleValue('width'));
  pre.addStyle('height', this.getFontSize() + 'px');
  pre.addStyle('boder', this.getComputedStyleValue('boder'));
  pre.addStyle('font-size', this.getComputedStyleValue('font-size'));
  pre.addStyle('font-family', this.getComputedStyleValue('font-family'));
  pre.value = text;
  var result = pre.scrollHeight + 'px';
  return result;
};
/**
 * Return an object with the selection range or cursor position (if both have the same value)
 * @param {DOMElement} el A dom element of a textarea or input text.
 * @return {Object} reference Object with 2 properties (start and end) with the identifier of the location of the cursor and selected text.
 **/


TextArea2.prototype.getInputSelection = function () {
  var start = 0,
      end = 0,
      normalizedValue,
      range,
      textInputRange,
      len,
      endRange;

  if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") {
    start = this.selectionStart;
    end = this.selectionEnd;
  } else {
    range = document.selection.createRange();

    if (range && range.parentElement() == this) {
      len = this.value.length;
      normalizedValue = this.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input

      textInputRange = this.createTextRange();
      textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end
      // of the input, since moveStart/moveEnd doesn't return what we want
      // in those cases

      endRange = this.createTextRange();
      endRange.collapse(false);

      if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
        start = end = len;
      } else {
        start = -textInputRange.moveStart("character", -len);
        start += normalizedValue.slice(0, start).split("\n").length - 1;

        if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
          end = len;
        } else {
          end = -textInputRange.moveEnd("character", -len);
          end += normalizedValue.slice(0, end).split("\n").length - 1;
        }
      }
    }
  }

  return {
    start: start,
    end: end
  };
};

absol_acomp_ACore.install(TextArea2);
/* harmony default export */ const js_TextArea2 = (TextArea2);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/textclipboard.css
var textclipboard = __webpack_require__(3367);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextClipboard.js


var TextClipboard_ = absol_acomp_ACore._;
var TextClipboard_$ = absol_acomp_ACore.$;

function TextClipboard() {
  this.$textarea = TextClipboard_('<textarea class="absol-text-clipboard" wrap="off" autocorrect="off"' + ' autocapitalize="off" spellcheck="false"></textarea>').addTo(this);
}

TextClipboard.tag = 'TextClipboard'.toLowerCase();

TextClipboard.render = function () {
  return TextClipboard_({
    style: {
      positon: 'fixed',
      opacity: 0,
      width: '1px',
      height: '1px',
      top: 0,
      left: 0
    }
  });
};

TextClipboard.prototype.copy = function (text) {
  this.$textarea.value = text;
  this.$textarea.select();
  document.execCommand('copy');
};

TextClipboard.prototype.paste = function () {
  this.$textarea.select();
  document.execCommand('paste');
};

absol_acomp_ACore.install(TextClipboard);
/* harmony default export */ const js_TextClipboard = (TextClipboard);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeinput.css
var timeinput = __webpack_require__(2870);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeInput.js








var TimeInput_STATE_NEW = 1;
var TimeInput_STATE_EDITED = 2;
var TimeInput_STATE_NONE = 0;
var TimeInput_ = absol_acomp_ACore._;
var TimeInput_$ = absol_acomp_ACore.$;
/***
 * @extends {AElement}
 * @constructor
 */

function TimeInput() {
  this._editingData = {};
  this._isOpenPicker = false;
  this._lastEmitValue = null;
  this._hour = null;
  this._minute = null;
  this._format = 'hh:mm a';
  this.$clockBtn = TimeInput_$('.as-time-input-icon-btn', this).on('click', this.eventHandler.clickClockBtn);
  this.$text = TimeInput_$('input', this).on('mousedown', this.eventHandler.mouseDownInput).on('mouseup', this.eventHandler.mouseUpInput).on('dblclick', this.eventHandler.dblclickInput).on('keydown', this.eventHandler.keydown).on('blur', this.eventHandler.inputBlur).on('contextmenu', function (event) {
    event.preventDefault();
  });
  this.$clearBtn = TimeInput_$('button.as-time-input-clear-btn', this).on('click', this.clear.bind(this));
  this.$domSignal = TimeInput_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('request_auto_select', this._autoSelect.bind(this));
  this.dayOffset = null;
  this.hour = null;
  this.minute = null;
  this.disabled = false;
  this.notNull = true;
}

TimeInput.tag = 'timeinput';

TimeInput.render = function () {
  return TimeInput_({
    "class": 'ac-time-input',
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      "class": 'as-time-input-text',
      attr: {
        type: 'text'
      }
    }, {
      tag: 'button',
      "class": 'as-time-input-clear-btn',
      child: 'span.mdi.mdi-close-circle'
    }, {
      tag: 'button',
      "class": 'as-time-input-icon-btn',
      child: 'span.mdi.mdi-clock-outline'
    }]
  });
};

TimeInput.prototype._autoSelect = js_DateTimeInput.prototype._autoSelect;
TimeInput.prototype.tokenMap = {
  h: 'h',
  H: 'H',
  HH: 'H',
  hh: 'h',
  m: 'm',
  mm: 'm',
  a: 'a'
};
TimeInput.prototype.tokenRegex = js_DateTimeInput.prototype.tokenRegex;
TimeInput.prototype._tokenAt = js_DateTimeInput.prototype._tokenAt;
TimeInput.prototype._editNextToken = js_DateTimeInput.prototype._editNextToken;
TimeInput.prototype._editPrevToken = js_DateTimeInput.prototype._editPrevToken;
TimeInput.prototype._makeTokenDict = js_DateTimeInput.prototype._makeTokenDict;

TimeInput.prototype._makeValueDict = function (hour, minute) {
  var res = {};

  if (typeof hour == 'number' && hour >= 0 && hour < 24) {
    res.h = {
      value: 1 + (hour - 1) % 12
    };
    res.H = {
      value: hour
    };
    res.a = {
      value: hour >= 12 ? 'PM' : 'AM'
    };
  } else {
    res.h = {
      value: NaN
    };
    res.H = {
      value: NaN
    };
    res.a = {
      value: 'a'
    };
  }

  if (typeof minute === "number" && minute >= 0 && minute < 60) {
    res.m = {
      value: minute
    };
  } else {
    res.m = {
      value: NaN
    };
  }

  return res;
};

TimeInput.prototype._applyValue = function (hour, minute) {
  this._hour = hour;
  this._minute = minute;
  this.$text.value = this._applyTokenDict(this._format, this._makeValueDict(hour, minute));

  this._updateNullClass();
};

TimeInput.prototype._updateNullClass = function () {
  if (this._hour == null && this._minute == null) {
    this.addClass('as-value-null');
  } else {
    this.removeClass('as-value-null');
  }
};

TimeInput.prototype._applyTokenDict = function (format, dict) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var tokenMap = this.tokenMap;
  return format.replace(rgx, function (full, g1, g2, sourceText) {
    if (g1 && g1 === 'a') {
      return dict[g1].value;
    } else if (g1 && tokenMap[g1]) {
      var ident = tokenMap[g1];

      if (dict[ident] && !isNaN(dict[ident].value)) {
        return zeroPadding(dict[ident].value, g1.length);
      } else {
        return full;
      }
    } else return full;
  });
};

TimeInput.prototype._correctingInput = function () {
  var tkDict = this._makeTokenDict(this.$text.value); // TODO: check min, max,

};

TimeInput.prototype._correctingCurrentToken = function () {
  var token = this._tokenAt(this.$text.selectionStart);

  if (!token) return;
  var value;

  if (token.ident === 'a') {
    if (token.text !== 'a' && token.text !== 'AM' && token.text !== 'PM') {
      token.replace('a', false);
    }
  } else {
    value = parseInt(token.text);
    var rqMin = {
      h: 1,
      hh: 1,
      m: 0,
      mm: 0,
      H: 0,
      HH: 0
    }[token.ident];
    var rqMax = {
      H: 23,
      HH: 23,
      h: 12,
      hh: 12,
      m: 59,
      mm: 59
    }[token.ident];

    if (rqMin !== undefined) {
      if (!isNaN(value)) {
        if (value < rqMin || value > rqMin) {
          value = Math.max(rqMin, Math.min(rqMax, value));
          token.replace(zeroPadding(value, token.ident.length), false);
          this._editingData[this.tokenMap[token.ident]] = value;
        }
      } else if (token.text !== token.ident) {
        token.replace(token.ident, false);
      }
    }
  }
};

TimeInput.prototype._loadValueFromInput = function () {
  var tkDick = this._makeTokenDict(this.$text.value);

  var hour = NaN;
  var minute = NaN;

  if (tkDick.H) {
    hour = Math.min(23, Math.max(0, tkDick.H.value));
  } else if (tkDick.h) {
    hour = Math.min(12, Math.max(1, tkDick.h.value));

    if (tkDick.a && tkDick.a.value === 'PM') {
      hour += 12;
    }
  }

  if (tkDick.m) {
    minute = Math.min(59, Math.max(0, tkDick.m.value));
  }

  this._hour = isNaN(hour) ? null : hour;
  this._minute = isNaN(minute) ? null : minute;

  this._updateNullClass();
};

TimeInput.prototype.clear = function (event) {
  this._applyValue(null, null);

  this._notifyIfChange(event);
};

TimeInput.prototype._notifyIfChange = function (event) {
  if (this._lastEmitValue === this.dayOffset) return;
  this.emit('change', {
    type: 'change',
    target: this,
    dayOffset: this.dayOffset,
    hour: this.hour,
    minute: this.minute,
    originEvent: event
  }, this);
  this._lastEmitValue = this.dayOffset;
};

TimeInput.property = {};
TimeInput.property.hour = {
  set: function set(value) {
    if (typeof value == "number") {
      value = value % 24 || 0;
    } else {
      value = null;
    }

    this._applyValue(value, this._minute);

    this._lastEmitValue = this.dayOffset;
  },
  get: function get() {
    return this._hour;
  }
};
TimeInput.property.minute = {
  set: function set(value) {
    if (typeof value == "number") {
      value = value % 60 || 0;
    } else {
      value = null;
    }

    this._applyValue(this._hour, value);

    this._lastEmitValue = this.dayOffset;
  },
  get: function get() {
    return this._minute;
  }
};
TimeInput.property.dayOffset = {
  set: function set(value) {
    if (typeof value == "number" || value && value.getTime) {
      value = value || 0;
      if (value.getTime) value = value.getTime() - beginOfDay(value).getTime();else {
        value = value % MILLIS_PER_DAY;
      }
      this.hour = Math.floor(value / MILLIS_PER_HOUR);
      this.minute = Math.floor(value % MILLIS_PER_HOUR / MILLIS_PER_MINUTE);
    } else {
      this.hour = null;
      this.minute = null;
    }
  },
  get: function get() {
    if (this._hour === null || this._minute === null) return null;
    return this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE;
  }
};
TimeInput.property.disabled = {
  set: function set(value) {
    value = !!value;
    this._disabled = value;
    if (value) this.addClass('as-disabled');else this.removeClass('as-disabled');
    this.$text.disabled = value;
  },
  get: function get() {
    return this._disabled;
  }
};
TimeInput.property.format = {
  enumerable: true,
  configurable: true,
  set: function set(value) {
    if (typeof value !== "string") value = "hh:mm a";
    value = value || 'hh:mm a';
    this._format = value;
    this.dayOffset = this['dayOffset'];
  },
  get: function get() {
    return this._format;
  }
};
TimeInput.property.s24 = {
  get: function get() {
    var t = this.format.match(new RegExp(this.tokenRegex.source, 'g'));
    return !t || t.indexOf('a') < 0;
  }
};
TimeInput.property.notNull = {
  set: function set(value) {
    if (value) {
      if (this.dayOffset === null) {
        this.dayOffset = 0;
      }

      this.addClass('as-must-not-null');
    } else {
      this.removeClass('as-must-not-null');
    }
  },
  get: function get() {
    return this.containsClass('as-must-not-null');
  }
};
TimeInput.eventHandler = {};

TimeInput.eventHandler.clickClockBtn = function () {
  this._attachPicker(this);
};

TimeInput.eventHandler.mouseUpInput = js_DateTimeInput.eventHandler.mouseUpInput;
TimeInput.eventHandler.mouseDownInput = js_DateTimeInput.eventHandler.mouseDownInput;
TimeInput.eventHandler.dblclickInput = js_DateTimeInput.eventHandler.dblclickInput;
TimeInput.eventHandler.inputBlur = js_DateTimeInput.eventHandler.inputBlur;

TimeInput.eventHandler.clickOut = function (event) {
  if (hitElement(this.share.$picker, event)) return;

  this._releasePicker();
};

TimeInput.eventHandler.pickerChange = function (event) {
  this._applyValue(event.hour, event.minute);

  this._notifyIfChange(event);
};
/***
 *
 * @param {KeyboardEvent} event
 */


TimeInput.eventHandler.keydown = function (event) {
  var token = this._tokenAt(this.$text.selectionStart);

  var endToken = this._tokenAt(this.$text.selectionEnd);

  if (!token) {
    if (event.key === 'Enter') {
      this._correctingInput();

      this._loadValueFromInput();

      this._notifyIfChange(event);
    }

    return;
  }

  var newTokenText;
  var value;

  if (event.key.startsWith('Arrow')) {
    event.preventDefault();

    switch (event.key) {
      case 'ArrowLeft':
        this._editPrevToken();

        break;

      case 'ArrowRight':
        this._editNextToken();

        break;

      case 'ArrowUp':
      case 'ArrowDown':
        switch (token.ident) {
          case "H":
          case "HH":
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.H = event.key === 'ArrowUp' ? 0 : 23;
            } else {
              this._editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24;
            }

            newTokenText = zeroPadding(this._editingData.H, token.ident.length);
            token.replace(newTokenText, true);
            break;

          case "hh":
          case 'h':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.h = event.key === 'ArrowUp' ? 1 : 12;
            } else {
              this._editingData.h = 1 + (value + (event.key === 'ArrowUp' ? 0 : 10)) % 12;
            }

            newTokenText = this._editingData.h + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case "mm":
          case 'm':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.m = event.key === 'ArrowUp' ? 0 : 59;
            } else {
              this._editingData.m = (value + (event.key === 'ArrowUp' ? 1 : 59)) % 60;
            }

            newTokenText = this._editingData.m + '';

            while (newTokenText.length < token.ident.length) {
              newTokenText = '0' + newTokenText;
            }

            token.replace(newTokenText, true);
            break;

          case 'a':
            value = token.text;
            this._editingData.a = value === 'PM' ? "AM" : "PM";
            newTokenText = this._editingData.a;
            token.replace(newTokenText, true);
            break;
        }

        break;
    }
  } else if (event.key === "Delete" || event.key === 'Backspace') {
    event.preventDefault();

    if (endToken.idx !== token.idx) {
      if (this.notNull) {
        this.$text.value = formatDateTime(beginOfDay(new Date()), this.format);
      } else {
        this.$text.value = this._format;
      }

      this.$text.select();
    } else {
      if (this.notNull) {
        token.replace(token.ident === 'a' ? 'AM' : zeroPadding(token.ident === 'hh' || token.ident === 'h' ? 12 : 0, token.ident.length), true);
      } else {
        token.replace(token.ident, true);
      }

      if (event.key === "Delete") this._editNextToken();else this._editPrevToken();
    }
  } else if (event.key === "Enter" || event.key === 'Tab') {
    this._correctingInput();

    this._loadValueFromInput();

    this._notifyIfChange(event);
  } else if (event.ctrlKey) {
    switch (event.key) {
      case 'a':
      case 'A':
        break;

      case 'c':
      case 'C':
        break;

      case 'x':
      case 'X':
        this.domSignal.once('clear_value', function () {
          this.$text.value = this._format;
          this.$text.select();
        }.bind(this));
        this.domSignal.emit('clear_value');
        break;

      default:
        event.preventDefault();
    }
  } else if (event.key.match(/^[0-9]$/g)) {
    event.preventDefault();
    var dVal = parseInt(event.key);

    if (this._editingData.state === TimeInput_STATE_NEW) {
      switch (token.ident) {
        case 'm':
        case 'mm':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = TimeInput_STATE_EDITED;

          if (dVal > 5) {
            this._editNextToken();
          }

          break;

        case 'h':
        case 'hh':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = TimeInput_STATE_EDITED;

          if (dVal > 1) {
            this._editNextToken();
          }

          break;

        case 'H':
        case 'HH':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = TimeInput_STATE_EDITED;

          if (dVal > 2) {
            this._editNextToken();
          }

          break;
      }
    } else {
      switch (token.ident) {
        case 'm':
        case 'mm':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(59, dVal));
          this._editingData.m = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'h':
        case 'hh':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(12, dVal));
          this._editingData.h = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'H':
        case 'HH':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(23, dVal));
          this._editingData.H = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;
      }
    }
  } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') {
    event.preventDefault();

    if (event.key.match(/^[aAsS]$/)) {
      token.replace('AM', true);
      this._editingData.a = "AM";
    } else {
      token.replace('PM', true);
      this._editingData.a = "PM";
    }

    this._editNextToken();
  } else {
    event.preventDefault();
  }
};

TimeInput.prototype.share = {
  $picker: null,
  $holdingInput: null,
  $follower: null
};

TimeInput.prototype._preparePicker = function () {
  if (this.share.$picker) return;
  this.share.$picker = TimeInput_({
    tag: js_ChromeTimePicker.tag,
    "class": 'as-time-input-picker'
  });
  this.share.$follower = TimeInput_({
    tag: 'follower',
    "class": 'as-time-input-follower',
    child: this.share.$picker
  });
};

TimeInput.prototype._attachPicker = function () {
  this._preparePicker();

  if (this.share.$holdingInput) this.share.$holdingInput._releasePicker();
  this.share.$holdingInput = this;
  this.share.$follower.addTo(document.body);
  this.share.$follower.followTarget = this;
  this.share.$follower.addStyle('visibility', 'hidden');
  this.share.$picker.hour = this.hour || 0;
  this.share.$picker.minute = this.minute || 0;
  this.share.$picker.s24 = this.s24;
  this.share.$picker.domSignal.emit('request_scroll_into_selected');
  this.$clockBtn.off('click', this.eventHandler.clickClockBtn);
  this.share.$picker.on('change', this.eventHandler.pickerChange);
  setTimeout(function () {
    document.body.addEventListener('click', this.eventHandler.clickOut);
    this.share.$follower.removeStyle('visibility');
  }.bind(this), 5);
};

TimeInput.prototype._releasePicker = function () {
  if (this.share.$holdingInput !== this) return; // this.share.$calendar.off('pick', this.eventHandler.calendarPick);

  this.share.$follower.remove();
  document.body.removeEventListener('click', this.eventHandler.clickOut);
  this.share.$picker.off('change', this.eventHandler.pickerChange);
  setTimeout(function () {
    this.$clockBtn.on('click', this.eventHandler.clickClockBtn);
  }.bind(this), 5);
  this.share.$holdingInput = null;
};

absol_acomp_ACore.install(TimeInput);
/* harmony default export */ const js_TimeInput = (TimeInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timepicker.css
var timepicker = __webpack_require__(2053);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimePicker.js






 //todo: add this to absol

var isTouchDevice = Detector_BrowserDetector.hasTouch && !Detector_BrowserDetector.os.type.match(/windows|X11|Ubuntu|Linux/); //todo: re select text after click

var TimePicker_ = absol_acomp_ACore._;
var TimePicker_$ = absol_acomp_ACore.$;
var TimePicker_$g = HTML5_Svg.ShareInstance.$;
var TimePicker_g = HTML5_Svg.ShareInstance._;

function TimePicker() {
  this._hour = 0;
  this._minute = 0;
  this._lastDayOffset = 0;
  this._state = 'none';
  this._mode = 'CLOCK';
  this._latBound = {
    width: 0,
    height: 0
  };
  var thisPicker = this;
  if (isTouchDevice) this.addClass('ac-time-picker-touch');
  this.$attachook = TimePicker_('attachhook').addTo(this).on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
    this.requestUpdateSize();
    thisPicker.addStyle('font-size', thisPicker.getComputedStyleValue('font-size'));
  });
  this.$attachook.requestUpdateSize = this.updateSize.bind(this);
  /***
   *
   * @type {NumberSpanInput}
   */

  this.$hour = TimePicker_$('.ac-time-picker-hour', this).on({
    focus: this.eventHandler.focusHour,
    keydown: this.eventHandler.keydownHour,
    blur: this.eventHandler.blurHour
  });
  /***
   *
   * @type {NumberSpanInput}
   */

  this.$minute = TimePicker_$('.ac-time-picker-minute', this).on({
    keydown: this.eventHandler.keydownMinute,
    focus: this.eventHandler.focusMinute,
    blur: this.eventHandler.blurMinute
  });
  this.$hourInput = TimePicker_$('.ac-time-picker-hour-input', this).on({
    click: this.eventHandler.clickHourInput,
    keydown: this.eventHandler.keydownHourInput,
    blur: this.eventHandler.blurHourInput
  });
  this.$minuteInput = TimePicker_$('.ac-time-picker-minute-input', this).on({
    click: this.eventHandler.clickMinuteInput,
    keydown: this.eventHandler.keydownMinuteInput,
    blur: this.eventHandler.blurMinuteInput
  }); //only support if is none touch device

  if (isTouchDevice) {
    this.$hour.readOnly = true;
    this.$hour.on('click', this._editHourState.bind(this));
    this.$minute.readOnly = true;
    this.$minute.on('click', this._editMinuteState.bind(this));
  }

  this.$clock = TimePicker_$g('.ac-time-picker-clock', this).on(isTouchDevice ? 'touchstart' : 'mousedown', this.eventHandler.mousedownClock);
  this._clockWidth = 400;
  this._clockHeight = 400;
  this._clockRadius = 150;
  this._clockRadiusInner = 100;
  this.$clockContent = TimePicker_$g('.ac-time-picker-clock-content', this);
  this.$clockHourCtn = TimePicker_$g('.ac-time-picker-clock-hour-ctn', this);
  this.$clockMinuteCtn = TimePicker_$g('.ac-time-picker-clock-minute-ctn', this);
  this.$hourNumbers = Array(24).fill(0).map(function (u, i) {
    var h = i;
    if (h == 0) h = 12;else if (h == 12) h = '00';
    return TimePicker_g({
      tag: 'text',
      attr: {
        'text-anchor': 'middle'
      },
      "class": 'ac-time-picker-clock-hour-' + (i < 12 ? 'am' : 'pm'),
      child: {
        text: h + ''
      }
    }).addTo(thisPicker.$clockHourCtn);
  });
  this.$minuteNumbers = Array(12).fill(0).map(function (u, i) {
    return TimePicker_g({
      tag: 'text',
      attr: {
        'text-anchor': 'middle'
      },
      "class": 'ac-time-picker-clock-minute',
      child: {
        text: i * 5 + ''
      }
    }).addTo(thisPicker.$clockMinuteCtn);
  });
  this.$selectCtn = TimePicker_$g('.ac-time-picker-clock-select-ctn', this);
  this.$clockCenter = TimePicker_g({
    tag: 'circle',
    "class": 'ac-time-picker-clock-center',
    attr: {
      cx: "0",
      cy: '0'
    }
  }).addTo(this.$selectCtn);
  this.$clockSelectLine = TimePicker_g({
    tag: 'path',
    "class": 'ac-time-picker-clock-select-line'
  }).addTo(this.$selectCtn);
  this.$clockSelectCicle = TimePicker_g({
    tag: 'circle',
    "class": 'ac-time-picker-clock-select-circle',
    attr: {
      cx: 0,
      cy: 0
    }
  }).addTo(this.$selectCtn);
  this.$clockSelectCenter = TimePicker_g({
    tag: 'circle',
    "class": 'ac-time-picker-clock-select-center'
  }).addTo(this.$selectCtn);
  this.$finishBtn = TimePicker_$('.ac-time-picker-finish-btn', this).on('click', this.finishSelect.bind(this));
  this.$cancelBtn = TimePicker_$('.ac-time-picker-cancel-btn', this).on('click', this.cancelSelect.bind(this));
  this.$keyboardBtn = TimePicker_$('.ac-time-picker-keyboard-btn', this).on('click', this.timeMode.bind(this));
  this.$clockBtn = TimePicker_$('.ac-time-picker-clock-btn', this).on('click', this.clockMode.bind(this));
}

;

TimePicker.prototype.updateSize = function () {
  // var 
  this._fontSize = this.getFontSize();
  var cBound = this.$clock.getBoundingClientRect();
  this._clockWidth = cBound.width;
  this._clockHeight = cBound.height;
  this.$clock.attr({
    width: this._clockWidth,
    height: this._clockHeight,
    viewBox: '0 0 ' + this._clockWidth + ' ' + this._clockHeight
  });
  this.$clockContent.attr('transform', 'translate(' + this._clockWidth / 2 + ',' + this._clockHeight / 2 + ')');
  var clockRadius = this._clockWidth / 2 - this._fontSize;
  var clockRadiusInner = clockRadius - this._fontSize * 1.5;
  this._clockRadius = clockRadius;
  this._clockRadiusInner = clockRadiusInner;
  this.$clockCenter.attr('r', this._fontSize / 5);
  this.$clockSelectCicle.attr({
    r: this._fontSize * 0.7,
    cx: clockRadius
  });
  this.$clockSelectCenter.attr({
    r: this._fontSize / 10,
    cx: clockRadius
  });
  this.$hourNumbers.forEach(function (elt, i) {
    var angle = Math.PI * (i - 3) / 6;
    var r = i < 12 ? clockRadius : clockRadiusInner;
    var box = elt.getBBox();
    var x = r * Math.cos(angle);
    var y = r * Math.sin(angle) + box.height / 2;
    elt.attr({
      x: x,
      y: y
    });
  });
  this.$minuteNumbers.forEach(function (elt, i) {
    var angle = Math.PI * (i - 3) / 6;
    var box = elt.getBBox();
    var x = clockRadius * Math.cos(angle);
    var y = clockRadius * Math.sin(angle) + box.height / 3;
    elt.attr({
      x: x,
      y: y
    });
  });
  this.updateSelectPosition();
  this.notifySizeChange();
};

TimePicker.prototype.updateSelectPosition = function () {
  var angle, radius;

  if (this._state == "EDIT_MINUTE") {
    angle = Math.PI * (this._minute - 15) / 30;
    radius = this._clockRadius;
  } else if (this._state == "EDIT_HOUR") {
    angle = Math.PI * (this._hour - 3) / 6;

    if (this._hour > 0 && this._hour <= 12) {
      radius = this._clockRadius;
    } else {
      radius = this._clockRadiusInner;
    }
  } else {
    return;
  }

  this._drawSelect(radius, angle);
};

TimePicker.prototype.editHour = function () {
  this.clockMode();

  if (this.$hour.readOnly) {
    this._editHourState();
  } else {
    this.$hour.focus();
  }
};

TimePicker.prototype._drawSelect = function (radius, angle) {
  var x = radius * Math.cos(angle);
  var y = radius * Math.sin(angle);
  this.$clockSelectCicle.attr({
    cx: x,
    cy: y
  });
  this.$clockSelectCenter.attr({
    cx: x,
    cy: y
  });
  this.$clockSelectLine.attr('d', 'M0,0L' + x + ',' + y);
};

TimePicker.prototype.notifyChange = function (force) {
  if (this._lastDayOffset != this.dayOffset || force) {
    this.emit('change', {
      target: this,
      hour: this.hour,
      minute: this.minute,
      dayOffset: this.dayOffset,
      name: 'change'
    }, this);
    this._lastDayOffset = this.dayOffset;
  }
};

TimePicker.prototype.notifySizeChange = function () {
  var bound = this.getBoundingClientRect();

  if (this._latBound.width != bound.width || this._latBound.height != bound.height) {
    this._latBound.width = bound.width;
    this._latBound.height = bound.height;
    this.emit('sizechange', {
      name: 'sizechange',
      bound: bound,
      target: this
    }, this);
  }
};

TimePicker.tag = 'TimePicker';

TimePicker.render = function () {
  return TimePicker_({
    extendEvent: ['change', 'finish', 'cancel', 'sizechange'],
    "class": ['ac-time-picker', 'ac-time-picker-clock-mode'],
    //clock mode is default
    child: [{
      "class": 'ac-time-picker-set-clock',
      child: [{
        "class": 'ac-time-picker-set-clock-header',
        child: [{
          tag: 'numberspaninput',
          "class": 'ac-time-picker-hour',
          props: {
            value: 0,
            zeroInt: 2
          }
        }, {
          tag: 'span',
          text: ':'
        }, {
          tag: 'numberspaninput',
          "class": 'ac-time-picker-minute',
          props: {
            value: 0,
            zeroInt: 2
          }
        }]
      }, TimePicker_g({
        tag: 'svg',
        "class": 'ac-time-picker-clock',
        child: [{
          "class": 'ac-time-picker-clock-content',
          child: ['.ac-time-picker-clock-select-ctn', '.ac-time-picker-clock-hour-ctn', '.ac-time-picker-clock-minute-ctn']
        }]
      })]
    }, {
      "class": 'ac-time-picker-set-time',
      child: [{
        "class": 'ac-time-picker-set-time-header',
        child: {
          text: 'Set time'
        }
      }, {
        "class": 'ac-time-picker-set-time-label',
        child: {
          text: 'Type in time'
        }
      }, {
        "class": 'ac-time-picker-set-time-input-group',
        child: [{
          "class": 'ac-time-picker-set-time-input-hm',
          child: [{
            tag: 'input',
            "class": 'ac-time-picker-hour-input',
            attr: {
              type: 'number',
              placeHolder: '00',
              tabindex: '2'
            }
          }, {
            tag: 'span',
            child: {
              text: ':'
            }
          }, {
            tag: 'input',
            "class": 'ac-time-picker-minute-input',
            attr: {
              type: 'number',
              placeHolder: '00',
              tabindex: '3'
            }
          }]
        }, {
          "class": 'ac-time-picker-set-time-input-label-hm',
          child: [{
            tag: 'span',
            child: {
              text: 'hour'
            }
          }, {
            tag: 'span',
            style: {
              visibility: 'hidden'
            },
            child: {
              text: ':'
            }
          }, {
            tag: 'span',
            child: {
              text: 'minute'
            }
          }]
        }]
      }]
    }, {
      "class": 'ac-time-picker-footer',
      child: [{
        tag: 'button',
        "class": 'ac-time-picker-keyboard-btn',
        child: 'span.mdi.mdi-keyboard-outline'
      }, {
        tag: 'button',
        "class": 'ac-time-picker-clock-btn',
        child: 'span.mdi.mdi-clock-outline'
      }, {
        "class": 'ac-time-picker-footer-right',
        child: [{
          tag: 'button',
          "class": 'ac-time-picker-cancel-btn',
          attr: {
            tabindex: '4'
          },
          child: {
            text: 'CANCEL'
          }
        }, {
          tag: 'button',
          attr: {
            tabindex: '4'
          },
          "class": 'ac-time-picker-finish-btn',
          child: {
            text: 'OK'
          }
        }]
      }]
    }]
  });
};

TimePicker.prototype.clockMode = function () {
  if (this._mode == "CLOCK") return;
  this._mode = 'CLOCK';
  this.removeClass('ac-time-picker-time-mode').addClass('ac-time-picker-clock-mode');
  this.$hour.value = this._hour < 10 ? '0' + this._hour : this._hour;
  this.$minute.value = this._minute < 10 ? '0' + this._minute : this._minute;

  this._editHourState();

  this.updateSize();

  this._showSelectHour(this._hour);
};

TimePicker.prototype.timeMode = function () {
  if (this._mode == "TIME") return;
  this._mode = 'TIME';
  this.addClass('ac-time-picker-time-mode').removeClass('ac-time-picker-clock-mode');
  this.$hourInput.value = this._hour < 10 ? '0' + this._hour : this._hour;
  this.$minuteInput.value = this._minute < 10 ? '0' + this._minute : this._minute;
  this.editHourInput();
  this.updateSize();
};

TimePicker.prototype._editHourState = function () {
  this._state = "EDIT_HOUR";
  this._preHour = this._hour;
  this.removeClass('ac-time-picker-edit-minute').addClass('ac-time-picker-edit-hour').removeClass('ac-time-picker-edit-hour-input').removeClass('ac-time-picker-edit-minute-input');
  this.updateSize();
};

TimePicker.prototype._editMinuteState = function () {
  this._state = "EDIT_MINUTE";
  this._preMinute = this._minute;
  this.addClass('ac-time-picker-edit-minute').removeClass('ac-time-picker-edit-hour').removeClass('ac-time-picker-edit-hour-input').removeClass('ac-time-picker-edit-minute-input');
  this.updateSize();
};

TimePicker.prototype.editHourInput = function () {
  var thisPicker = this;
  this._state = "EDIT_HOUR_INPUT";
  this._preHour = this._hour;
  this.removeClass('ac-time-picker-edit-minute').removeClass('ac-time-picker-edit-hour').addClass('ac-time-picker-edit-hour-input').removeClass('ac-time-picker-edit-minute-input');
  this.updateSize();
  setTimeout(function () {
    thisPicker.$hourInput.focus();
    thisPicker.$hourInput.select();
  }, 10);
};

TimePicker.prototype.editMinuteInput = function () {
  var thisPicker = this;
  this._state = "EDIT_MINUTE_INPUT";
  this._preMinute = this._minute;
  this.removeClass('ac-time-picker-edit-minute').removeClass('ac-time-picker-edit-hour').removeClass('ac-time-picker-edit-hour-input').addClass('ac-time-picker-edit-minute-input');
  this.updateSize();
  setTimeout(function () {
    thisPicker.$minuteInput.focus();
    thisPicker.$minuteInput.select();
  }, 1);
};

TimePicker.prototype.finishSelect = function () {
  this.emit('finish', {
    target: this,
    hour: this.hour,
    minute: this.minute,
    dayOffset: this.dayOffset,
    name: 'finish'
  }, this);
};

TimePicker.prototype.cancelSelect = function () {
  this.emit('cancel', {
    target: this,
    name: 'cancel'
  }, this);
};

TimePicker.eventHandler = {};

TimePicker.eventHandler.focusHour = function () {
  this._editHourState();

  this.$hour.selectAll();
};

TimePicker.eventHandler.blurHour = function () {
  var newText = this.$hour.value;
  var hour = parseFloat(newText) || 0;
  if (hour < 0 || hour >= 24) hour = this._preHour;
  this.$hour.value = hour < 10 ? '0' + hour : hour;
  this._hour = hour;

  this._showSelectHour(hour);

  this.notifyChange();
};

TimePicker.eventHandler.focusMinute = function () {
  this._editMinuteState();

  this.$minute.selectAll();
};

TimePicker.eventHandler.blurMinute = function () {
  var newText = this.$minute.innerHTML;
  var minute = parseFloat(newText) || 0;
  if (minute < 0 || minute >= 60) minute = this._preMinute;
  this.$minute.value = minute < 10 ? '0' + minute : minute;
  this._minute = minute;

  this._showSelectByMinuteText();

  this.notifyChange();
};

TimePicker.eventHandler.clickHourInput = function () {
  if (this._state != 'EDIT_HOUR') this.editHourInput();else {
    this.$hourInput.focus();
    this.$hourInput.select();
  }
};

TimePicker.eventHandler.clickMinuteInput = function () {
  if (this._state != 'EDIT_MINUTE_INPUT') this.editMinuteInput();else {
    this.$minuteInput.focus();
    this.$minuteInput.select();
  }
};

TimePicker.eventHandler.blurHourInput = function () {
  var hour = parseFloat(this.$hourInput.value) || 0;
  if (hour < 0 || hour >= 24) hour = this._preHour;
  this.hour = hour;
};

TimePicker.eventHandler.blurMinuteInput = function () {
  var minute = parseFloat(this.$minuteInput.value) || 0;
  if (minute < 0 || minute >= 60) minute = this._preMinute;
  this.minute = minute;
};

TimePicker.property = {};
TimePicker.property.hour = {
  set: function set(value) {
    value = value % 24 || 0;
    this._hour = value;
    var text = (value < 10 ? '0' : '') + value + '';
    this.$hour.clearChild().addChild(TimePicker_({
      text: text
    }));
    this.$hourInput.value = text;
    this.updateSelectPosition();
  },
  get: function get() {
    return this._hour;
  }
};
TimePicker.property.minute = {
  set: function set(value) {
    value = value % 60 || 0;
    this._minute = value;
    var text = (value < 10 ? '0' : '') + value + '';
    this.$minute.value = text;
    this.$minuteInput.value = text;
    this.updateSelectPosition();
  },
  get: function get() {
    return this._minute;
  }
};
TimePicker.property.dayOffset = {
  set: function set(value) {
    value = value || 0;
    if (value.getTime) value = value.getTime() - beginOfDay(value).getTime();else {
      value = value % MILLIS_PER_DAY;
    }
    this.hour = Math.floor(value / MILLIS_PER_HOUR);
    this.minute = Math.floor(value % MILLIS_PER_HOUR / MILLIS_PER_MINUTE);
  },
  get: function get() {
    return this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE;
  }
};

TimePicker.prototype._showSelectHour = function (hour) {
  var radius;
  var angle = Math.PI * (hour - 3) / 6;

  if (hour < 24 && hour > 12 || hour == 0) {
    radius = this._clockRadiusInner;
  } else if (hour <= 12) {
    radius = this._clockRadius;
  } else {
    return;
  }

  this._drawSelect(radius, angle);
};

TimePicker.prototype._showSelectByHourText = function () {
  var hour = parseFloat(this.$hour.innerHTML) || 0;
  if (hour < 0 || hour >= 24) return;

  this._showSelectHour(hour);
};

TimePicker.prototype._showSelectMinute = function (minute) {
  var angle = Math.PI * (minute - 15) / 30;

  this._drawSelect(this._clockRadius, angle);
};

TimePicker.prototype._showSelectByMinuteText = function () {
  var minute = parseFloat(this.$minute.innerHTML) || 0;
  if (minute < 0 || minute >= 60) return;

  this._showSelectMinute(minute);
};
/***
 *
 * @param {KeyboardEvent} event
 */


TimePicker.eventHandler.keydownHour = function (event) {
  var thisPicker = this;

  if (event.key == 'Enter' || event.key == 'Tab') {
    event.preventDefault();
    this.$hour.blur();

    this._editMinuteState();

    setTimeout(function () {
      thisPicker.$minute.focus();
      thisPicker.$minute.selectAll();
    }, 30);
  } else {
    setTimeout(function () {
      var newText = thisPicker.$hour.value;
      var hour = parseFloat(newText) || 0;
      if (hour < 0 || hour >= 24) hour = thisPicker._preHour;else {
        thisPicker._hour = hour;

        thisPicker._showSelectHour(hour);
      }
    }, 30);
  }
};

TimePicker.eventHandler.keydownMinute = function (event) {
  var thisPicker = this;

  if (event.key == 'Enter') {
    this.$minute.blur();
    event.preventDefault();
    setTimeout(this.finishSelect.bind(this), 30);
  } else if (event.key == 'Tab') {
    this.$minute.selectNone();
    this.$finishBtn.focus();
    event.preventDefault();
  } else {
    setTimeout(function () {
      var newText = thisPicker.$minute.value;
      var minute = parseFloat(newText) || 0;
      if (minute < 0 || minute >= 60) minute = thisPicker._preMinute;else {
        thisPicker._minute = minute;

        thisPicker._showSelectMinute(minute);
      }
    }, 30);
  }
};

TimePicker.eventHandler.keydownHourInput = function (event) {
  var thisPicker = this;

  if (isTouchDevice && event.key == "Unidentified" || event.key && event.key.length == 1 && !event.ctrlKey && !event.altKey) {
    if (event.key.match(/[0-9]/)) {
      setTimeout(this.notifyChange.bind(this), 2);
    } else {
      event.preventDefault();
    }
  } else if (event.key == 'Enter') {
    event.preventDefault();
    this.$hourInput.blur();
    this.editMinuteInput();
  } else if (!event.key && !event.key.toLowerCase().match(/arrow|back/)) {
    var cText = this.$hourInput.value;
    setTimeout(function () {
      var newText = thisPicker.$hourInput.value;

      if (cText != newText) {
        var hour = parseFloat(newText) || 0;
        if (hour < 0 || hour >= 24) hour = thisPicker._preHour;
        thisPicker.hour = hour;
        thisPicker.$hourInput.blur();
        thisPicker.editMinuteInput();
        thisPicker.notifyChange();
      }
    }, 1);
  }
};

TimePicker.eventHandler.keydownMinuteInput = function (event) {
  var thisPicker = this;

  if (isTouchDevice && event.key == "Unidentified" || event.key.length == 1 && !event.ctrlKey && !event.altKey) {
    if (isTouchDevice && event.key == "Unidentified" || event.key.match(/[0-9]/)) {
      setTimeout(this.notifyChange.bind(this), 2);
    } else {
      event.preventDefault();
    }
  } else if (event.key == 'Enter') {
    this.$minute.blur();
    this.eventHandler.blurMinuteInput();
    event.preventDefault();
    setTimeout(this.finishSelect.bind(this), 100);
  } else if (event.key == "Backspace") {} else if (event.key != 'Enter') {
    var cText = this.$minuteInput.value;
    setTimeout(function () {
      var newText = thisPicker.$minuteInput.value;

      if (cText != newText) {
        var minute = parseFloat(newText) || 0;
        if (minute < 0 || minute >= 60) minute = thisPicker._preMinute;
        thisPicker.minute = minute;
        thisPicker.$minuteInput.focus();
        thisPicker.$minuteInput.select();
        thisPicker.notifyChange();
      }
    }, 1);
  }
};

TimePicker.eventHandler.dragOnClock = function (event) {
  event = event.changedTouches && event.changedTouches[0] || event;
  var cBound = this.$clock.getBoundingClientRect();
  var cx = (cBound.left + cBound.right) / 2;
  var cy = (cBound.top + cBound.bottom) / 2;
  var x = event.clientX - cx;
  var y = event.clientY - cy;
  var angle = Math.atan2(y, x);
  var radius = Math.sqrt(x * x + y * y);
  var index;

  if (this._state == "EDIT_HOUR") {
    angle += Math.PI * 2;
    index = Math.round(angle / (Math.PI / 6));
    var hour = (index + (12 + 3)) % 12;

    if (radius < (this._clockRadiusInner + this._clockRadius) / 2) {
      if (hour != 0) hour += 12;
    } else {
      if (hour == 0) hour = 12;
    }

    this._hour = hour;

    this._showSelectHour(hour);

    this.$hour.value = hour < 10 ? '0' + hour : hour;
    this.$hour.selectEnd();
  } else if (this._state == "EDIT_MINUTE") {
    radius = this._clockRadius;
    angle += Math.PI * 2;
    index = Math.round(angle / (Math.PI / 30));
    angle = index * (Math.PI / 30);
    var minute = (index + (60 + 15)) % 60;
    this._minute = minute;
    this.$minute.value = minute < 10 ? '0' + minute : minute;

    this._showSelectMinute(minute);

    this.$minute.selectEnd();
    this.notifyChange();
  } else {
    return;
  }
};

TimePicker.eventHandler.mousedownClock = function (event) {
  event.preventDefault();
  this.eventHandler.dragOnClock(event);
  document.body.addEventListener(isTouchDevice ? 'touchmove' : 'mousemove', this.eventHandler.mousemoveClock);
  document.body.addEventListener(isTouchDevice ? 'touchend' : 'mouseup', this.eventHandler.mousefinishClock);
  if (!isTouchDevice) document.body.addEventListener('mouseleave', this.eventHandler.mousefinishClock);
};

TimePicker.eventHandler.mousemoveClock = function (event) {
  event.preventDefault();
  this.eventHandler.dragOnClock(event);
};

TimePicker.eventHandler.mousefinishClock = function () {
  document.body.removeEventListener('mousemove', this.eventHandler.mousemoveClock);
  document.body.removeEventListener('mouseup', this.eventHandler.mousefinishClock);
  document.body.removeEventListener('mouseleave', this.eventHandler.mousefinishClock);

  if (this._state == 'EDIT_HOUR') {
    if (this.$minute.readOnly) {
      this._editMinuteState();
    } else {
      this.$minute.focus();
    }
  } else if (this._state == 'EDIT_MINUTE') {
    this.$minute.selectAll(); // refocus
  }
};

absol_acomp_ACore.install('timepicker', TimePicker);
/* harmony default export */ const js_TimePicker = (TimePicker);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tooltip.css
var tooltip = __webpack_require__(9613);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Tooltip.js




var Tooltip_ = absol_acomp_ACore._;
var Tooltip_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function ToolTip() {
  this.$content = Tooltip_$('.absol-tooltip-content', this);
  this.$arrow = Tooltip_$('.absol-tooltip-arrow', this);
}

ToolTip.tag = 'ToolTip'.toLowerCase();

ToolTip.render = function () {
  return Tooltip_({
    "class": 'absol-tooltip',
    child: [{
      "class": 'absol-tooltip-content'
    }, '.absol-tooltip-arrow']
  });
};

['addChild', 'addChildBefore', 'addChildAfter', 'clearChild'].forEach(function (key) {
  ToolTip.prototype[key] = function () {
    return this.$content[key].apply(this.$content, arguments);
  };
});
absol_acomp_ACore.install(ToolTip);
function updateTooltipPosition(toolTipClass) {
  var element = toolTipClass.$element;
  if (!element) return;
  var orientation = toolTipClass._orientation;
  var tBound = toolTipClass.$tooltip.$content.getBoundingClientRect();
  var ebound = element.getBoundingClientRect();
  var screenSize = getScreenSize();
  var sMargin = Math.round(Math.min(5, screenSize.width / 100, screenSize.height));
  screenSize.width = Math.min(screenSize.width, document.body.getBoundingClientRect().width);
  var fontSize = toolTipClass.$tooltip.getFontSize();
  var dx = 0;
  var dy = 0;
  var arrowPos = null;
  var aHCenter = ebound.left + ebound.width / 2 > tBound.width / 2 && screenSize.width - ebound.left - ebound.width / 2 > tBound.width / 2;
  var aVCenter = ebound.top + ebound.height / 2 > tBound.height / 2 && screenSize.height - ebound.top - ebound.height / 2 > tBound.height / 2;
  var aTop = tBound.height < ebound.top - sMargin;
  var aBottom = tBound.height < screenSize.height - sMargin - ebound.bottom;
  var aRight = tBound.width < screenSize.width - sMargin - ebound.right;
  var aLeft = tBound.width < ebound.left - sMargin;
  var aHLeft = ebound.left + ebound.width / 2 - tBound.width / 2 < sMargin && ebound.left + ebound.width / 2 >= sMargin + fontSize / 2;
  var aHRight = ebound.left + ebound.width / 2 + tBound.width / 2 > screenSize.width - sMargin && ebound.left + ebound.width / 2 < screenSize.width - sMargin - fontSize / 2;
  var aVTop = ebound.top + ebound.width / 2 - tBound.height / 2 < sMargin && ebound.top + ebound.height / 2 >= sMargin + fontSize / 2;
  var aVBottom = ebound.top + ebound.width / 2 + tBound.height / 2 <= screenSize.height - sMargin && ebound.top + ebound.height / 2 > screenSize.height - sMargin - fontSize / 2;

  if (orientation === 'auto' && aHCenter) {
    if (aTop) {
      orientation = 'top';
    } else if (aBottom) {
      orientation = 'bottom';
    }
  }

  if (orientation === 'auto' && aVCenter) {
    if (aRight) {
      orientation = 'right';
    } else if (aLeft) {
      orientation = 'left';
    }
  }

  if ((orientation === 'auto' || orientation === 'top' || orientation === 'bottom') && aHLeft) {
    if (aTop || orientation === 'auto') orientation = "top";else if (aBottom || orientation === 'auto') orientation = 'bottom';

    if (aTop || aBottom) {
      dx += tBound.width / 2 - (ebound.left + ebound.width / 2) + sMargin;
      arrowPos = tBound.width / 2 - dx + 'px';
    }
  }

  if ((orientation === 'auto' || orientation === 'top' || orientation === 'bottom') && aHRight) {
    if (aTop || orientation === 'auto') orientation = "top";else if (aBottom || orientation === 'auto') orientation = 'bottom';

    if (aTop || aBottom) {
      dx -= tBound.width / 2 - (screenSize.width - (ebound.left + ebound.width / 2)) + sMargin;
      arrowPos = tBound.width / 2 - dx + 'px';
    }
  }

  if ((orientation === 'auto' || orientation === 'left' || orientation === 'right') && aVTop) {
    if (aLeft || orientation === 'auto') orientation = "left";else if (aRight || orientation === 'auto') {
      orientation = 'right';
    }

    if (aLeft || aRight) {
      dy += tBound.height / 2 - (ebound.top + ebound.height / 2) + sMargin;
      arrowPos = tBound.height / 2 - dy + 'px';
    }
  }

  if ((orientation === 'auto' || orientation === 'left' || orientation === 'right') && aVBottom) {
    if (aLeft || orientation === 'auto') orientation = "left";else if (aRight || orientation === 'auto') {
      orientation = 'right';
    }

    if (aLeft || aRight) {
      dy -= tBound.height / 2 - (screenSize.height - (ebound.top + ebound.height / 2)) + sMargin;
      arrowPos = tBound.height / 2 - dx + 'px';
    }
  }

  if (orientation === 'auto') {
    if (aRight) {
      if (aTop) {
        orientation = 'ne';
      } else if (aBottom) {
        orientation = 'se';
      }
    } else if (aLeft) {
      if (aTop) {
        orientation = 'nw';
      } else if (aBottom) {
        orientation = 'sw';
      }
    }
  }

  if (orientation === 'auto') orientation = "error";
  toolTipClass.$tooltip.removeClass('top').removeClass('left').removeClass('right').removeClass('bottom').removeClass('ne').removeClass('nw').removeClass('se').removeClass('sw').addClass(orientation);
  tBound = toolTipClass.$tooltip.getBoundingClientRect();

  if (orientation == 'top') {
    dy += ebound.top - tBound.height;
    dx += ebound.left + ebound.width / 2 - tBound.width / 2;
  } else if (orientation == 'left') {
    dy += ebound.top + ebound.height / 2 - tBound.height / 2;
    dx += ebound.left - tBound.width;
  } else if (orientation == 'right') {
    dy += ebound.top + ebound.height / 2 - tBound.height / 2;
    dx += ebound.right;
  } else if (orientation == 'bottom') {
    dy += ebound.bottom;
    dx += ebound.left + ebound.width / 2 - tBound.width / 2;
  } else if (orientation === 'ne') {
    dy += ebound.top - tBound.height;
    dx += ebound.right;
  } else if (orientation === 'nw') {
    dy += ebound.top - tBound.height;
    dx += ebound.left - tBound.width;
  } else if (orientation === 'se') {
    dy += ebound.bottom;
    dx += ebound.right;
  } else if (orientation === 'sw') {
    dy += ebound.bottom;
    dx += ebound.left - tBound.width;
  } else {
    throw new Error("Invalid orientation, orientation: ['left', 'right', 'top', 'bottom', 'auto', 'nw', 'ne', 'sw', 'se']");
  }

  if (arrowPos) {
    toolTipClass.$tooltip.addStyle('--tool-tip-arrow-pos', arrowPos);
  } else {
    toolTipClass.$tooltip.removeStyle('--tool-tip-arrow-pos');
  }

  toolTipClass.$holder.addStyle({
    top: dy + 'px',
    left: dx + 'px'
  });
}
ToolTip.$holder = Tooltip_('.absol-tooltip-root-holder');
ToolTip.$tooltip = Tooltip_('tooltip.top').addTo(ToolTip.$holder);
ToolTip.$element = undefined;
ToolTip.$content = undefined;
ToolTip._orientation = 'top';
ToolTip._session = Math.random() * 10000000000 >> 0;

ToolTip.updatePosition = function () {
  if (!ToolTip.$element) return;
  updateTooltipPosition(ToolTip);
};

ToolTip.$tooltip.$arrow.updateSize = ToolTip.updatePosition.bind(ToolTip);

ToolTip.show = function (element, content, orientation) {
  orientation = orientation || 'auto';

  if (typeof content == 'string') {
    content = Tooltip_({
      tag: 'span',
      style: {
        'white-space': 'nowrap'
      },
      props: {
        innerHTML: content
      }
    });
  }

  Tooltip_$('', content, function (elt) {
    if (elt.tagName == "IMG" && elt.src) {
      HTML5_Dom.waitImageLoaded(elt).then(ToolTip.updatePosition.bind(ToolTip));
    } else if (elt.sync) {
      elt.sync.then(ToolTip.updatePosition.bind(ToolTip));
    }
  });
  var currentSession = Math.random() * 10000000000 >> 0;
  ToolTip.$holder.addTo(document.body);
  HTML5_Dom.addToResizeSystem(ToolTip.$tooltip.$arrow);
  ToolTip.$element = element;
  ToolTip._session = currentSession;
  ToolTip.$content = content;
  ToolTip._orientation = orientation;
  ToolTip.$tooltip.clearChild().addChild(content);
  ToolTip.$holder.removeStyle('visibility');
  ToolTip.$tooltip.removeClass('top').removeClass('left').removeClass('right').removeClass('bottom').removeClass('ne').removeClass('nw').removeClass('auto');
  ToolTip.$tooltip.addClass(orientation);
  ToolTip.updatePosition();
  return currentSession;
};

ToolTip.close = function (session) {
  if (session === true || session === this._session) {
    ToolTip.$holder.addStyle('visibility', 'hidden');
    ToolTip.$tooltip.clearChild();
    ToolTip.$holder.addStyle({
      top: false,
      left: false
    });
  }
};

ToolTip.closeTooltip = ToolTip.close;

ToolTip.showWhenClick = function (element, content, orientation) {
  var mSession = undefined;
  element.addEventListener('click', function () {
    if (mSession !== undefined) return;
    mSession = ToolTip.show(element, content, orientation);

    var finish = function finish(event) {
      if (!HTML5_EventEmitter.hitElement(content, event)) {
        Tooltip_$(document.body).off('click', finish);
        ToolTip.closeTooltip(mSession);
        mSession = undefined;
      }
    };

    setTimeout(function () {
      Tooltip_$(document.body).on('click', finish);
    }, 100);
  });
};

/* harmony default export */ const Tooltip = (ToolTip);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treelist.css
var treelist = __webpack_require__(4266);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeListItem.js



var TreeListItem_ = absol_acomp_ACore._;
var TreeListItem_$ = absol_acomp_ACore.$;

function TreeListItem() {
  var thisTI = this;
  this.$list = TreeListItem_$('treelist', this).on('press', function (event, sender) {
    thisTI.emit('press', event, this);
  });
  this.$parent = TreeListItem_$('.absol-tree-list-item-parent', this).on('mousedown', this.eventHandler.clickParent);
  this.$text = TreeListItem_$('span.absol-tree-list-item-text', this);
  this.$desc = TreeListItem_$('span.absol-tree-list-item-desc', this);
  this.$descCtn = TreeListItem_$('.absol-tree-list-item-desc-container', this);
  this.$list.level = 1;
  HTML5_OOP.drillProperty(this, this.$list, 'items');
}

TreeListItem.tag = 'TreeListItem'.toLowerCase();

TreeListItem.render = function () {
  return TreeListItem_({
    extendEvent: ['press', 'clickparent'],
    "class": 'absol-tree-list-item',
    child: [{
      "class": 'absol-tree-list-item-parent',
      child: ['span.absol-tree-list-item-text', {
        "class": 'absol-tree-list-item-desc-container',
        child: 'span.absol-tree-list-item-desc'
      }]
    }, 'treelist']
  });
};

TreeListItem.eventHandler = {};

TreeListItem.eventHandler.clickParent = function (event) {
  event.preventDefault();
  var prevented = false;
  var self = this;
  this.emit('press', {
    target: self,
    preventDefault: function preventDefault() {
      prevented = true;
    },
    isPrevented: function isPrevented() {
      return prevented;
    },
    data: this.data
  }, this);

  if (!prevented) {
    var top = self.getTopLevelElt();
    TreeListItem_$('treelistitem', top, function (e) {
      if (e != self) e.active = false;
    });
    self.active = true;
  }
};

TreeListItem.prototype.getTopLevelElt = function () {
  var current = this;

  while (current) {
    var parent = current.parentNode;
    if (!parent || !parent.classList.contains('absol-tree-list') && !parent.classList.contains('absol-tree-list-item')) break;
    current = current.parentNode;
  }

  return current;
};

TreeListItem.property = {
  text: {
    set: function set(value) {
      value = value + '';
      this.$text.innerHTML = value;
    },
    get: function get() {
      return this.$text.innerHTML;
    }
  },
  desc: {
    set: function set(value) {
      value = value + '';
      this.$desc.innerHTML = value;
    },
    get: function get() {
      return this.$desc.innerHTML;
    }
  },
  level: {
    set: function set(value) {
      value = value || 0;
      if (value == this.level) return;
      this._level = value;
      this.$parent.addStyle('padding-left', this._level * 0.4 * 3 + 'em');
      this.$list.level = value + 1;
    },
    get: function get() {
      return this._level || 0;
    }
  },
  active: {
    set: function set(value) {
      if (value) {
        this.addClass('active');
      } else {
        this.removeClass('active');
      }
    },
    get: function get() {
      return this.containsClass('active');
    }
  },
  data: {
    set: function set(value) {
      this._data = value;
    },
    get: function get() {
      return this._data;
    }
  },
  value: {
    get: function get() {
      var data = this.data;
      if (typeof data == 'string') return data;

      if (typeof data.value == "undefined") {
        return data.text;
      } else {
        return data.value;
      }
    }
  }
};
TreeListItem.property.extendClasses = {
  set: function set(value) {
    var self = this;
    this.extendClasses.forEach(function (className) {
      self.$parent.removeClass(className);
    });
    this._extendClass = [];
    if (!value) return;

    if (typeof value == 'string') {
      value = value.split(/\s+/).filter(function (c) {
        return c.length > 0;
      });
    }

    if (value instanceof Array) {
      this._extendClass = value;

      this._extendClass.forEach(function (className) {
        self.$parent.addClass(className);
      });
    } else {
      throw new Error('Invalid extendClasses');
    }
  },
  get: function get() {
    return this._extendClass || [];
  }
};
TreeListItem.property.extendStyle = {
  set: function set(value) {
    this.$parent.removeStyle(this._extendStyle || {});
    this._extendStyle = value || {};
    this.$parent.addStyle(this.extendStyle);
  },
  get: function get() {
    return this._extendStyle || {};
  }
};
absol_acomp_ACore.install(TreeListItem);
/* harmony default export */ const js_TreeListItem = (TreeListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeList.js



var TreeList_ = absol_acomp_ACore._;
var TreeList_$ = absol_acomp_ACore.$;

function TreeList() {}

TreeList.tag = 'treelist';

TreeList.render = function () {
  return TreeList_({
    "class": 'absol-tree-list',
    extendEvent: 'press'
  });
};

TreeList.prototype.realignDescription = function (extMarginLeft) {
  extMarginLeft = extMarginLeft || 0;
  var maxWidth = 0;
  var ctns = [];
  TreeList_$('.absol-tree-list-item-desc-container', this, function (elt) {
    ctns.push(elt);
    var bound = elt.getBoundingClientRect();
    maxWidth = Math.max(maxWidth, bound.width);
  });
  var fontSize = this.getFontSize();
  var cntWidth = maxWidth / fontSize + 'em';
  var extMarginRight = maxWidth / fontSize + extMarginLeft + 'em';
  ctns.forEach(function (e) {
    e.addStyle('width', cntWidth);
  });
  TreeList_$('span.absol-tree-list-item-text', this, function (elt) {
    elt.addStyle('margin-right', extMarginRight);
  });
  return this;
};

TreeList.prototype.clearItems = function () {
  this._items = [];
  this.clearChild();
};

TreeList.prototype.getAllItem = function () {
  return this._items || [];
};

TreeList.prototype.getAllItemElement = function () {
  return Array.apply(null, this.childNodes);
};

TreeList.prototype.addItem = function (item) {
  var self = this;
  var props = {
    level: this.level,
    data: item
  };

  if (typeof item == 'string') {
    props.text = item;
  } else {
    props.text = item.text;

    if (item.items) {
      props.items = item.items;
    }

    if (item.desc) {
      props.desc = item.desc;
    }

    if (item.extendClasses) {
      props.extendClasses = item.extendClasses;
    }

    if (item.extendStyle) {
      props.extendStyle = item.extendStyle;
    }
  }

  var elt = TreeList_({
    tag: 'treelistitem',
    props: props,
    on: {
      press: function press(event) {
        self.emit('press', event, this);
      }
    }
  });

  this.addChild(elt);

  this._items.push(item);

  return this;
};

TreeList.property = {};
TreeList.property.items = {
  set: function set(value) {
    this.clearItems();
    (value || []).forEach(this.addItem.bind(this));
  },
  get: function get() {
    return this.getAllItem();
  }
};
TreeList.property.level = {
  set: function set(value) {
    value = value || 0;
    if (this.level == value) return;
    this._level = value;
    this.getAllItemElement().forEach(function (e) {
      e.level = value;
    });
  },
  get: function get() {
    return this._level || 0;
  }
};
absol_acomp_ACore.install(TreeList);
/* harmony default export */ const js_TreeList = (TreeList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreemenu.css
var selecttreemenu = __webpack_require__(5997);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/treeListToList.js
/***
 *
 * @param {Array<SelectionItem>} items
 * @returns {Array<SelectionItem>}
 */
function treeListToList(items) {
  var arr = [];

  function visit(level, node) {
    Object.defineProperty(node, 'level', {
      configurable: true,
      writable: true,
      value: level
    });
    arr.push(node);
    if (node.items && node.items.length > 0) node.items.forEach(visit.bind(null, level + 1));
  }

  items.forEach(visit.bind(null, 0));
  return arr;
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeBox.js




var SelectTreeBox_ = absol_acomp_ACore._;
var SelectTreeBox_$ = absol_acomp_ACore.$;
var SelectTreeBox_$$ = absol_acomp_ACore.$$;
/***
 * @extends SelectListBox
 * @constructor
 */

function SelectTreeBox() {
  js_SelectListBox.call(this);
}

SelectTreeBox.tag = 'SelectTreeBox'.toLowerCase();

SelectTreeBox.render = function () {
  return js_SelectListBox.render().addClass('as-select-tree-box');
};

Object.assign(SelectTreeBox.prototype, js_SelectListBox.prototype);
SelectTreeBox.property = Object.assign({}, js_SelectListBox.property);
SelectTreeBox.eventHandler = Object.assign({}, js_SelectListBox.eventHandler);

SelectTreeBox.prototype._itemsToNodeList = function (items) {
  return treeListToList(items);
}; //todo


SelectTreeBox.prototype.searchItemByText = function (text) {
  text = text.trim();
  if (text.length == 0) return this._items;
  if (this._searchCache[text]) return this._searchCache[text];
  this._searchCache[text] = searchTreeListByText(text, this._items);
  return this._searchCache[text];
};

absol_acomp_ACore.install(SelectTreeBox);
/* harmony default export */ const js_SelectTreeBox = (SelectTreeBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeMenu.js





var SelectTreeMenu_ = absol_acomp_ACore._;
var SelectTreeMenu_$ = absol_acomp_ACore.$;
/***
 * @extends SelectMenu
 * @constructor
 */

function SelectTreeMenu() {
  var thisSM = this;
  this._items = [];
  this._value = null;
  this._lastValue = null;
  this.$holderItem = SelectTreeMenu_$('.absol-selectmenu-holder-item', this);
  this.$viewItem = SelectTreeMenu_$('.absol-selectmenu-holder-item selectlistitem', this);
  /***
   *
   * @type {SelectTreeBox}
   */

  this.$selectlistBox = SelectTreeMenu_({
    tag: 'selecttreebox',
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem);
  this.$selectlistBox.followTarget = this;
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  this._lastValue = "NOTHING_VALUE";
  this._isFocus = false;
  this.isFocus = false;
  this.on('mousedown', this.eventHandler.click, true);
}

SelectTreeMenu.tag = 'SelectTreeMenu'.toLowerCase();

SelectTreeMenu.render = function () {
  return SelectMenu2.render().addClass('as-select-tree-menu');
};

SelectTreeMenu.eventHandler = Object.assign({}, SelectMenu2.eventHandler);
SelectTreeMenu.property = Object.assign({}, SelectMenu2.property);
Object.assign(SelectTreeMenu.prototype, SelectMenu2.prototype);
absol_acomp_ACore.install(SelectTreeMenu);
/* harmony default export */ const js_SelectTreeMenu = (SelectTreeMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/widthheightresizer.css
var widthheightresizer = __webpack_require__(5756);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/WidthHeightSizer.js



 //can replace with other module

var WidthHeightSizer_ = absol_acomp_ACore._;
var WidthHeightSizer_$ = absol_acomp_ACore.$;

function WidthHeightResizer() {
  var res = WidthHeightSizer_({
    extendEvent: 'sizechange',
    "class": 'absol-width-height-resizer',
    child: ['.absol-width-height-resizer-content', '.absol-width-height-resizer-anchor-bot-right', '.absol-width-height-resizer-anchor-bot-left', '.absol-width-height-resizer-anchor-top-right', '.absol-width-height-resizer-anchor-top-left']
  });

  res.eventHandler = HTML5_OOP.bindFunctions(res, WidthHeightResizer.eventHandler);
  res.$anchorBotRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-right', res);
  res.$anchorTopRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-right', res);
  res.$anchorBotLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-left', res);
  res.$anchorTopLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-left', res);
  res.$content = WidthHeightSizer_$('.absol-width-height-resizer-content', res);
  js_Draggable(res.$anchorBotRight).on('drag', res.eventHandler.dragBotRight).on('predrag', res.eventHandler.preDrag);
  js_Draggable(res.$anchorTopRight).on('drag', res.eventHandler.dragTopRight).on('predrag', res.eventHandler.preDrag);
  js_Draggable(res.$anchorBotLeft).on('drag', res.eventHandler.dragBotLeft).on('predrag', res.eventHandler.preDrag);
  js_Draggable(res.$anchorTopLeft).on('drag', res.eventHandler.dragTopLeft).on('predrag', res.eventHandler.preDrag);
  return res;
}

['addChild', 'addChildBefore', 'addChildAfter', 'clearChild'].forEach(function (key) {
  WidthHeightResizer.prototype[key] = function () {
    return this.$content[key].apply(this.$content, arguments);
  };
});
WidthHeightResizer.tag = 'WidthHeightResizer'.toLowerCase();
WidthHeightResizer.eventHandler = {};

WidthHeightResizer.eventHandler.preDrag = function (event) {
  this._whrWidth = parseFloat(this.getComputedStyleValue('width').replace('px', ''));
  this._whrHeight = parseFloat(this.getComputedStyleValue('height').replace('px', ''));
};

WidthHeightResizer.eventHandler.dragBotRight = function (event) {
  var newEvent = {
    target: this,
    data: {}
  };

  if (event.moveDX != 0) {
    this.addStyle('width', this._whrWidth + event.moveDX + 'px');
    newEvent.data.changeWidth = true;
  }

  if (event.moveDY != 0) {
    this.addStyle('height', this._whrHeight + event.moveDY + 'px');
    newEvent.data.changeHeight = true;
  }

  newEvent.data.height = this.getComputedStyleValue('height');
  newEvent.data.width = this.getComputedStyleValue('width');
  this.emit('sizechange', newEvent);
};

WidthHeightResizer.eventHandler.dragTopRight = function (event) {
  var newEvent = {
    target: this,
    data: {}
  };

  if (event.moveDX != 0) {
    this.addStyle('width', this._whrWidth + event.moveDX + 'px');
    newEvent.data.changeWidth = true;
  }

  if (event.moveDY != 0) {
    this.addStyle('height', this._whrHeight - event.moveDY + 'px');
    newEvent.data.changeHeight = true;
  }

  newEvent.data.height = this.getComputedStyleValue('height');
  newEvent.data.width = this.getComputedStyleValue('width');
  this.emit('sizechange', newEvent);
};

WidthHeightResizer.eventHandler.dragBotLeft = function (event) {
  var newEvent = {
    target: this,
    data: {}
  };

  if (event.moveDX != 0) {
    this.addStyle('width', this._whrWidth - event.moveDX + 'px');
    newEvent.data.changeWidth = true;
  }

  if (event.moveDY != 0) {
    this.addStyle('height', this._whrHeight + event.moveDY + 'px');
    newEvent.data.changeHeight = true;
  }

  newEvent.data.height = this.getComputedStyleValue('height');
  newEvent.data.width = this.getComputedStyleValue('width');
  this.emit('sizechange', newEvent);
};

WidthHeightResizer.eventHandler.dragTopLeft = function (event) {
  var newEvent = {
    target: this,
    data: {}
  };

  if (event.moveDX != 0) {
    this.addStyle('width', this._whrWidth - event.moveDX + 'px');
    newEvent.data.changeWidth = true;
  }

  if (event.moveDY != 0) {
    this.addStyle('height', this._whrHeight - event.moveDY + 'px');
    newEvent.data.changeHeight = true;
  }

  newEvent.data.height = this.getComputedStyleValue('height');
  newEvent.data.width = this.getComputedStyleValue('width');
  this.emit('sizechange', newEvent);
};

absol_acomp_ACore.creator.widthheightresizer = WidthHeightResizer;
/* harmony default export */ const WidthHeightSizer = (WidthHeightResizer);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/modal.css
var modal = __webpack_require__(603);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Modal.js


var Modal_$ = absol_acomp_ACore.$;
var Modal_ = absol_acomp_ACore._;

function Modal() {
  this._contentAlign = [];
  this.contentAlign = 'middle center';
  this.$content = Modal_$('.as-modal-content', this);
}

Modal.tag = 'modal';

Modal.render = function () {
  return Modal_({
    "class": 'as-modal',
    child: '.as-modal-content'
  });
};

['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild', 'addChild'].forEach(function (key) {
  Modal.prototype[key] = function () {
    this.$content[key].apply(this.$content, arguments);
  };
});
Modal.property = {};
Modal.property.show = {
  set: function set(value) {
    if (value) this.removeClass('as-hidden');else this.addClass('as-hidden');
  },
  get: function get() {
    return !this.containsClass('as-hidden');
  }
};
Modal.property.contentAlign = {
  set: function set(value) {
    var thisM = this;

    this._contentAlign.forEach(function (name) {
      thisM.removeClass('as-' + name);
    });

    value = value || '';

    if (typeof value === 'string') {
      this._contentAlign = value.split(/\s+/);
    } else if (value instanceof Array) {
      this._contentAlign = value;
    } else {
      throw new Error("Invalid contentAlign!");
    }

    var thisM = this;

    this._contentAlign.forEach(function (name) {
      thisM.addClass('as-' + name);
    });
  },
  get: function get() {
    return this._contentAlign.join(' ');
  }
};
absol_acomp_ACore.install(Modal);
/* harmony default export */ const js_Modal = (Modal);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbar.css
var trackbar = __webpack_require__(5092);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBar.js




var TrackBar_ = absol_acomp_ACore._;
var TrackBar_$ = absol_acomp_ACore.$;
/***
 * @extends Hanger
 * @constructor
 */

function TrackBar() {
  this.$bar = TrackBar_$('.absol-trackbar', this);
  this.$button = TrackBar_$('.absol-trackbar-button', this);
  this.$line = TrackBar_$('.absol-trackbar-line', this);
  this.on('predrag', this.eventHandler.predrag).on('drag', this.eventHandler.drag);
  this.leftValue = 0;
  this.rightValue = 1;
  this._dragValue = 0;
}

TrackBar.tag = 'trackbar';

TrackBar.render = function () {
  return TrackBar_({
    tag: 'hanger',
    extendEvent: 'change',
    "class": 'absol-trackbar',
    child: [{
      "class": 'absol-trackbar-line',
      child: '.absol-trackbar-button'
    }, 'attachhook']
  });
};

TrackBar.prototype._updateValue = function () {
  var left = map(this.value, this.leftValue, this.rightValue, 0, 100);
  this.$button.addStyle('left', left + '%');
};

TrackBar.eventHandler = {};

TrackBar.eventHandler.predrag = function (event) {
  if (event.target === this) {
    event.cancel();
  } else {
    event.preventDefault();
    var lineBound = this.$line.getBoundingClientRect();
    var newValue = this.leftValue + (this.rightValue - this.leftValue) * (event.clientX - lineBound.left) / lineBound.width;
    newValue = Math.max(this.leftValue, Math.min(this.rightValue, newValue));

    if (newValue !== this.value) {
      this.value = newValue;
      event.trackbarValue = this.value;
      this._dragValue = this.value;
      this.emit('change', event);
    }
  }
};

TrackBar.eventHandler.drag = function (event) {
  var lineWidth = this.$line.getBoundingClientRect().width;
  var d = event.currentPoint.sub(event.startingPoint);
  var delta = d.x / lineWidth * (this.rightValue - this.leftValue);
  var newValue = Math.max(this.leftValue, Math.min(this.rightValue, this._dragValue + delta));

  if (newValue != this.value) {
    this.value = newValue;
    event.trackbarValue = this.value;
    this.emit('change', event);
  }
};

TrackBar.property = {};
TrackBar.property.value = {
  set: function set(value) {
    value = parseFloat(value + '');
    if (isNaN(value)) value = 0;
    this._value = value;

    this._updateValue();
  },
  get: function get() {
    return Math.max(this.leftValue, Math.min(this.rightValue, this._value));
  }
};
TrackBar.property.leftValue = {
  set: function set(value) {
    value = parseFloat(value + '');
    if (isNaN(value)) value = 0;
    this._leftValue = value;

    this._updateValue();
  },
  get: function get() {
    return this._leftValue || 0;
  }
};
TrackBar.property.rightValue = {
  set: function set(value) {
    value = parseFloat(value + '');
    if (isNaN(value)) value = 1;
    this._rightValue = value;

    this._updateValue();
  },
  get: function get() {
    return this._rightValue || 1;
  }
};
TrackBar.property.disabled = {
  get: function get() {
    return this.containsClass('as-disabled');
  },
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  }
};
absol_acomp_ACore.install(TrackBar);
/* harmony default export */ const js_TrackBar = (TrackBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbarinput.css
var trackbarinput = __webpack_require__(4231);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBarInput.js



var TrackBarInput_ = absol_acomp_ACore._;
var TrackBarInput_$ = absol_acomp_ACore.$;
/***
 *
 * @extends {AElement}
 * @constructor
 */

function TrackBarInput() {
  var thisTI = this;
  this.$trackbar = TrackBarInput_$('trackbar', this);
  this.$input = TrackBarInput_$('flexiconinput', this);
  absol.OOP.drillProperty(this, this.$input, ['unit', 'icon']);
  this.$trackbar.on('change', function () {
    thisTI.$input.value = thisTI.value + '';
    thisTI.emit('change', thisTI.value);
  });
  this.$input.on('keyup', this.eventHandler.inputChange);
  this.inputTextWidth = 2;
  this.valueFixed = undefined;
  return this;
}

TrackBarInput.tag = 'TrackBarInput'.toLowerCase();

TrackBarInput.render = function () {
  return TrackBarInput_({
    "class": 'absol-trackbar-input',
    extendEvent: 'change',
    child: ['trackbar', 'flexiconinput']
  });
};

TrackBarInput.prototype.init = function (props) {
  props = props || {};
  props.leftValue = props.leftValue || 0;
  props.value = props.value || props.leftValue;
  Object.assign(this, props);
  this.value = props.value;
};

TrackBarInput.prototype._calInputTextWidth = function () {
  var l = Math.max(this.leftValue.toFixed(this.valueFixed || 0).length, this.rightValue.toFixed(this.valueFixed || 0).length, 2);

  if (this.valueFixed > 0) {
    l -= 0.8;
  }

  this.inputTextWidth = l;
}; // absol.OOP.drillProperty(this, this.$trackbar, ['leftValue', 'rightValue']);


TrackBarInput.property = {};
TrackBarInput.property.leftValue = {
  set: function set(value) {
    this.$trackbar.leftValue = value;

    this._calInputTextWidth();
  },
  get: function get() {
    return this.$trackbar.leftValue;
  }
};
TrackBarInput.property.rightValue = {
  set: function set(value) {
    this.$trackbar.rightValue = value;

    this._calInputTextWidth();
  },
  get: function get() {
    return this.$trackbar.rightValue;
  }
};
TrackBarInput.property.value = {
  set: function set(value) {
    this.$trackbar.value = value || 0;
    this.$input.value = this.value + '';
  },
  get: function get() {
    return parseFloat((this.valueFixed === undefined ? this.$trackbar.value : this.$trackbar.value.toFixed(this.valueFixed)) + '');
  }
};
TrackBarInput.property.valueFixed = {
  set: function set(value) {
    if (value === undefined || value === null) value = undefined;
    this._valueFixed = value;
    this.$input.value = this.value + '';

    this._calInputTextWidth();
  },
  get: function get() {
    return this._valueFixed;
  }
};
TrackBarInput.property.inputTextWidth = {
  set: function set(value) {
    if (typeof value == 'number') {
      this._inputTextWidth = value;
      this.addStyle('--input-width', 3 + (value - 2) * 0.42 + 0.3 + 'em');
    } else {
      this._inputTextWidth = value;
      this.addStyle('--input-width', value);
    }
  },
  get: function get() {
    return this._inputTextWidth;
  }
};
TrackBarInput.property.disabled = {
  get: function get() {
    return this.containsClass('as-disabled');
  },
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }

    this.$input.disabled = !!value;
    this.$trackbar.disabled = !!value;
  }
};
TrackBarInput.eventHandler = {};

TrackBarInput.eventHandler.inputChange = function (event) {
  var newValue = parseFloat(this.$input.value);

  if (!isNaN(newValue)) {
    newValue = Math.max(this.leftValue, Math.min(this.rightValue, newValue));
    this.$trackbar.value = newValue;
    this.emit('change', this.value);
  }
};

/* harmony default export */ const js_TrackBarInput = (TrackBarInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/buttonrange.css
var buttonrange = __webpack_require__(1839);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonRange.js
function ButtonRange_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ButtonRange_typeof = function _typeof(obj) { return typeof obj; }; } else { ButtonRange_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ButtonRange_typeof(obj); }






var ButtonRange_ = absol_acomp_ACore._;
var ButtonRange_$ = absol_acomp_ACore.$;
var ChevronLeft = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 410.258 410.258" style="enable-background:new 0 0 410.258 410.258;" xml:space="preserve">\n' + '<polygon points="298.052,24 266.052,0 112.206,205.129 266.052,410.258 298.052,386.258 162.206,205.129 "/>\n' + '</svg>';
var ChevronRight = '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n' + '\t viewBox="0 0 410.258 410.258" style="enable-background:new 0 0 410.258 410.258;" xml:space="preserve">\n' + '<polygon points="144.206,0 112.206,24 248.052,205.129 112.206,386.258 144.206,410.258 298.052,205.129 "/>\n' + '</svg>';
/***
 * @extends AElement
 * @constructor
 */

function ButtonRange() {
  this._dict = {};
  this._pool = [];
  this._items = [];
  this.$lastActiveBtn = null;
  this._value = undefined;
  this._lastValue = this._value;
  this.$scroller = ButtonRange_$('.as-button-range-scroller', this).on('wheel', this.eventHandler.wheel);
  this.$prevBtn = ButtonRange_$('.as-button-range-left-btn', this).on('click', this.prevValue.bind(this));
  this.$nextBtn = ButtonRange_$('.as-button-range-right-btn', this).on('click', this.nextValue.bind(this));
  this._scrollTimeout = -1;
  this._scrollToSelected = this._scrollToSelected.bind(this);
  this.$attachhook = ButtonRange_$('attachhook', this).on('error', this.eventHandler.attached);
  this.autoWidth = false;
}

ButtonRange.tag = 'buttonrange';

ButtonRange.render = function () {
  return ButtonRange_({
    extendEvent: ['change'],
    "class": 'as-button-range',
    child: [{
      "class": 'as-button-range-scroller'
    }, {
      "class": 'as-button-range-left-ctn',
      child: {
        tag: 'button',
        "class": 'as-button-range-left-btn',
        child: ChevronLeft
      }
    }, {
      "class": 'as-button-range-right-ctn',
      child: {
        tag: 'button',
        "class": 'as-button-range-right-btn',
        child: ChevronRight
      }
    }, 'attachhook']
  });
};

ButtonRange.prototype._updateUnderlinePosition = function () {
  if (!this.$lastActiveBtn) return;
  var scrollerFirstBound = this.$scroller.firstChild.getBoundingClientRect();
  if (scrollerFirstBound.width === 0) return;
  var activeBound = this.$lastActiveBtn.getBoundingClientRect();
  this.addStyle({
    '--underline-left': activeBound.left - scrollerFirstBound.left + 'px',
    '--underline-width': activeBound.width + 'px'
  });
};

ButtonRange.prototype.updateSize = function () {
  if (this.autoWidth) {
    if (this.$scroller.childNodes.length > 0) {
      var left = this.$scroller.firstChild.getBoundingClientRect().left;
      var right = this.$scroller.lastChild.getBoundingClientRect().right;

      if (left < right) {
        var fontSize = this.getFontSize() || 14;
        this.addStyle('width', (right - left + 2) / fontSize + 2 + 'em');
      }
    }
  }

  this._updateUnderlinePosition();

  this._scrollToSelected();
};

ButtonRange.prototype._newButton = function () {
  var button = ButtonRange_({
    tag: 'button',
    "class": 'as-button-range-item',
    child: {
      text: 'null'
    }
  });

  button.on('click', this.eventHandler.clickItem.bind(this, button));
  return button;
};

ButtonRange.prototype._requestButton = function (items) {
  var button;

  if (this._pool.length > 0) {
    button = this._pool.pop();
  } else {
    button = this._newButton();
  }

  return button;
};

ButtonRange.prototype._assignButton = function (button, data) {
  button._data = data;
  button.childNodes[0].data = data.text;
};

ButtonRange.prototype._releaseButton = function (button) {
  this._pool.push(button);
};

ButtonRange.prototype._requireButton = function (n) {
  var child;

  while (this.$scroller.childNodes.length > n) {
    child = this.$scroller.lastChild;

    this._releaseButton(child);

    this.$scroller.removeChild(child);
  }

  while (this.$scroller.childNodes.length < n) {
    this.$scroller.addChild(this._requestButton());
  }
};

ButtonRange.prototype._assignButtonList = function (items) {
  var item;

  for (var i = 0; i < items.length; ++i) {
    item = this._getFullFormat(items[i]);

    this._assignButton(this.$scroller.childNodes[i], item);

    this._dict[item.ident] = {
      elt: this.$scroller.childNodes[i],
      data: item
    };
  }
};

ButtonRange.prototype._scrollToSelected = function () {
  if (this._scrollTimeout >= 0) return;
  if (!this.$lastActiveBtn) return;
  var scrollerBound = this.$scroller.getBoundingClientRect();
  if (scrollerBound.width === 0) return;
  var activeBound = this.$lastActiveBtn.getBoundingClientRect();
  var dx, speed;

  if (activeBound.left < scrollerBound.left - 1) {
    dx = activeBound.left - scrollerBound.left;
    if (dx < -500) dx = -500;
    speed = Math.sqrt(-dx * 2 + 4);
    this.$scroller.scrollLeft -= speed;
  } else if (activeBound.right - 1 > scrollerBound.right) {
    dx = activeBound.right - scrollerBound.right;
    if (dx > 500) dx = 500;
    speed = Math.sqrt(dx * 2 + 4);
    this.$scroller.scrollLeft += speed;
  } else {
    return;
  }

  var thisBR = this;
  this._scrollTimeout = setTimeout(function () {
    thisBR._scrollTimeout = -1;

    thisBR._scrollToSelected();
  }, 20);
};

ButtonRange.prototype.nextValue = function (userAction) {
  var currentIndex = this._findActiveIndex();

  var nextIndex;
  var nextValue;

  if (currentIndex < 0) {
    nextIndex = 0;
  } else {
    nextIndex = Math.min(this._items.length - 1, currentIndex + 1);
  }

  if (nextIndex >= 0) {
    nextValue = this._getFullFormat(this._items[nextIndex]).value;
    this.value = nextValue;
    if (userAction) this.notifyChange();
  }
};

ButtonRange.prototype.prevValue = function (userAction) {
  var currentIndex = this._findActiveIndex();

  var prevIndex;
  var prevValue;

  if (currentIndex < 0) {
    prevIndex = 0;
  } else {
    prevIndex = Math.max(0, currentIndex - 1);
  }

  if (prevIndex >= 0 && prevIndex < this._items.length && prevIndex != currentIndex) {
    prevValue = this._getFullFormat(this._items[prevIndex]).value;
    this.value = prevValue;
    if (userAction) this.notifyChange();
  }
};

ButtonRange.prototype._findActiveIndex = function () {
  var item;
  var value = this._value;

  for (var i = 0; i < this._items.length; ++i) {
    item = this._items[i];
    if (item === value || item && item.value === value) return i;
  }

  return -1;
};

ButtonRange.prototype._getFullFormat = function (item) {
  var res = {};

  if (typeof item == 'string' || typeof item == 'number' || typeof item == 'boolean' || item === null || item === undefined) {
    res.ident = item + '';
    res.value = item;
    res.text = item + '';
  } else if (item && ButtonRange_typeof(item) == 'object') {
    res.value = item.value;
    res.ident = res.value + '';
    res.text = item.text;
  }

  return res;
};

ButtonRange.prototype.notifyChange = function () {
  this.emit('change', {
    target: this,
    value: this.value,
    type: 'change'
  }, this);
};

ButtonRange.property = {};
/**
 * @type {ButtonRange}
 */

ButtonRange.property.items = {
  set: function set(items) {
    items = items || [];
    this._items = items;

    this._requireButton(items.length);

    this._assignButtonList(items);

    if (items.length > 0) {
      if (!this._dict[this._value + '']) {
        this._value = this._getFullFormat(items[0]).value;
      }
    }

    this.value = this._value;
    this.updateSize();
  },
  get: function get() {
    return this._items;
  }
};
ButtonRange.property.value = {
  set: function set(value) {
    this._value = value;
    this._lastValue = this._value;

    if (this.$lastActiveBtn) {
      this.$lastActiveBtn.removeClass('as-active');
      this.$lastActiveBtn = null;
    }

    var hodler = this._dict[value + ''];

    if (hodler) {
      hodler.elt.addClass('as-active');
      this.$lastActiveBtn = hodler.elt;
    }

    var activeIndex = this._findActiveIndex();

    this.$prevBtn.disabled = activeIndex === 0;
    this.$nextBtn.disabled = activeIndex === this._items.length - 1;

    this._updateUnderlinePosition();

    this._scrollToSelected();
  },
  get: function get() {
    return this._value;
  }
};
ButtonRange.eventHandler = {};

ButtonRange.eventHandler.clickItem = function (item, event) {
  if (this._lastValue != item._data.value) {
    this.value = item._data.value;
    this.notifyChange();
  }
};

ButtonRange.eventHandler.attached = function () {
  if (this.style.width === 'auto') this.autoWidth = true;
  HTML5_Dom.addToResizeSystem(this.$attachHook);
  this.updateSize();
};

ButtonRange.eventHandler.wheel = function (event) {
  var prevLeft = this.$scroller.scrollLeft;

  if (event.deltaY < 0) {
    this.$scroller.scrollLeft -= 100;
  } else if (event.deltaY > 0) {
    this.$scroller.scrollLeft += 100;
  }

  if (prevLeft !== this.$scroller.scrollLeft) event.preventDefault();
};

absol_acomp_ACore.install(ButtonRange);
/* harmony default export */ const js_ButtonRange = (ButtonRange);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dropzone.css
var dropzone = __webpack_require__(6727);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropZone.js



var DropZone_ = absol_acomp_ACore._;
var DropZone_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function DropZone() {
  this.defineEvent(['fileenter', 'fileleave', 'filedrop']);
  this.addClass('as-drop-zone');
  this.on('dragover', this.eventHandler.dragZoneFileOver).on('drop', this.eventHandler.dropZoneFileDrop);
  this._fileOverTimeout = -1;
}

DropZone.tag = 'dropzone';

DropZone.render = function () {
  return DropZone_('div');
};

DropZone.eventHandler = {};

DropZone.eventHandler.dragZoneFileOver = function (event) {
  event.preventDefault();

  if (this._fileOverTimeout > 0) {
    clearTimeout(this._fileOverTimeout);
  } else {
    this.addClass('as-drag-over');
    this.emit('fileenter', event, this);
  }

  this._fileOverTimeout = setTimeout(this.eventHandler.dragZoneFileOverEnd, 100);
};
/***
 *
 * @param {DragEvent} event
 */


DropZone.eventHandler.dropZoneFileDrop = function (event) {
  if (this._fileOverTimeout > 0) {
    clearTimeout(this._fileOverTimeout);
    this._fileOverTimeout = -1;
  }

  event.preventDefault();
  this.removeClass('as-drag-over');
  event._files = null;
  Object.defineProperty(event, 'files', {
    get: function get() {
      if (this._files) return this._files;
      var files = [];
      var file;

      if (event.dataTransfer.items) {
        for (var i = 0; i < event.dataTransfer.items.length; i++) {
          if (event.dataTransfer.items[i].kind === 'file') {
            file = event.dataTransfer.items[i].getAsFile();
            files.push(file);
          }
        }
      } else {
        // Use DataTransfer interface to access the file(s)
        for (var i = 0; i < event.dataTransfer.files.length; i++) {
          files.push(event.dataTransfer.files[i]);
        }
      }

      this._files = files;
      return this._files;
    }
  });
  this.emit('filedrop', event, this);
};

DropZone.eventHandler.dragZoneFileOverEnd = function () {
  this._fileOverTimeout = -1;
  this.removeClass('as-drag-over');
  this.emit('fileleave', {
    type: 'fileleave'
  }, this);
};

absol_acomp_ACore.install(DropZone);
/* harmony default export */ const js_DropZone = (DropZone);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/radioinput.css
var radioinput = __webpack_require__(2800);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioInput.js


 //new tech, not working version

var RadioInput_ = absol_acomp_ACore._;
var RadioInput_$ = absol_acomp_ACore.$;
/***
 * @extends Element
 * @constructor
 */

function RadioInput() {
  this.$input = RadioInput_$('input', this).on('change', this.notifyChange.bind(this));
  this.checked = false;
  this.disabled = false;
  this.on('click', this.eventHandler.click);
  this.onchange = null;
}

RadioInput.tag = "RadioInput".toLowerCase();

RadioInput.render = function (data) {
  return RadioInput_({
    tag: 'label',
    extendEvent: 'change',
    "class": 'as-radio-input',
    child: [{
      elt: data && data.$input,
      tag: 'input',
      "class": 'as-radio-input-value',
      attr: {
        type: 'radio'
      }
    }, {
      "class": ['as-radio-input-check-mark']
    }]
  });
};
/***
 * as normal, change event will be fired when radio change by system
 */


RadioInput.prototype.notifyChange = function () {
  var event = {
    checked: this.checked
  };
  this.emit('change', event, this);
};

RadioInput.prototype._updateCheckedClass = function () {
  if (this.checked) {
    this.addClass('as-checked');
  } else {
    this.removeClass('as-checked');
  }
};

RadioInput.property = {};
RadioInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }

    this.$input.disabled = !!value;
  },
  get: function get() {
    this.$input.disabled;
  }
};
/***
 *
 * @type {RadioInput}
 */

RadioInput.property.checked = {
  set: function set(value) {
    this.$input.checked = !!value;

    this._updateCheckedClass();
  },
  get: function get() {
    return this.$input.checked;
  }
};
RadioInput.attribute = {
  checked: {
    set: function set(value) {
      if (value === 'false' || value === null) {
        this.checked = false;
      } else {
        this.checked = true;
      }
    },
    get: function get() {
      return this.checked ? 'true' : 'false';
    },
    remove: function remove() {
      this.checked = false;
    }
  },
  disabled: {
    set: function set(value) {
      if (value === 'false' || value === null) {
        this.disabled = false;
      } else {
        this.disabled = true;
      }
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  }
};
/***
 *
 * @type {RadioInput}
 */

RadioInput.eventHandler = {};

RadioInput.eventHandler.click = function () {
  this._updateCheckedClass();
};

absol_acomp_ACore.install(RadioInput);

RadioInput.autoReplace = function () {
  var placeHolders = Array.prototype.slice.call(document.getElementsByTagName(this.tag));
  var ph;
  var attOfPH;
  var attrs;
  var style;
  var classList;
  var attNode;
  var attrName, attrValue;
  var props;

  for (var i = 0; i < placeHolders.length; ++i) {
    ph = placeHolders[i];
    attOfPH = ph.attributes;
    classList = [];
    style = {};
    attrs = {};
    props = {};

    for (var j = 0; j < attOfPH.length; ++j) {
      attNode = attOfPH[j];
      attrName = attNode.nodeName;
      attrValue = attNode.nodeValue;

      if (attrName == 'style') {
        attrValue.trim().split(';').reduce(function (style, prop) {
          var p = prop.split(':');

          if (p.length == 2) {
            style[p[0].trim()] = p[1].trim();
          }

          return style;
        }, style);
      } else if (attrName == 'class') {
        classList = attrValue.trim().split(/\s+/);
      } else if (attrName == 'onchange') {
        props.onchange = new Function('event', 'sender', attrValue);
      } else {
        attrs[attrName] = attrValue;
      }
    }

    var newElt = RadioInput_({
      tag: this.tag,
      attr: attrs,
      "class": classList,
      style: style,
      props: props
    });

    RadioInput_$(ph).selfReplace(newElt);
  }
};

RadioInput.initAfterLoad = function () {
  HTML5_Dom.documentReady.then(function () {
    RadioInput.autoReplace();
  });
};

/* harmony default export */ const js_RadioInput = (RadioInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/onscreenwidget.css
var onscreenwidget = __webpack_require__(6032);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/OnScreenWidget.js
function OnScreenWidget_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { OnScreenWidget_typeof = function _typeof(obj) { return typeof obj; }; } else { OnScreenWidget_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return OnScreenWidget_typeof(obj); }







var OnScreenWidget_ = absol_acomp_ACore._;
var OnScreenWidget_$ = absol_acomp_ACore.$;
var OnScreenWidget_$$ = absol_acomp_ACore.$$;
/***
 * @extends Hanger
 * @constructor
 */

function OnScreenWidget() {
  this.id = 'unset-id-' + randomIdent();
  this.on({
    dragstart: this.eventHandler.widgetStartDrag,
    drag: this.eventHandler.widgetDrag,
    dragend: this.eventHandler.widgetDragEnd
  });
  this.addEventListener('click', function (event) {
    if (!this._preventClick) this.emit('click', event, this);
  });
  this.$attachhook = OnScreenWidget_('attachhook').addTo(this);
  this.$attachhook.on('attached', this.eventHandler.attached);
  this.config = null;
}

OnScreenWidget.tag = 'OnScreenWidget'.toLowerCase();

OnScreenWidget.render = function () {
  return OnScreenWidget_({
    tag: 'hanger',
    extendEvent: 'click',
    "class": 'as-onscreen-widget',
    style: {
      visibility: 'hidden'
    }
  });
};

OnScreenWidget.prototype.configPrefix = 'on-screen-widget-';

OnScreenWidget.prototype._genConfig = function () {
  this._widgetBound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  return {
    cx: (this._widgetBound.left + this._widgetBound.width / 2) * 100 / screenSize.width,
    cy: (this._widgetBound.top + this._widgetBound.height / 2) * 100 / screenSize.height
  };
};

OnScreenWidget.prototype._saveConfig = function () {
  var id = this.id || '';
  if (id.startsWith('unset-id-') || !this.config) return;
  localStorage.setItem(this.configPrefix + id, JSON.stringify(this.config));
};

OnScreenWidget.prototype._loadConfig = function () {
  var id = this.id || '';
  if (id.startsWith('unset-id-')) return;
  var config = null;

  try {
    config = JSON.parse(localStorage.getItem(this.configPrefix + id));

    if (OnScreenWidget_typeof(config) !== "object" || typeof config.cx !== "number" || typeof config.cy !== 'number') {
      config = this.config || this._genConfig();
    }
  } catch (error) {
    config = this.config || this._genConfig();
  }

  var cx = config.cx || 0;
  var cy = config.cy || 0;
  this.addStyle({
    '--cx': cx / 100,
    '--cy': cy / 100
  });
  this.config = config;
};

OnScreenWidget.prototype._updateCSSSize = function () {
  var bound = this.getBoundingClientRect();
  this.addStyle({
    '--client-height': bound.height + 'px',
    '--client-width': bound.width + 'px'
  });
  this.removeStyle('visibility');
};
/***
 *
 * @type {OnScreenWidget|{}}
 */


OnScreenWidget.eventHandler = {};

OnScreenWidget.eventHandler.attached = function () {
  var images = OnScreenWidget_$$('img', this);
  var syncs = images.map(function (img) {
    if (img.classList.contains('absol-attachhook')) return Promise.resolve();
    return waitImageLoaded(img, 100);
  });
  var thisW = this;
  Promise.all(syncs).then(function () {
    thisW._updateCSSSize();

    thisW._loadConfig();
  });
};

OnScreenWidget.eventHandler.widgetStartDrag = function (event) {
  this._widgetBound = this.getBoundingClientRect();
  this._preventClick = true;
};

OnScreenWidget.eventHandler.widgetDrag = function (event) {
  event.preventDefault();
  var screenSize = getScreenSize();
  var p0 = new Math_Vec2(this._widgetBound.left, this._widgetBound.top);
  var dv = event.currentPoint.sub(event.startingPoint);
  var p1 = p0.add(dv);
  var cx = (p1.x - 2) * 100 / (screenSize.width - this._widgetBound.width - 4);
  var cy = (p1.y - 2) * 100 / (screenSize.height - this._widgetBound.height - 4);
  cx = Math.max(0, Math.min(100, cx));
  cy = Math.max(0, Math.min(100, cy));
  this.addStyle({
    '--cx': cx / 100,
    '--cy': cy / 100
  });

  if (this.config) {
    this.config.cx = cx;
    this.config.cy = cy;
  }
};

OnScreenWidget.eventHandler.widgetDragEnd = function () {
  var thisWG = this;
  setTimeout(function () {
    thisWG._preventClick = false;
  }, 100);

  this._saveConfig();
};

absol_acomp_ACore.install(OnScreenWidget);
/* harmony default export */ const js_OnScreenWidget = (OnScreenWidget);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/ribbonsplitbutton.css
var ribbonsplitbutton = __webpack_require__(1391);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RibbonSplitButton.js





var RibbonSplitButton_ = absol_acomp_ACore._;
var RibbonSplitButton_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function RibbonSplitButton() {
  this.$icon = null;
  this._icon = null;
  this.$text = RibbonSplitButton_$('.as-ribbon-split-button-text', this);
  this.$textNode = this.$text.firstChild;
  this.$primaryBtn = RibbonSplitButton_$('.as-ribbon-split-button-primary', this).on('click', this.eventHandler.clickPrimaryBtn);
  this.$extendBtn = RibbonSplitButton_$('.as-ribbon-split-button-extend', this);
  this._menuHolder = null;
}

RibbonSplitButton.tag = 'RibbonSplitButton'.toLowerCase();

RibbonSplitButton.render = function () {
  return RibbonSplitButton_({
    extendEvent: ['press', 'select'],
    attr: {
      'tabindex': '0'
    },
    "class": ['as-ribbon-split-button', 'as-no-dropdown'],
    child: {
      "class": 'as-ribbon-split-button-content',
      child: [{
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-primary',
        child: {
          tag: 'span',
          "class": 'as-ribbon-split-button-text',
          child: {
            text: ''
          }
        }
      }, {
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-extend',
        child: 'span.mdi.mdi-chevron-down'
      }]
    }
  });
};

RibbonSplitButton.property = {};
RibbonSplitButton.property.items = {
  set: function set(items) {
    var thisB = this;
    this._items = items || [];

    if (this._items && this._items.length > 0) {
      if (!this._menuHolder) {
        this.removeClass('as-no-dropdown');
        this._menuHolder = js_QuickMenu.toggleWhenClick(this.$extendBtn || this, {
          getMenuProps: function getMenuProps() {
            return {
              extendStyle: {
                'min-width': thisB.getBoundingClientRect().width + 'px'
              },
              items: thisB._items
            };
          },
          getFlowedElement: function getFlowedElement() {
            return thisB;
          },
          anchor: [1, 2, 6, 5],
          onSelect: function onSelect(item) {
            thisB.emit('select', {
              item: cleanMenuItemProperty(item),
              type: 'select',
              target: thisB
            });
          }
        });
      }
    } else {
      if (this._menuHolder) {
        this.addClass('as-no-dropdown');

        this._menuHolder.remove();

        this._menuHolder = null;
      }
    }
  },
  get: function get() {
    return this._items;
  }
};
RibbonSplitButton.property.text = {
  set: function set(value) {
    value = value || '';
    this.$textNode.data = value;
  },
  get: function get() {
    return this.$textNode.data;
  }
};
RibbonSplitButton.property.icon = {
  set: function set(icon) {
    icon = icon || null;
    this._icon = icon;
    if (this.$icon) this.$primaryBtn.removeChild(this.$icon);

    if (icon) {
      this.$icon = RibbonSplitButton_(icon);
      this.$primaryBtn.addChildBefore(this.$icon, this.$text);
      if (this.$icon.addClass) this.$icon.addClass('as-ribbon-split-button-icon');
    } else {
      this.$icon = null;
    }
  },
  get: function get() {
    return this._icon;
  }
};
RibbonSplitButton.eventHandler = {};

RibbonSplitButton.eventHandler.clickPrimaryBtn = function () {
  this.emit('press', {
    type: 'press',
    target: this,
    item: cleanMenuItemProperty(this)
  });
};

absol_acomp_ACore.install(RibbonSplitButton);
/* harmony default export */ const js_RibbonSplitButton = (RibbonSplitButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/ribbonbutton.css
var ribbonbutton = __webpack_require__(5507);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RibbonButton.js




var RibbonButton_ = absol_acomp_ACore._;
var RibbonButton_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function RibbonButton() {
  this.$icon = null;
  this._icon = null;
  this.$text = RibbonButton_$('.as-ribbon-button-text', this);
  this.$textNode = this.$text.firstChild;
  this._menuHolder = null;
}

RibbonButton.tag = 'RibbonButton'.toLowerCase();

RibbonButton.render = function () {
  return RibbonButton_({
    tag: 'button',
    extendEvent: ['select'],
    attr: {
      'tabindex': '0'
    },
    "class": ['as-ribbon-button', 'as-no-dropdown'],
    child: [{
      tag: 'span',
      "class": 'as-ribbon-button-text',
      child: {
        text: ''
      }
    }, 'span.mdi.mdi-chevron-down']
  });
};

RibbonButton.property = Object.assign({}, js_RibbonSplitButton.property);
RibbonButton.property.icon = {
  set: function set(icon) {
    icon = icon || null;
    this._icon = icon;
    if (this.$icon) this.removeChild(this.$icon);

    if (icon) {
      this.$icon = RibbonButton_(icon);
      this.addChildBefore(this.$icon, this.$text);
      if (this.$icon.addClass) this.$icon.addClass('as-ribbon-button-icon');
    } else {
      this.$icon = null;
    }
  },
  get: function get() {
    return this._icon;
  }
};
RibbonButton.eventHandler = {};
absol_acomp_ACore.install(RibbonButton);
/* harmony default export */ const js_RibbonButton = (RibbonButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeselectinput.css
var timeselectinput = __webpack_require__(8093);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeSelectInput.js








var TimeSelectInput_ = absol_acomp_ACore._;
var TimeSelectInput_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function TimeSelectInput() {
  /***
   *
   * @type {SelectListBox}
   */
  this.$selectlistBox = TimeSelectInput_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  this.$text = TimeSelectInput_$('.as-time-select-input-text', this).on('change', this.eventHandler.textChange).on('keyup', this.eventHandler.textKeyUp).on('keydown', this.eventHandler.textKeyDown);
  this.$toggleBtn = TimeSelectInput_$('absol-selectmenu-btn', this);
  this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem);
  this.$selectlistBox.followTarget = this;

  this._makeTimeList(0, MILLIS_PER_DAY, MILLIS_PER_MINUTE * 15);

  this._hour = 0;
  this._minute = 0;
  this._lastDayOffset = 0;
  this.dayOffset = 0;
  this.on('click', this.eventHandler.click);
}

TimeSelectInput.tag = 'TimeSelectInput'.toLowerCase();

TimeSelectInput.render = function () {
  return TimeSelectInput_({
    "class": 'as-time-select-input',
    extendEvent: 'change',
    attr: {
      tabindex: 0
    },
    child: [{
      tag: 'input',
      "class": 'as-time-select-input-text',
      attr: {
        type: 'text'
      }
    }, {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }]
  });
};

TimeSelectInput.prototype._makeTimeList = function (start, end, step) {
  var items = [];

  for (var t = 0; t < end; t += step) {
    items.push({
      text: this._mil2Text(t),
      value: t
    });
  }

  this.$selectlistBox.items = items;
  this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px');
};

TimeSelectInput.prototype.textRegx = /^((1[0-2])|[1-9]):([0-5][0-9]) (AM|PM)$/;

TimeSelectInput.prototype._mil2Text = function (mil) {
  if (mil < 0) {
    mil = mil + Math.ceil(-mil / MILLIS_PER_DAY) * MILLIS_PER_DAY;
  }

  var min = Math.floor(mil / MILLIS_PER_MINUTE);
  var hour = Math.floor(min / 60) % 24;
  min = min % 60;
  return (hour % 12 == 0 ? 12 : hour % 12) + ':' + (min < 10 ? '0' : '') + min + ' ' + (hour < 12 ? 'AM' : 'PM');
};
/***
 *
 * @param {string} s
 * @private
 */


TimeSelectInput.prototype._text2mil = function (s) {
  s = s.toLowerCase();
  var nums = s.match(/[0-9]+/g) || [0, 0];

  while (nums.length < 2) {
    nums.push(0);
  }

  var h = positiveIntMod(parseInt(nums[0]), 24);
  var m = positiveIntMod(parseInt(nums[1]), 60);
  var pm = s.indexOf('pm') > 0 || h > 12;

  if (pm) {
    if (h < 12) h += 12;
  } else {
    if (h == 12) h = 0;
  }

  return h * MILLIS_PER_HOUR + m * MILLIS_PER_MINUTE;
};

TimeSelectInput.prototype.isActive = function () {
  return document.activeElement == this || HTML5_AElement.prototype.isDescendantOf.call(document.activeElement, this) || HTML5_AElement.prototype.isDescendantOf.call(document.activeElement, this.$selectlistBox);
};

TimeSelectInput.prototype._updateValueText = function () {
  this.$text.value = this._mil2Text(this.dayOffset);
};

TimeSelectInput.prototype.notifyCanBeChange = function () {
  var dayOffset = this.dayOffset;

  if (this._lastDayOffset !== dayOffset) {
    this.emit('change', {
      type: 'change',
      lastDayOffset: this._lastDayOffset,
      dayOffset: dayOffset,
      target: this
    }, this);
    this._lastDayOffset = dayOffset;
  }
};

TimeSelectInput.property = {};
TimeSelectInput.property.isFocus = {
  get: function get() {
    return this.containsClass('as-focus');
  },
  set: function set(value) {
    value = !!value;
    if (this.isFocus == value) return;

    if (value) {
      this.addClass('as-focus');
    } else {
      this.removeClass('as-focus');
    }

    var thisI = this;

    if (value) {
      document.body.appendChild(this.$selectlistBox);
      this.$selectlistBox.domSignal.$attachhook.emit('attached');
      var bound = this.getBoundingClientRect();
      this.$selectlistBox.addStyle('min-width', bound.width + 'px');
      this.$selectlistBox.refollow();
      this.$selectlistBox.updatePosition();
      setTimeout(function () {
        if (thisI.enableSearch) {
          thisI.$selectlistBox.$searchInput.focus();
        }

        TimeSelectInput_$(document.body).on('click', thisI.eventHandler.bodyClick);
      }, 1);
      this.$selectlistBox.viewListAtFirstSelected();
    } else {
      TimeSelectInput_$(document.body).off('click', thisI.eventHandler.bodyClick);
      this.$selectlistBox.selfRemove();
      this.$selectlistBox.unfollow();
      this.$selectlistBox.resetSearchState();
    }
  }
};
TimeSelectInput.property.hour = {
  set: function set(value) {
    this._hour = positiveIntMod(value, 24);
    this._lastDayOffset = this.dayOffset;

    this._updateValueText();
  },
  get: function get() {
    return this._hour;
  }
};
TimeSelectInput.property.minute = {
  set: function set(value) {
    this._minute = positiveIntMod(value, 60);
    this._lastDayOffset = this.dayOffset;

    this._updateValueText();
  },
  get: function get() {
    return this._minute;
  }
};
TimeSelectInput.property.dayOffset = js_TimeInput.property.dayOffset;
TimeSelectInput.property.disabled = {
  set: function set(value) {
    this.$text.disabled = !!value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.containsClass('as-disabled');
  }
};
/***
 *
 * @type {{}|TimeSelectInput}
 */

TimeSelectInput.eventHandler = {};

TimeSelectInput.eventHandler.selectListBoxPressItem = function (event) {
  var lastValue = this._lastDayOffset;
  var value = event.value;

  var text = this._mil2Text(value);

  this.dayOffset = value;
  this.$selectlistBox.values = [value];
  this.focus();
  setTimeout(function () {
    this.isFocus = false;
  }.bind(this), 100);
  this._lastDayOffset = lastValue; // restore last value after set dayOffset

  this.notifyCanBeChange();
};

TimeSelectInput.eventHandler.preUpdateListPosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
  var outBound = traceOutBoundingClientRect(this);

  if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
    this.isFocus = false;
  }
};

TimeSelectInput.eventHandler.textChange = function () {
  setTimeout(function () {
    if (!this.textRegx.test(this.$text.value)) {
      this.$text.value = this._mil2Text(this.dayOffset);
    }
  }.bind(this), 10);
};
/***
 *
 * @param {KeyboardEvent} event
 */


TimeSelectInput.eventHandler.textKeyDown = function (event) {
  if (event.key == 'Enter') {
    this.isFocus = false;
    this.$text.blur();
    this.notifyCanBeChange();
  }
};

TimeSelectInput.eventHandler.textKeyUp = function (event) {
  var s = this.$text.value;

  var mil = this._text2mil(s);

  this._hour = Math.floor(mil / MILLIS_PER_HOUR);
  this._minute = Math.floor(mil / MILLIS_PER_MINUTE) % 60;
  this.$selectlistBox.values = [mil];
  this.$selectlistBox.viewListAtFirstSelected();
};

TimeSelectInput.eventHandler.click = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$text, event)) {
    this.isFocus = !this.isFocus;
    setTimeout(function () {
      if (this.isFocus && this.$text != document.activeElement) {
        this.$text.select();
      }
    }.bind(this), 1);
  } else {
    if (!this.isFocus) this.isFocus = true;
  }
};

TimeSelectInput.eventHandler.bodyClick = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event) || HTML5_EventEmitter.hitElement(this.$selectlistBox, event)) return;
  this.isFocus = false;
};

absol_acomp_ACore.install(TimeSelectInput);
/* harmony default export */ const js_TimeSelectInput = (TimeSelectInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/snackbar.css
var snackbar = __webpack_require__(7058);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Snackbar.js
function Snackbar_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Snackbar_typeof = function _typeof(obj) { return typeof obj; }; } else { Snackbar_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Snackbar_typeof(obj); }






var Snackbar_ = absol_acomp_ACore._;
var Snackbar_$ = absol_acomp_ACore.$;
var t = document.createElement;
/***
 * @extends AElement
 * @constructor
 */

function SnackBar() {
  // OOP.drillProperty(this, this.firstChild, 'message', 'data');

  /***
   *
   * @type {*}
   */
  this._message = null;
  this.message = null;
}

SnackBar.tag = 'SnackBar'.toLowerCase();

SnackBar.render = function () {
  return Snackbar_({
    "class": 'as-snackbar'
  });
};

SnackBar.property = {};
SnackBar.property.message = {
  set: function set(value) {
    this._message = value;

    if (value instanceof Array) {
      this.clearChild();
      this.addChild(value.map(function (item) {
        return Snackbar_(item);
      }));
    } else if (typeof value === 'string') {
      this.innerHTML = value;
    } else if (isDomNode(value)) {
      this.clearChild().addChild(value);
    } else if (value && Snackbar_typeof(value) === 'object' && (value.text || value.props || value.tag || value.attr || value.style || value.child || value.child && value.child instanceof Array)) {
      this.clearChild().addChild(Snackbar_(value));
    } else {
      this.clearChild();
      this._message = null;
    }
  },
  get: function get() {
    return this._message;
  }
};
absol_acomp_ACore.install(SnackBar);
SnackBar.$instance = Snackbar_('snackbar');
SnackBar._removeTimeout = -1;

SnackBar.show = function (message) {
  if (SnackBar._removeTimeout > 0) {
    clearTimeout(SnackBar._removeTimeout);
  }

  if (!SnackBar.$instance.parentElement) document.body.appendChild(SnackBar.$instance);
  SnackBar.$instance.removeClass('as-hiding');
  SnackBar._removeTimeout = setTimeout(function () {
    SnackBar.$instance.addClass('as-show');
    SnackBar.$instance.message = message;
    SnackBar._removeTimeout = setTimeout(function () {
      SnackBar.$instance.removeClass('as-show').addClass('as-hiding');
      SnackBar._removeTimeout = setTimeout(function () {
        SnackBar.$instance.remove();
        SnackBar._removeTimeout = -1;
        SnackBar.$instance.removeClass('as-hiding');
      }, 500);
    }, 3000);
  }, 1);
};

/* harmony default export */ const Snackbar = (SnackBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/multiselectmenu.css
var multiselectmenu = __webpack_require__(5033);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiSelectMenu.js










var MultiSelectMenu_ = absol_acomp_ACore._;
var MultiSelectMenu_$ = absol_acomp_ACore.$;
/***
 * @augments SelectBox
 * @augments PositionTracker
 * @constructor
 */

function MultiSelectMenu() {
  this.on('click', this.eventHandler.click);
  /***
   *
   * @type {SelectListBox}
   */

  this.$selectlistBox = MultiSelectMenu_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5],
      displayValue: VALUE_HIDDEN
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition,
      pressitem: this.eventHandler.selectListBoxPressItem
    }
  });
  this.$itemCtn = MultiSelectMenu_$('.as-multi-select-menu-item-ctn', this);
  this.$attachhook = MultiSelectMenu_$('attachhook', this).on('attached', this.eventHandler.attached);
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  this.$items = [];
  this._values = [];
  this.items = [];
  this.values = [];
  this.$selectlistBox.followTarget = this;
  this.disableClickToFocus = false;
  this.orderly = true;
  this.itemFocusable = false;
  this._activeValue = undefined;
}

MultiSelectMenu.tag = 'MultiSelectMenu'.toLowerCase();

MultiSelectMenu.render = function () {
  return MultiSelectMenu_({
    "class": ['as-multi-select-menu'],
    extendEvent: ['change', 'add', 'remove', 'activevaluechange'],
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": ['as-multi-select-menu-item-ctn', 'as-bscroller']
    }, {
      tag: 'button',
      "class": 'as-multi-select-menu-toggle-btn',
      child: 'dropdown-ico'
    }, 'attachhook']
  });
};

MultiSelectMenu.prototype._requireItem = function (n) {
  var itemElt;

  while (this.$items.length < n) {
    itemElt = SelectBox_requireItem(this);
    this.$itemCtn.addChild(itemElt);
    this.$items.push(itemElt);
  }

  while (this.$items.length > n) {
    itemElt = this.$items.pop();
    this.$itemCtn.removeChild(itemElt);
    SelectBox_releaseItem(itemElt);
  }
};

MultiSelectMenu.prototype._assignItems = function (items) {
  for (var i = 0; i < this.$items.length && i < items.length; ++i) {
    this.$items[i].data = items[i];
  }
};
/***
 *
 * @param {string[] | number[]} values
 * @private
 */


MultiSelectMenu.prototype._getItemsByValues = function (values) {
  var selectListBoxElt = this.$selectlistBox;
  var itemHolders = values.reduce(function (ac, cr) {
    ac.push.apply(ac, selectListBoxElt.findItemsByValue(cr));
    return ac;
  }, []);

  if (this.orderly) {
    if (typeof this.orderly === 'function') {
      itemHolders.sort(this.orderly);
    } else {
      itemHolders.sort(function (a, b) {
        return a.idx - b.idx;
      });
    }
  }

  return itemHolders.map(function (holder) {
    return holder.item;
  });
};

MultiSelectMenu.prototype._updateItems = function () {
  this.viewItemsByValues(this._values);
};

MultiSelectMenu.prototype.viewItemsByValues = function (values) {
  var cBound = this.getBoundingClientRect();

  var items = this._getItemsByValues(values);

  this._requireItem(items.length);

  this._assignItems(items);

  if (this.itemFocusable) {
    this._updateFocusItem();
  }

  var nBound = this.getBoundingClientRect();

  if (nBound.width != cBound.width || nBound.height != cBound.height) {
    HTML5_ResizeSystem.updateUp(this);
  }
};

MultiSelectMenu.property = {};
MultiSelectMenu.property.disabled = SelectMenu2.property.disabled;
MultiSelectMenu.property.hidden = SelectMenu2.property.hidden;
MultiSelectMenu.property.isFocus = SelectMenu2.property.isFocus;

MultiSelectMenu.prototype.init = function (props) {
  props = props || [];
  Object.keys(props).forEach(function (key) {
    if (props[key] === undefined) delete props[key];
  });
  this["super"](props);
};

MultiSelectMenu.prototype._updateFocusItem = function () {
  for (var i = 0; i < this.$items.length; ++i) {
    this.$items[i].active = this.$items[i].value == this._activeValue;
  }
};

MultiSelectMenu.prototype.init = SelectMenu2.prototype.init;
MultiSelectMenu.property.items = {
  set: function set(items) {
    items = items || [];
    this.$selectlistBox.items = items;
    this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px');

    this._updateItems();
  },
  get: function get() {
    return this.$selectlistBox.items;
  }
};
MultiSelectMenu.property.values = {
  set: function set(values) {
    values = values || [];
    values = values instanceof Array ? values : [values];
    this._values = values;
    this.$selectlistBox.values = values;

    this._updateItems();
  },
  get: function get() {
    return this._values || [];
  }
};
MultiSelectMenu.property.orderly = {
  set: function set(value) {
    var needUpdate = this._orderly === this._orderly;

    if (typeof value === 'function') {
      this._orderly;
    } else this._orderly = !!value;

    if (needUpdate) {
      this.values = this.values;
    }
  },
  get: function get() {
    return !!this._orderly;
  }
};
MultiSelectMenu.property.disableClickToFocus = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disable-click-to-focus');
    } else {
      this.removeClass('as-disable-click-to-focus');
    }
  },
  get: function get() {
    return this.containsClass('as-disable-click-to-focus');
  }
};
MultiSelectMenu.property.itemFocusable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-item-focusable');
    } else {
      this.removeClass('as-item-focusable');
    }

    this._updateFocusItem();
  },
  get: function get() {
    return this.containsClass('as-item-focusable');
  }
};
MultiSelectMenu.property.activeValue = {
  set: function set(value) {
    this._activeValue = value;

    if (this.itemFocusable) {
      this._updateFocusItem(); //todo

    }
  },
  get: function get() {
    return this._activeValue;
  }
};
MultiSelectMenu.eventHandler = Object.assign({}, SelectMenu2.eventHandler);

MultiSelectMenu.eventHandler.attached = function () {
  var maxHeightStyle = this.getComputedStyleValue('max-height') || 'none';

  if (maxHeightStyle.match(/[0-9-]+px/)) {
    this.addStyle('--multi-select-menu-max-height', maxHeightStyle);
    this.addStyle('max-height', 'unset');
  } else if (maxHeightStyle !== 'none') {
    console.warn('Can not adapt max-height:', maxHeightStyle);
  }
};

MultiSelectMenu.eventHandler.click = function (event) {
  if ((event.target === this || event.target === this.$itemCtn) && !this.disableClickToFocus) {
    this.isFocus = !this.isFocus;
  }
};

MultiSelectMenu.eventHandler.bodyClick = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$selectlistBox, event) && event.target !== this && event.target !== this.$itemCtn) {
    this.isFocus = false;
  }
};

MultiSelectMenu.eventHandler.selectListBoxPressItem = function (event) {
  var data = event.data;
  var currentValues = this.$selectlistBox.values;
  currentValues.push(data.value);
  this.$selectlistBox.values = currentValues;
  this.$selectlistBox.updatePosition();
  this._values = currentValues.slice();
  this._activeValue = data.value;

  this._updateItems();

  this.isFocus = false;
  this.emit('add', Object.assign({}, event, {
    type: 'add',
    target: this,
    value: data.value,
    data: data,
    itemData: data
  }), this);
  this.emit('change', Object.assign({}, event, {
    type: 'change',
    action: 'add',
    target: this,
    value: data.value,
    data: data,
    values: this.values
  }), this);
};

MultiSelectMenu.eventHandler.pressItem = function (item, event) {
  var value = item.value;

  if (this.itemFocusable) {
    var prevActiveValue = this.activeValue;

    if (value !== prevActiveValue) {
      this.activeValue = value;
      this.emit('activevaluechange', {
        target: this,
        originEvent: event,
        prevActiveValue: prevActiveValue,
        activeValue: value
      }, this);
    }
  }
};

MultiSelectMenu.eventHandler.pressCloseItem = function (item, event) {
  var value = item.value;
  var data = item.data;
  var index;
  index = this._values.indexOf(value);

  if (index >= 0) {
    this._values.splice(index, 1);

    this._updateItems();

    this.$selectlistBox.values = this._values;
    this.emit('remove', Object.assign({}, event, {
      type: 'change',
      target: this,
      data: data,
      value: value,
      itemData: data
    }), this);
    this.emit('change', Object.assign({}, event, {
      type: 'change',
      action: 'remove',
      target: this,
      data: data,
      value: value,
      itemData: data
    }), this);
  }
};

absol_acomp_ACore.install(MultiSelectMenu);
/* harmony default export */ const js_MultiSelectMenu = (MultiSelectMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdownclock.css
var countdownclock = __webpack_require__(466);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownClock.js





var CountdownClock_ = absol_acomp_ACore._;
var CountdownClock_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function CountdownClock() {
  var thisC = this;
  this.$attachhook = CountdownClock_('attachhook').addTo(this).on('attached', function () {
    HTML5_ResizeSystem.add(this);
    this.requestUpdateSize();

    if (thisC.autoStart) {
      thisC.start();
    }
  });
  this.$attachhook.requestUpdateSize = this._updateBorder.bind(this);
  this._tick = this._tick.bind(this);
  this.$border = CountdownClock_$(".as-countdown-clock-border", this);
  this.$min = CountdownClock_$(".as-countdown-clock-min", this);
  this.$sec = CountdownClock_$(".as-countdown-clock-sec", this);
  this._prevText = -1;
  this._startTime = new Date().getTime();
  this._totalSecond = 60;
  this._remainSecond = 0;
  this.totalSecond = 60;
  this.remainSecond = 0;
  this._intvId = -1;
}

CountdownClock.tag = 'CountdownClock'.toLowerCase();

CountdownClock.render = function () {
  return CountdownClock_({
    extendEvent: ['finish', 'update'],
    "class": 'as-countdown-clock',
    child: [{
      "class": 'as-countdown-clock-text',
      child: [{
        tag: 'span',
        "class": 'as-countdown-clock-min',
        child: {
          text: 0
        }
      }, {
        text: ':'
      }, {
        tag: 'span',
        "class": 'as-countdown-clock-sec',
        child: {
          text: '60'
        }
      }]
    }, {
      "class": 'as-countdown-clock-border-wrapper',
      child: {
        "class": 'as-countdown-clock-border'
      }
    }]
  });
};

CountdownClock.prototype._makePolygon = function (end) {
  var n = Math.ceil(Math.max(end / 0.2, 2));
  var fan = Array(n).fill(0).map(function (u, i) {
    var angle = -Math.PI / 2 + end * i / n;
    return [numberAutoFixed(50 + 60 * Math.cos(angle), 5) + '%', numberAutoFixed(50 + 60 * Math.sin(angle), 5) + '%'].join(' ');
  });
  fan.push('50% 50%');
  return 'polygon(' + fan.join(', ') + ')';
};

CountdownClock.prototype._setBorderValue = function (val) {
  if (val >= 1 || !isFinite(val)) {
    this.$border.removeStyle("clip-path");
    return;
  }

  var bound = this.$border.getBoundingClientRect();
  var angle = val * Math.PI * 2;
  this.$border.addStyle("-webkit-clip-path", this._makePolygon(angle));
  this.$border.addStyle("clip-path", this._makePolygon(angle));
};

CountdownClock.prototype._updateBorder = function () {
  this._setBorderValue(this._remainSecond / Math.max(0.001, this._totalSecond));
};

CountdownClock.prototype._updateText = function () {
  if (this._prevText === this.remainSecond) return;
  var remainSecond = this.remainSecond;
  var min = Math.floor(remainSecond / 60);
  var sec = remainSecond % 60;
  this.$sec.innerHTML = (sec < 10 ? "0" : "") + sec;
  this.$min.innerHTML = min;
};

CountdownClock.prototype._tick = function () {
  var now = new Date().getTime();
  var prevSec = this.remainSecond;
  this.remainSecond = Math.max(0, Math.ceil(this.totalSecond - (now - this._startTime) / 1000));

  if (prevSec !== this.remainSecond) {
    this._updateText();

    this.emit('update', {
      target: this,
      type: 'update'
    }, this);

    if (this.remainSecond === 0) {
      clearInterval(this._intvId);
      this._intvId = -1;
      this.emit('finish', {
        target: this,
        type: 'finish'
      }, this);
    }
  }
};

CountdownClock.prototype.start = function () {
  if (this.remainSecond == 0) this.remainSecond = this.totalSecond;
  this._startTime = new Date().getTime() - (this.totalSecond - this.remainSecond) * 1000;
  this.resume();
};

CountdownClock.prototype.resume = function () {
  if (this._intvId > 0) return;
  this._intvId = setInterval(this._tick, 200);
};

CountdownClock.prototype.pause = function () {
  if (this._intvId > 0) {
    clearInterval(this._intvId);
    this._intvId = -1;
  }
};

CountdownClock.prototype.stop = function () {
  this.pause();
  this.remainSecond = 0;
};

CountdownClock.prototype.reset = function () {
  this.remainSecond = this.totalSecond;
  this._startTime = new Date().getTime();
};

CountdownClock.property = {};
CountdownClock.property.totalSecond = {
  set: function set(value) {
    if (!(value >= 0)) {
      value = 0;
    }

    this._totalSecond = value;

    this._updateBorder();
  },
  get: function get() {
    return this._totalSecond;
  }
};
CountdownClock.property.remainSecond = {
  set: function set(value) {
    if (!(value >= 0)) {
      value = 0;
    }

    this._remainSecond = value;

    this._updateBorder();

    this._updateText();
  },
  get: function get() {
    return this._remainSecond;
  }
};
absol_acomp_ACore.install(CountdownClock);
/* harmony default export */ const js_CountdownClock = (CountdownClock);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/toast.css
var toast = __webpack_require__(5172);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/variantcolors.css
var variantcolors = __webpack_require__(3972);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VariantColors.js



function VariantColor() {
  this.keys = ['primary', 'secondary', 'success', 'info', 'warning', 'error', 'danger', 'light', 'dark', 'link', 'note'];
  this.base = {
    primary: "#007bff",
    secondary: "#6c757d",
    success: "#28a745",
    info: "#17a2b8",
    warning: "#ffc107",
    error: "#ff4052",
    danger: "#dc3545",
    light: "#f8f9fa",
    dark: "#343a40",
    link: "#007bff",
    note: '#ffff88'
  };
  this.mediumContract = {
    primary: '#e2edd5',
    secondary: '#fca75b',
    success: '#fce8e8',
    info: '#fcf5e8',
    warning: '#5e5a75',
    error: '#e0dfce',
    danger: "#e5e8d5",
    light: '#7a5b3c',
    dark: "#bf7d3b",
    link: "#dde8c9",
    note: '#1e1ec8'
  };
  HTML5_Dom.documentReady.then(this.loadFromCss.bind(this));
}

VariantColor.prototype.has = function (name) {
  return this.keys.indexOf(name) >= 0;
};

VariantColor.prototype.loadFromCss = function () {
  this.base = this.keys.reduce(function (ac, name) {
    var style = window.getComputedStyle(document.body);
    ac[name] = style.getPropertyValue('--variant-color-' + name);
    return ac;
  }, {});
  this.mediumContract = this.keys.reduce(function (ac, name) {
    var style = window.getComputedStyle(document.body);
    ac[name] = style.getPropertyValue('--variant-medium-contract-color-' + name);
    return ac;
  }, {});
};

/* harmony default export */ const VariantColors = (new VariantColor());
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Toast.js
function Toast_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Toast_typeof = function _typeof(obj) { return typeof obj; }; } else { Toast_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Toast_typeof(obj); }









var Toast_$ = absol_acomp_ACore.$;
var Toast_ = absol_acomp_ACore._;
var toastBg = {
  success: "#a4f3b6",
  info: "#67d5e7"
};
var toastTextColor = {
  success: '#454040',
  info: '#48433b'
};
buildCss(VariantColors.keys.reduce(function (ac, cr) {
  var color = Color_Color.parse(toastBg[cr] || VariantColors.base[cr]);
  var textColor = color.getContrastYIQ();
  var headerColor = toastTextColor[cr] || VariantColors.mediumContract[cr] || color.getHightContrastColor();
  ac['.as-toast.as-variant-' + cr + ' .as-toast-variant-color'] = {
    'background-color': color.toString('hex6')
  };
  ac['.as-toast.as-variant-background.as-variant-' + cr] = {
    'background-color': color.toString('hex6'),
    color: textColor.toString('hex6')
  };
  ac['.as-toast.as-variant-background.as-variant-' + cr + ' .as-toast-header'] = {
    color: headerColor.toString('hex6')
  };
  return ac;
}, {}));
/***
 * @extends {AElement}
 * @constructor
 */

function Toast() {
  this._state = 0;
  this.$closeBtn = Toast_$('.as-toast-close-btn', this).on('click', this.disappear.bind(this));
  this.$title = Toast_$('.as-toast-title', this);
  this.$timeText = Toast_$('.as-toast-time-text', this);
  this.$body = Toast_$('.toast-body', this);
  this.$attachhook = Toast_$('attachhook', this).on('attached', this.appear.bind(this));
  HTML5_OOP.drillProperty(this, this.$title.firstChild, 'htitle', 'data');
  this._message = null;
  this.$message = null;
  this.disappearTimeout = 0;
  this.htitle = 'Toast.htitle';
  this.timeText = new Date();
  this.message = null;
  this.variant = null;
}

Toast.tag = 'toast';
['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter'].forEach(function (key) {
  Toast.prototype[key] = function () {
    this.$body[key].apply(this.$body, arguments);
  };
});

Toast.render = function () {
  return Toast_({
    extendEvent: ['appeared', 'disappeared'],
    "class": ['as-toast', 'as-not-appeared'],
    child: [{
      "class": 'as-toast-header',
      child: ['.as-toast-variant-color', {
        tag: 'strong',
        "class": 'as-toast-title',
        child: {
          text: "Absol Js"
        }
      }, {
        tag: 'smal',
        "class": 'as-toast-time-text',
        child: {
          text: '20 mis ago'
        }
      }, {
        tag: 'button',
        "class": 'as-toast-close-btn',
        child: {
          tag: 'span',
          child: {
            text: '×'
          }
        }
      }]
    }, {
      "class": 'toast-body'
    }, 'attachhook']
  });
};

Toast.prototype.disappear = function () {
  if (this._state !== 2) return;
  this._state = 3;
  this.addClass('as-disappearing');
  setTimeout(function () {
    this.removeClass('as-disappeared').removeClass('as-disappearing').addClass('as-not-appeared');
    this.remove();
    this.emit('disappeared', {
      target: this,
      type: 'disappeared'
    }, this);
  }.bind(this), 500);
};

Toast.prototype.appear = function () {
  if (this._state !== 0) return;
  this._state = 1;
  this.addClass('as-appearing');
  setTimeout(function () {
    this.removeClass('as-not-appeared').addClass('as-appeared').removeClass('as-appearing');
    this._state = 2;
    this.emit('appeared', {
      target: this,
      type: 'appeared'
    }, this);

    if (this.disappearTimeout > 0 && this.disappearTimeout < Infinity) {
      setTimeout(this.disappear.bind(this), this.disappearTimeout);
    }
  }.bind(this), 100);
};

Toast.property = {};
Toast.property.variant = {
  set: function set(value) {
    if (this._variant && this._variant !== value) {
      this.removeClass('as-variant-' + this._variant);
    }

    if (VariantColors.has(value) || ['sticky-note'].indexOf(value) >= 0) {
      this._variant = value;
      this.addClass('as-variant-' + this._variant);
    }
  },
  get: function get() {
    return this._variant;
  }
};
Toast.property.message = {
  set: function set(value) {
    if (typeof value !== "string" || value.length === 0) {
      value = null;
    }

    if (value) {
      if (!this.$message) {
        this.$message = Toast_({
          "class": 'as-toast-message',
          child: {
            text: ''
          }
        });
      }

      if (!this.$message.parentElement) this.$body.addChild(this.$message);
      this.$message.firstChild.data = value;
    } else {
      if (this.$message && this.$message.parentElement) {
        this.$message.remove();
      }
    }

    this._message = value;
  },
  get: function get() {
    return this._message;
  }
};
Toast.property.timeText = {
  set: function set(value) {
    if (value instanceof Date) {
      value = value.toLocaleTimeString();
    } else {
      value = value + '';
    }

    this.$timeText.firstChild.data = value;
  },
  get: function get() {
    return this.$timeText.firstChild.data;
  }
};
Toast.$toastList = Toast_('.as-toast-list.as-se.as-bscroller');
Toast.$toastList4Pos = {
  se: Toast.$toastList,
  sw: Toast_('.as-toast-list.as-sw.as-bscroller'),
  nw: Toast_('.as-toast-list.as-nw.as-bscroller'),
  ne: Toast_('.as-toast-list.as-ne.as-bscroller')
};
HTML5_Dom.documentReady.then(function () {
  Toast.$toastList.addTo(document.body);
  Toast.$toastList4Pos.sw.addTo(document.body);
  Toast.$toastList4Pos.nw.addTo(document.body);
  Toast.$toastList4Pos.ne.addTo(document.body);
});
/***
 *
 * @param {AbsolConstructDescriptor|{}} aObject,
 * @param {"se"|"sw"|"ne"|"nw" } [pos="se"]
 * @return {AElementNS|AElement|Text}
 */

Toast.make = function (aObject, pos) {
  pos = pos || 'se';
  aObject = aObject || {};
  if (Toast_typeof(aObject) !== "object") throw new Error("param must be AbsolConstructDescriptor object!");

  if (isDomNode(aObject)) {} else {
    aObject.tag = aObject.tag || 'toast';
  }

  var toastElt = Toast_(aObject);

  var toastListElt = Toast.$toastList4Pos[pos] || Toast.$toastList;
  toastListElt.addChild(toastElt);
  return toastElt;
};

absol_acomp_ACore.install(Toast);
/* harmony default export */ const js_Toast = (Toast);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/spinner.tpl
/* harmony default export */ const spinner = ("<svg class=\"as-spinner-ico\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"margin:auto;background:#fff;display:block;\" width=\"200px\" height=\"200px\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\">\n    <g><circle cx=\"73.801\" cy=\"68.263\" fill=\"#e15b64\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"0s\"></animateTransform>\n    </circle><circle cx=\"68.263\" cy=\"73.801\" fill=\"#f47e60\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.062s\"></animateTransform>\n    </circle><circle cx=\"61.481\" cy=\"77.716\" fill=\"#f8b26a\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.125s\"></animateTransform>\n    </circle><circle cx=\"53.916\" cy=\"79.743\" fill=\"#abbd81\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.187s\"></animateTransform>\n    </circle><circle cx=\"46.084\" cy=\"79.743\" fill=\"#849b87\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.25s\"></animateTransform>\n    </circle><circle cx=\"38.519\" cy=\"77.716\" fill=\"#6492ac\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.312s\"></animateTransform>\n    </circle><circle cx=\"31.737\" cy=\"73.801\" fill=\"#637cb5\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.375s\"></animateTransform>\n    </circle><circle cx=\"26.199\" cy=\"68.263\" fill=\"#6a63b6\" r=\"4\">\n        <animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;360 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\" begin=\"-0.437s\"></animateTransform>\n    </circle><animateTransform attributeName=\"transform\" type=\"rotate\" calcMode=\"spline\" values=\"0 50 50;0 50 50\" times=\"0;1\" keySplines=\"0.5 0 0.5 1\" repeatCount=\"indefinite\" dur=\"1.4925373134328357s\"></animateTransform></g>\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Icons.js


function SpinnerIco() {
  return absol_acomp_ACore._(spinner);
}
SpinnerIco.tag = 'SpinnerIco'.toLowerCase();
absol_acomp_ACore.install(SpinnerIco);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojipickertooltip.css
var emojipickertooltip = __webpack_require__(1922);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageindicator.css
var pageindicator = __webpack_require__(3386);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageIndicator.js


var PageIndicator_ = absol_acomp_ACore._;
var PageIndicator_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function PageIndicator() {
  this._idx = -1;
  this.length = 0;
  this.idx = -1;
}

PageIndicator.tag = 'PageIndicator'.toLowerCase();

PageIndicator.render = function () {
  return PageIndicator_({
    "class": 'as-page-indicator',
    child: []
  });
};

PageIndicator.property = {};
PageIndicator.property.length = {
  set: function set(value) {
    value = value || 0;
    value = Math.max(0, value);

    while (this.childNodes.length < value) {
      this.addChild(PageIndicator_('button.as-page-indicator-item'));
    }

    while (this.childNodes.length > value) {
      this.removeChild(this.childNodes[this.childNodes.length - 1]);
    }

    this.idx = this._idx; //update
  },
  get: function get() {
    return this.childNodes.length;
  }
};
PageIndicator.property.idx = {
  set: function set(value) {
    var activeElt = this.childNodes[this._idx];
    if (activeElt) activeElt.removeClass('as-active');
    this._idx = value;
    activeElt = this.childNodes[this._idx];
    if (activeElt) activeElt.addClass('as-active');
  },
  get: function get() {
    return this._idx;
  }
};
absol_acomp_ACore.install(PageIndicator);
/* harmony default export */ const js_PageIndicator = (PageIndicator);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiPickerTooltip.js













var EmojiPickerTooltip_ = absol_acomp_ACore._;
var EmojiPickerTooltip_$ = absol_acomp_ACore.$;
var EmojiPickerTooltip_isMobile = Detector_BrowserDetector.isMobile;
/***
 * @augments Tooltip
 * @augments AElement
 * @augments Hanger
 * @constructor
 */

function EmojiPickerTooltip() {
  if (EmojiPickerTooltip_isMobile) {
    EmojiPickerTooltip_({
      tag: js_Hanger.tag,
      elt: this,
      on: {
        predrag: this.eventHandler.preDragTT,
        dragstart: this.eventHandler.dragStartTT,
        drag: this.eventHandler.dragTT,
        dragend: this.eventHandler.dragEndTT
      }
    });
  }

  this.$iconList = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-icon-list', this);
  this.$leftBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-left-btn', this).on('click', this.eventHandler.clickLeft);
  this.$scroller = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-scroller', this);
  this.$rightBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-right-btn', this).on('click', this.eventHandler.clickRight);
  this.$removeBtn = EmojiPickerTooltip_$('.as-emoji-picker-tooltip-remove-btn', this).on('click', this.eventHandler.clickRemove);
  this.$pageIndicatior = EmojiPickerTooltip_$('pageindicator', this);
  this._iconButtonCache = {};
  this._icons = [];
  this.icons = EmojiPickerTooltip.defaultIcons;
}

EmojiPickerTooltip.tag = 'EmojiPickerTooltip'.toLowerCase();
EmojiPickerTooltip.defaultIcons = [';(', '(sarcastic)', ':O', '(cwl)', '(heart)', '(y)', '(n)', '(rock)', '(facepalm)', '(xd)', ':$', '(waiting)', '(headbang)', '(ghost)', '(clap)', '(punch)', '(ok)', '(angry)'];
EmojiPickerTooltip.emojiDict = js_EmojiAnims.reduce(function (ac, cr) {
  ac[cr[0]] = {
    imageFileName: cr[1],
    text: cr[0],
    desc: cr[2]
  };
  return ac;
}, {});

EmojiPickerTooltip.render = function () {
  return EmojiPickerTooltip_({
    tag: 'tooltip',
    extendEvent: ['pick'],
    "class": ['as-emoji-picker-tooltip'].concat(EmojiPickerTooltip_isMobile ? ['as-mobile'] : []),
    child: [{
      tag: 'button',
      "class": 'as-emoji-picker-tooltip-left-btn',
      child: 'span.mdi.mdi-chevron-left'
    }, {
      "class": 'as-emoji-picker-tooltip-scroller',
      child: {
        "class": 'as-emoji-picker-tooltip-icon-list'
      }
    }, {
      tag: 'button',
      "class": 'as-emoji-picker-tooltip-right-btn',
      child: 'span.mdi.mdi-chevron-right'
    }, {
      tag: 'button',
      attr: {
        title: 'Remove Emoji'
      },
      "class": 'as-emoji-picker-tooltip-remove-btn',
      child: 'span.mdi.mdi-close'
    }, {
      tag: 'pageindicator',
      "class": 'as-emoji-picker-tooltip-page-indicator',
      props: {
        length: 3,
        idx: 0
      }
    }]
  }, true);
};
/*var */


EmojiPickerTooltip.prototype._makeIconBtn = function (iconText) {
  var icon = EmojiPickerTooltip.emojiDict[iconText];
  var url = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName;

  var spriteElt = EmojiPickerTooltip_({
    tag: 'sprite',
    "class": 'as-emoji-picker-tooltip-icon',
    attr: {
      title: icon.desc
    },
    props: {
      src: url,
      loop: true,
      fps: 30,
      debug: true
    },
    on: {
      ready: function ready() {
        this.frames = {
          type: 'grid',
          col: 1,
          row: this.texture.naturalHeight / this.texture.naturalWidth
        };
        this.frameIndex = 0;
      }
    }
  });

  var buttonElt = EmojiPickerTooltip_({
    tag: 'button',
    "class": 'as-emoji-picker-tooltip-icon-btn',
    child: spriteElt,
    on: {
      click: this.eventHandler.clickIconBtn.bind(null, icon)
    }
  });

  buttonElt.on('mouseenter', function () {
    spriteElt.play();
  }).on('mouseleave', function () {
    spriteElt.stop();
    spriteElt.frameIndex = 0;
  });
  return buttonElt;
};

EmojiPickerTooltip.prototype._updateIconList = function () {
  this.$iconList.clearChild();
  var iconText;

  for (var i = 0; i < this._icons.length; ++i) {
    iconText = this._icons[i];
    this._iconButtonCache[iconText] = this._iconButtonCache[iconText] || this._makeIconBtn(iconText);
    this.$iconList.addChild(this._iconButtonCache[iconText]);
  }
};

EmojiPickerTooltip.property = {};
EmojiPickerTooltip.property.icons = {
  set: function set(icons) {
    this._icons = icons || [];

    this._updateIconList();

    this.viewOffset = 0;
    this.$pageIndicatior.length = Math.ceil(this._icons.length / 6);
  },
  get: function get() {
    return this._icons;
  }
};
EmojiPickerTooltip.property.viewOffset = {
  set: function set(value) {
    this._viewOffset = Math.max(0, Math.min(value, this._icons.length - 6));
    this.$iconList.addStyle('left', -(100 * this._viewOffset / 6) + '%');
    this.$leftBtn.disabled = this._viewOffset === 0;
    this.$rightBtn.disabled = this._viewOffset === this._icons.length - 6;
    this.$pageIndicatior.idx = Math.floor(this._viewOffset / 6);
  },
  get: function get() {
    return this._viewOffset;
  }
};
EmojiPickerTooltip.eventHandler = {};

EmojiPickerTooltip.eventHandler.clickLeft = function () {
  this.viewOffset -= 6;
};

EmojiPickerTooltip.eventHandler.clickRight = function () {
  this.viewOffset += 6;
};

EmojiPickerTooltip.eventHandler.clickIconBtn = function (icon) {
  if (this._preventClick) return;
  this.emit('pick', Object.assign({
    type: 'pick',
    icon: icon,
    target: this
  }, icon), this);
};

EmojiPickerTooltip.eventHandler.clickRemove = function () {
  this.emit('pick', Object.assign({
    type: 'pressremove',
    icon: "REMOVE",
    target: this
  }), this);
};

EmojiPickerTooltip.eventHandler.preDragTT = function (event) {
  var scrollerBound = this.$scroller.getBoundingClientRect();
  var listBound = this.$iconList.getBoundingClientRect();
  this._scrollData = {
    left: listBound.left - scrollerBound.left,
    scrollerWidth: scrollerBound.width,
    newLeft: listBound.left - scrollerBound.left
  };
};

EmojiPickerTooltip.eventHandler.dragStartTT = function () {
  this.addClass('as-scrolling');
  this._preventClick = true;
};

EmojiPickerTooltip.eventHandler.dragTT = function (event) {
  event.preventDefault();
  var dx = event.currentPoint.sub(event.startingPoint).x;
  var newLeft = Math.min(0, Math.max(-this._scrollData.scrollerWidth * 2, this._scrollData.left + dx));
  this._scrollData.newLeft = newLeft;
  this.$iconList.addStyle('left', newLeft + 'px');
};

EmojiPickerTooltip.eventHandler.dragEndTT = function (event) {
  event.preventDefault();
  this.removeClass('as-scrolling');
  var dOffset = (this._scrollData.left - this._scrollData.newLeft) / this._scrollData.scrollerWidth;

  if (dOffset > 0.25) {
    dOffset = 1;
  } else if (dOffset < -0.25) {
    dOffset = -1;
  } else {
    dOffset = 0;
  }

  this.viewOffset += dOffset * 6;
  setTimeout(function () {
    this._preventClick = false;
  }.bind(this), 5);
};

absol_acomp_ACore.install(EmojiPickerTooltip);
EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0;

function prepare() {
  if (EmojiPickerTooltip.$holder) return;
  EmojiPickerTooltip.$holder = EmojiPickerTooltip_('.absol-tooltip-root-holder');
  EmojiPickerTooltip.$tooltip = EmojiPickerTooltip_('emojipickertooltip.top').addTo(EmojiPickerTooltip.$holder).on('pick', function (event) {
    EmojiPickerTooltip._listener && EmojiPickerTooltip._listener(event.icon);
  });
  /***
   *
   * @type {PositionTracker|undefined}
   */

  EmojiPickerTooltip.$element = undefined;
  EmojiPickerTooltip.$content = undefined;
  EmojiPickerTooltip._orientation = 'auto';
  EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0;
  EmojiPickerTooltip._listener = undefined;
  EmojiPickerTooltip._scrollOutListener = undefined;
  EmojiPickerTooltip.$tooltip.$arrow.updateSize = EmojiPickerTooltip.updatePosition;
}

EmojiPickerTooltip.updatePosition = function () {
  if (!EmojiPickerTooltip.$element) return;
  var outBound = Math_Rectangle.fromClientRect(traceOutBoundingClientRect(EmojiPickerTooltip.$element));
  var eBound = Math_Rectangle.fromClientRect(EmojiPickerTooltip.$element.getBoundingClientRect());

  if (!outBound.isCollapse(eBound, 0)) {
    EmojiPickerTooltip._scrollOutListener && EmojiPickerTooltip._scrollOutListener();
  }

  updateTooltipPosition(EmojiPickerTooltip);
};

EmojiPickerTooltip.updatePosition = EmojiPickerTooltip.updatePosition.bind(EmojiPickerTooltip);

EmojiPickerTooltip.show = function (element, menuListener, orientation) {
  prepare();

  if (EmojiPickerTooltip.$element) {
    EmojiPickerTooltip.$element.stopTrackPosition();
    EmojiPickerTooltip.$element.off('positionchange', EmojiPickerTooltip.updatePosition);
  }

  if (!element.startTrackPosition) {
    EmojiPickerTooltip_({
      tag: js_PositionTracker.tag,
      elt: element
    });
  }

  element.startTrackPosition();
  EmojiPickerTooltip.$element = element;
  EmojiPickerTooltip.$element.on('positionchange', EmojiPickerTooltip.updatePosition);
  EmojiPickerTooltip._listener = menuListener;
  EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0;
  EmojiPickerTooltip._orientation = orientation || 'auto';
  EmojiPickerTooltip.$holder.addTo(document.body);
  HTML5_ResizeSystem.add(EmojiPickerTooltip.$tooltip.$arrow);
  EmojiPickerTooltip.$tooltip.viewOffset = 0;
  EmojiPickerTooltip.$tooltip.addClass('top').removeClass('left').removeClass('right').removeClass('bottom').removeClass('ne').removeClass('nw').removeClass('auto');
  EmojiPickerTooltip.updatePosition();
  return EmojiPickerTooltip._session;
};

EmojiPickerTooltip.close = function (token) {
  if (EmojiPickerTooltip._session !== token) return;

  if (EmojiPickerTooltip.$element) {
    EmojiPickerTooltip.$element.stopTrackPosition();
    EmojiPickerTooltip.$element.off('positionchange', EmojiPickerTooltip.updatePosition);
  }

  EmojiPickerTooltip.$element = undefined;
  EmojiPickerTooltip._listener = undefined;
  EmojiPickerTooltip._session = Math.random() * 10000000000 >> 0;
  EmojiPickerTooltip.$holder.remove();
};

EmojiPickerTooltip.toggleWhenClick = function (trigger, adaptor) {
  var res = {
    trigger: trigger,
    adaptor: adaptor,
    currentSession: undefined
  };

  function clickHandler(event) {
    if (res.currentSession === EmojiPickerTooltip._session) return;
    res.currentSession = EmojiPickerTooltip.show(res.adaptor.getFlowedElement ? res.adaptor.getFlowedElement() : trigger, res.adaptor.onSelect, res.adaptor.orientation || 'auto');
    if (res.adaptor.onOpen) res.adaptor.onOpen();

    var finish = function finish(event) {
      if (event && (hitElement(EmojiPickerTooltip.$tooltip.$leftBtn, event) || hitElement(EmojiPickerTooltip.$tooltip.$rightBtn, event)) || event && event.target && event.target.classList.contains('absol-tooltip-content')) return;
      document.body.removeEventListener('click', finish, false);
      EmojiPickerTooltip.close(res.currentSession);
      if (adaptor.onClose) adaptor.onClose();
      res.currentSession = undefined;
      if (EmojiPickerTooltip._scrollOutListener === EmojiPickerTooltip) EmojiPickerTooltip._scrollOutListener = undefined;
    };

    EmojiPickerTooltip._scrollOutListener = finish;
    setTimeout(function () {
      document.body.addEventListener('click', finish, false);
    }, 10);
  }

  res.remove = function () {
    trigger.removeEventListener('click', clickHandler, false);
    trigger.classList.remove('as-emoji-picker-tooltip-trigger');
  };

  trigger.addEventListener('click', clickHandler, false);
  trigger.classList.add('as-emoji-picker-tooltip-trigger');
  return res;
};

/* harmony default export */ const js_EmojiPickerTooltip = (EmojiPickerTooltip);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojicounter.css
var emojicounter = __webpack_require__(9047);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojiuserlisttooltip.css
var emojiuserlisttooltip = __webpack_require__(6974);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiUserListTooltip.js





var EmojiUserListTooltip_ = absol_acomp_ACore._;
var EmojiUserListTooltip_$ = absol_acomp_ACore.$;
/***
 * @augments ToolTip
 * @augments AElement
 * @constructor
 */

function EmojiUserListTooltip() {
  this._text = null;
  this._users = [];
  this.$sprite = EmojiUserListTooltip_({
    tag: 'sprite',
    "class": 'as-emoji-user-list-tooltip-emoji',
    props: {
      fps: 30,
      loop: true
    },
    on: {
      ready: function ready() {
        this.frames = {
          type: 'grid',
          col: 1,
          row: this.texture.naturalHeight / this.texture.naturalWidth
        };
      }
    }
  });
  this.appendChild(this.$sprite);
  this.text = '(heart)';
  this.user = [];
}

EmojiUserListTooltip.tag = 'EmojiUserListTooltip'.toLowerCase();

EmojiUserListTooltip.render = function () {
  return EmojiUserListTooltip_({
    tag: 'tooltip',
    "class": 'as-emoji-user-list-tooltip'
  }, true);
};

EmojiUserListTooltip.prototype._updateUsers = function () {
  var thisT = this;
  this.$content.clearChild();

  this._users.forEach(function (user) {
    var elt = EmojiUserListTooltip_({
      "class": 'as-emoji-user-list-tooltip-user',
      child: [{
        "class": 'as-emoji-user-list-tooltip-avatar',
        style: {
          backgroundImage: 'url(' + user.avatar + ')'
        }
      }, {
        "class": 'as-emoji-user-list-tooltip-name',
        child: {
          text: user.name
        }
      }]
    });

    if (user.onclick) {
      elt.addClass('as-clickable');
      elt.on('click', user.onclick.bind(user));
    }

    thisT.$content.addChild(elt);
  });
};

EmojiUserListTooltip.prototype.playEmoji = function () {
  this.$sprite.afterReady().then(this.$sprite.play.bind(this.$sprite));
};

EmojiUserListTooltip.prototype.stopEmoji = function () {
  this.$sprite.stop();
};

EmojiUserListTooltip.property = {};
EmojiUserListTooltip.property.users = {
  set: function set(users) {
    this._users = users || [];

    this._updateUsers();
  },
  get: function get() {
    return this._users;
  }
};
EmojiUserListTooltip.property.text = {
  set: function set(value) {
    if (value === this._text) return;
    var icon = js_EmojiPickerTooltip.emojiDict[value];
    if (!value) return;
    var url = js_EmojiPicker.assetRoot + '/anim/x60/' + icon.imageFileName;
    this._text = value;
    this.$sprite.src = url;
  },
  get: function get() {
    return this._text;
  }
};
absol_acomp_ACore.install(EmojiUserListTooltip);
/* harmony default export */ const js_EmojiUserListTooltip = ((/* unused pure expression or super */ null && (EmojiUserListTooltip)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiCounter.js









var EmojiCounter_$ = absol_acomp_ACore.$;
var EmojiCounter_ = absol_acomp_ACore._;
var EmojiCounter_isMobile = Detector_BrowserDetector.isMobile;
/***
 * @extends AElement
 * @constructor
 */

function EmojiCounter() {
  /***
   *
   * @type {Sprite}
   */
  this.$sprite = EmojiCounter_$('sprite', this);
  this.$num = EmojiCounter_$('.as-emoji-counter-num', this);
  this.$numText = this.$num.firstChild;
  this._text = '(heart)';
  this.text = this._text;
  this._count = 0;
  this.count = 0;
  this._checkInterval = -1;

  if (EmojiCounter_isMobile) {
    this.attr('tabindex', '1');
    this.on('focus', this.eventHandler.mouseEnter);
  } else {
    this.on('mouseenter', this.eventHandler.mouseEnter);
  }

  this._tooltipSession = null;
  this._tooltipFinishTimeout = -1;
}

EmojiCounter.tag = 'EmojiCounter'.toLowerCase();

EmojiCounter.render = function () {
  var icon = js_EmojiPickerTooltip.emojiDict["(heart)"];
  var url = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName;
  return EmojiCounter_({
    "class": 'as-emoji-counter',
    child: [{
      tag: 'sprite',
      "class": 'as-emoji-counter-sprite',
      props: {
        src: url,
        loop: true,
        fps: 30,
        debug: true
      },
      on: {
        ready: function ready() {
          this.frames = {
            type: 'grid',
            col: 1,
            row: this.texture.naturalHeight / this.texture.naturalWidth
          };
          this.frameIndex = 0;
        }
      }
    }, {
      tag: 'span',
      "class": 'as-emoji-counter-num',
      child: {
        text: '0'
      }
    }]
  });
};

EmojiCounter.property = {};
EmojiCounter.property.text = {
  set: function set(value) {
    var icon = js_EmojiPickerTooltip.emojiDict[value];
    if (!icon) return;
    if (this._text === value) return;
    this.$sprite.src = js_EmojiPicker.assetRoot + '/anim/x40/' + icon.imageFileName;
    this._text = value;
  },
  get: function get() {
    return this._text;
  }
};
EmojiCounter.property.count = {
  set: function set(value) {
    this.$numText.data = value + '';

    if (value === 1 && this._count != 1) {
      this.$numText.remove();
    } else if (value != 1 && this._count == 1) {
      this.$num.addChild(this.$numText);
    }

    if (value == 0) this.addClass('as-zero');else this.removeClass('as-zero');
    this._count = value;
  },
  get: function get() {
    return this._count;
  }
};
absol_acomp_ACore.install(EmojiCounter);
EmojiCounter.eventHandler = {};

EmojiCounter.eventHandler.loop = function () {
  if (!this.isDescendantOf(document.body)) this.eventHandler.finishHover();
  if (this.getBoundingClientRect().width === 0) this.eventHandler.finishHover();
};

EmojiCounter.eventHandler.mouseEnter = function () {
  if (this._tooltipFinishTimeout > 0) {
    clearTimeout(this._tooltipFinishTimeout);
  }

  if (this._checkInterval > 0) return;
  this.$sprite.play();
  this._checkInterval = setInterval(this.eventHandler.loop, 1000);
  this.on('mouseleave', this.eventHandler.finishHover);

  if (this.users && this.users.length > 0) {
    EmojiCounter_prepare();
    EmojiCounter._session = Math.random() * 10000000000 >> 0;
    this._tooltipSession = EmojiCounter._session;
    EmojiCounter.$element = this;
    EmojiCounter.$holder.addTo(this);
    EmojiCounter.$tooltip.text = this.text;
    EmojiCounter.$tooltip.users = this.users;
    EmojiCounter.$tooltip.playEmoji();
    updateTooltipPosition(EmojiCounter);
  }
};

EmojiCounter.eventHandler.finishHover = function () {
  if (this._tooltipFinishTimeout > 0) {
    clearTimeout(this._tooltipFinishTimeout);
  }

  this._tooltipFinishTimeout = setTimeout(function () {
    this._tooltipFinishTimeout = -1;
    this.$sprite.stop();
    this.off('mouseleave', this.eventHandler.finishHover);

    if (this._checkInterval > 0) {
      clearInterval(this._checkInterval);
      this._checkInterval = -1;
    }

    if (this._tooltipSession === EmojiCounter._session) {
      EmojiCounter._session = Math.random() * 10000000000 >> 0;
      EmojiCounter.$holder.remove();
      EmojiCounter.$tooltip.stopEmoji();
    }
  }.bind(this), 500);
};

function EmojiCounter_prepare() {
  if (EmojiCounter.$holder) return;
  EmojiCounter.$holder = EmojiCounter_('.absol-tooltip-root-holder');
  EmojiCounter.$tooltip = EmojiCounter_('EmojiUserListTooltip.top'.toLowerCase()).addTo(EmojiCounter.$holder);
  EmojiCounter._scrollOutListener = undefined;
  EmojiCounter._orientation = 'top';
  EmojiCounter._session = Math.random() * 10000000000 >> 0;
  js_EmojiPickerTooltip._listener = undefined;
  EmojiCounter.$element = null;
  EmojiCounter.$tooltip.$arrow.updateSize = EmojiCounter.updatePosition;
}

EmojiCounter.updatePosition = function () {
  if (!EmojiCounter.$element) return;
  var outBound = Math_Rectangle.fromClientRect(traceOutBoundingClientRect(EmojiCounter.$element));
  var eBound = Math_Rectangle.fromClientRect(EmojiCounter.$element.getBoundingClientRect());

  if (!outBound.isCollapse(eBound, 0)) {
    js_EmojiPickerTooltip._scrollOutListener && EmojiCounter._scrollOutListener();
  }

  updateTooltipPosition(EmojiCounter);
};

EmojiCounter.updatePosition = EmojiCounter.updatePosition.bind(EmojiCounter);
/* harmony default export */ const js_EmojiCounter = (EmojiCounter);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiCounterList.js
function EmojiCounterList_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { EmojiCounterList_typeof = function _typeof(obj) { return typeof obj; }; } else { EmojiCounterList_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return EmojiCounterList_typeof(obj); }



var EmojiCounterList_ = absol_acomp_ACore._;
var EmojiCounterList_$ = absol_acomp_ACore.$;
/***
 * @extends AElement
 * @constructor
 */

function EmojiCounterList() {
  this._counters = [];
  this.counters = [];
}

EmojiCounterList.tag = 'EmojiCounterList'.toLowerCase();

EmojiCounterList.render = function () {
  return EmojiCounterList_({
    "class": 'as-emoji-counter-list'
  });
};

EmojiCounterList.iconOrdering = js_EmojiPickerTooltip.defaultIcons.reduce(function (ac, cr, idx) {
  ac[cr] = idx + 1;
  return ac;
}, {});

EmojiCounterList.prototype._updateCounters = function () {
  var newCounters = this._counters;
  var newCounterNameArr = Object.keys(newCounters);
  newCounterNameArr.sort(function (a, b) {
    return (EmojiCounterList.iconOrdering[a] || 1000) - (EmojiCounterList.iconOrdering[b] || 1000);
  });
  var counterElements = Array.prototype.filter.call(this.childNodes, function (e) {
    return e.containsClass && e.containsClass('as-emoji-counter');
  });
  var newCounterElements = [];
  var elt, name;
  var oe, on;

  while (counterElements.length > 0 || newCounterNameArr.length > 0) {
    elt = counterElements[0];
    name = newCounterNameArr[0];

    if (elt && name) {
      if (elt.text === name) {
        newCounterElements.push(elt);
        counterElements.shift();
        newCounterNameArr.shift();
      } else {
        oe = EmojiCounterList.iconOrdering[elt.text];
        on = EmojiCounterList.iconOrdering[name];

        if (oe < on) {
          newCounterElements.push(elt);
          counterElements.shift();
        } else {
          newCounterElements.push(name);
          newCounterNameArr.shift();
        }
      }
    } else if (elt) {
      newCounterElements.push(elt);
      counterElements.shift();
    } else {
      newCounterElements.push(name);
      newCounterNameArr.shift();
    }
  }

  var cElt, prevElt;

  while (newCounterElements.length > 0) {
    cElt = newCounterElements.pop();

    if (typeof cElt === "string") {
      cElt = EmojiCounterList_({
        tag: 'emojicounter',
        props: {
          text: cElt,
          users: newCounters[cElt].users || [],
          count: newCounters[cElt].count
        }
      });

      if (!prevElt) {
        this.addChild(cElt);
      } else {
        this.addChildBefore(cElt, prevElt);
      }

      prevElt = cElt;
    } else {
      if (newCounters[cElt.text]) {
        cElt.count = newCounters[cElt.text].count;
        cElt.users = newCounters[cElt.text].users || [];
        prevElt = cElt;
      } else {
        cElt.remove();
      }
    }
  }
};

EmojiCounterList.property = {};
EmojiCounterList.property.counters = {
  set: function set(counters) {
    this._counters = Object.keys(counters || {}).reduce(function (ac, key) {
      var counter = counters[key];

      if (EmojiCounterList_typeof(counter) === "object") {
        if (counter.count > 0 && js_EmojiPickerTooltip.emojiDict[key]) {
          ac[key] = counter;
        }
      }

      return ac;
    }, {});

    this._updateCounters();
  },
  get: function get() {
    return this._counters;
  }
};
absol_acomp_ACore.install(EmojiCounterList);
/* harmony default export */ const js_EmojiCounterList = (EmojiCounterList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/rotatedtext.css
var rotatedtext = __webpack_require__(9083);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RotatedText.js



/***
 * @extends AElement
 * @constructor
 */

function RotatedText() {
  this.$attachHook = $('attachhook', this);
  this.$attachHook.requestUpdateSize = this.eventHandler.positionChange;
  this.$attachHook.on('attached', this.eventHandler.attached);
  this.$anchor = $('.as-rotated-text-anchor', this);
  this.$content = $('.as-rotated-text-content', this);
  this.$contentText = this.$content.firstChild;
  this.$trackElts = [];
  this._angle = 0;
  this.angle = 0;
  this.text = '';
  this._trackInterval = -1;
}

RotatedText.tag = 'RotatedText';

RotatedText.render = function () {
  return ACore_({
    tag: 'span',
    "class": 'as-rotated-text',
    child: ['attachhook', {
      "class": 'as-rotated-text-anchor',
      child: {
        tag: 'span',
        "class": 'as-rotated-text-content',
        child: {
          text: ''
        }
      }
    }]
  });
};

RotatedText.prototype._trackPosition = function () {
  this._cancelTrackPosition();

  var parent = this.parentElement;

  while (parent) {
    parent.addEventListener('scroll', this.eventHandler.positionChange);
    this.$trackElts.push(parent);
    parent = parent.parentElement;
  }

  document.addEventListener('scroll', this.eventHandler.positionChange);
  this.$trackElts.push(document);
  this._trackInterval = setInterval(this.eventHandler.intervalCheck, 3000);
};

RotatedText.prototype._cancelTrackPosition = function () {
  if (this._trackInterval >= 0) {
    clearInterval(this._trackInterval);
    this._trackInterval = -1;
  }

  while (this.$trackElts.length > 0) {
    this.$trackElts.pop().removeEventListener('scroll', this.eventHandler.positionChange);
  }
};

RotatedText.property = {};
RotatedText.property.text = {
  get: function get() {
    return this.$contentText.data;
  },
  set: function set(value) {
    value = value || '';
    value = value + '';
    this.$contentText.data = value;
  }
};
RotatedText.property.angle = {
  set: function set(value) {
    value = value || 0;
    var matched;

    if (typeof value === 'number') {
      this._angle = value;
      this.$content.addStyle('transform', 'rotate(' + value + 'deg)');
    } else if (value.match) {
      matched = value.match(/([0-9.+\-e]+)deg/);

      if (matched) {
        value = parseFloat(matched[1]);

        if (isFinite(value)) {
          this._angle = value;
          this.$content.addStyle('transform', 'rotate(' + this._angle + 'deg)');
        }

        return;
      }

      matched = value.match(/([0-9.+\-e]+)rad/);

      if (matched) {
        value = parseFloat(matched[1]);

        if (isFinite(value)) {
          this._angle = value * 180 / Math.PI;
          this.$content.addStyle('transform', 'rotate(' + this._angle + 'deg)');
        }
      }
    }
  },
  get: function get() {
    return this._angle;
  }
};
RotatedText.eventHandler = {};

RotatedText.eventHandler.attached = function () {
  HTML5_ResizeSystem.add(this);
  this.eventHandler.positionChange();
  this.$content.addStyle('transform-origin', Math.round(0.3 * this.$content.getFontSize()) + 'px 50%');

  this._trackPosition();
};

RotatedText.eventHandler.detached = function () {
  this._cancelTrackPosition();
};

RotatedText.eventHandler.intervalCheck = function () {
  if (!this.isDescendantOf(document.body)) {
    this.eventHandler.detached();
  }
};

RotatedText.eventHandler.positionChange = function () {
  var bound = this.getBoundingClientRect();
  this.$anchor.addStyle({
    top: Math.round(bound.top) + 'px',
    left: Math.round(bound.left) + 'px'
  });
};

absol_acomp_ACore.install(RotatedText);
/* harmony default export */ const js_RotatedText = (RotatedText);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltreediagram.css
var verticaltreediagram = __webpack_require__(3378);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VerticalTreeDiagram.js



function VerticalTreeDiagramNode() {
  this.$childCtn = $('.as-vertical-tree-diagram-child-ctn', this);
  this.$name = $('.as-vertical-tree-diagram-node-name', this);
  HTML5_OOP.drillProperty(this, this.$name.firstChild, 'name', 'data');
  this.name = "UndefinedNodeName";
}
VerticalTreeDiagramNode.tag = 'VerticalTreeDiagramNode'.toLowerCase();

VerticalTreeDiagramNode.render = function () {
  return ACore_({
    "class": 'as-vertical-tree-diagram-node',
    child: [{
      "class": 'as-vertical-tree-diagram-node-name-ctn',
      child: {
        "class": 'as-vertical-tree-diagram-node-name',
        child: {
          text: ""
        }
      }
    }, {
      "class": 'as-vertical-tree-diagram-child-ctn'
    }]
  });
};

['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter', 'findChildBefore', 'findChildAfter'].forEach(function (name) {
  VerticalTreeDiagramNode.prototype[name] = function () {
    this.$childCtn[name].apply(this.$childCtn, arguments);

    if (this.$childCtn.childNodes.length > 0) {
      this.addClass('as-has-child');

      if (this.$childCtn.childNodes.length === 1) {
        this.addClass('as-has-1-child');
      } else {
        this.removeClass('as-has-1-child');
      }
    } else {
      this.removeClass('as-has-child');
      this.removeClass('as-has-1-child');
    }
  };
});

function VerticalTreeDiagram(data) {
  this.data = data || {};
}

VerticalTreeDiagram.tag = 'VerticalTreeDiagram'.toLowerCase();

VerticalTreeDiagram.render = function () {
  return ACore_(VerticalTreeDiagramNode.tag, true);
};

VerticalTreeDiagram.property = {};
VerticalTreeDiagram.property.data = {
  set: function set(data) {
    data = data || {};
    this._data = data;

    function makeNode(nodeData) {
      return ACore_({
        tag: VerticalTreeDiagramNode.tag,
        props: {
          name: nodeData.name
        },
        child: nodeData.child && nodeData.child.length > 0 && nodeData.child.map(makeNode) || []
      });
    }

    this.name = data.name + '';
    this.clearChild();
    if (data.child) this.addChild(data.child.map(makeNode));
  },
  get: function get() {
    return this._data;
  }
};
absol_acomp_ACore.install(VerticalTreeDiagramNode);
absol_acomp_ACore.install(VerticalTreeDiagram);
/* harmony default export */ const js_VerticalTreeDiagram = (VerticalTreeDiagram);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenfield.css
var tokenfield = __webpack_require__(2194);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TokenField.js









/***
 * @extends AElement
 * @constructor
 */

function TokenField() {
  this.on('click', this.eventHandler.click);
  this.$input = $('input', this).on('keydown', this.eventHandler.inputKeyDown).on('focus', this.eventHandler.inputInteract).on('click', this.eventHandler.inputInteract).on('keydown', this.eventHandler.inputInteract);
  this.$attachhook = $('attachhook', this).on('attached', function () {
    HTML5_ResizeSystem.add(this);
    this.requestUpdateSize();
  });
  this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
  /***
   *
   * @type {SelectListBox}
   */

  this.$selectlistBox = ACore_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem);
  this.$selectlistBox.followTarget = this;
  this.autocomplete = null;
  this.separator = ' ';
  this.placeHolder = '';
}

TokenField.tag = 'TokenField'.toLowerCase();

TokenField.render = function () {
  return ACore_({
    "class": 'as-token-field',
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      "class": 'as-token-field-input-text',
      attr: {
        type: 'text',
        tabindex: '1'
      }
    }, 'attachhook']
  });
};

TokenField.prototype._makeItem = function (text) {
  var itemElt = ACore_({
    tag: js_SelectBoxItem.tag,
    "class": 'as-token-field-item',
    attr: {
      tabindex: 1
    },
    props: {
      data: {
        text: text,
        value: text
      }
    }
  });

  itemElt.on({
    keydown: this.eventHandler.itemKeyDown.bind(this, itemElt),
    close: this.eventHandler.itemClose.bind(this, itemElt),
    focus: this.eventHandler.itemFocus.bind(this, itemElt)
  });
  return itemElt;
};

TokenField.prototype._appendItem = function (itemElt) {
  this.addChildBefore(itemElt, this.$input);
};

TokenField.prototype._updateInputWidth = function () {
  var lastItem = this.findChildBefore(this.$input);

  if (lastItem) {
    var lastItemBound = lastItem.getBoundingClientRect();
    var bound = this.getBoundingClientRect();
    var aRight = bound.right - 4 - lastItemBound.right;

    if (aRight > 60) {
      this.$input.addStyle('width', aRight + 'px');
    } else {
      this.$input.addStyle('width', '100%');
    }
  } else {
    this.$input.addStyle('width', '100%');
  }
};

TokenField.prototype._isSeparatorKey = function (key) {
  if (key === 'Enter') return true;
  if (this.separator === ' ') return key === ' ';
  if (this.separator === '\n') return key === 'Enter';
  if (this.separator === '\t') return key === 'Tab';
  return key === this.separator;
};

TokenField.prototype.updateSize = function () {
  this._updateInputWidth();
};

TokenField.prototype._notifyChange = function (data) {
  this.emit('change', Object.assign({
    type: 'change',
    target: this
  }, data), this);
};

TokenField.prototype._searchInList = function () {
  if (this._searchTimeout > 0) {
    clearTimeout(this._searchTimeout);
  }

  this._searchTimeout = setTimeout(function () {
    var text = this.$input.value;

    if (this.$selectlistBox.isDescendantOf(document.body)) {
      this.$selectlistBox.$searchInput.value = text;
      this.$selectlistBox.eventHandler.searchModify();

      if (this.$selectlistBox._displayItems.length === 0) {
        this.$selectlistBox.addStyle('visibility', 'hidden');
      } else {
        this.$selectlistBox.removeStyle('visibility');
      }
    }
  }.bind(this), 100);
};

TokenField.eventHandler = {};
TokenField.property = {};
TokenField.property.separator = {
  set: function set(value) {
    if (typeof value !== "string") value = ' ';
    this._separator = value;
  },
  get: function get() {
    return this._separator;
  }
};
TokenField.property.placeHolder = {
  set: function set(value) {
    this.$input.attr('placeholder', value || '');
  },
  get: function get() {
    return this.$input.attr('placeholder');
  }
};
TokenField.property.items = {
  set: function set(items) {
    items = items || [];

    while (this.firstChild && this.firstChild && this.firstChild.containsClass('as-token-field-item')) {
      this.firstChild.remove();
    }

    for (var i = 0; i < items.length; ++i) {
      this._appendItem(this._makeItem(items[i]));
    }
  },
  get: function get() {
    return Array.prototype.slice.call(this.childNodes).filter(function (elt) {
      return elt.containsClass && elt.containsClass('as-token-field-item');
    }).map(function (elt) {
      return elt.data.value;
    });
  }
};
TokenField.property.autocomplete = {
  set: function set(value) {
    this._autocomplete = value || null;

    if (this._autocomplete) {
      this.$selectlistBox.items = this._autocomplete.map(function (it) {
        return {
          value: it + '',
          text: it + ''
        };
      });
    } else {
      this.$selectlistBox.items = [];
    }
  },
  get: function get() {
    return this._autocomplete;
  }
};

TokenField.eventHandler.inputKeyDown = function (event) {
  if (this._isSeparatorKey(event.key)) {
    var text = this.$input.value;

    if (text.length > 0) {
      this.$input.value = '';

      var newItem = this._makeItem(text);

      this._appendItem(newItem);

      this.updateSize();

      this._notifyChange({
        action: 'add',
        item: text,
        itemElt: newItem
      });

      this.eventHandler.inputOut();
    }

    event.preventDefault();
  } else if (event.key.startsWith('Arrow') || event.key === 'Backspace') {
    if (this.$input.selectionStart === 0 && this.$input.selectionEnd === 0) {
      if (event.key === 'ArrowLeft' || event.key === 'Backspace') {
        event.preventDefault();
        var prevChild = this.findChildBefore(this.$input);
        if (prevChild) prevChild.focus();
      } else if (event.key === 'ArrowUp') {
        var item, itemBound;
        var inputBound = this.$input.getBoundingClientRect();
        var anchorPos = new Math_Vec2(inputBound.left + 5, inputBound.top + inputBound.height / 2);
        var minDis = Infinity;
        var dis;
        var aboveItem;

        for (var i = 0; i < this.childNodes.length; ++i) {
          item = this.childNodes[i];

          if (item.containsClass && item.containsClass('as-token-field-item')) {
            itemBound = item.getBoundingClientRect();

            if (itemBound.bottom < inputBound.top) {
              dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2).sub(anchorPos).abs();

              if (dis < minDis) {
                minDis = dis;
                aboveItem = item;
              }
            }
          }
        }

        if (aboveItem) {
          aboveItem.focus();
          event.preventDefault();
        }
      }
    } else {
      this._searchInList();
    }
  } else {
    this._searchInList();
  }
};

TokenField.eventHandler.inputInteract = function (event) {
  var lt = this._lastInteractTime;
  this._lastInteractTime = new Date().getTime();

  if (lt && this._lastInteractTime - lt < 100) {
    return;
  }

  if (this.$selectlistBox.isDescendantOf(document.body)) return;
  this.$selectlistBox.addTo(document.body);
  this.$selectlistBox.domSignal.$attachhook.emit('attached');

  this._searchInList();

  var bound = this.getBoundingClientRect();
  this.$selectlistBox.addStyle('min-width', bound.width + 'px');
  this.$selectlistBox.refollow();
  this.$selectlistBox.updatePosition();
  setTimeout(document.addEventListener.bind(document, 'click', this.eventHandler.inputOut), 100);
};

TokenField.eventHandler.inputOut = function (event) {
  if (event && (hitElement(this.$selectlistBox, event) || hitElement(this.$input, event))) return;
  document.removeEventListener('click', this.eventHandler.inputOut);
  this.$selectlistBox.remove();
  this._lastInteractTime = new Date().getTime();
};

TokenField.eventHandler.itemKeyDown = function (itemElt, event) {
  var nextElt;

  if (event.key === 'Delete' || event.key === 'Backspace') {
    if (event.key === 'Delete') {
      nextElt = this.findChildAfter(itemElt);
    } else {
      nextElt = this.findChildBefore(itemElt) || this.$input;
    }

    itemElt.remove();

    this._notifyChange({
      item: itemElt.data.value,
      action: 'remove',
      itemElt: itemElt
    });

    if (nextElt === this.$input) {
      this.$input.focus();
      setCaretPosition(this.$input, 0);
    } else {
      nextElt.focus();
    }
  } else if (event.key === 'ArrowLeft') {
    nextElt = this.findChildBefore(itemElt);
    if (nextElt) nextElt.focus();
  } else if (event.key === 'ArrowRight') {
    nextElt = this.findChildAfter(itemElt);

    if (nextElt === this.$input) {
      this.$input.focus();
      setCaretPosition(this.$input, 0);
    } else {
      nextElt.focus();
    }
  } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
    var currentItemBound = itemElt.getBoundingClientRect();
    var center = new Math_Vec2(currentItemBound.left + currentItemBound.width / 2, currentItemBound.top + currentItemBound.height / 2);
    var childElt, itemBound, dis;
    var minDis = Infinity;
    var i;

    if (event.key === 'ArrowUp') {
      for (i = 0; i < this.childNodes.length; ++i) {
        childElt = this.childNodes[i];

        if (childElt.containsClass && childElt.containsClass('as-token-field-item') || childElt === this.$input) {
          itemBound = childElt.getBoundingClientRect();

          if (itemBound.bottom < currentItemBound.top) {
            dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2).sub(center).abs();

            if (dis < minDis) {
              minDis = dis;
              nextElt = childElt;
            }
          }
        }
      }
    } else {
      for (i = 0; i < this.childNodes.length; ++i) {
        childElt = this.childNodes[i];

        if (childElt.containsClass && childElt.containsClass('as-token-field-item') || childElt === this.$input) {
          itemBound = childElt.getBoundingClientRect();

          if (itemBound.top > currentItemBound.bottom) {
            dis = new Math_Vec2(itemBound.left + itemBound.width / 2, itemBound.top + itemBound.height / 2).sub(center).abs();

            if (dis < minDis) {
              minDis = dis;
              nextElt = childElt;
            }
          }
        }
      }
    }

    if (nextElt) {
      nextElt.focus();
    }
  }
};

TokenField.eventHandler.itemFocus = function (itemElt) {
  this.eventHandler.inputOut();
};

TokenField.eventHandler.itemClose = function (itemElt) {
  itemElt.remove();

  this._notifyChange({
    action: 'remove',
    item: itemElt.data.value,
    itemElt: itemElt
  });

  this.$input.focus();
};

TokenField.eventHandler.click = function (event) {
  if (event.target === this) this.$input.focus();
};

TokenField.eventHandler.preUpdateListPosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
  var outBound = traceOutBoundingClientRect(this);

  if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {// this.isFocus = false;
    //
  }
};

TokenField.eventHandler.selectListBoxPressItem = function (event) {
  var text = event.data.value;

  var newItem = this._makeItem(text);

  this._appendItem(newItem);

  this.updateSize();

  this._notifyChange({
    action: 'add',
    item: text,
    itemElt: newItem
  });

  this.eventHandler.inputOut();
  this.$input.focus();
  this.$input.value = '';
};

absol_acomp_ACore.install(TokenField);
/* harmony default export */ const js_TokenField = (TokenField);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dvexptree.css
var dvexptree = __webpack_require__(7612);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DVExpTree.js




/***
 * @extends ExpTree
 * @constructor
 */

function DVExpTree() {
  this.injectInput();
}

DVExpTree.tag = 'DVExpTree'.toLowerCase();

DVExpTree.render = function () {
  return ACore_({
    tag: js_ExpTree.tag,
    extendEvent: ['radiochange', 'indexclick'],
    "class": 'as-dv-exp-tree'
  }, true);
};

DVExpTree.prototype.injectInput = function () {
  this.$radio = ACore_({
    tag: 'radiobutton',
    on: {
      change: this.eventHandler.radioChange
    }
  });
  this.$node.insertBefore(this.$radio, this.$node.$extIcon);
  this.$index = ACore_({
    tag: 'span',
    "class": 'as-dv-exp-tree-index',
    on: {
      click: this.eventHandler.indexClick
    }
  });
  this.$node.insertBefore(this.$index, this.$node.$desc);
  this.$node.on('click', this.eventHandler.clickInNode);
};

DVExpTree.property = {};
DVExpTree.property.radioName = {
  enumerable: true,
  set: function set(value) {
    if (!value) {
      this.removeClass('as-has-radio');
      this.$radio.name = undefined;
    } else {
      this.addClass('as-has-radio');
      this.$radio.name = value + '';
    }
  },
  get: function get() {
    return this.$radio.name;
  }
};
DVExpTree.property.radioValue = {
  enumerable: true,
  set: function set(value) {
    this.$radio.value = value;
  },
  get: function get() {
    return this.$radio.value;
  }
};
DVExpTree.property.radioChecked = {
  enumerable: true,
  set: function set(value) {
    this.$radio.checked = value;
  },
  get: function get() {
    return this.$radio.checked;
  }
};
DVExpTree.property.hasIndex = {
  enumerable: true,
  set: function set(value) {
    if (value) this.addClass('as-has-index-input');else this.removeClass('as-has-index-input');
  },
  get: function get() {
    return this.containsClass('as-has-index-input');
  }
};
DVExpTree.property.indexValue = {
  enumerable: true,
  set: function set(value) {
    this.$index.innerHTML = value;
  },
  get: function get() {
    return this.$index.innerHTML;
  }
};
DVExpTree.eventHandler = {};

DVExpTree.eventHandler.radioChange = function (event) {
  this.emit('radiochange', Object.assign({}, event, {
    target: this,
    radioElt: this.$radio
  }), this);
};

DVExpTree.eventHandler.indexClick = function (event) {
  this.emit('indexclick', Object.assign({}, event, {
    target: this,
    indexInput: this.$index
  }), this);
};

DVExpTree.eventHandler.clickInNode = function (event) {
  if (hitElement(this.$index, event) || hitElement(this.$radio, event) || hitElement(this.$node.$toggleIcon, event)) return;
  if (hitElement(this.$node, event) && this.radioName) this.$radio.click();
};

absol_acomp_ACore.install(DVExpTree);
/* harmony default export */ const js_DVExpTree = (DVExpTree);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistitem.css
var checklistitem = __webpack_require__(5416);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Attributes.js
function Attributes_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Attributes_typeof = function _typeof(obj) { return typeof obj; }; } else { Attributes_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Attributes_typeof(obj); }

/***
 *
 * @param {Object} node
 * @constructor
 */

/***
 * @typedef {{get?:function, set?: function, descriptor?: Object|function, export?: function}} AttributeHandler
 */

/***
 *
 * @param {Object} node
 * @constructor
 */

function Attributes(node) {
  Object.defineProperty(this, '$$node', {
    enumerable: false,
    configurable: true,
    writable: false,
    value: node
  });
  Object.defineProperty(this, '_definedProperties', {
    enumerable: false,
    writable: false,
    value: {}
  });
  Object.defineProperty(this, '_definedComputedHandlers', {
    enumerable: false,
    writable: false,
    value: {}
  });
}

Object.defineProperty(Attributes.prototype, 'loadAttributeHandlers', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(newHandlers) {
    var self = this;
    var definedHandlers = this._definedProperties;
    var definedComputedHandlers = this._definedComputedHandlers;
    Object.keys(this._definedProperties).forEach(function (key) {
      if (!newHandlers[key]) {
        delete definedHandlers[key];
        delete definedComputedHandlers[key];
        delete self[key];
      }
    });
    Object.keys(newHandlers).forEach(function (key) {
      if (definedHandlers[key] !== newHandlers[key]) {
        self.defineProperty(key, newHandlers[key]);
      }
    });
  }
});
Object.defineProperty(Attributes.prototype, 'defineProperty', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(name, handler) {
    var self = this;
    this._definedProperties[name] = handler;
    var hadValue = !!(name in this);
    var privateValueRef = new AppPattern_Ref(this[name]);
    var objectDescriptor = {
      enumerable: true,
      configurable: true,
      set: function set(value) {
        if (handler.set) privateValueRef.set(handler.set.apply(self.$$node, Array.prototype.slice.call(arguments).concat([privateValueRef])));else privateValueRef.set(value);
      },
      get: function get() {
        if (handler.get) return handler.get.apply(self.$$node, Array.prototype.slice.call(arguments).concat([privateValueRef]));else return privateValueRef.get();
      }
    };
    Object.defineProperty(this, name, objectDescriptor);
    this._definedComputedHandlers[name] = objectDescriptor;
    objectDescriptor.ref = privateValueRef;
    if (hadValue) this[name] = privateValueRef.get();
  }
});
Object.defineProperty(Attributes.prototype, 'getProperty', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(name) {
    var args = Array.prototype.slice.call(arguments, 1);
    var handler = this._definedComputedHandlers[name];

    if (handler) {
      return handler.get.apply(this, args);
    } else return this[name];
  }
});
Object.defineProperty(Attributes.prototype, 'setProperty', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(name, _value) {
    var args = Array.prototype.slice.call(arguments, 1);
    var handler = this._definedComputedHandlers[name];

    if (handler) {
      return handler.set.apply(this, args);
    } else this[name] = _value;
  }
});
Object.defineProperty(Attributes.prototype, 'export', {
  enumerable: false,
  configurable: true,
  value: function value() {
    var self = this;
    return Object.keys(this).reduce(function (ac, key) {
      var value;
      var handler = self._definedProperties[key];
      var computedHandler = self._definedComputedHandlers[key];
      var exporter = handler && handler["export"];

      if (exporter) {
        value = exporter.call(self.$$node, computedHandler.ref);
      } else {
        value = self[key];
      }

      if (value !== undefined) ac[key] = value;
      return ac;
    }, {});
  }
});
Object.defineProperty(Attributes.prototype, 'getPropertyDescriptor', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(name) {
    var handler = this._definedProperties[name];
    if (handler && typeof handler.descriptor === "function") return handler.descriptor.call(this.$$node);
    var value = this[name];
    return handler && handler.descriptor || {
      type: Attributes_typeof(value)
    };
  }
});
/* harmony default export */ const AppPattern_Attributes = (Attributes);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckListItem.js









function measureMaxCheckboxTextWidth(items) {
  var maxTextWidth = 0;
  var maxText = 0;
  var maxEst = 0;
  var maxLv = 0;
  var est;
  var text;
  var item;

  for (var i = 0; i < items.length; ++i) {
    item = items[i];

    if (item.text) {
      text = item.text;
      est = estimateWidth14(text) + 14 * 1.25 * (item.level || 0);

      if (est > maxEst) {
        maxEst = est;
        maxText = text;
        maxLv = item.level || 0;
      }
    }
  }

  if (maxText) maxTextWidth = 18 + 14 * (1.25 + 0.35) * maxLv + measureText(maxText, '14px Arial, Helvetica, sans-serif').width + 14; //padding left, right 7px, checkbox 18px

  return maxTextWidth;
}
function measureCheckListHeight(items) {
  var border = 0;
  var n = items.length - 1;
  return items.length * 25 + border;
}
function measureCheckListSize(items) {
  var descWidth = measureMaxDescriptionWidth(items);
  var textWidth = measureMaxCheckboxTextWidth(items);
  var width = textWidth;

  if (descWidth > 0) {
    width += descWidth + 14;
  }

  var height = measureCheckListHeight(items);
  return {
    width: width,
    height: height,
    descWidth: descWidth,
    textWidth: textWidth
  };
}
/***
 * @extends SelectListItem
 * @constructor
 */

function CheckListItem() {
  this.$text = $('span.absol-selectlist-item-text', this);
  this.$textValue = this.$text.childNodes[0];
  this.$descCtn = $('.absol-selectlist-item-desc-container', this);
  this.$desc = $('span.absol-selectlist-item-desc', this.$descCtn);
  this.$descValue = this.$desc.childNodes[0];
  this.$checkbox = $(CheckboxButton.tag, this).on('change', this.eventHandler.checkboxChange);
  this._viewData = new AppPattern_Attributes(this);

  this._viewData.loadAttributeHandlers(this.viewHandlers);

  HTML5_OOP.drillProperty(this, this._viewData, 'extendClasses');
  HTML5_OOP.drillProperty(this, this._viewData, 'extendStyle');
  this.level = 0;
  this.selected = false;
  this.on('click', this.eventHandler.clickText);
}

CheckListItem.tag = 'CheckListItem'.toLowerCase();

CheckListItem.render = function () {
  return ACore_({
    extendEvent: ['select'],
    "class": ['as-check-list-item', "absol-selectlist-item"],
    child: [{
      tag: CheckboxButton.tag,
      "class": 'as-check-list-item-checkbox'
    }, {
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: ''
      }
    }, {
      "class": 'absol-selectlist-item-desc-container',
      child: {
        tag: 'span',
        "class": 'absol-selectlist-item-desc',
        child: {
          text: ''
        }
      }
    }]
  });
};

CheckListItem.property = {
  text: js_SelectListItem.property.text,
  value: js_SelectListItem.property.value
};
CheckListItem.property.data = {
  set: function set(value) {
    this._data = value;
    var viewData = {};

    if (typeof value === 'string') {
      viewData.text = value;
    } else {
      Object.assign(viewData, value);
    }

    Object.assign(this._viewData, viewData);
  },
  get: function get() {
    return this._data;
  }
};
CheckListItem.property.selected = {
  set: function set(value) {
    this.$checkbox.checked = !!value;
  },
  get: function get() {
    return this.$checkbox.checked;
  }
};
CheckListItem.property.level = {
  set: function set(value) {
    value = value || 0;
    this._level = value;
    this.$checkbox.addStyle('margin-left', value * 1.25 + 'em');
  },
  get: function get() {
    return this._level;
  }
};
CheckListItem.prototype.viewHandlers = {};
CheckListItem.prototype.viewHandlers.text = {
  set: function set(value) {
    this.$textValue.data = value;
  },
  get: function get() {
    return this.$textValue.data;
  }
};
CheckListItem.prototype.viewHandlers.desc = {
  set: function set(value) {
    this.$descValue.data = value;
  },
  get: function get() {
    return this.$descValue.data;
  }
};
CheckListItem.prototype.viewHandlers.extendClasses = {
  set: function set(value, ref) {
    var prevVal = ref.get() || [];
    var i;

    for (i = 0; i < prevVal.length; ++i) {
      this.removeClass(prevVal[i]);
    }

    var newVal = [];
    if (typeof value == 'string') value = value.trim().split(/\s+/);
    value = value || [];

    for (i = 0; i < value.length; ++i) {
      newVal.push(value[i]);
      this.addClass(value[i]);
    }

    return newVal;
  }
};
CheckListItem.prototype.viewHandlers.extendStyle = {
  /***
   *
   * @param value
   * @param {Ref} ref
   */
  set: function set(value, ref) {
    this.removeStyle(ref.get() || {});
    this._extendStyle = Object.assign({}, value || {});
    this.addStyle(this._extendStyle);
  },
  get: function get() {
    return this._extendClasses;
  }
};
CheckListItem.eventHandler = {};

CheckListItem.eventHandler.clickText = function (event) {
  if (hitElement(this.$checkbox, event)) return;
  this.$checkbox.checked = !this.$checkbox.checked;
  this.emit('select', {
    target: this,
    type: 'select',
    originalEvent: event.originalEvent || event.originEvent || event,
    selected: this.selected
  });
};

CheckListItem.eventHandler.checkboxChange = function (event) {
  this.emit('select', {
    target: this,
    type: 'select',
    originalEvent: event.originalEvent || event.originEvent || event,
    selected: this.selected
  });
};

absol_acomp_ACore.install(CheckListItem);
/* harmony default export */ const js_CheckListItem = (CheckListItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistbox.css
var checklistbox = __webpack_require__(5969);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckListBox.js
function CheckListBox_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { CheckListBox_typeof = function _typeof(obj) { return typeof obj; }; } else { CheckListBox_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return CheckListBox_typeof(obj); }







var CheckListBox_itemPool = [];
function CheckListBox_makeItem() {
  return ACore_({
    tag: js_CheckListItem,
    on: {
      select: function select(event) {
        this.$parent.eventHandler.itemSelect(this, event);
      }
    }
  });
}
function CheckListBox_requireItem($parent) {
  var item;

  if (CheckListBox_itemPool.length > 0) {
    item = CheckListBox_itemPool.pop();
  } else {
    item = CheckListBox_makeItem();
  }

  item.$parent = $parent;
  return item;
}
function CheckListBox_releaseItem(item) {
  item.$parent = null;
  item.selected = false;
  CheckListBox_itemPool.push(item);
}
/***
 * @extends SelectListBox
 * @constructor
 */

function CheckListBox() {
  this._initDomHook();

  this._initControl();

  this._initScroller();

  this._initFooter();

  this._initProperty();

  this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this));
}

CheckListBox.tag = 'CheckListBox'.toLowerCase();

CheckListBox.render = function () {
  return ACore_({
    tag: js_Follower.tag,
    extendEvent: ['change', 'cancel'],
    attr: {
      tabindex: 0
    },
    "class": ['as-select-list-box', 'as-check-list-box'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, {
      "class": ['as-bscroller', 'as-select-list-box-scroller'],
      child: [{
        "class": 'as-select-list-box-content',
        child: Array(this.prototype.preLoadN).fill('.as-select-list-box-page')
      }]
    }, {
      "class": 'as-select-list-box-footer',
      child: [{
        tag: 'checkbox',
        "class": 'as-select-list-box-check-all',
        props: {
          checked: false,
          text: 'Check All'
        }
      }, {
        "class": 'as-select-list-box-footer-right',
        child: {
          tag: 'a',
          "class": 'as-select-list-box-cancel-btn',
          child: {
            text: 'Cancel'
          }
        }
      }]
    }, 'attachhook.as-dom-signal']
  });
};

Object.assign(CheckListBox.prototype, js_SelectListBox.prototype);
CheckListBox.property = Object.assign({}, js_SelectListBox.property);
CheckListBox.eventHandler = Object.assign({}, js_SelectListBox.eventHandler);
CheckListBox.prototype.itemHeight = 25;
CheckListBox.prototype.footerMinWidth = 110;

CheckListBox.prototype._initFooter = function () {
  this.$checkAll = $('.as-select-list-box-check-all', this).on('change', this.eventHandler.checkAllChange);
  this.$cancelBtn = $('.as-select-list-box-cancel-btn', this).on('click', this.eventHandler.clickCancelBtn);
};

CheckListBox.prototype._requireItem = function (pageElt, n) {
  var itemElt;

  while (pageElt.childNodes.length > n) {
    itemElt = pageElt.lastChild;
    itemElt.selfRemove();
    CheckListBox_releaseItem(itemElt);
  }

  while (pageElt.childNodes.length < n) {
    itemElt = CheckListBox_requireItem(this);
    pageElt.addChild(itemElt);
  }
};

CheckListBox.prototype.viewListAtFirstSelected = noop;

CheckListBox.prototype.viewListAtValue = function (value) {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAtValue', value);
    return;
  }

  if (this._displayValue == VALUE_HIDDEN) {
    return false;
  }

  var itemHolders = this._displayItemHolderByValue[value + ''];

  if (itemHolders) {
    this.domSignal.once('scrollIntoValue', function () {
      var holder = itemHolders[0];
      this.viewListAt(holder.idx);
      var itemElt = $('.as-check-list-item', this.$listScroller, function (elt) {
        return elt.value === value;
      });

      if (itemElt) {
        var scrollBound = this.$listScroller.getBoundingClientRect();
        var itemBound = itemElt.getBoundingClientRect();
        this.$listScroller.scrollTop += itemBound.top - scrollBound.top;
      }
    }.bind(this));
    this.domSignal.emit('scrollIntoValue');
    return true;
  } else return false;
};

CheckListBox.property.values = {
  set: function set(value) {
    js_SelectListBox.property.values.set.apply(this, arguments);
    this.$checkAll.checked = this._values.length === this.items.length;
  },
  get: js_SelectListBox.property.values.get
};
/***
 * @this CheckListBox
 * @param event
 */

CheckListBox.eventHandler.checkAllChange = function (event) {
  var checked = this.$checkAll.checked;

  if (checked) {
    this._values = this.items.map(function (cr) {
      return CheckListBox_typeof(cr) === "object" ? cr.value : cr;
    });
    this._valueDict = this._values.reduce(function (ac, value) {
      ac[value + ''] = true;
      return ac;
    }, {});
  } else {
    this._values = [];
    this._valueDict = {};
  }

  this._updateSelectedItem();

  this.emit('change', {
    target: this,
    type: 'change',
    originalEvent: event.originalEvent || event.originEvent || event,
    action: checked ? 'check_all' : "uncheck_all"
  }, this);
};
/***
 * @this CheckListBox
 * @param itemElt
 * @param event
 */


CheckListBox.eventHandler.itemSelect = function (itemElt, event) {
  var selected = itemElt.selected;
  var value = itemElt.value;
  var itemData = itemElt.data;
  var idx;

  if (selected) {
    this._values.push(value);

    this._valueDict[value + ''] = true;
  } else {
    idx = this._values.indexOf(value);
    delete this._valueDict[value + ''];

    if (idx >= 0) {
      this._values.splice(idx, 1);
    } else {
      console.error("Violation data");
    }
  }

  this.emit('change', {
    target: this,
    type: 'change',
    originalEvent: event.originalEvent || event.originEvent || event,
    action: selected ? 'check' : 'uncheck',
    value: value,
    itemData: itemData
  }, this);
};
/***
 * @this CheckListBox
 * @param event
 */


CheckListBox.eventHandler.clickCancelBtn = function (event) {
  this.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(CheckListBox);
/* harmony default export */ const js_CheckListBox = (CheckListBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckMenu.js







/***
 * @extends MultiSelectMenu
 * @constructor
 */

function MultiCheckMenu() {
  this.addClass('as-multi-check-menu');
  this.on('click', this.eventHandler.click);
  /***
   * @type {CheckListBox}
   */

  this.$selectlistBox = ACore_({
    tag: js_CheckListBox.tag,
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition,
      change: this.eventHandler.selectListBoxChange,
      cancel: this.eventHandler.selectListBoxCancel
    }
  });
  this.$itemCtn = $('.as-multi-select-menu-item-ctn', this);
  this.$attachhook = $('attachhook', this).on('attached', this.eventHandler.attached);
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  this._isFocus = false;
  this.$items = [];
  this._tempValues = [];
  this._values = [];
  this.items = [];
  this.values = [];
  this.$selectlistBox.followTarget = this;
  this.disableClickToFocus = false;
  this.orderly = true;
  this.itemFocusable = false;
  this._activeValue = undefined;
}

MultiCheckMenu.tag = 'MultiCheckMenu'.toLowerCase();
MultiCheckMenu.render = js_MultiSelectMenu.render;
Object.assign(MultiCheckMenu.prototype, js_MultiSelectMenu.prototype);
MultiCheckMenu.property = Object.assign({}, js_MultiSelectMenu.property);
MultiCheckMenu.eventHandler = Object.assign({}, js_MultiSelectMenu.eventHandler);

MultiCheckMenu.eventHandler.click = function (event) {
  if ((event.target === this || event.target === this.$itemCtn) && !this.isFocus) {
    this.isFocus = true;
  }
};

MultiCheckMenu.eventHandler.bodyClick = function (event) {
  var isRemovedItem = !HTML5_AElement.prototype.isDescendantOf.call(event.target, document.body) && (event.target.classList.contains('absol-selectbox-item-close') || event.target.parentElement && event.target.parentElement.classList.contains('absol-selectbox-item-close'));

  if (this.isFocus && !HTML5_EventEmitter.hitElement(this.$selectlistBox, event) && !isRemovedItem && (!hitElement(this.$itemCtn, event) || event.target === this.$itemCtn)) {
    this.eventHandler.selectListBoxPressItem(event);
    this.isFocus = false;
  }
};

MultiCheckMenu.eventHandler.selectListBoxChange = function (event) {
  var idx;

  switch (event.action) {
    case 'check':
      idx = this._tempValues.indexOf(event.value);

      if (idx < 0) {
        this._tempValues.push(event.value);
      }

      break;

    case 'uncheck':
      idx = this._tempValues.indexOf(event.value);

      if (idx >= 0) {
        this._tempValues.splice(idx, 1);
      }

      break;

    case 'check_all':
      this._tempValues = this.items.map(function (item) {
        return getValueOfListItem(item);
      });
      break;

    case 'uncheck_all':
      this._tempValues = [];
      break;
  }

  setTimeout(function () {
    this.viewItemsByValues(this._tempValues);
    var bound = this.getBoundingClientRect();
    this.$selectlistBox.addStyle('min-width', bound.width + 'px');
    this.$selectlistBox.refollow();
    this.$selectlistBox.updatePosition();
  }.bind(this), 1);
};

MultiCheckMenu.eventHandler.selectListBoxCancel = function (event) {
  this.viewItemsByValues(this._values);
  this.isFocus = false;
  this.$selectlistBox.values = this._values;
};

MultiCheckMenu.property.isFocus = {
  set: function set(value) {
    if (!this._isFocus && value) {
      this._tempValues = this._values.slice();
      this.$selectlistBox.values = this._values;
      this.activeValue = null;
    }

    var thisSM = this;
    if (!this.items || this.items.length === 0) value = false; //prevent focus

    if (this._isFocus === value) return;
    this._isFocus = !!value;

    if (this._isFocus) {
      thisSM.off('click', this.eventHandler.click);
      document.body.appendChild(this.$selectlistBox);
      this.$selectlistBox.domSignal.$attachhook.emit('attached');
      var bound = this.getBoundingClientRect();
      this.$selectlistBox.addStyle('min-width', bound.width + 'px');
      this.$selectlistBox.refollow();
      this.$selectlistBox.updatePosition();
      setTimeout(function () {
        if (thisSM.enableSearch) {
          thisSM.$selectlistBox.$searchInput.focus();
        } else {
          thisSM.$selectlistBox.focus();
        }

        $(document.body).on('mousedown', thisSM.eventHandler.bodyClick);
      }, 100);
      this.$selectlistBox.viewListAtFirstSelected();
    } else {
      $(document.body).off('mousedown', thisSM.eventHandler.bodyClick);
      $(document.body).once('mouseup', function () {
        setTimeout(function () {
          thisSM.on('click', thisSM.eventHandler.click);
        }, 5);
      });
      this.$selectlistBox.selfRemove();
      this.$selectlistBox.unfollow();
      this.$selectlistBox.resetSearchState();
    }
  },
  get: js_MultiSelectMenu.property.isFocus.get
};
/***
 * call after close checklistbox
 * @param event
 */

MultiCheckMenu.eventHandler.selectListBoxPressItem = function (event) {
  var prevValues = this._values;
  var prevDict = prevValues.reduce(function (ac, cr) {
    ac[cr + ''] = cr;
    return ac;
  }, {});
  this.$selectlistBox.updatePosition();
  var curValues = this.$selectlistBox.values;
  var changed = false;
  var curDict = curValues.reduce(function (ac, cr) {
    ac[cr + ''] = cr;
    return ac;
  }, {});
  this._values = curValues.slice();
  prevValues.forEach(function (value) {
    if (value + '' in curDict) return;
    var holders = this.$selectlistBox.findItemsByValue(value);
    if (!holders || holders.length === 0) return;
    var item = holders[0].item;
    this.emit('remove', Object.assign({}, event, {
      type: 'remove',
      target: this,
      value: item.value,
      data: item,
      itemData: item
    }), this);
    changed = true;
  }.bind(this));
  curValues.forEach(function (value) {
    if (value + '' in prevDict) return;
    var holders = this.$selectlistBox.findItemsByValue(value);
    if (!holders || holders.length === 0) return;
    var item = holders[0].item;
    this.emit('add', Object.assign({}, event, {
      type: 'add',
      target: this,
      value: item.value,
      data: item,
      itemData: item
    }), this);
    changed = true;
  }.bind(this));

  this._updateItems();

  this.isFocus = false;
  if (changed) this.emit('change', Object.assign({}, event, {
    type: 'change',
    action: 'submit',
    target: this,
    values: this.values
  }), this);
};

MultiCheckMenu.eventHandler.pressCloseItem = function (item, event) {
  var value = item.value;
  var data = item.data;
  var currentValues;
  var index;

  if (this.isFocus) {
    currentValues = this.$selectlistBox.values;
    index = currentValues.indexOf(value);

    if (index >= 0) {
      currentValues.splice(index, 1);
    }

    this.$selectlistBox.values = currentValues;
    this.$selectlistBox.updatePosition();
    this.viewItemsByValues(this.$selectlistBox.values);
  } else {
    index = this._values.indexOf(value);

    if (index >= 0) {
      this._values.splice(index, 1);

      this._updateItems();

      this.emit('remove', Object.assign({}, event, {
        type: 'change',
        target: this,
        data: data,
        value: value,
        itemData: data
      }), this);
      this.emit('change', Object.assign({}, event, {
        type: 'change',
        action: 'remove',
        target: this,
        data: data,
        value: value,
        itemData: data
      }), this);
    }
  }
};

MultiCheckMenu.eventHandler.pressItem = function (item, event) {
  var value = item.value;

  if (this.itemFocusable && !this.isFocus) {
    var prevActiveValue = this.activeValue;

    if (value !== prevActiveValue) {
      this.activeValue = value;
      this.emit('activevaluechange', {
        target: this,
        originEvent: event,
        prevActiveValue: prevActiveValue,
        activeValue: value
      }, this);
    }
  } else if (this.isFocus) {
    this.$selectlistBox.viewListAtValue(value);
  }
};

absol_acomp_ACore.install(MultiCheckMenu);
/* harmony default export */ const js_MultiCheckMenu = (MultiCheckMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometime24picker.css
var chrometime24picker = __webpack_require__(3573);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTime24Picker.js







/**
 *
 * @param {number} leftOffset
 */

function calcMinHMTime(leftOffset) {
  var h = Math.floor(leftOffset / MILLIS_PER_HOUR);
  var m = Math.floor(leftOffset / MILLIS_PER_MINUTE) % 60;

  if (leftOffset % MILLIS_PER_MINUTE > 0) {
    if (m === 59) {
      h++;
      m = 0;
    } else {
      m++;
    }
  }

  var offset = h * MILLIS_PER_HOUR + m * MILLIS_PER_MINUTE;
  return {
    m: m,
    h: h,
    offset: offset
  };
}
/***
 * @extends AElement
 * @constructor
 */


function ChromeTime24Picker() {
  this.$lists = $$('.as-chrome-time-picker-list', this);
  $$('.as-chrome-time-picker-scroller', this).forEach(js_ChromeTimePicker.prototype._makeScroller.bind(this));
  this.$hours = $$('.as-chrome-time-picker-h24 .as-chrome-time-picker-btn', this);
  this.$minutes = $$('.as-chrome-time-picker-m60 .as-chrome-time-picker-btn', this);
  this.$lists[0].on('click', this.eventHandler.clickHour24List);
  this.$lists[1].on('click', this.eventHandler.clickMinList);
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$attachhook);
  this.domSignal.on('scrollToSelectedMinute', this._scrollToSelectedMinute.bind(this)).on('scrollToSelectedHour', this._scrollToSelectedHour.bind(this));
  this._dayOffset = 0;
  this._value = 0;
  this.dayOffset = new Date();
  this.value = 2 * MILLIS_PER_MINUTE;
}

ChromeTime24Picker.tag = 'ChromeTime24Picker'.toLowerCase();

ChromeTime24Picker.render = function () {
  return ACore_({
    extendEvent: 'change',
    "class": ['as-chrome-time-24-picker', 'as-chrome-time-picker'],
    child: [{
      "class": ['as-chrome-time-picker-scroller', 'as-chrome-time-24-picker-hour'],
      child: [{
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-up',
        child: 'span.mdi.mdi-chevron-up'
      }, {
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-down',
        child: 'span.mdi.mdi-chevron-down'
      }, {
        "class": ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-h24'],
        child: {
          "class": 'as-chrome-time-picker-list',
          child: Array(24).fill(0).map(function (u, i) {
            return {
              tag: 'button',
              "class": 'as-chrome-time-picker-btn',
              child: [{
                tag: 'span',
                child: {
                  text: i + ''
                }
              }, {
                tag: 'span',
                "class": 'as-chrome-time-24-picker-tomorrow-text',
                child: {
                  text: ' (Hôm sau)'
                }
              }],
              props: {
                __hour__: i
              }
            };
          })
        }
      }]
    }, {
      "class": 'as-chrome-time-picker-scroller',
      child: [{
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-up',
        child: 'span.mdi.mdi-chevron-up'
      }, {
        tag: 'button',
        "class": 'as-chrome-time-picker-scroller-down',
        child: 'span.mdi.mdi-chevron-down'
      }, {
        "class": ['as-chrome-time-picker-viewport', 'as-chrome-time-picker-m60'],
        child: {
          "class": 'as-chrome-time-picker-list',
          child: Array(60).fill(0).map(function (u, i) {
            return {
              tag: 'button',
              "class": 'as-chrome-time-picker-btn',
              child: {
                tag: 'span',
                child: {
                  text: i + ''
                }
              },
              props: {
                __min__: i
              }
            };
          })
        }
      }]
    }]
  });
};

ChromeTime24Picker.prototype._updateHourNumbers = function () {
  var mH = calcMinHMTime(this.dayOffset).h;

  for (var i = 0; i < this.$hours.length; ++i) {
    this.$hours[i].firstChild.firstChild.data = (mH + i) % 24;

    if (mH + i >= 24) {
      this.$hours[i].addClass('as-in-tomorrow');
    } else {
      this.$hours[i].removeClass('as-in-tomorrow');
    }
  }
};

ChromeTime24Picker.prototype._updateMinuteNumbers = function () {
  var minHM = calcMinHMTime(this.dayOffset);
  var h = minHM.h;
  var m = minHM.m;
  var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR);

  for (var i = 0; i < this.$minutes.length; ++i) {
    if (vH === h && i < m) {
      this.$minutes[i].disabled = true;
    } else {
      this.$minutes[i].disabled = false;
    }
  }
};

ChromeTime24Picker.prototype._updateSelectedHour = function () {
  var h = Math.floor(this.dayOffset / MILLIS_PER_HOUR);
  var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR);
  var d = vH - h;

  for (var i = 0; i < this.$hours.length; ++i) {
    if (i === d) {
      this.$hours[i].addClass('as-selected');
      this.$selectedHour = this.$hours[i];
    } else {
      this.$hours[i].removeClass('as-selected');
    }
  }

  this._scrollToSelectedHour();
};

ChromeTime24Picker.prototype._updateSelectedMinute = function () {
  var vM = Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60;

  for (var i = 0; i < this.$minutes.length; ++i) {
    if (vM === i) {
      this.$minutes[i].addClass('as-selected');
      this.$selectedMinute = this.$minutes[i];
    } else {
      this.$minutes[i].removeClass('as-selected');
    }
  }

  this._scrollToSelectedMinute();
};

ChromeTime24Picker.prototype._update = function () {
  this._updateHourNumbers();

  this._updateMinuteNumbers();

  this._updateSelectedHour();

  this._updateSelectedMinute();
};

ChromeTime24Picker.prototype._scrollToSelectedHour = function () {
  if (this.isDescendantOf(document.body)) {
    if (this.$selectedHour) {
      vScrollIntoView(this.$selectedHour);
    }
  } else {
    this.domSignal.emit('scrollToSelectedHour');
  }
};

ChromeTime24Picker.prototype._scrollToSelectedMinute = function () {
  if (this.isDescendantOf(document.body)) {
    if (this.$selectedMinute) {
      vScrollIntoView(this.$selectedMinute);
    }
  } else {
    this.domSignal.emit('scrollToSelectedMinute');
  }
};

ChromeTime24Picker.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change'
  }, this);
};

ChromeTime24Picker.property = {};
ChromeTime24Picker.property.dayOffset = {
  /***
   *
   * @param {number|Date} value
   */
  set: function set(value) {
    if (typeof value === "number") {
      value = Math.max(0, value % MILLIS_PER_DAY); //10p
    } else if (value instanceof Date) {
      value = Math.max(0, (value.getTime() - beginOfDay(value).getTime()) % MILLIS_PER_DAY);
    } else value = 0;

    this._dayOffset = value;

    this._update();
  },
  get: function get() {
    return this._dayOffset;
  }
};
ChromeTime24Picker.property.value = {
  /***
   * @this ChromeTime24Picker
   * @param value
   */
  set: function set(value) {
    this._value = value;

    this._update();
  },
  get: function get() {
    return this._value;
  }
};
ChromeTime24Picker.property.hour = {
  get: function get() {
    return Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR);
  }
};
ChromeTime24Picker.property.minute = {
  get: function get() {
    return Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60;
  }
};
ChromeTime24Picker.eventHandler = {};

ChromeTime24Picker.eventHandler.clickHour24List = function (event) {
  var minHM = calcMinHMTime(this.dayOffset);
  var h = minHM.h;
  var vM = Math.floor((this.dayOffset + this.value) / MILLIS_PER_MINUTE) % 60;
  var hour;
  var minChanged = false;
  var prevValue = this._value;
  if ('__hour__' in event.target) hour = event.target.__hour__;
  if ('__hour__' in event.target.parentElement) hour = event.target.parentElement.__hour__;

  if (hour !== undefined) {
    if (hour === 0 && minHM.m > vM) {
      vM = minHM.m;
      minChanged = true;
    }

    this._value = (h + hour) * MILLIS_PER_HOUR + vM * MILLIS_PER_MINUTE - this.dayOffset;

    this._updateSelectedHour();

    this._updateMinuteNumbers();

    if (minChanged) this._updateSelectedMinute();
    if (prevValue !== this._value) this.notifyChange(event);
  }
};

ChromeTime24Picker.eventHandler.clickMinList = function (event) {
  var vH = Math.floor((this.dayOffset + this.value) / MILLIS_PER_HOUR);
  var min;
  var prevValue = this._value;
  if ('__min__' in event.target) min = event.target.__min__;
  if ('__min__' in event.target.parentElement) min = event.target.parentElement.__min__;

  if (min !== undefined) {
    this._value = vH * MILLIS_PER_HOUR + min * MILLIS_PER_MINUTE - this.dayOffset;

    this._updateSelectedMinute();

    this.notifyChange(event);
    if (prevValue !== this._value) this.notifyChange(event);
  }
};

absol_acomp_ACore.install(ChromeTime24Picker);
/* harmony default export */ const js_ChromeTime24Picker = (ChromeTime24Picker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Time24Input.js





/**
 * @extends AElement
 * @constructor
 */

function Time24Input() {
  this.$clockBtn = $('.as-time-input-icon-btn', this).on('click', this.eventHandler.clickClockBtn);
  this.$text = $('.as-time-input-text', this);
  this.$clearBtn = $('button.as-time-input-clear-btn', this).on('click', this.clear.bind(this));
  this._dayOffset = 0;
  this._value = 0;
  this._format = 'HH:mm';
  this.dayOffset = this._dayOffset;
  this.value = this._value;
  this.format = this._format;
  this.notNull = true;
}

Time24Input.tag = 'Time24Input'.toLowerCase();

Time24Input.render = function () {
  return ACore_({
    "class": ['ac-time-input', 'as-time-24-input'],
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      "class": 'as-time-input-text',
      attr: {
        readOnly: 'true',
        type: 'text'
      }
    }, {
      tag: 'button',
      "class": 'as-time-input-clear-btn',
      child: 'span.mdi.mdi-close-circle'
    }, {
      tag: 'button',
      "class": 'as-time-input-icon-btn',
      child: 'span.mdi.mdi-clock-outline'
    }]
  });
};

Time24Input.prototype._updateText = function () {
  var text;

  if (isRealNumber(this._value) && isRealNumber(this._dayOffset)) {
    text = formatDateTime(new Date(beginOfDay(new Date()).getTime() + this._value + this._dayOffset), this._format);
    if (this._value + this._dayOffset >= MILLIS_PER_DAY) text += ' (Hôm sau)';
    this.removeClass('as-value-null');
  } else {
    text = this._format;
    this.addClass('as-value-null');
  }

  this.$text.value = text;
};

Time24Input.prototype._notifyChange = function (event) {
  this.emit('change', {
    type: 'change',
    originalEvent: event.originalEvent || event.originEvent || event
  }, this);
};

Time24Input.prototype.clear = function (event) {
  if (this._value !== null && !this.notNull) {
    this.value = null;

    this._notifyChange(event);
  }
};

Time24Input.prototype.share = {
  $picker: null,

  /***
   * @type Time24Input
   */
  $holdingInput: null,
  $follower: null
};

Time24Input.prototype._preparePicker = function () {
  if (this.share.$picker) return;
  this.share.$picker = ACore_({
    tag: js_ChromeTime24Picker.tag
  });
  this.share.$follower = ACore_({
    tag: 'follower',
    "class": 'as-chrome-time-24-picker-follower',
    child: this.share.$picker
  });
};

Time24Input.prototype._attachPicker = function () {
  this._preparePicker();

  if (this.share.$holdingInput) {
    this.share.$holdingInput._releasePicker();
  }

  this.share.$holdingInput = this;
  this.share.$follower.addTo(document.body);
  this.share.$follower.followTarget = this;
  this.share.$follower.addStyle('visibility', 'hidden');
  this.share.$picker.on('change', this.eventHandler.pickerChange);
  this.$clockBtn.off('click', this.eventHandler.clickClockBtn);
  this.share.$picker.dayOffset = isRealNumber(this._dayOffset) ? this._dayOffset : 0;
  this.share.$picker.value = isRealNumber(this._value) ? this._value : 0;
  setTimeout(function () {
    document.body.addEventListener('click', this.eventHandler.clickOut);
    this.share.$follower.removeStyle('visibility');
  }.bind(this), 5);
};

Time24Input.prototype._releasePicker = function () {
  if (this.share.$holdingInput !== this) return;
  this.share.$picker.off('change', this.eventHandler.pickerChange);
  this.share.$follower.remove();
  this.share.$follower.followTarget = null;
  this.share.$holdingInput = null;
  document.body.removeEventListener('click', this.eventHandler.clickOut);
  setTimeout(function () {
    this.$clockBtn.on('click', this.eventHandler.clickClockBtn);
  }.bind(this), 10);
};

Time24Input.property = {};
Time24Input.property.dayOffset = {
  set: function set(value) {
    this._dayOffset = isRealNumber(value) ? value : null;

    this._updateText();
  },
  get: function get() {
    return this._dayOffset;
  }
};
Time24Input.property.value = {
  set: function set(value) {
    this._value = isRealNumber(value) ? value : this.notNull ? 0 : null;

    this._updateText();
  },
  get: function get() {
    return this._value;
  }
};
Time24Input.property.displayTime = {
  get: function get() {
    if (isRealNumber(this._value) && isRealNumber(this._dayOffset)) {
      return this._value + this._dayOffset;
    } else {
      return null;
    }
  }
};
Time24Input.property.notNull = {
  set: function set(value) {
    if (value) {
      if (this.value === null) {
        this.value = 0;
      }

      this.addClass('as-must-not-null');
    } else {
      this.removeClass('as-must-not-null');
    }
  },
  get: function get() {
    return this.containsClass('as-must-not-null');
  }
};
Time24Input.property.disabled = {
  set: function set(value) {
    value = !!value;
    this._disabled = value;
    if (value) this.addClass('as-disabled');else this.removeClass('as-disabled');
    this.$text.disabled = value;
  },
  get: function get() {
    return this._disabled;
  }
};
Time24Input.property.format = {
  set: function set(value) {
    this._format = value || 'HH:mm';

    this._updateText();
  },
  get: function get() {
    return this._format;
  }
};
Time24Input.eventHandler = {};

Time24Input.eventHandler.pickerChange = function (event) {
  if (this.dayOffset === null) this.dayOffset = 0;
  this.value = this.share.$picker.value;

  this._notifyChange(event);
};

Time24Input.eventHandler.clickOut = function (event) {
  if (hitElement(this.share.$follower, event)) return;

  this._releasePicker();
};

Time24Input.eventHandler.clickClockBtn = function () {
  this._attachPicker();
};

absol_acomp_ACore.install(Time24Input);
/* harmony default export */ const js_Time24Input = (Time24Input);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timerange24input.css
var timerange24input = __webpack_require__(1554);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeRange24Input.js






/***
 * @extends AElement
 * @constructor
 */

function TimeRange24Input() {
  /***
   *
   * @type {TimeInput}
   */
  this.$offset = $(js_TimeInput.tag, this);
  this.$offset.on('change', this.eventHandler.offsetChange);
  /***
   *
   * @type {Time24Input}
   */

  this.$duration = $(js_Time24Input.tag, this);
  this.$duration.on('change', this.eventHandler.durationChange);
}

TimeRange24Input.tag = 'TimeRange24Input'.toLowerCase();

TimeRange24Input.render = function () {
  return ACore_({
    extendEvent: ['change'],
    "class": 'as-time-range-24-input',
    child: [{
      tag: js_TimeInput.tag,
      props: {
        format: 'HH:mm'
      }
    }, js_Time24Input.tag]
  });
};

TimeRange24Input.prototype.init = function (props) {
  props = props || {};
  var cpProps = Object.assign(props);

  if ('notNull' in props) {
    this.notNull = props.notNull;
    delete cpProps.notNull;
  }

  if ('dayOffset' in props) {
    this.dayOffset = props.dayOffset;
    delete cpProps.dayOffset;
  }

  Object.assign(this, cpProps);
};

TimeRange24Input.property = {};
TimeRange24Input.property.notNull = {
  /***
   * @this TimeRange24Input
   * @param value
   */
  set: function set(value) {
    value = !!value;
    this.$offset.notNull = value;
    this.$duration.notNull = value;
  },
  get: function get() {
    return this.$offset.notNull;
  }
};
TimeRange24Input.property.disabled = {
  set: function set(value) {
    value = !!value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }

    this.$offset.disabled = value;
    this.$duration.disabled = value;
  },
  get: function get() {
    return this.containsClass('as-disabled');
  }
};
TimeRange24Input.property.dayOffset = {
  set: function set(value) {
    var notNull = this.notNull;

    if (isRealNumber(value)) {
      value = value << 0;
      value = value % MILLIS_PER_DAY;
      value = (value + MILLIS_PER_DAY) % MILLIS_PER_DAY;
      value = Math.floor(value / MILLIS_PER_MINUTE) * MILLIS_PER_MINUTE;
    } else {
      value = notNull ? 0 : null;
    }

    this.$offset.dayOffset = value;
    this.$duration.dayOffset = value;
  },
  get: function get() {
    return this.$offset.dayOffset;
  }
};
TimeRange24Input.property.duration = {
  /***
   * @this TimeRange24Input
   * @param value
   */
  set: function set(value) {
    var notNull = this.notNull;

    if (isRealNumber(value)) {
      value = Math.floor(Math.min(MILLIS_PER_DAY, Math.max(0, value)));
      value = Math.floor(value / MILLIS_PER_MINUTE) * MILLIS_PER_MINUTE;
    } else {
      value = notNull ? 0 : null;
    }

    this.$duration.value = value;
  },
  get: function get() {
    return this.$duration.value;
  }
};
TimeRange24Input.eventHandler = {};

TimeRange24Input.eventHandler.offsetChange = function (event) {
  this.$duration.dayOffset = this.$offset.dayOffset;
  this.emit('change', {
    type: 'change',
    property: 'dayOffset',
    originalEvent: event.originalEvent || event.originEvent || event
  });
};

TimeRange24Input.eventHandler.durationChange = function (event) {
  if (this.$duration.dayOffset !== null && this.$offset.dayOffset === null) {
    this.$offset.dayOffset = this.$duration.dayOffset;
  }

  this.emit('change', {
    type: 'change',
    property: 'duration',
    originalEvent: event.originalEvent || event.originEvent || event
  });
};

absol_acomp_ACore.install(TimeRange24Input);
/* harmony default export */ const js_TimeRange24Input = (TimeRange24Input);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreeitem.css
var checktreeitem = __webpack_require__(127);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tool/TextMeasurement.js
function TextMeasurement(opts) {
  opts = opts || {};
  this.chars = opts.chars || (" !\"$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "[\\]^_abcdefghijklmnopqrstuvwxyz{|}" + "¥©ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíñòóôõùúýĂăĐđĨĩŨũƠơƯưẠ̌̀́̃̉Р" + "ийксуẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊị" + "ỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ–’“”…₫€?").split('');
  this.computed = Object.assign({}, opts.computed || {});
}

TextMeasurement.prototype.compute = function (font) {
  if (this.computed[font]) return true;
  if (!('document' in window)) return false;

  if (!this.canvas) {
    this.canvas = document.createElement('canvas');
    this.ctx = this.canvas.getContext('2d');
  }

  var ctx = this.ctx;
  ctx.font = font;
  var data = {};
  var charBoxes = {};
  data.charBoxes = charBoxes;
  var c, d, i, j;
  var metrics;
  var n = this.chars.length;
  var chars = this.chars;

  for (i = 0; i < n; ++i) {
    c = chars[i];
    metrics = ctx.measureText(c);
    charBoxes[c] = metrics.width;
  }

  var spacing = {};
  data.spacing = spacing;
  var pair;

  for (i = 0; i < n; ++i) {
    c = chars[i];

    for (j = 0; j < n; ++j) {
      d = chars[j];
      pair = c + d;
      metrics = ctx.measureText(pair);
      spacing[pair] = metrics.width - charBoxes[c] - charBoxes[d];
    }
  }

  this.computed[font] = data;
  return true;
};
/***
 *
 * @param {string} text
 * @param {string=} font
 * @return {number}
 */


TextMeasurement.prototype.measureTextWidth = function (text, font) {
  var l = text.length;
  if (l === 0) return 0;
  var width = 0;
  var data = this.computed[font];
  var charBoxes = data.charBoxes;
  var spacing = data.spacing;
  var c, pc;
  pc = text[0];
  width += charBoxes[pc] || charBoxes['0'];

  for (var i = 1; i < l; ++i) {
    c = text[i];
    width += spacing[pc + c];
    width += charBoxes[c] || charBoxes['0'];
    pc = c;
  }

  return width;
};

/* harmony default export */ const tool_TextMeasurement = ((/* unused pure expression or super */ null && (TextMeasurement)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeItem.js






/***
 * @extends ExpNode
 * @constructor
 */

function CheckTreeItem() {
  this._itemData = null;
  this.$name = $('span.absol-exp-node-name', this);
  this.$desc = $('span.absol-exp-node-desc', this);
  this.$iconCtn = $('div.absol-exp-node-ext-icon', this);
  this.$level = $('.absol-exp-node-level', this);
  this.$checkbox = $('checkboxbutton', this).on('change', this.eventHandler.checkboxChange);
  this.$toggleIcon = $('toggler-ico', this);
  this.on('click', this.eventHandler.click);
}

CheckTreeItem.tag = 'CheckTreeItem'.toLowerCase();

CheckTreeItem.render = function () {
  return ACore_({
    tag: 'button',
    extendEvent: ['select', 'presstoggle'],
    "class": ['as-check-tree-item', 'absol-exp-node'],
    child: ['.absol-exp-node-level', 'toggler-ico', 'checkboxbutton', 'img.absol-exp-node-ext-icon', 'div.absol-exp-node-ext-icon', 'span.absol-exp-node-name', 'span.absol-exp-node-desc']
  });
};

CheckTreeItem.property = {};
CheckTreeItem.property.icon = ExpNode.property.icon;
CheckTreeItem.property.text = ExpNode.property.name;
CheckTreeItem.property.level = ExpNode.property.level;
CheckTreeItem.property.desc = ExpNode.property.desc;
CheckTreeItem.property.status = ExpNode.property.status;
CheckTreeItem.property.data = {
  set: function set(itemData) {
    this._itemData = itemData;
    var text = getTextOfListItem(itemData);
    this.text = text;
    var desc = getDescriptionOfListItem(itemData);
    this.desc = desc;

    if (itemData && itemData.icon) {
      this.icon = itemData.icon;
    }
  },
  get: function get() {
    return this._itemData;
  }
};
CheckTreeItem.property.selected = {
  set: function set(value) {
    if (value === 'all') {
      this.$checkbox.removeClass('as-has-minus');
      this.$checkbox.checked = true;
    } else if (value === 'child') {
      this.$checkbox.checked = false;
      this.$checkbox.addClass('as-has-minus');
    } else {
      this.$checkbox.removeClass('as-has-minus');
      this.$checkbox.checked = false;
    }
  },
  get: function get() {
    if (this.$checkbox.checked) {
      return 'all';
    } else {
      if (this.$checkbox.containsClass('as-has-minus')) {
        return 'child';
      } else {
        return 'none';
      }
    }
  }
};
CheckTreeItem.eventHandler = {};

CheckTreeItem.eventHandler.checkboxChange = function (event) {
  this.emit('select', {
    type: 'select',
    target: this,
    originalEvent: event.originalEvent || event.originEvent || event
  });
};

CheckTreeItem.eventHandler.click = function (event) {
  var tBound;

  if (this.status === 'open' || this.status === 'close') {
    tBound = this.$toggleIcon.getBoundingClientRect();

    if (event.clientX <= tBound.right) {
      this.emit('presstoggle', {
        type: 'presstoggle',
        target: this,
        originalEvent: event
      }, this);
    } else if (!hitElement(this.$checkbox, event)) {
      this.$checkbox.checked = !this.$checkbox.checked;
      this.eventHandler.checkboxChange(event);
    }
  } else {
    if (!hitElement(this.$checkbox, event)) {
      this.$checkbox.checked = !this.$checkbox.checked;
      this.eventHandler.checkboxChange(event);
    }
  }
};

absol_acomp_ACore.install(CheckTreeItem);
/* harmony default export */ const js_CheckTreeItem = (CheckTreeItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreebox.css
var checktreebox = __webpack_require__(7779);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/cpuviewer.css
var cpuviewer = __webpack_require__(4980);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CPUViewer.js



/***
 * @extends AElement
 * @constructor
 */

function CPUViewer() {
  /***
   *
   * @type {HTMLCanvasElement}
   */
  this.$canvas = $('canvas', this);
  this.ctx = this.$canvas.getContext('2d');
  this.offsetTime = 0;
  this.inv = -1;
  this.usage = Array(120).fill(0);
  this.holdStart = 0;
  this.holdTime = 0;
  this.logOffset = 0;
  this.counter = 0;
  this['tick'] = this.tick.bind(this);
}

CPUViewer.tag = 'CPUViewer'.toLowerCase();

CPUViewer.render = function () {
  return ACore_({
    "class": 'as-cpu-viewer',
    child: {
      tag: 'canvas',
      attr: {
        width: '120px',
        height: '50px'
      }
    }
  });
};

CPUViewer.prototype.start = function () {
  if (this.inv < 0) {
    this.offsetTime = new Date().getTime();
    setInterval(this.tick, 250);
  }
};

CPUViewer.prototype.stop = function () {
  if (this.inv > 0) {
    clearInterval(this.inv);
    this.inv = -1;
  }
};

CPUViewer.prototype.tick = function () {
  while (this.holdTime > 250) {
    this.holdTime -= 250;
    this.usage.push(100);
  }

  this.usage.push(this.holdTime * 100 / 250);

  while (this.usage.length > 120) {
    this.usage.shift();
  }

  this.ctx.fillStyle = 'black';
  this.ctx.fillRect(0, 0, 120, 50);
  var y;
  this.ctx.fillStyle = 'yellow';

  for (var x = 0; x < this.usage.length; ++x) {
    y = this.usage[x] / 2;
    this.ctx.fillRect(x, 50 - y, 1, y);
  }

  var now = new Date().getTime();
  this.logOffset = now;
  this.holdStart = now;
  this.holdTime = 0;
};

CPUViewer.prototype.hold = function () {
  if (this.counter === 0) {
    this.holdStart = new Date().getTime();
  }

  this.counter++;
};

CPUViewer.prototype.release = function () {
  if (this.counter <= 0) return;
  this.counter--;

  if (this.counter === 0) {
    this.holdTime += new Date().getTime() - this.holdStart;
  }
};
/***
 *
 * @type {CPUViewer}
 */


CPUViewer.instance = null;
CPUViewer.state = 'NOT_INIT';

CPUViewer.start = function () {
  if (!this.instance) {
    this.instance = ACore_('cpuviewer');
    this.state = "NOT_ATTACHED";
  }

  if (this.state === "NOT_ATTACHED") {
    this.state = "RUNNING";
    HTML5_Dom.documentReady.then(function () {
      document.body.appendChild(this.instance);
      console.log(this.instance);
    }.bind(this));
  }

  this.instance.start();

  CPUViewer.hold = function () {
    this.instance.hold();
  };

  CPUViewer.release = function () {
    this.instance.release();
  };
};

CPUViewer.stop = function () {
  if (!this.instance) return;
  if (this.state !== "RUNNING") return;
  this.instance.stop();
  this.instance.remove();
  this.state = 'NOT_ATTACHED';
};

CPUViewer.hold = function () {};

CPUViewer.release = function () {};

absol_acomp_ACore.install(CPUViewer);
/* harmony default export */ const js_CPUViewer = (CPUViewer);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeBox.js








/***
 * @extends Follower
 * @constructor
 */

function CheckTreeBox() {
  this._initControl();

  this._initScroller();

  this._initDomHook();

  this._initProperty();

  this._initFooter();
}

CheckTreeBox.tag = 'CheckTreeBox'.toLowerCase();
CheckTreeBox.prototype.preLoadN = 3;
CheckTreeBox.prototype.itemHeight = 28;
CheckTreeBox.prototype.itemInPage = 36;

CheckTreeBox.prototype._initScroller = function () {
  this.$scroller = $('.as-check-tree-box-scroller', this).on('scroll', this.eventHandler.scroll);
  this.itemInPage = Math.max(36, Math.ceil(getScreenSize().height / this.itemHeight));
  this.$content = $('.as-check-tree-box-content', this);
  this.$pages = $$('.as-select-list-box-page', this);
  this.$pages.forEach(function (p) {
    p.__viewOffset__ = -1;
  });
};

CheckTreeBox.prototype._initDomHook = function () {
  this.$domSignal = ACore_('attachhook');
  this.appendChild(this.$domSignal);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('viewListAt', this.viewListAt.bind(this));
};

CheckTreeBox.prototype._initProperty = function () {
  this._items = [];
  this._values = [];
  this.indexedHolderByValue = {};
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.rootHolders = [];
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.holders = [];
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.rootViewHolders = [];
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.viewHolders = [];
  this.enableSearch = true;
};

CheckTreeBox.prototype._initControl = function () {
  this.cache = {};
  this.$searchInput = $('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
};

CheckTreeBox.prototype._initFooter = function () {
  this.$checkAll = $('.as-select-list-box-check-all', this).on('change', this.eventHandler.checkAllChange);
  this.$cancelBtn = $('.as-select-list-box-cancel-btn', this).on('click', this.eventHandler.clickCancelBtn);
};

CheckTreeBox.render = function () {
  return ACore_({
    tag: 'follower',
    extendEvent: ['change', 'toggleitem', 'cancel'],
    "class": ['as-check-tree-box', 'as-select-list-box', 'as-anchor-1'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, {
      "class": ['as-check-tree-box-scroller', 'as-bscroller', 'as-select-list-box-scroller'],
      child: {
        "class": ['as-check-tree-box-content', 'as-select-list-box-content'],
        child: Array(this.prototype.preLoadN).fill('.as-select-list-box-page')
      }
    }, {
      "class": 'as-select-list-box-footer',
      child: [{
        tag: 'checkbox',
        "class": 'as-select-list-box-check-all',
        props: {
          checked: false,
          text: 'Check All'
        }
      }, {
        "class": 'as-select-list-box-footer-right',
        child: {
          tag: 'a',
          "class": 'as-select-list-box-cancel-btn',
          child: {
            text: 'Cancel'
          }
        }
      }]
    }]
  });
};

CheckTreeBox.prototype.depthIndexing = function (items, arr, rootArr) {
  var res = {};
  var count = 0;
  var self = this;
  /***
   *
   * @param {TreeNodeHolder|null} root
   * @param items
   */

  function scan(root, items) {
    items.forEach(function visit(item) {
      var value = item.value + '';
      res[value] = res[value] || [];
      var node = new TreeNodeHolder(self, item, count++, root);
      res[value].push(node);
      arr && arr.push(node);

      if (root) {
        root.child.push(node);
      } else if (rootArr) {
        rootArr.push(node);
      }

      if (res[value].length > 1) {
        console.log("Duplicate value", res[value]);
      }

      if (item.items && item.items.length > 0) scan(node, item.items);
    });
  }

  scan(null, items);
  return res;
};

CheckTreeBox.prototype.findItemHoldersByValue = function (value) {
  return (this.itemHolderByValue[value] || []).slice();
};

CheckTreeBox.prototype.viewListAt = function (offset) {
  offset = offset || 0;

  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAt', offset);
    return;
  }

  this.noTransition();
  var midPage = this.$pages.length >> 1;
  var startOffset = Math.max(0, offset - midPage * this.itemInPage);
  var cOffset;
  var itemN = this.viewHolders.length;

  for (var i = 0; i < this.$pages.length; ++i) {
    cOffset = startOffset + i * this.itemInPage;

    if (cOffset < itemN) {
      this.$pages[i].__viewOffset__ = cOffset;
      this.$pages[i].removeStyle('display').addStyle('top', cOffset * this.itemHeight + 'px');

      this._fillPage(this.$pages[i], Math.min(this.itemInPage, itemN - cOffset));

      this._assignItems(this.$pages[i], cOffset);
    } else {
      this.$pages[i].__viewOffset__ = -1;
      this.$pages[i].addStyle('display', 'none');
    }
  }
};

CheckTreeBox.prototype.noTransition = function () {
  if (this.containsClass('as-no-transition')) return;
  this.addClass('as-no-transition');
  setTimeout(function () {
    this.removeClass('as-no-transition');
  }.bind(this), 100);
};

CheckTreeBox.prototype._pool = [];

CheckTreeBox.prototype._releaseItem = function (item) {
  if (item.nodeHolder && item.nodeHolder.itemElt === item) {
    item.nodeHolder.itemElt = null;
  }

  this._pool.push(item);
};

CheckTreeBox.prototype._requestItem = function () {
  return this._pool.pop() || ACore_({
    tag: js_CheckTreeItem.tag,
    props: {
      menuElt: this
    },
    on: {
      presstoggle: function presstoggle(event) {
        this.menuElt.eventHandler.toggleItem(this, event);
      },
      select: function select(event) {
        this.menuElt.eventHandler.selectItem(this, event);
      }
    }
  });
};

CheckTreeBox.prototype._fillPage = function (pageElt, n) {
  while (pageElt.childNodes.length > n) {
    this._releaseItem(pageElt.lastChild);

    pageElt.removeChild(pageElt.lastChild);
  }

  while (pageElt.childNodes.length < n) {
    pageElt.addChild(this._requestItem());
  }
};

CheckTreeBox.prototype._assignItems = function (pageElt, offset) {
  for (var i = 0; i < pageElt.childNodes.length; ++i) {
    this.viewHolders[offset + i].itemElt = pageElt.childNodes[i];
  }
};

CheckTreeBox.prototype._resetView = function () {
  this.$searchInput.value = '';
  this.viewHolders = this.rootHolders.reduce(function (ac, holder) {
    return holder.toArray(ac);
  }, []);
  this.rootViewHolders = this.rootHolders;
  this.updateContentSize();
  this.viewListAt(0);
};

CheckTreeBox.prototype.resetSearchState = function () {
  this._resetView();
};

CheckTreeBox.prototype._calcEstimateSize = function () {
  this.estimateSize = {
    width: 0,
    height: 0
  };
  var holders = this.holders.slice();
  var n = holders.length;
  var holder;
  var longestHolder = null;
  var longest = 0;
  var w;

  for (var i = 0; i < n; ++i) {
    holder = holders[i];
    w = holder.calcEstimateWidth();

    if (w > longest) {
      longest = w;
      longestHolder = holder;
    }
  }

  if (longestHolder) {
    this.estimateSize.width = longestHolder.calcWidth();
    this.estimateSize.height = this.itemHeight * n;
  }

  this.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px');
};

CheckTreeBox.prototype.updateContentSize = function () {
  this.$content.addStyle('height', this.viewHolders.length * this.itemHeight + 'px');
};

CheckTreeBox.prototype._updateToValues = function () {
  var values = [];
  this.rootHolders.forEach(function visit(node) {
    if (node.selected === 'all') {
      values.push(node.item.value);
    } else if (node.selected === 'child') {
      node.child.forEach(visit);
    }
  });
  this._values = values;
};

CheckTreeBox.prototype._updateFromValues = function () {
  var values = this._values;
  var valueDict = this.values.reduce(function (ac, cr) {
    ac[cr] = true;
    return ac;
  }, {});
  this.rootHolders.forEach(function visit(node) {
    var selectedAllCount = 0;
    var selectedChildCount = 0;
    var cNode;
    var value = node.item.value;

    if (valueDict[value]) {
      node.selectAll(true);
    } else {
      for (var i = 0; i < node.child.length; ++i) {
        cNode = node.child[i];
        visit(cNode);

        if (cNode.selected === 'all') {
          selectedAllCount++;
        } else if (cNode.selected === 'child') {
          selectedChildCount++;
        }
      }

      if (node.child > 0 && selectedAllCount === node.child.length) {
        node.selected = 'all';
      } else if (selectedAllCount + selectedChildCount > 0) {
        node.selected = 'child';
      } else {
        node.selected = 'none';
      }

      if (node.itemElt) node.itemElt.selected = node.selected;
    }
  });
  this.updateCheckedAll();
};

CheckTreeBox.prototype.updateCheckedAll = function () {
  var holders = this.rootHolders;
  if (holders.length === 0) return;
  var c = 0;

  for (var i = 0; i < holders.length; ++i) {
    if (holders[i].selected === 'all') c++;else break;
  }

  this.$checkAll.checked = c === holders.length;
};

CheckTreeBox.property = {};
CheckTreeBox.property.items = {
  /***
   * @this CheckTreeBox
   * @param items
   */
  set: function set(items) {
    js_CPUViewer.hold();
    this.cache = {};
    items = items || [];
    this._items = items;
    prepareSearchForList(items);
    this.holders = [];
    this.itemHolderByValue = this.depthIndexing(items, this.holders, this.rootHolders);

    this._calcEstimateSize();

    this._resetView();

    this.values = this['values']; //update

    js_CPUViewer.release();
  },
  get: function get() {
    return this._items;
  }
};
CheckTreeBox.property.values = {
  set: function set(values) {
    this._values = values || [];

    this._updateFromValues();
  },
  get: function get() {
    return this._values;
  }
};
CheckTreeBox.property.enableSearch = {
  set: function set(value) {
    if (value) this.addClass('as-enable-search');else this.removeClass('as-enable-search');
  },
  get: function get() {
    return this.containsClass('as-enable-search');
  }
};
CheckTreeBox.eventHandler = {};

CheckTreeBox.eventHandler.toggleItem = function (item, event) {
  this.noTransition();
  var nodeHolder = item.nodeHolder;

  if (!nodeHolder) {
    console.error("Load error, item was not assigned TreeNodeHolder!");
  } else nodeHolder.toggle();
};

CheckTreeBox.eventHandler.selectItem = function (item, event) {
  var nodeHolder = item.nodeHolder;

  if (!nodeHolder) {
    console.error("Load error, item was not assigned TreeNodeHolder!");
    return;
  }

  this.noTransition();
  js_CPUViewer.hold();
  var ref = nodeHolder.findReferenceNode();
  var targetNode = ref || nodeHolder;
  var selected = item.selected;

  if (selected === 'all') {
    targetNode.selectAll();
  } else {
    targetNode.unselectAll();
  }

  if (ref) {
    nodeHolder.getRoot().updateSelectedFromRef();
  }

  this._updateToValues();

  this.updateCheckedAll();
  this.emit('change', {
    type: 'change',
    target: this
  }, this);
  js_CPUViewer.release();
};
/***
 * @this CheckTreeBox
 */


CheckTreeBox.eventHandler.scroll = function () {
  js_CPUViewer.hold();
  var scrollTop = this.$scroller.scrollTop;
  var scrollBottom = scrollTop + this.$scroller.clientHeight;
  var startOffset = this.$pages[0].__viewOffset__;
  var endOffset = this.$pages[this.$pages.length - 1].__viewOffset__;

  if (endOffset === -1) {
    endOffset = this.viewHolders.length;
  } else {
    endOffset += this.$pages[this.$pages.length - 1].childNodes.length;
  }

  var needLoad = 0;
  if (startOffset > 0 && startOffset * this.itemHeight + 200 > scrollTop) needLoad = -1;

  if (needLoad === 0 && this.viewHolders.length > endOffset && endOffset * this.itemHeight - 200 < scrollBottom) {
    needLoad = 1;
  }

  var page2Load;

  if (needLoad < 0) {
    page2Load = this.$pages.pop();
    this.$pages.unshift(page2Load);
    page2Load.__viewOffset__ = Math.max(0, startOffset - this.itemInPage);

    this._fillPage(page2Load, startOffset - page2Load.__viewOffset__);

    this._assignItems(page2Load, page2Load.__viewOffset__);

    page2Load.removeStyle('display');
    page2Load.addStyle('top', page2Load.__viewOffset__ * this.itemHeight + 'px');
  } else if (needLoad > 0) {
    for (var i = 0; i < this.$pages.length; ++i) {
      if (this.$pages[i].__viewOffset__ === -1) {
        page2Load = this.$pages[i];
        break;
      }
    }

    if (!page2Load) {
      page2Load = this.$pages.shift();
      this.$pages.push(page2Load);
    }

    page2Load.__viewOffset__ = endOffset;

    this._fillPage(page2Load, Math.min(this.itemInPage, this.viewHolders.length - endOffset));

    this._assignItems(page2Load, page2Load.__viewOffset__);

    page2Load.removeStyle('display');
    page2Load.addStyle('top', page2Load.__viewOffset__ * this.itemHeight + 'px');
  }

  js_CPUViewer.release();
};
/***
 * @this CheckTreeBox
 */


CheckTreeBox.eventHandler.searchModify = function () {
  js_CPUViewer.hold();
  var self = this;
  var text = this.$searchInput.value.trim();

  if (text.length === 0) {
    this._resetView();

    js_CPUViewer.release();
    return;
  }

  var searchData;

  if (this.cache[text]) {
    searchData = this.cache[text];
  } else {
    searchData = {};
    searchData.items = searchTreeListByText(text, this._items);
    searchData.rootViewHolders = [];
    var temp1 = [];
    var temp2 = [];
    self.depthIndexing(searchData.items, temp1);
    searchData.items.forEach(function visit(it) {
      if (it.ref.items && it.ref.items.length > 0 && (!it.items || it.items.length === 0)) {
        it.items = it.ref.items;
        it.doNotInitOpen = true;
      } else if (it.items && it.items.length > 0) {
        it.items.forEach(visit);
      }
    });
    self.depthIndexing(searchData.items, temp2, searchData.rootViewHolders);
    searchData.viewHolders = [];

    while (temp1.length > 0 && temp2.length > 0) {
      if (temp1[0].item === temp2[0].item) {
        searchData.viewHolders.push(temp2.shift());
        temp1.shift();
      } else {
        temp2.shift();
      }
    }
  }

  searchData.viewHolders.forEach(function (it) {
    if (it.status === 'close') {
      if (!it.item.doNotInitOpen) it.status = 'open';
    }
  });
  this.viewHolders = searchData.viewHolders.slice();
  this.rootViewHolders = searchData.rootViewHolders.slice();
  this.viewHolders.forEach(function (node) {
    var ref = node.findReferenceNode();
    node.selected = ref.selected;
    if (node.itemElt) node.itemElt.selected = node.selected;
  });
  this.updateContentSize();
  this.viewListAt(0);
  this.updatePosition();
  js_CPUViewer.release();
};

CheckTreeBox.prototype.updateSelectedInViewIfNeed = function () {
  if (this.viewHolders.length > 0) {
    if (this.viewHolders[0].findReferenceNode()) {
      this.viewHolders.forEach(function (node) {
        var ref = node.findReferenceNode();
        node.selected = ref.selected;
        if (node.itemElt) node.itemElt.selected = node.selected;
      });
    }
  }
};

CheckTreeBox.eventHandler.checkAllChange = function (event) {
  js_CPUViewer.hold();
  var checkedAll = this.$checkAll.checked;
  var changed = false;
  var holders = this.rootHolders;
  var holder;

  for (var i = 0; i < holders.length; ++i) {
    holder = holders[i];

    if (checkedAll) {
      if (holder.selected !== 'all') {
        holder.selectAll();
        changed = true;
      }
    } else {
      if (holder.selected !== 'none') {
        holder.unselectAll();
        changed = true;
      }
    }
  }

  if (this.rootViewHolders !== this.rootHolders) {
    this.rootViewHolders.forEach(function (holder) {
      holder.updateSelectedFromRef();
    });
  }

  if (changed) {
    this._updateToValues();

    this.emit('change', {
      type: 'change',
      target: this
    }, this);
  }

  js_CPUViewer.release();
};

CheckTreeBox.eventHandler.clickCancelBtn = function (event) {
  this.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(CheckTreeBox);
/* harmony default export */ const js_CheckTreeBox = (CheckTreeBox);
/***
 *
 * @param {CheckTreeBox} boxElt
 * @param {SelectionItem} item
 * @param {number} idx
 * @param {TreeNodeHolder} parent
 * @constructor
 */

function TreeNodeHolder(boxElt, item, idx, parent) {
  this.boxElt = boxElt;
  this.item = item;
  this.idx = idx;
  this.parent = parent;
  this.status = item.items && item.items.length > 0 ? 'close' : 'none';
  this.selected = 'none';
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.child = [];
  this.level = parent ? parent.level + 1 : 0;
  this._elt = null;
}

TreeNodeHolder.prototype.findIdxInView = function () {
  var holders = this.boxElt.viewHolders;
  var start = 0;
  var end = holders.length - 1;
  var mid;
  var idx = this.idx;
  var holderIdx;

  while (start < end) {
    mid = start + end >> 1;
    holderIdx = holders[mid].idx;

    if (holderIdx < idx) {
      start = mid + 1;
    } else if (holderIdx > idx) {
      end = mid - 1;
    } else {
      return mid;
    }
  }

  holderIdx = holders[start].idx;
  if (holderIdx === idx) return start;
  return -1;
};

TreeNodeHolder.prototype.toggle = function () {
  js_CPUViewer.hold();
  var idx = this.findIdxInView();
  var status = this.status;

  if (status === 'close') {
    this.itemElt.status = 'open';
    this.status = 'open';
    var arr = this.toArray();
    arr.shift();
    this.boxElt.viewHolders.splice.apply(this.boxElt.viewHolders, [idx + 1, 0].concat(arr));
    this.boxElt.updateContentSize();
    this.boxElt.viewListAt(idx);
    this.boxElt.emit('toggleitem', {
      type: 'toggleiteion',
      target: this.boxElt,
      nodeHolder: this,
      status: 'open'
    }, this.boxElt);
  } else if (status === 'open') {
    this.itemElt.status = 'close';
    this.status = 'close';
    var l = 0;

    while (this.boxElt.viewHolders[idx + 1 + l] && this.boxElt.viewHolders[idx + 1 + l].isDescendantOf(this)) {
      ++l;
    }

    this.boxElt.viewHolders.splice(idx + 1, l);
    this.boxElt.updateContentSize();
    this.boxElt.viewListAt(idx);
    this.boxElt.emit('toggleitem', {
      type: 'toggleiteion',
      target: this.boxElt,
      nodeHolder: this,
      status: 'close'
    }, this.boxElt);
  }

  js_CPUViewer.release();
};
/***
 *
 * @param {boolean=} isDownUpdate
 */


TreeNodeHolder.prototype.selectAll = function (isDownUpdate) {
  if (this.selected === 'all') return;
  this.selected = 'all';
  if (this.itemElt) this.itemElt.selected = this.selected; //todo find ref

  this.child.forEach(function (child) {
    child.selectAll(true);
  });

  if (!isDownUpdate) {
    if (this.parent) this.parent.updateUp();
  }
};
/***
 *
 * @param {boolean=} isDownUpdate
 */


TreeNodeHolder.prototype.unselectAll = function (isDownUpdate) {
  if (this.selected === 'none') return;
  this.selected = 'none';
  if (this.itemElt) this.itemElt.selected = this.selected;
  this.child.forEach(function (child) {
    child.unselectAll(true);
  });

  if (!isDownUpdate) {
    if (this.parent) this.parent.updateUp();
  }
};

TreeNodeHolder.prototype.updateUp = function () {
  var childSelectAll = 0;
  var childSelectChild = 0;

  if (this.child.length > 0) {
    for (var i = 0; i < this.child.length; ++i) {
      if (this.child[i].selected === 'all') {
        childSelectAll++;
      } else if (this.child[i].selected === 'child') {
        childSelectChild++;
      }
    }

    if (childSelectAll === this.child.length) {
      this.selected = 'all';
    } else if (childSelectChild + childSelectAll > 0) {
      this.selected = 'child';
    } else {
      this.selected = 'none';
    }

    if (this.itemElt) {
      this.itemElt.selected = this.selected;
    }
  }

  if (this.parent) this.parent.updateUp();
};

TreeNodeHolder.prototype.calcEstimateWidth = function () {
  var width = 12; //padding

  width += 12 * this.level;
  width += 14.7 + 5; //toggle icon

  width += 16; //checkbox

  if (this.item.icon) width += 21; //icon

  width += 7 + utils_estimateWidth14(this.item.text); //margin-text

  if (this.item.desc) width += 6 + utils_estimateWidth14(this.item.desc) * 0.85;
  return width;
};

TreeNodeHolder.prototype.calcWidth = function () {
  var width = 12; //padding

  width += 12 * this.level;
  width += 14.7 + 5; //toggle icon

  width += 16; //checkbox

  if (this.item.icon) width += 21; //icon

  width += 7 + utils_measureText(this.item.text, '14px arial').width; //margin-text

  if (this.item.desc) width += 6 + utils_measureText(this.item.desc, '11.9px arial').width * 0.85;
  return width;
};

TreeNodeHolder.prototype.isDescendantOf = function (parent) {
  var cr = this.parent;

  while (cr) {
    if (parent === cr) return true;
    cr = cr.parent;
  }

  return false;
};
/***
 *
 * @param {TreeNodeHolder[]=} ac
 * @return {TreeNodeHolder[]}
 */


TreeNodeHolder.prototype.toArray = function (ac) {
  ac = ac || [];
  ac.push(this);

  if (this.status === 'open') {
    for (var i = 0; i < this.child.length; ++i) {
      this.child[i].toArray(ac);
    }
  }

  return ac;
};

Object.defineProperty(TreeNodeHolder.prototype, 'itemElt', {
  set: function set(elt) {
    if (this._elt === elt) return;

    if (this._elt) {
      if (this._elt.nodeHolder === this) {
        this._elt.nodeHolder = null;
      }
    }

    if (elt) {
      if (elt.nodeHolder) {
        elt.nodeHolder.itemElt = null;
      }

      elt.nodeHolder = this;
      this._elt = elt;
      elt.data = this.item;
      elt.level = this.level;
      elt.status = this.status;
      elt.selected = this.selected;
    } else {
      this._elt = null;
    }
  },
  get: function get() {
    return this._elt;
  }
});

TreeNodeHolder.prototype.findReferenceNode = function () {
  var value = this.item.value;
  var holders = this.boxElt.findItemHoldersByValue(value);
  var holder;

  for (var i = 0; i < holders.length; ++i) {
    holder = holders[i];
    if ((holder.item === this.item.ref || holder.item === this.item) && holder !== this) return holder;
  }

  return null;
};

TreeNodeHolder.prototype.getRoot = function () {
  if (!this.parent) return this;
  return this.parent.getRoot();
};

TreeNodeHolder.prototype.updateSelectedFromRef = function () {
  var ref = this.findReferenceNode();
  if (!ref) return;
  var selected = ref.selected;
  this.selected = selected;
  if (this.itemElt) this.itemElt.selected = selected;
  this.child.forEach(function (c) {
    c.updateSelectedFromRef();
  });
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeMenu.js








/***
 * @extends AElement
 * @constructor
 */

function MultiCheckTreeMenu() {
  this._values = [];
  this._viewValues = [];
  /***
   * @type {CheckTreeBox}
   */

  this.$checkTreeBox = ACore_({
    tag: js_CheckTreeBox.tag,
    on: {
      change: this.eventHandler.boxChange,
      preupdateposition: this.eventHandler.preUpdateListPosition,
      toggleitem: this.eventHandler.boxToggleItem,
      cancel: this.eventHandler.boxCancel
    }
  });
  this.$itemCtn = $('.as-multi-select-menu-item-ctn', this);
  this.$checkTreeBox.followTarget = this;
  this.on('click', this.eventHandler.click);
  HTML5_OOP.drillProperty(this, this.$checkTreeBox, 'enableSearch');
  this.enableSearch = false;
}

MultiCheckTreeMenu.tag = 'MultiCheckTreeMenu'.toLowerCase();

MultiCheckTreeMenu.render = function () {
  return ACore_({
    "class": ['as-multi-select-menu', 'as-multi-check-tree-menu'],
    extendEvent: ['change'],
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": ['as-multi-select-menu-item-ctn', 'as-bscroller']
    }, {
      tag: 'button',
      "class": 'as-multi-select-menu-toggle-btn',
      child: 'dropdown-ico'
    }, 'attachhook']
  });
};

MultiCheckTreeMenu.prototype.tokenPool = [];

MultiCheckTreeMenu.prototype._requestToken = function () {
  var token = this.tokenPool.pop();

  if (!token) {
    token = ACore_({
      tag: js_SelectBoxItem.tag,
      props: {
        menu: this
      },
      on: {
        close: function close(event) {
          setTimeout(function () {
            if (this.menu) this.menu.eventHandler.pressCloseToken(this, event);
          }.bind(this), 1);
        }
      }
    });
  }

  return token;
};

MultiCheckTreeMenu.prototype._releaseToken = function (token) {
  token.menu = null;
  this.tokenPool.push(token);
};

MultiCheckTreeMenu.prototype._filToken = function (n) {
  while (this.$itemCtn.childNodes.length > n) {
    this.$itemCtn.removeChild(this.$itemCtn.lastChild);
  }

  while (this.$itemCtn.childNodes.length < n) {
    this.$itemCtn.addChild(this._requestToken());
  }
};

MultiCheckTreeMenu.prototype._assignTokens = function (items) {
  for (var i = 0; i < items.length; ++i) {
    this.$itemCtn.childNodes[i].data = items[i];
  }
};

MultiCheckTreeMenu.prototype.findItemsByValues = function (values) {
  return values.map(function (value) {
    var holders = this.$checkTreeBox.findItemHoldersByValue(value);
    if (holders.length > 0) return holders[0].item;
    return null;
  }.bind(this)).filter(function (it) {
    return !!it;
  });
};

MultiCheckTreeMenu.prototype.viewValues = function (values) {
  var items = this.findItemsByValues(values);

  this._filToken(items.length);

  this._assignTokens(items);

  this._viewValues = values;

  if (this.isFocus) {
    var bound = this.getBoundingClientRect();
    this.$checkTreeBox.addStyle('min-width', bound.width + 'px');
    HTML5_ResizeSystem.update();
  }
};

MultiCheckTreeMenu.prototype.commitView = function () {
  var values = this._values;
  var views = this._viewValues;
  var changed = values.length !== views.length;
  var viewDict;

  if (!changed) {
    viewDict = views.reduce(function (ac, cr) {
      ac[cr] = true;
      return ac;
    }, {});
    changed = values.some(function (value) {
      return !viewDict[value];
    });
  }

  if (changed) {
    this._values = views.slice();
    this.emit('change', {
      type: 'change',
      target: this
    }, this);
  }
};

MultiCheckTreeMenu.prototype.cancelView = function () {
  this.$checkTreeBox.values = this._values;
  this.viewValues(this._values);
};

MultiCheckTreeMenu.prototype.init = function (props) {
  props = props || {};
  var cProps = Object.assign({}, props);

  if ('items' in props) {
    this.items = props.items;
    delete cProps.items;
  }

  if ('values' in props) {
    this.values = props.values;
    delete cProps.values;
  }

  Object.assign(this, cProps);
};

MultiCheckTreeMenu.property = {};
MultiCheckTreeMenu.property.isFocus = {
  /***
   * @this MultiCheckTreeMenu
   * @param value
   */
  set: function set(value) {
    var self = this;
    value = !!value;
    var c = this.containsClass('as-focus');
    if (value === c) return;
    js_CPUViewer.hold();

    if (value) {
      self.off('click', self.eventHandler.click);
      var bound = this.getBoundingClientRect();
      this.$checkTreeBox.addStyle('min-width', bound.width + 'px');
      this.addClass('as-focus');
      document.body.appendChild(this.$checkTreeBox);
      this.$checkTreeBox.updatePosition();

      if (this._focusTimeout > 0) {
        clearTimeout(this._focusTimeout);
      }

      this._focusTimeout = setTimeout(function () {
        document.addEventListener('mousedown', this.eventHandler.clickOut);
        this._focusTimeout = -1;
      }.bind(this));
    } else {
      var waitMouseUp = function waitMouseUp() {
        document.removeEventListener('mouseup', waitMouseUp);
        setTimeout(function () {
          self.on('click', self.eventHandler.click);
        }, 5);
      };

      this.removeClass('as-focus');
      this.$checkTreeBox.selfRemove();
      this.$checkTreeBox.resetSearchState();
      document.removeEventListener('mousedown', this.eventHandler.clickOut);
      document.addEventListener('mouseup', waitMouseUp);
    }

    js_CPUViewer.release();
  },
  get: function get() {
    return this.containsClass('as-focus');
  }
};
MultiCheckTreeMenu.property.items = {
  set: function set(items) {
    this.$checkTreeBox.items = items || [];
    this.addStyle('--list-min-width', this.$checkTreeBox.estimateSize.width + 'px');
    this.values = this._values; //update
  },
  get: function get() {
    return this.$checkTreeBox.items;
  }
};
MultiCheckTreeMenu.property.values = {
  /***
   * @this MultiCheckTreeMenu
   * @param values
   */
  set: function set(values) {
    values = values || [];
    this.$checkTreeBox.values = values;
    this._values = values;
    values = this.$checkTreeBox.values.slice(); //correct wrong item

    this.viewValues(values);
  },

  /***
   * @this MultiCheckTreeMenu
   */
  get: function get() {
    return this._values;
  }
};
MultiCheckTreeMenu.eventHandler = {};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */

MultiCheckTreeMenu.eventHandler.clickOut = function (event) {
  if (event.target === this || event.target === this.$itemCtn || !hitElement(this, event) && !hitElement(this.$checkTreeBox, event)) {
    this.commitView();
    this.isFocus = false;
  }
};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */


MultiCheckTreeMenu.eventHandler.click = function (event) {
  if (event.target === this || event.target === this.$itemCtn) {
    this.isFocus = true;
  }
};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */


MultiCheckTreeMenu.eventHandler.boxChange = function (event) {
  this.viewValues(this.$checkTreeBox.values);
  HTML5_ResizeSystem.update();
};

MultiCheckTreeMenu.eventHandler.boxCancel = function (event) {
  this.cancelView();
  this.isFocus = false;
};
/***
 * @this MultiCheckTreeMenu
 * @param {SelectBoxItem} tokenElt
 * @param event
 */


MultiCheckTreeMenu.eventHandler.pressCloseToken = function (tokenElt, event) {
  var value = tokenElt.value;
  var holders = this.$checkTreeBox.findItemHoldersByValue(value);
  holders.forEach(function (holder) {
    holder.unselectAll();
  });
  this.$checkTreeBox.updateCheckedAll();
  this.$checkTreeBox.updateSelectedInViewIfNeed();

  var newValues = this._viewValues.filter(function (v) {
    return v !== value;
  });

  if (this.isFocus) {
    this.viewValues(newValues);
  } else {
    this.values = newValues;
    this.emit('change', {
      type: 'change',
      target: this
    }, this);
  }
};

MultiCheckTreeMenu.eventHandler.preUpdateListPosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$checkTreeBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
  var outBound = traceOutBoundingClientRect(this);

  if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
    this.isFocus = false;
  }
};

MultiCheckTreeMenu.eventHandler.boxToggleItem = function (event) {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$checkTreeBox.addStyle('--max-height', (this.$checkTreeBox._lastAnchor < 4 ? availableBot : availableTop) + 'px');
  this.$checkTreeBox.updatePosition();
};

absol_acomp_ACore.install(MultiCheckTreeMenu);
/* harmony default export */ const js_MultiCheckTreeMenu = (MultiCheckTreeMenu); // MultiCheckTreeMenu.prototype.
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dom/install.js















































































































var publicCreators = [js_AutoCompleteInput, js_BoardTable, js_Board, js_BScroller, js_ButtonArray, js_ButtonRange, js_CalendarInput, OldCalendarInput, CheckBoxInput, js_CheckBox, CheckboxButton, js_CheckListItem, js_CheckListBox, js_ChromeCalendar, js_ChromeTimePicker, js_ChromeTime24Picker, js_CircleSectionLabel, js_CountdownClock, js_DropZone, js_EmojiPickerTooltip, Scrollbar, VScrollbar, HScrollbar, VScroller, HScroller, ContextMenu, HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VMenu, VRootMenu, MenuButton, js_DateInput2, js_Hanger, js_DraggableHStack, js_DraggableVStack, js_DropPanel, js_DropPanelStack, js_EditableText, js_EmojiPicker, js_EmojiCounter, js_EmojiCounterList, js_Sprite, ExpNode, js_ExpTree, ExpGroup, js_DVExpTree, js_FlexiconButton, js_FlexiconInput, js_Follower, js_FollowerToggler, js_Frame, js_FrameView, js_TabFrame, js_TabView, js_SinglePage, js_HexaSectionLabel, js_VRuler, js_HRuler, js_IconSprite, js_LinearColorBar, js_MediaInput, js_MessageInput, MessageQuote, js_Modal, js_NumberInput, js_NumberSpanInput, OnsScreenWindow, js_OnScreenWidget, js_PageIndicator, js_PageSelector, js_PreInput, js_ProgressBar, js_QuickListButton, js_QuickMenu, js_QuickPath, js_Radio, js_RadioButton, js_RadioInput, js_RibbonSplitButton, js_RibbonButton, js_RotatedText, js_SelectList, js_RemoteSvg, js_ResizeBox, Searcher, js_SelectListBox, js_SelectTreeBox, SelectMenu2, js_SelectBox, js_MultiSelectMenu, js_SelectBoxItem, js_SelectTable, js_SelectTable2, js_SelectTreeMenu, js_SpanInput, Snackbar, js_StaticTabbar, js_Switch, js_TableScroller, js_TableVScroller, js_TextArea2, js_TextClipboard, js_TimeInput, js_Time24Input, js_TimeRange24Input, js_TimeSelectInput, js_TimePicker, js_DateTimeInput, Tooltip, js_Toast, js_TreeList, js_TreeListItem, js_TokenField, WidthHeightSizer, js_TrackBar, js_TrackBarInput, SpinnerIco, VerticalTreeDiagramNode, js_VerticalTreeDiagram, js_MultiCheckMenu, js_CheckTreeItem, js_CheckTreeBox, js_MultiCheckTreeMenu];
/***
 *
 * @param {Dom} core
 */

function install(core) {
  core.install(publicCreators);
  core.install('checkboxbutton', CheckBoxInput);
  core.install('selectbox', js_MultiSelectMenu);
}

/* harmony default export */ const dom_install = (install);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/AComp.js







var AComp = {
  core: absol_acomp_ACore,
  $: absol_acomp_ACore.$,
  _: absol_acomp_ACore._,
  creator: absol_acomp_ACore.creator,
  buildDom: absol_acomp_ACore.buildDom,
  runDebugTask: js_DebugTask.start.bind(js_DebugTask),
  Draggable: js_Draggable,
  EmojiChars: js_EmojiChars,
  EmojiAnims: js_EmojiAnims,
  install: dom_install
};
window.runDebugTask = js_DebugTask.start.bind(js_DebugTask);
/* harmony default export */ const absol_acomp_AComp = (AComp);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/materializeIconTrigger.js



function materializeIconTrigger() {
  HTML5_Dom.documentReady.then(function () {
    var linkMaterial = absol_acomp_ACore.$('link', document.head, function (elt) {
      if (elt.href && elt.href.indexOf('Material+Icons')) return true;
    });
    if (!linkMaterial) return;
    var checkInv = -1;

    function onLoaded() {
      if (checkInv > 0) {
        clearTimeout(checkInv);
        checkInv = -1;
      }

      linkMaterial.off('loaded', onLoaded).off('load', onLoaded).off('error', onLoaded);
      i.remove();
      requestAnimationFrame(function () {
        HTML5_ResizeSystem.update();

        if (document.cookie.indexOf('absol_debug') >= 0) {
          console.info('Resize after MaterialIcons load');
        }
      });
    }

    linkMaterial.on('loaded', onLoaded).on('load', onLoaded).on('error', onLoaded);

    var i = absol_acomp_ACore._({
      tag: 'i',
      "class": "material-icons",
      style: {
        fontSize: '14px',
        position: 'fixed',
        top: '0',
        left: '0',
        zIndex: '-1000',
        visibility: 'hidden'
      },
      child: {
        text: 'account_balance_wallet'
      }
    }).addTo(document.body);

    var iBox = i.getBoundingClientRect();

    if (iBox.width < iBox.height * 3) {
      onLoaded();
      return;
    }

    var intervalCount = 50;
    checkInv = setInterval(function () {
      intervalCount--;

      if (intervalCount < 0) {
        onLoaded();
      }

      iBox = i.getBoundingClientRect();

      if (iBox.width < iBox.height * 3) {
        onLoaded();
      }
    }, 200);
  });
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextMeasureData.js
/* harmony default export */ const TextMeasureData = ({
  chars: (" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~©´ÀÁÂÊÍÒÔÙÚ" + "ÝàáâãèéêìíðòóôõùúýĂăĐđĩũƠơƯưɐɔɕɗəɛɡɣɲʃʒʝʰˆː˘̪̀̃͡τφχẠạẢảẤấẦầẩẫẬậắằẳặẸẹẻẽếỀềểễỆệỉịọỏỐốồổỗỘộỚớỜờởỡỢợụỦủỨứỪừửữựỳỷỹ" + "–‘“”…♥♪【】🤣️�").split(''),
  fonts: {
    "Times New Roman": {
      "width": {
        "0": "̪̀̃͡️",
        "5": " ,.",
        "10": "0123456789#$*_bdghknopquvxyðòóôõùúýđũɗɡɣɲọỏốồổỗộụủỳỷỹ–♪",
        "20": "…【】",
        "6.66015625": "!()-I[]`fr´Íʃˆ˘‘",
        "8.1640625": "\"",
        "16.66015625": "%",
        "15.556640625": "&m",
        "3.603515625": "'",
        "11.279296875": "+<=>",
        "5.556640625": "/:;\\ijltìíĩʝːỉị",
        "8.876953125": "?acezàáâãèéêăɐɔɕəʒχạảấầẩẫậắằẳặẹẻẽếềểễệ“”",
        "18.41796875": "@",
        "14.443359375": "ADGHKNOQUVXYwÀÁÂÒÔÙÚÝĂĐƠẠẢẤẦẬỐỘỚỜỢỦ",
        "13.33984375": "BCR",
        "12.216796875": "ELTZÊẸỀỆ",
        "11.123046875": "FPS",
        "7.783203125": "Js",
        "17.783203125": "M",
        "18.876953125": "W",
        "9.384765625": "^",
        "9.599609375": "{}",
        "4.00390625": "|",
        "10.8203125": "~",
        "15.1953125": "©",
        "10.576171875": "ơớờởỡợ",
        "15.517578125": "ƯỨỪ",
        "10.83984375": "ưứừửữự",
        "8.3984375": "ɛ",
        "6.42578125": "ʰ",
        "8.037109375": "τ",
        "11.54296875": "φ",
        "11.875": "♥",
        "19.423828125": "🤣�"
      },
      "spacing": {
        "-0.7421875": "11W:W;",
        "-2.216796875": "ATP,P.VaVeVyWAY-YAYqYu",
        "-2.578125": "AVV,V.VAVoY,Y.",
        "-1.6015625": "AWF,F.RVTAWaWeWo",
        "-1.8359375": "AYAwAyLTLVPAT-V-W,W.Y:Y;Yp",
        "-1.484375": "AvFALWT,T.V:V;‘‘",
        "-2.001953125": "LYYaYeYoYv",
        "-1.103515625": "LyRWRYT;W-Yir.",
        "-1.201171875": "RTViVrVuWy",
        "-0.80078125": "RyWiWrWur,",
        "-0.99609375": "T:",
        "-0.361328125": "TOffrg",
        "-1.396484375": "TaTcTeToTsTwTy",
        "-0.703125": "TiTrTu",
        "-0.400390625": "r-",
        "-1.298828125": "v,v.w,w.y,y.",
        "-0.439453125": "χφ",
        "-4.443359375": "【̀【̃【̪【͡】̀】̃】̪】͡",
        "-11.38671875": "🤣"
      },
      "fontBoundingBoxAscent": 18,
      "fontBoundingBoxDescent": 4
    },
    "Arial": {
      "width": {
        "0": "̪̀̃͡️",
        "10": "Jcksvxyzýɔɕỳỷỹ♪",
        "20": "…【】",
        "11.123046875": "0123456789#$?L_abdeghnopquàáâãèéêðòóôõùúăđũɐɗəɡɲạảấầẩẫậắằẳặẹẻẽếềểễệọỏốồổỗộụủ–",
        "5.556640625": " !,./:;I[\\]ftÍìíĩː",
        "7.099609375": "\"",
        "17.783203125": "%",
        "13.33984375": "&ABEKPSVXYÀÁÂÊÝĂẠẢẤẦẬẸỀỆ",
        "3.818359375": "'",
        "6.66015625": "()-`r´ˆ˘“”",
        "7.783203125": "*",
        "11.6796875": "+<=>~",
        "20.302734375": "@",
        "14.443359375": "CDHNRUwÙÚĐỦ",
        "12.216796875": "FTZ",
        "15.556640625": "GOQÒÔỐỘ",
        "16.66015625": "Mm",
        "18.876953125": "W",
        "9.384765625": "^",
        "4.443359375": "ijlʃỉị‘",
        "6.6796875": "{}",
        "5.1953125": "|",
        "14.736328125": "©",
        "17.1484375": "ƠỚỜỢ",
        "13.115234375": "ơớờởỡợ",
        "17.080078125": "ƯỨỪ",
        "13.388671875": "ưứừửữự",
        "9.169921875": "ɛ",
        "10.01953125": "ɣ",
        "10.8984375": "ʒ",
        "7.94921875": "ʝ",
        "7.666015625": "ʰ",
        "7.900390625": "τ",
        "12.96875": "φ",
        "10.498046875": "χ",
        "11.875": "♥",
        "19.423828125": "🤣�"
      },
      "spacing": {
        "-1.484375": "11ATAVAYLTLVLWLYPATAVAVaYAYaYpv,v.y,y.",
        "-0.7421875": "AWLyTiTrTuV:V;VrVuVyWAWaYi",
        "-0.361328125": "AvAwAyRTRVRWRYTOViW-W:W;WeWoWrWuff‘‘",
        "-2.216796875": "F,F.T,T.T:T;TaTcTeToTs",
        "-1.103515625": "FAT-TwTyV-VeVoW,W.Y:YuYvr,r.w,w.",
        "-2.578125": "P,P.Y,Y.",
        "-1.8359375": "V,V.Y-YeYoYq",
        "-0.17578125": "Wy",
        "-1.298828125": "Y;",
        "1.11328125": "ìĩ",
        "-0.283203125": "τφφτ",
        "-0.537109375": "φχχφ",
        "-5": "【̀【̃【̪【͡】̀】̃】̪】͡",
        "-11.38671875": "🤣"
      },
      "fontBoundingBoxAscent": 18,
      "fontBoundingBoxDescent": 4
    }
  }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextMeasure.js


function TextMeasure() {
  this.$canvas = null;
  this.data = {};

  this._loadComputedData(); // if the font is not in data, create it and copy console log to TextMeasureData.js
  // this._makeFontSize('Times New Roman');
  // this._makeFontSize('Arial');

}

TextMeasure.prototype._loadComputedData = function () {
  var thisO = this;
  this.data.chars = TextMeasureData.chars;
  this.data.fonts = Object.keys(TextMeasureData.fonts).reduce(function (ac, fontName) {
    var font = TextMeasureData.fonts[fontName];
    ac[fontName] = {
      width: thisO._valueDict2KeyDict(font.width),
      spacing: thisO._valueDict2KeyDict(font.spacing, 2),
      fontBoundingBoxAscent: font.fontBoundingBoxAscent,
      fontBoundingBoxDescent: font.fontBoundingBoxDescent
    };
    return ac;
  }, {});
};

TextMeasure.prototype._valueDict2KeyDict = function (dict, keyLength) {
  var thisO = this;
  return Object.keys(dict).reduce(function (ac, valueText) {
    var keys = thisO._splitKey(dict[valueText], keyLength || 1);

    var value = parseFloat(valueText);
    keys.reduce(function (ac1, key) {
      ac1[key] = value;
      return ac1;
    }, ac);
    return ac;
  }, {});
};

TextMeasure.prototype._keyDic2ValueDict = function (keyDict) {
  return Object.keys(keyDict).reduce(function (ac, cr) {
    var vKey = keyDict[cr].toString();
    ac[vKey] = ac[vKey] || '';
    ac[vKey] += cr;
    return ac;
  }, {});
};
/***
 *
 * @param s
 * @param l
 * @returns {string[]}
 * @private
 */


TextMeasure.prototype._splitKey = function (s, l) {
  var cArr = s.split('');
  if (!l || l < 2) return cArr;
  return cArr.reduce(function (ac, cr) {
    ac.last += cr;

    if (ac.last.length >= l) {
      ac.arr.push(ac.last);
      ac.last = '';
    }

    return ac;
  }, {
    arr: [],
    last: ''
  }).arr;
};

TextMeasure.prototype._array2keyDict = function (arrKey, arrVal) {
  return arrKey.reduce(function (ac, cr, i) {
    ac[cr] = arrVal[i];
    return ac;
  }, {});
};

TextMeasure.prototype._makeFontSize = function (fontName) {
  var thisO = this;
  var charList = TextMeasureData.chars;
  var fontMt = this.measureTextByCanvas("demo-abgH", '20px ' + fontName);
  var cWidthArr = charList.map(function (c) {
    return thisO.measureTextByCanvas(c).width;
  });

  var width = this._array2keyDict(charList, cWidthArr);

  var spacing = charList.reduce(function (ac, c1, i1) {
    return charList.reduce(function (ac1, c2, i2) {
      var d = thisO.measureTextByCanvas(c1 + c2).width - cWidthArr[i1] - cWidthArr[i2];
      if (d !== 0) ac1[c1 + c2] = d;
      return ac1;
    }, ac);
  }, {});
  TextMeasureData[fontName] = {
    width: thisO._keyDic2ValueDict(width),
    spacing: thisO._keyDic2ValueDict(spacing),
    fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
    fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
  };
  this.data.fonts[fontName] = {
    width: width,
    spacing: spacing,
    fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
    fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
  }; // copy from console and paste it to TextMeasureData
  // console.log(fontName+":"+JSON.stringify(this.data.fonts[fontName]));
};
/***
 *
 * @param {string} text
 * @param {string} fontName
 * @param {number} fontSize
 * @return {number}
 */


TextMeasure.prototype.measureWidth = function (text, fontName, fontSize) {
  var width = this.data.fonts[fontName].width;
  var spacing = this.data.fonts[fontName].spacing;
  var res = 0;
  var prevC = text[0];
  var c = text[0];
  res += width[c] || 0;

  for (var i = 1; i < text.length; ++i) {
    c = text[i];
    res += spacing[prevC + c] || 0;
    res += width[c] || 0;
    prevC = c;
  }

  return res * fontSize / 20;
};
/***
 *
 * @param {string}text
 * @param {string=} font - without font-size, default is 20px
 * @returns {TextMetrics}
 */


TextMeasure.prototype.measureTextByCanvas = function (text, font) {
  if (!document || !document.createElement) throw new Error("Not support renderer!");
  var canvas = this.$canvas || (this.$canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  if (font) context.font = font;
  var metrics = context.measureText(text);
  return metrics;
};

/* harmony default export */ const js_TextMeasure = (new TextMeasure());
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/BContextCapture.js






/***
 * simple way, to replace old ContextCapture version
 ***/

function BContextCapture() {
  HTML5_EventEmitter.call(this);
  this.sync = Promise.resolve();
  this.$root = null;
  this._pointerSession = 0;
  this.ev_contextMenu = this.ev_contextMenu.bind(this);
}

HTML5_OOP.mixClass(BContextCapture, HTML5_EventEmitter);

BContextCapture.prototype.attachTo = function (elt) {
  if (this.$root) this.$root.removeEventListener('contextmenu', this.ev_contextMenu, false);
  this.$root = elt;
  if (this.$root) this.$root.addEventListener('contextmenu', this.ev_contextMenu, false);
};

BContextCapture.prototype.auto = function () {
  HTML5_Dom.documentReady.then(function () {
    this.attachTo(document.body);
  }.bind(this));
};

BContextCapture.prototype.showContextMenu = ContextMenu.prototype.showContextMenu;
BContextCapture.prototype._fireContextMenuEvent = ContextMenu.prototype._fireContextMenuEvent;
BContextCapture.prototype._checkNeedHandle = ContextMenu.prototype._checkNeedHandle;
/***
 *
 * @param {PointerEvent} event
 */

BContextCapture.prototype.ev_contextMenu = function (event) {
  this._pointerSession++;
  this._posCurrent = new Math_Vec2(event.clientX, event.clientY);
  this.$target = event.target;

  if (this._checkNeedHandle(event.target)) {
    if (this._fireContextMenuEvent()) {
      event.preventDefault();
    }
  }
};

var instance = new BContextCapture();

if ((!Detector_BrowserDetector.isMobile || !Detector_BrowserDetector.isSafari) && Detector_BrowserDetector.os.type !== 'ios') {
  Detector_BrowserDetector.nativeContextMenuSupport = true;
  ContextMenu.auto = instance.auto.bind(instance); //override old version
} else {
  Detector_BrowserDetector.nativeContextMenuSupport = false;
}

/* harmony default export */ const js_BContextCapture = ((/* unused pure expression or super */ null && (instance)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/dev.js

























absol.VariantColors = VariantColors;
absol.parseMessage = parseMessage;
absol.vScrollIntoView = vScrollIntoView; //for export to window

absol.Tooltip = Tooltip;
absol.QuickMenu = js_QuickMenu;
absol.AComp = absol_acomp_AComp;
absol.Radio = js_Radio;
absol.EmojiChars = js_EmojiChars;
absol.EmojiAnims = js_EmojiAnims;
absol.ChromeCalendar = js_ChromeCalendar;
dom_install(absol.coreDom); //old module

absol.coreDom.install('searchcrosstextinput', Searcher);
Object.assign(absol.string, stringMatching_namespaceObject);
absol.MessageInput = js_MessageInput;
absol.EmojiPicker = js_EmojiPicker;
absol.ContextCaptor = ContextMenu;
window.AComp = absol.AComp;
absol.TextMeasure = js_TextMeasure;
HTML5_Dom.documentReady.then(function () {
  var mdiLink = absol.$('link', document.head, function (e) {
    if (e.href && e.href.toLowerCase().indexOf('materialdesignicons') >= 0) return true;
  });

  if (!mdiLink) {
    mdiLink = absol._({
      tag: 'link',
      attr: {
        rel: 'stylesheet',
        href: '//cdnjs.cloudflare.com/ajax/libs/MaterialDesign-Webfont/5.3.45/css/materialdesignicons.css'
      }
    }).addTo(document.head);
  }
});
materializeIconTrigger();
absol.MaterialDesignIconsNameMap = MaterialDesignIconsNameMap;
absol.openFileDialog = openFileDialog;
absol.CPUViewer = js_CPUViewer; // if (location.href.indexOf('localhost') >= 0 || location.href.indexOf('absol') >= 0)
//     CPUViewer.start();
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/CPCore.js


var CPCore = new HTML5_Dom({
  creator: Object.assign({}, absol_acomp_AComp.creator)
});
/* harmony default export */ const components_CPCore = (CPCore);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/colorpicker.css
var colorpicker = __webpack_require__(829);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/colorpickerbutton.css
var colorpickerbutton = __webpack_require__(1721);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/swatchestable.css
var swatchestable = __webpack_require__(3370);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/spectrumcolor.css
var spectrumcolor = __webpack_require__(501);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/solidcolorpicker.css
var solidcolorpicker = __webpack_require__(3934);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/style/index.js





;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/ColorPicker.js



var ColorPicker_ = components_CPCore._;
var ColorPicker_$ = components_CPCore.$;

function ColorPicker() {
  var res = ColorPicker_(['<div class="absol-color-picker">', '    <div class="absol-color-picker-color">', '        <div class="absol-color-picker-sat">', '            <div class="absol-color-picker-val">', '                <div class="absol-color-dragger"></div>', '            </div>', '        </div>', '    </div>', '    <div class="absol-color-picker-hue-range">', '        <div class="absol-color-picker-hue">', '            <div class="absol-color-dragger"></div>', '        </div>', '    </div>', '    <div class="absol-color-picker-alpha-range">', '        <div class="absol-color-picker-alpha">', '            <div class="absol-color-dragger"></div>', '        </div>', '    </div>', '    <div class="absol-color-picker-input">', " <div class=\"absol-color-picker-text-container\">\n            <span class=\"f-mode\">hsba(</span>\n            <span class=\"absol-editabe-text num0\">0</span><span class=\"separator0\">deg, </span>\n            <span class=\"absol-editabe-text num1\">0</span><span class=\"separator1\">%, </span>\n            <span class=\"absol-editabe-text num2\">0</span><span class=\"separator2\">%, </span>\n            <span class=\"absol-editabe-text num3\">0</span><span>)</span>\n        </div>", '    </div>', '    <button class="absol-color-picker-mode">HSB</button>', '</div>'].join(''));

  res.$fMode = ColorPicker_$('.f-mode', res);
  res.$sep0 = ColorPicker_$('.separator0', res);
  res.$sep1 = ColorPicker_$('.separator1', res);
  res.$sep2 = ColorPicker_$('.separator2', res);
  res.$num0 = ColorPicker_('editabletext.num0');
  res.$num1 = ColorPicker_('editabletext.num1');
  res.$num2 = ColorPicker_('editabletext.num2');
  res.$num3 = ColorPicker_('editabletext.num3');
  ColorPicker.defaultNumberInputHandle(res.$num0);
  ColorPicker.defaultNumberInputHandle(res.$num1);
  ColorPicker.defaultNumberInputHandle(res.$num2);
  ColorPicker.defaultNumberInputHandle(res.$num3);
  res._num0LimitOption = ColorPicker.numberInputHandleLimit(res.$num0, 0, 360);
  res._num1LimitOption = ColorPicker.numberInputHandleLimit(res.$num1, 0, 100, 0);
  res._num2LimitOption = ColorPicker.numberInputHandleLimit(res.$num2, 0, 100, 0);
  res._num3LimitOption = ColorPicker.numberInputHandleLimit(res.$num3, 0, 1, 3);
  ColorPicker_$(".absol-editabe-text.num0", res).selfReplace(res.$num0);
  ColorPicker_$(".absol-editabe-text.num1", res).selfReplace(res.$num1);
  ColorPicker_$(".absol-editabe-text.num2", res).selfReplace(res.$num2);
  ColorPicker_$(".absol-editabe-text.num3", res).selfReplace(res.$num3);
  res.$num0.text = '0';
  res.$num1.text = '0';
  res.$num2.text = '0';
  res.$num3.text = '0';
  res.switchMode = {
    RGBA: 'HSBA',
    HSBA: 'HSLA',
    HSLA: 'RGBA',
    RGB: 'HSB',
    HSB: 'HSL',
    HSL: 'RGB'
  };
  res.toggleAlpha = {
    RGBA: 'RGB',
    HSBA: 'HSB',
    HSLA: 'HSL',
    RGB: 'RGBA',
    HSB: 'HSBA',
    HSL: 'HSLA'
  };
  res.defineEvent(['change']);
  res._saturation = 0;
  res._brightness = 0;
  res._hue = 0;
  res._alpha = 1;
  res.$color = ColorPicker_$('.absol-color-picker-color', res);
  res.$colorVal = ColorPicker_$('.absol-color-picker-val', res);
  res.$draggerVal = ColorPicker_$('.absol-color-dragger', res.$colorVal);
  res.eventHandler = HTML5_OOP.bindFunctions(res, ColorPicker.eventHandler);
  res.$colorVal.on('pointerdown', res.eventHandler.colorPointerDown, true);
  res.$hue = ColorPicker_$('.absol-color-picker-hue', res);
  res.$draggerHue = ColorPicker_$('.absol-color-dragger', res.$hue);
  res.$hue.on('pointerdown', res.eventHandler.huePointerDown);
  res.$alpha = ColorPicker_$('.absol-color-picker-alpha', res);
  res.$alpha.on('pointerdown', res.eventHandler.alphaPointerDown);
  res.$draggerAlpha = ColorPicker_$('.absol-color-dragger', res.$alpha);
  res.$textContainer = ColorPicker_$('.absol-color-picker-text-container', res);
  res.$mode = ColorPicker_$('.absol-color-picker-mode', res);
  res.$mode.on('click', res.eventHandler.modeClick); //todo

  res.$num0.on('blur', res.eventHandler.inputBlur);
  res.$num1.on('blur', res.eventHandler.inputBlur);
  res.$num2.on('blur', res.eventHandler.inputBlur);
  res.$num3.on('blur', res.eventHandler.inputBlur);
  return res;
}

ColorPicker.defaultNumberInputHandle = function (element) {
  element.on('keydown', function (event) {
    if (!event.key.match(/^[0-9\.]$/) && event.key.length == 1) {
      event.preventDefault();
    }

    if (event.key == 'Tab') {
      event.preventDefault();
    }

    if (event.key == 'Enter') {
      this.edit(false);
    }

    if (event.key == '.' && this.text.indexOf('.') >= 0) {
      event.preventDefault();
    }

    if (this.text.length >= 6 && event.key.length == 1) event.preventDefault();
  }).on('click', function (event) {
    element.edit(true, true);
  }).on('keydown', function (event) {
    if (event.key == 'Tab') {
      var parent = element.parentNode;
      var firstFriend;
      var found = false;
      var nextFriend = ColorPicker_$('editabletext', parent, function (elt) {
        if (elt.getComputedStyleValue('display') == "none") return;

        if (!firstFriend) {
          firstFriend = elt;
        }

        if (elt == element) {
          found = true;
        } else if (found) {
          return true;
        }
      });
      nextFriend = nextFriend || firstFriend;

      if (nextFriend) {
        nextFriend.edit(true, true);
      }
    }
  });
};

ColorPicker.numberInputHandleLimit = function (element, min, max, fixed) {
  var option = {
    min: min,
    max: max,
    fixed: fixed || 0,
    enable: true
  };
  element.on('blur', function (event) {
    if (!option.enable) return;
    var number = parseFloat(element.text);

    if (isNaN(number)) {
      number = min;
    }

    if (option.fixed == 0) {
      number = Math.round(number);
    }

    number = Math.max(min, Math.min(option.max, number));
    element.text = number.toFixed(option.fixed) + '';
  });
  return option;
};

ColorPicker.property = {};
ColorPicker.property.withAlpha = {
  set: function set(value) {
    if (value) {
      this.addClass('with-alpha');
    } else {
      this.removeClass('with-alpha');
    }
  },
  get: function get() {
    return this.containClass('with-alpha');
  }
};
ColorPicker.property.saturation = {
  set: function set(value) {
    value = value || 0;
    value = Math.max(0, Math.min(1, value));
    this._saturation = value;
    this.$draggerVal.addStyle('left', value * 100 + '%');

    this._update();
  },
  get: function get() {
    return this._saturation;
  }
};
ColorPicker.property.brightness = {
  set: function set(value) {
    value = value || 0;
    value = Math.max(0, Math.min(1, value));
    this._brightness = value;
    this.$draggerVal.addStyle('bottom', value * 100 + '%');

    this._update();
  },
  get: function get() {
    return this._brightness;
  }
};
ColorPicker.property.mode = {
  set: function set(value) {
    value = (value + '').toUpperCase();

    if (value.indexOf('A') >= 0) {
      this.addClass('with-alpha');
    } else {
      this.removeClass('with-alpha');
      this.alpha = 1;
    }

    if (value.match(/^H/)) {
      this._num0LimitOption.max = 360;
      this._num1LimitOption.max = 100;
      this._num2LimitOption.max = 100;
    } else if (value.match(/^RGB/)) {
      this._num0LimitOption.max = 255;
      this._num1LimitOption.max = 255;
      this._num2LimitOption.max = 255;
    }

    if (value.match(/^(HSB|HSL|RGB|RGBA|HSBA|HSLA)$/)) {
      this.$mode.innerHTML = value;

      this._updateColorText();
    }
  },
  get: function get() {
    return this.$mode.innerHTML;
  }
};
ColorPicker.property.hue = {
  set: function set(value) {
    value = value || 0;
    value = Math.max(0, Math.min(1, value));
    this._hue = value;
    this.$draggerHue.addStyle('top', value * 100 + '%');

    this._update();
  },
  get: function get() {
    return this._hue;
  }
};
ColorPicker.property.alpha = {
  set: function set(value) {
    value = value || 0;
    value = Math.max(0, Math.min(1, value));
    this._alpha = value;
    this.$draggerAlpha.addStyle('top', (1 - value) * 100 + '%');

    this._update();
  },
  get: function get() {
    return this._alpha;
  }
};
ColorPicker.property.value = {
  set: function set(value) {
    if (typeof value == 'string') {
      value = Color_Color.parse(value);
    }

    if (!value || !value.toHSBA) throw new Error('Invalid color type');
    var hsba = value.toHSBA();
    this.hue = hsba[0];
    this.saturation = hsba[1];
    this.brightness = hsba[2];
    this.alpha = hsba[3];
  },
  get: function get() {
    return Color_Color.fromHSBA(this.hue, this.saturation, this.brightness, this.alpha);
  }
};
ColorPicker.property.RGBA = {
  set: function set(value) {
    var hsba = Color_Color.rgbaToHSBA(value || [0, 0, 0, 0]);
    this.hue = hsba[0];
    this.saturation = hsba[1];
    this.brightness = hsba[2];
    this.alpha = hsba[3];
  },
  get: function get() {
    var rgba = Color_Color.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]);
    return rgba;
  }
};

ColorPicker.prototype._getSVOfEvent = function (event) {
  var valBound = this.$colorVal.getBoundingClientRect();
  var dx = event.clientX - valBound.left;
  var dy = event.clientY - valBound.top;
  var s = Math.max(0, Math.min(1, dx / valBound.width));
  var b = Math.max(0, Math.min(1, 1 - dy / valBound.height));
  return {
    s: s,
    b: b
  };
};

ColorPicker.prototype._getHOfEvent = function (event) {
  var hueBound = this.$hue.getBoundingClientRect();
  var h = event.clientY - hueBound.top;
  h = h / hueBound.height;
  h = Math.max(0, Math.min(1, h));
  return h;
};

ColorPicker.prototype._getAOfEvent = function (event) {
  var alphaBound = this.$alpha.getBoundingClientRect();
  var a = alphaBound.bottom - event.clientY;
  a = a / alphaBound.height;
  a = Math.max(0, Math.min(1, a));
  return a;
};

ColorPicker.prototype._getTextColorCode = function () {
  var h = this.hue + 0.5;
  if (h > 1) h -= 1;
  var s = this.saturation > 0.5 ? 0 : 1;
  var b = this.brightness > 0.5 ? 0 : 1;
  var rgba = Color_Color.hsbaToRGBA([h, s, b, 1]);
  return 'rgba(' + rgba.map(function (x, i) {
    return i < 3 ? x * 255 : x;
  }).join(',') + ')';
};

ColorPicker.prototype.init = function (props) {
  this.RGBA = [1, 1, 1, 1];
  this["super"](props);
};

ColorPicker.prototype._update = function () {
  //update vs
  var rgba = Color_Color.hsbaToRGBA([this.hue, 1, 1, 1]);
  this.$color.addStyle('background', 'rgba(' + rgba.map(function (x, i) {
    return i < 3 ? x * 255 : x;
  }).join(',') + ')');
  rgba = Color_Color.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]);
  this.$textContainer.addStyle('background', 'rgba(' + rgba.map(function (x, i) {
    return i < 3 ? x * 255 : x;
  }).join(',') + ')');
  this.$textContainer.addStyle('color', this._getTextColorCode());

  this._updateColorText();
};

ColorPicker.prototype._updateColorText = function () {
  var hsba = [this.hue, this.saturation, this.brightness, this.alpha];
  var mode = this.mode;
  this.$fMode.innerHTML = mode.toLocaleLowerCase() + '(';

  if (mode.match(/^H/)) {
    this.$sep0.innerHTML = 'deg, ';
    this.$sep1.innerHTML = '%, ';

    if (mode.match(/A$/)) {
      this.$sep2.innerHTML = "%, ";
      this.$num3.removeStyle('display');
    } else {
      this.$sep2.innerHTML = "%";
      this.$num3.addStyle('display', 'none');
    }
  } else {
    this.$sep0.innerHTML = ', ';
    this.$sep1.innerHTML = ', ';

    if (mode.match(/A$/)) {
      this.$sep2.innerHTML = ", ";
      this.$num3.removeStyle('display');
    } else {
      this.$num3.addStyle('display', 'none');
      this.$sep2.innerHTML = "";
    }
  }

  if (mode.match(/HSB/)) {
    this.$num0.text = '' + Math.round(hsba[0] * 360);
    this.$num1.text = '' + Math.round(hsba[1] * 100);
    this.$num2.text = '' + Math.round(hsba[2] * 100);
    this.$num3.text = hsba[3].toFixed(3);
  } else {
    var cBytes = Color_Color['hsbaTo' + (mode.match(/A$/) ? mode : mode + 'A')](hsba);

    if (mode.match(/^H/)) {
      this.$num0.text = '' + Math.round(cBytes[0] * 360);
      this.$num1.text = '' + Math.round(cBytes[1] * 100);
      this.$num2.text = '' + Math.round(cBytes[2] * 100);
      this.$num3.text = hsba[3].toFixed(3);
    } else {
      this.$num0.text = '' + Math.round(cBytes[0] * 255);
      this.$num1.text = '' + Math.round(cBytes[1] * 255);
      this.$num2.text = '' + Math.round(cBytes[2] * 255);
      this.$num3.text = hsba[3].toFixed(3);
    } // var tempMode = mode.indexOf('A') < 0 ? mode + 'A' : mode;
    // var tempColor = Color['hsbaTo' + tempMode](hsba);
    // this.$textContainer.value = Color[mode.toLocaleLowerCase() + 'ToText'](tempColor);

  }
};

ColorPicker.eventHandler = {};

ColorPicker.eventHandler.colorPointerDown = function (event) {
  var newSV = this._getSVOfEvent(event);

  this.saturation = newSV.s;
  this.brightness = newSV.b;
  absol.$(document.body).on('pointermove', this.eventHandler.colorPointerMove).on('pointerup', this.eventHandler.colorPointerFinish).on('pointerleave', this.eventHandler.colorPointerFinish);
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.colorPointerFinish = function (event) {
  absol.$(document.body).off('pointermove', this.eventHandler.colorPointerMove).off('pointerup', this.eventHandler.colorPointerFinish).off('pointerleave', this.eventHandler.colorPointerFinish);
};

ColorPicker.eventHandler.colorPointerMove = function (event) {
  var newSV = this._getSVOfEvent(event);

  this.saturation = newSV.s;
  this.brightness = newSV.b;
  event.preventDefault();
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.huePointerDown = function (event) {
  var newH = this._getHOfEvent(event);

  this.hue = newH;
  event.preventDefault();
  absol.$(document.body).on('pointermove', this.eventHandler.huePointerMove).on('pointerup', this.eventHandler.huePointerFinish).on('pointerleave', this.eventHandler.huePointerFinish);
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.huePointerFinish = function (event) {
  absol.$(document.body).off('pointermove', this.eventHandler.huePointerMove).off('pointerup', this.eventHandler.huePointerFinish).off('pointerleave', this.eventHandler.huePointerFinish);
  event.preventDefault();
};

ColorPicker.eventHandler.huePointerMove = function (event) {
  var newH = this._getHOfEvent(event);

  this.hue = newH;
  event.preventDefault();
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.alphaPointerDown = function (event) {
  var newA = this._getAOfEvent(event);

  this.alpha = newA;
  absol.$(document.body).on('pointermove', this.eventHandler.alphaPointerMove).on('pointerup', this.eventHandler.alphaPointerFinish).on('pointerleave', this.eventHandler.alphaPointerFinish);
  event.preventDefault();
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.alphaPointerFinish = function (event) {
  absol.$(document.body).off('pointermove', this.eventHandler.alphaPointerMove).off('pointerup', this.eventHandler.alphaPointerFinish).off('pointerleave', this.eventHandler.alphaPointerFinish);
  event.preventDefault();
};

ColorPicker.eventHandler.alphaPointerMove = function (event) {
  var newA = this._getAOfEvent(event);

  this.alpha = newA;
  event.preventDefault();
  this.emit('change', {
    target: this,
    originEvent: event,
    value: this.value
  });
};

ColorPicker.eventHandler.modeClick = function (event) {
  this.mode = this.switchMode[this.mode];
  event.preventDefault();
};

ColorPicker.eventHandler.inputBlur = function () {
  var mode = this.mode;
  var alpha = 1;

  if (mode.match(/A$/)) {
    alpha = parseFloat(this.$num3.text);
  }

  var bytes;

  if (mode.match(/^H/)) {
    bytes = [parseFloat(this.$num0.text) / 360, parseFloat(this.$num1.text) / 100, parseFloat(this.$num2.text) / 100, alpha];
  } else if (mode.match(/^RGB/)) {
    bytes = [parseFloat(this.$num0.text) / 255, parseFloat(this.$num1.text) / 255, parseFloat(this.$num2.text) / 255, alpha];
  }

  var hsba = mode.match(/^HSB/) ? bytes : Color_Color[(mode.match(/A$/) ? mode.toLocaleLowerCase() : mode.toLocaleLowerCase() + 'a') + 'ToHSBA'](bytes);
  this.hue = hsba[0];
  this.saturation = hsba[1];
  this.brightness = hsba[2];
  this.alpha = hsba[3];
};

components_CPCore.creator.colorpicker = ColorPicker;
/* harmony default export */ const components_ColorPicker = (ColorPicker);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/ColorPickerButton.js




var ColorPickerButton_ = components_CPCore._;
var ColorPickerButton_$ = components_CPCore.$;
var ColorPickerButton_isMobile = Detector_BrowserDetector.isMobile;

function ColorPickerButton() {
  this.$innerValue = ColorPickerButton_$('.as-color-picker-button-inner-value', this);
  this.prepare();
  this.on('click', this.eventHandler.click);
}

ColorPickerButton.tag = 'ColorPickerButton'.toLowerCase();

ColorPickerButton.prototype._isClickMenu = function (event) {
  var c = event.target;

  while (c) {
    if (c.classList.contains('as-solid-color-picker-swatches-name-menu')) return true;
    c = c.parentElement;
  }

  return false;
};

ColorPickerButton.eventHandler = {};

ColorPickerButton.eventHandler.click = function (event) {
  this.togglePicker();
};

ColorPickerButton.eventHandler.changeColor = function (event) {
  this.$innerValue.addStyle("background-color", event.value.toString());
  this._value = event.value;
  this.emit('change', event, this);
};

ColorPickerButton.eventHandler.clickBody = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event) || HTML5_EventEmitter.hitElement(this.$ColorPicker, event) || this._isClickMenu(event)) return;
  this.closePicker();
};

ColorPickerButton.eventHandler.submit = function (event) {
  this.closePicker();
};

ColorPickerButton.prototype.togglePicker = function () {
  if (this.containsClass('as-color-picker-selecting')) {
    this.closePicker();
  } else {
    this.openPicker();
  }
};

ColorPickerButton.prototype.openPicker = function () {
  if (this.containsClass('as-color-picker-selecting')) return;

  if (ColorPickerButton.lastOpen) {
    ColorPickerButton.lastOpen.closePicker();
  }

  ColorPickerButton.lastOpen = this;
  var thisBt = this;
  this.addClass('as-color-picker-selecting');
  this.$ColorPicker.on('change', this.eventHandler.changeColor).on('submit', this.eventHandler.submit);
  this.$ColorPicker.reloadSetting();
  this.$follower.addStyle('visibility', 'hidden');
  this.$follower.addTo(document.body);
  this.$follower.followTarget = this;
  setTimeout(function () {
    document.addEventListener('click', this.eventHandler.clickBody);
  }.bind(this), 100);
  this._lastValue = this.value;
  ColorPickerButton.$ColorPicker.value = this.value;
  setTimeout(function () {
    thisBt.$follower.removeStyle('visibility');
  }, 1); //10p
};

ColorPickerButton.prototype.closePicker = function () {
  if (!this.containsClass('as-color-picker-selecting')) return;
  this.removeClass('as-color-picker-selecting');

  if (ColorPickerButton.lastOpen === this) {
    ColorPickerButton.lastOpen = null;
    this.$follower.remove();
  }

  this.$ColorPicker.off('change', this.eventHandler.changeColor).off('submit', this.eventHandler.submit);
  document.removeEventListener('click', this.eventHandler.clickBody);

  if (this.value !== this._lastValue) {
    this.emit('stopchange', {
      target: this,
      value: this.value
    }, this);
  }
};

ColorPickerButton.prototype.prepare = function () {
  if (!ColorPickerButton.$ColorPicker) {
    if (ColorPickerButton_isMobile) {
      ColorPickerButton.$follower = ColorPickerButton_('modal').on('click', function (event) {
        if (event.tagert === this) {
          if (ColorPickerButton.lastOpen) ColorPickerButton.lastOpen.closePicker();
        }
      });
    } else {
      ColorPickerButton.$follower = ColorPickerButton_('follower.as-color-picker-button-follower');
    }

    ColorPickerButton.$ColorPicker = ColorPickerButton_({
      tag: 'solidcolorpicker'
    }).addTo(ColorPickerButton.$follower);
    ColorPickerButton.lastOpen = null;
  }

  this.$follower = ColorPickerButton.$follower;
  this.$ColorPicker = ColorPickerButton.$ColorPicker;
};

ColorPickerButton.render = function () {
  return ColorPickerButton_({
    tag: 'button',
    extendEvent: ['change', 'stopchange'],
    "class": 'as-color-picker-button',
    child: [{
      tag: "div",
      "class": "as-color-picker-button-inner",
      child: '.as-color-picker-button-inner-value'
    }]
  });
};

ColorPickerButton.property = {};
ColorPickerButton.property.value = {
  set: function set(value) {
    this._value = value;

    if (this._value) {
      this.$innerValue.addStyle("background-color", value);
    } else {}
  },
  get: function get() {
    return this._value;
  }
};
components_CPCore.install('colorpickerbutton', ColorPickerButton);
/* harmony default export */ const components_ColorPickerButton = (ColorPickerButton);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/index.js




var absol_colorpicker_ColorPicker = {
  core: components_CPCore,
  _: components_CPCore._,
  $: components_CPCore.$,
  creator: components_CPCore.creator,
  Color: Color_Color
};
/* harmony default export */ const absol_colorpicker = ((/* unused pure expression or super */ null && (absol_colorpicker_ColorPicker)));
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/SwatchesTable.js
function SwatchesTable_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SwatchesTable_typeof = function _typeof(obj) { return typeof obj; }; } else { SwatchesTable_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SwatchesTable_typeof(obj); }



var SwatchesTable_ = components_CPCore._;
var SwatchesTable_$ = components_CPCore.$;

function SwatchesTable() {
  this._data = [];
  this._poolCells = [];
  this._poolRows = [];
  this._dict = {};
}

SwatchesTable.tag = 'SwatchesTable'.toLowerCase();

SwatchesTable.render = function () {
  return SwatchesTable_({
    extendEvent: 'presscell',
    "class": 'as-swatches-table'
  });
};

SwatchesTable.prototype.getCell = function () {
  if (arguments.length == 1) {
    var key = arguments[0];

    if (key.toHex8) {
      key = key.toHex8();
    } else if (typeof key == 'string') {
      key = Color_Color.parse(key);
      if (key) key = key.toHex8();
    }

    key = key + '';
    return this._dict[key];
  } else if (arguments.length == 2) {
    return this.childNodes[arguments[0]] && this.childNodes[arguments[0]].childNodes[arguments[1]];
  }
};

SwatchesTable.eventHandler = {};

SwatchesTable.eventHandler.clickCell = function (cell, event) {
  this.emit('presscell', {
    target: this,
    cellElt: cell,
    value: cell.__swatchescell_value,
    rowIdx: cell.__swatchescell_row_idx,
    colIdx: cell.__swatchescell_col_idx
  });
};

SwatchesTable.property = {};
SwatchesTable.property.data = {
  set: function set(value) {
    this._dict = {};
    value = value || [[null]];

    if (typeof value == 'string') {
      value = {
        classic: MoqupsClassicSwathes,
        material: MaterialSwatches,
        bootstrap: BootstrapSwatches,
        ios: iOsSwatches,
        moqupsclassic: MoqupsClassicSwathes
      }[value] || [[null]];
    }

    this._data = value;
    var child;

    while (this.childNodes.length > value.length) {
      child = this.firstChild;

      this._poolRows.push(child);

      this.removeChild(child);
    }

    while (this.childNodes.length < value.length) {
      if (this._poolRows.length > 0) child = this._poolRows.pop();else child = SwatchesTable_('.as-swatches-table-row');
      this.addChild(child);
    }

    var rowElt;
    var row;

    for (var i = 0; i < value.length; ++i) {
      rowElt = this.childNodes[i];
      row = value[i];

      while (rowElt.childNodes.length > row.length) {
        child = rowElt.firstChild;

        this._poolCells.push(child);

        rowElt.removeChild(child);
      }

      while (rowElt.childNodes.length < row.length) {
        if (this._poolCells.length > 0) child = this._poolCells.pop();else {
          child = SwatchesTable_({
            "class": 'as-swatches-table-cell',
            child: '.as-swatches-table-cell-color'
          });
          child.on('click', this.eventHandler.clickCell.bind(this, child));
        }
        rowElt.addChild(child);
      }

      for (var j = 0; j < row.length; ++j) {
        rowElt.childNodes[j].__swatchescell_row_idx = i;
        rowElt.childNodes[j].__swatchescell_col_idx = j;

        if (!row[j]) {
          rowElt.childNodes[j].attr('title', null);
          rowElt.childNodes[j].firstChild.removeStyle('background-color');
          rowElt.childNodes[j].__swatchescell_value = row[j];
          this._dict['null'] = rowElt.childNodes[j];
        } else if (row[j].toHex8) {
          rowElt.childNodes[j].firstChild.addStyle('background-color', row[j].toString());
          rowElt.childNodes[j].attr('title', null);
          rowElt.childNodes[j].__swatchescell_value = row[j];
          this._dict[row[j].toHex8()] = rowElt.childNodes[j];
        } else if (SwatchesTable_typeof(row[j]) == 'object') {
          if (row[j].value) {
            rowElt.childNodes[j].firstChild.addStyle('background-color', row[j].value);
            rowElt.childNodes[j].__swatchescell_value = row[j].value;
            this._dict[Color_Color.parse(row[j].value + '').toHex8()] = rowElt.childNodes[j];
          } else {
            rowElt.childNodes[j].firstChild.removeStyle('background-color');
            this._dict[Color_Color.parse('transparent').toHex8()] = rowElt.childNodes[j];
          }

          rowElt.childNodes[j].attr('title', row[j].name || null);
        } else if (typeof row[j] == 'string') {
          rowElt.childNodes[j].firstChild.addStyle('background-color', row[j]);
          rowElt.childNodes[j].attr('title', null);
          rowElt.childNodes[j].__swatchescell_value = row[j];
          this._dict[Color_Color.parse(row[j]).toHex8()] = rowElt.childNodes[j];
        }
      }
    }
  },
  get: function get() {
    return this._data;
  }
};
var MoqupsClassicSwathes = [[{
  "name": "White",
  "value": "#ffffff"
}, {
  "name": "± Wild Sand",
  "value": "#f7f6f6"
}, {
  "name": "± Gallery",
  "value": "#ebebeb"
}, {
  "name": "± Alto",
  "value": "#d6d6d6"
}, {
  "name": "Silver",
  "value": "#c0c0c0"
}, {
  "name": "± Silver Chalice",
  "value": "#aaaaaa"
}, {
  "name": "± Gray",
  "value": "#929292"
}, {
  "name": "Boulder",
  "value": "#7a7a7a"
}, {
  "name": "± Scorpion",
  "value": "#606060"
}, {
  "name": "± Tundora",
  "value": "#444444"
}, {
  "name": "± Mine Shaft",
  "value": "#232323"
}, {
  "name": "Black",
  "value": "#000000"
}], [{
  "name": "± Prussian Blue",
  "value": "#003748"
}, {
  "name": "± Green Vogue",
  "value": "#021f54"
}, {
  "name": "± Black Rock",
  "value": "#120639"
}, {
  "name": "± Violet",
  "value": "#2f073b"
}, {
  "name": "± Bulgarian Rose",
  "value": "#3d051b"
}, {
  "name": "± Lonestar",
  "value": "#5e0202"
}, {
  "name": "± Brown Bramble",
  "value": "#5b1a04"
}, {
  "name": "± Cioccolato",
  "value": "#58330a"
}, {
  "name": "± Bronze Olive",
  "value": "#553d0d"
}, {
  "name": "± Himalaya",
  "value": "#656119"
}, {
  "name": "± West Coast",
  "value": "#4e5516"
}, {
  "name": "± Seaweed",
  "value": "#243e16"
}], [{
  "name": "± Astronaut Blue",
  "value": "#004e63"
}, {
  "name": "± Catalina Blue",
  "value": "#033076"
}, {
  "name": "± Violet",
  "value": "#1c0c4f"
}, {
  "name": "± Jagger",
  "value": "#460e56"
}, {
  "name": "± Maroon Oak",
  "value": "#570e28"
}, {
  "name": "± Dark Burgundy",
  "value": "#840705"
}, {
  "name": "± Kenyan Copper",
  "value": "#7d2709"
}, {
  "name": "± Raw Umber",
  "value": "#7b4812"
}, {
  "name": "± Raw Umber",
  "value": "#785616"
}, {
  "name": "± Wasabi",
  "value": "#8c8525"
}, {
  "name": "± Fern Frond",
  "value": "#6e7623"
}, {
  "name": "± Woodland",
  "value": "#355723"
}], [{
  "name": "± Blue Lagoon",
  "value": "#006e8c"
}, {
  "name": "± Cobalt",
  "value": "#0844a4"
}, {
  "name": "± Persian Indigo",
  "value": "#2e1572"
}, {
  "name": "± Honey Flower",
  "value": "#631878"
}, {
  "name": "± Claret",
  "value": "#7a163c"
}, {
  "name": "± Milano Red",
  "value": "#b70f0a"
}, {
  "name": "± Rust",
  "value": "#af3a11"
}, {
  "name": "± Desert",
  "value": "#aa671d"
}, {
  "name": "± Reef Gold",
  "value": "#a77a23"
}, {
  "name": "± Earls Green",
  "value": "#c3bb38"
}, {
  "name": "± Sushi",
  "value": "#99a534"
}, {
  "name": "± Fern Green",
  "value": "#4c7a34"
}], [{
  "name": "± Bondi Blue",
  "value": "#008db1"
}, {
  "name": "± Denim",
  "value": "#0c59cf"
}, {
  "name": "± Daisy Bush",
  "value": "#3b1d8f"
}, {
  "name": "± Seance",
  "value": "#7e2199"
}, {
  "name": "± Disco",
  "value": "#9c1f4d"
}, {
  "name": "± Crimson",
  "value": "#e61610"
}, {
  "name": "± Orange Roughy",
  "value": "#dc4c18"
}, {
  "name": "± Brandy Punch",
  "value": "#d68227"
}, {
  "name": "± Hokey Pokey",
  "value": "#d39c2f"
}, {
  "name": "± Starship",
  "value": "#f4eb49"
}, {
  "name": "± Turmeric",
  "value": "#c1d045"
}, {
  "name": "± Apple",
  "value": "#629c44"
}], [{
  "name": "± Cerulean",
  "value": "#00a4d3"
}, {
  "name": "± Blue Ribbon",
  "value": "#1464f6"
}, {
  "name": "± Daisy Bush",
  "value": "#5125ad"
}, {
  "name": "± Purple Heart",
  "value": "#9c29b7"
}, {
  "name": "± Maroon Flush",
  "value": "#bb285c"
}, {
  "name": "± Red Orange",
  "value": "#ff3823"
}, {
  "name": "± Orange",
  "value": "#ff6624"
}, {
  "name": "± Sunshade",
  "value": "#ffa834"
}, {
  "name": "± Bright Sun",
  "value": "#fec63d"
}, {
  "name": "± Laser Lemon",
  "value": "#fefb64"
}, {
  "name": "± Confetti",
  "value": "#d7eb5a"
}, {
  "name": "± Mantis",
  "value": "#72bb53"
}], [{
  "name": "± Bright Turquoise",
  "value": "#00c8f8"
}, {
  "name": "± Dodger Blue",
  "value": "#3d8af7"
}, {
  "name": "± Purple Heart",
  "value": "#6334e3"
}, {
  "name": "± Electric Violet",
  "value": "#c238eb"
}, {
  "name": "± Cerise Red",
  "value": "#e93578"
}, {
  "name": "± Persimmon",
  "value": "#ff5d55"
}, {
  "name": "± Coral",
  "value": "#ff8351"
}, {
  "name": "± Texas Rose",
  "value": "#ffb253"
}, {
  "name": "± Golden Tainoi",
  "value": "#ffc957"
}, {
  "name": "± Dolly",
  "value": "#fef67f"
}, {
  "name": "± Manz",
  "value": "#e2ee79"
}, {
  "name": "± Feijoa",
  "value": "#92d36e"
}], [{
  "name": "± Malibu",
  "value": "#4dd7fa"
}, {
  "name": "± Malibu",
  "value": "#75a9f9"
}, {
  "name": "± Cornflower Blue",
  "value": "#8b51f5"
}, {
  "name": "± Heliotrope",
  "value": "#d757f6"
}, {
  "name": "± Froly",
  "value": "#f06e9c"
}, {
  "name": "± Vivid Tangerine",
  "value": "#ff8a84"
}, {
  "name": "± Hit Pink",
  "value": "#ffa382"
}, {
  "name": "± Macaroni and Cheese",
  "value": "#ffc581"
}, {
  "name": "± Grandis",
  "value": "#ffd783"
}, {
  "name": "± Picasso",
  "value": "#fef8a0"
}, {
  "name": "± Khaki",
  "value": "#e9f29b"
}, {
  "name": "± Feijoa",
  "value": "#aedd94"
}], [{
  "name": "± Anakiwa",
  "value": "#91e4fb"
}, {
  "name": "± Sail",
  "value": "#a8c6fa"
}, {
  "name": "± Perfume",
  "value": "#b38df7"
}, {
  "name": "± Heliotrope",
  "value": "#e692f8"
}, {
  "name": "± Illusion",
  "value": "#f6a2bf"
}, {
  "name": "± Sundown",
  "value": "#ffb4b0"
}, {
  "name": "± Wax Flower",
  "value": "#ffc3ae"
}, {
  "name": "± Caramel",
  "value": "#ffd8ad"
}, {
  "name": "± Navajo White",
  "value": "#ffe3ae"
}, {
  "name": "± Pale Prim",
  "value": "#fefac0"
}, {
  "name": "± Corn Field",
  "value": "#f1f6be"
}, {
  "name": "± Tea Green",
  "value": "#cbe8ba"
}], [{
  "name": "± French Pass",
  "value": "#c9f1fd"
}, {
  "name": "± Hawkes Blue",
  "value": "#d4e3fc"
}, {
  "name": "± Perfume",
  "value": "#dacafb"
}, {
  "name": "± Perfume",
  "value": "#f2c9fb"
}, {
  "name": "± Chantilly",
  "value": "#fad2e0"
}, {
  "name": "± Cosmos",
  "value": "#ffdad8"
}, {
  "name": "± Peach Schnapps",
  "value": "#ffe2d8"
}, {
  "name": "± Derby",
  "value": "#ffecd7"
}, {
  "name": "± Pink Lady",
  "value": "#fff1d7"
}, {
  "name": "± Off Yellow",
  "value": "#fefce0"
}, {
  "name": "± Citrine White",
  "value": "#f7fade"
}, {
  "name": "± Zanah",
  "value": "#dfedd6"
}]];
var MaterialSwatches = [[{
  "name": "Red 50",
  "value": "#ffebee"
}, {
  "name": "Red 100",
  "value": "#ffcdd2"
}, {
  "name": "Red 200",
  "value": "#ef9a9a"
}, {
  "name": "Red 300",
  "value": "#e57373"
}, {
  "name": "Red 400",
  "value": "#ef5350"
}, {
  "name": "Red 500",
  "value": "#f44336"
}, {
  "name": "Red 600",
  "value": "#e53935"
}, {
  "name": "Red 700",
  "value": "#d32f2f"
}, {
  "name": "Red 800",
  "value": "#c62828"
}, {
  "name": "Red 900",
  "value": "#b71c1c"
}], [{
  "name": "Pink 50",
  "value": "#fce4ec"
}, {
  "name": "Pink 100",
  "value": "#f8bbd0"
}, {
  "name": "Pink 200",
  "value": "#f48fb1"
}, {
  "name": "Pink 300",
  "value": "#f06292"
}, {
  "name": "Pink 400",
  "value": "#ec407a"
}, {
  "name": "Pink 500",
  "value": "#e91e63"
}, {
  "name": "Pink 600",
  "value": "#d81b60"
}, {
  "name": "Pink 700",
  "value": "#c2185b"
}, {
  "name": "Pink 800",
  "value": "#ad1457"
}, {
  "name": "Pink 900",
  "value": "#880e4f"
}], [{
  "name": "Purple 50",
  "value": "#f3e5f5"
}, {
  "name": "Purple 100",
  "value": "#e1bee7"
}, {
  "name": "Purple 200",
  "value": "#ce93d8"
}, {
  "name": "Purple 300",
  "value": "#ba68c8"
}, {
  "name": "Purple 400",
  "value": "#ab47bc"
}, {
  "name": "Purple 500",
  "value": "#9c27b0"
}, {
  "name": "Purple 600",
  "value": "#8e24aa"
}, {
  "name": "Purple 700",
  "value": "#7b1fa2"
}, {
  "name": "Purple 800",
  "value": "#6a1b9a"
}, {
  "name": "Purple 900",
  "value": "#4a148c"
}], [{
  "name": "Deep Purple 50",
  "value": "#ede7f6"
}, {
  "name": "Deep Purple 100",
  "value": "#d1c4e9"
}, {
  "name": "Deep Purple 200",
  "value": "#b39ddb"
}, {
  "name": "Deep Purple 300",
  "value": "#9575cd"
}, {
  "name": "Deep Purple 400",
  "value": "#7e57c2"
}, {
  "name": "Deep Purple 500",
  "value": "#673ab7"
}, {
  "name": "Deep Purple 600",
  "value": "#5e35b1"
}, {
  "name": "Deep Purple 700",
  "value": "#512da8"
}, {
  "name": "Deep Purple 800",
  "value": "#4527a0"
}, {
  "name": "Deep Purple 900",
  "value": "#311b92"
}], [{
  "name": "Indigo 50",
  "value": "#e8eaf6"
}, {
  "name": "Indigo 100",
  "value": "#c5cae9"
}, {
  "name": "Indigo 200",
  "value": "#9fa8da"
}, {
  "name": "Indigo 300",
  "value": "#7986cb"
}, {
  "name": "Indigo 400",
  "value": "#5c6bc0"
}, {
  "name": "Indigo 500",
  "value": "#3f51b5"
}, {
  "name": "Indigo 600",
  "value": "#3949ab"
}, {
  "name": "Indigo 700",
  "value": "#303f9f"
}, {
  "name": "Indigo 800",
  "value": "#283593"
}, {
  "name": "Indigo 900",
  "value": "#1a237e"
}], [{
  "name": "Blue 50",
  "value": "#e3f2fd"
}, {
  "name": "Blue 100",
  "value": "#bbdefb"
}, {
  "name": "Blue 200",
  "value": "#90caf9"
}, {
  "name": "Blue 300",
  "value": "#64b5f6"
}, {
  "name": "Blue 400",
  "value": "#42a5f5"
}, {
  "name": "Blue 500",
  "value": "#2196f3"
}, {
  "name": "Blue 600",
  "value": "#1e88e5"
}, {
  "name": "Blue 700",
  "value": "#1976d2"
}, {
  "name": "Blue 800",
  "value": "#1565c0"
}, {
  "name": "Blue 900",
  "value": "#0d47a1"
}], [{
  "name": "Light Blue 50",
  "value": "#e1f5fe"
}, {
  "name": "Light Blue 100",
  "value": "#b3e5fc"
}, {
  "name": "Light Blue 200",
  "value": "#81d4fa"
}, {
  "name": "Light Blue 300",
  "value": "#4fc3f7"
}, {
  "name": "Light Blue 400",
  "value": "#29b6f6"
}, {
  "name": "Light Blue 500",
  "value": "#03a9f4"
}, {
  "name": "Light Blue 600",
  "value": "#039be5"
}, {
  "name": "Light Blue 700",
  "value": "#0288d1"
}, {
  "name": "Light Blue 800",
  "value": "#0277bd"
}, {
  "name": "Light Blue 900",
  "value": "#01579b"
}], [{
  "name": "Cyan 50",
  "value": "#e0f7fa"
}, {
  "name": "Cyan 100",
  "value": "#b2ebf2"
}, {
  "name": "Cyan 200",
  "value": "#80deea"
}, {
  "name": "Cyan 300",
  "value": "#4dd0e1"
}, {
  "name": "Cyan 400",
  "value": "#26c6da"
}, {
  "name": "Cyan 500",
  "value": "#00bcd4"
}, {
  "name": "Cyan 600",
  "value": "#00acc1"
}, {
  "name": "Cyan 700",
  "value": "#0097a7"
}, {
  "name": "Cyan 800",
  "value": "#00838f"
}, {
  "name": "Cyan 900",
  "value": "#006064"
}], [{
  "name": "Teal 50",
  "value": "#e0f2f1"
}, {
  "name": "Teal 100",
  "value": "#b2dfdb"
}, {
  "name": "Teal 200",
  "value": "#80cbc4"
}, {
  "name": "Teal 300",
  "value": "#4db6ac"
}, {
  "name": "Teal 400",
  "value": "#26a69a"
}, {
  "name": "Teal 500",
  "value": "#009688"
}, {
  "name": "Teal 600",
  "value": "#00897b"
}, {
  "name": "Teal 700",
  "value": "#00796b"
}, {
  "name": "Teal 800",
  "value": "#00695c"
}, {
  "name": "Teal 900",
  "value": "#004d40"
}], [{
  "name": "Green 50",
  "value": "#e8f5e9"
}, {
  "name": "Green 100",
  "value": "#c8e6c9"
}, {
  "name": "Green 200",
  "value": "#a5d6a7"
}, {
  "name": "Green 300",
  "value": "#81c784"
}, {
  "name": "Green 400",
  "value": "#66bb6a"
}, {
  "name": "Green 500",
  "value": "#4caf50"
}, {
  "name": "Green 600",
  "value": "#43a047"
}, {
  "name": "Green 700",
  "value": "#388e3c"
}, {
  "name": "Green 800",
  "value": "#2e7d32"
}, {
  "name": "Green 900",
  "value": "#1b5e20"
}], [{
  "name": "Light Green 50",
  "value": "#f1f8e9"
}, {
  "name": "Light Green 100",
  "value": "#dcedc8"
}, {
  "name": "Light Green 200",
  "value": "#c5e1a5"
}, {
  "name": "Light Green 300",
  "value": "#aed581"
}, {
  "name": "Light Green 400",
  "value": "#9ccc65"
}, {
  "name": "Light Green 500",
  "value": "#8bc34a"
}, {
  "name": "Light Green 600",
  "value": "#7cb342"
}, {
  "name": "Light Green 700",
  "value": "#689f38"
}, {
  "name": "Light Green 800",
  "value": "#558b2f"
}, {
  "name": "Light Green 900",
  "value": "#33691e"
}], [{
  "name": "Lime 50",
  "value": "#f9fbe7"
}, {
  "name": "Lime 100",
  "value": "#f0f4c3"
}, {
  "name": "Lime 200",
  "value": "#e6ee9c"
}, {
  "name": "Lime 300",
  "value": "#dce775"
}, {
  "name": "Lime 400",
  "value": "#d4e157"
}, {
  "name": "Lime 500",
  "value": "#cddc39"
}, {
  "name": "Lime 600",
  "value": "#c0ca33"
}, {
  "name": "Lime 700",
  "value": "#afb42b"
}, {
  "name": "Lime 800",
  "value": "#9e9d24"
}, {
  "name": "Lime 900",
  "value": "#827717"
}], [{
  "name": "Yellow 50",
  "value": "#fffde7"
}, {
  "name": "Yellow 100",
  "value": "#fff9c4"
}, {
  "name": "Yellow 200",
  "value": "#fff59d"
}, {
  "name": "Yellow 300",
  "value": "#fff176"
}, {
  "name": "Yellow 400",
  "value": "#ffee58"
}, {
  "name": "Yellow 500",
  "value": "#ffeb3b"
}, {
  "name": "Yellow 600",
  "value": "#fdd835"
}, {
  "name": "Yellow 700",
  "value": "#fbc02d"
}, {
  "name": "Yellow 800",
  "value": "#f9a825"
}, {
  "name": "Yellow 900",
  "value": "#f57f17"
}], [{
  "name": "Amber 50",
  "value": "#fff8e1"
}, {
  "name": "Amber 100",
  "value": "#ffecb3"
}, {
  "name": "Amber 200",
  "value": "#ffe082"
}, {
  "name": "Amber 300",
  "value": "#ffd54f"
}, {
  "name": "Amber 400",
  "value": "#ffca28"
}, {
  "name": "Amber 500",
  "value": "#ffc107"
}, {
  "name": "Amber 600",
  "value": "#ffb300"
}, {
  "name": "Amber 700",
  "value": "#ffa000"
}, {
  "name": "Amber 800",
  "value": "#ff8f00"
}, {
  "name": "Amber 900",
  "value": "#ff6f00"
}], [{
  "name": "Orange 50",
  "value": "#fff3e0"
}, {
  "name": "Orange 100",
  "value": "#ffe0b2"
}, {
  "name": "Orange 200",
  "value": "#ffcc80"
}, {
  "name": "Orange 300",
  "value": "#ffb74d"
}, {
  "name": "Orange 400",
  "value": "#ffa726"
}, {
  "name": "Orange 500",
  "value": "#ff9800"
}, {
  "name": "Orange 600",
  "value": "#fb8c00"
}, {
  "name": "Orange 700",
  "value": "#f57c00"
}, {
  "name": "Orange 800",
  "value": "#ef6c00"
}, {
  "name": "Orange 900",
  "value": "#e65100"
}], [{
  "name": "Deep Orange 50",
  "value": "#fbe9e7"
}, {
  "name": "Deep Orange 100",
  "value": "#ffccbc"
}, {
  "name": "Deep Orange 200",
  "value": "#ffab91"
}, {
  "name": "Deep Orange 300",
  "value": "#ff8a65"
}, {
  "name": "Deep Orange 400",
  "value": "#ff7043"
}, {
  "name": "Deep Orange 500",
  "value": "#ff5722"
}, {
  "name": "Deep Orange 600",
  "value": "#f4511e"
}, {
  "name": "Deep Orange 700",
  "value": "#e64a19"
}, {
  "name": "Deep Orange 800",
  "value": "#d84315"
}, {
  "name": "Deep Orange 900",
  "value": "#bf360c"
}], [{
  "name": "Brown 50",
  "value": "#efebe9"
}, {
  "name": "Brown 100",
  "value": "#d7ccc8"
}, {
  "name": "Brown 200",
  "value": "#bcaaa4"
}, {
  "name": "Brown 300",
  "value": "#a1887f"
}, {
  "name": "Brown 400",
  "value": "#8d6e63"
}, {
  "name": "Brown 500",
  "value": "#795548"
}, {
  "name": "Brown 600",
  "value": "#6d4c41"
}, {
  "name": "Brown 700",
  "value": "#5d4037"
}, {
  "name": "Brown 800",
  "value": "#4e342e"
}, {
  "name": "Brown 900",
  "value": "#3e2723"
}], [{
  "name": "Grey 50",
  "value": "#fafafa"
}, {
  "name": "Grey 100",
  "value": "#f5f5f5"
}, {
  "name": "Grey 200",
  "value": "#eeeeee"
}, {
  "name": "Grey 300",
  "value": "#e0e0e0"
}, {
  "name": "Grey 400",
  "value": "#bdbdbd"
}, {
  "name": "Grey 500",
  "value": "#9e9e9e"
}, {
  "name": "Grey 600",
  "value": "#757575"
}, {
  "name": "Grey 700",
  "value": "#616161"
}, {
  "name": "Grey 800",
  "value": "#424242"
}, {
  "name": "Grey 900",
  "value": "#212121"
}], [{
  "name": "Blue Grey 50",
  "value": "#eceff1"
}, {
  "name": "Blue Grey 100",
  "value": "#cfd8dc"
}, {
  "name": "Blue Grey 200",
  "value": "#b0bec5"
}, {
  "name": "Blue Grey 300",
  "value": "#90a4ae"
}, {
  "name": "Blue Grey 400",
  "value": "#78909c"
}, {
  "name": "Blue Grey 500",
  "value": "#607d8b"
}, {
  "name": "Blue Grey 600",
  "value": "#546e7a"
}, {
  "name": "Blue Grey 700",
  "value": "#455a64"
}, {
  "name": "Blue Grey 800",
  "value": "#37474f"
}, {
  "name": "Blue Grey 900",
  "value": "#263238"
}], [{
  "name": "Black",
  "value": "#000000"
}, {
  "name": "White",
  "value": "#ffffff"
}]];
var BootstrapSwatches = [[{
  "name": "Gray Light",
  "value": "#777777"
}, {
  "name": "Base",
  "value": "#000000"
}, {
  "name": "Highlight Blue",
  "value": "#0055cc"
}, {
  "name": "Dark Blue",
  "value": "#005580"
}, {
  "name": "Success Text Green",
  "value": "#468847"
}, {
  "name": "Orange",
  "value": "#f89406"
}, {
  "name": "Red",
  "value": "#9d261d"
}, {
  "name": "Purple",
  "value": "#7a43b6"
}], [{
  "name": "Border Gray",
  "value": "#cccccc"
}, {
  "name": "Gray Darker",
  "value": "#222222"
}, {
  "name": "Primary Blue",
  "value": "#337ab7"
}, {
  "name": "Info Blue",
  "value": "#2f96b4"
}, {
  "name": "Green",
  "value": "#46a546"
}, {
  "name": "Light Orange",
  "value": "#fbb450"
}, {
  "name": "Danger Button Red",
  "value": "#bd362f"
}, {
  "name": "Pink",
  "value": "#c3325f"
}], [{
  "name": "Gray Lighter",
  "value": "#eeeeee"
}, {
  "name": "Gray Dark",
  "value": "#333333"
}, {
  "name": "Link Blue",
  "value": "#0088cc"
}, {
  "name": "Info Light Blue",
  "value": "#5bc0de"
}, {
  "name": "Success Button Green",
  "value": "#62c462"
}, {
  "name": "Yellow",
  "value": "#ffc40d"
}, {
  "name": "Error Text Red",
  "value": "#b94a48"
}, {
  "name": "Danger Highlight Red",
  "value": "#ee5f5b"
}], [{
  "name": "White",
  "value": "#ffffff"
}, {
  "name": "Gray",
  "value": "#555555"
}, {
  "name": "Accent Blue",
  "value": "#049cdb"
}, {
  "name": "Info Lighter Blue",
  "value": "#d9edf7"
}, {
  "name": "Success Background Green",
  "value": "#dff0d8"
}, {
  "name": "Warning Background Brown",
  "value": "#f3edd2"
}, {
  "name": "Warning Text Brown",
  "value": "#c09853"
}, {
  "name": "Danger Background Red",
  "value": "#f2dede"
}]];
var iOsSwatches = [[{
  "name": "Red",
  "value": "#ff3b30"
}, {
  "name": "Orange",
  "value": "#ff9500"
}, {
  "name": "Yellow",
  "value": "#ffcc00"
}, {
  "name": "Green",
  "value": "#4cd964"
}, {
  "name": "Teal Blue",
  "value": "#5ac8fa"
}, {
  "name": "Blue",
  "value": "#007aff"
}, {
  "name": "Purple",
  "value": "#5856d6"
}, {
  "name": "Pink",
  "value": "#ff2d55"
}], [{
  "name": "White",
  "value": "#ffffff"
}, {
  "name": "Custom Gray",
  "value": "#efeff4"
}, {
  "name": "Light Gray",
  "value": "#e5e5ea"
}, {
  "name": "Light Gray 2",
  "value": "#d1d1d6"
}, {
  "name": "Mid Gray",
  "value": "#c7c7cc"
}, {
  "name": "Gray",
  "value": "#8e8e93"
}, {
  "name": "Black",
  "value": "#000000"
}]];
components_CPCore.install('swatchestable', SwatchesTable);
/* harmony default export */ const components_SwatchesTable = ((/* unused pure expression or super */ null && (SwatchesTable)));
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/SpectrumColor.js

var SpectrumColor_ = components_CPCore._;
var SpectrumColor_$ = components_CPCore.$;

function SpectrumColor() {}

SpectrumColor.tag = 'SpectrumColor'.toLowerCase();

SpectrumColor.render = function () {
  return SpectrumColor_({
    "class": 'as-spectrum-color',
    child: {
      "class": 'as-spectrum-color-sat',
      child: '.as-spectrum-color-val'
    }
  });
};

components_CPCore.install('spectrumcolor', SpectrumColor);
/* harmony default export */ const components_SpectrumColor = ((/* unused pure expression or super */ null && (SpectrumColor)));
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/SolidColorPicker.js




var SolidColorPicker_ = components_CPCore._;
var SolidColorPicker_$ = components_CPCore.$;

function SolidColorPicker() {
  this.on('keydown', this.eventHandler.keydown);
  this.$swatchesName = SolidColorPicker_$('.as-solid-color-picker-swatches-name', this);
  var thisSP = this;
  this._lastEmitHex8 = '';
  this._rgb = 'ff0000';
  this._opatictyPercent = 100;
  this._value = new Color_Color([1, 0, 0, 1]);
  this._hue = 0;
  this._sat = 1;
  this._brightness = 1;
  this._swatchesNames = ['Moqups Classic', 'Material Design', 'Bootstrap', 'iOS'];
  this._swatchesShortName = ['moqups', 'material', 'bootstrap', 'ios'];
  this._swatchesIcons = ['span.mdi.mdi-palette', 'span.mdi.mdi-material-design', 'span.mdi.mdi-bootstrap', 'span.mdi.mdi-apple-ios'];
  this._swatchesData = [MoqupsClassicSwathes, MaterialSwatches, BootstrapSwatches, iOsSwatches];
  this._mode = 'swatches';
  this.$mode = SolidColorPicker_$('.as-solid-color-picker-mode', this).on('change', this.eventHandler.modeChange);
  /**
   * @type {import('absol-acomp/js/BScroller').default}
   */

  this.$swatchesTableCtn = SolidColorPicker_$('.as-solid-color-picker-swatches-ctn', this);
  /**
   * @type {import('./SwatchesTable').default}
   */

  this.$swatchesTable = SolidColorPicker_$('.as-solid-color-picker-swatches-ctn swatchestable', this).on('presscell', this.eventHandler.swatchesPressCell);
  this.$recentSwatchesTable = SolidColorPicker_$('.as-solid-color-picker-recent-swatches-ctn swatchestable', this).on('presscell', this.eventHandler.swatchesPressCell);
  this.$selectedDot = SolidColorPicker_('.as-solid-color-picker-selected-dot');
  js_QuickMenu.toggleWhenClick(this.$swatchesName, {
    anchor: [1, 6],
    getMenuProps: function getMenuProps() {
      return {
        extendClasses: 'as-solid-color-picker-swatches-name-menu',
        extendStyle: {
          'font-size': thisSP.getComputedStyleValue('font-size')
        },
        items: thisSP._swatchesNames.map(function (name, i) {
          return {
            text: name,
            value: thisSP._swatchesShortName[i],
            icon: thisSP._swatchesIcons[i]
          };
        })
      };
    },
    onSelect: function onSelect(item) {
      thisSP.swatches = item.value;
    }
  });
  this.$attachhook = SolidColorPicker_('attachhook').on('error', this.eventHandler.attached);
  this.$hex = SolidColorPicker_$('.as-solid-color-picker-color-hex', this).on('keyup', this.eventHandler.hexKeyup).on('change', this.eventHandler.hexChange);
  this.$opacity = SolidColorPicker_$('.as-solid-color-picker-color-opacity', this).on('change', this.eventHandler.opacityChange).on('keyup', this.eventHandler.opacityKeyUp);
  this.$selected = SolidColorPicker_$('.as-solid-color-picker-selected', this);
  this.$spectrum = SolidColorPicker_({
    tag: 'hanger',
    elt: SolidColorPicker_$('.as-solid-color-picker-spectrum', this)
  }).on('predrag', this.eventHandler.spectrumDrag).on('drag', this.eventHandler.spectrumDrag);
  this.$spectrumDot = SolidColorPicker_$('.as-solid-color-picker-spectrum-dot', this);
  this.$alpha = SolidColorPicker_({
    tag: 'hanger',
    elt: SolidColorPicker_$('.as-solid-color-picker-alpha', this)
  }).on('predrag', this.eventHandler.alphaDrag).on('drag', this.eventHandler.alphaDrag);
  this.$alphaDot = SolidColorPicker_$('.as-solid-color-picker-alpha-dot', this);
  this.$hue = SolidColorPicker_({
    tag: 'hanger',
    elt: SolidColorPicker_$('.as-solid-color-picker-hue', this)
  }).on('predrag', this.eventHandler.hueDrag).on('drag', this.eventHandler.hueDrag);
  this.$hueDot = SolidColorPicker_$('.as-solid-color-picker-hue-dot', this);
  this.$near = SolidColorPicker_$('.as-solid-color-picker-near', this).on('presscell', this.eventHandler.nearPressCell);
  this.$submitBtn = SolidColorPicker_$('.as-solid-color-picker-submit-btn', this).on('click', this.notifySubmit.bind(this));

  this._updateNear();
}

SolidColorPicker.tag = 'SolidColorPicker'.toLowerCase();

SolidColorPicker.render = function () {
  return SolidColorPicker_({
    attr: {
      tabindex: '1'
    },
    extendEvent: ['change', 'sizechange', 'submit'],
    "class": ['as-solid-color-picker', 'as-solid-color-picker-mode-swatches'],
    child: [{
      "class": 'as-solid-color-picker-header',
      child: [{
        "class": 'as-solid-color-picker-mode-ctn',
        child: {
          tag: 'buttonarray',
          "class": 'as-solid-color-picker-mode',
          props: {
            items: [{
              text: 'SWATCHES',
              value: 'swatches'
            }, {
              text: 'PICKER',
              value: 'picker'
            }]
          }
        }
      }]
    }, {
      "class": 'as-solid-color-picker-body',
      child: [{
        "class": ['as-solid-color-picker-swatches-select-ctn'],
        child: [{
          tag: 'span',
          child: {
            text: 'Color Scheme: '
          }
        }, {
          "class": 'as-solid-color-picker-swatches-name',
          tag: 'a',
          child: {
            text: 'Moqups Classic'
          }
        }, 'span.mdi.mdi-menu-down']
      }, {
        tag: 'bscroller',
        "class": ['as-solid-color-picker-swatches-ctn'],
        child: {
          tag: 'swatchestable',
          props: {
            data: MoqupsClassicSwathes
          }
        }
      }, {
        tag: 'spectrumcolor',
        "class": 'as-solid-color-picker-spectrum',
        child: '.as-solid-color-picker-spectrum-dot'
      }, {
        "class": 'as-solid-color-picker-hue',
        child: '.as-solid-color-picker-hue-dot'
      }, {
        "class": 'as-solid-color-picker-alpha',
        child: ['.as-solid-color-picker-alpha-color', '.as-solid-color-picker-alpha-dot']
      }, {
        tag: 'swatchestable',
        "class": 'as-solid-color-picker-near'
      }, {
        "class": 'as-solid-color-picker-recent-title',
        child: {
          text: 'RECENT COLOR'
        }
      }, {
        "class": ['as-solid-color-picker-recent-swatches-ctn'],
        child: {
          tag: 'swatchestable',
          props: {
            data: MoqupsClassicSwathes.slice(0, 2)
          }
        }
      }]
    }, {
      "class": 'as-solid-color-picker-footer',
      child: [{
        "class": 'as-solid-color-picker-selected-ctn',
        child: {
          "class": 'as-solid-color-picker-selected',
          style: {
            'background-color': '#ffffffff'
          }
        }
      }, {
        tag: 'flexiconinput',
        "class": 'as-solid-color-picker-color-hex',
        props: {
          value: 'ffffff',
          icon: '<svg viewBox="0 0 64 64" id="mq-icon-hex"><path d="M60 24v-6H46V4h-6v14H24V4h-6v14H4v6h14v16H4v6h14v14h6V46h16v14h6V46h14v-6H46V24h14zM40 40H24V24h16v16z"></path></svg>'
        }
      }, {
        tag: 'flexiconinput',
        "class": 'as-solid-color-picker-color-opacity',
        props: {
          icon: 'span.mdi.mdi-opacity',
          unit: '%',
          value: 100
        }
      }, {
        tag: 'flexiconbutton',
        "class": 'as-solid-color-picker-submit-btn',
        props: {
          icon: 'span.mdi.mdi-check-bold'
        }
      }]
    }]
  });
};

SolidColorPicker._settingKey = "absol_solid_color_setting"; //only Hex6

SolidColorPicker.setting = {
  recentColors: ['#ffffff', '#00ffff', '#0000ff', '#ffffff', '#000000']
};

SolidColorPicker._loadSetting = function () {
  var setting = localStorage.getItem(SolidColorPicker._settingKey);

  try {
    setting = JSON.parse(setting);
  } catch (e) {
    setting = {};
  }

  if (setting) {
    Object.assign(SolidColorPicker.setting, setting);
  }
};

SolidColorPicker._loadSetting();

SolidColorPicker._writeSetting = function () {
  localStorage.setItem(SolidColorPicker._settingKey, JSON.stringify(SolidColorPicker.setting));
  SolidColorPicker.updateInstancesSetting();
};

SolidColorPicker.pushInstances = function (elt) {
  var instances = SolidColorPicker.$instances;
  var aliveInstance = [];
  var instance;
  var found = false;

  while (instances.length > 0) {
    instance = instances.pop();

    if (instance.isDescendantOf(document.body)) {
      aliveInstance.push(instance);
    }

    ;
    if (instance == elt) found = true;
  }

  while (aliveInstance.length > 0) {
    instances.push(aliveInstance.pop());
  }

  if (!found) {
    instances.push(elt);
  }
};

SolidColorPicker.updateInstancesSetting = function () {
  var instances = SolidColorPicker.$instances;
  var aliveInstance = [];
  var instance;

  while (instances.length > 0) {
    instance = instances.pop();

    if (instance.isDescendantOf(document.body)) {
      aliveInstance.push(instance);
    }

    ;
  }

  while (aliveInstance.length > 0) {
    instance = aliveInstance.pop();
    instances.push(instance);
    instance.reloadSetting();
  }
};

SolidColorPicker.$instances = [];
/**
 * @param {Color} color
 */

SolidColorPicker.pushColorHistory = function (color) {
  var hex6Color = color.toString('hex6');
  var recentColors = SolidColorPicker.setting.recentColors;
  var index = recentColors.indexOf(hex6Color);

  if (index >= 0) {
    recentColors.splice(index, 1);
  }

  recentColors.unshift(hex6Color);

  while (recentColors.length > 24) {
    recentColors.pop();
  }

  setTimeout(SolidColorPicker._writeSetting.bind(SolidColorPicker), 1);
};

SolidColorPicker.prototype.reloadSetting = function () {
  var recentColors = SolidColorPicker.setting.recentColors.slice();
  var swatches = [];

  while (recentColors.length > 0) {
    swatches.push(recentColors.splice(0, 12));
  }

  this.$recentSwatchesTable.data = swatches;

  this._autoAdDotToCell();
};

SolidColorPicker.prototype._addDotToCell = function (cell, cellColor) {
  var shadowColor = cellColor.getContrastYIQ();
  shadowColor.rgba[3] = 0.7;
  this.$selectedDot.addStyle('box-shadow', 'inset 0px 0px 0.3em 0.125em ' + shadowColor.toString());
  cell.addChild(this.$selectedDot);
};

SolidColorPicker.prototype._autoAdDotToCell = function () {
  this.$selectedDot.remove();
  var cell;

  if (this._mode == 'swatches') {
    cell = this.$swatchesTable.getCell('#' + this._rgb);
  }

  if (cell) {
    this._addDotToCell(cell, this._value);

    this.$swatchesTableCtn.scrollInto(cell);
  } else {
    cell = this.$recentSwatchesTable.getCell('#' + this._rgb);

    if (cell) {
      this._addDotToCell(cell, this._value);

      this.$swatchesTableCtn.scrollInto(cell);
    }
  }
};
/**
 * Need to call first
 * @param {Color} color
 */


SolidColorPicker.prototype._setValue = function (color) {
  this._value = color;
  this.$selected.addStyle('background-color', color.toString());

  this._updateNear();
};

SolidColorPicker.prototype._setRGB = function (rgb) {
  this._rgb = rgb;
  this.$hex.value = this._rgb;
  this.$selectedDot.remove();

  this._autoAdDotToCell();
};

SolidColorPicker.prototype._setOpacityPercent = function (opacity) {
  this._opatictyPercent = opacity;
  this.$opacity.value = opacity;

  this._updateOpacityPercent();
};

SolidColorPicker.prototype._updateOpacityPercent = function () {
  this.$alphaDot.addStyle('left', 'calc(' + this._opatictyPercent + '% - 0.5em)');
};

SolidColorPicker.prototype._setHue = function (hue) {
  this._hue = hue;
  var spectrumColor = Color_Color.fromHSB(hue / 360, 1, 1);
  var hueDotColor = spectrumColor.getContrastYIQ();
  hueDotColor.rgba[3] = 0.7;
  this.$hueDot.addStyle({
    'box-shadow': 'inset 0px 0px 0.3em 0.125em ' + hueDotColor.toString(),
    left: 'calc(' + hue / 3.6 + '% - 0.5em)'
  });
  this.$spectrum.addStyle('background-color', spectrumColor.toString());

  this._updateSpectrumDot();
};

SolidColorPicker.prototype._setSatBrightness = function (sat, brightness) {
  this._sat = sat;
  this._brightness = brightness;

  this._updateSpectrumDot();
};

SolidColorPicker.prototype._updateSpectrumDot = function () {
  var dotColor = this._value.getContrastYIQ();

  dotColor.rgba[3] = 0.7;
  this.$spectrumDot.addStyle({
    bottom: 'calc(' + this._brightness + '% - 0.5em)',
    left: 'calc(' + this._sat + '% - 0.5em)',
    'box-shadow': 'inset 0px 0px 0.3em 0.125em ' + dotColor.toString()
  });
};

SolidColorPicker.prototype._updateNear = function () {
  var hsba = Color_Color.rgbaToHSBA(this._value.rgba);
  var sat = hsba[1];
  var hue = hsba[0];
  var brightness = hsba[2];
  var whiterColors = Array(7).fill(null).map(function (u, i) {
    return Color_Color.fromHSB(hue, sat * (7 - i) / 8, brightness);
  });
  var darkerColors = Array(7).fill(null).map(function (u, i) {
    return Color_Color.fromHSB(hue, sat, brightness * (7 - i) / 8);
  });
  var hueNearColors = [-5, -3, -2, 1, 2, 3, 5].map(function (u) {
    var nHue = hue + u / 40;
    if (nHue > 1) nHue -= 1;else if (nHue < 0) nHue += 1;
    return Color_Color.fromHSB(nHue, sat, brightness);
  });
  this.$near.data = [whiterColors, darkerColors, hueNearColors];
};

SolidColorPicker.prototype.notifyCanBeChanged = function () {
  var cHex8 = this._value.toHex8();

  if (cHex8 != this._lastEmitHex8) {
    this._lastEmitHex8 = cHex8;
    this.notifyChange();
  }
};

SolidColorPicker.prototype.notifyChange = function () {
  this.emit('change', {
    target: this,
    value: this.value,
    type: 'change'
  }, this);
};

SolidColorPicker.prototype.notifySizeCanBeChanged = function () {
  var bound = this.getBoundingClientRect();

  if (!this._lastSize || this._lastSize.width != bound.width || this._lastSize.height != bound.height) {
    this._lastSize = {
      width: bound.width,
      height: bound.height
    };
    this.notifySizeChange();
  }
};

SolidColorPicker.prototype.notifySizeChange = function () {
  this.emit('sizechange', {
    target: this,
    size: this._lastSize,
    type: 'sizechange'
  }, this);
};

SolidColorPicker.prototype.notifySubmit = function () {
  SolidColorPicker.pushColorHistory(this._value);
  this.emit('submit', {
    target: this,
    value: this._value,
    type: 'submit'
  }, this);
};

SolidColorPicker.property = {};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker.property.value = {
  /**
   *
   * @param {Color} value
   */
  set: function set(value) {
    value = value || 'transparent';

    if (!value.toHex8) {
      try {
        value = Color_Color.parse(value + '');
      } catch (e) {
        value = new Color_Color([0, 0, 0, 0]);
      }
    }

    this._lastEmitHex8 = value.toHex8();

    this._setValue(value);

    this._setRGB(value.toHex6());

    this._setOpacityPercent(Math.round(value.rgba[3] * 100));

    var hsba = Color_Color.rgbaToHSBA(value.rgba);

    this._setHue(hsba[0] * 360);

    this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);

    this._updateNear();
  },
  get: function get() {
    return this._value;
  }
};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker.property.swatches = {
  set: function set(value) {
    var index = this._swatchesShortName.indexOf(value);

    index = Math.max(index, 0);
    value = this._swatchesShortName[index];

    if (this._swatches != value) {
      this._swatches = value;
      this.$swatchesTable.data = this._swatchesData[index];
      this.$swatchesName.childNodes[0].data = this._swatchesNames[index];
    }

    this._autoAdDotToCell();
  },
  get: function get() {
    return this._swatches;
  }
};
SolidColorPicker.property.mode = {
  set: function set(value) {
    if (value === this._mode) return;
    this.removeClass('as-solid-color-picker-mode-' + this._mode);
    this._mode = value + '';
    this.addClass('as-solid-color-picker-mode-' + this._mode);
    this.$mode.value = this._mode;
    this.notifySizeCanBeChanged();
  },
  get: function get() {
    return this._mode;
  }
};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker.eventHandler = {};

SolidColorPicker.eventHandler.attached = function () {
  SolidColorPicker.pushInstances(this);
  this.reloadSetting();
};

SolidColorPicker.eventHandler.modeChange = function () {
  var value = this.$mode.value;
  if (value == this._mode) return;
  this.removeClass('as-solid-color-picker-mode-' + this._mode);
  this._mode = value + '';
  this.addClass('as-solid-color-picker-mode-' + this._mode);
  this.$mode.value = this._mode;
  this.notifySizeCanBeChanged();
};

SolidColorPicker.eventHandler.swatchesPressCell = function (event) {
  try {
    var value = Color_Color.parse(event.value + '');
    value.rgba[3] = this._opatictyPercent / 100;

    this._setValue(value);

    this._addDotToCell(event.cellElt, value);

    this._rgb = value.toHex6();
    this.$hex.value = this._rgb;
    var hsba = Color_Color.rgbaToHSBA(value.rgba);

    this._setHue(hsba[0] * 360);

    this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);
  } catch (e) {
    this.$selectedDot.removeStyle('box-shadow');
    this.$hex.value = 'ffffff';
  }

  this.notifyCanBeChanged();
};

SolidColorPicker.eventHandler.nearPressCell = function (event) {
  try {
    var value = Color_Color.parse(event.value + '');
    value.rgba[3] = this._opatictyPercent / 100;

    this._setValue(value);

    this._setRGB(value.toHex6());

    var hsba = Color_Color.rgbaToHSBA(value.rgba);

    this._setHue(hsba[0] * 360);

    this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);
  } catch (e) {
    this.$selectedDot.removeStyle('box-shadow');
    this.$hex.value = 'ffffff';
  }

  this.notifyCanBeChanged();
};

SolidColorPicker.eventHandler.hexKeyup = function () {
  try {
    var value = Color_Color.parse('#' + this.$hex.value.trim());

    if (value.rgba[3] == 1) {
      value.rgba[3] = this._opatictyPercent / 100;

      this._setValue(value);

      this._rgb = value.toHex6();

      this._autoAdDotToCell();

      var hsba = Color_Color.rgbaToHSBA(value.rgba);

      this._setHue(hsba[0] * 360);

      this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);

      this.notifyCanBeChanged();
    }
  } catch (e) {}
};

SolidColorPicker.eventHandler.hexChange = function () {
  if (this.$hex.value != this._rgb) this.$hex.value = this._rgb;
};

SolidColorPicker.eventHandler.opacityKeyUp = function () {
  var opacity = parseFloat(this.$opacity.value);

  if (!isNaN(opacity)) {
    opacity = Math.round(Math.max(0, Math.min(opacity, 100)));
    this._opatictyPercent = opacity;
    var color = Color_Color.parse('#' + this._rgb);
    color.rgba[3] = opacity / 100;

    this._setValue(color);

    this._updateOpacityPercent();

    this.notifyCanBeChanged();
  }
};

SolidColorPicker.eventHandler.opacityChange = function () {
  var opacity = this._opatictyPercent;

  if (this.$opacity.value != opacity) {
    this.$opacity.value = opacity + '';
  }
};

SolidColorPicker.eventHandler.alphaDrag = function (event) {
  var aBound = this.$alpha.getBoundingClientRect();
  var opacity = (event.clientX - aBound.left) * 100 / aBound.width;
  opacity = Math.max(0, Math.min(100, Math.round(opacity)));
  var color = Color_Color.parse('#' + this._rgb);
  color.rgba[3] = opacity / 100;

  this._setValue(color);

  this._setOpacityPercent(opacity);

  this.notifyCanBeChanged();
};

SolidColorPicker.eventHandler.hueDrag = function (event) {
  var hBound = this.$hue.getBoundingClientRect();
  var hue = (event.clientX - hBound.left) * 360 / hBound.width;
  hue = Math.max(0, Math.min(360, Math.round(hue)));
  var value = Color_Color.fromHSBA(hue / 360, this._sat / 100, this._brightness / 100, this._opatictyPercent / 100);

  this._setValue(value);

  this._setHue(hue);

  this._setRGB(value.toHex6());

  this.notifyCanBeChanged();
};

SolidColorPicker.eventHandler.spectrumDrag = function (event) {
  var sBound = this.$spectrum.getBoundingClientRect();
  var brightness = (sBound.bottom - event.clientY) * 100 / sBound.height;
  brightness = Math.max(0, Math.min(100, Math.round(brightness)));
  var sat = (event.clientX - sBound.left) * 100 / sBound.width;
  sat = Math.max(0, Math.min(100, Math.round(sat)));
  var value = Color_Color.fromHSBA(this._hue / 360, sat / 100, brightness / 100, this._opatictyPercent / 100);

  this._setValue(value);

  this._setSatBrightness(sat, brightness);

  this._setRGB(value.toHex6());

  this.notifyCanBeChanged();
};

SolidColorPicker.eventHandler.keydown = function (event) {
  if (event.key == 'Enter') {
    event.preventDefault();
    event.target.blur();
    this.notifySubmit();
  }
};

components_CPCore.install('solidcolorpicker', SolidColorPicker);
/* harmony default export */ const components_SolidColorPicker = (SolidColorPicker);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/dev.js








window.absol.coreDom.install({
  colorpicker: components_ColorPicker,
  colorpickerbutton: components_ColorPickerButton,
  solidcolorpicker: components_SolidColorPicker
});
// EXTERNAL MODULE: ./css/app.css
var css_app = __webpack_require__(9758);
// EXTERNAL MODULE: ./node_modules/gekkio/master/GKIOLiteral.js
var GKIOLiteral = __webpack_require__(2786);
var GKIOLiteral_default = /*#__PURE__*/__webpack_require__.n(GKIOLiteral);
// EXTERNAL MODULE: ./node_modules/gekkio/master/GKIOStruct.js
var GKIOStruct = __webpack_require__(5541);
var GKIOStruct_default = /*#__PURE__*/__webpack_require__.n(GKIOStruct);
// EXTERNAL MODULE: ./node_modules/buffer/index.js
var buffer = __webpack_require__(365);
;// CONCATENATED MODULE: ./js/program/Base.js

/***
 *
 * @param {RGB64App} app
 * @constructor
 */

function BaseProgram(app) {
  /***
   *
   * @type {RGB64App}
   */
  this.app = app;
  this.state = 'STOP';
}

BaseProgram.prototype.onStart = noop;
BaseProgram.prototype.onStop = noop;

BaseProgram.prototype.start = function () {
  if (this.state === 'STOP') {
    this.state = "RUNNING";
    this.onStart();
  }
};

BaseProgram.prototype.stop = function () {
  if (this.state === 'RUNNING') {
    this.state = "STOP";
    this.onStop();
  }
};

/* harmony default export */ const Base = (BaseProgram);
;// CONCATENATED MODULE: ./js/program/Clock.js



/***
 * @extends BaseProgram
 * @param {RGB64App} app
 * @constructor
 */

function Clock(app) {
  Base.call(this, app);
  this.inv = -1;
  this.xS = 0;
  this.yS = 0;
  this.yM = 0;
  this.xM = 0;
}

HTML5_OOP.mixClass(Clock, Base);

Clock.prototype.onStart = function () {
  this.inv = setInterval(this.tick.bind(this), 50);
};

Clock.prototype.onStop = function () {
  clearInterval(this.inv);
};

Clock.prototype.drawSecond = function () {
  var now = new Date();
  var sec = now.getSeconds();
  var hue = sec / 60;
  var color = Color_Color.fromHSL(hue, 1, 0.5);
  var dColor = Color_Color.fromHSL((hue + 0.5) % 1, 1, 0.5);
  var i = (Math.round((sec + now.getMilliseconds() / 1000) * 28 * 20 / 60) + 4) % 28;
  var x, y;

  if (i < 7) {
    x = i;
    y = 0;
  } else if (i < 14) {
    x = 7;
    y = i - 7;
  } else if (i < 21) {
    y = 7;
    x = 21 - i;
  } else {
    x = 0;
    y = 28 - i;
  }

  if (x !== this.xS || this.yS !== y) {
    this.app.setColor(7 - this.yS, 7 - this.xS, 'black');
    this.app.setColor(this.yS, this.xS, 'black');
    this.app.setColor(y, x, color);
    this.app.setColor(7 - y, 7 - x, dColor);
    this.app.flush();
    this.xS = x;
    this.yS = y;
  }
};

Clock.prototype.tick = function () {
  this.drawSecond();
};

/* harmony default export */ const program_Clock = (Clock);
;// CONCATENATED MODULE: ./js/program/RainBow.js



/***
 * @extends BaseProgram
 * @constructor
 */

function RainBow() {
  Base.apply(this, arguments);
}

HTML5_OOP.mixClass(RainBow, Base);

RainBow.prototype.onStart = function () {
  var color;

  for (var i = 0; i < 8; ++i) {
    color = Color_Color.fromHSL(i / 8, 1, 0.5);

    for (var j = 0; j < 8; ++j) {
      app.setColor(i, j, color);
    }
  }

  app.flush();
};

/* harmony default export */ const program_RainBow = (RainBow);
;// CONCATENATED MODULE: ./js/RGB64App.js









absol_acomp_ACore.install(components_ColorPickerButton);










window.Buffer = buffer/* Buffer */.lW;

(GKIOLiteral_default()).UInt8 = function (value) {
  if (!(this instanceof (GKIOLiteral_default()).UInt8)) return new (GKIOLiteral_default()).UInt8(value);
  this.value = parseInt(value) || 0;
};

(GKIOLiteral_default()).UInt8.prototype.toBuffer = function () {
  var res = Buffer.alloc(1);
  res.writeUInt8(this.value, 0);
  return res;
};

(GKIOLiteral_default()).UInt8.size = 1;

(GKIOLiteral_default()).UInt8.fromBuffer = function (buffer, offset) {
  offset = offset || 0;
  return new (GKIOLiteral_default()).UInt8(buffer.readUInt8(offset));
};

var CMDSet = GKIOStruct_default()().property((GKIOLiteral_default()).UInt8, 'i').property((GKIOLiteral_default()).UInt8, 'r').property((GKIOLiteral_default()).UInt8, 'g').property((GKIOLiteral_default()).UInt8, 'b').property((GKIOLiteral_default()).UInt8, 'flushed').declare();

function RGB64App() {
  AppPattern_Fragment.call(this);
  this.secondaryColor = 'black';
  /***
   *
   * @type {null|BaseProgram}
   */

  this.cProgram = null;
}

HTML5_OOP.mixClass(RGB64App, AppPattern_Fragment);

RGB64App.prototype.createView = function () {
  this.$view = ACore_({
    "class": 'r64-app',
    child: [{
      "class": 'r64-header',
      child: [{
        "class": 'r64-header-group',
        child: ['<span>Device: ', {
          tag: SelectMenu2.tag,
          "class": 'r64-device',
          props: {
            items: [{
              text: '---not found---',
              value: 'none'
            }]
          }
        }]
      }, {
        "class": 'r64-header-group',
        child: ['<span>Brush Color: ', {
          tag: components_ColorPickerButton.tag,
          "class": 'r64-brush-color',
          props: {
            value: 'red'
          },
          on: {
            change: this.ev_brushColorChange.bind(this)
          }
        }, "<span> / </span>", '<button class="as-color-picker-button r64-brush-secondary-color ">' + '<div class="as-color-picker-button-inner">' + '<div class="as-color-picker-button-inner-value" style="background-color: black;"></div>' + '</div>' + '</button>']
      }, {
        "class": 'r64-header-group',
        child: ['<span>Fill: ', {
          tag: components_ColorPickerButton.tag,
          "class": 'r64-fill-color',
          props: {
            value: 'black'
          },
          on: {
            change: this.ev_FillColorChange.bind(this)
          }
        }]
      }, {
        tag: js_FlexiconButton.tag,
        props: {
          text: "Clear",
          icon: 'span.mdi.mdi-eraser'
        },
        on: {
          click: this.clear.bind(this)
        }
      }, {
        "class": 'r64-header-group',
        style: {
          display: 'none'
        },
        child: ['<span>Program: ', {
          tag: SelectMenu2.tag,
          "class": 'r64-program',
          props: {
            value: 'none',
            items: [{
              text: '--none--',
              value: 'none'
            }].concat(Object.keys(this.programClasses).map(function (n) {
              return {
                text: n,
                value: n
              };
            }))
          },
          on: {
            change: this.ev_ProgramChange.bind(this)
          }
        }]
      }]
    }, {
      "class": 'r8-grid-ctn',
      child: {
        tag: js_Hanger.tag,
        "class": 'r8-grid',
        child: Array(8).fill(null).map(function (u, i) {
          return {
            "class": 'r8-led',
            style: {
              top: (i >> 3) * 12.5 + '%',
              left: i % 8 * 12.5 + '%'
            }
          };
        }),
        on: {
          predrag: this.ev_preDrag.bind(this),
          drag: this.ev_drag.bind(this)
        }
      }
    }]
  });
  this.$brushColor = $('.r64-brush-color', this.$view);
  this.$fillColor = $('.r64-fill-color', this.$view);
  this.$device = $('.r64-device', this.$view);
  this.$gridCtn = $('.r8-grid-ctn', this.$view);
  this.$grid = $('.r8-grid', this.$view);
  this.$leds = $$('.r8-led', this.$grid);
  this.$attachHook = ACore_('attachhook').addTo(this.$view);
  this.$attachHook.requestUpdateSize = this.updateSize.bind(this);
  this.$secondaryColor = $('.r64-brush-secondary-color', this.$view).on('click', this.swapBrushColor.bind(this));
  this.$secondaryColorBg = $('.as-color-picker-button-inner-value', this.$secondaryColor);
  this.$program = $('.r64-program', this.$view);
};

RGB64App.prototype.updateGridPosition = function () {
  var bound = this.$gridCtn.getBoundingClientRect();
  var w = bound.width;
  w -= -2 + 20;
  this.$grid.addStyle({
    width: w + 'px',
    height: (w - 20) / 8 + 'px'
  });
};

RGB64App.prototype.updateSize = function () {
  this.updateGridPosition();
};

RGB64App.prototype.onStart = function () {
  this.mqttCli = MQTT.connect('wss://absol.cf:9884');
  this.mqttCli.on('connect', this.ev_mqttConnect.bind(this));
  this.mqttCli.on('message', this.ev_mqttMessage.bind(this));
  this.updateSize();
  HTML5_ResizeSystem.add(this.$attachHook);
};

RGB64App.prototype.ledIdx = function (i, j) {
  return i * 8 + j;
};

RGB64App.prototype.setColor = function (i, j, color) {
  this.setColorByIdx(this.ledIdx(i, j), color);
};

RGB64App.prototype.setColorByIdx = function (idx, color) {
  if (this.$device.value === 'none') return;
  color = Color_Color.parse(color + '');

  if (idx >= 0 && idx < 8) {
    this.$leds[idx].addStyle('color', color.toString());
  } else {
    this.$leds.forEach(function (elt) {
      elt.addStyle('color', color.toString());
    });
  }

  var alpha = color.rgba[3];
  var r = color.rgba[0] * alpha * 255 << 0;
  var g = color.rgba[1] * alpha * 255 << 0;
  var b = color.rgba[2] * alpha * 255 << 0;
  var data = new CMDSet({
    i: idx,
    r: r,
    g: g,
    b: b,
    flushed: 1
  }).toBuffer();
  this.mqttCli.publish('duthienkt/led64/' + this.$device.value + '/set', data);
};

RGB64App.prototype.swapBrushColor = function () {
  var temp = this.$brushColor.value;
  this.$brushColor.value = this.secondaryColor;
  this.secondaryColor = temp;
  this.$secondaryColorBg.addStyle('background-color', this.secondaryColor + '');
};

RGB64App.prototype.flush = function () {// this.mqttCli.publish('duthienkt/led64/' + this.$device.value + '/rx', `[shw](==)\n`);
};

RGB64App.prototype.clear = function () {
  this.setColorByIdx(8, 'black');
};

RGB64App.prototype.ev_brushColorChange = function () {
  console.log(this.$brushColor.value);
};

RGB64App.prototype.ev_FillColorChange = function () {
  var color = Color_Color.parse(this.$fillColor.value + '');
  color.rgba[3] *= 0.93;
  this.setColorByIdx(8, color);
  this.flush();
};

RGB64App.prototype.ev_mqttConnect = function () {
  var self = this;
  this.mqttCli.subscribe('duthienkt/led64/online', function (err) {
    if (err) {
      Snackbar.show("Error: Subscribe duthienkt/led64/online");
    } else {
      Snackbar.show("Subscribe duthienkt/led64/online");
    }

    self.mqttCli.publish('duthienkt/led64/who_online', '0');
  });
};

RGB64App.prototype.ev_mqttMessage = function (topic, payload) {
  if (topic === 'duthienkt/led64/online') {
    this.ev_deviceOnline(payload.toString());
  }
};

RGB64App.prototype.ev_deviceOnline = function (device) {
  var items = this.$device.items;
  var idx = items.findIndex(function (it) {
    return it.value === device;
  });

  if (idx === -1) {
    Snackbar.show("Device: " + device);
    items = items.filter(function (it) {
      return it.value !== 'none';
    });
    items.push({
      text: device.replace(/_[0-9]+$/, ''),
      value: device
    });
    this.$device.items = items;
  }
};

RGB64App.prototype.findIdxLedByPost = function (pos) {
  var bound;

  for (var i = 0; i < this.$leds.length; ++i) {
    bound = Math_Rectangle.fromClientRect(this.$leds[i].getBoundingClientRect());
    if (bound.containsPoint(pos)) return i;
  }

  return -1;
};

RGB64App.prototype.ev_preDrag = function (event) {
  event.preventDefault();
  this._enteredLeds = {};
  var idx = this.findIdxLedByPost(event.currentPoint);
  if (idx < 0) return;
  this._enteredLeds[idx] = true;
  this.setColorByIdx(idx, this.$brushColor.value);
  this.flush();
};

RGB64App.prototype.ev_drag = function (event) {
  event.preventDefault();
  var idx = this.findIdxLedByPost(event.currentPoint);
  if (idx < 0) return;
  if (this._enteredLeds[idx]) return;
  this._enteredLeds[idx] = true;
  this.setColorByIdx(idx, this.$brushColor.value);
  this.flush();
};

RGB64App.prototype.programClasses = {
  Clock: program_Clock,
  RainBow: program_RainBow
};

RGB64App.prototype.ev_ProgramChange = function () {
  if (this.cProgram) {
    this.cProgram.stop();
    this.cProgram = null;
  }

  var clazz = this.programClasses[this.$program.value];

  if (clazz) {
    this.cProgram = new clazz(this);
    this.cProgram.start();
  }
};

/* harmony default export */ const js_RGB64App = (RGB64App);
;// CONCATENATED MODULE: ./dev.js


window.r64 = {};
r64.RGB64App = js_RGB64App;
})();

/******/ })()
;

VaKeR 2022